import { PaginatedSelectFiltered } from '@rocket.chat/fuselage'; import { useDebouncedValue } from '@rocket.chat/fuselage-hooks'; import type { ReactElement } from 'react'; import React, { memo, useMemo, useState } from 'react'; import { useRecordList } from '../hooks/lists/useRecordList'; import { AsyncStatePhase } from '../lib/asyncState'; import { useAgentsList } from './Omnichannel/hooks/useAgentsList'; type AutoCompleteAgentProps = { value: string; error?: string; placeholder?: string; onChange: (value: string) => void; haveAll?: boolean; haveNoAgentsSelectedOption?: boolean; }; const AutoCompleteAgent = ({ value, error, placeholder, onChange, haveAll = false, haveNoAgentsSelectedOption = false, }: AutoCompleteAgentProps): ReactElement => { const [agentsFilter, setAgentsFilter] = useState(''); const debouncedAgentsFilter = useDebouncedValue(agentsFilter, 500); const { itemsList: AgentsList, loadMoreItems: loadMoreAgents } = useAgentsList( useMemo( () => ({ text: debouncedAgentsFilter, haveAll, haveNoAgentsSelectedOption }), [debouncedAgentsFilter, haveAll, haveNoAgentsSelectedOption], ), ); const { phase: agentsPhase, itemCount: agentsTotal, items: agentsItems } = useRecordList(AgentsList); const sortedByName = agentsItems.sort((a, b) => { if (a.label > b.label) { return 1; } if (a.label < b.label) { return -1; } return 0; }); return ( void} options={sortedByName} data-qa='autocomplete-agent' endReached={ agentsPhase === AsyncStatePhase.LOADING ? (): void => undefined : (start): void => loadMoreAgents(start, Math.min(50, agentsTotal)) } /> ); }; export default memo(AutoCompleteAgent);