{"version":3,"file":"app-bf346e9b.a769f252fcdc31f7.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","async","model","console","log","this","filters","selectedCategory","getFilterCategoryContext","Boolean","setFilterList","setCategoryList","loadSavedFilterCfgs_FS","selFilter","getSelectedFilter","setTheSelectedFilter","filterCategoryCtx","id","system","postJson","projectId","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","OpenModal","whenClosed","x","chooseCategory","category","setFilterCategoryContext","select","index","indexOf","push","unSelect","targetType","projectCategories","OFS_service","getProjectCategories","sort","a","b","nameA","name","toUpperCase","nameB","valueFilters","getAvailableFiltersByAppliedFilters","forEach","element","selectedSortingOption","icon","iconTransparency","ok","saveChangesCheck","grouped","filtersToSave","concat","selectedFilter","length","saveChangesPrompt","oldParams","newParams","isSame","param","compareNames","i","cancel","previousFilter","FS_setSelectedFilter","setSelectedFilter","dlg","wasCancelled","output","adaptedForSaving","keepSelectedFilters","objectFilter","createFilterSetting_fromOF","newFilterId","doSaveNewFilter","availability","setAsDefault","path","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","adapted","finally","duplicateFilter","map","then","result","who","get","savedFilter","Array","from","Set","resetAVAILABLE_FilterSettings","savedSetting","grouped_objectFilter","transferFilterSettings","includes","matchedSavedFilter","find","filterToSet","OpenConfirm","saveFilter","deleteFilter","filterToDelete","theDefaultFilter","getDefaultFilter","setDefaultFilter","savedSettings","comparisonMethods","sortingMethods","removeInvalidFilter","isLocked","groupedFilter","openCombineFilters","saveCombinedFilter","groupingId","filterId","userId","combindFilterObj","publish","compareFilterSettings","observable","autoinject","DialogController","I18N"],"sourceRoot":""}