UNPKG

@selfage/stateful_navigator

Version:

Navigate with observable state tracked in browser history.

38 lines 4.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.HistoryLoader = void 0; const parser_1 = require("@selfage/observable/parser"); class HistoryLoader { constructor(stateDescriptor, queryParamKey, window) { this.stateDescriptor = stateDescriptor; this.queryParamKey = queryParamKey; this.window = window; this.state = new this.stateDescriptor.constructor(); } static create(stateDescriptor, queryParamKey) { return new HistoryLoader(stateDescriptor, queryParamKey, window).init(); } init() { this.load(); this.window.addEventListener("popstate", () => this.load()); return this; } load() { let stateStr = new URLSearchParams(this.window.location.search).get(this.queryParamKey); let stateObj; if (stateStr) { try { stateObj = JSON.parse(stateStr); } catch (e) { stateObj = {}; } } else { stateObj = {}; } parser_1.parseObservable(stateObj, this.stateDescriptor, this.state); } } exports.HistoryLoader = HistoryLoader; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeV9sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJoaXN0b3J5X2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx1REFBNkQ7QUFFN0QsTUFBYSxhQUFhO0lBR3hCLFlBQ1UsZUFBd0MsRUFDeEMsYUFBcUIsRUFDckIsTUFBYztRQUZkLG9CQUFlLEdBQWYsZUFBZSxDQUF5QjtRQUN4QyxrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBTGpCLFVBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7SUFNbkQsQ0FBQztJQUVHLE1BQU0sQ0FBQyxNQUFNLENBQ2xCLGVBQXdDLEVBQ3hDLGFBQXFCO1FBRXJCLE9BQU8sSUFBSSxhQUFhLENBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxRSxDQUFDO0lBRU0sSUFBSTtRQUNULElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLElBQUk7UUFDVixJQUFJLFFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQ2pFLElBQUksQ0FBQyxhQUFhLENBQ25CLENBQUM7UUFDRixJQUFJLFFBQWEsQ0FBQztRQUNsQixJQUFJLFFBQVEsRUFBRTtZQUNaLElBQUk7Z0JBQ0YsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDakM7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixRQUFRLEdBQUcsRUFBRSxDQUFDO2FBQ2Y7U0FDRjthQUFNO1lBQ0wsUUFBUSxHQUFHLEVBQUUsQ0FBQztTQUNmO1FBQ0Qsd0JBQWUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUQsQ0FBQztDQUNGO0FBdENELHNDQXNDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGVEZXNjcmlwdG9yIH0gZnJvbSBcIkBzZWxmYWdlL29ic2VydmFibGUvZGVzY3JpcHRvclwiO1xuaW1wb3J0IHsgcGFyc2VPYnNlcnZhYmxlIH0gZnJvbSBcIkBzZWxmYWdlL29ic2VydmFibGUvcGFyc2VyXCI7XG5cbmV4cG9ydCBjbGFzcyBIaXN0b3J5TG9hZGVyPFQ+IHtcbiAgcHVibGljIHN0YXRlID0gbmV3IHRoaXMuc3RhdGVEZXNjcmlwdG9yLmNvbnN0cnVjdG9yKCk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RhdGVEZXNjcmlwdG9yOiBPYnNlcnZhYmxlRGVzY3JpcHRvcjxUPixcbiAgICBwcml2YXRlIHF1ZXJ5UGFyYW1LZXk6IHN0cmluZyxcbiAgICBwcml2YXRlIHdpbmRvdzogV2luZG93XG4gICkge31cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZTxUPihcbiAgICBzdGF0ZURlc2NyaXB0b3I6IE9ic2VydmFibGVEZXNjcmlwdG9yPFQ+LFxuICAgIHF1ZXJ5UGFyYW1LZXk6IHN0cmluZ1xuICApOiBIaXN0b3J5TG9hZGVyPFQ+IHtcbiAgICByZXR1cm4gbmV3IEhpc3RvcnlMb2FkZXIoc3RhdGVEZXNjcmlwdG9yLCBxdWVyeVBhcmFtS2V5LCB3aW5kb3cpLmluaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0KCk6IHRoaXMge1xuICAgIHRoaXMubG9hZCgpO1xuICAgIHRoaXMud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCAoKSA9PiB0aGlzLmxvYWQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIGxvYWQoKTogdm9pZCB7XG4gICAgbGV0IHN0YXRlU3RyID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh0aGlzLndpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldChcbiAgICAgIHRoaXMucXVlcnlQYXJhbUtleVxuICAgICk7XG4gICAgbGV0IHN0YXRlT2JqOiBhbnk7XG4gICAgaWYgKHN0YXRlU3RyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzdGF0ZU9iaiA9IEpTT04ucGFyc2Uoc3RhdGVTdHIpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzdGF0ZU9iaiA9IHt9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZU9iaiA9IHt9O1xuICAgIH1cbiAgICBwYXJzZU9ic2VydmFibGUoc3RhdGVPYmosIHRoaXMuc3RhdGVEZXNjcmlwdG9yLCB0aGlzLnN0YXRlKTtcbiAgfVxufVxuIl19