@topaz grail So first is the hook i made to set url params easier:
import { usePathname, useSearchParams } from "next/navigation";
import { useCallback } from "react";
export const useURLParmBuilder = () => {
const params = useSearchParams();
const sp = new URLSearchParams(params)!;
const pathName = usePathname();
const appendParam = useCallback(
(name: string, value: string) => {
const params = new URLSearchParams(sp);
params.append(name, value);
return `${pathName}?${params.toString()}`;
},
[sp, pathName],
);
const upsertParam = useCallback(
(name: string, value: string) => {
const params = new URLSearchParams(sp);
params.set(name, value);
return `${pathName}?${params.toString()}`;
},
[sp, pathName],
);
const upsertParams = useCallback(
(paramsToAdd: { name: string; value: string }[]) => {
const params = new URLSearchParams(sp);
paramsToAdd.forEach((param) => {
params.set(param.name, param.value);
});
return `${pathName}?${params.toString()}`;
},
[sp, pathName],
);
const deleteParam = useCallback(
(name: string) => {
const params = new URLSearchParams(sp);
params.delete(name);
return `${pathName}?${params.toString()}`;
},
[sp, pathName],
);
const deleteParams = useCallback(
(paramsToDelete: string[]) => {
const params = new URLSearchParams(sp);
paramsToDelete.forEach((param) => {
params.delete(param);
});
return `${pathName}?${params.toString()}`;
},
[pathName, sp],
);
return {
upsertParam,
upsertParams,
deleteParam,
deleteParams,
appendParam,
};
};