import React, { useEffect, useState } from 'react' import * as RadixSelect from '@radix-ui/react-select' import classNames from 'classnames' import Overlay from '~components/Overlay' import ArrowIcon from '~public/icons/Arrow.svg' import './index.scss' // Props interface Props extends React.DetailedHTMLProps< React.SelectHTMLAttributes, HTMLSelectElement > { altText?: string iconSrc?: string open: boolean trigger?: React.ReactNode children?: React.ReactNode onOpenChange?: () => void onValueChange?: (value: string) => void onClose?: () => void triggerClass?: string overlayVisible?: boolean } const Select = React.forwardRef(function Select( props: Props, forwardedRef ) { const [open, setOpen] = useState(false) const [value, setValue] = useState('') const triggerClasses = classNames( { SelectTrigger: true, Disabled: props.disabled, }, props.triggerClass ) useEffect(() => { setOpen(props.open) }, [props.open]) useEffect(() => { if (props.value && props.value !== '') setValue(`${props.value}`) else setValue('') }, [props.value]) function onValueChange(newValue: string) { setValue(`${newValue}`) if (props.onValueChange) props.onValueChange(newValue) } function onCloseAutoFocus() { setOpen(false) if (props.onClose) props.onClose() } function onEscapeKeyDown() { setOpen(false) if (props.onClose) props.onClose() } function onPointerDownOutside() { setOpen(false) if (props.onClose) props.onClose() } return ( {props.iconSrc ? {props.altText} : ''} {!props.disabled ? ( ) : ( '' )} <> {props.children} ) }) Select.defaultProps = { overlayVisible: true, } export default Select