UNPKG

graft-react

Version:

react admin and helper components for graft-db

125 lines (124 loc) 4.27 kB
"use strict"; var __assign = (this && this.__assign) || Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; var navigation_1 = require("navigation"); var utils_1 = require("../utils"); ; var Nav = (function () { function Nav(cfg) { var _this = this; this.onNavigateHandlerFor = function (r) { return function (params) { _this.cfg.onNavigate(r, params); }; }; this.togglePreview = function () { var preview = _this.data().preview; _this.update({ preview: !preview }); }; this.toggleSidebar = function () { var sidebar = _this.data().sidebar; _this.update({ sidebar: !sidebar }); }; this.cfg = cfg; this.stateNavigator = new navigation_1.StateNavigator(cfg.routes.map(function (_a) { var key = _a.key, route = _a.route, defaults = _a.defaults, defaultTypes = _a.defaultTypes; return ({ key: key, route: route, defaults: defaults || {}, defaultTypes: defaultTypes || {}, }); }), cfg.history); for (var _i = 0, _a = cfg.routes; _i < _a.length; _i++) { var r = _a[_i]; var key = r.key; if (!key) { continue; } this.stateNavigator.states[key].navigated = this.onNavigateHandlerFor(r); } } Nav.prototype.start = function () { this.stateNavigator.start(); }; Nav.prototype.getLink = function (to, data) { var link = this.getState(to, this.encode(data)); return this.stateNavigator.getNavigationLink(link.key, link.params); }; Nav.prototype.getState = function (to, data) { var params = data || {}; var key; if (to === null || to === undefined) { key = ''; params = data || {}; } else if (Array.isArray(to)) { key = to[0] || ''; params = to[1] || {}; } else if (typeof to === 'object' && to.key) { key = to.key; params = to.data || to.params || {}; } else if (to[0] === '/') { var link = this.stateNavigator.parseLink(to); key = link.state ? link.state.key : ''; params = __assign({}, params, link.data); } else if (typeof to === 'string') { key = to; } else { key = ''; params = data || {}; } return { key: key, params: params }; }; Nav.prototype.navigate = function (to, data) { if (typeof to === 'string' && /https?:/.test(to)) { if (typeof window !== 'undefined' && utils_1.startsWith(to, window.location.origin)) { to = to.replace(window.location.origin, ''); } else { window.location.href = to; return; } } var link = this.getState(to, this.encode(data)); var _a = this.data(), preview = _a.preview, sidebar = _a.sidebar, purl = _a.purl; var o = __assign({ purl: purl, preview: preview, sidebar: sidebar }, link.params); this.stateNavigator.navigate(link.key, o); }; Nav.prototype.refresh = function (data) { var params = this.encode(data); this.stateNavigator.refresh(params); }; Nav.prototype.update = function (data) { var currentParams = this.data(); var newParams = this.encode(data); this.refresh(__assign({}, currentParams, newParams)); }; Nav.prototype.encode = function (data) { var params = __assign({}, (data || {})); if (this.cfg.encodeParam) { for (var k in params) { params[k] = this.cfg.encodeParam(params[k], k); } } return params; }; Nav.prototype.data = function () { return this.stateNavigator.stateContext.data || {}; }; return Nav; }()); exports.Nav = Nav;