graft-react
Version:
react admin and helper components for graft-db
125 lines (124 loc) • 4.27 kB
JavaScript
;
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;