Newer
Older
import React, { Fragment, useState } from "react";
import { InstantSearch, Configure } from "react-instantsearch-dom";
import Autocomplete from "./search/autocomplete";
import { Dialog, Transition } from "@headlessui/react";
import { SearchIcon } from "@heroicons/react/outline";
import typesenseAdapter from "../../typesense";
interface Props {}
const Search = (props: Props) => {
const searchClient = typesenseAdapter.searchClient;
const [query, setQuery] = useState("");
const [searchBarActive, setSearchBarActive] = useState(false);
const [open, setOpen] = useState(false);
return (
<>
<section className="my-4 flex w-full">
<button
onClick={() => {
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
}}
type="submit"
className="z-50 px-4 outline-none focus:outline-none active:outline-none"
>
<SearchIcon
className="h-6 w-6 dark:text-gray-200"
aria-hidden="true"
/>
</button>
</section>
<Transition.Root
show={open}
as={Fragment}
afterLeave={() => setQuery("")}
>
<Dialog
as="div"
className="fixed inset-0 z-10 overflow-y-auto p-4 sm:p-6 md:p-20"
onClose={setOpen}
>
<Transition.Child
as={Fragment}
enter="ease-out duration-300"
enterFrom="opacity-0"
enterTo="opacity-100"
leave="ease-in duration-300"
leaveFrom="opacity-100"
leaveTo="opacity-0"
>
<Dialog.Overlay className="fixed inset-0 bg-gray-500 bg-opacity-25 transition-opacity blur" />
</Transition.Child>
<Transition.Child
as={Fragment}
enter="ease-out duration-300"
enterFrom="opacity-0 scale-95"
enterTo="opacity-100 scale-100"
leave="ease-in duration-200"
leaveFrom="opacity-100 scale-100"
leaveTo="opacity-0 scale-95"
>
<section className="my-4 flex justify-center">
<InstantSearch searchClient={searchClient} indexName="pages_v1">
<Configure hitsPerPage={5} />
<Autocomplete
// @ts-ignore
onSuggestionSelected={setQuery}
onSuggestionCleared={setQuery}
/>
<button
type="submit"
className="-mx-10 z-50 outline-none focus:outline-none active:outline-none dark:color-gray-100 dark:border-gray-100"
>
<SearchIcon
className="h-6 w-6 dark:color-gray-100 dark:border-gray-100"
aria-hidden="true"
/>
</button>
</InstantSearch>
</section>
</Transition.Child>
</Dialog>
</Transition.Root>
</>