Merge pull request #4656 from rashidkpc/enhancement/saved_obj_registry

Saved Object Registry
This commit is contained in:
Spencer 2015-08-14 12:28:06 -07:00
commit 13b242a9a9
12 changed files with 63 additions and 32 deletions

View file

@ -16,6 +16,9 @@ define(function (require) {
require('plugins/kibana/dashboard/services/saved_dashboards');
require('plugins/kibana/dashboard/styles/main.less');
require('ui/saved_objects/saved_object_registry').register(require('plugins/kibana/dashboard/services/saved_dashboard_register'));
var app = require('ui/modules').get('app/dashboard', [
'elasticsearch',
'ngRoute',
@ -49,6 +52,7 @@ define(function (require) {
app.directive('dashboardApp', function (Notifier, courier, AppState, timefilter, kbnUrl) {
return {
controller: function ($scope, $route, $routeParams, $location, Private, getAppState) {
var queryFilter = Private(require('ui/filter_bar/query_filter'));
var notify = new Notifier({

View file

@ -0,0 +1,5 @@
define(function (require) {
return function savedDashboardFn(savedDashboards) {
return savedDashboards;
};
});

View file

@ -17,6 +17,13 @@ define(function (require) {
this.type = SavedDashboard.type;
this.Class = SavedDashboard;
this.loaderProperties = {
name: 'dashboards',
noun: 'Dashboard',
nouns: 'dashboards'
};
// Returns a single dashboard by ID, should be the name of the dashboard
this.get = function (id) {

View file

@ -8,4 +8,7 @@ define(function (require, module, exports) {
// preload
require('ui/doc_table/components/table_row');
require('ui/saved_objects/saved_object_registry').register(require('plugins/kibana/discover/saved_searches/saved_search_register'));
});

View file

@ -0,0 +1,5 @@
define(function (require) {
return function savedSearchObjectFn(savedSearches) {
return savedSearches;
};
});

View file

@ -25,6 +25,12 @@ define(function (require) {
this.type = SavedSearch.type;
this.Class = SavedSearch;
this.loaderProperties = {
name: 'searches',
noun: 'Saved Search',
nouns: 'saved searches'
};
this.get = function (id) {
return (new SavedSearch(id)).init();
};

View file

@ -23,4 +23,8 @@ define(function (require) {
require('plugins/kibana/visualize/editor/vis_options');
require('plugins/kibana/visualize/saved_visualizations/_saved_vis');
require('plugins/kibana/visualize/saved_visualizations/saved_visualizations');
require('ui/saved_objects/saved_object_registry')
.register(require('plugins/kibana/visualize/saved_visualizations/saved_visualization_register'));
});

View file

@ -0,0 +1,5 @@
define(function (require) {
return function savedVisualizationFn(savedVisualizations) {
return savedVisualizations;
};
});

View file

@ -20,6 +20,12 @@ define(function (require) {
this.type = SavedVis.type;
this.Class = SavedVis;
this.loaderProperties = {
name: 'visualizations',
noun: 'Visualization',
nouns: 'visualizations'
};
this.get = function (id) {
return (new SavedVis(id)).init();
};

View file

@ -4,28 +4,9 @@ define(function (require) {
var rison = require('ui/utils/rison');
var keymap = require('ui/utils/key_map');
module.directive('savedObjectFinder', function (savedSearches, savedVisualizations, savedDashboards, $location, kbnUrl) {
module.directive('savedObjectFinder', function ($location, $injector, kbnUrl, Private) {
var types = {
searches: {
service: savedSearches,
name: 'searches',
noun: 'Saved Search',
nouns: 'saved searches'
},
visualizations: {
service: savedVisualizations,
name: 'visualizations',
noun: 'Visualization',
nouns: 'visualizations'
},
dashboards: {
service: savedDashboards,
name: 'dashboards',
noun: 'Dashboard',
nouns: 'dashboards'
}
};
var services = Private(require('ui/saved_objects/saved_object_registry')).byLoaderPropertiesName;
return {
restrict: 'E',
@ -54,13 +35,11 @@ define(function (require) {
// the most recently entered search/filter
var prevSearch;
// the service we will use to find records
var service;
// the list of hits, used to render display
self.hits = [];
self.objectType = types[$scope.type];
self.service = services[$scope.type];
self.properties = self.service.loaderProperties;
filterResults();
@ -230,7 +209,7 @@ define(function (require) {
};
self.hitCountNoun = function () {
return ((self.hitCount === 1) ? self.objectType.noun : self.objectType.nouns).toLowerCase();
return ((self.hitCount === 1) ? self.properties.noun : self.properties.nouns).toLowerCase();
};
function selectTopHit() {
@ -241,8 +220,8 @@ define(function (require) {
}
function filterResults() {
if (!self.objectType) return;
if (!self.objectType.service) return;
if (!self.service) return;
if (!self.properties) return;
// track the filter that we use for this search,
// but ensure that we don't search for the same
@ -252,7 +231,7 @@ define(function (require) {
if (prevSearch === filter) return;
prevSearch = filter;
self.objectType.service.find(filter)
self.service.find(filter)
.then(function (hits) {
// ensure that we don't display old results
// as we can't really cancel requests

View file

@ -1,13 +1,13 @@
<form role="form">
<div class="form-group finder-form">
<div class="finder-form-options">
<a class="small" ng-click="finder.manageObjects(finder.objectType.name)">manage {{finder.objectType.name}}</a>
<a class="small" ng-click="finder.manageObjects(finder.properties.name)">manage {{finder.properties.nouns}}</a>
</div>
<div class="clearfix visible-xs-block"></div>
<input
input-focus
ng-model="filter"
ng-attr-placeholder="{{finder.objectType.noun}} Filter"
ng-attr-placeholder="{{finder.properties.noun}} Filter"
ng-keydown="finder.filterKeyDown($event)"
class="form-control"
name="filter"
@ -40,7 +40,7 @@
<li
class="list-group-item list-group-no-results"
ng-if="finder.hits.length === 0">
<p ng-bind="'No matching ' + finder.objectType.nouns + ' found.'"></p>
<p ng-bind="'No matching ' + finder.properties.nouns + ' found.'"></p>
</li>
</ul>
</paginate>

View file

@ -0,0 +1,7 @@
define(function (require) {
return require('ui/registry/_registry')({
name: 'savedObjects',
index: ['loaderProperties.name'],
order: ['loaderProperties.name']
});
});