scripts/apps/search/directives/SearchPanel.ts
import _, {cloneDeep} from 'lodash';
import {appConfig} from 'appConfig';
/**
* @ngdoc directive
* @module superdesk.apps.search
* @name sdSearchPanel
*
* @requires $location
* @requires desks
* @requires privileges
* @requires asset
* @requires metadata
* @requires $rootScope
* @requires session
*
* @description
* A directive that generates the sidebar containing search results
* filters (so-called "aggregations" in Elastic's terms).
*/
SearchPanel.$inject = [
'$location',
'desks',
'privileges',
'asset',
'metadata',
'$rootScope',
'session',
];
export function SearchPanel($location,
desks,
privileges,
asset,
metadata,
$rootScope,
session,
) {
desks.initialize();
return {
require: '^sdSearchContainer',
templateUrl: asset.templateUrl('apps/search/views/search-panel.html'),
scope: {
items: '=',
desk: '=',
repo: '=',
context: '=',
toggleRepo: '=',
providerType: '=',
},
link: function(scope, element, attrs, controller) {
scope.config = appConfig;
scope.toggleFiltersPane = controller.toggleFiltersPane;
scope.sTab = 'advancedSearch';
scope.innerTab = 'parameters';
scope.editingSearch = false;
scope.showSaveSearch = false;
scope.isManagingSubscriptions = false;
scope.wrapper = {};
scope.setIsManagingSubscriptions = (nextValue: boolean) => {
scope.isManagingSubscriptions = nextValue;
};
// called after changing the subscriptions for current search
scope.onSubscriptionsChange = (updatedSavedSearch) => {
// subscriptions were updated via API so the object has changed
for (const key in updatedSavedSearch) {
scope.editingSearch[key] = updatedSavedSearch[key];
}
};
scope.aggregations = {};
scope.privileges = privileges.privileges;
scope.userHasPrivileges = privileges.userHasPrivileges;
scope.search_config = metadata.search_config;
scope.$on('edit:search', (_event, args) => {
scope.sTab = 'advancedSearch';
scope.innerTab = 'parameters';
scope.activateSearchPane = false;
scope.editingSearch = args;
scope.wrapper.edit = cloneDeep(scope.editingSearch || {});
});
scope.changeTab = function(tabName) {
scope.sTab = tabName;
};
scope.display = function(tabName) {
scope.innerTab = tabName;
if (tabName === 'filters') {
$rootScope.aggregations = 1;
$rootScope.$broadcast('aggregations:changed');
} else {
$rootScope.aggregations = 0;
}
};
scope.searching = function() {
return !_.isEmpty($location.search());
};
scope.closeFacets = function() {
scope.toggleFiltersPane();
$rootScope.aggregations = 0;
};
scope.$watch('tags.currentSearch', (currentSearch) => {
scope.showSaveSearch = !_.isEmpty(currentSearch);
}, true);
/*
* Checks if the user is Admin or Not.
*/
scope.isAdmin = function() {
return session.identity.user_type === 'administrator';
};
},
};
}