import type { OverlayTriggerAria } from '@react-aria/overlays'; import type { OverlayTriggerState } from '@react-stately/overlays'; import { Box, Tile } from '@rocket.chat/fuselage'; import { useStableCallback, useOutsideClick } from '@rocket.chat/fuselage-hooks'; import { CustomScrollbars } from '@rocket.chat/ui-client'; import { useRef } from 'react'; import { useFormContext } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import NavBarSearchItemSkeleton from './NavBarSearchItemSkeleton'; import NavBarSearchNoResults from './NavBarSearchNoResults'; import NavBarSearchRow from './NavBarSearchRow'; import { useSearchItems } from './hooks/useSearchItems'; import { useListboxNavigation } from './hooks/useSearchNavigation'; import ResultsLiveRegion from '../../components/ResultsLiveRegion'; export type NavBarSearchListBoxProps = { state: OverlayTriggerState; overlayProps: OverlayTriggerAria['overlayProps']; }; const NavBarSearchListBox = ({ state, overlayProps }: NavBarSearchListBoxProps) => { const { t } = useTranslation(); const containerRef = useRef(null); const handleKeyDown = useListboxNavigation(state); useOutsideClick([containerRef], state.close); const { resetField, watch } = useFormContext(); const { filterText } = watch(); const handleSelect = useStableCallback(() => { state.close(); resetField('filterText'); }); const { items, isLoading } = useSearchItems(filterText); return (
{items.length === 0 && !isLoading && } {items.length > 0 && ( {filterText ? t('Results') : t('Recent')} )} {items.map((item) => ( ))} {isLoading && Array.from({ length: 4 }, (_, index) => )}
); }; export default NavBarSearchListBox;