From b67f4dc390b5241339b8f2799110faf3d454e4c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Mon, 2 Feb 2015 17:17:30 +0100 Subject: [PATCH] Added stars to search results --- src/app/controllers/search.js | 43 +++++++------------ .../features/dashboard/dashboardNavCtrl.js | 8 ++-- .../features/grafanaDatasource/datasource.js | 8 +--- src/app/partials/search.html | 6 +-- src/app/services/userSrv.js | 12 +++++- src/css/less/search.less | 12 +++++- 6 files changed, 44 insertions(+), 45 deletions(-) diff --git a/src/app/controllers/search.js b/src/app/controllers/search.js index 0b755ccbdb7..192f4099fb9 100644 --- a/src/app/controllers/search.js +++ b/src/app/controllers/search.js @@ -18,6 +18,7 @@ function (angular, _, config, $) { $scope.query = { query: 'title:' }; $scope.db = datasourceSrv.getGrafanaDB(); $scope.currentSearchId = 0; + $scope.starsPromise = $scope.grafana.user.getStars(); // events $scope.onAppEvent('dashboard-deleted', $scope.dashboardDeleted); @@ -64,38 +65,26 @@ function (angular, _, config, $) { $scope.selectedIndex = Math.max(Math.min($scope.selectedIndex + direction, $scope.resultCount - 1), 0); }; - $scope.goToDashboard = function(id) { + $scope.goToDashboard = function(slug) { $location.search({}); - $location.path("/dashboard/db/" + id); - }; - - $scope.shareDashboard = function(title, id, $event) { - $event.stopPropagation(); - var baseUrl = window.location.href.replace(window.location.hash,''); - - $scope.share = { - title: title, - url: baseUrl + '#dashboard/db/' + encodeURIComponent(id) - }; + $location.path("/dashboard/db/" + slug); }; $scope.searchDashboards = function(queryString) { - // bookeeping for determining stale search requests - var searchId = $scope.currentSearchId + 1; - $scope.currentSearchId = searchId > $scope.currentSearchId ? searchId : $scope.currentSearchId; + $scope.currentSearchId = $scope.currentSearchId + 1; + var localSearchId = $scope.currentSearchId; return $scope.db.searchDashboards(queryString) .then(function(results) { - // since searches are async, it's possible that these results are not for the latest search. throw - // them away if so - if (searchId < $scope.currentSearchId) { - return; - } + if (localSearchId < $scope.currentSearchId) { return; } - $scope.tagsOnly = results.tagsOnly; - $scope.results.dashboards = results.dashboards; - $scope.results.tags = results.tags; - $scope.resultCount = results.tagsOnly ? results.tags.length : results.dashboards.length; + $scope.starsPromise.then(function(stars) { + $scope.starredIds = stars.dashboardIds; + $scope.tagsOnly = results.tagsOnly; + $scope.results.dashboards = results.dashboards; + $scope.results.tags = results.tags; + $scope.resultCount = results.tagsOnly ? results.tags.length : results.dashboards.length; + }); }); }; @@ -125,11 +114,11 @@ function (angular, _, config, $) { $scope.deleteDashboard = function(dash, evt) { evt.stopPropagation(); - $scope.appEvent('delete-dashboard', { id: dash.id, title: dash.title }); + $scope.appEvent('delete-dashboard', { slug: dash.slug, title: dash.title }); }; - $scope.dashboardDeleted = function(evt, id) { - var dash = _.findWhere($scope.results.dashboards, {id: id}); + $scope.dashboardDeleted = function(evt, payload) { + var dash = _.findWhere($scope.results.dashboards, { slug: payload.slug }); $scope.results.dashboards = _.without($scope.results.dashboards, dash); }; diff --git a/src/app/features/dashboard/dashboardNavCtrl.js b/src/app/features/dashboard/dashboardNavCtrl.js index 79601a99f79..d2759540c49 100644 --- a/src/app/features/dashboard/dashboardNavCtrl.js +++ b/src/app/features/dashboard/dashboardNavCtrl.js @@ -116,10 +116,10 @@ function (angular, _, moment, config, store) { }; $scope.deleteDashboardConfirmed = function(options) { - var id = options.id; - $scope.db.deleteDashboard(id).then(function(id) { - $scope.appEvent('dashboard-deleted', id); - $scope.appEvent('alert-success', ['Dashboard Deleted', id + ' has been deleted']); + var slug = options.slug; + $scope.db.deleteDashboard(slug).then(function() { + $scope.appEvent('dashboard-deleted', options); + $scope.appEvent('alert-success', ['Dashboard Deleted', options.title + ' has been deleted']); }, function(err) { $scope.appEvent('alert-error', ['Deleted failed', err]); }); diff --git a/src/app/features/grafanaDatasource/datasource.js b/src/app/features/grafanaDatasource/datasource.js index 4bc4d6ca344..15d6f895f2b 100644 --- a/src/app/features/grafanaDatasource/datasource.js +++ b/src/app/features/grafanaDatasource/datasource.js @@ -61,18 +61,12 @@ function (angular, _, kbn) { }; GrafanaDatasource.prototype.deleteDashboard = function(id) { - return backendSrv.delete('/api/dashboard/' + id) - .then(function(data) { - return data.title; - }); + return backendSrv.delete('/api/dashboard/' + id); }; GrafanaDatasource.prototype.searchDashboards = function(query) { return backendSrv.get('/api/search/', {q: query}) .then(function(data) { - _.each(data.dashboards, function(item) { - item.id = item.slug; - }); return data; }); }; diff --git a/src/app/partials/search.html b/src/app/partials/search.html index 6907fdc1005..8e7b7abe6fe 100644 --- a/src/app/partials/search.html +++ b/src/app/partials/search.html @@ -49,12 +49,9 @@
No dashboards matching your query were found.
+ ng-class="{'selected': $index === selectedIndex }" ng-click="goToDashboard(row.slug)"> diff --git a/src/app/services/userSrv.js b/src/app/services/userSrv.js index 14f373f7b1b..bc8ff7681b4 100644 --- a/src/app/services/userSrv.js +++ b/src/app/services/userSrv.js @@ -7,7 +7,7 @@ function (angular, _) { var module = angular.module('grafana.services'); - module.service('userSrv', function() { + module.service('userSrv', function(backendSrv, $q) { function User() { if (window.grafanaBootData.user) { @@ -15,6 +15,16 @@ function (angular, _) { } } + User.prototype.getStars = function() { + if (!this.isSignedIn) { + return $q.when([]); + } + + return backendSrv.get('/api/user/stars').then(function(stars) { + return stars; + }); + }; + this.getSignedInUser = function() { return new User(); }; diff --git a/src/css/less/search.less b/src/css/less/search.less index b378f853f8b..d45c90a8f25 100644 --- a/src/css/less/search.less +++ b/src/css/less/search.less @@ -35,13 +35,21 @@ } } + .fa-star, .fa-star-o { + padding-left: 13px; + } + + .fa-star { + color: @orange; + } + .search-result-link { color: @grafanaListMainLinkColor; - .fa { + .fa-th-large { padding-right: 10px; color: @grafanaListHighlightContrast; } - } + } .search-result-item:nth-child(odd) { background-color: @grafanaListAccent;