UNPKG

@web-atoms/core-docs

Version:
70 lines 2.64 kB
(function (factory) { if (typeof module === "object" && typeof module.exports === "object") { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === "function" && define.amd) { define(["require", "exports", "../core/AtomDisposableList", "../core/AtomOnce", "../core/AtomUri"], factory); } })(function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const AtomDisposableList_1 = require("../core/AtomDisposableList"); const AtomOnce_1 = require("../core/AtomOnce"); const AtomUri_1 = require("../core/AtomUri"); /** * Binds property of View Model to URL Parameter, it can read query string as well, * however it will only persist value in hash * @param vm View Model * @param name property name of View Model * @param urlParameter url parameter name */ function bindUrlParameter(vm, name, urlParameter) { if (!name) { return; } if (!urlParameter) { return; } const a = vm; const paramDisposables = (a.mUrlParameters || (a.mUrlParameters = {})); const old = paramDisposables[name]; if (old) { old.dispose(); paramDisposables[name] = null; } const disposables = new AtomDisposableList_1.AtomDisposableList(); const updater = new AtomOnce_1.AtomOnce(); disposables.add(a.setupWatch([ ["app", "url", "hash", urlParameter], ["app", "url", "query", urlParameter] ], (hash, query) => { updater.run(() => { const value = hash || query; if (value) { // tslint:disable-next-line:triple-equals if (value != vm[name]) { vm[name] = value; } } }); })); disposables.add(a.setupWatch([[name]], (value) => { updater.run(() => { const url = vm.app.url || (vm.app.url = new AtomUri_1.AtomUri("")); url.hash[urlParameter] = value; vm.app.syncUrl(); }); })); paramDisposables[name] = disposables; if (vm.app.url) { const v = vm.app.url.hash[urlParameter] || vm.app.url.query[urlParameter]; if (v) { vm[name] = v; } } return vm.registerDisposable(disposables); } exports.default = bindUrlParameter; }); //# sourceMappingURL=bindUrlParameter.js.map