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