import { AutoComplete, Option, Chip, Box, Skeleton } from '@rocket.chat/fuselage'; import { useDebouncedValue } from '@rocket.chat/fuselage-hooks'; import { RoomAvatar } from '@rocket.chat/ui-avatar'; import { useEndpoint } from '@rocket.chat/ui-contexts'; import { keepPreviousData, useQuery } from '@tanstack/react-query'; import type { ReactElement, ComponentProps } from 'react'; import { memo, useMemo, useState } from 'react'; const generateQuery = ( term = '', ): { selector: string; } => ({ selector: JSON.stringify({ name: term }) }); type RoomAutoCompleteProps = Omit, 'filter'> & { readOnly?: boolean; }; const RoomAutoCompleteMultiple = ({ value, onChange, ...props }: RoomAutoCompleteProps): ReactElement => { const [filter, setFilter] = useState(''); const filterDebounced = useDebouncedValue(filter, 300); const autocomplete = useEndpoint('GET', '/v1/rooms.autocomplete.channelAndPrivate'); const result = useQuery({ queryKey: ['rooms.autocomplete.channelAndPrivate', filterDebounced], queryFn: () => autocomplete(generateQuery(filterDebounced)), placeholderData: keepPreviousData, }); const options = useMemo( () => result.isSuccess ? result.data.items.map(({ fname, name, _id, avatarETag, t }) => ({ value: _id, label: { name: fname || name, avatarETag, type: t }, })) : [], [result.data?.items, result.isSuccess], ); if (result.isPending) { return ; } return ( ( {label?.name} )} renderItem={({ value, label, ...props }): ReactElement => (