"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 = {}; 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(consolePresetModel.cachedFilterConfig); consolePresetModel.filterPreferenceGroup = consoleModel.filterPreferenceGroup; consolePresetModel.filterDict = _.indexBy(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 = _.pluck(columnFilterOptions, 'name'); _.remove(consolePresetModel.consoleColumns, function (column) { if (!angular.isUndefined(column.ticketType) && _.intersection(column.ticketType, ticketTypesPermitted).length == 0) { return true; } }); } consolePresetModel.selectedFilters = _.map(consolePresetModel.selectedPreset.value, function (item) { var option = _.find(consolePresetModel.filterDict[item.filter].options, { name: item.option }); if (!option && item.type === 'dynamic') { option = item.realOption; consolePresetModel.filterDict[item.filter].options.push(item.realOption); } 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; }]); }());