import { PaginatedSelectFiltered } from '@rocket.chat/fuselage'; import { useDebouncedValue, useStableCallback } from '@rocket.chat/fuselage-hooks'; import type { ComponentProps } from 'react'; import { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import type { UnitOption } from '../hooks/useUnitsList'; import { useUnitsList } from '../hooks/useUnitsList'; export type AutoCompleteUnitProps = Omit< ComponentProps, 'filter' | 'setFilter' | 'options' | 'endReached' | 'renderItem' > & { haveNone?: boolean; value: string | undefined; onChange: (value: string) => void; onLoadItems?: (list: UnitOption[]) => void; }; const AutoCompleteUnit = ({ id, value, disabled = false, error, placeholder, haveNone, onChange, onLoadItems = () => undefined, }: AutoCompleteUnitProps) => { const { t } = useTranslation(); const [unitsFilter, setUnitsFilter] = useState(''); const debouncedUnitFilter = useDebouncedValue(unitsFilter, 500); const { data: unitsList, fetchNextPage } = useUnitsList({ filter: debouncedUnitFilter, haveNone }); const handleLoadItems = useStableCallback(onLoadItems); useEffect(() => { handleLoadItems(unitsList); }, [handleLoadItems, unitsList]); return ( void} value={value} width='100%' endReached={() => fetchNextPage()} /> ); }; export default AutoCompleteUnit;