//copied from https://stackoverflow.com/questions/5999118/how-can-i-add-or-update-a-query-string-parameter export function updateQueryString( key: string, value: undefined | string | null, url: string ): string { const re = new RegExp('([?&])' + key + '=.*?(&|#|$)(.*)', 'gi'); let hash; if (re.test(url)) { if (typeof value !== 'undefined' && value !== null) { return url.replace(re, '$1' + key + '=' + value + '$2$3'); } else { hash = url.split('#'); url = hash[0].replace(re, '$1$3').replace(/(&|\?)$/, ''); if (typeof hash[1] !== 'undefined' && hash[1] !== null) { url += '#' + hash[1]; } return url; } } else { if (typeof value !== 'undefined' && value !== null) { const separator = url.includes('?') ? '&' : '?'; hash = url.split('#'); url = hash[0] + separator + key + '=' + value; if (typeof hash[1] !== 'undefined' && hash[1] !== null) { url += '#' + hash[1]; } return url; } else { return url; } } } export function applyQueryParameters(url: string, query: T): string { if (query == null) return url; for (const [key, value] of Object.entries(query)) { if (typeof value === 'string') url = updateQueryString(key, value, url); else if (typeof value === 'number') url = updateQueryString(key, String(value), url); else if (typeof value === 'boolean') url = updateQueryString(key, value ? 'true' : 'false', url); else if (value instanceof Date) url = updateQueryString(key, value.toISOString(), url); else { console.error('Unknown query parameter type. Param: ', value); } } return url; }