187 lines
12 KiB
JavaScript
187 lines
12 KiB
JavaScript
"use strict";
|
|
(function () {
|
|
'use strict';
|
|
angular.module('consoleModule')
|
|
.factory('consolePresetModel', ['ticketConsoleModel', 'knowledgeConsoleModel', 'assetConsoleModel',
|
|
function (ticketConsoleModel, knowledgeConsoleModel, assetConsoleModel) {
|
|
var consolePresetModel = {}, advancedFilters = ['cpu', 'operatingSystem', 'processor', 'rack'], consoleModel = null;
|
|
consolePresetModel.consoleType = 'ticket';
|
|
consolePresetModel.selectedPreset = {};
|
|
function getFilterConfigOfSelectedPreset() {
|
|
consolePresetModel.filterConfig = _.reject(consolePresetModel.filterConfig, function (filter) {
|
|
filter.expanded = false;
|
|
return (filter.type === 'custom');
|
|
});
|
|
var customFilterDict = [];
|
|
_.each(_.cloneDeep(consoleModel.customColumnsObjs), function (obj) {
|
|
if (consolePresetModel.selectedPreset && consolePresetModel.selectedPreset.columnValue
|
|
&& consolePresetModel.selectedPreset.columnValue.hasOwnProperty(obj.attributeName)) {
|
|
var optionsObj = obj.options || obj.oldFields.options;
|
|
if (optionsObj) {
|
|
obj = consoleModel.formatFilterOptionForCustomField(_.cloneDeep(optionsObj), obj);
|
|
if (_.isUndefined(_.find(consolePresetModel.filterConfig, { name: obj.name }))) {
|
|
obj.expanded = false;
|
|
customFilterDict.push(obj);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
consolePresetModel.filterConfig = _.sortBy(consolePresetModel.filterConfig.concat(customFilterDict), 'name');
|
|
}
|
|
consolePresetModel.init = function (consoleType, selectedPreset) {
|
|
consolePresetModel.selectedPreset = selectedPreset;
|
|
consolePresetModel.consoleType = consoleType;
|
|
switch (consoleType) {
|
|
case EntityVO.TYPE_TICKET:
|
|
consoleModel = ticketConsoleModel;
|
|
break;
|
|
case EntityVO.TYPE_KNOWLEDGE:
|
|
consoleModel = knowledgeConsoleModel;
|
|
break;
|
|
case EntityVO.TYPE_ASSET:
|
|
consoleModel = assetConsoleModel;
|
|
break;
|
|
}
|
|
consolePresetModel.filterConfig = _.cloneDeep(consoleModel.filterConfig);
|
|
if (consoleType === EntityVO.TYPE_TICKET) {
|
|
getFilterConfigOfSelectedPreset();
|
|
}
|
|
consolePresetModel.filterPreferenceGroup = consoleModel.filterPreferenceGroup;
|
|
consolePresetModel.filterDict = _.keyBy(consolePresetModel.filterConfig, 'name');
|
|
consolePresetModel.applyFilterSet(selectedPreset.value);
|
|
consolePresetModel.consoleColumns = angular.copy(_.sortBy(consoleModel.columnsConfig, 'name'));
|
|
if (consoleType === EntityVO.TYPE_TICKET) {
|
|
var columnFilterOptions = _.cloneDeep(consoleModel.ticketTypeFilter.options);
|
|
var ticketTypesPermitted = _.map(columnFilterOptions, 'name');
|
|
_.remove(consolePresetModel.consoleColumns, function (column) {
|
|
if (!angular.isUndefined(column.ticketType) && _.intersection(column.ticketType, ticketTypesPermitted).length == 0) {
|
|
return true;
|
|
}
|
|
});
|
|
}
|
|
consolePresetModel.advanceSerachQuery = _.remove(consolePresetModel.selectedPreset.value, function (item) {
|
|
return item.filter === 'advanceSearchQuery';
|
|
});
|
|
consolePresetModel.selectedFilters = _.map(consolePresetModel.selectedPreset.value, function (item) {
|
|
var option = _.find(consolePresetModel.filterDict[item.filter] && consolePresetModel.filterDict[item.filter].options, { name: item.option });
|
|
if (!option && item.type === 'dynamic') {
|
|
option = item.realOption;
|
|
consolePresetModel.filterDict[item.filter].options.push(item.realOption);
|
|
}
|
|
else if (!option) {
|
|
var optionsObj = obj.options || obj.oldFields.options;
|
|
if (optionsObj) {
|
|
}
|
|
var consoleColumn = _.find(consoleModel.customColumnsObjs, { name: item.filter });
|
|
if (consoleColumn) {
|
|
consoleColumn = _.cloneDeep(consoleColumn);
|
|
consoleColumn = consoleModel.formatFilterOptionForCustomField(_.cloneDeep(consoleColumn.options || consoleColumn.oldFields.options), consoleColumn);
|
|
if (_.isUndefined(_.find(consolePresetModel.filterConfig, { name: consoleColumn.name }))) {
|
|
consoleColumn.expanded = false;
|
|
consolePresetModel.filterConfig.push(consoleColumn);
|
|
consolePresetModel.filterConfig = _.sortBy(consolePresetModel.filterConfig, 'name');
|
|
consolePresetModel.filterDict = _.keyBy(consolePresetModel.filterConfig, 'name');
|
|
}
|
|
option = _.find(consoleColumn.options, { name: item.option });
|
|
}
|
|
}
|
|
option.active = true;
|
|
var filterName = option.filterName || option.criteria.name, filter = consolePresetModel.filterDict[filterName];
|
|
option.filterName = filter.name;
|
|
option.filterLabel = filter.label;
|
|
return option;
|
|
});
|
|
var cols = [], defaultVisibleColumns = _.filter(consoleModel.columnsConfig, { 'visible': true });
|
|
cols = angular.copy(_.filter(consoleModel.columnsConfig, function (item) {
|
|
if (consolePresetModel.selectedPreset.columnValue) {
|
|
var presetColumn = consolePresetModel.selectedPreset.columnValue[item.name];
|
|
if (presetColumn) {
|
|
item.order = presetColumn.order;
|
|
return item;
|
|
}
|
|
}
|
|
}));
|
|
//check if preset was created before 1.5SP1
|
|
//accordingly loop and add columns from default column set to keep behavior consistent
|
|
if (consolePresetModel.selectedPreset.columnValue && !consolePresetModel.selectedPreset.columnValue.newColumnType && defaultVisibleColumns.length) {
|
|
_.forEach(defaultVisibleColumns, function (item) {
|
|
if (!_.find(cols, { name: item.name })) {
|
|
var columnData = angular.copy(item);
|
|
cols.push(columnData);
|
|
}
|
|
});
|
|
}
|
|
consolePresetModel.gridColumns = _.sortBy(cols, 'order');
|
|
_.forEach(consolePresetModel.consoleColumns, function (column) {
|
|
if (_.isObject(column)) {
|
|
column.visible = _.find(consolePresetModel.gridColumns, { name: column.name }) ? true : false;
|
|
}
|
|
});
|
|
};
|
|
consolePresetModel.getUserSavedPreset = function (presetName) {
|
|
return _.find(consoleModel.userSavedFilterPresets, { name: presetName })
|
|
|| _.find(consoleModel.userSavedColumnPresets, { name: presetName });
|
|
};
|
|
consolePresetModel.setFilterPresetData = function (prop, value) {
|
|
_.set(_.find(consoleModel.userSavedFilterPresets, { id: consolePresetModel.selectedPreset.id }), prop, value);
|
|
_.set(_.find(consoleModel.userSavedPresets, { id: consolePresetModel.selectedPreset.id }), prop, value);
|
|
};
|
|
consolePresetModel.setColumnPresetData = function (prop, value) {
|
|
_.set(_.find(consoleModel.userSavedColumnPresets, { id: consolePresetModel.selectedPreset.columnId }), prop, value);
|
|
};
|
|
consolePresetModel.updateColumnConfig = function (columnsToUpdate, presetName, id) {
|
|
return consoleModel.updateColumnConfig(columnsToUpdate, presetName, id);
|
|
};
|
|
consolePresetModel.applyFilterSet = function (filterSet) {
|
|
_.forEach(filterSet, function (item) {
|
|
if (consolePresetModel.filterDict[item.filter]) {
|
|
var option = _.find(consolePresetModel.filterDict[item.filter].options, { name: item.option });
|
|
if (!option && item.type === 'dynamic') {
|
|
option = item.realOption;
|
|
if (consolePresetModel.advancedFilterType(option)) {
|
|
option.subtype = 'range';
|
|
consolePresetModel.filterDict[item.filter].options[0] = option;
|
|
}
|
|
else {
|
|
var newOption = _.find(consolePresetModel.filterDict[item.filter].options, function (o) {
|
|
if (o.criteria && option.criteria) {
|
|
return _.isEqual(o.criteria, option.criteria);
|
|
}
|
|
});
|
|
if (newOption) { //check for localized option name
|
|
option = newOption;
|
|
}
|
|
else {
|
|
consolePresetModel.filterDict[item.filter].options.push(option);
|
|
}
|
|
}
|
|
}
|
|
if (angular.isObject(option)) {
|
|
if (item.type === 'dynamic' && consolePresetModel.advancedFilterType(option)) {
|
|
_.forEach(consolePresetModel.filterDict[item.filter].criteriaKeys, function (criteriaKey) {
|
|
_.forEach(option.criteria.value, function (val) {
|
|
if (!_.isUndefined(val[criteriaKey.name])) {
|
|
consolePresetModel.filterDict[item.filter].selectiveClearFilters = true;
|
|
criteriaKey.active = true;
|
|
criteriaKey.fromPreset = true;
|
|
criteriaKey.searchText = val[criteriaKey.name].value;
|
|
criteriaKey.selectedValue = val[criteriaKey.name].value;
|
|
}
|
|
});
|
|
});
|
|
}
|
|
option.active = true;
|
|
}
|
|
}
|
|
});
|
|
};
|
|
consolePresetModel.advancedFilterType = function (filterOption) {
|
|
return filterOption.criteria && filterOption.criteria.name !== 'rack' ? _.includes(advancedFilters, filterOption.criteria.name) : false;
|
|
};
|
|
consolePresetModel.updateGridData = function () {
|
|
consoleModel.getItemList();
|
|
};
|
|
return consolePresetModel;
|
|
}]);
|
|
}());
|