UNPKG

@spalger/kibana

Version:

Kibana is an open source (Apache Licensed), browser based analytics and search dashboard for Elasticsearch. Kibana is a snap to setup and start using. Kibana strives to be easy to get started with, while also being flexible and powerful, just like Elastic

55 lines (45 loc) 1.67 kB
define(function (require) { var angular = require('angular'); var _ = require('lodash'); var WorkQueue = require('ui/routes/WorkQueue'); var errors = require('ui/errors'); function wrapRouteWithPrep(route) { if (!route.resolve && route.redirectTo) return; var userWork = new WorkQueue(); // the point at which we will consider the queue "full" userWork.limit = _.keys(route.resolve).length; var resolve = { __prep__: function (Private, Promise, $route, $injector, Notifier) { var setup = Private(require('ui/routes/setup')); return setup.routeSetupWork() .then(function () { // wait for the queue to fill up, then do all the work var defer = Promise.defer(); userWork.resolveWhenFull(defer); return defer.promise.then(function () { return Promise.all(userWork.doWork()); }); }) .catch(function (err) { // discard any remaining user work userWork.empty(); return setup.handleKnownError(err); }); } }; // send each user resolve to the userWork queue, which will prevent it from running before the // prep is complete _.forOwn(route.resolve || {}, function (expr, name) { resolve[name] = function ($injector, Promise) { var defer = Promise.defer(); userWork.push(defer); return defer.promise.then(function () { return $injector[angular.isString(expr) ? 'get' : 'invoke'](expr); }); }; }); // we're copied everything over so now overwrite route.resolve = resolve; } return wrapRouteWithPrep; });