"use strict"; (function () { 'use strict'; angular.module('consoleModule') .controller('ConsolePresetController', ['$scope', '$modalInstance', '$q', '$filter', 'consoleService', 'configurationModel', 'userModel', 'systemAlertService', 'consolePresetModel', 'events', 'i18nService', function ($scope, $modalInstance, $q, $filter, consoleService, configurationModel, userModel, systemAlertService, consolePresetModel, events, i18nService) { var userFilterPreset = consolePresetModel.selectedPreset; $scope.filterPresetName = userFilterPreset.name; $scope.consoleType = consolePresetModel.consoleType; $scope.filterConfig = consolePresetModel.filterConfig; $scope.consoleColumns = consolePresetModel.consoleColumns; $scope.selectedFilters = consolePresetModel.selectedFilters; $scope.gridColumns = consolePresetModel.gridColumns; $scope.isAccessibleUser = userModel.isAccessibleUser; $scope.sortableOptions = [{ stop: function () { consolePresetModel.gridColumns.forEach(function (column, index) { column.order = index + 1; }); } }]; $scope.saveFilterCheckbox = $scope.selectedFilters.length > 0; $scope.saveColumnCheckbox = $scope.gridColumns.length > 0; $scope.getFilterLabel = function (filter) { var filterLabel = ''; var filterName = ''; if (filter.filterType === "customFilter") { filterLabel = (filter.filterLabel) ? (filter.filterLabel + ': ') : ''; filterName = (filter.label ? filter.label : filter.name); } else { filterName = filter.label ? $filter('i18n')('console.filter.optionName.' + filter.label) : filter.name; if (filter.filterLabel) { filterLabel = $filter('i18n')('console.filter.name.' + filter.filterLabel) + ': '; } } return filterLabel + filterName; }; $scope.removeFilter = function (index) { $scope.$broadcast(events.PRESET_REMOVE_FILTER, { filterOption: $scope.selectedFilters[index] }); $scope.$emit(events.MODAL_FORM_IS_DIRTY); }; $scope.removeColumn = function (index) { var removedColumn = _.find(consolePresetModel.consoleColumns, function (item) { return item.name === consolePresetModel.gridColumns[index].name; }); removedColumn.visible = false; $scope.gridColumns.splice(index, 1); $scope.$emit(events.MODAL_FORM_IS_DIRTY); }; $scope.moveColumn = function (index, direction) { if (direction === 'up' && $scope.gridColumns[index - 1]) { $scope.gridColumns[index].order = index; $scope.gridColumns[index - 1].order = index + 1; } else if (direction === 'down' && $scope.gridColumns[index + 1]) { $scope.gridColumns[index].order = index + 1; $scope.gridColumns[index + 1].order = index; } $scope.gridColumns = _.sortBy($scope.gridColumns, 'order'); $scope.$emit(events.MODAL_FORM_IS_DIRTY); }; $scope.savePreset = function () { var tempPreset = consolePresetModel.getUserSavedPreset($scope.filterPresetName); //Prevent user from using columns as it is a reserved word if ($scope.filterPresetName === "columns") { systemAlertService.warning({ text: $filter('i18n')('console.saveFilter.reservedName'), hide: 10000 }); return; } if (tempPreset && tempPreset.id !== userFilterPreset.id) { systemAlertService.warning({ text: $filter('i18n')('console.saveFilter.nameConflict'), hide: 10000 }); return; } $scope.savingFilterPreset = true; //set filter and column preset name userFilterPreset.name = $scope.filterPresetName; consolePresetModel.setFilterPresetData('name', $scope.filterPresetName); consolePresetModel.setColumnPresetData('name', $scope.filterPresetName); if ($scope.saveFilterCheckbox) { updateFilterPreset().then(function () { if ($scope.saveColumnCheckbox) { updateColumnPreset().then(function () { $modalInstance.close(); }).finally(function () { $scope.savingFilterPreset = false; }); } else { updateColumnPreset(true).then(function () { $modalInstance.close(); }).finally(function () { $scope.savingFilterPreset = false; }); } }).catch(function () { systemAlertService.warning({ text: $filter('i18n')('error.unknown'), hide: 10000 }); $scope.savingFilterPreset = false; }).finally(function () { consolePresetModel.updateGridData(); }); } }; $scope.disableSubmit = function () { return !$scope.filterPresetName || (!$scope.saveFilterCheckbox && !$scope.saveColumnCheckbox) || $scope.savingFilterPreset || $scope.selectedFilters.length < 2; }; $scope.$watch('gridColumns', function (newValue) { $scope.saveColumnCheckbox = newValue.length > 0; }, true); $scope.close = function () { if ($scope.updatePresetForm.$dirty) { var modalInstance = systemAlertService.modal({ title: i18nService.getLocalizedString('common.notification.dirty.title'), text: i18nService.getLocalizedString('common.notification.dirty.message'), buttons: [ { text: i18nService.getLocalizedString('common.labels.yes'), data: true }, { text: i18nService.getLocalizedString('common.labels.no'), data: false } ] }); modalInstance.result.then(function (data) { if (data) { $modalInstance.dismiss(); } }); } else { $modalInstance.dismiss(); } }; function updateFilterPreset() { var copySelectedFilters = _.cloneDeep($scope.selectedFilters), filterSet = { name: userFilterPreset.name, id: userFilterPreset.id, defaultpreset: userFilterPreset.defaultpreset, value: _.map(copySelectedFilters.reverse(), function (filterOption) { var cfg = { filter: filterOption.filterName || filterOption.criteria.name, option: filterOption.name }; if (filterOption.type === 'dynamic') { cfg.type = 'dynamic'; cfg.realOption = angular.copy(filterOption); delete cfg.realOption.active; } return cfg; }) }; consolePresetModel.setFilterPresetData('value', filterSet.value); return $q.all([userModel.updateUserPreferences(consolePresetModel.filterPreferenceGroup, filterSet)]); } function updateColumnPreset(hideCols) { var columnsToUpdate = {}; if (!hideCols) { _.forEach($scope.gridColumns, function (column, idx) { var columnIndex = ++idx; columnsToUpdate[column.name] = { visible: true, order: columnIndex }; }); } consolePresetModel.setFilterPresetData('columnValue', columnsToUpdate); columnsToUpdate.newColumnType = true; return consolePresetModel.updateColumnConfig(columnsToUpdate, userFilterPreset.name, userFilterPreset.columnId); } function handleModalFormIsDirty() { $scope.updatePresetForm.$dirty = true; } function handleModalBackdropClick() { $scope.close(); } $scope.$on(events.MODAL_FORM_IS_DIRTY, handleModalFormIsDirty); $scope.$on(events.MODAL_BACKDROP_CLICK, handleModalBackdropClick); }]); })();