UNPKG

@intuitionrobotics/thunderstorm

Version:
104 lines 3.67 kB
import { _keys, Module, } from "@intuitionrobotics/ts-common"; import { createBrowserHistory } from "history"; import {} from "../../index.js"; export class BrowserHistoryModule_Class extends Module { history; constructor() { super("BrowserHistoryModule"); this.history = createBrowserHistory(); } push(push) { this.history.push(push); } replace(push) { this.history.replace(push); } composeQuery(queryParams) { const queryAsString = _keys(queryParams).map((key) => `${key}=${queryParams[key]}`).join("&"); if (queryAsString.length === 0) return undefined; return queryAsString; } getEncodedQueryParams = () => { const queryParams = {}; let queryAsString = window.location.search; if (!queryAsString || queryAsString.length === 0) return {}; while (true) { if (queryAsString.startsWith("?")) queryAsString = queryAsString.substring(1); else if (queryAsString.startsWith("/?")) queryAsString = queryAsString.substring(1); else break; } const query = queryAsString.split("&"); return query.map(param => { const parts = param.split("="); return { key: parts[0], value: parts[1] }; }).reduce((toRet, param) => { if (param.key && param.value) toRet[param.key] = param.value; return toRet; }, queryParams); }; getQueryParams() { const params = this.getEncodedQueryParams(); _keys(params).forEach(key => { const value = params[key]; if (!value) { delete params[key]; return; } params[key] = decodeURIComponent(value); }); return params; } setQuery(queryParams) { const encodedQueryParams = { ...queryParams }; _keys(encodedQueryParams).forEach(key => { const value = encodedQueryParams[key]; if (!value) { delete encodedQueryParams[key]; return; } encodedQueryParams[key] = encodeURIComponent(value); }); this.updateQueryParams(encodedQueryParams); } addQueryParam(key, value) { const encodedQueryParams = this.getEncodedQueryParams(); encodedQueryParams[key] = encodeURIComponent(value); this.updateQueryParams(encodedQueryParams); } removeQueryParam(key) { const encodedQueryParams = this.getEncodedQueryParams(); delete encodedQueryParams[key]; const data = this.createHistoryDataFromQueryParams(encodedQueryParams); this.replace(data); } setUrl(url, queryParams) { this.push(this.createHistoryDataFromQueryParams(queryParams, url)); } createHistoryDataFromQueryParams(encodedQueryParams, pathname = window.location.pathname) { return { pathname: !pathname.endsWith("/") ? pathname : pathname.substring(0, pathname.length - 1), search: !encodedQueryParams ? "" : this.composeQuery(encodedQueryParams) }; } updateQueryParams(encodedQueryParams) { const data = this.createHistoryDataFromQueryParams(encodedQueryParams); this.push(data); } getOrigin() { return window.location.origin; } getCurrent() { return this.history.location; } getHistory() { return this.history; } } export const BrowserHistoryModule = new BrowserHistoryModule_Class(); //# sourceMappingURL=HistoryModule.js.map