import { c, classy, m, PopoverProps, SelectProps } from '@onfido/castor'; import React, { ForwardedRef, SyntheticEvent, useCallback, useEffect, useState, } from 'react'; import { useForwardedRef, withRef } from '../../../utils'; import { OptionList, OptionListEvent } from '../../option-list/option-list'; import { OptionListInit } from '../../option-list/options-list-init'; import { Popover } from '../../popover/popover'; import { NativeSelect, NativeSelectProps } from '../native'; export interface CustomSelectProps extends SelectProps, NativeSelectProps, PopoverProps { open?: boolean; onOpenChange?: (open: boolean) => void; selectedIcon?: JSX.Element; } export const CustomSelect = withRef(function CustomSelect( { id, align = 'start', borderless, children, className, defaultValue, name, open: isOpen, position = 'bottom', onBlur, onClick, onKeyUp, onOpenChange, selectedIcon, value, ...restProps }: CustomSelectProps, ref: ForwardedRef ) { const selectRef = useForwardedRef(ref); const [selected, setSelected] = useState({}); useEffect(() => { if (selected.option) setSelected({ value }); }, [value]); const propagateOnChange = useCallback(() => { // propagate `onChange` manually because