'use client' import { useMemo } from 'react' import { useSearchParams } from 'next/navigation' import qs from 'qs' import { coerceToString } from '@/helpers' /** * Parses the current URL query string into a flat object (supports filters[field] keys). */ export default function useQueryParams(): Record { const searchParams = useSearchParams() return useMemo(() => { const query = searchParams.toString() if (!query) { return {} } const parsed = qs.parse(query, { ignoreQueryPrefix: true, allowDots: true, }) const flat: Record = {} for (const [key, value] of Object.entries(parsed)) { if (value == null) { continue } if (typeof value === 'object' && !Array.isArray(value)) { for (const [nestedKey, nestedValue] of Object.entries(value)) { if (nestedValue == null) { continue } flat[`${key}[${nestedKey}]`] = coerceToString(nestedValue) } continue } if (Array.isArray(value)) { flat[key] = value.map(String).join(',') continue } flat[key] = coerceToString(value) } return flat }, [searchParams]) }