import { RtDropdown } from '@dpa/react-dropdown'; import { RtFormFieldSizeUI, RtFormFieldText } from '@dpa/react-form-field-text'; import { RtBaseProps, useRtBaseProps } from '@dpa/react-hoc'; import { RtFormFieldChevronShowContext } from '@dpa/react-form-field-text'; import { ContextType, ForwardedRef, forwardRef, useCallback, useImperativeHandle, useMemo, useState, } from 'react'; import { RtFormFieldComboboxProps } from './rt-form-field-combobox.types'; export const RtFormFieldCombobox = forwardRef(function RtFormFieldCombobox( props: RtFormFieldComboboxProps & RtBaseProps, ref: ForwardedRef ) { const { children, use, readonly = true, modifier, dropdownProps, formFieldProps, value, size, ui, formFieldComponent: FormFieldComponent, } = props; const baseProps = useRtBaseProps(props, '0.2.2'); const [isOpen, setIsOpen] = useState(false); const toggleIsOpen = useCallback(() => { setIsOpen((v) => !v); }, [setIsOpen]); const openDropdown = useCallback(() => { setIsOpen(true); }, [setIsOpen]); const closeDropdown = useCallback(() => { setIsOpen(false); }, [setIsOpen]); const onShowChange = useCallback( (show: boolean) => { setIsOpen(show); dropdownProps?.onShowChange?.(show); }, [setIsOpen, dropdownProps] ); useImperativeHandle(props.apiRef, () => ({ closeDropdown, openDropdown, toggleIsOpen, })); const chevronContext: ContextType = useMemo(() => { return { isVisible: true, isRotated: isOpen, rotate: toggleIsOpen }; }, [isOpen, toggleIsOpen]); const FormField = FormFieldComponent || RtFormFieldText; return ( ); }); RtFormFieldCombobox.displayName = 'RtFormFieldCombobox';