26 lines
697 B
TypeScript
26 lines
697 B
TypeScript
import { usePathname, useSearchParams } from "next/navigation"
|
|
import { useMemo } from "react"
|
|
|
|
export function useUrlWithSearchParam(
|
|
searchParam: { key: string; value: string },
|
|
path?: string | null
|
|
) {
|
|
const { key, value } = searchParam
|
|
const pathname = path ?? usePathname()
|
|
const searchParams = useSearchParams()
|
|
|
|
return useMemo(() => {
|
|
const newUrl = new URL(pathname, window.location.origin)
|
|
|
|
// Preserve existing search params
|
|
searchParams.forEach((val, key) => {
|
|
newUrl.searchParams.set(key, val)
|
|
})
|
|
|
|
// Set or override the specific search param
|
|
newUrl.searchParams.set(key, value)
|
|
|
|
return newUrl
|
|
}, [pathname, searchParams, key, value])
|
|
}
|