{"version":3,"file":"app-c0217d04.1c0a94b0a550a47a.bundle.js","mappings":"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","sources":["webpack://client-app/./src/app/components/object/serial-number-tool/serial-number-tool.scss","webpack://client-app/./src/app/components/pivot-grid-component/pivot-grid-component.scss","webpack://client-app/./src/app/components/object/serial-number-tool/serial-number-tool.html","webpack://client-app/./src/app/components/pivot-grid-component/pivot-grid-component.html","webpack://client-app/./src/app/components/object/serial-number-tool/serial-number-tool.ts","webpack://client-app/./src/app/components/pivot-grid-component/pivot-grid-component.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, \".auto-ids{margin:30px 10px 10px;display:flex;flex-direction:column;gap:20px}.auto-ids-settings-bar{display:flex;flex-direction:row;gap:20px;align-items:center}.auto-ids-input-group{width:500px;flex-grow:1}.auto-ids-settings-bar-container{display:flex;flex-direction:column;gap:5px}.auto-id-preview-table{border-style:solid;border-width:1px;border-radius:10px;border-color:#d3d3d3}.auto-id-label{margin-bottom:5px}.auto-id-target-parameter-select{width:150px;flex-grow:1}.auto-id-warning-message{color:#ff8c00}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/app/components/object/serial-number-tool/serial-number-tool.scss\"],\"names\":[],\"mappings\":\"AAMA,UACC,qBAAA,CACA,YAAA,CACA,qBAAA,CACA,QAAA,CAGD,uBACC,YAAA,CACA,kBAAA,CACA,QAAA,CACA,kBAAA,CAGD,sBACC,WAAA,CACA,WAAA,CAGD,iCACC,YAAA,CACA,qBAAA,CACA,OAAA,CAGD,uBACC,kBAAA,CACA,gBAAA,CACA,kBAAA,CACA,oBAAA,CAGD,eACC,iBAAA,CAGD,iCACE,WAAA,CACD,WAAA,CAGD,yBACC,aAAA\",\"sourcesContent\":[\"\\r\\n// (JG: De har ikke nogern effekt som sådan,\\r\\n// mon det ikke bare er at sikre, at de bliver bundlet..?\\r\\n// Eller, måske gør de, at jeg kan referere til variabler i scope, der kommer fra dem?)\\r\\n@import \\\"./src/resources/customized-styles/variables.scss\\\";\\r\\n\\r\\n.auto-ids {\\r\\n\\tmargin: 30px 10px 10px;\\r\\n\\tdisplay: flex;\\r\\n\\tflex-direction: column;\\r\\n\\tgap: 20px;\\r\\n}\\r\\n\\r\\n.auto-ids-settings-bar {\\r\\n\\tdisplay: flex;\\r\\n\\tflex-direction: row;\\r\\n\\tgap: 20px;\\r\\n\\talign-items: center;\\r\\n}\\r\\n\\r\\n.auto-ids-input-group {\\r\\n\\twidth: 500px;\\r\\n\\tflex-grow: 1;\\r\\n}\\r\\n\\r\\n.auto-ids-settings-bar-container {\\r\\n\\tdisplay: flex;\\r\\n\\tflex-direction: column;\\r\\n\\tgap: 5px;\\r\\n}\\r\\n\\r\\n.auto-id-preview-table {\\r\\n\\tborder-style: solid;\\r\\n\\tborder-width: 1px;\\r\\n\\tborder-radius: 10px;\\r\\n\\tborder-color: lightgray;\\r\\n}\\r\\n\\r\\n.auto-id-label {\\r\\n\\tmargin-bottom: 5px;\\r\\n}\\r\\n\\r\\n.auto-id-target-parameter-select {\\r\\n width: 150px;\\r\\n\\tflex-grow: 1;\\r\\n}\\r\\n\\r\\n.auto-id-warning-message {\\r\\n\\tcolor: darkorange;\\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, \"h1.spinner{background:#d3d3d3;color:#fff;text-align:center;vertical-align:middle;z-index:10}.grid-template-container{position:relative;padding-left:5px;padding-top:4px;height:100%}.grid-template-container .pivot-grid-component{min-width:100%;width:100%;position:relative;white-space:nowrap;margin-bottom:30px}.grid-template-container .pivot-grid-component td,.grid-template-container .pivot-grid-component th{position:relative;border:1px solid #d3d3d3;border-top:0px;padding:.3em;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-width:0}.grid-template-container .pivot-grid-component th:first-child,.grid-template-container .pivot-grid-component td:first-child{border-left:0px}.grid-template-container .pivot-grid-component th:last-child,.grid-template-container .pivot-grid-component td:last-child{border-right:0px}.grid-template-container .pivot-grid-component thead{position:sticky;top:0;z-index:10;background-color:#fff}.grid-template-container .pivot-grid-component .table-headlines{font-weight:500;position:relative}.grid-template-container .pivot-grid-component .table-headlines .header-text{padding-right:22px}.grid-template-container .pivot-grid-component .table-headlines .column-settings{position:absolute;padding:5px;right:0;top:50%;transform:translateY(-50%);border-left:1px #d3d3d3 solid;background-color:#fff}.grid-template-container .pivot-grid-component .table-headlines .column-settings:hover{cursor:pointer;background-color:#a9a9a9}.grid-template-container .pivot-grid-component tbody{-webkit-user-select:none;-ms-user-select:none;user-select:none}.grid-template-container .pivot-grid-component tbody tr{cursor:pointer}.grid-template-container .pivot-grid-component tbody .red-text{color:red}.grid-template-container .pivot-grid-component tbody .right-aligned-number{padding-right:5px;padding-left:5px;text-align:right}.grid-template-container .resizer{position:absolute;top:0;right:0;width:5px;cursor:col-resize;user-select:none}.grid-template-container .add-columns-msg{width:100%;height:2em;line-height:2em;position:absolute;left:50%;top:10%;transform:translateX(-50%);background-color:#d3d3d3;border-radius:2px;text-align:center}.grid-template-container .add-columns-msg .arrow-icon{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/app/components/pivot-grid-component/pivot-grid-component.scss\"],\"names\":[],\"mappings\":\"AAEA,WAKI,kBAAA,CACA,UAAA,CACA,iBAAA,CACA,qBAAA,CACA,UAAA,CAGJ,yBACI,iBAAA,CACA,gBAAA,CACA,eAAA,CACA,WAAA,CACA,+CACI,cAAA,CACA,UAAA,CACA,iBAAA,CACA,kBAAA,CACA,kBAAA,CACA,oGACI,iBAAA,CACA,wBAAA,CACA,cAAA,CACA,YAAA,CAEA,eAAA,CACA,kBAAA,CACA,sBAAA,CACA,WAAA,CAEJ,4HACI,eAAA,CAEJ,0HACI,gBAAA,CAEJ,qDACI,eAAA,CACA,KAAA,CACA,UAAA,CACA,qBAAA,CAEJ,gEACI,eAAA,CACA,iBAAA,CACA,6EACI,kBAAA,CAEJ,iFACI,iBAAA,CACA,WAAA,CACA,OAAA,CACA,OAAA,CACA,0BAAA,CACA,6BAAA,CACA,qBAAA,CAEJ,uFACI,cAAA,CACA,wBAAA,CAGR,qDACI,wBAAA,CACA,oBAAA,CACA,gBAAA,CACA,wDACI,cAAA,CAEJ,+DACI,SAAA,CAEJ,2EAGI,iBAAA,CACA,gBAAA,CACA,gBAAA,CA0BZ,kCACI,iBAAA,CACA,KAAA,CACA,OAAA,CACA,SAAA,CACA,iBAAA,CACA,gBAAA,CAEJ,0CACI,UAAA,CACA,UAAA,CACA,eAAA,CACA,iBAAA,CACA,QAAA,CACA,OAAA,CACA,0BAAA,CACA,wBAAA,CACA,iBAAA,CACA,iBAAA,CACA,sDACI,+BAAA,CACA,4BAAA,CACA,2BAAA,CACA,0BAAA,CACA,uBAAA\",\"sourcesContent\":[\"@import \\\"./src/resources/customized-styles/variables.scss\\\";\\r\\n\\r\\nh1.spinner {\\r\\n //Position is absolute and the \\r\\n //first parent to have a position:relative\\r\\n //is 'shadow body-content--left', meaning\\r\\n //the spiner will be centered on the left-container\\r\\n background: lightgray;\\r\\n color: white;\\r\\n text-align: center;\\r\\n vertical-align: middle;\\r\\n z-index: 10;\\r\\n}\\r\\n\\r\\n.grid-template-container {\\r\\n position: relative;\\r\\n padding-left: 5px;\\r\\n padding-top:4px; //To make source-selector and grid align.\\r\\n height:100%;\\r\\n .pivot-grid-component {\\r\\n min-width: 100%;\\r\\n width: 100%;\\r\\n position: relative;\\r\\n white-space: nowrap;\\r\\n margin-bottom: 30px;//An offset to avoid last element not being shown.\\r\\n td, th{\\r\\n position: relative;\\r\\n border: 1px solid lightgray;\\r\\n border-top: 0px;\\r\\n padding: 0.3em;\\r\\n //These four lines is to enable ellipsis on text-overflow.\\r\\n overflow: hidden;\\r\\n white-space: nowrap;\\r\\n text-overflow: ellipsis;\\r\\n max-width: 0;\\r\\n }\\r\\n th:first-child, td:first-child {\\r\\n border-left: 0px;\\r\\n }\\r\\n th:last-child, td:last-child {\\r\\n border-right: 0px;\\r\\n }\\r\\n thead {\\r\\n position: sticky;\\r\\n top:0;\\r\\n z-index: 10;\\r\\n background-color: white;\\r\\n }\\r\\n .table-headlines {\\r\\n font-weight: 500;\\r\\n position: relative;\\r\\n .header-text {\\r\\n padding-right: 22px; //Using approx width of the settings button so these two can never overlap.\\r\\n }\\r\\n .column-settings {\\r\\n position: absolute;\\r\\n padding: 5px;\\r\\n right: 0;\\r\\n top: 50%;\\r\\n transform: translateY(-50%);\\r\\n border-left: 1px lightgrey solid;\\r\\n background-color: white;\\r\\n }\\r\\n .column-settings:hover {\\r\\n cursor: pointer;\\r\\n background-color: darkgray;\\r\\n }\\r\\n }\\r\\n tbody {\\r\\n -webkit-user-select: none; /* Safari */\\r\\n -ms-user-select: none; /* IE 10 and IE 11 */\\r\\n user-select: none; /* Standard syntax */\\r\\n tr {\\r\\n cursor: pointer;\\r\\n }\\r\\n .red-text {\\r\\n color: red;\\r\\n }\\r\\n .right-aligned-number {\\r\\n // display: block;\\r\\n // width:100%;\\r\\n padding-right:5px;\\r\\n padding-left:5px;\\r\\n text-align: right;\\r\\n }\\r\\n // .number-td {\\r\\n // display: grid;\\r\\n // grid-template-columns: 1fr 1ch 1fr;\\r\\n // align-content: center;\\r\\n // width: 500px;\\r\\n // height:100%;\\r\\n // position: absolute;\\r\\n // right:50%;\\r\\n // bottom:50%;\\r\\n // transform: translate(50%, 50%);\\r\\n // .number {\\r\\n // text-align: right;\\r\\n // }\\r\\n // .decimal-point {\\r\\n // text-align: center;\\r\\n // }\\r\\n // .decimals {\\r\\n // text-align: left;\\r\\n // }\\r\\n // }\\r\\n \\r\\n }\\r\\n \\r\\n }\\r\\n .resizer {\\r\\n position: absolute;\\r\\n top: 0;\\r\\n right: 0;\\r\\n width: 5px;\\r\\n cursor: col-resize;\\r\\n user-select: none;\\r\\n }\\r\\n .add-columns-msg {\\r\\n width: 100%;\\r\\n height: 2em;\\r\\n line-height: 2em;\\r\\n position: absolute;\\r\\n left: 50%;\\r\\n top:10%;\\r\\n transform: translateX(-50%);\\r\\n background-color: lightgrey;\\r\\n border-radius: 2px;\\r\\n text-align: center;\\r\\n .arrow-icon {\\r\\n -webkit-transform: rotate(45deg);\\r\\n -moz-transform: rotate(45deg);\\r\\n -ms-transform: rotate(45deg);\\r\\n -o-transform: rotate(45deg);\\r\\n transform: rotate(45deg);\\r\\n }\\r\\n }\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","module.exports = \"\\r\\n\";","module.exports = \"\\r\\n\";","import {ApiClient} from 'app/services/api-client';\r\nimport {AppContextService} from 'app/services/app-context-service';\r\nimport {DialogController} from 'aurelia-dialog';\r\nimport {autoinject, observable} from 'aurelia-framework';\r\nimport {ObjectFilterService} from \"../../../services/object-services/object-filter-service\";\r\nimport {ValueFilter} from \"../../../models/object-filter\";\r\nimport {AocObjectFilterService} from \"../../../services/object-services/aoc-object-filter-service\";\r\n\r\ninterface SerialNumberSettings {\r\n\tparameter1Id: string | undefined;\r\n\tparameter2Id: string | undefined;\r\n\tprefix: string;\r\n\tstartingNumber: number | null;\r\n\tdigits: number;\r\n\tparameterToTransferToId: string | undefined;\r\n}\r\n@autoinject\r\nexport class SerialNumberTool {\r\n\r\n\tpublic objectFilterService: ObjectFilterService | undefined;\r\n\r\n\tpublic sourceParameters: ValueFilter[] = [];\r\n\tpublic targetParameters: ValueFilter[] = [];\r\n\t@observable({ changeHandler: 'onSettingsChanged' })\r\n\tpublic parameter1: ValueFilter | undefined;\r\n\t@observable({ changeHandler: 'onSettingsChanged' })\r\n\tpublic parameter2: ValueFilter | undefined;\r\n\t@observable({ changeHandler: 'onSettingsChanged' })\r\n\tpublic prefix: string = \"\";\r\n\t@observable({ changeHandler: 'onSettingsChanged' })\r\n\tpublic startingNumber: string | null = null;\r\n\t@observable({ changeHandler: 'onSettingsChanged' })\r\n\tpublic targetParameter: ValueFilter | undefined;\r\n\t\r\n\tpublic previewRows: PreviewRow[] = [];\r\n\t\r\n\tprivate oldSettings: SerialNumberSettings | undefined;\r\n\tprivate showWarning: boolean = false;\r\n\t\r\n\tconstructor(\r\n\t\tprotected dialog: DialogController, \r\n\t\tprivate api: ApiClient,\r\n\t\tprivate ctx: AppContextService,\r\n\t) {\r\n\t\tconsole.log('AutoIDs ctor');\r\n\t}\r\n\r\n\tasync activate(): Promise {\r\n\t\tthis.objectFilterService = new AocObjectFilterService(this.api, this.ctx.projectId);\r\n\t\tawait this.loadFilters();\r\n\t\tawait this.loadSettings()\r\n\t}\r\n\r\n\tprivate async loadFilters() {\r\n\t\tconst allTypeFilters = await this.getAllTypeFilters();\r\n\r\n\t\tlet writeableFilters = allTypeFilters.filter(value => !value.readOnly);\r\n\t\tlet writeableNonClassificationFilters = writeableFilters.filter(value => !value.hasClassification);\r\n\r\n\t\tthis.sourceParameters = writeableFilters;\r\n\t\tthis.targetParameters = writeableNonClassificationFilters;\r\n\t}\r\n\t\r\n\tprivate async getAllTypeFilters() : Promise {\r\n\t\tif (this.objectFilterService == null) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\t\tconst valueFilters = await this.objectFilterService.getAvailableFilters([]);\r\n\r\n\t\tlet onlyTypeParameters = valueFilters.filter(value => value.targetType === 'typeParameter');\r\n\r\n\t\treturn onlyTypeParameters;\r\n\t}\r\n\t\r\n\tasync update() {\r\n\t\tconst settings = this.getCurrentSettings();\r\n\r\n\t\tawait this.api.project(this.ctx.projectId)\r\n\t\t\t.postJson('SerialNumber/GenerateSerialNumbers', settings)\r\n\t\t\t.handleErrorMsgUsingReason(\"Could not generate serial numbers\", \"An error has occured during the creation of the serial numbers.\")\r\n\t\t\t.noResponse();\r\n\r\n\t\tawait this.dialog.ok();\r\n\t}\r\n\t\r\n\tasync createPreview(): Promise {\r\n\t\tconst settings = this.getCurrentSettings();\r\n\t\t\r\n\t\tthis.previewRows = await this.api.project(this.ctx.projectId)\r\n\t\t\t.postJson('SerialNumber/GeneratePreview', settings)\r\n\t\t\t.handleErrorMsgUsingReason(\"Could not generate serial numbers\", \"An error has occured during the creation of the serial numbers.\")\r\n\t\t\t.objectResult();\r\n\t}\r\n\t\r\n\tprivate getCurrentSettings() : SerialNumberSettings {\r\n\t\tlet digits: number | undefined = this.startingNumber?.toString().length;\r\n\t\treturn {\r\n\t\t\tparameter1Id: this.parameter1?.targetId,\r\n\t\t\tparameter2Id: this.parameter2?.targetId,\r\n\t\t\tprefix: this.prefix,\t\t\t\t\t\t\t\t//Will always be a number\r\n\t\t\tstartingNumber: this.startingNumber != undefined ? this.startingNumber : 0,\r\n\t\t\tdigits: digits != undefined ? digits : 0,\r\n\t\t\tparameterToTransferToId: this.targetParameter?.targetId\r\n\t\t};\r\n\t}\r\n\r\n\tprivate async loadSettings() {\r\n\t\t\r\n\t\tlet settings: SerialNumberSettings = await this.api.project(this.ctx.projectId)\r\n\t\t\t.get('SerialNumber/GetSettings')\r\n\t\t\t.handleErrorMsgUsingReason(\"Could not load serial number settings\", \"An error has occured during the retrieval of the serial number settings.\")\r\n\t\t\t.objectResult();\r\n\t\tconsole.log(\"Settings \" , settings);\r\n\t\tthis.oldSettings = settings;\r\n\t\t\r\n\t\tthis.parameter1 = this.sourceParameters.find(param => param.targetId === settings.parameter1Id);\r\n\t\tthis.parameter2 = this.sourceParameters.find(param => param.targetId === settings.parameter2Id);\r\n\t\tthis.targetParameter = this.sourceParameters.find(param => param.targetId === settings.parameterToTransferToId);\r\n\t\tthis.prefix = settings.prefix;\r\n\t\tlet zerosToInsert: number = 0;\r\n\t\tif (settings.startingNumber != undefined && settings.digits > settings.startingNumber?.toString().length) {\r\n\t\t\tzerosToInsert = settings.digits - settings.startingNumber?.toString().length;\r\n\t\t}\r\n\t\tthis.startingNumber = (\"0\".repeat(zerosToInsert)) + settings.startingNumber;\r\n\t}\r\n\t\r\n\tpublic onSettingsChanged() {\r\n\t\tconst settingsIdentical = \r\n\t\t\tthis.oldSettings?.parameterToTransferToId == this.targetParameter?.targetId\r\n\t\t\t&& this.oldSettings?.parameter1Id == this.parameter1?.targetId\r\n\t\t\t&& this.oldSettings?.parameter2Id == this.parameter2?.targetId\r\n\t\t\t&& this.oldSettings?.prefix == this.prefix\r\n\t\t\t&& this.oldSettings?.startingNumber == this.startingNumber;\r\n\t\t\r\n\t\tconsole.log(\"settingsIdentical\", settingsIdentical);\r\n\t\t\r\n\t\tthis.showWarning = !settingsIdentical;\r\n\t}\r\n}\r\n\r\ninterface PreviewRow {\r\n\ttargetParameterValue: string;\r\n\tserialNumberValue: string;\r\n}\r\n","\r\nimport { autoinject, bindable } from 'aurelia-framework';\r\nimport {EventAggregator, Subscription} from 'aurelia-event-aggregator';\r\nimport { ApiClient, RequestMethod } from 'app/services/api-client';\r\nimport { AppContextService } from 'app/services/app-context-service';\r\nimport { I18N } from 'aurelia-i18n';\r\nimport { Router } from 'aurelia-router';\r\nimport { QuantityFilterDto } from 'app/project/quantity-views/quantity-filters';\r\nimport { ModalService } from 'app/services/modal-service';\r\nimport { QuantityFilterColumns } from '../quantity-filter-columns/quantity-filter-columns';\r\nimport { ColInfo,PivotDto, ColInf2 } from './ColInfo';\r\nimport { ContextMenuService } from 'app/services/context-menu-service';\r\nimport { PivotGridSelectionService } from 'app/services/pivot-grid-selection-service';\r\nimport { OrgTokenService } from 'app/services/org-token-service';\r\n\r\n\r\n\r\n@autoinject\r\nexport class PivotGridComponent {\r\n private quantityFilterId: string = \"\";\r\n private quantityFilterName: string = \"\";\r\n\tprivate subscriptions: Subscription[] = [];\r\n\r\n\t@bindable QF: QuantityFilterDto|undefined;\r\n\t@bindable shouldRoundNumbers: boolean | undefined;\r\n\tprivate headerDTO: ColInfo[] = [];\r\n //private headers_: string[] = [];\r\n private headers: ColInf2[] = [];\r\n\tprivate entityLabelsPerRow: number[][] = []\r\n\tprivate filterHasSources: boolean = false;\r\n\tprivate quantityColumnOpen: boolean = false;\r\n\t\r\n constructor(public apiClient: ApiClient, public appContext:AppContextService, private i18n: I18N, private router: Router,\r\n\t\tprivate events: EventAggregator, private modal: ModalService, private contextMenu: ContextMenuService,\r\n\t\tprivate selectionService: PivotGridSelectionService,\r\n\t\tprivate orgTokenService: OrgTokenService\r\n ) {\r\n\t\tconsole.log('ctor A'); \t\t\r\n\t}\r\n api():RequestMethod { \r\n\t\tconsole.log('api A'); \t\t\r\n\t\treturn this.apiClient.project(this.appContext.projectId); \r\n\t}\r\n\tbind(): void {\r\n\t\tthis.quantityColumnOpen = false;\r\n\t\tthis.subscriptions = [\r\n\t\t\tthis.events.subscribe('pivot-grid-component:update-grid',() => {\r\n\t\t\t\tthis.initialiseGrid();\r\n\t\t\t}),\r\n\t\t\tthis.events.subscribe('base-viewer-combined:select', (response: {event: Event, objectIds: number[]}) => { this.highlightMatchingRows(response.objectIds)}),\r\n\r\n\t\t]\r\n\t}\r\n\r\n\thighlightMatchingRows(objectIds: number[]) {\r\n\t\tlet rowNumbersToHighlight: number[] = [];\r\n\t\tobjectIds.forEach((entityLabel: number) => {\r\n\t\t\tfor (let i = 0; i < this.entityLabelsPerRow.length; i++) {\r\n\t\t\t\tif (this.entityLabelsPerRow[i].filter((num: number) => num == entityLabel).length > 0) { //JavaScript arrays and objects are compared by reference and not by value, which is why we do not use include.\r\n\t\t\t\t\trowNumbersToHighlight.push(i);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.selectionService.selectFromViewer(rowNumbersToHighlight);\r\n\t\t\r\n\t}\r\n\r\n\tunbind(): void {\r\n\t\tthis.subscriptions.forEach(subscription => subscription.dispose());\r\n\t}\r\n\r\n\tsetupResizing() {\r\n\t\t//Code inspiration from: https://htmldom.dev/resize-columns-of-a-table/\r\n\t\t// Query the table\r\n\t\tconst table = document.getElementById('resizable');\r\n\r\n\t\t// Query all headers\r\n\t\tconst cols: NodeListOf | undefined = table?.querySelectorAll('th');\r\n\r\n\t\t// Loop over them\r\n\t\tcols?.forEach(col => {\r\n\t\t\tif (col == cols[cols.length -1]) { return; }; //We do not want to set a resizer on last column.\r\n\t\t\t// Create a resizer element\r\n\t\t\tconst resizer = document.createElement('div');\r\n\t\t\tresizer.classList.add('resizer');\r\n\r\n\t\t\t// Set the height\r\n\t\t\tresizer.style.height = `${table?.offsetHeight}px`;\r\n\r\n\t\t\t// Add a resizer element to the column\r\n\t\t\tcol.appendChild(resizer);\r\n\r\n\t\t\t// Will be implemented in the next section\r\n\t\t\tthis.createResizableColumn(col, resizer);\r\n\t\t});\r\n\t}\r\n\r\n\tcreateResizableColumn(col: HTMLTableCellElement, resizer: HTMLDivElement) {\r\n\t\t// Track the current position of mouse\r\n\t\tlet x = 0;\r\n\t\tlet w = 0;\r\n\t\r\n\t\tconst mouseDownHandler = function (e: any) {\r\n\t\t\t// Get the current mouse position\r\n\t\t\tx = e.clientX;\r\n\t\r\n\t\t\t// Calculate the current width of column\r\n\t\t\tconst styles = window.getComputedStyle(col);\r\n\t\t\tw = parseInt(styles.width, 10);\r\n\t\r\n\t\t\t// Attach listeners for document's events\r\n\t\t\tdocument.addEventListener('mousemove', mouseMoveHandler);\r\n\t\t\tdocument.addEventListener('mouseup', mouseUpHandler);\r\n\t\t};\r\n\t\r\n\t\tconst mouseMoveHandler = function (e: any) {\r\n\t\t\t// Determine how far the mouse has been moved\r\n\t\t\tconst dx = e.clientX - x;\r\n\t\t\t\r\n\t\t\t// Update the width of column\r\n\t\t\tlet newWidth: number = w + dx;\r\n\t\t\tcol.style.minWidth = `${newWidth}px`; //Both has to be set.\r\n\t\t\tcol.style.width = `${newWidth}px`; //Both has to be set.\r\n\t\t};\r\n\t\r\n\t\t// When user releases the mouse, remove the existing event listeners\r\n\t\tconst mouseUpHandler = function () {\r\n\t\t\tdocument.removeEventListener('mousemove', mouseMoveHandler);\r\n\t\t\tdocument.removeEventListener('mouseup', mouseUpHandler);\r\n\t\t};\r\n\t\r\n\t\tresizer.addEventListener('mousedown', mouseDownHandler);\r\n\t}\r\n\r\n\tasync initialiseGrid() {\r\n\t\tthis.runAnim( async() => {\t\r\n\t\t\tthis.selectionService.gridData = [];\r\n\t\t\tlet pivotData:PivotDto|undefined = await this.getPivotData();\r\n\t\t\t\r\n\t\t\tconsole.log(\"This is the grid data we have to work with \", pivotData);\r\n\t\t\t//for (let xx of pivotData) { console.log(xx); }\r\n\t\t\t\r\n\t\t\tif (pivotData != undefined) {\r\n\t\t\t\t//if (pivotData.length > 0) {\r\n\t\t\t\t//\tthis.headers_ = pivotData[0];\r\n\t\t\t\t//\tpivotData.shift(); // first row, which we put into headers instead.\r\n\t\t\t\t//\tconsole.log(\"HEADERS \" , this.headers_);\r\n\t\t\t\t//}\r\n\r\n\t\t\t\tthis.headers = this.headerDTO.map( \r\n\t\t\t\t\t(c:ColInfo):ColInf2 => {\r\n\t\t\t\t\t\tlet unit = c.unit.unitShort;\r\n\t\t\t\t\t\tlet unit_s = unit ? `(${unit})` : '';\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tunit: unit_s, //c.unit.unitShort, \r\n\t\t\t\t\t\t\tname: c.headerLabel // c.properColumnName\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t});\t\r\n\t\t\t\tthis.selectionService.gridData = pivotData.rounded;\t\r\n\t\t\t}\r\n\t\t});\r\n\t\t//console.log('headers2:', this.headers);\r\n\t}\r\n\r\n\tasync getPivotData(): Promise { //any[][]\r\n\t\tlet path = `QuantityFilter/RenderPivotGrid/${this.quantityFilterId}/${this.shouldRoundNumbers}`;\t\r\n let dto : { pivot: PivotDto, entityLabelsPerRow: number[][], hasSources: boolean } = await this.api().get(path).jsonResult();\r\n\t\tthis.filterHasSources = dto.hasSources;\r\n\t\tconsole.log(\"DTO.hasSources \" , dto.hasSources);\r\n\t\tthis.entityLabelsPerRow = dto.entityLabelsPerRow;\r\n\t\tconsole.log(\"working? \" , this.entityLabelsPerRow);\r\n\t\tif (dto != undefined) {\r\n\t\t\tthis.headerDTO = dto.pivot.cols;\r\n\t\t\tconsole.log('headerDTO:', this.headerDTO);\r\n\t\t\treturn dto.pivot; //.precise; //grid;\r\n\t\t}\r\n\t}\r\n\r\n\tasync showContextMenu(event: PointerEvent): Promise {\r\n\t\tlet entityLabelsOfSelected: number[] = this.getEntityLabelsFromSelected();\r\n\t\tconsole.log(\"entityLabels used selected rows\", entityLabelsOfSelected);\r\n\t\tlet actions: any[] = [\r\n\t\t\t{ viewKey: \"button\", setup: { textKey: \"Highlight selected\",\t\tactionKey: \"highlight\",\t\tservice: {highlight: \t\t() => { this.sendEventToViewer(entityLabelsOfSelected, \"highlight\") }}}},\r\n\t\t\t{ viewKey: \"button\", setup: { textKey: \"Hide selected\",\t\t\t\tactionKey: \"hide\", \t\t\tservice: {hide: \t\t\t() => { this.sendEventToViewer(entityLabelsOfSelected, \"hide\") }}}},\r\n\t\t\t{ viewKey: \"button\", setup: { textKey: \"Hide others\", \t\t\t\tactionKey: \"hideOthers\", \tservice: {hideOthers: \t\t() => { this.sendEventToViewer(entityLabelsOfSelected, \"hideOthers\") }}}},\r\n\t\t\t{ viewKey: \"button\", setup: { textKey: \"Make selected translucent\",\tactionKey: \"translucent\", \tservice: {translucent: \t\t() => { this.sendEventToViewer(entityLabelsOfSelected, \"translucent\") }}}},\r\n\t\t\t{ viewKey: \"button\", setup: { textKey: \"Isolate selected\", \t\t\tactionKey: \"isolate\", \t\tservice: {isolate: \t\t\t() => { this.sendEventToViewer(entityLabelsOfSelected, \"isolate\") }}}},\r\n\t\t\t{ viewKey: \"button\", setup: { textKey: \"Look at selected\", \t\t\tactionKey: \"lookAt\", \t\tservice: {lookAt: \t\t\t() => { this.sendEventToViewer(entityLabelsOfSelected, \"lookAt\") }}}}\r\n\t\t];\r\n\r\n\t\tthis.contextMenu.open(event,actions);\r\n\t}\r\n\r\n\tprivate getEntityLabelsFromSelected(): number[] {\r\n\t\tlet entityLabelsOfSelected: number[] = [];\r\n\t\tfor (let i = 0; i < this.selectionService.gridData.length; i++) {\r\n\t\t\tif ((this.selectionService.gridData[i]).isSelected) { //isSelected is a hack for handling selection.\r\n\t\t\t\tentityLabelsOfSelected.push(...this.entityLabelsPerRow[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn entityLabelsOfSelected;\r\n\t}\r\n\r\n\tsendEventToViewer(entityLabelsPerRow: number[], arg1: string) {\r\n\t\tconst eventNAMEToSend = `viewer:${arg1}`;\r\n\t\tconsole.log('PivotGridComponent.sendEventToViewer, eventName:', eventNAMEToSend);\r\n\t\tthis.events.publish(eventNAMEToSend, entityLabelsPerRow);\r\n\t}\r\n\r\n\thasInstances(index: number): boolean {\r\n\t\treturn this.entityLabelsPerRow[index]?.length > 0;\r\n\t}\r\n\r\n\tselectAndView(index: number, event: PointerEvent): void {\r\n\t\tconsole.log('PivotGridComponent.selectAndView');\r\n\t\tthis.selectionService.handleSelect(index,event);\r\n\t\tlet entityLabelsOfSelected: number[] = this.getEntityLabelsFromSelected();\r\n\t\tconsole.log('..entityLabelsOfSelected:', entityLabelsOfSelected);\r\n\t\tthis.sendEventToViewer(entityLabelsOfSelected,'highlight'); // ie viewer:highlight\r\n\t}\r\n\r\n\r\n\tasync QFChanged(qf: QuantityFilterDto) {\r\n\t\tthis.QF = qf;\r\n\t\tif (this.QF) {\r\n\t\t\tthis.quantityFilterId = qf.id;\r\n\t\t\tthis.quantityFilterName = qf.name;\r\n\t\t\t//console.log(\"SELECTED \" , this.QF);\r\n\t\t\tawait this.initialiseGrid();\r\n\t\t} else {\r\n\t\t\tthis.selectionService.gridData = [];\r\n\t\t\tthis.selectionService.lastSelectedRow = -1;\r\n\t\t\tthis.headers = [];\r\n\t\t\tthis.filterHasSources = false;\r\n\t\t\r\n\t\t}\r\n\t}\r\n\r\n\t// shouldRoundNumbers_Changed - we cannot rename it, as it maps magically?\r\n\tasync shouldRoundNumbersChanged(): Promise { if (this.QF) { await this.initialiseGrid(); } }\r\n\r\n\tpublic async hasOrgSelected():Promise {\r\n\t\tlet ots=this.orgTokenService;\r\n\t\tlet hasOrgSelected:boolean = ots.hasOrgSelected();\r\n\t\tconsole.log('hasOrgSelected C?', hasOrgSelected, ots.orgId());\r\n\t\tif (!hasOrgSelected) {\r\n\t\t\tawait this.modal.OpenMessage('Information','Please select a current organisation');\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n async exportToExcel(): Promise {\r\n\t\tconsole.log('exportToExcel A C:/dev/aoc/AO.Client/ClientApp/src/app/components/pivot-grid-component/pivot-grid-component.ts');\r\n\t\tif (!await this.hasOrgSelected()) { return; }\r\n\r\n\t\t// todo, it should probably be the RAW result?\r\n\t\tthis.api().get(`QuantityFilter/RenderQuantityPivot/${this.quantityFilterId}`)\r\n\t\t.handleError(this.i18n.tr('Error_Title_Generic'), this.i18n.tr('Error_Message_Generic'))\r\n\t\t.downloadFile(`${this.quantityFilterName}.xlsx`);\r\n\t}\r\n\r\n async back(): Promise {\r\n\t\tconsole.log('back A');\r\n let path = `QuantityFilter/GetQuantityViewIdByFilterId?quantityFilterId=${this.quantityFilterId}`;\r\n\t\tif (!this.quantityFilterId) { return; }\r\n\t\tlet QV_Ids: string | undefined = 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}, {replace: true});\r\n }\r\n }\r\n\r\n\tasync updateColumns(): Promise {\r\n\t\tif (this.quantityColumnOpen == false) {\r\n\t\t\tthis.quantityColumnOpen = true;\r\n\t\t\tawait this.modal.OpenModal(QuantityFilterColumns, this.QF).whenClosed(result => {\r\n\t\t\t\tif (result.wasCancelled != true) {\r\n\t\t\t\t\tthis.initialiseGrid();\r\n\t\t\t\t}\r\n\t\t\t\tthis.quantityColumnOpen = false;\r\n\t\t\t});\r\n\t\t}\r\n }\r\n\r\n\r\n\tisNumber(\r\n\t\tcell: string | null\r\n\t\t// columnIndex: number // JG: Jeg ved ikke hvad dette er, men det er ikke andre steder i koden..\r\n\t): boolean {\r\n\t\tif (cell == null) { return false; }\r\n\t\t// if (this.shouldBeRightAligned(columnIndex)) { return false; }\r\n\t\t//console.log(\"Get column index \" , columnIndex);\r\n\r\n\t\t// console.log(\"headers \" , this.headers); // JG: Det er egentlig en masse log, vi ikke behøver pt.\r\n\r\n\t\tlet isFloat = /^\\d+\\.\\d+$/.test(cell); //IsFloat // JG: hvis vi ønsker at gøre dette, ku vi ikke bare lave en parseFloat istedet, som nok har bedre performance? (ville skulle tænkes igennem, om det gør det samme.)\r\n\t\treturn isFloat ? isFloat : /^\\d+$/.test(cell); //IsInt\r\n\t}\r\n\r\n\t// shouldBeRightAligned(columnIndex: number) {\r\n\t// \tif (this.headers[columnIndex].name.toLocaleLowerCase().includes('num')) { return true; }\r\n\t// \tif (this.headers[columnIndex].name.toLocaleLowerCase().includes('ajourcount')) { return true; }\r\n\t// \treturn false;\r\n\t// }\r\n\r\n\t// getIntegrals(cell: string): string {\r\n\t// \tif (!cell.includes(\".\")) { return cell }\r\n\t// \tlet integralValue: string = cell.substring(0, cell.indexOf(\".\"));\r\n\t// \treturn integralValue;\r\n\t// }\r\n\r\n\t// getDecimals(cell: string): string {\r\n\t// \tif (!cell.includes(\".\")) { return \"0\" }\r\n\t// \tlet decimalValue: string = cell.slice(cell.indexOf('.') + 1);\r\n\t// \treturn decimalValue;\r\n\t// }\r\n\r\n\tasync runAnim(download: ()=>Promise ) {\r\n\t\ttry {\r\n\t\t\tthis.animate(true);\r\n\t\t\tconsole.log('before rendering grid');\r\n\t\t\tawait download();\r\n\t\t} finally {\r\n\t\t\tconsole.log('after rendering grid');\r\n\t\t\tthis.animate(false);\r\n\t\t\tthis.setupResizing();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic anim:boolean = false; //true;\r\n\t\r\n\tanimate(on:boolean): void {\r\n\t\tthis.anim = on;\r\n\t}\r\n}\r\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","exports","SerialNumberTool","constructor","dialog","api","ctx","sourceParameters","targetParameters","prefix","startingNumber","previewRows","showWarning","console","log","async","this","objectFilterService","projectId","loadFilters","loadSettings","writeableFilters","getAllTypeFilters","filter","value","readOnly","writeableNonClassificationFilters","hasClassification","getAvailableFilters","targetType","settings","getCurrentSettings","project","postJson","handleErrorMsgUsingReason","noResponse","ok","objectResult","digits","toString","length","parameter1Id","parameter1","targetId","parameter2Id","parameter2","undefined","parameterToTransferToId","targetParameter","get","oldSettings","find","param","zerosToInsert","repeat","onSettingsChanged","settingsIdentical","observable","changeHandler","autoinject","DialogController","PivotGridComponent","apiClient","appContext","i18n","router","events","modal","contextMenu","selectionService","orgTokenService","quantityFilterId","quantityFilterName","subscriptions","headerDTO","headers","entityLabelsPerRow","filterHasSources","quantityColumnOpen","anim","bind","subscribe","initialiseGrid","response","highlightMatchingRows","objectIds","rowNumbersToHighlight","forEach","entityLabel","i","num","selectFromViewer","unbind","subscription","dispose","setupResizing","table","document","getElementById","cols","querySelectorAll","col","resizer","createElement","classList","add","style","height","offsetHeight","appendChild","createResizableColumn","x","w","mouseMoveHandler","e","dx","clientX","newWidth","minWidth","width","mouseUpHandler","removeEventListener","addEventListener","styles","window","getComputedStyle","parseInt","runAnim","gridData","pivotData","getPivotData","map","c","unit","unitShort","name","headerLabel","rounded","path","shouldRoundNumbers","dto","jsonResult","hasSources","pivot","event","entityLabelsOfSelected","getEntityLabelsFromSelected","actions","viewKey","setup","textKey","actionKey","service","highlight","sendEventToViewer","hide","hideOthers","translucent","isolate","lookAt","open","isSelected","arg1","eventNAMEToSend","publish","hasInstances","index","selectAndView","handleSelect","qf","QF","lastSelectedRow","ots","hasOrgSelected","orgId","OpenMessage","handleError","tr","downloadFile","QV_Ids","navigateToRoute","getSelectedProject","QV_Id","replace","OpenModal","whenClosed","result","wasCancelled","isNumber","cell","test","download","animate","on","bindable","I18N"],"sourceRoot":""}