UNPKG

@selfage/stateful_navigator

Version:

Navigate with observable state tracked in browser history.

26 lines 3.01 kB
"use strict"; 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==