{"version":3,"file":"app-1ce0dcfb.a7fa8c263b29868a.bundle.js","mappings":"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","sources":["webpack://client-app/./src/app/project/quantity-views/quantity-filters.scss","webpack://client-app/./src/app/project/quantity-views/quantity-views.scss","webpack://client-app/./src/app/project/quantity-views/quantity-filters.html","webpack://client-app/./src/app/project/quantity-views/quantity-views.html","webpack://client-app/./src/app/project/quantity-views/quantity-filters.ts","webpack://client-app/./src/app/project/quantity-views/quantity-views.ts"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `html.spincursor{cursor:wait}h4.fat{font-family:\"Trebuchet MS\",\"Lucida Sans Unicode\",\"Lucida Grande\",\"Lucida Sans\",Arial,sans-serif;background:#e4e4e4;padding:1px}h1.spinner{background:#d3d3d3;color:#fff;text-align:center;vertical-align:middle}.quantity-filter-container{width:100%}.quantity-filter-container .top-bar-grid{white-space:nowrap;overflow:hidden}.quantity-filter-container .top-bar-grid .search{min-width:100px}.quantity-filters .headers{grid-template-columns:3em minmax(8em, auto) repeat(9, 10em)}.quantity-filters .headers .cell{justify-content:left;flex-grow:1;white-space:normal;line-height:.7rem}.quantity-filters .headers .cell span.icon{padding-right:.5em}.quantity-filters .main .element{grid-template-columns:3em minmax(8em, auto) repeat(9, 10em)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/app/project/quantity-views/quantity-filters.scss\"],\"names\":[],\"mappings\":\"AAUA,gBAAA,WAAA,CAEA,OACC,+FAAA,CACA,kBAAA,CACA,WAAA,CAGD,WACC,kBAAA,CACA,UAAA,CACA,iBAAA,CACA,qBAAA,CAGD,2BACC,UAAA,CACA,yCACC,kBAAA,CACA,eAAA,CACA,iDACC,eAAA,CAMF,2BACC,2DAnCsB,CAoCtB,iCAEC,oBAAA,CACA,WAAA,CAEA,kBAAA,CACA,iBAAA,CACA,2CAAA,kBAAA,CAID,iCAAA,2DA/CsB\",\"sourcesContent\":[\"@import \\\"src/resources/customized-styles/variables\\\";\\r\\n\\r\\n// 1ch, 2name,3rename,4sources,5columns, 6grid, 7excelsource,8excelq,9duplicate,10viewAll\\r\\n$grid-template-columns: 3em minmax(8em, auto) repeat(9, 10em); //Changed from ch to em to as ch did not work for edge and chrome.\\r\\n/* (the idea is to control the two first columns,\\r\\nand then just space the 8 remaining narrow equally.)\\r\\n\\r\\n8 is now 9\\r\\n*/\\r\\n\\r\\nhtml.spincursor { cursor: wait; }\\r\\n\\r\\nh4.fat { \\r\\n\\tfont-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;\\r\\n\\tbackground: #e4e4e4;\\r\\n\\tpadding: 1px;\\r\\n}\\r\\n\\r\\nh1.spinner {\\r\\n\\tbackground: lightgray;\\r\\n\\tcolor: white;\\r\\n\\ttext-align: center;\\r\\n\\tvertical-align: middle;\\r\\n}\\r\\n\\r\\n.quantity-filter-container {\\r\\n\\twidth:100%;\\r\\n\\t.top-bar-grid {\\r\\n\\t\\twhite-space: nowrap;\\r\\n\\t\\toverflow: hidden;\\r\\n\\t\\t.search {\\r\\n\\t\\t\\tmin-width: 100px;\\r\\n\\t\\t}\\r\\n\\t}\\r\\n}\\r\\n\\r\\n.quantity-filters {\\r\\n\\t.headers { \\r\\n\\t\\tgrid-template-columns: $grid-template-columns;\\r\\n\\t\\t.cell {\\r\\n\\t\\t\\t// these two help with formatting the sorting-marker right?\\r\\n\\t\\t\\tjustify-content: left; \\r\\n\\t\\t\\tflex-grow: 1;\\r\\n\\r\\n\\t\\t\\twhite-space: normal;\\r\\n\\t\\t\\tline-height: 0.7rem;\\r\\n\\t\\t\\tspan.icon { padding-right: 0.5em; }\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\t.main {\\r\\n\\t\\t.element { grid-template-columns: $grid-template-columns; }\\r\\n\\t}\\r\\n}\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.quantity-views .headers{grid-template-columns:3em 6em minmax(8em, auto) 11em}.quantity-views .headers .cell{justify-content:left;flex-grow:1;white-space:normal;line-height:.7rem}.quantity-views .headers .cell span.icon{padding-right:.5em}.quantity-views .main .element{grid-template-columns:3em 6em minmax(8em, auto) 11em}.quantity-views .main .cell{flex-grow:1}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/app/project/quantity-views/quantity-views.scss\"],\"names\":[],\"mappings\":\"AAcC,yBACC,oDAJsB,CAKtB,+BACC,oBAAA,CACA,WAAA,CAEA,kBAAA,CACA,iBAAA,CACA,yCAAA,kBAAA,CAID,+BAAA,oDAfsB,CAgBtB,4BACC,WAAA\",\"sourcesContent\":[\"@import \\\"src/resources/customized-styles/variables\\\";\\r\\n\\r\\n// Derudover laver vi så måske (HELST IKKE) et lille grid inde i de enkelte celler, til at fordele:\\r\\n//$grid-template-columns-wrapper: max-content 10px; //10px auto; //auto 10px; \\r\\n//$grid-template-columns-wrapper: auto 10px; //10px auto; //auto 10px; \\r\\n\\r\\n// JG: grid-template-columns definerer antallet og bredderne af vores grundlæggende kolonner,\\r\\n\\r\\n// Dvs. kolonne:checkbox, kolonne:Rename, kolonne:Name, kolonne:Created.\\r\\n// Disse skulle gerne gælde både i header og i body.\\r\\n\\r\\n$grid-template-columns: 3em 6em minmax(8em, auto) 11em;//Changed from ch to em to as ch did not work for edge and chrome.\\r\\n\\r\\n.quantity-views {\\t\\r\\n\\t.headers { \\r\\n\\t\\tgrid-template-columns: $grid-template-columns; \\r\\n\\t\\t.cell {\\r\\n\\t\\t\\tjustify-content: left;\\r\\n\\t\\t\\tflex-grow: 1;\\r\\n\\r\\n\\t\\t\\twhite-space: normal;\\r\\n\\t\\t\\tline-height: 0.7rem;\\r\\n\\t\\t\\tspan.icon { padding-right: 0.5em; }\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\t.main {\\r\\n\\t\\t.element { grid-template-columns: $grid-template-columns; }\\r\\n\\t\\t.cell {\\r\\n\\t\\t\\tflex-grow: 1;\\r\\n\\t\\t}\\r\\n\\t}\\t\\r\\n}\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","module.exports = \"\\r\\n\";","module.exports = \"\\r\\n\";","import { QuantityViewDto } from './quantity-views';\r\n\r\nimport { ListService, SelectResult } from 'app/services/list-service';\r\nimport { EventAggregator, Subscription } from 'aurelia-event-aggregator';\r\nimport { autoinject } from 'aurelia-framework';\r\nimport {Router} from \"aurelia-router\";\r\nimport { DialogCloseResult } from 'aurelia-dialog';\r\nimport { ApiClient } from 'app/services/api-client';\r\nimport { RequestMethod } from 'app/services/RequestMethod';\r\nimport { ErrorService } from 'app/services/error-service';\r\nimport { AppContextService } from 'app/services/app-context-service';\r\nimport { ModalService } from 'app/services/modal-service';\r\nimport { QuantityFilterCreatePrompt } from './quantityfilter-create-prompt';\r\nimport { QuantityFilterSources } from 'app/components/quantity-filter-sources/quantity-filter-sources';\r\nimport { QuantityFilterColumns } from 'app/components/quantity-filter-columns/quantity-filter-columns';\r\nimport { I18N } from 'aurelia-i18n';\r\nimport { DuplicateQuantityFilter } from 'app/components/duplicate-quantity-filter/duplicate-quantity-filter';\r\nimport {computedFrom} from 'aurelia-framework';\r\nimport { QuantityFilterEditPrompt } from './quantityfilter-edit-prompt';\r\n\r\n// men vi HAR sat\r\n// \"experimentalDecorators\": true\r\n// ??\r\n@autoinject\r\nexport class QuantityFilters {\r\n\tpublic QFs: QuantityFilterDto[] = [];\r\n\tpublic column: string = \"name\";\r\n\tpublic displayState: { icon: string, direction: string } | undefined;\r\n\tpublic searchTerm: string = \"\";\r\n\tpublic viewContext: string;\r\n\tprivate subscriptions: Subscription[] = [];\r\n\tprivate allSelected: boolean = false;\r\n\tprivate selectedQFs: QuantityFilterDto[] = [];\r\n\r\n\tpublic quantityViewId:string | undefined ='';\r\n\tpublic quantityView:QuantityViewDto|null=null;\r\n\t\r\n\tconstructor(private modal: ModalService, private appContext:AppContextService, \r\n\t\tprivate router: Router, private errorService: ErrorService, \r\n\t\tprivate events: EventAggregator, private apiClient: ApiClient, private listService: ListService,\r\n\t\tprivate i18n: I18N) { this.viewContext = \"TopBar\"; }\r\n\r\n\tapi():RequestMethod { return this.apiClient.project(this.appContext.projectId); }\r\n\t\r\n\tdetached() { this.subscriptions.forEach(subscription => (subscription.dispose())); }\r\n\r\n\tasync activate(params: any) {\r\n\t\tif (params.projectId) { this.appContext.setProject(params.projectId); }//in-activate.\r\n\r\n\t\tthis.quantityView = null;\r\n\t\tthis.quantityViewId = undefined;\r\n\t\tif (params.QV_Id) { \r\n\t\t\tthis.quantityViewId = params.QV_Id; \r\n\t\t} else {\r\n\t\t\tconsole.warn('Warning: No QuantityView ID specified, within which to find Quantity Filters.');\r\n\t\t}\r\n\r\n\t\tthis.refreshQuantityFilters(); // nb, async.\r\n\t\tthis.displayState = { icon: \"fa-sort-up\", direction: \"ascending\" };\t\t\r\n\t\tconst searchHandler = (data: any) => this.handleSearchEvent(data);\r\n\t\tthis.subscriptions = [ this.events.subscribe(this.viewContext + \":SearchTermChanged\", searchHandler) ];\r\n\t\tawait this.getQuantityView(); // MUST await.\r\n\t}\r\n\r\n\tasync getQuantityView() {\r\n\t\tif (!this.quantityViewId) { return; }\r\n\t\tlet path = `QuantityView/GetQuantityView?quantityViewId=${this.quantityViewId}`;\r\n\t\tthis.quantityView = await this.api().get(path).jsonResult(); \r\n\t\tconsole.log('getQuantityView got:', this.quantityView);\r\n\t}\r\n\r\n\t@computedFrom('quantityView', 'quantityViewId')\r\n\tget quantityViewTitle():string {\r\n\t\tif (this.quantityView) { return this.quantityView.name; }\r\n\t\treturn this.quantityViewId ? this.quantityViewId : '(No quantity view selected)';\r\n\t}\r\n\r\n\tasync refreshQuantityFilters() {\r\n\t\tif (this.appContext.projectId) { await this.getQuantityFilters(); } \r\n\t}\r\n\r\n \r\n\tprivate async getQuantityFilters() {\r\n\t\tlet path = `QuantityFilter/GetQuantityFilters?quantityViewId=${this.quantityViewId}`;\r\n\t\tthis.QFs = []; \r\n\t\tif (!this.quantityViewId) { return; }\r\n\t\tthis.QFs = await this.api().get(path).jsonResult(); \r\n\t}\r\n\r\n\tpublic async sortBy(columnName: string) {\r\n\t\tawait this.listService.sortBy(columnName).then(r => {\r\n\t\t\tthis.column = r.column; this.displayState = r.displayState;\r\n\t\t});\r\n\t}\r\n\tpublic async toggleQF() { this.setQFs(await this.listService.toggleElement(this.QFs)); }\r\n\tpublic async toggleAll() { \r\n\t\tlet selectResult: SelectResult | undefined = await this.listService.toggleAll(this.QFs); \r\n\t\tif (selectResult) {\r\n\t\t\tthis.setQFs(selectResult);\r\n\t\t} \r\n\t}\r\n\tsetQFs(r:SelectResult) { this.selectedQFs = r.selected; this.allSelected = r.allSelected; }\r\n\tprivate handleSearchEvent(data: string) { this.searchTerm = data; }\t\r\n\r\n\tpublic async createQF() { // createQF\r\n\t\tconsole.log('quantityfilters, create..');\r\n\t\tif (!this.quantityViewId) {\r\n\t\t\tconsole.log('(no quantity-view for which to make quantity-filters.)');\r\n\t\t\treturn;\r\n\t\t\t//this.quantityViewId = '00000000-0000-0000-0000-000000000000'; // Hmm, we don't want QF's under that QV ID!\r\n\t\t}\r\n\r\n\t\tlet r:DialogCloseResult = await this.modal.OpenModal(QuantityFilterCreatePrompt, this.quantityViewId).whenClosed();\r\n\t\tconsole.log('qf create said:',r);\r\n\t\tawait this.refreshQuantityFilters();\r\n\t\t// We COULD forward it to Quantity Columns, if we wanted.\r\n\t\t//if (Boolean(r.output)) { this.navToColumns(r.output); }\r\n\t}\r\n\r\n\t//navToColumns(QF_Id:string) { this.router.navigate('project/' + this.appContext.projectId + '/quantity-filters/' + QF_Id); }\r\n\r\n\tpublic async editQF_Columns(QF:QuantityFilterDto) { // editQF_COLUMNS, was:edit\r\n this.modal.OpenModal(QuantityFilterColumns, QF).whenClosed((x: DialogCloseResult) => {\r\n console.log(\"QF.edit-columns said:\" , x);\r\n });\r\n\t}\r\n\r\n\tasync EditQF_Head(QF: QuantityFilterDto): Promise { //editQF_Head, was: EditQF\r\n\t\tlet dlg = await this.modal.OpenModal(QuantityFilterEditPrompt, QF).whenClosed();\r\n\t\tconsole.log(\"How did we finish?\", dlg);\r\n\t}\r\n\r\n\tasync deleteQF() { // deleteQF.\r\n\t\tdocument.getElementById('delete-filter')?.blur();\r\n\t\tlet result:DialogCloseResult = await this.modal.OpenConfirm(\"Delete\", 'Please confirm that you want to delete the selected quantity filters').whenClosed();\t\t\r\n\t\tif (result.wasCancelled) { return; }\r\n\r\n\t\tif (this.selectedQFs.length === 1) {\r\n\t\t\tthis.QFs.splice(this.QFs.indexOf(this.selectedQFs[0]), 1);\r\n\t\t\tlet xx = await this.api().postJson(\"QuantityFilter/DeleteQuantityFilter\", this.selectedQFs[0].id).jsonResult();\r\n\t\t}\r\n\t\tif (this.selectedQFs.length > 1) {\r\n\t\t\tlet selectedQFIds: string[] = [];\r\n\t\t\tthis.selectedQFs.forEach(x => { \r\n\t\t\t\tselectedQFIds.push(x.id);\r\n\t\t\t\tthis.QFs.splice(this.QFs.indexOf(x), 1);\r\n\t\t\t});\r\n\t\t\tlet xx = this.api().postJson(\"QuantityFilter/DeleteQuantityFilters\", selectedQFIds).jsonResult();\r\n\t\t}\r\n\t\tthis.allSelected = false;\r\n\t\tthis.selectedQFs = [];\r\n\t}\r\n\t\r\n\r\n\tasync openQuantitySource(qf: QuantityFilterDto): Promise {\r\n this.modal.OpenModal(QuantityFilterSources, qf).whenClosed((x: DialogCloseResult) => {\r\n console.log(\"Did we finish?\");\r\n });\r\n\t}\r\n\r\n\tasync showSourcesGrid(qf: QuantityFilterDto): Promise { // was:showQuantityGrid\r\n\t\tconsole.warn(\"outdated, use quantity-takeoff\");\r\n\t\t// this.router.navigate('project/' + this.appContext.projectId + '/quantity-grid/' + qf.id + '/' + qf.name); \r\n\t}\r\n\t\r\n\tasync showPivotGrid(qf: QuantityFilterDto): Promise {\r\n\t\tconsole.warn(\"outdated, use quantity-takeoff\");\r\n\t\t// this.router.navigate('project/' + this.appContext.projectId + '/pivot-grid/' + qf.id + '/' + qf.name); \r\n\t}\r\n\r\n\r\n\tasync duplicateFilter(QF: QuantityFilterDto): Promise {\r\n\t\tlet r:DialogCloseResult = await this.modal.OpenModal(DuplicateQuantityFilter, QF.id).whenClosed();\t\r\n\t\tif (r.wasCancelled != true) {\r\n\t\t\tawait this.refreshQuantityFilters();\r\n\t\t}\t\t\r\n\t}\r\n\r\n\tasync exportToExcelQuantitySources(QF: QuantityFilterDto): Promise {\r\n\t\tthis.runAnim( async() => \t\t\r\n\t\t\tawait this.api().get(`QuantityFilter/RenderQuantityExcel/${QF.id}`)\r\n\t\t\t.handleError(this.i18n.tr('Error_Title_Generic'), this.i18n.tr('Error_Message_Generic'))\r\n\t\t\t.downloadFile(`Sources_${QF.name}.xlsx`)\r\n\t\t);\r\n\t}\r\n\r\n\tasync exportToExcelFilteredQuantities(QF: QuantityFilterDto): Promise {\r\n\t\tthis.runAnim( async() => \t\t\r\n\t\t\tawait this.api().get(`QuantityFilter/RenderQuantityPivot/${QF.id}`)\r\n\t\t\t.handleError(this.i18n.tr('Error_Title_Generic'), this.i18n.tr('Error_Message_Generic'))\r\n\t\t\t.downloadFile(`XLPivot_${QF.name}.xlsx`)\r\n\t\t);\r\n\t}\r\n\r\n\tasync exportToExcelViewAll(QF: QuantityFilterDto): Promise {\r\n\t\tthis.runAnim( async() => \t\t\r\n\t\t\tawait this.api().get(`QuantityFilter/RenderAll_Excel/${QF.id}`)\r\n\t\t\t.handleError(this.i18n.tr('Error_Title_Generic'), this.i18n.tr('Could not generate the Excel export which contains all source values')) // this.i18n.tr('Error_Message_Generic')\r\n\t\t\t.downloadFile(`ALL_${QF.name}.xlsx`)\r\n\t\t);\r\n\t}\r\n\r\n\tasync runAnim(download: ()=>Promise ) {\r\n\t\ttry {\r\n\t\t\tQuantityFilters.animate(true);\r\n\t\t\tconsole.log('before download');\r\n\t\t\tawait download();\r\n\t\t} finally {\r\n\t\t\tconsole.log('after download');\r\n\t\t\tQuantityFilters.animate(false);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static anim:boolean = false; //true;\r\n\tpublic static seconds:number = 0;\r\n\tpublic static timerId: number| undefined;\r\n\tstatic animate(on:boolean) {\r\n\t\tthis.anim = on;\r\n\t\tthis.changeCSS(this.anim);\r\n\t\tif (on) {\r\n\t\t\tthis.seconds = 0;\r\n\t\t\tthis.timerId = setInterval( () => this.timer(), 100);\r\n\t\t} else {\r\n\t\t\tclearInterval(this.timerId);\r\n\t\t\tthis.timerId = undefined;\r\n\t\t}\r\n\t}\r\n\tstatic timer() { ++this.seconds; }\r\n\r\n\r\n\tstatic changeCSS(anim:boolean): void {\r\n\t\tlet rootElm = document.querySelector('html');\r\n\t\tif (anim) { // this.\r\n\t\t\trootElm?.classList.add('spincursor');\r\n\t\t} else {\r\n\t\t\trootElm?.classList.remove('spincursor');\r\n\t\t}\r\n\t}\r\n\r\n async back(): Promise {\r\n\t\t\r\n\t\twindow.history.back(); // JG: If we are allowed to use this, that is a lot simpler..\r\n\t\t/*\r\n let path = `QuantityFilter/GetQuantityViewIdByFilterId?quantityFilterId=${this.quantityFilterId}`;\r\n\t\tif (!this.quantityFilterId) { return; }\r\n\t\tlet QV_Ids = await this.api().get(path).jsonResult(); \r\n if (QV_Ids) {\r\n this.router.navigateToRoute('project/quantity-filters', {projectId: this.appContext.getSelectedProject()?.id, QV_Id: QV_Ids[0]}, {replace: true});\r\n }\r\n\t\t*/\r\n }\r\n\r\n}\r\n\r\nexport interface QuantityFilterDto {\r\n\tid: string;\r\n\tname: string;\r\n\t// settingsId: string; // det er da vist gammel arv..\r\n\tselected: boolean;\r\n\tinstanceRows: boolean;\r\n\tcreated: string;\r\n}\r\n","import { ListService, SelectResult } from 'app/services/list-service';\r\nimport { EventAggregator, Subscription } from 'aurelia-event-aggregator';\r\nimport { autoinject } from 'aurelia-framework';\r\nimport {Router} from \"aurelia-router\";\r\nimport { DialogCloseResult } from 'aurelia-dialog';\r\nimport { ApiClient } from 'app/services/api-client';\r\nimport { RequestMethod } from 'app/services/RequestMethod';\r\nimport { ErrorService } from 'app/services/error-service';\r\nimport { AppContextService } from 'app/services/app-context-service';\r\nimport { ModalService } from 'app/services/modal-service';\r\nimport { QuantityViewCreatePrompt } from './quantityview-create-prompt';\r\nimport { QuantityViewRenamePrompt } from './quantityview-rename-prompt';\r\n@autoinject\r\nexport class QuantityViews {\r\n\tpublic QVs: QuantityViewDto[] = [];\r\n\tpublic column: string = \"name\"; // hmm, sorting column! I would love to rename our 50 clones of the sorting column :-/\r\n\r\n\tpublic displayState: { icon: string, direction: string } | undefined;\r\n\tpublic searchTerm: string = \"\";\r\n\tpublic viewContext: string;\r\n\tprivate subscriptions: Subscription[] = [];\r\n\tprivate allSelected: boolean = false;\r\n\tprivate selectedQVs: QuantityViewDto[] = [];\r\n\t\r\n\tconstructor(private modal: ModalService, private appContext:AppContextService, \r\n\t\tprivate router: Router, private errorService: ErrorService, \r\n\t\tprivate events: EventAggregator, private apiClient: ApiClient, private listService: ListService\r\n\t) { this.viewContext = \"TopBar\"; }\r\n\r\n\tapi():RequestMethod { return this.apiClient.project(this.appContext.projectId); }\r\n\t\r\n\tasync activate(params: any){\r\n\t\tif (params.projectId) { this.appContext.setProject(params.projectId); }//in-activate.\r\n\t\tif (this.appContext.projectId) { await this.getQuantityViews(); } \r\n\t\tthis.displayState = { icon: \"fa-sort-up\", direction: \"ascending\" };\t\t\r\n\t\tconst searchHandler = (data: any) => this.handleSearchEvent(data);\r\n\t\tthis.subscriptions = [ this.events.subscribe(this.viewContext + \":SearchTermChanged\", searchHandler) ];\r\n\t}\r\n\tdetached() { this.subscriptions.forEach(subscription => (subscription.dispose())); }\r\n \r\n\tprivate async getQuantityViews() { \r\n\t\tthis.QVs = []; this.QVs = await this.api().get(\"QuantityView/GetQuantityViews\").jsonResult(); \r\n\t}\r\n\r\n\tpublic async sortBy(columnName: string) {\r\n\t\tawait this.listService.sortBy(columnName).then(r => {\r\n\t\t\tthis.column = r.column; this.displayState = r.displayState;\r\n\t\t});\r\n\t}\r\n\r\n\tpublic async toggleQV() { this.setQVs(await this.listService.toggleElement(this.QVs)); }\r\n\tpublic async toggleAll() { \r\n\t\tlet selectResult: SelectResult | undefined = await this.listService.toggleAll(this.QVs); \r\n\t\tif (selectResult) {\r\n\t\t\tthis.setQVs(selectResult);\r\n\t\t}\r\n\t}\r\n\tsetQVs(r:SelectResult) { this.selectedQVs = r.selected; this.allSelected = r.allSelected; }\r\n\tprivate handleSearchEvent(data: string) { this.searchTerm = data; }\t\r\n\r\n\tpublic async create() {\r\n\t\tconsole.log('quantityviews, create..');\r\n\t\tlet r:DialogCloseResult = await this.modal.OpenModal(QuantityViewCreatePrompt).whenClosed();\r\n\t\tconsole.log('r:',r);\r\n\t\t\r\n\t\tif (r.wasCancelled) { \r\n\t\t\tconsole.log('(create was cancelled)');\r\n\t\t\treturn; \r\n\t\t}\r\n\r\n\t\tconsole.log('trying to reload with getQuantityViews after create-OK..');\r\n\t\tawait this.getQuantityViews();\r\n\t\t\r\n\t\tif (Boolean(r.output)) { \r\n\t\t\tconsole.log('will attempt nav-to, as r.output is:', r.output);\r\n\t\t\tthis.navToQuantityFilters(r.output); \r\n\t\t} else {\r\n\t\t\tconsole.log('will NOT attempt nav-to, as r.output is:', r.output);\r\n\t\t}\r\n\t}\r\n\r\n\tasync renameQV(QV: QuantityViewDto): Promise {\r\n\t\tlet dlg = await this.modal.OpenModal(QuantityViewRenamePrompt, QV).whenClosed();\r\n\t\tconsole.log(\"How did we finish?\", dlg);\r\n\t}\r\n\r\n\tpublic edit(QV: QuantityViewDto) { this.navToQuantityFilters(QV.id); }\r\n\tnavToQuantityFilters(QVId:string) { this.router.navigate('project/' + this.appContext.projectId + '/quantity-views/quantity-filters/' + QVId); }\r\n\r\n\tasync delete() {\r\n\t\tdocument.getElementById('delete-view')?.blur();\r\n\t\tlet result:DialogCloseResult = await this.modal.OpenConfirm(\"Delete\", 'Please confirm that you want to delete the selected quantity views').whenClosed();\t\t\r\n\t\tif (result.wasCancelled) { return; }\r\n\r\n\t\tif (this.selectedQVs.length < 1) { return; }\r\n\r\n\t\tlet qvToDelete:QuantityViewDto = this.selectedQVs[0];\r\n\t\tlet result2 = await this.api().postJson(\"QuantityView/DeleteQuantityView\", qvToDelete.id).jsonResult();\r\n\t\t// only delete UI element AFTER api call (we ought to check, if DeleteQuantityView succeeded.)\r\n\r\n\t\tlet ixToDelete = this.QVs.indexOf(qvToDelete);\r\n\t\tif (ixToDelete<0) { throw `bad ix ${ixToDelete} for ${qvToDelete}`; }\r\n\t\tthis.QVs.splice(ixToDelete, 1);\r\n\r\n\t\tlet ixToDelete2 = this.selectedQVs.indexOf(qvToDelete);\r\n\t\tif (ixToDelete2<0) { throw `bad sel ix ${ixToDelete} for ${qvToDelete}`; }\r\n\t\tthis.selectedQVs.splice(ixToDelete2, 1);\r\n\r\n\t\t// JG: Man skal simpelthen ikke kunne slette mere end een ad gangen.\r\n\t\t// Og hvorfor er det overhovedet delt op i 2 cases..\r\n\t\t//if (this.selectedQVs.length > 1) {\r\n\t\t//\tlet selectedQVIds: string[] = [];\r\n\t\t//\tthis.selectedQVs.forEach(x => { \r\n\t\t//\t\tselectedQVIds.push(x.id);\r\n\t\t//\t\tthis.QVs.splice(this.QVs.indexOf(x), 1);\r\n\t\t//\t});\r\n\t\t//\tlet xx = this.api().postJson(\"QuantityView/DeleteQuantityViews\", selectedQVIds).jsonResult();\r\n\t\t//}\r\n\t\t//this.allSelected = false;\r\n\t\t//this.selectedQVs = [];\r\n\t}\r\n\r\n\ttoDate(field:string):string { //////// 1234567890\r\n\t\t//return field.substr(0,10); // 2021-12-31\r\n\t\treturn field.substr(0,16).replace('T',' '); // with 23:59.\r\n\t}\r\n}\r\n\r\nexport interface QuantityViewDto {\r\n\tid: string;\r\n\tname: string;\r\n\tcreated: Date;\r\n\t//settingsId: string; // den er da vist gammel arv.\r\n\tselected: boolean;\r\n}\r\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","exports","QuantityFilters","constructor","modal","appContext","router","errorService","events","apiClient","listService","i18n","QFs","column","searchTerm","subscriptions","allSelected","selectedQFs","quantityViewId","quantityView","this","viewContext","api","project","projectId","detached","forEach","subscription","dispose","activate","params","setProject","undefined","QV_Id","console","warn","refreshQuantityFilters","displayState","icon","direction","subscribe","data","handleSearchEvent","getQuantityView","path","get","jsonResult","log","quantityViewTitle","name","getQuantityFilters","sortBy","columnName","then","r","toggleQF","setQFs","toggleElement","toggleAll","selectResult","selected","createQF","OpenModal","whenClosed","editQF_Columns","QF","x","EditQF_Head","dlg","deleteQF","document","getElementById","blur","OpenConfirm","wasCancelled","length","splice","indexOf","postJson","selectedQFIds","openQuantitySource","qf","QuantityFilterSources","showSourcesGrid","showPivotGrid","duplicateFilter","exportToExcelQuantitySources","runAnim","async","handleError","tr","downloadFile","exportToExcelFilteredQuantities","exportToExcelViewAll","download","animate","on","anim","changeCSS","seconds","timerId","setInterval","timer","clearInterval","rootElm","querySelector","classList","add","remove","back","window","history","computedFrom","autoinject","EventAggregator","I18N","QuantityViews","QVs","selectedQVs","getQuantityViews","toggleQV","setQVs","create","Boolean","output","navToQuantityFilters","renameQV","QV","edit","QVId","navigate","qvToDelete","ixToDelete","ixToDelete2","toDate","field","substr","replace"],"sourceRoot":""}