import { AutoComplete, Box, OptionAvatar, Option, OptionContent, Chip, OptionDescription } from '@rocket.chat/fuselage'; import { useDebouncedValue } from '@rocket.chat/fuselage-hooks'; import { UserAvatar } from '@rocket.chat/ui-avatar'; import { useEndpoint } from '@rocket.chat/ui-contexts'; import { useQuery } from '@tanstack/react-query'; import type { ComponentProps, ReactElement } from 'react'; import { memo, useMemo, useState } from 'react'; const query = ( term = '', ): { selector: string; } => ({ selector: JSON.stringify({ term }) }); type UserAutoCompleteMultipleProps = Omit, 'filter'>; // TODO: useDisplayUsername const UserAutoCompleteMultiple = ({ onChange, ...props }: UserAutoCompleteMultipleProps): ReactElement => { const [filter, setFilter] = useState(''); const debouncedFilter = useDebouncedValue(filter, 1000); const usersAutoCompleteEndpoint = useEndpoint('GET', '/v1/users.autocomplete'); const { data } = useQuery({ queryKey: ['usersAutoComplete', debouncedFilter], queryFn: async () => usersAutoCompleteEndpoint(query(debouncedFilter)), }); const options = useMemo(() => data?.items.map((user) => ({ value: user.username, label: user.name })) || [], [data]); return ( ( {label} )} renderItem={({ value, label, ...props }): ReactElement => ( )} options={options} /> ); }; export default memo(UserAutoCompleteMultiple);