import { AutoComplete, Option, Box, Chip, Options } from '@rocket.chat/fuselage'; import { useDebouncedValue } from '@rocket.chat/fuselage-hooks'; import { useEndpoint } from '@rocket.chat/ui-contexts'; import { useQuery } from '@tanstack/react-query'; import type { ComponentProps, ReactElement } from 'react'; import React, { memo, useMemo, useState } from 'react'; import UserAvatar from '../avatar/UserAvatar'; const query = ( term = '', conditions = {}, ): { selector: string; } => ({ selector: JSON.stringify({ term, conditions }) }); type UserAutoCompleteProps = Omit, 'filter'> & { conditions?: { [key: string]: unknown }; }; const UserAutoComplete = ({ value, onChange, ...props }: UserAutoCompleteProps): ReactElement => { const { conditions = {} } = props; const [filter, setFilter] = useState(''); const debouncedFilter = useDebouncedValue(filter, 1000); const usersAutoCompleteEndpoint = useEndpoint('GET', '/v1/users.autocomplete'); const { data } = useQuery(['usersAutoComplete', debouncedFilter, conditions], async () => usersAutoCompleteEndpoint(query(debouncedFilter, conditions)), ); const options = useMemo(() => data?.items.map((user) => ({ value: user.username, label: user.name || user.username })) || [], [data]); return ( ( {label} )} renderItem={({ value, label, ...props }): ReactElement => (