193 lines
10 KiB
JavaScript
193 lines
10 KiB
JavaScript
"use strict";
|
|
(function () {
|
|
'use strict';
|
|
angular.module('consoleModule')
|
|
.controller('ConsoleColumnConfiguratorController', ['$modalInstance', '$scope', 'systemAlertService', 'knowledgeConsoleModel', 'ticketConsoleModel', 'assetConsoleModel', 'permissionModel', 'roles', 'userModel', '$timeout', '$filter', 'params',
|
|
function ($modalInstance, $scope, systemAlertService, knowledgeConsoleModel, ticketConsoleModel, assetConsoleModel, permissionModel, roles, userModel, $timeout, $filter, params) {
|
|
$scope.state = {
|
|
savingConfiguration: false
|
|
};
|
|
$scope.userModel = userModel;
|
|
$scope.userIsAdmin = permissionModel.hasRole(roles.ITSM_ADMIN_ROLE) || false;
|
|
$scope.showMetadataReloadButton = false;
|
|
$scope.consoleType = params.consoleType;
|
|
var consoleModel = {};
|
|
switch (params.consoleType) {
|
|
case 'ticket':
|
|
consoleModel = ticketConsoleModel;
|
|
break;
|
|
case 'knowledge':
|
|
consoleModel = knowledgeConsoleModel;
|
|
break;
|
|
case 'asset':
|
|
consoleModel = assetConsoleModel;
|
|
break;
|
|
}
|
|
$scope.availiableColumns = _.sortBy(_.filter(consoleModel.columnsConfig, { visible: false }), 'displayName');
|
|
$scope.selectedColumns = _.sortBy(_.filter(consoleModel.columnsConfig, { visible: true }), 'order');
|
|
if (params.consoleType === 'ticket') {
|
|
if ($scope.userIsAdmin) {
|
|
$scope.showMetadataReloadButton = true;
|
|
}
|
|
var columnFilter = consoleModel.ticketTypeFilter;
|
|
if (columnFilter && columnFilter.options) {
|
|
// copy the current ticket type filter config. The default setting for column filter should be
|
|
// based on the ticket type filter config.
|
|
$scope.columnFilterOptions = _.cloneDeep(columnFilter.options);
|
|
// However, if no ticket types were selected in filter config, that means user want to see all ticket types,
|
|
// in this case, all columns should be available for selecting.
|
|
if (_.filter($scope.columnFilterOptions, { active: true }).length === 0) {
|
|
_.forEach($scope.columnFilterOptions, function (option) {
|
|
option.active = true;
|
|
});
|
|
}
|
|
$scope.columnFilterOptions.unshift({
|
|
name: 'general',
|
|
label: 'general',
|
|
order: 1,
|
|
active: true
|
|
});
|
|
}
|
|
updateColumnDisplayProperty();
|
|
}
|
|
else {
|
|
_.forEach($scope.availiableColumns, function (column) {
|
|
column.onDisplay = true;
|
|
});
|
|
_.forEach($scope.selectedColumns, function (column) {
|
|
column.onDisplay = true;
|
|
});
|
|
}
|
|
var optionsAvailiable = {
|
|
placeholder: 'column-configurator__column',
|
|
connectWith: '.column-configurator__container'
|
|
}, optionsSelected = {
|
|
placeholder: 'column-configurator__column',
|
|
connectWith: '.column-configurator__container',
|
|
update: function (event, ui) {
|
|
if ($scope.selectedColumns.length === 1) {
|
|
ui.item.sortable.cancel();
|
|
}
|
|
}
|
|
};
|
|
$scope.sortableOptionsList = [optionsAvailiable, optionsSelected];
|
|
$scope.updateColumnFilter = function (filterOption) {
|
|
filterOption.active = !filterOption.active;
|
|
updateColumnDisplayProperty();
|
|
};
|
|
function updateColumnDisplayProperty() {
|
|
var ticketTypeSelected = _.map(_.filter($scope.columnFilterOptions, { active: true }), 'name');
|
|
var generalSelected = ticketTypeSelected.indexOf('general') !== -1;
|
|
_.forEach($scope.availiableColumns, function (column) {
|
|
if ((angular.isUndefined(column.ticketType) && generalSelected) || _.intersection(column.ticketType, ticketTypeSelected).length > 0) {
|
|
column.onDisplay = true;
|
|
}
|
|
else {
|
|
column.onDisplay = false;
|
|
}
|
|
});
|
|
_.forEach($scope.selectedColumns, function (column) {
|
|
if ((angular.isUndefined(column.ticketType) && generalSelected) || _.intersection(column.ticketType, ticketTypeSelected).length > 0) {
|
|
column.onDisplay = true;
|
|
}
|
|
else {
|
|
column.onDisplay = false;
|
|
}
|
|
});
|
|
}
|
|
$scope.submit = function () {
|
|
var columsToUpdate = {};
|
|
$scope.state.savingConfiguration = true;
|
|
$timeout(function () {
|
|
_.forEach($scope.availiableColumns, function (column) {
|
|
if (consoleModel.columnsConfig[column.name].visible) {
|
|
consoleModel.columnsConfig[column.name].visible = false;
|
|
delete consoleModel.columnsConfig[column.name].order;
|
|
if (params.consoleType !== 'ticket') {
|
|
columsToUpdate[column.name] = {
|
|
visible: false
|
|
};
|
|
}
|
|
}
|
|
});
|
|
if (params.consoleType === 'ticket') {
|
|
_.forEach($scope.selectedColumns, function (column, idx) {
|
|
var columnIndex = ++idx, insertUpdateColumn = function (columnName, propName, propValue) {
|
|
if (!columsToUpdate[columnName]) {
|
|
columsToUpdate[columnName] = {};
|
|
}
|
|
columsToUpdate[columnName][propName] = propValue;
|
|
};
|
|
if (consoleModel.columnsConfig[column.name].order !== columnIndex) {
|
|
consoleModel.columnsConfig[column.name].order = columnIndex;
|
|
}
|
|
insertUpdateColumn(column.name, 'order', columnIndex);
|
|
if (!consoleModel.columnsConfig[column.name].visible) {
|
|
consoleModel.columnsConfig[column.name].visible = true;
|
|
}
|
|
insertUpdateColumn(column.name, 'visible', true);
|
|
if (consoleModel.columnsConfig[column.name].type) {
|
|
insertUpdateColumn(column.name, 'type', consoleModel.columnsConfig[column.name].type);
|
|
}
|
|
});
|
|
}
|
|
else {
|
|
_.forEach($scope.selectedColumns, function (column, idx) {
|
|
var columnIndex = ++idx, insertUpdateColumn = function (columnName, propName, propValue) {
|
|
if (!columsToUpdate[columnName]) {
|
|
columsToUpdate[columnName] = {};
|
|
}
|
|
columsToUpdate[columnName][propName] = propValue;
|
|
};
|
|
if (!consoleModel.columnsConfig[column.name].visible) {
|
|
consoleModel.columnsConfig[column.name].visible = true;
|
|
insertUpdateColumn(column.name, 'visible', true);
|
|
}
|
|
if (consoleModel.columnsConfig[column.name].order !== columnIndex) {
|
|
consoleModel.columnsConfig[column.name].order = columnIndex;
|
|
insertUpdateColumn(column.name, 'order', columnIndex);
|
|
}
|
|
});
|
|
}
|
|
consoleModel.updateColumnConfig(columsToUpdate);
|
|
$modalInstance.close();
|
|
}, 10);
|
|
};
|
|
$scope.updateColumn = function (column, listName) {
|
|
if (listName === 'available') {
|
|
$scope.availiableColumns.splice($scope.availiableColumns.indexOf(column), 1);
|
|
$scope.selectedColumns.push(column);
|
|
}
|
|
else {
|
|
// don't let user remove all the columns. At leaset one columns should be there.
|
|
if ($scope.selectedColumns.length === 1) {
|
|
systemAlertService.error({
|
|
text: $filter('i18n')('console.ticket.allColumnsRemove.warning'),
|
|
clear: true
|
|
});
|
|
return false;
|
|
}
|
|
$scope.selectedColumns.splice($scope.selectedColumns.indexOf(column), 1);
|
|
$scope.availiableColumns.push(column);
|
|
}
|
|
};
|
|
$scope.moveColumn = function (index, direction) {
|
|
var selectedColumn = $scope.selectedColumns[index];
|
|
if (direction === 'up' && $scope.selectedColumns[index - 1]) {
|
|
$scope.selectedColumns[index] = $scope.selectedColumns[index - 1];
|
|
$scope.selectedColumns[index - 1] = selectedColumn;
|
|
}
|
|
else if (direction === 'down' && $scope.selectedColumns[index + 1]) {
|
|
$scope.selectedColumns[index] = $scope.selectedColumns[index + 1];
|
|
$scope.selectedColumns[index + 1] = selectedColumn;
|
|
}
|
|
};
|
|
$scope.refreshMetadata = function () {
|
|
if ($scope.showMetadataReloadButton) {
|
|
$modalInstance.close('refresh');
|
|
}
|
|
};
|
|
}
|
|
]);
|
|
})();
|