Files
web/packages/common/hooks/useUrlWithSearchParam.ts

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])
}