sendou.ink/lib/setSearchParams.ts
Kalle (Sendou) 30646c3b6d closes #247
2021-01-15 16:00:48 +02:00

55 lines
1.2 KiB
TypeScript

export const setSearchParams = (
key: string,
value: string | string[] | undefined
) => {
const url = new URL(window.location.href);
const params = new URLSearchParams(url.search);
if (!value) {
params.delete(key);
} else if (Array.isArray(value)) {
params.delete(key);
value.forEach((element) => {
params.append(key, element);
});
} else {
params.set(key, value);
}
history.replaceState(
{},
"",
`${window.location.pathname}${
Array.from(params.entries()).length ? "?" : ""
}${params.toString()}`
);
};
export const setManySearchParams = (
newParams: { key: string; value: string | string[] | undefined }[]
) => {
const url = new URL(window.location.href);
const params = new URLSearchParams(url.search);
newParams.forEach(({ key, value }) => {
if (!value) {
params.delete(key);
} else if (Array.isArray(value)) {
params.delete(key);
value.forEach((element) => {
params.append(key, element);
});
} else {
params.set(key, value);
}
});
history.replaceState(
{},
"",
`${window.location.pathname}${
Array.from(params.entries()).length ? "?" : ""
}${params.toString()}`
);
};