diff --git a/public/app/core/components/navbar/navbar.ts b/public/app/core/components/navbar/navbar.ts index 54f39eaa889..3fc266dccb3 100644 --- a/public/app/core/components/navbar/navbar.ts +++ b/public/app/core/components/navbar/navbar.ts @@ -1,15 +1,15 @@ import coreModule from '../../core_module'; import {NavModel} from '../../nav_model_srv'; +import appEvents from 'app/core/app_events'; export class NavbarCtrl { model: NavModel; /** @ngInject */ - constructor(private $rootScope) { - } + constructor() {} showSearch() { - this.$rootScope.appEvent('show-dash-search'); + appEvents.emit('show-dash-search'); } navItemClicked(navItem, evt) { diff --git a/public/app/core/components/search/search.html b/public/app/core/components/search/search.html index ad1de5ced2c..3b83284757e 100644 --- a/public/app/core/components/search/search.html +++ b/public/app/core/components/search/search.html @@ -57,11 +57,11 @@
- Dashboard + New dashboard - Folder + New folder Find dashboards on Grafana.com diff --git a/public/app/core/components/search/search.ts b/public/app/core/components/search/search.ts index ffbec30cc0a..e06380a688b 100644 --- a/public/app/core/components/search/search.ts +++ b/public/app/core/components/search/search.ts @@ -1,6 +1,7 @@ import _ from 'lodash'; import coreModule from '../../core_module'; import { SearchSrv } from 'app/core/services/search_srv'; +import appEvents from 'app/core/app_events'; export class SearchCtrl { isOpen: boolean; @@ -16,9 +17,9 @@ export class SearchCtrl { initialFolderFilterTitle: string; /** @ngInject */ - constructor($scope, private $location, private $timeout, private searchSrv: SearchSrv, $rootScope) { - $rootScope.onAppEvent('show-dash-search', this.openSearch.bind(this), $scope); - $rootScope.onAppEvent('hide-dash-search', this.closeSearch.bind(this), $scope); + constructor($scope, private $location, private $timeout, private searchSrv: SearchSrv) { + appEvents.on('show-dash-search', this.openSearch.bind(this), $scope); + appEvents.on('hide-dash-search', this.closeSearch.bind(this), $scope); this.initialFolderFilterTitle = "All"; } @@ -74,6 +75,7 @@ export class SearchCtrl { if (selectedDash) { this.$location.search({}); this.$location.path(selectedDash.url); + this.closeSearch(); } } else { const selectedFolder = this.results[currentItem.folderIndex]; diff --git a/public/app/core/components/search/search_results.html b/public/app/core/components/search/search_results.html index a776dabe0dc..489e60ac816 100644 --- a/public/app/core/components/search/search_results.html +++ b/public/app/core/components/search/search_results.html @@ -32,7 +32,7 @@ - +
{{::item.title}}
diff --git a/public/app/core/components/search/search_results.ts b/public/app/core/components/search/search_results.ts index 3e7e8e6147b..8001ac8c644 100644 --- a/public/app/core/components/search/search_results.ts +++ b/public/app/core/components/search/search_results.ts @@ -1,5 +1,6 @@ import _ from 'lodash'; import coreModule from '../../core_module'; +import appEvents from 'app/core/app_events'; export class SearchResultsCtrl { results: any; @@ -61,6 +62,12 @@ export class SearchResultsCtrl { } } + onItemClick(item) { + if (this.$location.path().indexOf(item.url) > -1) { + appEvents.emit('hide-dash-search'); + } + } + selectTag(tag, evt) { if (this.onTagSelected) { this.onTagSelected({$tag: tag}); diff --git a/public/app/core/services/keybindingSrv.ts b/public/app/core/services/keybindingSrv.ts index 4e819abd1bc..67b766d497a 100644 --- a/public/app/core/services/keybindingSrv.ts +++ b/public/app/core/services/keybindingSrv.ts @@ -36,15 +36,15 @@ export class KeybindingSrv { } openSearchStarred() { - this.$rootScope.appEvent('show-dash-search', {starred: true}); + appEvents.emit('show-dash-search', {starred: true}); } openSearchTags() { - this.$rootScope.appEvent('show-dash-search', {tagsMode: true}); + appEvents.emit('show-dash-search', {tagsMode: true}); } openSearch() { - this.$rootScope.appEvent('show-dash-search'); + appEvents.emit('show-dash-search'); } openAlerting() { diff --git a/public/app/core/specs/search.jest.ts b/public/app/core/specs/search.jest.ts index d3058e7550e..b382cccb63e 100644 --- a/public/app/core/specs/search.jest.ts +++ b/public/app/core/specs/search.jest.ts @@ -6,7 +6,7 @@ describe('SearchCtrl', () => { search: (options: any) => {}, getDashboardTags: () => {} }; - let ctrl = new SearchCtrl({}, {}, {}, searchSrvStub, { onAppEvent: () => { } }); + let ctrl = new SearchCtrl({$on: () => {}}, {}, {}, searchSrvStub); describe('Given an empty result', () => { beforeEach(() => { diff --git a/public/app/core/specs/search_results.jest.ts b/public/app/core/specs/search_results.jest.ts index 7084f5e7d8f..e18aa89162d 100644 --- a/public/app/core/specs/search_results.jest.ts +++ b/public/app/core/specs/search_results.jest.ts @@ -1,4 +1,12 @@ import { SearchResultsCtrl } from '../components/search/search_results'; +import { beforeEach, afterEach } from 'test/lib/common'; +import appEvents from 'app/core/app_events'; + +jest.mock('app/core/app_events', () => { + return { + emit: jest.fn() + }; +}); describe('SearchResultsCtrl', () => { let ctrl; @@ -94,4 +102,39 @@ describe('SearchResultsCtrl', () => { expect(folderExpanded).toBeFalsy(); }); }); + + describe('when clicking on a link in search result', () => { + const dashPath = 'dashboard/path'; + const $location = { path: () => dashPath}; + const appEventsMock = appEvents as any; + + describe('with the same url as current path', () => { + beforeEach(() => { + ctrl = new SearchResultsCtrl($location); + const item = { url: dashPath}; + ctrl.onItemClick(item); + }); + + it('should close the search', () => { + expect(appEventsMock.emit.mock.calls.length).toBe(1); + expect(appEventsMock.emit.mock.calls[0][0]).toBe('hide-dash-search'); + }); + }); + + describe('with a different url than current path', () => { + beforeEach(() => { + ctrl = new SearchResultsCtrl($location); + const item = { url: 'another/path'}; + ctrl.onItemClick(item); + }); + + it('should do nothing', () => { + expect(appEventsMock.emit.mock.calls.length).toBe(0); + }); + }); + + afterEach(() => { + appEventsMock.emit.mockClear(); + }); + }); }); diff --git a/public/app/features/dashboard/dashnav/dashnav.html b/public/app/features/dashboard/dashnav/dashnav.html index d0ebb93e2f3..9ebf6d4ef67 100644 --- a/public/app/features/dashboard/dashnav/dashnav.html +++ b/public/app/features/dashboard/dashnav/dashnav.html @@ -33,9 +33,9 @@ -
+
"; } openInspector() { var modalScope = this.$scope.$new(); modalScope.panel = this.panel; modalScope.dashboard = this.dashboard; - modalScope.panelInfoHtml = this.getInfoContent({mode: 'inspector'}); + modalScope.panelInfoHtml = this.getInfoContent({ mode: "inspector" }); modalScope.inspector = $.extend(true, {}, this.inspector); - this.publishAppEvent('show-modal', { - src: 'public/app/features/dashboard/partials/inspector.html', + this.publishAppEvent("show-modal", { + src: "public/app/features/dashboard/partials/inspector.html", scope: modalScope }); }