UNPKG

use-push-router

Version:

A custom hook that simplifies modifying the search params in Next.js

1 lines 6.27 kB
{"version":3,"sources":["../src/update-search-params.ts","../src/use-modifiable-search-params.ts","../src/use-push-route.ts","../src/url-search-params-to-object.ts"],"names":["useSearchParams","useCallback","useMemo","useRouter","usePathname","updateSearchParams"],"mappings":"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","file":"index.cjs","sourcesContent":["import { UpdateSearchParamsArgs } from './types';\n\nexport const updateSearchParams =\n (currentSearchParams: URLSearchParams) =>\n (params: UpdateSearchParamsArgs) => {\n const newSearchParams = new URLSearchParams(currentSearchParams);\n if ('add' in params && params.add) {\n Object.entries(params.add).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.forEach((v) => {\n newSearchParams.append(key, v);\n });\n } else {\n newSearchParams.append(key, value);\n }\n });\n }\n if ('remove' in params && params.remove) {\n Object.entries(params.remove).forEach(([key, value]) => {\n if (typeof value === 'undefined') {\n newSearchParams.delete(key);\n } else if (Array.isArray(value)) {\n value.forEach((v) => {\n newSearchParams.delete(key, v);\n });\n } else {\n newSearchParams.delete(key, value);\n }\n });\n }\n if ('set' in params && params.set) {\n Object.entries(params.set).forEach(([key, value]) => {\n newSearchParams.delete(key);\n if (Array.isArray(value)) {\n value.forEach((v) => {\n newSearchParams.append(key, v);\n });\n } else {\n newSearchParams.set(key, value);\n }\n });\n }\n return newSearchParams;\n };\n","import { useSearchParams } from 'next/navigation';\nimport { updateSearchParams } from './update-search-params';\nimport { useCallback, useMemo } from 'react';\n\nexport const useModifiableSearchParams = () => {\n const searchParams = useSearchParams();\n\n const update = useCallback(updateSearchParams(searchParams), [searchParams]);\n return useMemo(\n () => ({\n searchParams,\n updateSearchParams: update,\n }),\n [searchParams, update],\n );\n};\n","import { usePathname, useRouter } from 'next/navigation';\nimport { useModifiableSearchParams } from './use-modifiable-search-params';\nimport { UpdateSearchParamsArgs } from './types';\nimport { useCallback, useMemo } from 'react';\n\nexport const usePushRoute = () => {\n const router = useRouter();\n const pathname = usePathname();\n const { updateSearchParams, searchParams } = useModifiableSearchParams();\n\n const pushSearchParams = useCallback(\n (params: UpdateSearchParamsArgs) => {\n const newSearchParams = updateSearchParams(params);\n router.push(`${pathname}?${newSearchParams.toString()}`);\n },\n [pathname, router, updateSearchParams],\n );\n\n return useMemo(\n () => ({\n pushSearchParams,\n router,\n searchParams,\n }),\n [pushSearchParams, router, searchParams],\n );\n};\n","export function urlSearchParamsToObject(\n searchParams: URLSearchParams,\n): Record<string, string | string[]> {\n const result: Record<string, string | string[]> = {};\n\n searchParams.forEach((value, key) => {\n if (key in result) {\n if (Array.isArray(result[key])) {\n (result[key] as string[]).push(value);\n } else {\n result[key] = [result[key] as string, value];\n }\n } else {\n result[key] = value;\n }\n });\n\n return result;\n}\n"]}