213 lines
11 KiB
JavaScript
213 lines
11 KiB
JavaScript
"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.advanceSerachQuery = consolePresetModel.advanceSerachQuery ? consolePresetModel.advanceSerachQuery[0] : null;
|
|
$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;
|
|
}
|
|
if ($scope.consoleType === EntityVO.TYPE_TICKET) {
|
|
if ($scope.saveColumnCheckbox) {
|
|
var selectedCustomColumns = _.filter($scope.gridColumns, { type: 'custom' });
|
|
$scope.selectedFilters = _.filter($scope.selectedFilters, function (filter) {
|
|
return !(filter.filterType === 'customFilter' && !_.find(selectedCustomColumns, { name: filter.filterName }));
|
|
});
|
|
}
|
|
else {
|
|
$scope.selectedFilters = _.reject($scope.selectedFilters, { filterType: 'customFilter' });
|
|
}
|
|
}
|
|
$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) {
|
|
if ($scope.advanceSerachQuery) {
|
|
userFilterPreset.value.push($scope.advanceSerachQuery);
|
|
}
|
|
$modalInstance.dismiss();
|
|
}
|
|
});
|
|
}
|
|
else {
|
|
if ($scope.advanceSerachQuery) {
|
|
userFilterPreset.value.push($scope.advanceSerachQuery);
|
|
}
|
|
$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);
|
|
if ($scope.advanceSerachQuery) {
|
|
filterSet.value.push($scope.advanceSerachQuery);
|
|
}
|
|
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);
|
|
}]);
|
|
})();
|