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

75 lines (62 loc) 2.88 kB
define(function (require) { var moment = require('moment'); var $ = require('jquery'); require('ui/modules') .get('app/dashboard') .directive('dashboardPanel', function (savedVisualizations, savedSearches, Notifier, Private, $injector) { var _ = require('lodash'); var loadPanel = Private(require('plugins/kibana/dashboard/components/panel/lib/load_panel')); var filterManager = Private(require('ui/filter_manager')); var notify = new Notifier(); var services = require('plugins/kibana/settings/saved_object_registry').all().map(function (serviceObj) { var service = $injector.get(serviceObj.service); return { type: service.type, name: serviceObj.service }; }); require('ui/visualize'); require('ui/doc_table'); var brushEvent = Private(require('ui/utils/brush_event')); return { restrict: 'E', template: require('plugins/kibana/dashboard/components/panel/panel.html'), requires: '^dashboardGrid', link: function ($scope, $el) { // using $scope inheritance, panels are available in AppState var $state = $scope.state; // receives $scope.panel from the dashboard grid directive, seems like should be isolate? $scope.$watch('id', function () { if (!$scope.panel.id || !$scope.panel.type) return; loadPanel($scope.panel, $scope) .then(function (panelConfig) { // These could be done in loadPanel, putting them here to make them more explicit $scope.savedObj = panelConfig.savedObj; $scope.editUrl = panelConfig.editUrl; $scope.$on('$destroy', panelConfig.savedObj.destroy); $scope.filter = function (field, value, operator) { var index = $scope.savedObj.searchSource.get('index').id; filterManager.add(field, value, operator, index); }; }) .catch(function (e) { $scope.error = e.message; // If the savedObjectType matches the panel type, this means the object itself has been deleted, // so we shouldn't even have an edit link. If they don't match, it means something else is wrong // with the object (but the object still exists), so we link to the object editor instead. var objectItselfDeleted = e.savedObjectType === $scope.panel.type; if (objectItselfDeleted) return; var type = $scope.panel.type; var id = $scope.panel.id; var service = _.find(services, { type: type }); if (!service) return; $scope.editUrl = '#settings/objects/' + service.name + '/' + id + '?notFound=' + e.savedObjectType; }); }); $scope.remove = function () { _.pull($state.panels, $scope.panel); }; } }; }); });