fix: block empty tag searches

This commit is contained in:
Thomas Bishop 2025-12-12 17:33:24 +00:00
parent 95d6275d4e
commit e6a15c6b3d
2 changed files with 68 additions and 65 deletions

View file

@ -39,7 +39,7 @@ export default function SearchResults({
<div>Search Results</div> <div>Search Results</div>
</SheetTitle> </SheetTitle>
<SheetDescription className="flex flex-row gap-3"> <SheetDescription className="flex flex-row gap-3">
<div className="text-foreground">Search term:</div> <span className="text-foreground">Search term:</span>
<span className="font-medium text-foreground">{searchParams}</span> <span className="font-medium text-foreground">{searchParams}</span>
</SheetDescription> </SheetDescription>
</SheetHeader> </SheetHeader>
@ -65,8 +65,8 @@ export default function SearchResults({
</div> </div>
) : ( ) : (
<div className="p-4 pt-0 flex gap-2"> <div className="p-4 pt-0 flex gap-2">
{tagResults.map((tagResult) => ( {tagResults?.map((tagResult, i) => (
<Link to={`/tags/${tagResult}`}> <Link to={`/tags/${tagResult}`} key={i}>
<Badge className="hover:bg-muted" variant="outline"> <Badge className="hover:bg-muted" variant="outline">
{tagResult} {tagResult}
</Badge> </Badge>

View file

@ -7,71 +7,74 @@ import SearchInput from "@/components/SearchInput"
import SearchResults from "@/components/SearchResults" import SearchResults from "@/components/SearchResults"
export default function Search() { export default function Search() {
const location = useLocation() const location = useLocation()
const inputRef = useRef(null) const inputRef = useRef(null)
const [sheetOpen, setSheetOpen] = useState(false) const [sheetOpen, setSheetOpen] = useState(false)
const [tagResults, setTagResults] = useState([]) const [tagResults, setTagResults] = useState([])
const [searchParams, setSearchParams] = useState(null) const [searchParams, setSearchParams] = useState(null)
const queryClient = useQueryClient() const queryClient = useQueryClient()
const tags = queryClient.getQueryData(["tag_list"])?.["data"] const tags = queryClient.getQueryData(["tag_list"])?.["data"]
const form = useForm({ const form = useForm({
defaultValues: { defaultValues: {
search: "", search: "",
}, },
onSubmit: ({ value }) => { onSubmit: ({ value }) => {
setSearchParams(value.search) setSearchParams(value.search)
setSheetOpen(true) setSheetOpen(true)
setTagResults( console.log(value.search)
tags?.filter((tag) => tag.toLowerCase().includes(value.search.toLowerCase())), setTagResults(
) value.search !== ""
}, ? tags?.filter((tag) => tag.toLowerCase().includes(value.search.toLowerCase()))
}) : null,
)
},
})
const { const {
data: entriesResults, data: entriesResults,
isLoading, isLoading,
error, error,
} = useQuery({ } = useQuery({
queryKey: ["search_results", searchParams], queryKey: ["search_results", searchParams],
queryFn: () => api.get(`/search/${searchParams}`).then((res) => res.data), queryFn: () => api.get(`/search/${searchParams}`).then((res) => res.data),
enabled: !!searchParams, enabled: !!searchParams,
}) })
// Force Sheet close on renavigation (i.e search result selection) // Force Sheet close on renavigation (i.e search result selection)
useEffect(() => { useEffect(() => {
if (sheetOpen) { if (sheetOpen) {
setSheetOpen(false) setSheetOpen(false)
form.reset() form.reset()
setSearchParams(null) setSearchParams(null)
} }
}, [location.pathname]) }, [location.pathname])
useEffect(() => { useEffect(() => {
const handleKeyDown = (e) => { const handleKeyDown = (e) => {
if ((e.ctrlKey || e.metaKey) && e.key === "k") { if ((e.ctrlKey || e.metaKey) && e.key === "k") {
e.preventDefault() e.preventDefault()
inputRef.current?.focus() inputRef.current?.focus()
} }
} }
document.addEventListener("keydown", handleKeyDown) document.addEventListener("keydown", handleKeyDown)
return () => document.removeEventListener("keydown", handleKeyDown) return () => document.removeEventListener("keydown", handleKeyDown)
}, []) }, [])
return ( return (
<> <>
<SearchInput form={form} inputRef={inputRef} /> <SearchInput form={form} inputRef={inputRef} />
<SearchResults <SearchResults
searchParams={searchParams} searchParams={searchParams}
form={form} form={form}
sheetOpen={sheetOpen} sheetOpen={sheetOpen}
entriesResults={entriesResults} entriesResults={entriesResults}
tagResults={tagResults} tagResults={tagResults}
loading={isLoading} loading={isLoading}
error={error} error={error}
setSheetOpen={setSheetOpen} setSheetOpen={setSheetOpen}
setSearchParams={setSearchParams} setSearchParams={setSearchParams}
/> />
</> </>
) )
} }