| | 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}`, |
| | ); |
| | } |
| |
|