@curi/interactions
Version:
Route interactions for a Curi application
72 lines (65 loc) • 2.06 kB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
function find(name, children) {
return children.some(function (node) {
if (node.name === name) {
return true;
}
else if (node.children) {
return find(name, node.children);
}
return false;
});
}
function active(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 r = 0, length = keys.length; r < length; r++) {
var key = keys[r];
var param = options.params[key];
if (!param || param !== response.params[key]) {
return false;
}
}
}
if (options.components) {
return options.components(response.location);
}
return true;
}
function ancestors(route) {
var ancestors = [];
var parent = route.parent;
while (parent !== undefined) {
ancestors.unshift(parent);
parent = parent.parent;
}
return ancestors;
}
function pathname(route, params) {
return route.methods.pathname(params);
}
function prefetch(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;
;