|
export default function setURLParam<T>( |
|
paramName: string, |
|
value: T, |
|
|
|
defaultValue?: T, |
|
): void { |
|
const urlParams = new URLSearchParams(window.location.search); |
|
if (defaultValue != null && value === defaultValue) { |
|
urlParams.delete(paramName); |
|
} else { |
|
let stringValue: string; |
|
|
|
switch (typeof value) { |
|
case 'string': |
|
stringValue = value; |
|
break; |
|
case 'boolean': |
|
stringValue = value ? '1' : '0'; |
|
break; |
|
default: |
|
throw new Error(`Unsupported URL param type: ${typeof value}`); |
|
} |
|
|
|
if (urlParams.has(paramName)) { |
|
urlParams.set(paramName, stringValue); |
|
} else { |
|
urlParams.append(paramName, stringValue); |
|
} |
|
} |
|
|
|
const paramStringWithoutQuestionMark = urlParams.toString(); |
|
|
|
window.history.replaceState( |
|
null, |
|
'', |
|
`${window.location.pathname}${ |
|
paramStringWithoutQuestionMark.length > 0 ? '?' : '' |
|
}${paramStringWithoutQuestionMark}`, |
|
); |
|
} |
|
|