{"version":3,"file":"app-81a5f5c9.cd0a2054dcabf203.bundle.js","mappings":"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","sources":["webpack://client-app/./src/app/services/object-list/object-list-manager.ts"],"sourcesContent":["import {AppValues} from 'app/models/app-values';\r\nimport {EventAggregator} from 'aurelia-event-aggregator';\r\nimport {ObjectListColumnManager} from './object-list-column-manager';\r\nimport {ObjectListSource} from \"./object-list-source\";\r\nimport {ObjectFilter, UIValueFilter} from 'app/models/object-filter';\r\nimport {ObjectValues} from 'app/models/object-values';\r\nimport {ObjectRow} from './object-list-row';\r\nimport {autoinject} from \"aurelia-framework\";\r\nimport {IColorLegendService} from \"../color-legend/i-color-legend-service\";\r\nimport { ObjectDetails } from 'app/models/object-details';\r\n\r\nexport class ObjectListValues {\r\n public static readonly list: string = \"list\";\r\n public static readonly deck: string = \"deck\";\r\n public static readonly grid: string = \"grid\";\r\n public static readonly tree: string = \"tree\";\r\n public static readonly treeGrid: string = \"treeGrid\";\r\n public static readonly treeList: string = \"treeList\";\r\n}\r\n\r\n\r\nexport interface ShownColumnHeaderIF {\r\n width:number;\r\n isFixedColumn: boolean;\r\n defaultWidth:number;\r\n value:ObjectFilter; // UIValueFilter, WITH isFixedColumn!\r\n}\r\n\r\n\r\n@autoinject()\r\nexport class ObjectListManager {\r\n public selectedItems: ObjectRow[] = [];\r\n \r\n //public shownColumns: ObjectFilter[] = []; // row columns\r\n public shownColumns: UIValueFilter[] = []; // row columns // MUST have isFixedColumn!\r\n \r\n public shownColumnHeaders: ShownColumnHeaderIF[] = []; // header columns, split because of DnD\r\n\r\n public shownItems: ObjectRow[] = []; // Will contain mixed levels, e.g. familyLevel and typeLevel (typeinfo not filled out, on FAMILY LEVEL..)\r\n\r\n //NB. If old BP should be used fixedColumns should be used again.\r\n\t// public fixedColumns: ObjectFilter[] = [];\r\n public mode: string | null = \"\";\r\n public isInitialized: boolean = false;\r\n\tpublic collectingData: boolean = false;\r\n\tpublic pressedKey: string = \"\";\r\n\tpublic isNameColumnFixed: boolean = false; // (The NAME column is handled in a particular way in object-grid.html, so it needs to know whether it needs to be sticky or not.)\r\n\t\r\n\tpublic useValueListColors : boolean = false;\r\n\r\n constructor(\r\n public source: ObjectListSource,\r\n\t\tpublic columns: ObjectListColumnManager,\r\n\t\tprivate events: EventAggregator,\r\n\t\tpublic colorLegendService: IColorLegendService) {\r\n\t}\r\n\r\n initialize() {\r\n this.columns.initialize();\r\n }\r\n\r\n reset() {\r\n this.isInitialized = false;\r\n this.mode = null;\r\n this.resetItems();\r\n this.initialize();\r\n }\r\n\r\n private resetItems() {\r\n this.selectedItems = [];\r\n this.shownItems = [];\r\n this.shownColumns = [];\r\n this.shownColumnHeaders = []; // in OLM.resetItems.\r\n // this.fixedColumns = [];// in OLM.resetItems.\r\n this.source.reset();\r\n }\r\n\r\n\t// Alle disse kan klappes sammen til 1!\r\n async showAsDeck(): Promise {\r\n this.isInitialized = true;\r\n this.mode = ObjectListValues.deck;\r\n this.source.setup(this.mode, 25);\r\n\t\tthis.resetItems();\r\n\t\tthis.columns.removeGrouping(); // in showAsDeck.\r\n await this.apply_ActiveFilters('OLM.showAsDeck');\r\n }\r\n\r\n async showAsListGrid(who:string, apply:boolean=true): Promise {\r\n console.log('OLM.showAsListGrid by', who);\r\n this.isInitialized = true;\r\n this.mode = ObjectListValues.grid;\r\n this.source.setup(this.mode, 100);\r\n\t\tthis.resetItems();\r\n\t\tthis.columns.removeGrouping(); // in showAsListGrid.\r\n\r\n // ENTEN burde vi ikke ha den her,\r\n // eller istedet kalde den udefra, hos dem der kalder showAsListGrid..?\r\n if (apply) {\r\n\t\t await this.apply_ActiveFilters('OLM.showAsListGrid'); // IE, OLM.showAsListGrid attempts applyFilters.\r\n }\r\n }\r\n\r\n async showAsTreeGrid(): Promise {\r\n this.isInitialized = true;\r\n this.mode = ObjectListValues.treeGrid;\r\n this.source.setup(this.mode, 2147483647);\r\n this.resetItems();\r\n this.columns.applyGrouping();\r\n\r\n await this.apply_ActiveFilters('OLM.showAsTreeGrid'); // should be done outside.\r\n\t}\r\n\t\r\n\tasync showAsTreeList(): Promise {\r\n this.isInitialized = true;\r\n this.mode = ObjectListValues.treeList;\r\n this.source.setup(this.mode, 2147483647);\r\n this.resetItems();\r\n this.columns.applyGrouping();\r\n\r\n await this.apply_ActiveFilters('OLM.showAsTreeList'); // should be done outside.\r\n }\r\n\r\n\t/**\r\n\t * Enables colors on columns with value lists. \r\n\t * The value list items are colored according to their color assigned in the value list settings page.\r\n\t */\r\n\tenableValueListColors(): ObjectListManager {\r\n\t\t// Maybe this is not suited for a builder pattern as it is going to be toggled\r\n\t\t// Idea: Could potentially be a toggle with a lazy init that first retrieves the colors when first toggled.\r\n\t\tconsole.log('Columns', this.shownColumns);\r\n\t\tthis.useValueListColors = true;\r\n\t\t\r\n\t\treturn this;\r\n\t}\r\n\r\n\r\n init_HeaderColumns():void {\r\n this.shownColumns.forEach( (o_f:UIValueFilter) => {\r\n let width = 200;\r\n switch (o_f.targetType) {\r\n case ObjectValues.dataTypes.Integer:\r\n case ObjectValues.dataTypes.Double: width = 100; break;\r\n case ObjectValues.dataTypes.String: width = 200; break;\r\n }\r\n let columnHeader:ShownColumnHeaderIF = { width, isFixedColumn: false, defaultWidth: width, value: o_f };\r\n this.shownColumnHeaders.push(columnHeader);// in init_HeaderColumns. // MUST HAVE isFixedColumn!\r\n });\r\n }\r\n \r\n reorder_HeaderColumns():void {\r\n let tempColumnHeaders = [...this.shownColumnHeaders]; // (Klon) in reorder_HeaderColumns\r\n this.shownColumns.forEach( (o_f:UIValueFilter) => {\r\n let index = this.shownColumns.indexOf(o_f);\r\n let origColumn:ShownColumnHeaderIF | undefined = tempColumnHeaders.find(header => header.value === o_f);\r\n if (origColumn) { \r\n this.shownColumnHeaders.splice(index, 1, origColumn); // in reorder_HeaderColumns.\r\n }\r\n });\r\n }\r\n\r\n\r\n isManufacturerMode():boolean {\r\n let isManufacturer = (this.columns.parameterDefinitionService.apiTarget === AppValues.apiTarget.manufacturer);\r\n return isManufacturer;\r\n }\r\n\r\n\tasync apply_ActiveFilters(who:string): Promise {\r\n /* Precondition: Before we arrive here,\r\n 'somebody else' has prepared objects.columns.selected and objects.GROUPED.selected.\r\n Here, we will then USE e.g. objects.columns.SELECTED\r\n to populate further parts of OLM.\r\n */ \r\n\r\n /* Det ser ud til, at den kigger på nogen data,\r\n der liger under this.columns.xxx ('de aktive filtre'),\r\n og så initialiserer hele molevitten (resten) ud fra dette.\r\n\r\n Dvs. den udfylder:\r\n - columns.applied (ObjectFilter[])\r\n - this.shownColumns (ObjectFilter[])\r\n - this.shownColumnHeaders (ShownColumnHeaderIF[])\r\n\r\n Efter det, udfylder den shownItems, evt. indirekte ved at aktivere expand().\r\n */\r\n console.log('applyFilters,by:', who);\r\n \r\n // Collect the ACTIVE FILTERS:\r\n //let applied_filters:ObjectFilter[] = []; //new Array();\r\n let applied_filters:UIValueFilter[] = []; //new Array();\r\n if (this.columns.grouped) {\r\n if(this.columns.mainSearch) {\r\n if (Boolean(this.columns.mainSearch) && !this.columns.grouped.includes(this.columns?.mainSearch)) { applied_filters.push(this.columns?.mainSearch); }\r\n }\r\n if (Boolean(this.columns.grouped.length > 0)) { applied_filters.push(...this.columns.grouped); }\r\n if (Boolean(this.columns.selected.length > 0)) { applied_filters.push(...this.columns.selected); }//apply_ActiveFilters\r\n }\r\n\r\n this.resetItems(); // clears, ALSO shownItems cleared!\r\n\r\n try {\r\n this.collectingData = true; // cleaned up in finally.\r\n\r\n this.columns.applied = applied_filters.map( (o_f:UIValueFilter) => Object.assign({}, o_f)); // clone the active objectFilters.\r\n\r\n if (!this.isManufacturerMode()) {\t\t\t\r\n await this.columns.loadColumnMetadata();\r\n } // fetches the columns that have some kind of special data? e.g. QuantityUnit and Volume. What do they have in common?\r\n\t\t\t\r\n // shownColumns MUST have isFixedColumn!\r\n this.shownColumns = applied_filters.filter( (column:UIValueFilter) => !column.hide && column !== this.columns.mainSearch) ;\r\n this.init_HeaderColumns(); // (sets shownColumnHeaders.)\r\n\t\t\t\r\n if (this.columns.useGrouping) {\r\n this.columns.resetRoot();\r\n console.log('expand in applyfilters');\r\n if (this.columns.root) {\r\n await this.expand(this.columns.root);\r\n }\r\n } else { // NB, some of getMoreRows() results will be FAMILY LEVEL, without typeInfo (by design.)\r\n console.log('getMoreRows in applyfilters');\r\n let rows:ObjectRow[] | undefined = await this.source.getMoreRows('-AF',0); // in OLM.applyFilters. \r\n console.log('moreRows?', rows);\r\n if (rows) {\r\n this.shownItems.push(...rows); // (was cleared by resetItems above.)\r\n }\r\n }\r\n\t\t\t\r\n } finally {\r\n this.collectingData = false; \r\n }\r\n }\r\n\r\n public toggleSelectMore(row: ObjectRow) {\r\n\t\tconsole.log('toggleSelectMore, ', row.isSelected, '->', !row.isSelected);\r\n row.toggleSelected();\r\n\r\n if (!Boolean(this.selectedItems.includes(row))) {\r\n\t\t\tconsole.log('sel push because not included row');\r\n this.selectedItems.push(row);\r\n this.events.publish('object-properties:update', row);\r\n this.events.publish('object-properties-material:update', row.value?.typeId);\r\n } else {\r\n\t\t\tconsole.log('sel splice because prev-included row');\r\n this.selectedItems.splice(this.selectedItems.indexOf(row), 1);\r\n }\r\n this.columns.setAvailableFilterContext(row);\r\n\t\tthis.source.incrementCellUpdateTrigger();\r\n }\r\n\r\n public toggleSelectOne(clickedRow: ObjectRow) { // UB: toggleSelectedElementsOn(first..), and clearGridHighlighting.\r\n\t\t/* I am GUESSING that the purpose of 'toggleSelectOne'\r\n\t\tis when you click without SHIFT/CTRL, \r\n\t\tthen you must clear all earlier selection,\r\n\t\tand ensure just that single item remains/becomes selected?\t\t\r\n\t\t */\r\n\r\n\t\tconsole.log('toggleSelectOne, first toggle');\r\n clickedRow.toggleSelected(); // (we toggle current row then. That makes sense, I guess.)\r\n\r\n let hadMultipleSelected:boolean = this.selectedItems.length > 1; // (NB - toggle above is not included here. Why is 2-selected special, shouldn't 1-selected already count? FOR WHAT PURPOSE do we care about 'already-multiple-selected'??)\r\n\t\tconsole.log('hadMultipleSelected?', hadMultipleSelected);\r\n\r\n let rowToSelect: ObjectRow | undefined;\r\n if (!clickedRow.isSelected && hadMultipleSelected) { // (so, IF we had at least 2 earlier, AND we clicked an already-selected-row (..which must be part of those..)) WHY??\r\n\t\t\tconsole.log('toggleSelectOne, second toggle');\r\n clickedRow.toggleSelected(); // won't this toggle twice - what are we trying to achieve with this?\r\n rowToSelect = clickedRow;\r\n } // what is the purpose of this entire case??\r\n\r\n if (clickedRow.isSelected) { rowToSelect = clickedRow; } // (question: when is rowToSelect NOT set?? good question..)\r\n\r\n if (!clickedRow.isSelected) {\r\n\t\t\tconsole.log('as current row is NOT selected, we just clear selectedItems without negating their row.isSelected.');\r\n this.selectedItems = []; // So, if we are deselecting the current row, we clear entire existing selection? Why?\r\n\t\t\t// what about their thatRow.isSelected, shouldn't we clear that one too?\r\n\t\t\t// How do we reconcile anyRow.isSelected, and OLM.selectedItems?? Shouldn't one be calculated from the other??\r\n } else {\t\r\n\t\t\t/* JG: This block is the only 'sane' part of toggleSelectOne that appears immediately sensible/obvious.\r\n\t\t\tAll the above stuff, I find confusing, non-obvious, fragile and badly written?\r\n\t\t\t*/\r\n\t\t\tconsole.log('as current row now IS selected, we first negate row.isSelected for prev sel..');\r\n this.selectedItems.forEach(x => {\r\n if (x.isSelected && x !== clickedRow) {\r\n x.toggleSelected(); // (deselect it..)\r\n } // this seems to deselect the rest of the existing selection. (together with next statement.)\r\n });\r\n\t\t\tconsole.log('as current row IS selected, we THEN clear earlier sel, #', this.selectedItems.length);\r\n this.selectedItems = [];\r\n\r\n if (rowToSelect) { \r\n\t\t\t\tconsole.log('as we have a row-To-Select, we make it single item in selectedItems[].');\r\n this.selectedItems = [rowToSelect];\r\n this.events.publish('object-properties:update', clickedRow);\r\n this.events.publish('object-properties-material:update', clickedRow.value?.typeId);\r\n } else {\r\n\t\t\t\tconsole.log('weirdly, we have no row-to-select, even though we have row.isSelected??');\r\n\t\t\t}\r\n }\r\n\r\n this.columns.setAvailableFilterContext(clickedRow);\r\n this.source.incrementCellUpdateTrigger();\r\n }\r\n \r\n public toggleSelect(row: ObjectRow): void {\r\n\t\tconsole.log('OLM.toggleSelect', row);\r\n\t\trow.toggleSelected();\r\n\t\tif (this.pressedKey === 'Control') {\r\n\t\t\tthis.handleControlSelect(row);\r\n\t\t} \r\n\t\telse if (this.pressedKey === 'Shift') {\r\n\t\t\tthis.handleShiftSelect(row);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.handleRegularPress(row);\r\n\t\t}\r\n\t\tthis.columns.setAvailableFilterContext(row);\r\n\t\tthis.source.incrementCellUpdateTrigger();\r\n\t\tthis.events.publish('3dViewer:highlight-selected-items', this);\r\n }\r\n\r\n handleControlSelect(row: ObjectRow): void {\r\n\t\tconsole.log('handleControlSelect', row);\r\n if (!Boolean(this.selectedItems.includes(row))) {\r\n this.selectedItems.push(row);\r\n }\r\n else {\r\n this.selectedItems.splice(this.selectedItems.indexOf(row), 1);\r\n }\r\n }\r\n\r\n handleShiftSelect(row: ObjectRow): void {\r\n\t\tconsole.log('handleShiftSelect', row);\r\n let previouslySelectedItem = this.selectedItems.filter(x => this.selectedItems.indexOf(x) === this.selectedItems.length - 1)[0];\r\n let previouslySelectedItemIndex = this.shownItems.indexOf(previouslySelectedItem);\r\n let rowIndex = this.shownItems.indexOf(row);\r\n\r\n if (!Boolean(this.selectedItems.includes(row))) {\r\n this.selectedItems.push(row);\r\n }\r\n \r\n this.shownItems.forEach((x, index) => {\r\n if ((index > previouslySelectedItemIndex && index < rowIndex) || (index < previouslySelectedItemIndex && index > rowIndex)) {\r\n if (!Boolean(x.isSelected)) {\r\n x.toggleSelected();\r\n }\r\n this.selectedItems.push(x);\r\n }\r\n });\r\n }\r\n\r\n handleRegularPress(row: ObjectRow): void {\r\n\t\tconsole.log('handleRegularPress', row);\r\n let hadMultipleSelected:boolean = this.selectedItems.length > 1;\r\n\t\t\tlet rowToSelect: ObjectRow | undefined;\r\n\t\t\t\r\n\t\t\tif (!row.isSelected && hadMultipleSelected) {\r\n\t\t\t\trow.toggleSelected();\r\n\t\t\t\trowToSelect = row;\r\n\t\t\t}\r\n\t\t\tif (row.isSelected) {\r\n\t\t\t\trowToSelect = row;\r\n\t\t\t}\r\n\t\t\tif (!row.isSelected) {\r\n\t\t\t\tthis.selectedItems = [];\r\n\t\t\t} else {\t\r\n\t\t\t\tthis.selectedItems.forEach(x => {\r\n\t\t\t\t\tif (x.isSelected && x !== row) {\r\n\t\t\t\t\t\tx.toggleSelected();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tthis.selectedItems = [];\r\n if (rowToSelect) {\r\n this.selectedItems = [rowToSelect];\r\n }\r\n this.events.publish('object-properties:update', row);\r\n this.events.publish('object-properties-material:update', row.value?.typeId);\r\n\t\t\t}\r\n }\r\n\r\n async tryShowMoreObjects():Promise { // (UB OG.getMore IF there is still extra empty UI space left at bottom.)\r\n if (this.collectingData) {\r\n console.log('OLM-tryShowMoreObjects, still collecting data');\r\n return;\r\n }\r\n\r\n try {//in-OLM.tryShowMoreObjects\r\n let src:ObjectListSource = this.source;\r\n\r\n this.collectingData = true;\r\n let atIx = this.shownItems.length;\r\n let rows: ObjectRow[] | undefined = await src.getMoreRows('-TSMO', atIx); \r\n if (rows) {\r\n if (!this.checkMoreRows(rows)) { return; }\r\n console.log('TSMO, getMoreRows got#:', rows.length);\r\n this.shownItems.push(...rows);\r\n return rows;\r\n }\r\n } finally {\r\n this.collectingData = false;\r\n }\r\n // JG: laver de 3 spread-prikker nedenfor her, NOGET SOM HELST?\r\n // https://stackoverflow.com/questions/31048953/what-do-these-three-dots-in-react-do\r\n\t}\r\n\r\n checkMoreRows(rows: ObjectRow[]):boolean {\r\n if (rows == undefined) {\r\n console.trace('ObjectListSource.getMoreRows returned undefined, which probably just means \"no further rows to get.\"');\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n\tasync expand(row: ObjectRow): Promise {\r\n console.log('OLM-expand', row.id, row.name, row);\r\n\t\tif (!row.isGroup) { return; }\r\n\r\n\t\tthis.collapse(row); // To ensure that items will not be duplicated due to lag\r\n\r\n\t\tawait this.source.setExpandContent(row);\r\n\r\n let index = this.shownItems.length > 0 ? this.shownItems.indexOf(row) + 1 : 0;\r\n\r\n this.shownItems.splice(index, 0, ...row.group.children);//in-OLM.expand.\r\n\r\n\t\tif (row.group.children.length == 1) { // blot en speed-shortcut, der repeater expand så længe vi expander ting der kun har 1 elm.\r\n\t\t\tawait this.expand(row.group.children[0]);\r\n\t\t}\r\n }\r\n\t\r\n collapse(row: ObjectRow) {\r\n console.log('OLM-collapse', row.id, row.name, row);\r\n let nrOfDecendents = this.source.collapseContent(row);\r\n if(nrOfDecendents == 0) return;\r\n let index = this.shownItems.indexOf(row) + 1;\r\n this.shownItems.splice(index, nrOfDecendents);//in-OLM.collapse\r\n }\r\n\r\n public clearGridHighlighting(): void { //amountOfCalls: number\r\n\t\tconsole.log('clearGridHighlighting'); //, #calls:', amountOfCalls);\r\n\r\n\t\t//if (amountOfCalls !== 0) { return false; }\r\n \t\tif (this.selectedItems.length == 0) { \r\n\t\t\tconsole.log('(clearGridHighlighting tells handleObjectClicked to bail because selectedItems.length is 0)')\r\n\t\t\treturn; \r\n\t\t} // (nothing to do.)\r\n\r\n\t\tconst frontSelectedItem0 = this.selectedItems[0];\r\n\t\tthis.toggleSelectOne(frontSelectedItem0); // (in clearGridHighlighting.) sort-of-deselect first element.. and..?\r\n\r\n\t\t// What is this block about?\r\n\t\tif (this.selectedItems.includes(frontSelectedItem0)) { // JG: This statement makes no sense??\r\n\t\t\tconsole.log('clearGridHighlighting, what is this weird case where this would happen?', frontSelectedItem0);\r\n\t\t\tthis.toggleSelectOne(frontSelectedItem0); // in clearGridHighlighting.\r\n\t\t}\r\n\t\t//return true;\t\t\r\n\t}\r\n\r\n\tpublic async expandRows(rowsToToggle: ObjectRow[]): Promise {\r\n\t\tfor (let i = 0; i < rowsToToggle.length; i++) {\r\n\t\t\tif (!(rowsToToggle[i].group.isExpanded == true)) {\r\n\t\t\t\tawait this.expand(rowsToToggle[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n public async getRowsToExpand(typeIds: string[]): Promise { \r\n let rowsToExpand: ObjectRow[] = []; \r\n for (let i = 0; i < this.shownItems.length; i++) {\r\n let value: ObjectDetails | null = this.shownItems[i].value;\r\n if (value && this.shownItems[i].isType()) {\t\r\n if (typeIds.includes(value.typeId)) {\r\n rowsToExpand.push(this.shownItems[i]);\r\n }\r\n }\r\n }\r\n return rowsToExpand;\r\n }\r\n\r\n public async toggleSelectedElementsOff(listOfElementsToRemove: ObjectRow[]): Promise { // UB: BPC.handleItemsToSelect.\r\n\t\tconsole.log('toggleSelectedElementsOff, #', listOfElementsToRemove.length);\r\n listOfElementsToRemove.forEach((element: ObjectRow) => {\r\n\t\t\tthis.toggleSelectMore(element); // toggleSelectedElementsOff\r\n\t\t});\r\n }\r\n\r\n public async toggleSelectedElementsOn(listOfNewElements: ObjectRow[]): Promise { // UB: BPC.handleItemsToSelect.\r\n\t\tconsole.log('toggleSelectedElementsOn, #', listOfNewElements.length);\r\n for (const element of listOfNewElements) {\r\n\t\t\tlet anyExistingSelection = (this.selectedItems.length !== 0);\r\n\t\t\tif (!anyExistingSelection) {\r\n\t\t\t\tthis.toggleSelectOne(element); // in toggleSelectedElementsOn.\r\n\t\t\t} else {\r\n\t\t\t\tthis.toggleSelectMore(element); // toggleSelectedElementsOn\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n}\r\n"],"names":["ObjectListValues","list","deck","grid","tree","treeGrid","treeList","ObjectListManager","constructor","source","columns","events","colorLegendService","selectedItems","shownColumns","shownColumnHeaders","shownItems","mode","isInitialized","collectingData","pressedKey","isNameColumnFixed","useValueListColors","initialize","this","reset","resetItems","showAsDeck","setup","removeGrouping","apply_ActiveFilters","showAsListGrid","who","apply","console","log","showAsTreeGrid","applyGrouping","showAsTreeList","enableValueListColors","init_HeaderColumns","forEach","o_f","width","targetType","dataTypes","Integer","Double","String","columnHeader","isFixedColumn","defaultWidth","value","push","reorder_HeaderColumns","tempColumnHeaders","index","indexOf","origColumn","find","header","splice","isManufacturerMode","parameterDefinitionService","apiTarget","manufacturer","applied_filters","grouped","mainSearch","Boolean","includes","length","selected","applied","map","Object","assign","loadColumnMetadata","filter","column","hide","useGrouping","resetRoot","root","expand","rows","getMoreRows","toggleSelectMore","row","isSelected","toggleSelected","publish","typeId","setAvailableFilterContext","incrementCellUpdateTrigger","toggleSelectOne","clickedRow","rowToSelect","hadMultipleSelected","x","toggleSelect","handleControlSelect","handleShiftSelect","handleRegularPress","previouslySelectedItem","previouslySelectedItemIndex","rowIndex","tryShowMoreObjects","src","atIx","checkMoreRows","undefined","trace","id","name","isGroup","collapse","setExpandContent","group","children","nrOfDecendents","collapseContent","clearGridHighlighting","frontSelectedItem0","expandRows","rowsToToggle","i","isExpanded","getRowsToExpand","typeIds","rowsToExpand","isType","toggleSelectedElementsOff","listOfElementsToRemove","element","toggleSelectedElementsOn","listOfNewElements","autoinject","EventAggregator"],"sourceRoot":""}