diff --git a/public/app/core/components/search/search.html b/public/app/core/components/search/search.html
index 3b0d9c003dd..c458aa51906 100644
--- a/public/app/core/components/search/search.html
+++ b/public/app/core/components/search/search.html
@@ -24,7 +24,9 @@
No dashboards matching your query were found.
+ on-tag-selected="ctrl.filterByTag($tag)"
+ on-folder-expanding="ctrl.folderExpanding()"
+ on-folder-expanded="ctrl.folderExpanded($folder)" />
diff --git a/public/app/core/components/search/search.ts b/public/app/core/components/search/search.ts
index 08d050c81bf..ffbec30cc0a 100644
--- a/public/app/core/components/search/search.ts
+++ b/public/app/core/components/search/search.ts
@@ -102,6 +102,11 @@ export class SearchCtrl {
}
}
+ if (direction === 0) {
+ this.selectedIndex = -1;
+ return;
+ }
+
const max = flattenedResult.length;
let newIndex = this.selectedIndex + direction;
this.selectedIndex = ((newIndex %= max) < 0) ? newIndex + max : newIndex;
@@ -182,6 +187,10 @@ export class SearchCtrl {
this.searchDashboards();
}
+ folderExpanding() {
+ this.moveSelection(0);
+ }
+
private getFlattenedResultForNavigation() {
let folderIndex = 0;
diff --git a/public/app/core/components/search/search_results.jest.ts b/public/app/core/components/search/search_results.jest.ts
index fc661dc8472..514eff21dab 100644
--- a/public/app/core/components/search/search_results.jest.ts
+++ b/public/app/core/components/search/search_results.jest.ts
@@ -55,21 +55,43 @@ describe('SearchResultsCtrl', () => {
});
});
- describe('when toggle a folder', () => {
- let folderToggled = false;
- let folder = {
- toggle: () => {
- folderToggled = true;
- }
- };
+ describe('when toggle a collapsed folder', () => {
+ let folderExpanded = false;
beforeEach(() => {
ctrl = new SearchResultsCtrl({});
+ ctrl.onFolderExpanding = () => { folderExpanded = true; };
+
+ let folder = {
+ expanded: false,
+ toggle: () => {}
+ };
+
ctrl.toggleFolderExpand(folder);
});
- it('should trigger folder toggle callback', () => {
- expect(folderToggled).toBeTruthy();
+ it('should trigger folder expanding callback', () => {
+ expect(folderExpanded).toBeTruthy();
+ });
+ });
+
+ describe('when toggle an expanded folder', () => {
+ let folderExpanded = false;
+
+ beforeEach(() => {
+ ctrl = new SearchResultsCtrl({});
+ ctrl.onFolderExpanding = () => { folderExpanded = true; };
+
+ let folder = {
+ expanded: true,
+ toggle: () => {}
+ };
+
+ ctrl.toggleFolderExpand(folder);
+ });
+
+ it('should not trigger folder expanding callback', () => {
+ expect(folderExpanded).toBeFalsy();
});
});
});
diff --git a/public/app/core/components/search/search_results.ts b/public/app/core/components/search/search_results.ts
index 0757a53a517..02b6c9f355b 100644
--- a/public/app/core/components/search/search_results.ts
+++ b/public/app/core/components/search/search_results.ts
@@ -5,6 +5,7 @@ export class SearchResultsCtrl {
results: any;
onSelectionChanged: any;
onTagSelected: any;
+ onFolderExpanding: any;
/** @ngInject */
constructor(private $location) {
@@ -13,6 +14,10 @@ export class SearchResultsCtrl {
toggleFolderExpand(section) {
if (section.toggle) {
+ if (!section.expanded && this.onFolderExpanding) {
+ this.onFolderExpanding();
+ }
+
section.toggle(section);
}
}
@@ -62,7 +67,8 @@ export function searchResultsDirective() {
editable: '@',
results: '=',
onSelectionChanged: '&',
- onTagSelected: '&'
+ onTagSelected: '&',
+ onFolderExpanding: '&'
},
};
}
diff --git a/public/app/core/services/search_srv.ts b/public/app/core/services/search_srv.ts
index 38aeea47b79..52f008e1812 100644
--- a/public/app/core/services/search_srv.ts
+++ b/public/app/core/services/search_srv.ts
@@ -51,7 +51,7 @@ export class SearchSrv {
store.set('search.sections.recent', this.recentIsOpen);
if (!section.expanded || section.items.length) {
- return;
+ return Promise.resolve();
}
return this.queryForRecentDashboards().then(result => {
@@ -62,6 +62,7 @@ export class SearchSrv {
private toggleStarred(section) {
this.starredIsOpen = section.expanded = !section.expanded;
store.set('search.sections.starred', this.starredIsOpen);
+ return Promise.resolve();
}
private getStarred(sections) {
@@ -189,7 +190,7 @@ export class SearchSrv {
section.icon = section.expanded ? 'fa fa-folder-open' : 'fa fa-folder';
if (section.items.length) {
- return;
+ return Promise.resolve();
}
let query = {