{"version":3,"file":"app-81a5f5c9.896237478cc7c189.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 }\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 listOfNewElements.forEach(async(element: ObjectRow) => {\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 }\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","async","setup","removeGrouping","apply_ActiveFilters","who","apply","console","log","applyGrouping","enableValueListColors","init_HeaderColumns","forEach","o_f","width","targetType","columnHeader","isFixedColumn","defaultWidth","value","push","reorder_HeaderColumns","tempColumnHeaders","index","indexOf","origColumn","find","header","splice","isManufacturerMode","parameterDefinitionService","apiTarget","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","src","atIx","checkMoreRows","undefined","trace","id","name","isGroup","collapse","setExpandContent","group","children","nrOfDecendents","collapseContent","clearGridHighlighting","frontSelectedItem0","rowsToToggle","i","isExpanded","typeIds","rowsToExpand","isType","listOfElementsToRemove","element","listOfNewElements","autoinject"],"sourceRoot":""}