manifold/web/hooks/use-sort-and-query-params.tsx
2022-01-23 13:34:03 -06:00

42 lines
803 B
TypeScript

import { useRouter } from 'next/router'
export type Sort =
| 'creator'
| 'tag'
| 'newest'
| 'most-traded'
| 'close-date'
| 'resolved'
| 'all'
export function useQueryAndSortParams(options?: { defaultSort: Sort }) {
const router = useRouter()
const { s: sort, q: query } = router.query as {
q?: string
s?: Sort
}
const setSort = (sort: Sort | undefined) => {
router.query.s = sort
router.push(router, undefined, { shallow: true })
}
const setQuery = (query: string | undefined) => {
if (query) {
router.query.q = query
} else {
delete router.query.q
}
router.push(router, undefined, { shallow: true })
}
return {
sort: sort ?? options?.defaultSort ?? 'creator',
query: query ?? '',
setSort,
setQuery,
}
}