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>
</SheetTitle>
<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>
</SheetDescription>
</SheetHeader>
@ -65,8 +65,8 @@ export default function SearchResults({
</div>
) : (
<div className="p-4 pt-0 flex gap-2">
{tagResults.map((tagResult) => (
<Link to={`/tags/${tagResult}`}>
{tagResults?.map((tagResult, i) => (
<Link to={`/tags/${tagResult}`} key={i}>
<Badge className="hover:bg-muted" variant="outline">
{tagResult}
</Badge>

View file

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