{"version":3,"file":"app-bf346e9b.b3ae50741351d832.bundle.js","mappings":"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","sources":["webpack://client-app/./src/app/components/filter/selector/filter-selector.ts"],"sourcesContent":["import { IdNamePair } from './../../../models/idNamePair';\r\nimport { SettingNames } from 'app/models/setting-dto';\r\nimport { EventAggregator } from 'aurelia-event-aggregator';\r\nimport { AppContextService } from 'app/services/app-context-service';\r\nimport { SaveNewFilter, SaveNewFilter_Out } from '../prompts/save-new-filter/save-new-filter';\r\nimport { I18N } from 'aurelia-i18n';\r\nimport { ApiClient } from 'app/services/api-client';\r\nimport { FilterGroupingSelector } from 'app/components/filter/grouping/grouping-selector';\r\nimport { ObjectListColumnManager } from 'app/services/object-list/object-list-column-manager';\r\nimport { DialogCloseResult, DialogController } from 'aurelia-dialog';\r\nimport { autoinject, observable } from 'aurelia-framework';\r\nimport { DnDService } from 'app/services/d-n-d-service';\r\nimport { ObjectFilter, UIValueFilter, ValueFilter, ValueFilterUI2 } from 'app/models/object-filter';\r\nimport { ObjectValues } from 'app/models/object-values';\r\nimport { ModalService } from 'app/services/modal-service';\r\nimport { FilterDto, FilterSettings } from 'app/models/filter-dto';\r\nimport { CombineFilters } from '../combine/combine-filters';\r\n//import { ObjectFilterService } from 'app/services/object-services/object-filter-service';\r\n\r\nexport interface FilterSelectorDto {\r\n filters: ObjectListColumnManager;\r\n gridMode:string;\r\n}\r\n\r\n@autoinject\r\nexport class FilterSelector {\r\n public filters: ObjectListColumnManager | undefined;\r\n\r\n //public available: ObjectFilter[];\r\n public available: UIValueFilter[] = [];\r\n \r\n public searchFilter: string = \"\";\r\n public categories: IdNamePair[] = [];\r\n public selectCategory: boolean = false;\r\n public selectedCategory: IdNamePair | undefined;\r\n public isEditGroupingClicked: boolean = false;\r\n\r\n //public dragFilter: ObjectFilter; // This is a hack used to change the dragged html at the time it is copied to the mouse\r\n public dragFilter: UIValueFilter | undefined; // This is a hack used to change the dragged html at the time it is copied to the mouse\r\n \r\n public saveFilterNameInput: string = \"\";\r\n public saveFilterProjectId: string = \"\";\r\n public saveFilterAvailability: number = -1;\r\n public savedFilters: FilterDto[] = [];\r\n public invalidFilters: FilterSettings[] = [];\r\n public gridMode: string = \"\";\r\n public selectedGrouped: ObjectFilter[] = [];\r\n @observable public selectedFilter: FilterDto | undefined;\r\n @observable public selectedFilterName: string = \"Load\";\r\n @observable public filterSelected: boolean = false;\r\n private previousFilter: FilterDto | undefined; \r\n\r\n constructor(protected dialog: DialogController, private dndService: DnDService, private modal: ModalService, private apiClient: ApiClient, private i18n: I18N, private appContext: AppContextService, private events: EventAggregator) {\r\n\r\n }\r\n\r\n\r\n async activate(model:FilterSelectorDto): Promise {\r\n console.log('fs-act');\r\n this.filters = model.filters;\r\n this.gridMode = model.gridMode;\r\n\t this.selectedCategory = this.filters.getFilterCategoryContext();\r\n\r\n if (Boolean(this.selectedCategory))\r\n await this.setFilterList();\r\n else{\r\n await this.setCategoryList();\r\n }\r\n\r\n await this.loadSavedFilterCfgs_FS('fs.act');//in-activate\r\n\r\n let selFilter: FilterDto | null = this.appContext.getSelectedFilter(); // dvs. whatever filter var aktuelt valgt, i konteksten udefra vi blev kaldt i.\r\n if (selFilter) {\r\n await this.setTheSelectedFilter(selFilter);//FS.activate\t // JG: er det med vilje, der ikke var await paa her?\r\n }\r\n }\r\n\r\n async deactivate(): Promise {\r\n let filterCategoryCtx: IdNamePair | undefined = this.filters?.getFilterCategoryContext();\r\n\t if (filterCategoryCtx) {\r\n\t\t if (filterCategoryCtx.id) {\r\n this.apiClient.system.postJson(`Setting/AddUserSetting/${this.appContext.projectId}/${SettingNames.defaultCategory}`, filterCategoryCtx.id).noResponse();\r\n }\r\n }\r\n }\r\n\r\n attached(): void {\r\n let draggedItem: UIValueFilter | undefined;//ObjectFilter;\r\n this.dndService.attachListInteraction(\"selected-filters-list\", {\r\n animation: 150,\r\n forceFallback: true,\r\n group: \"filter-selector\",\r\n handle: \".drag-handle\",\r\n draggable: \".draggable-item\",\r\n dragClass: \"draggable-item--dragged\",\r\n chosenClass: \"draggable-item--chosen\",\r\n ghostClass: \"draggable-item--ghost\",\r\n onChoose: (event: any) => {\r\n draggedItem = this.filters?.selected[event.oldDraggableIndex];\r\n this.dragFilter = draggedItem;\r\n },\r\n onUnchoose: (event: any) => this.dragFilter = undefined,\r\n onClone: (event: any) => this.dragFilter = undefined,\r\n onMove: (event: any) => this.dragFilter = event.to.id == \"available-filters-list\" ? draggedItem : undefined,\r\n\t\tonEnd: (event: any) => {\r\n if (event.to.id == \"available-filters-list\") {\r\n let item: UIValueFilter | undefined = this.filters?.selected[event.oldDraggableIndex];\r\n if (item) {\r\n this.filters?.selected.splice(event.oldDraggableIndex, 1); // remove from old index in old list\r\n this.available.splice(event.newDraggableIndex, 0, item); // add to new index in new list\r\n }\r\n } else {\r\n let item: UIValueFilter | undefined = this.filters?.selected[event.oldDraggableIndex];\r\n if (item) {\r\n this.filters?.selected.splice(event.oldDraggableIndex, 1); // remove from old index\r\n this.filters?.selected.splice(event.newDraggableIndex, 0, item); // add to new index\r\n }\r\n }\r\n this.dragFilter = undefined;\r\n draggedItem = undefined;\r\n }\r\n });\r\n }\r\n\r\n detached(): void {\r\n this.dndService.detachListInteraction(\"selected-filters-list\");\r\n }\r\n\r\n public parameterFilterDetails(filter: ObjectFilter): string {\r\n\t let hasData: string = filter.isUsed ? 'The parameter has data.' : '';\r\n\t //console.log('PFD:',filter);\r\n\t let cats: string = filter.anyCat ? filter.anyCat : \"\";\r\n\t return `${hasData} (cats:${cats}) ${filter.targetId}`;\r\n }\r\n\r\n public async openFilterGroupingSelector(): Promise {\r\n if (this.isEditGroupingClicked)\r\n return;\r\n\r\n this.isEditGroupingClicked = true;\r\n await this.modal.OpenModal(FilterGroupingSelector, this.filters).whenClosed((x: DialogCloseResult) => {\r\n this.isEditGroupingClicked = false;\r\n });\r\n await this.setFilterList();\r\n }\r\n\r\n public chooseCategory(category: IdNamePair): void {\r\n this.selectedCategory = category;\r\n this.filters?.setFilterCategoryContext(category);\r\n this.setFilterList();\r\n }\r\n\r\n public select(filter: UIValueFilter): void {\r\n let index: number = this.available.indexOf(filter);\r\n if (index >= 0) {\r\n\t\tthis.available.splice(index, 1);\t\t \r\n\t this.filters?.selected.push(filter); \r\n }\r\n }\r\n\r\n public unSelect(filter: ObjectFilter): void {\r\n let selected: number | undefined = this.filters?.selected.indexOf(filter);\r\n let index: number = selected != undefined ? selected : -1;\r\n if (index >= -1) { //index 0 is also valid to remove.\r\n this.filters?.selected.splice(index, 1);\r\n this.available.push(filter); // in unselect.\r\n }\r\n }\r\n\r\n public async toggleCategorySelect(): Promise {\r\n if (this.selectCategory)\r\n await this.setFilterList();\r\n else\r\n await this.setCategoryList();\r\n }\r\n\r\n private async setCategoryList(): Promise {\r\n this.searchFilter = \"\";\r\n this.selectCategory = true;\r\n this.available = [];\r\n\r\n // JG - oeh - hvorfor bruges dette ikke?\r\n // ToDo get categories based on project category list when implemented\r\n let staticCategoryFilter: ValueFilterUI2 | undefined = ObjectValues.staticFiltersAll.find(x => x.targetType == ObjectValues.targetTypes.category);\r\n let projectCategories: IdNamePair[] | undefined = await this.filters?.OFS_service.getProjectCategories();\r\n this.categories = projectCategories ? projectCategories : [];\r\n console.log('gotten this.categories?', this.categories);\r\n\r\n this.categories.sort(function (a, b) {\r\n // console.log('a:',a);\r\n // console.log('b:',b);\r\n let nameA: string = a.name.toUpperCase();\r\n let nameB: string = b.name.toUpperCase();\r\n\r\n if (nameA < nameB) {\r\n return -1;\r\n }\r\n if (nameA > nameB) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n });\r\n }\r\n\r\n private async setFilterList(): Promise {\r\n this.searchFilter = \"\";\r\n this.selectCategory = false;\r\n\t this.categories = [];\r\n\r\n let availablefilters: ValueFilter[] | undefined = await this.filters?.getAvailableFiltersByAppliedFilters('sfl');\r\n let valueFilters:ValueFilter[] = availablefilters ? availablefilters : [];\r\n\t this.available = ObjectListColumnManager.valueFilter2UIFilter(valueFilters);\r\n\r\n\t this.available.forEach((element: UIValueFilter) => {\r\n\t\telement.selectedSortingOption = { name: 'none', icon: 'fa fa-sort', iconTransparency: '0.4' };\r\n\t})\r\n }\r\n\r\n\tpublic ok(): void {\r\n\t\tthis.saveChangesCheck();\r\n\t}\r\n\r\n\tprivate async saveChangesCheck(): Promise {\r\n if (this.filters && this.filters.grouped) {\r\n let filtersToSave: UIValueFilter[] = this.filters.selected.concat(this.filters.grouped);\r\n if (this.selectedFilter != undefined && filtersToSave != undefined) { //SECURITY CHECK\r\n if (this.selectedFilter.filters.length != filtersToSave.length) {\r\n this.saveChangesPrompt(this.selectedFilter); //WORKS! NB: NOT IF ADJUSTING THE \"DEFAULT\"\r\n } else {\r\n let oldParams:string[] = [];\r\n let newParams:string[] = [];\r\n let isSame: boolean = true;\r\n\r\n this.selectedFilter.filters.forEach((param: FilterSettings) =>{\r\n oldParams.push(param.name);\r\n })\r\n oldParams.sort(this.compareNames);\r\n\r\n filtersToSave.forEach((param: UIValueFilter) => {\r\n newParams.push(param.name);\r\n })\r\n newParams.sort(this.compareNames);\r\n\r\n for (let i = 0; i < oldParams.length; i++){\r\n if(oldParams[i] !== newParams[i]){\r\n isSame = false;\r\n }\r\n }\r\n\r\n if (isSame) {\r\n this.dialog.ok();\r\n } else {\r\n this.saveChangesPrompt(this.selectedFilter);\r\n }\r\n }\r\n } else {\r\n this.dialog.ok();\r\n }\r\n }\r\n\t}\r\n\r\n\r\n public cancel(): void {\r\n\t if (this.previousFilter) {\r\n this.FS_setSelectedFilter(this.previousFilter); //in cancel. this.selectedFilter = this.previousFilter;\r\n this.appContext.setSelectedFilter(this.previousFilter, 'FS.cancel sets back to previousFilter.');\r\n\t }\r\n this.dialog.cancel();\r\n }\r\n\r\n public async newFilter(): Promise {\r\n let dlg:DialogCloseResult = await this.modal.OpenModal(SaveNewFilter).whenClosed();\r\n if (dlg.wasCancelled) { console.log('(save-new-filter was cancelled.)'); return; }\r\n let output:SaveNewFilter_Out = dlg.output;\r\n console.log(output);\r\n\r\n let adaptedForSaving:FilterSettings[] = [];\t\t \r\n if (output.keepSelectedFilters) {\r\n this.filters?.selected.forEach((objectFilter: UIValueFilter) => {\r\n adaptedForSaving.push(this.createFilterSetting_fromOF(objectFilter));\r\n })\r\n }\r\n\r\n let newFilterId:string = await this.doSaveNewFilter({\r\n name: output.name,\r\n projectId: output.projectId,\r\n availability: output.availability, // filterDto har dette felt?\r\n filters: adaptedForSaving\r\n });\r\n \r\n console.log('newFilter, id:', newFilterId,'saveDefault?', output.setAsDefault);\r\n if (output.setAsDefault) { await this.setAsDefault(newFilterId); } \r\n }\r\n\r\n async setAsDefault(newFilterId:string): Promise {\r\n let path: string = `Setting/AddUserSetting/${this.appContext.projectId}/${SettingNames.lastAppliedFilters}`;//in-FilterSelector.setAsDefault\r\n let r: void = await this.apiClient.system.postJson(path, newFilterId).noResponse(); //stringResult();//newFilter // noResponse\r\n //console.log('setAsDefault resp:', r, 'for:', path);\r\n }\r\n\r\n private async doSaveNewFilter(filterObject: FilterDto): Promise {\r\n try {\r\n let newFilterId:string = await this.apiClient.project(this.appContext.projectId).postJson(\"Filter/CreateFilter\", filterObject)\r\n .handleError(this.i18n.tr('Error_Title_Generic'), this.i18n.tr('Error_Message_Generic'))\r\n .jsonResult();\r\n console.log('doSaveNewFilter, data was:', newFilterId);\r\n return newFilterId;\r\n } finally {\r\n\t\t await this.displaySavedFilterCfg(filterObject); // in doSaveNewFilter.\r\n }\r\n }\r\n\r\n private adaptFilter(object: FilterDto): FilterDto {\r\n\t /* adapts both ObjectFilters (selected and groups) as well as FilterSettings (invalids) into FilterSettings,\r\n\t * then wraps it in a FilterDto.\r\n\t */\r\n let filterSettings_List: FilterSettings[] = [];\r\n if (this.filters) {\r\n\r\n for (let selected_ObjectFilter of this.filters.selected) {\r\n let selected_FilterSetting: FilterSettings = this.createFilterSetting_fromOF(selected_ObjectFilter);\r\n filterSettings_List.push(selected_FilterSetting); \r\n }\r\n }\r\n\r\n\t if (this.invalidFilters !== undefined) {\r\n\t\t for (let invalid_FilterSetting of this.invalidFilters) {\r\n\t\t\t let invalid_filterSetting: FilterSettings = this.createFilterSetting_fromFS(invalid_FilterSetting);\r\n\t\t\t filterSettings_List.push(invalid_filterSetting);\r\n\t\t }\r\n\t }\r\n\r\n\t if (this.filters?.grouped) {\r\n\t\t for (let grouped_ObjectFilter of this.filters.grouped) {\r\n\t\t\t let grouped_filterSetting: FilterSettings = this.createFilterSetting_fromOF(grouped_ObjectFilter);\r\n\t\t\t filterSettings_List.push(grouped_filterSetting);\r\n\t\t }\r\n\t }\r\n\r\n // filtersList.sort(this.compareFilterSettings);\t\r\n return this.createFilterObject(object, filterSettings_List);\r\n }\r\n\r\n private createFilterObject(filter: FilterDto, list: FilterSettings[]): FilterDto {\r\n\t\treturn {\r\n\t\t\tid: filter.id,\r\n\t\t\tname: filter.name,\r\n\t\t\tprojectId: filter.projectId,\r\n\t\t\tavailability: filter.availability,\r\n\t\t\tfilters: list\r\n\t\t}\r\n }\r\n\t\r\n private createFilterSetting_fromOF(filter:UIValueFilter): FilterSettings {\r\n\t \tlet fs: UIValueFilter = filter;\r\n\t\tif(fs.selectedComparisonOption === null){\r\n\t\t\tfs.selectedComparisonOption = {name:'none'};\r\n\t\t}\r\n\t\tif(fs.selectedSortingOption === null || undefined){\r\n\t\t\tfs.selectedSortingOption = {\r\n\t\t\t\tname:\"none\",\r\n\t\t\t\ticon:\"fa fa-sort fa-fw\"\r\n\t\t\t};\r\n\t\t}\r\n\t\treturn {\r\n\t\t\tname: fs.name,\r\n\t\t\tselectedSortingOption: fs.selectedSortingOption !== undefined ? fs.selectedSortingOption.name : 'none',\r\n\t\t\tselectedComparisonOption: fs.selectedComparisonOption !== undefined ? fs.selectedComparisonOption.name : 'none',\r\n\t\t\thide: fs.hide,\r\n\t\t\tvalue: fs.value !== undefined && fs.selectedComparisonOption !== undefined ? fs.value : ''\r\n\t\t}\r\n }\r\n\r\n private createFilterSetting_fromFS(filter: FilterSettings): FilterSettings {\r\n\tlet fs: FilterSettings = filter;\r\n\tif(fs.selectedComparisonOption === null){\r\n\t\tfs.selectedComparisonOption = 'none';\r\n\t}\r\n\tif(fs.selectedSortingOption === null || undefined){\r\n\t\tfs.selectedSortingOption = 'none';\r\n\t}\r\n\t return { // \r\n\t\t\tname: fs.name,\r\n\t\t\tselectedSortingOption: fs.selectedSortingOption !== undefined ? fs.selectedSortingOption : 'none',\r\n\t\t\tselectedComparisonOption: fs.selectedComparisonOption !== undefined ? fs.selectedComparisonOption : 'none',\r\n\t\t\thide: fs.hide,\r\n\t\t\tvalue: fs.value !== undefined && filter.selectedComparisonOption !== undefined ? fs.value : ''\r\n\t\t}\r\n }\r\n\r\n\r\n public async saveFilter(): Promise{\r\n if (this.selectedFilter) {\r\n let adapted:FilterDto = this.adaptFilter(this.selectedFilter);\r\n \r\n await this.apiClient.project(this.appContext.projectId).postJson(\"Filter/UpdateFilter\", adapted)\r\n .handleError(this.i18n.tr('Error_Title_Generic'), this.i18n.tr('Error_Message_Generic'))\r\n .jsonResult()\r\n .finally(() => {\r\n this.displaySavedFilterCfg(adapted); // in saveFilter.\r\n });\r\n }\r\n }\r\n\r\n public duplicateFilter(): void {\r\n this.modal.OpenModal(SaveNewFilter).whenClosed((x: DialogCloseResult) => {\r\n if (!x.wasCancelled) {\r\n if (this.selectedFilter) {\r\n this.doSaveNewFilter({\r\n name: x.output.name,\r\n projectId: x.output.projectId,\r\n availability: x.output.availability,\r\n filters: this.selectedFilter.filters.map((x: FilterSettings) => {\r\n name: x.name,\r\n hide: x.hide,\r\n selectedSortingOption: x.selectedSortingOption,\r\n value: x.value\r\n }\r\n )}).then( (result:string) => {\r\n if(x.output.setAsDefault) {\r\n console.log('duplicateFilter, result:', result);\r\n this.apiClient.system.postJson(`Setting/AddUserSetting/${this.appContext.projectId}/${SettingNames.lastAppliedFilters}`, result).noResponse();//FilterSelector.duplicateFilter\r\n } \r\n }).finally(() => {\r\n this.loadSavedFilterCfgs_FS('df');//in-duplicateFilter\r\n })\r\n }\r\n }\r\n })\r\n }\r\n\r\n private async loadSavedFilterCfgs_FS(who:string): Promise {\r\n\t\tconsole.log('Filters_FS, prj:', who, this.appContext.projectId);\r\n this.savedFilters = [];\r\n this.savedFilters = await this.apiClient.project(this.appContext.projectId).get(\"Filter/GetFilters\")\r\n .handleError(this.i18n.tr('Error_Title_Generic'), this.i18n.tr('Error_Message_Generic'))\r\n .jsonResult();\r\n }\r\n\r\n private async displaySavedFilterCfg(savedFilter: FilterDto): Promise { \r\n /* \r\n Kaldes kun af SAVE OG DELETE!, ie bliver ikke kaldt ifbm opstart.\r\n called by GUI and e.g. saveFilter \r\n */\r\n\r\n // JG: Her er en bug - ER der noget selectedFilter her på dette tidspunkt? \r\n //intended to let the user revert to the previously saved filter, e.g. if the person regrets their changes.\r\n if (this.selectedFilter !== null) {\r\n this.previousFilter = this.selectedFilter; // gemmes til at stille tilbage ved cancel, aabenbart?\r\n }\r\n \r\n this.invalidFilters = []; // ingen er invalid endnu.\t\r\n if (this.filters?.selected) {\r\n this.available = [...this.available, ...this.filters.selected]; // før 'selected' tilbage i available som udgangspunkt her. // den kan blive sur her? 387\r\n } else {\r\n this.available = [...this.available]; // før 'selected' tilbage i available som udgangspunkt her. // den kan blive sur her? 387\r\n }\r\n\r\n let before: number = this.available.length;\r\n this.available = Array.from(new Set(this.available)); // removes a duplicate, similarly to BuildingParts.applyFilterPart\r\n \r\n // (Hmm, vores fætter buildingPart.applyFilterPart ville på dette sted lave dublet-filter for available.)\r\n //console.log('(fs.loadSavedFilter not removing any duplicates)');\r\n\r\n this.resetAVAILABLE_FilterSettings(); // nulstil de beregnede filter-settings (som vi skal til at gen-initialisere).\t\r\n \r\n if (this.filters) {\r\n this.filters.selected = []; \r\n }\r\n\r\n savedFilter.filters.forEach( (savedSetting: FilterSettings) => {\r\n if (savedSetting.selectedSortingOption === null || undefined){\r\n savedSetting.selectedSortingOption = 'none';\r\n }\r\n // Hvis filter-indstillingen vedrører en gruppe-kolonne, så konfigurer denne: \r\n this.filters?.grouped?.forEach( (grouped_objectFilter: UIValueFilter) => {\r\n if (Boolean(grouped_objectFilter.name === savedSetting.name)) {\r\n this.transferFilterSettings(grouped_objectFilter, savedSetting);\r\n this.select(grouped_objectFilter);\r\n }\r\n });\r\n\r\n // Hvis filter-indstillingen vedrører en vilkårlig kolonne, så konfigurer denne:\r\n this.available.forEach((objectFilter: UIValueFilter) => {\r\n if (objectFilter.selectedSortingOption === null || undefined) {\r\n objectFilter.selectedSortingOption = { name: 'none', icon: 'fa fa-sort', iconTransparency: '0.4' };\r\n }\r\n // (JG: NB, available kan godt have dubletter på navn,\r\n // men ANDEN gang vi matcher på navn, \r\n // har select ikke nogen effekt, fordi den ikke finder et match i available.)\r\n if (Boolean(objectFilter.name === savedSetting.name)) {\r\n this.transferFilterSettings(objectFilter, savedSetting);\r\n this.select(objectFilter);\r\n }\r\n });\r\n\r\n // Hvis filteret ikke kunne matches, så vis det med rød warning:\r\n // (jeg forstår ikke, hvorfor GROUPED indgår her - vil de ikke også være SELECTED, jvf. ovenfor her?)\r\n if ( !this.filters?.selected?.map((x: UIValueFilter) => x.name).includes(savedSetting.name)\r\n && !this.filters?.grouped?.map( (x: UIValueFilter) => x.name).includes(savedSetting.name)) {\r\n this.invalidFilters.push(savedSetting);\r\n }\r\n });\r\n\t this.setTheSelectedFilter(savedFilter);//FS-displaySavedFilterCfg.\r\n }\r\n\r\n private async setTheSelectedFilter(filter: FilterDto): Promise {\r\n\t \tif (!filter) { return; }\r\n\r\n await this.loadSavedFilterCfgs_FS('stsf');//in-setTheSelectedFilter\r\n\r\n let matchedSavedFilter:FilterDto | undefined = this.savedFilters.find((x: FilterDto) => x.name == filter.name);\r\n if (matchedSavedFilter) {\r\n this.appContext.setSelectedFilter(matchedSavedFilter, '(setTheSelectedFilter<-matchedSavedFilter)');\r\n this.FS_setSelectedFilter(matchedSavedFilter); // in setTheSelectedFilter \r\n \r\n this.selectedFilterName = this.selectedFilter?.name ? this.selectedFilter.name : \"\";\r\n this.filterSelected = true;\r\n }\r\n }\r\n\r\n\tpublic FS_setSelectedFilter(filterToSet: FilterDto | undefined) { \r\n\t\tthis.selectedFilter = filterToSet;\r\n\t}\r\n\r\n private saveChangesPrompt(filter: FilterDto): void {\r\n this.modal.OpenConfirm(\r\n this.i18n.tr('Save Changes'),\r\n this.i18n.tr('Do you want to save your recent changes to filter \"') + filter.name + '\"?'\r\n ).whenClosed((x: DialogCloseResult) =>{\r\n if (!x.wasCancelled) {\r\n this.saveFilter();\r\n this.dialog.ok();\r\n\t\t\t} else {\r\n\t\t\t\tthis.dialog.ok();\r\n }\r\n })\r\n }\r\n\r\n private deleteFilter(filterToDelete: FilterDto): void {\r\n this.modal.OpenConfirm(\r\n this.i18n.tr('Delete'),\r\n this.i18n.tr('Are you sure you want to delete the filter \"') + filterToDelete.name + '\"?'\r\n ).whenClosed((x: DialogCloseResult) => {\r\n if (!x.wasCancelled) {\r\n this.apiClient.project(this.appContext.projectId).postJson('Filter/DeleteFilter', filterToDelete.id)\r\n .handleError(this.i18n.tr('Error_Title_Generic'), this.i18n.tr('Error_Message_Generic'))\r\n .jsonResult()\r\n .finally(() => {\r\n this.loadSavedFilterCfgs_FS('df');//in-deleteFilter\r\n });\r\n }\r\n }).finally(() => {\r\n\r\n\t\tif (filterToDelete === this.selectedFilter || filterToDelete === this.appContext.getSelectedFilter()) {\r\n\t\t\tlet theDefaultFilter:FilterDto | null = this.appContext.getDefaultFilter();\r\n\t\t\tif (theDefaultFilter === null) {\t\t\t\t\r\n\t\t\t\tthis.FS_setSelectedFilter(undefined); //in deleteFilter, this.selectedFilter = null;\r\n\t\t\t\tthis.selectedFilterName = \"Load\";\r\n\t\t\t\tthis.appContext.setDefaultFilter(null);\r\n\t\t\t\tthis.appContext.setSelectedFilter(null, 'to-null from FS.deleteFilter');\r\n if (this.filters) {\r\n this.filters.selected = [];\r\n }\r\n\t\t\t\tthis.filterSelected = false;\r\n\t\t\t} else {\r\n\t\t\t\tthis.displaySavedFilterCfg(theDefaultFilter); // in deleteFilter.\r\n\t\t\t\tthis.appContext.setSelectedFilter(theDefaultFilter, 'to-theDefaultFilter from FS.deleteFilter');\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t})\r\n }\r\n\t\r\n private transferFilterSettings(objectFilter: UIValueFilter, savedSettings: FilterSettings): void {\r\n objectFilter.hide = savedSettings.hide;\r\n if (Boolean(savedSettings.selectedComparisonOption)) {\r\n let comparisonMethods: any = ObjectValues.comparisonMethods; //Silencing strict compiler.\r\n objectFilter.selectedComparisonOption = comparisonMethods[(savedSettings.selectedComparisonOption)];\r\n }\r\n objectFilter.value = savedSettings.value;\r\n if (Boolean(savedSettings.selectedSortingOption)) {\r\n let sortingMethods: any = ObjectValues.sortingMethods; //Silencing strict compiler.\r\n objectFilter.selectedSortingOption = sortingMethods[(savedSettings.selectedSortingOption)];\r\n }\r\n }\r\n\r\n public removeInvalidFilter(filter: FilterSettings): void {\r\n this.invalidFilters.splice(this.invalidFilters.indexOf(filter), 1);\r\n }\r\n\r\n private resetAVAILABLE_FilterSettings(): void {\r\n this.available.forEach((filter: UIValueFilter) => {\r\n filter.hide = false;\r\n filter.isLocked = undefined;\r\n filter.selectedComparisonOption = undefined;\r\n filter.value = '';\r\n filter.selectedSortingOption = undefined\r\n });\r\n\r\n this.filters?.grouped?.forEach((groupedFilter: UIValueFilter) => {\r\n groupedFilter.hide = false;\r\n groupedFilter.isLocked = undefined;\r\n groupedFilter.selectedComparisonOption = undefined;\r\n groupedFilter.value = '';\r\n groupedFilter.selectedSortingOption = undefined\r\n });\r\n }\r\n\r\n public openCombineFilters(): void {\r\n this.modal.OpenModal(CombineFilters).whenClosed((x: DialogCloseResult) => {\r\n if (!x.wasCancelled) {\r\n this.saveCombinedFilter({\r\n name: x.output.name,\r\n groupingId: x.output.groupingId,\r\n filterId: x.output.filterId,\r\n projectId: x.output.projectId,\r\n userId: x.output.userId\r\n });\r\n }\r\n });\r\n }\r\n\r\n private async saveCombinedFilter(combindFilterObj: {name: string, groupingId: string, filterId: string, projectId: string, userId: string}): Promise {\r\n return await this.apiClient.project(this.appContext.projectId).postJson(\"Filter/CreateCombinedFilter\", combindFilterObj)\r\n .handleError(this.i18n.tr('Error_Title_Generic'), this.i18n.tr('Error_Message_Generic'))\r\n .jsonResult()\r\n .finally(() => {\r\n this.events.publish('combined-filters:update');\r\n });\r\n }\r\n\r\n\tprivate compareFilterSettings(a:FilterSettings, b: FilterSettings): number {\r\n \tif(a.name < b.name){\r\n \t\treturn -1;\r\n\t\t}else if (a.name > b.name){\r\n\t\t\treturn 1;\r\n\t\t}else{\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate compareNames(a: string, b: string): number {\r\n\t\tif(a < b){\r\n\t\t\treturn -1;\r\n\t\t}else if(a > b){\r\n \t\treturn 1;\r\n \t}else{\r\n \t\treturn 0;\r\n \t}\r\n \t}\r\n}\r\n"],"names":["FilterSelector","constructor","dialog","dndService","modal","apiClient","i18n","appContext","events","available","searchFilter","categories","selectCategory","isEditGroupingClicked","saveFilterNameInput","saveFilterProjectId","saveFilterAvailability","savedFilters","invalidFilters","gridMode","selectedGrouped","selectedFilterName","filterSelected","activate","model","console","log","this","filters","selectedCategory","getFilterCategoryContext","Boolean","setFilterList","setCategoryList","loadSavedFilterCfgs_FS","selFilter","getSelectedFilter","setTheSelectedFilter","deactivate","filterCategoryCtx","id","system","postJson","projectId","defaultCategory","noResponse","attached","draggedItem","attachListInteraction","animation","forceFallback","group","handle","draggable","dragClass","chosenClass","ghostClass","onChoose","event","selected","oldDraggableIndex","dragFilter","onUnchoose","undefined","onClone","onMove","to","onEnd","item","splice","newDraggableIndex","detached","detachListInteraction","parameterFilterDetails","filter","isUsed","anyCat","targetId","openFilterGroupingSelector","OpenModal","whenClosed","x","chooseCategory","category","setFilterCategoryContext","select","index","indexOf","push","unSelect","toggleCategorySelect","staticFiltersAll","find","targetType","targetTypes","projectCategories","OFS_service","getProjectCategories","sort","a","b","nameA","name","toUpperCase","nameB","valueFilters","getAvailableFiltersByAppliedFilters","valueFilter2UIFilter","forEach","element","selectedSortingOption","icon","iconTransparency","ok","saveChangesCheck","grouped","filtersToSave","concat","selectedFilter","length","saveChangesPrompt","oldParams","newParams","isSame","param","compareNames","i","cancel","previousFilter","FS_setSelectedFilter","setSelectedFilter","newFilter","dlg","wasCancelled","output","adaptedForSaving","keepSelectedFilters","objectFilter","createFilterSetting_fromOF","newFilterId","doSaveNewFilter","availability","setAsDefault","path","lastAppliedFilters","filterObject","project","handleError","tr","jsonResult","displaySavedFilterCfg","adaptFilter","object","filterSettings_List","selected_ObjectFilter","selected_FilterSetting","invalid_FilterSetting","invalid_filterSetting","createFilterSetting_fromFS","grouped_ObjectFilter","grouped_filterSetting","createFilterObject","list","fs","selectedComparisonOption","hide","value","saveFilter","adapted","finally","duplicateFilter","map","then","result","who","get","savedFilter","Array","from","Set","resetAVAILABLE_FilterSettings","savedSetting","grouped_objectFilter","transferFilterSettings","includes","matchedSavedFilter","filterToSet","OpenConfirm","deleteFilter","filterToDelete","theDefaultFilter","getDefaultFilter","setDefaultFilter","savedSettings","comparisonMethods","sortingMethods","removeInvalidFilter","isLocked","groupedFilter","openCombineFilters","saveCombinedFilter","groupingId","filterId","userId","combindFilterObj","publish","compareFilterSettings","observable","autoinject","DialogController","I18N","EventAggregator"],"sourceRoot":""}