export enum History { None = 0, Push = 1, Replace = 2, } export const initialUrlParams = new URLSearchParams(window.location.search); export const getCurrentUrlParams = () => { return new URLSearchParams(window.location.search); }; export function updateQueryString( key: string, value?: string | string[], action?: History, url?: string, ) { const historyAction = action ?? History.Replace; const ret = new URL(url ?? window.location.href); if (value === undefined || value === null || value === "") { // If the value is null, undefined or empty => delete it ret.searchParams.delete(key); } else if (Array.isArray(value)) { ret.searchParams.delete(key); for (const v of value) { ret.searchParams.append(key, v); } } else { ret.searchParams.set(key, value); } if (historyAction === History.Push) { window.history.pushState(null, "", ret.toString()); } else if (historyAction === History.Replace) { window.history.replaceState(null, "", ret.toString()); } return ret; }