Source identity
| Field | Recorded value |
|---|---|
| Source type | GitHub source |
| Original record | Janady13/llms-txt-hub / apps/web/hooks/use-search.ts |
| Date | Not specified in source |
| Repository | Janady13/llms-txt-hub |
| Revision | e0f4bf978d4df168369c7601d9c5f5ea89e84377 |
| Branch | main |
| Path or archive member | apps/web/hooks/use-search.ts |
| Original SHA-256 | baea7e9154c38ae7edfbb6dfd8d0f9fa7e8bc930fc62e65f93950af4cc6debf6 |
| Git blob SHA | 6426d61db53c4952d2f8bb6443d4504933f06604 |
| Reading-copy SHA-256 | baea7e9154c38ae7edfbb6dfd8d0f9fa7e8bc930fc62e65f93950af4cc6debf6 |
Recovered source transcript
Download complete source text ↓42 lines · 1.1 KB
'use client'
import { useDebounce } from '@thedaviddias/hooks/use-debounce'
import { useRouter } from 'next/navigation'
import type React from 'react'
import { useCallback, useState } from 'react'
import { getRoute } from '@/lib/routes'
/**
* Hook that manages search query state and navigation to search results
*/
export function useSearch() {
const [searchQuery, setSearchQuery] = useState('')
const debouncedSearchQuery = useDebounce(searchQuery, 300)
const router = useRouter()
const handleSearch = useCallback(
async (searchQuery: string): Promise<void> => {
if (!searchQuery.trim()) return Promise.resolve()
return new Promise<void>(resolve => {
const searchUrl = `${getRoute('search')}?q=${encodeURIComponent(searchQuery)}`
router.push(searchUrl)
// Use setTimeout to give the router time to start the navigation
// This is a workaround since Next.js router doesn't provide a callback
setTimeout(() => {
resolve()
}, 100)
})
},
[router]
)
return {
searchQuery,
setSearchQuery,
debouncedSearchQuery,
handleSearch
}
}