@selfage/stateful_navigator
Version:
Navigate with observable state tracked in browser history.
26 lines • 3.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.HistoryUpdater = void 0;
class HistoryUpdater {
constructor(state, queryParamKey, window) {
this.state = state;
this.queryParamKey = queryParamKey;
this.window = window;
}
static create(state, queryParamKey) {
return new HistoryUpdater(state, queryParamKey, window);
}
push() {
this.window.history.pushState(undefined, "", this.stringifyToUrl());
}
replace() {
this.window.history.replaceState(undefined, "", this.stringifyToUrl());
}
stringifyToUrl() {
let url = new URL(this.window.location.href);
url.searchParams.set(this.queryParamKey, JSON.stringify(this.state));
return url.href;
}
}
exports.HistoryUpdater = HistoryUpdater;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeV91cGRhdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaGlzdG9yeV91cGRhdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQWEsY0FBYztJQUN6QixZQUNVLEtBQVUsRUFDVixhQUFxQixFQUNyQixNQUFjO1FBRmQsVUFBSyxHQUFMLEtBQUssQ0FBSztRQUNWLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDckIsQ0FBQztJQUVHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBVSxFQUFFLGFBQXFCO1FBQ3BELE9BQU8sSUFBSSxjQUFjLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU0sSUFBSTtRQUNULElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTSxPQUFPO1FBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQztJQUNsQixDQUFDO0NBQ0Y7QUF4QkQsd0NBd0JDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEhpc3RvcnlVcGRhdGVyIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RhdGU6IGFueSxcbiAgICBwcml2YXRlIHF1ZXJ5UGFyYW1LZXk6IHN0cmluZyxcbiAgICBwcml2YXRlIHdpbmRvdzogV2luZG93XG4gICkge31cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZShzdGF0ZTogYW55LCBxdWVyeVBhcmFtS2V5OiBzdHJpbmcpOiBIaXN0b3J5VXBkYXRlciB7XG4gICAgcmV0dXJuIG5ldyBIaXN0b3J5VXBkYXRlcihzdGF0ZSwgcXVlcnlQYXJhbUtleSwgd2luZG93KTtcbiAgfVxuXG4gIHB1YmxpYyBwdXNoKCk6IHZvaWQge1xuICAgIHRoaXMud2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHVuZGVmaW5lZCwgXCJcIiwgdGhpcy5zdHJpbmdpZnlUb1VybCgpKTtcbiAgfVxuXG4gIHB1YmxpYyByZXBsYWNlKCk6IHZvaWQge1xuICAgIHRoaXMud2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHVuZGVmaW5lZCwgXCJcIiwgdGhpcy5zdHJpbmdpZnlUb1VybCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RyaW5naWZ5VG9VcmwoKTogc3RyaW5nIHtcbiAgICBsZXQgdXJsID0gbmV3IFVSTCh0aGlzLndpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCh0aGlzLnF1ZXJ5UGFyYW1LZXksIEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGUpKTtcbiAgICByZXR1cm4gdXJsLmhyZWY7XG4gIH1cbn1cbiJdfQ==