@curi/interactions
Version:
Route interactions for a Curi application
62 lines (60 loc) • 1.97 kB
JavaScript
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 }); });
};
export { active, ancestors, pathname, prefetch };