({
open,
setOpen,
className
}: {
open: boolean;
setOpen: (open: boolean) => void;
className?: string;
})
| 318 | }); |
| 319 | |
| 320 | function SearchDialog({ |
| 321 | open, |
| 322 | setOpen, |
| 323 | className |
| 324 | }: { |
| 325 | open: boolean; |
| 326 | setOpen: (open: boolean) => void; |
| 327 | className?: string; |
| 328 | }) { |
| 329 | let formRef = useRef<React.ElementRef<'form'>>(null); |
| 330 | let panelRef = useRef<React.ElementRef<'div'>>(null); |
| 331 | let inputRef = useRef<React.ElementRef<typeof SearchInput>>(null); |
| 332 | let { autocomplete, autocompleteState } = useAutocomplete({ |
| 333 | close() { |
| 334 | setOpen(false); |
| 335 | } |
| 336 | }); |
| 337 | let pathname = usePathname(); |
| 338 | let searchParams = useSearchParams(); |
| 339 | |
| 340 | useEffect(() => { |
| 341 | setOpen(false); |
| 342 | }, [pathname, searchParams, setOpen]); |
| 343 | |
| 344 | useEffect(() => { |
| 345 | if (open) { |
| 346 | return; |
| 347 | } |
| 348 | |
| 349 | function onKeyDown(event: KeyboardEvent) { |
| 350 | if (event.key === 'k' && (event.metaKey || event.ctrlKey)) { |
| 351 | event.preventDefault(); |
| 352 | setOpen(true); |
| 353 | } |
| 354 | } |
| 355 | |
| 356 | window.addEventListener('keydown', onKeyDown); |
| 357 | |
| 358 | return () => { |
| 359 | window.removeEventListener('keydown', onKeyDown); |
| 360 | }; |
| 361 | }, [open, setOpen]); |
| 362 | |
| 363 | return ( |
| 364 | <Transition |
| 365 | show={open} |
| 366 | as={Fragment} |
| 367 | afterLeave={() => autocomplete.setQuery('')} |
| 368 | > |
| 369 | <Dialog |
| 370 | onClose={setOpen} |
| 371 | className={clsx('fixed inset-0 z-50', className)} |
| 372 | > |
| 373 | <TransitionChild |
| 374 | as={Fragment} |
| 375 | enter="ease-out duration-300" |
| 376 | enterFrom="opacity-0" |
| 377 | enterTo="opacity-100" |
nothing calls this directly
no test coverage detected