UNPKG

@curi/interactions

Version:

Route interactions for a Curi application

75 lines (70 loc) 2.53 kB
(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 }); }));