@curi/interactions
Version:
Route interactions for a Curi application
75 lines (70 loc) • 2.53 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(global = global || self, factory(global.CuriInteractions = {}));
}(this, function (exports) { 'use strict';
var pathname = function (route, params) {
return route.methods.pathname(params);
};
var find = function (name, children) {
return children.some(function (node) {
if (node.name === name) {
return true;
}
else if (node.children) {
return find(name, node.children);
}
return false;
});
};
var active = function (route, response, options) {
if (options === void 0) { options = {}; }
if (response.name !== route.name &&
(!options.partial || !find(response.name, route.children))) {
return false;
}
var keys = route.keys;
if (keys.length) {
if (!options.params) {
return false;
}
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
var key = keys_1[_i];
var param = options.params[key];
if (!param || param !== response.params[key]) {
return false;
}
}
}
if (options.components) {
return options.components(response.location);
}
return true;
};
var ancestors = function (route) {
var ancestors = [];
var parent = route.parent;
while (parent !== undefined) {
ancestors.unshift(parent);
parent = parent.parent;
}
return ancestors;
};
var prefetch = function (route, options) {
if (options === void 0) { options = {}; }
if (!route.methods.resolve) {
return Promise.resolve({
resolved: null,
error: "Could not prefetch data for " + route.name + " because it does not have a resolve function."
});
}
return route.methods
.resolve(options.match, options.external)
.then(function (resolved) { return ({ resolved: resolved, error: null }); }, function (error) { return ({ error: error, resolved: null }); });
};
exports.active = active;
exports.ancestors = ancestors;
exports.pathname = pathname;
exports.prefetch = prefetch;
Object.defineProperty(exports, '__esModule', { value: true });
}));