@lumeer/pivot 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,10 +4,10 @@
4
4
  export * from './lib/lmr-pivot-table.component';
5
5
  export * from './lib/lmr-simple-pivot-table.component';
6
6
  export * from './lib/lmr-pivot-table.module';
7
- export { LmrPivotConfigVersion, LmrPivotValueType } from './lib/util/lmr-pivot-config';
7
+ export * from './lib/util/lmr-pivot-config';
8
8
  export * from './lib/util/lmr-simple-pivot-config';
9
9
  export * from './lib/util/lmr-pivot-data';
10
10
  export * from './lib/util/lmr-pivot-table';
11
11
  export * from './lib/util/pivot-util';
12
12
  export * from './lib/directives/lmr-templates.directive';
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2xtci1waXZvdC10YWJsZS9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLE9BQU8sRUFBc0MscUJBQXFCLEVBQTZILGlCQUFpQixFQUFxQixNQUFNLDZCQUE2QixDQUFDO0FBQ3pRLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYywwQ0FBMEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgbG1yLXBpdm90LXRhYmxlXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvbG1yLXBpdm90LXRhYmxlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9sbXItc2ltcGxlLXBpdm90LXRhYmxlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9sbXItcGl2b3QtdGFibGUubW9kdWxlJztcbmV4cG9ydCB7IExtclBpdm90Q29uZmlnLCBMbXJQaXZvdFN0ZW1Db25maWcsIExtclBpdm90Q29uZmlnVmVyc2lvbiwgTG1yUGl2b3RUcmFuc2Zvcm0sIExtclBpdm90QXR0cmlidXRlLCBMbXJQaXZvdFJvd0F0dHJpYnV0ZSwgTG1yUGl2b3RDb2x1bW5BdHRyaWJ1dGUsIExtclBpdm90U29ydCwgTG1yUGl2b3RWYWx1ZUF0dHJpYnV0ZSwgTG1yUGl2b3RWYWx1ZVR5cGUsIExtclBpdm90RXhwcmVzc2lvbn0gZnJvbSAnLi9saWIvdXRpbC9sbXItcGl2b3QtY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWwvbG1yLXNpbXBsZS1waXZvdC1jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbC9sbXItcGl2b3QtZGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlsL2xtci1waXZvdC10YWJsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlsL3Bpdm90LXV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9sbXItdGVtcGxhdGVzLmRpcmVjdGl2ZSc7XG4iXX0=
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2xtci1waXZvdC10YWJsZS9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDBDQUEwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBsbXItcGl2b3QtdGFibGVcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9sbXItcGl2b3QtdGFibGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2xtci1zaW1wbGUtcGl2b3QtdGFibGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2xtci1waXZvdC10YWJsZS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbC9sbXItcGl2b3QtY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWwvbG1yLXNpbXBsZS1waXZvdC1jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbC9sbXItcGl2b3QtZGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlsL2xtci1waXZvdC10YWJsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlsL3Bpdm90LXV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9sbXItdGVtcGxhdGVzLmRpcmVjdGl2ZSc7XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"lumeer-pivot.mjs","sources":["../../../projects/lmr-pivot-table/src/lib/util/lmr-pivot-config.ts","../../../projects/lmr-pivot-table/src/lib/util/lmr-pivot-constants.ts","../../../projects/lmr-pivot-table/src/lib/util/pivot-util.ts","../../../projects/lmr-pivot-table/src/lib/util/pivot-data-converter.ts","../../../projects/lmr-pivot-table/src/lib/util/pivot-table-converter.ts","../../../projects/lmr-pivot-table/src/lib/directives/lmr-templates.directive.ts","../../../projects/lmr-pivot-table/src/lib/pipes/pivot-data-empty.pipe.ts","../../../projects/lmr-pivot-table/src/lib/pipes/pivot-table-value.pipe.ts","../../../projects/lmr-pivot-table/src/lib/pipes/contrast-color.pipe.ts","../../../projects/lmr-pivot-table/src/lib/lmr-pivot-table.component.ts","../../../projects/lmr-pivot-table/src/lib/lmr-pivot-table.component.html","../../../projects/lmr-pivot-table/src/lib/lmr-simple-pivot-table.component.ts","../../../projects/lmr-pivot-table/src/lib/lmr-simple-pivot-table.component.html","../../../projects/lmr-pivot-table/src/lib/lmr-pivot-table.module.ts","../../../projects/lmr-pivot-table/src/public-api.ts","../../../projects/lmr-pivot-table/src/lumeer-pivot.ts"],"sourcesContent":["import {Constraint, DataAggregationType, QueryAttribute, QueryStem} from '@lumeer/data-filters';\nimport {LmrPivotDataHeader} from './lmr-pivot-data';\n\nexport interface LmrPivotConfig {\n version?: LmrPivotConfigVersion;\n stemsConfigs: LmrPivotStemConfig[];\n mergeTables?: boolean;\n}\n\nexport interface LmrPivotTransform {\n checkValidConstraintOverride?: (c1: Constraint, c2: Constraint) => Constraint;\n formatAggregation?: (type: DataAggregationType) => string;\n formatSummaryHeader?: (header: LmrPivotDataHeader, level: number) => {title?: string; summary: string};\n formatRowHeader?: (title: string, level: number) => string;\n formatColumnHeader?: (title: string, level: number) => string;\n}\n\nexport interface LmrPivotStemConfig {\n stem?: QueryStem;\n rowAttributes: LmrPivotRowAttribute[];\n columnAttributes: LmrPivotColumnAttribute[];\n valueAttributes: LmrPivotValueAttribute[];\n}\n\nexport enum LmrPivotConfigVersion {\n V1 = '1',\n}\n\nexport interface LmrPivotAttribute extends QueryAttribute {}\n\nexport interface LmrPivotRowColumnAttribute extends LmrPivotAttribute {\n showSums?: boolean;\n sticky?: boolean;\n sort?: LmrPivotSort;\n expressions?: LmrPivotExpression[];\n}\n\nexport interface LmrPivotRowAttribute extends LmrPivotRowColumnAttribute {\n showHeader?: boolean;\n}\n\nexport interface LmrPivotColumnAttribute extends LmrPivotRowColumnAttribute {}\n\nexport interface LmrPivotSortValue {\n title: string;\n isSummary?: boolean;\n}\n\nexport interface LmrPivotSortList {\n valueTitle: string;\n values: LmrPivotSortValue[];\n}\n\nexport interface LmrPivotSort {\n attribute?: LmrPivotAttribute;\n list?: LmrPivotSortList;\n asc: boolean;\n}\n\nexport enum LmrPivotValueType {\n Default = 'default',\n ColumnPercentage = 'column',\n RowPercentage = 'row',\n AllPercentage = 'all',\n}\n\nexport interface LmrPivotValueAttribute extends LmrPivotAttribute {\n aggregation: DataAggregationType;\n valueType?: LmrPivotValueType;\n}\n\nexport interface LmrPivotExpression {\n operation: LmrPivotExpressionOperation;\n operands: LmrPivotOperand[];\n title: string;\n type: 'expression'\n}\n\nexport type LmrPivotExpressionOperation = 'add' | 'subtract' | 'multiply' | 'divide';\n\nexport interface LmrPivotHeaderOperand {\n type: 'header';\n value: string;\n}\n\nexport interface LmrPivotValueOperand {\n type: 'value';\n value: number;\n}\n\nexport type LmrPivotOperand = LmrPivotHeaderOperand | LmrPivotValueOperand | LmrPivotExpression;\n","export const COLOR_GRAY100 = '#f8f9fa';\nexport const COLOR_GRAY200 = '#ecf0f1';\nexport const COLOR_GRAY300 = '#dee2e6';\nexport const COLOR_GRAY400 = '#ced4da';\nexport const COLOR_GRAY500 = '#b4bcc2';\nexport const COLOR_GRAY600 = '#95a5a6';\nexport const COLOR_GRAY700 = '#7b8a8b';\nexport const COLOR_GRAY800 = '#343a40';\nexport const COLOR_GRAY900 = '#212529';\n\nexport const COLOR_PRIMARY = '#253746';\n\nexport const COLOR_LIGHT = COLOR_GRAY200;\n","/*\n * Lumeer: Modern Data Definition and Processing Platform\n *\n * Copyright (C) since 2017 Lumeer.io, s.r.o. and/or its affiliates.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport {cleanQueryAttribute, Query, QueryStem} from '@lumeer/data-filters';\nimport {deepObjectsEquals, hex2rgba} from '@lumeer/utils';\nimport {LmrPivotAttribute, LmrPivotConfig, LmrPivotConfigVersion, LmrPivotStemConfig} from './lmr-pivot-config';\nimport {COLOR_LIGHT, COLOR_PRIMARY} from './lmr-pivot-constants';\n\nexport function pivotAttributesAreSame(a1: LmrPivotAttribute, a2: LmrPivotAttribute): boolean {\n return deepObjectsEquals(cleanQueryAttribute(a1), cleanQueryAttribute(a2));\n}\n\nexport function isPivotConfigChanged(viewConfig: LmrPivotConfig, currentConfig: LmrPivotConfig): boolean {\n if (!!viewConfig.mergeTables !== !!currentConfig.mergeTables && (currentConfig.stemsConfigs || []).length > 1) {\n return true;\n }\n\n return pivotStemConfigsHasChanged(viewConfig.stemsConfigs || [], currentConfig.stemsConfigs || []);\n}\n\nfunction pivotStemConfigsHasChanged(s1: LmrPivotStemConfig[], s2: LmrPivotStemConfig[]): boolean {\n if (s1.length !== s2.length) {\n return true;\n }\n\n return s1.some((stemConfig, index) => pivotStemConfigHasChanged(stemConfig, s2[index]));\n}\n\nfunction pivotStemConfigHasChanged(s1: LmrPivotStemConfig, s2: LmrPivotStemConfig): boolean {\n return (\n !deepObjectsEquals(s1.rowAttributes || [], s2.rowAttributes || []) ||\n !deepObjectsEquals(s1.columnAttributes || [], s2.columnAttributes || []) ||\n !deepObjectsEquals(s1.valueAttributes || [], s2.valueAttributes || [])\n );\n}\n\nexport function createDefaultPivotConfig(query: Query): LmrPivotConfig {\n const stems = (query && query.stems) || [];\n const stemsConfigs = stems.map(stem => createDefaultPivotStemConfig(stem));\n return {version: LmrPivotConfigVersion.V1, stemsConfigs: stemsConfigs, mergeTables: true};\n}\n\nexport function createDefaultPivotStemConfig(stem?: QueryStem): LmrPivotStemConfig {\n return {stem, rowAttributes: [], columnAttributes: [], valueAttributes: []};\n}\n\nexport function pivotConfigIsEmpty(config: LmrPivotConfig): boolean {\n return (config.stemsConfigs || []).every(stemConfig => pivotStemConfigIsEmpty(stemConfig));\n}\n\nexport function pivotStemConfigIsEmpty(config: LmrPivotStemConfig): boolean {\n return (\n ((config && config.rowAttributes) || []).length === 0 &&\n ((config && config.columnAttributes) || []).length === 0 &&\n ((config && config.valueAttributes) || []).length === 0\n );\n}\n\nexport function contrastColor(color: string, returnCodes?: {dark: string; light: string}, opacity?: number): string {\n if (!color) {\n return returnCodes ? returnCodes.dark : COLOR_PRIMARY;\n }\n\n const f = parseInt(color.indexOf('#') === 0 ? color.slice(1) : color, 16),\n R = f >> 16,\n G = (f >> 8) & 0x00ff,\n B = f & 0x0000ff;\n\n const luminance = (0.299 * R + 0.587 * G + 0.114 * B) / 255;\n\n if (luminance > 0.5) {\n return returnCodes ? returnCodes.dark : hex2rgba(COLOR_PRIMARY, opacity || 1);\n } else {\n return returnCodes ? returnCodes.light : hex2rgba(COLOR_LIGHT, opacity || 1);\n }\n}\n","/*\n * Lumeer: Modern Data Definition and Processing Platform\n *\n * Copyright (C) since 2017 Lumeer.io, s.r.o. and/or its affiliates.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport {\n Attribute,\n AggregatedDataMap,\n AggregatedDataValues,\n AggregatedMapData,\n Constraint,\n ConstraintData,\n ConstraintType,\n DataAggregationType,\n DataAggregator,\n DataAggregatorAttribute,\n DataValue,\n DocumentsAndLinksData,\n UnknownConstraint,\n aggregateDataResources,\n dataAggregationConstraint, QueryStem, Collection, LinkType, DataResource, Query, AttributesResourceType, attributesResourcesAttributesMap,\n} from '@lumeer/data-filters';\nimport {deepObjectsEquals, flattenMatrix, flattenValues, isArray, isNotNullOrUndefined, uniqueValues} from '@lumeer/utils';\nimport {LmrPivotAttribute, LmrPivotConfig, LmrPivotRowColumnAttribute, LmrPivotStemConfig, LmrPivotTransform, LmrPivotValueAttribute} from './lmr-pivot-config';\nimport {LmrPivotData, LmrPivotDataHeader, LmrPivotDimensionConfig, LmrPivotHeaderAttribute, LmrPivotStemData} from './lmr-pivot-data';\nimport {pivotStemConfigIsEmpty} from './pivot-util';\n\ninterface PivotMergeData {\n configs: LmrPivotStemConfig[];\n stems: QueryStem[];\n stemsIndexes: number[];\n type: PivotConfigType;\n}\n\nenum PivotConfigType {\n Values,\n Rows,\n Columns,\n RowsAndColumns,\n}\n\ninterface PivotColors {\n rows: string[];\n columns: string[];\n values: string[];\n}\n\ninterface PivotConfigData {\n rowsConfig: LmrPivotDimensionConfig[];\n rowShowHeaderAttributes: boolean[];\n columnsConfig: LmrPivotDimensionConfig[];\n columnShowHeaderAttributes: boolean[];\n rowAttributes: Attribute[];\n columnAttributes: Attribute[];\n}\n\nexport class PivotDataConverter {\n private collections: Collection[];\n private linkTypes: LinkType[];\n private collectionsAttributesMap: Record<string, Record<string, Attribute>>;\n private linkTypesAttributesMap: Record<string, Record<string, Attribute>>;\n private data: DocumentsAndLinksData;\n private config: LmrPivotConfig;\n private transform: LmrPivotTransform;\n private constraintData: ConstraintData;\n\n private dataAggregator: DataAggregator;\n\n constructor() {\n this.dataAggregator = new DataAggregator((value, constraint, data, aggregatorAttribute) =>\n this.formatPivotValue(value, constraint, data, aggregatorAttribute)\n );\n }\n\n private formatPivotValue(\n value: any,\n constraint: Constraint,\n constraintData: ConstraintData,\n aggregatorAttribute: DataAggregatorAttribute\n ): any {\n const pivotConstraint = aggregatorAttribute.data && (aggregatorAttribute.data as Constraint);\n const overrideConstraint =\n pivotConstraint && this.transform?.checkValidConstraintOverride?.(constraint, pivotConstraint);\n const finalConstraint = overrideConstraint || constraint || new UnknownConstraint();\n const serializedValue = (constraint || new UnknownConstraint()).createDataValue(value, constraintData).serialize()\n return this.formatDataValue(finalConstraint.createDataValue(serializedValue, constraintData), finalConstraint);\n }\n\n private formatDataValue(dataValue: DataValue, constraint: Constraint): any {\n switch (constraint.type) {\n case ConstraintType.DateTime:\n return dataValue.format();\n default:\n return dataValue.serialize();\n }\n }\n\n private updateData(\n config: LmrPivotConfig,\n transform: LmrPivotTransform,\n collections: Collection[],\n linkTypes: LinkType[],\n data: DocumentsAndLinksData,\n constraintData: ConstraintData\n ) {\n this.config = config;\n this.transform = transform;\n this.collections = collections;\n this.linkTypes = linkTypes;\n this.collectionsAttributesMap = attributesResourcesAttributesMap(collections);\n this.linkTypesAttributesMap = attributesResourcesAttributesMap(linkTypes);\n this.data = data;\n this.constraintData = constraintData;\n }\n\n public createData(\n config: LmrPivotConfig,\n transform: LmrPivotTransform,\n collections: Collection[],\n linkTypes: LinkType[],\n data: DocumentsAndLinksData,\n query: Query,\n constraintData?: ConstraintData\n ): LmrPivotData {\n this.updateData(config, transform, collections, linkTypes, data, constraintData);\n\n const {stemsConfigs, stems} = this.filterEmptyConfigs(config, query);\n\n const mergeData = this.createPivotMergeData(config.mergeTables, stemsConfigs, stems);\n const ableToMerge = mergeData.length <= 1;\n const pivotData = this.mergePivotData(mergeData);\n return {data: pivotData, constraintData, ableToMerge, mergeTables: config.mergeTables};\n }\n\n private filterEmptyConfigs(config: LmrPivotConfig, query: Query): {stemsConfigs: LmrPivotStemConfig[]; stems: QueryStem[]} {\n return (config.stemsConfigs || []).reduce(\n ({stemsConfigs, stems}, stemConfig, index) => {\n if (!pivotStemConfigIsEmpty(stemConfig)) {\n const stem = (query.stems || [])[index];\n stemsConfigs.push(stemConfig);\n stems.push(stem);\n }\n\n return {stemsConfigs, stems};\n },\n {stemsConfigs: [], stems: []}\n );\n }\n\n private createPivotMergeData(\n mergeTables: boolean,\n stemsConfigs: LmrPivotStemConfig[],\n stems: QueryStem[]\n ): PivotMergeData[] {\n return stemsConfigs.reduce((mergeData: PivotMergeData[], stemConfig, index) => {\n const configType = getPivotStemConfigType(stemConfig);\n const mergeDataIndex = mergeData.findIndex(\n data => data.type === configType && canMergeConfigsByType(data.type, data.configs[0], stemConfig)\n );\n if (mergeTables && mergeDataIndex >= 0) {\n mergeData[mergeDataIndex].configs.push(stemConfig);\n mergeData[mergeDataIndex].stems.push(stems[index]);\n mergeData[mergeDataIndex].stemsIndexes.push(index);\n } else {\n mergeData.push({configs: [stemConfig], stems: [stems[index]], stemsIndexes: [index], type: configType});\n }\n\n return mergeData;\n }, []);\n }\n\n private mergePivotData(mergeData: PivotMergeData[]): LmrPivotStemData[] {\n return mergeData.reduce((stemData, data) => {\n if (data.type === PivotConfigType.Values) {\n stemData.push(this.convertValueAttributes(data.configs, data.stems, data.stemsIndexes));\n } else {\n stemData.push(this.transformStems(data.configs, data.stems, data.stemsIndexes));\n }\n return stemData;\n }, []);\n }\n\n private transformStems(configs: LmrPivotStemConfig[], queryStems: QueryStem[], stemsIndexes: number[]): LmrPivotStemData {\n const pivotColors: PivotColors = {rows: [], columns: [], values: []};\n const mergedValueAttributes: LmrPivotValueAttribute[] = [];\n let mergedAggregatedData: AggregatedMapData = null;\n let additionalData: PivotConfigData;\n\n for (let i = 0; i < configs.length; i++) {\n const config = configs[i];\n const queryStem = queryStems[i];\n const stemIndex = stemsIndexes[i];\n const stemData = this.data?.dataByStems?.[stemIndex];\n\n this.dataAggregator.updateData(\n this.collections,\n stemData?.documents || [],\n this.linkTypes,\n stemData?.linkInstances || [],\n queryStem,\n this.constraintData\n );\n const rowAttributes = (config.rowAttributes || []).map(attribute =>\n this.convertPivotRowColumnAttribute(attribute)\n );\n const columnAttributes = (config.columnAttributes || []).map(attribute =>\n this.convertPivotRowColumnAttribute(attribute)\n );\n const valueAttributes = (config.valueAttributes || []).map(attribute => this.convertPivotAttribute(attribute));\n\n pivotColors.rows.push(...this.getAttributesColors(config.rowAttributes));\n pivotColors.columns.push(...this.getAttributesColors(config.columnAttributes));\n pivotColors.values.push(...this.getAttributesColors(config.valueAttributes));\n\n const aggregatedData = this.dataAggregator.aggregate(rowAttributes, columnAttributes, valueAttributes);\n mergedAggregatedData = this.mergeAggregatedData(mergedAggregatedData, aggregatedData);\n\n const filteredValueAttributes = (config.valueAttributes || []).filter(\n valueAttr => !mergedValueAttributes.some(merAttr => deepObjectsEquals(valueAttr, merAttr))\n );\n mergedValueAttributes.push(...filteredValueAttributes);\n\n if (!additionalData) {\n const rowSticky = this.mapStickyValues((config.rowAttributes || []).map(attr => attr.sticky));\n const columnSticky = this.mapStickyValues((config.columnAttributes || []).map(attr => attr.sticky));\n additionalData = {\n rowsConfig: (config.rowAttributes || []).map((attr, index) => ({showSums: attr.showSums, sort: attr.sort, expressions: attr.expressions, sticky: rowSticky[index]})),\n columnsConfig: (config.columnAttributes || []).map((attr, index) => ({showSums: attr.showSums, sort: attr.sort, expressions: attr.expressions, sticky: columnSticky[index]})),\n rowShowHeaderAttributes: (config.rowAttributes || []).map(attr => attr.showHeader),\n rowAttributes: (config.rowAttributes || []).map(attr => this.pivotAttributeAttribute(attr)),\n columnShowHeaderAttributes: (config.columnAttributes || []).map(attr => false),\n columnAttributes: (config.columnAttributes || []).map(attr => this.pivotAttributeAttribute(attr)),\n };\n }\n }\n\n return this.convertAggregatedData(mergedAggregatedData, mergedValueAttributes, pivotColors, additionalData);\n }\n\n private mapStickyValues(values: boolean[]): boolean[] {\n // we support only sticky rows/columns in a row\n return values.reduce((stickyValues, sticky, index) => {\n stickyValues.push(sticky && (index === 0 || stickyValues[index - 1]));\n return stickyValues;\n }, []);\n }\n\n private pivotAttributeConstraint(pivotAttribute: LmrPivotAttribute): Constraint | undefined {\n const attribute = this.findAttributeByPivotAttribute(pivotAttribute);\n const constraint = attribute && attribute.constraint;\n const overrideConstraint =\n pivotAttribute.constraint &&\n this.transform?.checkValidConstraintOverride?.(constraint, pivotAttribute.constraint);\n return overrideConstraint || constraint;\n }\n\n private pivotAttributeAttribute(pivotAttribute: LmrPivotAttribute): Attribute | undefined {\n const attribute = this.findAttributeByPivotAttribute(pivotAttribute);\n if (attribute) {\n const constraint = attribute?.constraint;\n const overrideConstraint =\n pivotAttribute.constraint &&\n this.transform?.checkValidConstraintOverride?.(constraint, pivotAttribute.constraint);\n return {...attribute, constraint: overrideConstraint || constraint || new UnknownConstraint()};\n }\n return undefined;\n }\n\n private mergeAggregatedData(a1: AggregatedMapData, a2: AggregatedMapData): AggregatedMapData {\n if (!a1 || !a2) {\n return a1 || a2;\n }\n\n this.mergeMaps(a1.map, a2.map);\n this.mergeMaps(a1.columnsMap, a2.columnsMap);\n return {\n map: a1.map,\n columnsMap: a1.columnsMap,\n rowLevels: Math.max(a1.rowLevels, a2.rowLevels),\n columnLevels: Math.max(a1.columnLevels, a2.columnLevels),\n };\n }\n\n private mergeMaps(m1: Record<string, any>, m2: Record<string, any>) {\n Object.keys(m2).forEach(key => {\n if (m1[key]) {\n if (isArray(m1[key]) && isArray(m2[key])) {\n m1[key].push(...m2[key]);\n } else if (!isArray(m1[key]) && !isArray(m2[key])) {\n this.mergeMaps(m1[key], m2[key]);\n }\n } else {\n m1[key] = m2[key];\n }\n });\n }\n\n private getAttributesColors(attributes: LmrPivotAttribute[]): string[] {\n return (attributes || []).map(attribute => {\n const resource = this.dataAggregator.getNextCollectionResource(attribute.resourceIndex);\n return resource && (<Collection>resource).color;\n });\n }\n\n private convertPivotRowColumnAttribute(pivotAttribute: LmrPivotRowColumnAttribute): DataAggregatorAttribute {\n return {...this.convertPivotAttribute(pivotAttribute), data: pivotAttribute.constraint};\n }\n\n private convertPivotAttribute(pivotAttribute: LmrPivotAttribute): DataAggregatorAttribute {\n return {resourceIndex: pivotAttribute.resourceIndex, attributeId: pivotAttribute.attributeId};\n }\n\n private convertValueAttributes(\n configs: LmrPivotStemConfig[],\n stems: QueryStem[],\n stemsIndexes: number[]\n ): LmrPivotStemData {\n const data = configs.reduce(\n (allData, config, index) => {\n const stem = stems[index];\n const stemIndex = stemsIndexes[index];\n\n const stemData = this.data?.dataByStems?.[stemIndex];\n this.dataAggregator.updateData(\n this.collections,\n stemData?.documents || [],\n this.linkTypes,\n stemData?.linkInstances || [],\n stem,\n this.constraintData\n );\n\n const valueAttributes = config.valueAttributes || [];\n allData.valueTypes.push(...valueAttributes.map(attr => attr.valueType));\n const valueColors = this.getAttributesColors(valueAttributes);\n\n const {titles, constraints} = this.createValueTitles(valueAttributes);\n allData.titles.push(...titles);\n allData.constraints.push(...constraints);\n\n const {headers} = this.convertMapToPivotDataHeader({}, 0, [], valueColors, [], titles, allData.headers.length);\n allData.headers.push(...headers);\n\n allData.aggregations = [...(valueAttributes || []).map(valueAttribute => valueAttribute.aggregation)];\n\n const {values, dataResources} = (valueAttributes || []).reduce<{values: any[]; dataResources: DataResource[][]}>(\n (aggregator, valueAttribute, index) => {\n const dataResources = this.findDataResourcesByPivotAttribute(valueAttribute);\n const attribute = this.findAttributeByPivotAttribute(valueAttribute);\n const value = aggregateDataResources(valueAttribute.aggregation, dataResources, attribute, true);\n aggregator.values.push(value);\n aggregator.dataResources.push(dataResources);\n return aggregator;\n },\n {values: [], dataResources: []}\n );\n\n allData.values.push(...values);\n allData.dataResources.push(...dataResources);\n return allData;\n },\n {titles: [], constraints: [], headers: [], values: [], dataResources: [], valueTypes: [], aggregations: []}\n );\n\n return {\n columnHeaders: data.headers,\n columnHeaderAttributes: [],\n rowHeaders: [],\n rowHeaderAttributes: [],\n valueTitles: data.titles,\n values: [data.values],\n dataResources: [data.dataResources],\n valuesConstraints: data.constraints,\n valueTypes: data.valueTypes,\n valueAggregations: data.aggregations,\n\n rowsConfig: [],\n columnsConfig: [],\n\n hasAdditionalColumnLevel: true,\n };\n }\n\n private findDataResourcesByPivotAttribute(pivotAttribute: LmrPivotAttribute): DataResource[] {\n if (pivotAttribute.resourceType === AttributesResourceType.Collection) {\n return (this.data?.uniqueDocuments || []).filter(document => document.collectionId === pivotAttribute.resourceId);\n } else if (pivotAttribute.resourceType === AttributesResourceType.LinkType) {\n return (this.data?.uniqueLinkInstances || []).filter(link => link.linkTypeId === pivotAttribute.resourceId);\n }\n return [];\n }\n\n private convertAggregatedData(\n aggregatedData: AggregatedMapData,\n valueAttributes: LmrPivotValueAttribute[],\n pivotColors: PivotColors,\n additionalData: PivotConfigData\n ): LmrPivotStemData {\n const rowData = this.convertMapToPivotDataHeader(\n aggregatedData.map,\n aggregatedData.rowLevels,\n pivotColors.rows,\n pivotColors.values,\n additionalData.rowAttributes\n );\n const rowHeaderAttributes: LmrPivotHeaderAttribute[] = (additionalData.rowAttributes || [])\n .map((attribute, index) => additionalData.rowShowHeaderAttributes?.[index] ? ({title: attribute.name, color: pivotColors.rows?.[index]}) : undefined)\n\n const {titles: valueTitles, constraints: valuesConstraints} = this.createValueTitles(valueAttributes);\n const columnData = this.convertMapToPivotDataHeader(\n aggregatedData.rowLevels > 0 ? aggregatedData.columnsMap : aggregatedData.map,\n aggregatedData.columnLevels,\n pivotColors.columns,\n pivotColors.values,\n additionalData.columnAttributes,\n valueTitles\n );\n const columnHeaderAttributes: LmrPivotHeaderAttribute[] = (additionalData.columnAttributes || [])\n .map((attribute, index) => additionalData.columnShowHeaderAttributes?.[index] ? ({title: attribute.name, color: pivotColors.columns?.[index]}) : undefined)\n\n const values = this.initMatrix<number>(rowData.maxIndex + 1, columnData.maxIndex + 1);\n const dataResources = this.initMatrix<DataResource[]>(rowData.maxIndex + 1, columnData.maxIndex + 1);\n if ((valueAttributes || []).length > 0) {\n this.fillValues(values, dataResources, rowData.headers, columnData.headers, valueAttributes, aggregatedData);\n }\n\n const valueAggregations = (valueAttributes || []).map(valueAttribute => valueAttribute.aggregation);\n\n const hasAdditionalColumnLevel =\n (aggregatedData.columnLevels === 0 && valueTitles.length > 0) ||\n (aggregatedData.columnLevels > 0 && valueTitles.length > 1);\n return {\n rowHeaders: rowData.headers,\n rowHeaderAttributes,\n columnHeaders: columnData.headers,\n columnHeaderAttributes,\n valueTitles,\n values,\n dataResources,\n valuesConstraints,\n valueAggregations,\n\n ...additionalData,\n\n valueTypes: valueAttributes.map(attr => attr.valueType!),\n hasAdditionalColumnLevel,\n };\n }\n\n private convertMapToPivotDataHeader(\n map: Record<string, any>,\n levels: number,\n colors: string[],\n valueColors: string[],\n attributes: Attribute[],\n valueTitles?: string[],\n additionalNum: number = 0\n ): {headers: LmrPivotDataHeader[]; maxIndex: number} {\n const headers: LmrPivotDataHeader[] = [];\n const data = {maxIndex: 0};\n if (levels === 0) {\n if ((valueTitles || []).length > 0) {\n headers.push(\n ...valueTitles!.map((title, index) => ({\n title,\n targetIndex: index + additionalNum,\n color: valueColors[index],\n isValueHeader: true,\n }))\n );\n data.maxIndex = valueTitles!.length - 1 + additionalNum;\n }\n } else {\n let currentIndex = additionalNum;\n Object.keys(map).forEach((title, index) => {\n const attribute = attributes && attributes[0];\n if (levels === 1 && (valueTitles || []).length <= 1) {\n headers.push({\n title,\n targetIndex: currentIndex,\n color: colors[0],\n constraint: attribute?.constraint || new UnknownConstraint(),\n isValueHeader: false,\n attributeName: attribute?.name,\n });\n data.maxIndex = Math.max(data.maxIndex, currentIndex);\n } else {\n headers.push({\n title,\n color: colors[0],\n constraint: attribute?.constraint || new UnknownConstraint(),\n isValueHeader: false,\n attributeName: attribute?.name,\n });\n }\n\n this.iterateThroughPivotDataHeader(\n map[title],\n headers[index],\n currentIndex,\n 1,\n levels,\n colors,\n valueColors,\n valueTitles || [],\n attributes,\n data\n );\n currentIndex += this.numChildren(map[title], levels - 1, (valueTitles && valueTitles.length) || 1);\n });\n }\n\n return {headers, maxIndex: data.maxIndex};\n }\n\n private iterateThroughPivotDataHeader(\n currentMap: Record<string, any>,\n header: LmrPivotDataHeader,\n headerIndex: number,\n level: number,\n maxLevels: number,\n colors: string[],\n valueColors: string[],\n valueTitles: string[],\n attributes: Attribute[],\n additionalData: {maxIndex: number}\n ) {\n if (level === maxLevels) {\n if ((valueTitles || []).length > 1) {\n header.children = valueTitles.map((title, index) => ({\n title,\n targetIndex: headerIndex + index,\n color: valueColors[index],\n isValueHeader: true,\n }));\n additionalData.maxIndex = Math.max(additionalData.maxIndex, headerIndex + valueTitles.length - 1);\n }\n return;\n }\n\n header.children = [];\n let currentIndex = headerIndex;\n Object.keys(currentMap).forEach((title, index) => {\n const attribute = attributes && attributes[level];\n if (level + 1 === maxLevels && (valueTitles || []).length <= 1) {\n header.children!.push({\n title,\n targetIndex: currentIndex,\n color: colors[level],\n constraint: attribute?.constraint || new UnknownConstraint(),\n isValueHeader: false,\n attributeName: attribute?.name,\n });\n additionalData.maxIndex = Math.max(additionalData.maxIndex, currentIndex);\n } else {\n header.children!.push({\n title,\n color: colors[level],\n constraint: attribute?.constraint || new UnknownConstraint(),\n isValueHeader: false,\n attributeName: attribute?.name,\n });\n }\n\n this.iterateThroughPivotDataHeader(\n currentMap[title],\n header.children?.[index],\n currentIndex,\n level + 1,\n maxLevels,\n colors,\n valueColors,\n valueTitles,\n attributes,\n additionalData\n );\n\n currentIndex += this.numChildren(\n currentMap[title],\n maxLevels - (level + 1),\n (valueTitles && valueTitles.length) || 1\n );\n });\n }\n\n private numChildren(map: Record<string, any>, maxLevels: number, numTitles: number): number {\n if (maxLevels === 0) {\n return numTitles;\n }\n\n const keys = Object.keys(map || {});\n if (maxLevels === 1) {\n return keys.length * numTitles;\n }\n\n const count = keys.reduce((sum, key) => sum + this.numChildrenRecursive(map[key], 1, maxLevels), 0);\n return count * numTitles;\n }\n\n private numChildrenRecursive(map: Record<string, any>, level: number, maxLevels: number): number {\n if (level >= maxLevels) {\n return 0;\n }\n\n const keys = Object.keys(map || {});\n if (level + 1 === maxLevels) {\n return keys.length;\n }\n\n return keys.reduce((sum, key) => sum + this.numChildrenRecursive(map[key], level + 1, maxLevels), 0);\n }\n\n private createValueTitles(valueAttributes: LmrPivotValueAttribute[]): {titles: string[]; constraints: Constraint[]} {\n return (valueAttributes || []).reduce<{titles: string[]; constraints: Constraint[]}>(\n ({titles, constraints}, pivotAttribute) => {\n const attribute = this.findAttributeByPivotAttribute(pivotAttribute);\n constraints.push(\n dataAggregationConstraint(pivotAttribute.aggregation) || this.pivotAttributeConstraint(pivotAttribute)\n );\n\n const title = this.createValueTitle(pivotAttribute.aggregation, attribute?.name || '');\n titles.push(title);\n\n return {titles, constraints};\n },\n {titles: [], constraints: []}\n );\n }\n\n public createValueTitle(aggregation: DataAggregationType, attributeName: string): string {\n const valueAggregationTitle = this.transform?.formatAggregation?.(aggregation) || aggregation.toString();\n return `${valueAggregationTitle} ${attributeName || ''}`.trim();\n }\n\n private initMatrix<T>(rows: number, columns: number): T[][] {\n const matrix: T[][] = [];\n for (let i = 0; i < rows; i++) {\n matrix[i] = [];\n for (let j = 0; j < columns; j++) {\n matrix[i][j] = undefined;\n }\n }\n\n return matrix;\n }\n\n private fillValues(\n values: number[][],\n dataResources: DataResource[][][],\n rowHeaders: LmrPivotDataHeader[],\n columnHeaders: LmrPivotDataHeader[],\n valueAttributes: LmrPivotValueAttribute[],\n aggregatedData: AggregatedMapData\n ) {\n if (rowHeaders.length > 0) {\n this.iterateThroughRowHeaders(\n values,\n dataResources,\n rowHeaders,\n columnHeaders,\n valueAttributes,\n aggregatedData.map\n );\n } else {\n this.iterateThroughColumnHeaders(values, dataResources, columnHeaders, 0, valueAttributes, aggregatedData.map);\n }\n }\n\n private iterateThroughRowHeaders(\n values: number[][],\n dataResources: DataResource[][][],\n rowHeaders: LmrPivotDataHeader[],\n columnHeaders: LmrPivotDataHeader[],\n valueAttributes: LmrPivotValueAttribute[],\n currentMap: AggregatedDataMap\n ) {\n for (const rowHeader of rowHeaders) {\n const rowHeaderMap = currentMap[rowHeader.title] || {};\n\n if (rowHeader.children) {\n this.iterateThroughRowHeaders(\n values,\n dataResources,\n rowHeader.children,\n columnHeaders,\n valueAttributes,\n rowHeaderMap\n );\n } else if (isNotNullOrUndefined(rowHeader.targetIndex) && columnHeaders.length > 0) {\n this.iterateThroughColumnHeaders(\n values,\n dataResources,\n columnHeaders,\n rowHeader.targetIndex!,\n valueAttributes,\n rowHeaderMap\n );\n }\n }\n }\n\n private iterateThroughColumnHeaders(\n values: number[][],\n dataResources: DataResource[][][],\n columnHeaders: LmrPivotDataHeader[],\n rowIndex: number,\n valueAttributes: LmrPivotValueAttribute[],\n currentMap: AggregatedDataMap | AggregatedDataValues[]\n ) {\n for (const columnHeader of columnHeaders) {\n if (columnHeader.children) {\n this.iterateThroughColumnHeaders(\n values,\n dataResources,\n columnHeader.children,\n rowIndex,\n valueAttributes,\n currentMap[columnHeader.title] || {}\n );\n } else if (isNotNullOrUndefined(columnHeader.targetIndex)) {\n const aggregatedDataValues = isArray(currentMap) ? currentMap : currentMap[columnHeader.title];\n\n if (valueAttributes.length) {\n const valueIndex = columnHeader.targetIndex! % valueAttributes.length;\n const {value, dataResources: aggregatedDataResources} = this.aggregateValue(\n valueAttributes[valueIndex],\n aggregatedDataValues\n );\n values[rowIndex][columnHeader.targetIndex!] = value;\n dataResources[rowIndex][columnHeader.targetIndex!] = aggregatedDataResources || [];\n }\n }\n }\n }\n\n private aggregateValue(\n valueAttribute: LmrPivotValueAttribute,\n aggregatedDataValues: AggregatedDataValues[]\n ): {value?: any; dataResources?: DataResource[]} {\n const resourceAggregatedDataValues = (aggregatedDataValues || []).filter(\n agg => agg.resourceId === valueAttribute.resourceId && agg.type === valueAttribute.resourceType\n );\n if (resourceAggregatedDataValues.length) {\n const dataResources = flattenMatrix(resourceAggregatedDataValues.map(val => val.objects));\n const attribute = this.pivotAttributeAttribute(valueAttribute);\n if (valueAttribute.aggregation === DataAggregationType.Join) {\n // values will be joined in pivot-table-converter\n const values = (dataResources || []).map((resource: DataResource) => resource.data?.[attribute?.id || '']);\n return {value: uniqueValues(flattenValues(values)), dataResources};\n }\n\n const value = attribute && aggregateDataResources(valueAttribute.aggregation, dataResources, attribute, true);\n return {value, dataResources};\n }\n\n return {};\n }\n\n private findAttributeByPivotAttribute(valueAttribute: LmrPivotAttribute): Attribute | undefined {\n if (valueAttribute.resourceType === AttributesResourceType.Collection) {\n return this.collectionsAttributesMap?.[valueAttribute.resourceId]?.[valueAttribute.attributeId];\n } else if (valueAttribute.resourceType === AttributesResourceType.LinkType) {\n return this.linkTypesAttributesMap?.[valueAttribute.resourceId]?.[valueAttribute.attributeId];\n }\n return undefined\n }\n}\n\nfunction getPivotStemConfigType(stemConfig: LmrPivotStemConfig): PivotConfigType {\n const rowLength = (stemConfig.rowAttributes || []).length;\n const columnLength = (stemConfig.columnAttributes || []).length;\n\n if (rowLength > 0 && columnLength > 0) {\n return PivotConfigType.RowsAndColumns;\n } else if (rowLength > 0) {\n return PivotConfigType.Rows;\n } else if (columnLength > 0) {\n return PivotConfigType.Columns;\n }\n return PivotConfigType.Values;\n}\n\nfunction canMergeConfigsByType(type: PivotConfigType, c1: LmrPivotStemConfig, c2: LmrPivotStemConfig): boolean {\n if (type === PivotConfigType.Rows) {\n return (c1.rowAttributes || []).length === (c2.rowAttributes || []).length;\n } else if (type === PivotConfigType.Columns) {\n return (c1.columnAttributes || []).length === (c2.columnAttributes || []).length;\n }\n return (\n (c1.rowAttributes || []).length === (c2.rowAttributes || []).length &&\n (c1.columnAttributes || []).length === (c2.columnAttributes || []).length\n );\n}\n","/*\n * Lumeer: Modern Data Definition and Processing Platform\n *\n * Copyright (C) since 2017 Lumeer.io, s.r.o. and/or its affiliates.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport {aggregateDataValues, Constraint, ConstraintData, DataAggregationType, DataResource, isValueAggregation, NumberConstraint, PercentageConstraint, UnknownConstraint,} from '@lumeer/data-filters';\nimport {deepObjectCopy, isArray, isNotNullOrUndefined, isNullOrUndefined, isNumeric, shadeColor, toNumber, uniqueValues,} from '@lumeer/utils';\n\nimport {LmrPivotData, LmrPivotDataHeader, LmrPivotDataHeaderExpression, LmrPivotDataHeaderOperand, LmrPivotDimensionConfig, LmrPivotStemData} from './lmr-pivot-data';\nimport {LmrPivotTable, LmrPivotTableCell} from './lmr-pivot-table';\nimport {LmrPivotExpression, LmrPivotHeaderOperand, LmrPivotOperand, LmrPivotSort, LmrPivotTransform, LmrPivotValueType} from './lmr-pivot-config';\nimport {COLOR_GRAY100, COLOR_GRAY200, COLOR_GRAY300, COLOR_GRAY400, COLOR_GRAY500} from './lmr-pivot-constants';\n\ninterface HeaderGroupInfo {\n background: string;\n indexes: number[];\n level: number;\n}\n\ninterface ValueTypeInfo {\n sum?: number;\n sumsRows?: number[];\n sumsColumns?: number[];\n defaultConstraint?: Constraint;\n}\n\nexport class PivotTableConverter {\n public static readonly emptyClass = 'pivot-empty-cell';\n public static readonly dataClass = 'pivot-data-cell';\n public static readonly groupDataClass = 'pivot-data-group-cell';\n public static readonly rowHeaderClass = 'pivot-row-header-cell';\n public static readonly rowGroupHeaderClass = 'pivot-row-group-header-cell';\n public static readonly rowAttributeHeaderClass = 'pivot-row-attribute-header-cell';\n public static readonly columnHeaderClass = 'pivot-column-header-cell';\n public static readonly columnGroupHeaderClass = 'pivot-column-group-header-cell';\n\n private readonly groupColors = [COLOR_GRAY100, COLOR_GRAY200, COLOR_GRAY300, COLOR_GRAY400, COLOR_GRAY500];\n\n private readonly percentageConstraint = new PercentageConstraint({decimals: 2});\n\n private data: LmrPivotStemData;\n private transform: LmrPivotTransform;\n private values: any[][];\n private dataResources: DataResource[][][];\n private constraintData: ConstraintData;\n private rowLevels: number;\n private rowsTransformationArray: number[];\n private columnLevels: number;\n private columnsTransformationArray: number[];\n private valueTypeInfo: ValueTypeInfo[];\n private nonStickyRowIndex: number;\n private nonStickyColumnIndex: number;\n\n public createTables(pivotData: LmrPivotData, transform: LmrPivotTransform): LmrPivotTable[] {\n if (!pivotData) {\n return [{cells: []}];\n }\n\n this.transform = transform;\n this.constraintData = pivotData.constraintData;\n\n return (pivotData.data || []).map(d => {\n if (this.dataAreEmpty(d)) {\n return {cells: []};\n }\n this.updateData(d);\n return this.transformData();\n });\n }\n\n private dataAreEmpty(data: LmrPivotStemData): boolean {\n return (data.rowHeaders || []).length === 0 && (data.columnHeaders || []).length === 0;\n }\n\n private updateData(data: LmrPivotStemData) {\n const numberOfSums = Math.max(1, (data.valueTitles || []).length);\n this.valueTypeInfo = getValuesTypeInfo(data.values, data.valueTypes, numberOfSums);\n this.data = preparePivotData(data, this.constraintData, this.valueTypeInfo);\n this.values = data.values || [];\n this.dataResources = data.dataResources || [];\n this.rowLevels = (data.rowsConfig || []).length;\n this.columnLevels = (data.columnsConfig || []).length + (data.hasAdditionalColumnLevel ? 1 : 0);\n const rowAllSticky = this.data.rowsConfig?.length && this.data.rowsConfig.every(config => !!config?.sticky)\n this.nonStickyRowIndex = Math.max(rowAllSticky ? this.rowLevels : (this.data.rowsConfig?.findIndex(config => !config?.sticky) || 0), 0);\n const columnAllSticky = this.data.columnsConfig?.length && this.data.columnsConfig.every(config => !!config?.sticky)\n this.nonStickyColumnIndex = Math.max(columnAllSticky ? this.columnLevels : (this.data.columnsConfig?.findIndex(config => !config?.sticky) || 0), 0);\n const hasValue = (data.valueTitles || []).length > 0;\n if ((this.data.rowHeaders || []).length > 0) {\n this.rowsTransformationArray = createTransformationMap(\n this.data.rowHeaders,\n this.rowShowSums,\n this.columnLevels,\n 1\n );\n } else {\n this.rowsTransformationArray = hasValue ? [this.columnLevels] : [];\n }\n\n if ((this.data.columnHeaders || []).length > 0) {\n this.columnsTransformationArray = createTransformationMap(\n this.data.columnHeaders,\n this.columnShowSums,\n this.rowLevels,\n numberOfSums\n );\n } else {\n this.columnsTransformationArray = hasValue ? [this.rowLevels] : [];\n }\n }\n\n private get rowShowSums(): boolean[] {\n return (this.data.rowsConfig || []).map(config => config.showSums);\n }\n\n private get columnShowSums(): boolean[] {\n return (this.data.columnsConfig || []).map(config => config.showSums);\n }\n\n private transformData(): LmrPivotTable {\n const cells = this.initCells();\n const rowGroups = this.fillCellsByRows(cells);\n const columnGroups = this.fillCellsByColumns(cells);\n this.fillCellsByGroupIntersection(cells, rowGroups, columnGroups);\n return {cells};\n }\n\n private fillCellsByRows(cells: LmrPivotTableCell[][]): HeaderGroupInfo[] {\n const rowGroups = [];\n this.iterateAndFillCellsByRows(cells, rowGroups, this.data.rowHeaders, this.columnLevels, this.rowShowSums, 0);\n return rowGroups;\n }\n\n private iterateAndFillCellsByRows(\n cells: LmrPivotTableCell[][],\n rowGroupsInfo: HeaderGroupInfo[],\n headers: LmrPivotDataHeader[],\n startIndex: number,\n showSums: boolean[],\n level: number,\n parentHeader?: LmrPivotDataHeader\n ) {\n let currentIndex = startIndex;\n for (const header of headers) {\n const rowSpan = getDirectHeaderChildCount(header, level, showSums);\n cells[currentIndex][level] = {\n value: this.formatRowHeader(header.title, level),\n cssClass: PivotTableConverter.rowHeaderClass,\n isHeader: true,\n stickyStart: this.isRowLevelSticky(level),\n rowSpan,\n colSpan: 1,\n background: this.getHeaderBackground(header, level),\n constraint: header.constraint,\n label: header.attributeName,\n };\n\n if (header.children) {\n this.iterateAndFillCellsByRows(\n cells,\n rowGroupsInfo,\n header.children,\n currentIndex,\n showSums,\n level + 1,\n header\n );\n } else if (isNotNullOrUndefined(header.targetIndex)) {\n this.fillCellsForRow(cells, header.targetIndex);\n }\n\n currentIndex += getHeaderChildCount(header, level, showSums);\n\n const expressions = header.expressions || []\n for (let i = 0; i < expressions.length; i++) {\n const expressionIndex = currentIndex - (expressions.length - i)\n const background = this.getSummaryBackground(level);\n this.splitRowGroupHeader(cells, level, expressionIndex, background, expressions[i].title)\n this.fillCellsForExpressionRow(cells, expressions[i], expressionIndex, background)\n }\n }\n\n if (showSums[level]) {\n const { title, summary } = this.formatSummaryHeader(parentHeader, level)\n const background = this.getSummaryBackground(level);\n const columnIndex = Math.max(level - 1, 0);\n this.splitRowGroupHeader(cells, columnIndex, currentIndex, background, summary, title, parentHeader?.constraint, parentHeader?.attributeName)\n\n const rowIndexes = getTargetIndexesForHeaders(headers);\n const transformedRowIndexes = rowIndexes\n .map(v => this.rowsTransformationArray[v])\n .filter(v => isNotNullOrUndefined(v));\n\n rowGroupsInfo[currentIndex] = {background, indexes: transformedRowIndexes, level};\n\n this.fillCellsForGroupedRow(cells, rowIndexes, currentIndex, background);\n }\n }\n\n private splitRowGroupHeader(cells: LmrPivotTableCell[][], columnIndex: number, currentIndex: number, background: string, summary: string, title?: string, constraint?: Constraint, label?: string) {\n let colSpan = this.rowLevels - columnIndex;\n const stickyStart = this.isRowLevelSticky(columnIndex);\n\n // split row group header cell because of correct sticky scroll\n if (stickyStart && this.nonStickyRowIndex > 0 && this.nonStickyRowIndex < this.rowLevels && colSpan > 1) {\n const newColspan = this.nonStickyRowIndex - columnIndex;\n\n cells[currentIndex][this.nonStickyRowIndex] = {\n value: undefined,\n constraint: undefined,\n label: undefined,\n cssClass: PivotTableConverter.rowGroupHeaderClass,\n isHeader: true,\n rowSpan: 1,\n colSpan: colSpan - newColspan,\n background,\n summary: undefined,\n };\n\n colSpan = newColspan;\n }\n\n cells[currentIndex][columnIndex] = {\n value: title,\n constraint,\n label,\n cssClass: PivotTableConverter.rowGroupHeaderClass,\n isHeader: true,\n stickyStart,\n rowSpan: 1,\n colSpan,\n background,\n summary,\n };\n }\n\n private formatSummaryHeader(header: LmrPivotDataHeader, level: number): {title?: string; summary: string} {\n return this.transform.formatSummaryHeader?.(header, level) || {\n title: header?.title,\n summary: '',\n }\n }\n\n private formatRowHeader(title: string, level: number): string {\n return this.transform?.formatRowHeader?.(title, level) || title\n }\n\n private formatColumnHeader(title: string, level: number): string {\n return this.transform?.formatColumnHeader?.(title, level) || title\n }\n\n private getHeaderBackground(header: { color: string }, level: number): string {\n if (header?.color) {\n return shadeColor(header.color, this.getLevelOpacity(level));\n }\n\n return undefined;\n }\n\n private getLevelOpacity(level: number): number {\n return Math.min(80, 50 + level * 5) / 100;\n }\n\n private isRowLevelSticky(level: number): boolean {\n return this.data?.rowsConfig?.[level]?.sticky;\n }\n\n private isColumnLevelSticky(level: number): boolean {\n const maxLevel = Math.min(level, (this.data?.columnsConfig?.length ?? Number.MAX_SAFE_INTEGER) - 1);\n return this.data?.columnsConfig?.[maxLevel]?.sticky;\n }\n\n private getSummaryBackground(level: number): string {\n const index = Math.min(level, this.groupColors.length - 1);\n return this.groupColors[index];\n }\n\n private fillCellsForRow(cells: LmrPivotTableCell[][], row: number) {\n const rowIndexInCells = this.rowsTransformationArray[row];\n if (isNotNullOrUndefined(rowIndexInCells)) {\n for (let column = 0; column < this.columnsTransformationArray.length; column++) {\n const columnIndexInCells = this.columnsTransformationArray[column];\n if (isNotNullOrUndefined(columnIndexInCells)) {\n const value = this.data.values[row][column];\n const dataResources = this.dataResources?.[row]?.[column] || [];\n const formattedValue = this.aggregateOrFormatSingleValue(value, column);\n const stringValue = isNotNullOrUndefined(formattedValue) ? String(formattedValue) : '';\n cells[rowIndexInCells][columnIndexInCells] = {\n value: stringValue,\n dataResources,\n rowSpan: 1,\n colSpan: 1,\n cssClass: PivotTableConverter.dataClass,\n isHeader: false,\n };\n }\n }\n }\n }\n\n private getValueIndexForColumns(columns: number[]): number {\n return columns[0] % this.data.valueTitles.length;\n }\n\n private formatValueByValueType(value: any, valueIndex: number): any {\n const valueType = (this.data.valueTypes || [])[valueIndex];\n if (!valueType || valueType === LmrPivotValueType.Default) {\n return this.formatValueByConstraint(value, valueIndex);\n }\n\n if (\n [LmrPivotValueType.AllPercentage, LmrPivotValueType.ColumnPercentage, LmrPivotValueType.RowPercentage].includes(valueType)\n ) {\n return this.formatValueByPercentage(value);\n }\n\n return this.formatValueByConstraint(value, valueIndex);\n }\n\n private formatGroupedValueByValueType(value: any, rows: number[], columns: number[]): any {\n const valueIndex = columns[0] % this.data.valueTitles.length;\n const valueType = this.data.valueTypes && this.data.valueTypes[valueIndex];\n const valueTypeInfo = this.valueTypeInfo[valueIndex];\n if (!valueTypeInfo || !valueType || valueType === LmrPivotValueType.Default) {\n return this.formatValueByConstraint(value, valueIndex);\n }\n\n if (valueType === LmrPivotValueType.AllPercentage) {\n return this.formatValueByPercentage(divideValues(value, valueTypeInfo.sum));\n } else if (valueType === LmrPivotValueType.ColumnPercentage) {\n const columnsDividers = columns.reduce((dividers, column) => {\n dividers.push(valueTypeInfo.sumsColumns[column]);\n return dividers;\n }, []);\n const columnsDivider = aggregateDataValues(DataAggregationType.Sum, columnsDividers);\n return this.formatValueByPercentage(divideValues(value, columnsDivider));\n } else if (valueType === LmrPivotValueType.RowPercentage) {\n const rowsDividers = rows.reduce((dividers, row) => {\n dividers.push(valueTypeInfo.sumsRows[row]);\n return dividers;\n }, []);\n const rowsDivider = aggregateDataValues(DataAggregationType.Sum, rowsDividers);\n return this.formatValueByPercentage(divideValues(value, rowsDivider));\n }\n\n return this.formatValueByConstraint(value, valueIndex);\n }\n\n private formatValueByPercentage(value: any): string {\n return this.percentageConstraint.createDataValue(value).format();\n }\n\n private formatValueByConstraint(value: any, valueIndex: number): any {\n const constraint = this.data.valuesConstraints?.[valueIndex] || this.valueTypeInfo[valueIndex]?.defaultConstraint;\n if (constraint) {\n return constraint.createDataValue(value, this.constraintData).preview();\n }\n return value;\n }\n\n private fillCellsForGroupedRow(\n cells: LmrPivotTableCell[][],\n rows: number[],\n rowIndexInCells: number,\n background: string\n ) {\n for (let column = 0; column < this.columnsTransformationArray.length; column++) {\n const columnIndexInCells = this.columnsTransformationArray[column];\n if (isNotNullOrUndefined(columnIndexInCells)) {\n const {values, dataResources} = this.getGroupedValuesForRowsAndCols(rows, [column]);\n const formattedValue = this.aggregateAndFormatDataValues(values, rows, [column]);\n cells[rowIndexInCells][columnIndexInCells] = {\n value: String(formattedValue),\n dataResources,\n colSpan: 1,\n rowSpan: 1,\n cssClass: PivotTableConverter.groupDataClass,\n isHeader: false,\n background,\n };\n }\n }\n }\n\n private fillCellsForExpressionRow(\n cells: LmrPivotTableCell[][],\n expression: LmrPivotDataHeaderExpression,\n rowIndexInCells: number,\n background: string\n ) {\n for (let column = 0; column < this.columnsTransformationArray.length; column++) {\n const columnIndexInCells = this.columnsTransformationArray[column];\n if (isNotNullOrUndefined(columnIndexInCells)) {\n const {value, dataResources} = this.evaluateExpression(expression, column);\n const valueIndex = column % this.data.valueTitles.length;\n const formattedValue = this.formatValueByConstraint(value, valueIndex);\n cells[rowIndexInCells][columnIndexInCells] = {\n value: String(formattedValue),\n dataResources,\n colSpan: 1,\n rowSpan: 1,\n cssClass: PivotTableConverter.groupDataClass,\n isHeader: false,\n background,\n };\n }\n }\n }\n\n private evaluateExpression(expression: LmrPivotDataHeaderExpression, column: number): {value: number; dataResources: DataResource[] } {\n return (expression.operands || []).reduce((result, operand, index) => {\n const {value, dataResources } = this.evaluateOperand(operand, column)\n result.dataResources.push(...dataResources)\n switch (expression.operation) {\n case \"add\":\n result.value += value\n break;\n case \"subtract\":\n result.value = (index === 0 ? value : result.value - value)\n break;\n case 'multiply':\n result.value = index === 0 ? value : result.value * value\n break;\n case 'divide':\n result.value = index === 0 ? value : value ? result.value / value : result.value\n break;\n }\n\n return result\n } , {value: 0, dataResources: []})\n }\n\n private evaluateOperand(operand: LmrPivotDataHeaderOperand, column: number): {value: number; dataResources: DataResource[] } {\n switch (operand.type) {\n case \"expression\": return this.evaluateExpression(operand, column)\n case \"value\": return {value: operand.value, dataResources: []}\n case \"header\": {\n const rows = getTargetIndexesForHeaders(operand.headers);\n const {values, dataResources} = this.getGroupedValuesForRowsAndCols(rows, [column]);\n const {value} = this.aggregateDataValues(values, [column]);\n return {value, dataResources}\n }\n }\n }\n\n private getGroupedValuesForRowsAndCols(\n rows: number[],\n columns: number[]\n ): { values: any[]; dataResources: DataResource[] } {\n const values = [];\n const dataResources = [];\n for (const row of rows) {\n for (const column of columns) {\n const rowColumnValue = this.values[row][column];\n if (isArray(rowColumnValue)) {\n values.push(...rowColumnValue);\n } else {\n values.push(rowColumnValue);\n }\n dataResources.push(...(this.dataResources?.[row]?.[column] || []));\n }\n }\n return {values, dataResources};\n }\n\n private fillCellsByColumns(cells: LmrPivotTableCell[][]): HeaderGroupInfo[] {\n const columnGroups = [];\n this.iterateAndFillCellsByColumns(\n cells,\n columnGroups,\n this.data.columnHeaders,\n this.rowLevels,\n this.columnShowSums,\n 0\n );\n return columnGroups;\n }\n\n private iterateAndFillCellsByColumns(\n cells: LmrPivotTableCell[][],\n columnGroupsInfo: HeaderGroupInfo[],\n headers: LmrPivotDataHeader[],\n startIndex: number,\n showSums: boolean[],\n level: number,\n parentHeader?: LmrPivotDataHeader\n ) {\n let currentIndex = startIndex;\n const numberOfSums = Math.max(1, this.data.valueTitles.length);\n for (const header of headers) {\n const colSpan = getDirectHeaderChildCount(header, level, showSums, numberOfSums);\n cells[level][currentIndex] = {\n value: this.formatColumnHeader(header.title, level),\n cssClass: PivotTableConverter.columnHeaderClass,\n isHeader: true,\n rowSpan: 1,\n colSpan,\n stickyTop: this.isColumnLevelSticky(level),\n background: this.getHeaderBackground(header, level),\n constraint: header.constraint,\n label: header.attributeName,\n };\n\n if (header.children) {\n this.iterateAndFillCellsByColumns(\n cells,\n columnGroupsInfo,\n header.children,\n currentIndex,\n showSums,\n level + 1,\n header\n );\n } else if (isNotNullOrUndefined(header.targetIndex)) {\n this.fillCellsForColumn(cells, header.targetIndex);\n }\n\n currentIndex += getHeaderChildCount(header, level, showSums, numberOfSums);\n }\n\n if (showSums[level]) {\n const background = this.getSummaryBackground(level);\n const { title, summary } = this.formatSummaryHeader(parentHeader, level)\n const numberOfValues = this.data.valueTitles.length;\n const rowIndex = Math.max(level - 1, 0);\n const shouldAddValueHeaders = numberOfValues > 1;\n\n cells[rowIndex][currentIndex] = {\n value: title,\n constraint: parentHeader?.constraint,\n label: parentHeader?.attributeName,\n cssClass: PivotTableConverter.columnGroupHeaderClass,\n isHeader: true,\n stickyTop: this.isColumnLevelSticky(level),\n rowSpan: this.columnLevels - rowIndex - (shouldAddValueHeaders ? 1 : 0),\n colSpan: numberOfSums,\n background,\n summary,\n };\n\n if (numberOfValues > 0) {\n for (let i = 0; i < numberOfValues; i++) {\n const columnIndexInCells = currentIndex + i;\n if (shouldAddValueHeaders) {\n const valueTitle = this.data.valueTitles[i];\n cells[this.columnLevels - 1][columnIndexInCells] = {\n value: valueTitle,\n cssClass: PivotTableConverter.columnGroupHeaderClass,\n isHeader: true,\n stickyTop: this.isColumnLevelSticky(level),\n rowSpan: 1,\n colSpan: 1,\n background,\n };\n }\n\n const columnsIndexes = getTargetIndexesForHeaders(headers);\n const valueColumnsIndexes = columnsIndexes.filter(index => index % numberOfValues === i);\n const transformedColumnIndexes = valueColumnsIndexes\n .map(v => this.columnsTransformationArray[v])\n .filter(v => isNotNullOrUndefined(v));\n columnGroupsInfo[columnIndexInCells] = {background, indexes: transformedColumnIndexes, level};\n\n this.fillCellsForGroupedColumn(cells, valueColumnsIndexes, columnIndexInCells, background);\n }\n } else {\n columnGroupsInfo[currentIndex] = {background, indexes: [], level};\n }\n }\n }\n\n private fillCellsForGroupedColumn(\n cells: LmrPivotTableCell[][],\n columns: number[],\n columnIndexInCells: number,\n background: string\n ) {\n for (let row = 0; row < this.rowsTransformationArray.length; row++) {\n const rowIndexInCells = this.rowsTransformationArray[row];\n if (isNotNullOrUndefined(rowIndexInCells)) {\n const {values, dataResources} = this.getGroupedValuesForRowsAndCols([row], columns);\n const formattedValue = this.aggregateAndFormatDataValues(values, [row], columns);\n cells[rowIndexInCells][columnIndexInCells] = {\n value: String(formattedValue),\n dataResources,\n colSpan: 1,\n rowSpan: 1,\n cssClass: PivotTableConverter.groupDataClass,\n isHeader: false,\n background,\n };\n }\n }\n }\n\n private aggregateAndFormatDataValues(values: any[], rows: number[], columns: number[]): any {\n const {value, aggregation} = this.aggregateDataValues(values, columns);\n return aggregation === DataAggregationType.Join ? value : this.formatGroupedValueByValueType(value, rows, columns)\n }\n\n private aggregateDataValues(values: any[], columns: number[]): {value: any; aggregation: DataAggregationType} {\n const aggregation = this.aggregationByColumns(columns);\n if (aggregation === DataAggregationType.Join) {\n const valueIndex = this.getValueIndexForColumns(columns);\n const constraint = this.data.valuesConstraints?.[valueIndex] || this.valueTypeInfo[valueIndex]?.defaultConstraint;\n return {value: aggregateDataValues(aggregation, values, constraint, false, this.constraintData), aggregation};\n }\n return {value: aggregateDataValues(aggregation, values), aggregation};\n }\n\n private aggregationByColumns(columns: number[]): DataAggregationType {\n const valueIndex = columns[0] % this.data.valueTitles.length;\n const aggregation = this.data.valueAggregations?.[valueIndex];\n return isValueAggregation(aggregation) ? aggregation : DataAggregationType.Sum;\n }\n\n private fillCellsForColumn(cells: LmrPivotTableCell[][], column: number) {\n const columnIndexInCells = this.columnsTransformationArray[column];\n if (isNotNullOrUndefined(columnIndexInCells)) {\n for (let row = 0; row < this.rowsTransformationArray.length; row++) {\n const rowIndexInCells = this.rowsTransformationArray[row];\n if (isNotNullOrUndefined(rowIndexInCells)) {\n const value = this.data.values[row][column];\n const dataResources = this.dataResources?.[row]?.[column] || [];\n const formattedValue = this.aggregateOrFormatSingleValue(value, column);\n const stringValue = isNotNullOrUndefined(formattedValue) ? String(formattedValue) : '';\n cells[rowIndexInCells][columnIndexInCells] = {\n value: stringValue,\n dataResources,\n rowSpan: 1,\n colSpan: 1,\n cssClass: PivotTableConverter.dataClass,\n isHeader: false,\n };\n }\n }\n }\n }\n\n private aggregateOrFormatSingleValue(value: any, column: number): any {\n const aggregation = this.aggregationByColumns([column]);\n const valueIndex = this.getValueIndexForColumns([column]);\n if (aggregation === DataAggregationType.Join) {\n const constraint = this.data.valuesConstraints?.[valueIndex] || this.valueTypeInfo[valueIndex]?.defaultConstraint;\n return aggregateDataValues(aggregation, [value], constraint, false, this.constraintData);\n }\n return this.formatValueByValueType(value, valueIndex);\n }\n\n private fillCellsByGroupIntersection(\n cells: LmrPivotTableCell[][],\n rowGroupsInfo: HeaderGroupInfo[],\n columnGroupsInfo: HeaderGroupInfo[]\n ) {\n const rowsCount = cells.length;\n const columnsCount = (cells[0] && cells[0].length) || 0;\n\n for (let i = 0; i < rowGroupsInfo.length; i++) {\n const rowGroupInfo = rowGroupsInfo[i];\n if (rowGroupInfo) {\n for (let j = 0; j < columnGroupsInfo.length; j++) {\n if (columnGroupsInfo[j]) {\n // it's enough to fill group values only from row side\n const {rowsIndexes, columnsIndexes} = this.getValuesIndexesFromCellsIndexes(\n rowGroupInfo.indexes,\n columnGroupsInfo[j].indexes\n );\n const {values, dataResources} = this.getGroupedValuesForRowsAndCols(rowsIndexes, columnsIndexes);\n const formattedValue = this.aggregateAndFormatDataValues(values, rowsIndexes, columnsIndexes);\n cells[i][j] = {\n value: String(formattedValue),\n dataResources,\n colSpan: 1,\n rowSpan: 1,\n cssClass: PivotTableConverter.groupDataClass,\n isHeader: false,\n };\n }\n }\n\n this.fillRowWithColor(cells, i, rowGroupInfo, columnsCount);\n }\n }\n\n for (let j = 0; j < columnGroupsInfo.length; j++) {\n if (columnGroupsInfo[j]) {\n this.fillColumnWithColor(cells, j, columnGroupsInfo[j], rowGroupsInfo, rowsCount);\n }\n }\n }\n\n private getValuesIndexesFromCellsIndexes(\n rows: number[],\n columns: number[]\n ): { rowsIndexes: number[]; columnsIndexes: number[] } {\n const rowsIndexes = rows\n .map(row => this.rowsTransformationArray.findIndex(tRow => tRow === row))\n .filter(index => index >= 0);\n const columnsIndexes = columns\n .map(column => this.columnsTransformationArray.findIndex(tColumn => tColumn === column))\n .filter(index => index >= 0);\n return {rowsIndexes, columnsIndexes};\n }\n\n private fillRowWithColor(\n cells: LmrPivotTableCell[][],\n row: number,\n rowGroupInfo: HeaderGroupInfo,\n columnsCount: number\n ) {\n for (let i = this.rowLevels; i < columnsCount; i++) {\n cells[row][i] && (cells[row][i].background = rowGroupInfo.background);\n }\n }\n\n private fillColumnWithColor(\n cells: LmrPivotTableCell[][],\n column: number,\n columnGroupInfo: HeaderGroupInfo,\n rowGroupsInfo: HeaderGroupInfo[],\n rowCount: number\n ) {\n for (let i = this.columnLevels; i < rowCount; i++) {\n const rowGroupInfo = rowGroupsInfo[i];\n if (!rowGroupInfo || rowGroupInfo.level > columnGroupInfo.level) {\n cells[i][column] && (cells[i][column].background = columnGroupInfo.background);\n }\n }\n }\n\n private initCells(): LmrPivotTableCell[][] {\n const rows = this.getRowsCount() + this.columnLevels;\n const columns = this.getColumnsCount() + this.rowLevels;\n\n const matrix: LmrPivotTableCell[][] = [];\n for (let i = 0; i < rows; i++) {\n matrix[i] = [];\n for (let j = 0; j < columns; j++) {\n if (i >= this.columnLevels && j >= this.rowLevels) {\n const isDataClass = this.rowsTransformationArray.includes(i) && this.columnsTransformationArray.includes(j);\n matrix[i][j] = {\n value: '',\n dataResources: [],\n cssClass: isDataClass ? PivotTableConverter.dataClass : PivotTableConverter.groupDataClass,\n rowSpan: 1,\n colSpan: 1,\n isHeader: false,\n };\n } else {\n matrix[i][j] = undefined;\n }\n }\n }\n\n if (this.rowLevels > 0 && this.columnLevels > 0) {\n for (let j = 0; j < this.rowLevels; j++) {\n const rowHeaderAttribute = this.data.rowHeaderAttributes[j];\n if (rowHeaderAttribute) {\n const titleColSpan = this.nonStickyColumnIndex || this.columnLevels\n matrix[0][j] = {\n value: rowHeaderAttribute.title,\n cssClass: PivotTableConverter.rowAttributeHeaderClass,\n isHeader: true,\n rowSpan: 1,\n colSpan: titleColSpan,\n stickyTop: this.isColumnLevelSticky(0),\n stickyStart: this.isRowLevelSticky(j),\n background: rowHeaderAttribute.color,\n };\n\n if (this.columnLevels - titleColSpan > 0) {\n matrix[this.nonStickyColumnIndex][j] = {\n value: '',\n cssClass: PivotTableConverter.rowAttributeHeaderClass,\n isHeader: true,\n rowSpan: 1,\n colSpan: this.columnLevels - titleColSpan,\n background: rowHeaderAttribute.color,\n stickyStart: this.isRowLevelSticky(j),\n };\n }\n\n } else {\n for (let i = 0; i < this.columnLevels; i++) {\n matrix[i][j] = {\n value: '',\n cssClass: PivotTableConverter.emptyClass,\n rowSpan: 1,\n colSpan: 1,\n stickyStart: this.isRowLevelSticky(j),\n stickyTop: this.isColumnLevelSticky(i),\n isHeader: false,\n }\n }\n }\n }\n }\n\n return matrix;\n }\n\n private getRowsCount(): number {\n if (this.data.rowHeaders.length === 0 && (this.data.valueTitles || []).length > 0) {\n return 1;\n }\n return getHeadersChildCount(this.data.rowHeaders, this.rowShowSums);\n }\n\n private getColumnsCount(): number {\n if (this.data.columnHeaders.length === 0 && (this.data.valueTitles || []).length > 0) {\n return 1;\n }\n const numberOfSums = Math.max(1, (this.data.valueTitles || []).length);\n return getHeadersChildCount(this.data.columnHeaders, this.columnShowSums, numberOfSums);\n }\n}\n\nfunction preparePivotData(\n data: LmrPivotStemData,\n constraintData: ConstraintData,\n valueTypeInfo: ValueTypeInfo[]\n): LmrPivotStemData {\n const numberOfSums = Math.max(1, (data.valueTitles || []).length);\n const values = computeValuesByValueType(data.values, data.valueTypes, numberOfSums, valueTypeInfo);\n const sorted = sortPivotData({...data, values}, constraintData);\n return fillExpressionsToData(sorted)\n}\n\nfunction fillExpressionsToData(data: LmrPivotStemData): LmrPivotStemData {\n return {\n ...data,\n rowHeaders: fillExpressionsToHeaders(data.rowHeaders, data.rowsConfig, 0),\n columnHeaders: fillExpressionsToHeaders(data.columnHeaders, data.columnsConfig, 0),\n }\n}\n\nfunction fillExpressionsToHeaders(headers: LmrPivotDataHeader[], configs: LmrPivotDimensionConfig[], index: number): LmrPivotDataHeader[] {\n const expressions = configs?.[index]?.expressions || []\n const headersCopy = [...(headers || [])]\n for (const expression of expressions) {\n const dataHeaderExpression = extendPivotExpression(expression, headers)\n if (dataHeaderExpression.lastHeaderIndex >= 0) {\n const lastHeaderIndex = dataHeaderExpression.lastHeaderIndex\n const newHeader: LmrPivotDataHeader = {...headersCopy[lastHeaderIndex], expressions: [...(headersCopy[lastHeaderIndex].expressions || []), dataHeaderExpression]}\n headersCopy.splice(lastHeaderIndex, 1, newHeader)\n }\n }\n\n if (configs?.[index + 1]) {\n for (let i = 0; i < headersCopy.length; i++) {\n headersCopy.splice(i, 1, {...headersCopy[i], children: fillExpressionsToHeaders(headersCopy[i].children, configs, index + 1)})\n }\n }\n\n return headersCopy\n}\n\nfunction extendPivotExpression(expression: LmrPivotExpression, headers: LmrPivotDataHeader[]): LmrPivotDataHeaderExpression {\n const dataHeaderOperands: LmrPivotDataHeaderOperand[] = [];\n let lastHeaderIndex: number = -1\n\n function traverse(operands: LmrPivotOperand[]): void {\n for (const operand of operands){\n if (operand.type === 'header') {\n const indexes = getOperandIndexesInHeaders(operand, headers)\n lastHeaderIndex = Math.max(lastHeaderIndex, ...indexes)\n const operandHeaders = indexes.map(index => headers[index])\n dataHeaderOperands.push({...operand, headers: operandHeaders});\n } else if (operand.type === 'expression') {\n traverse(operand.operands);\n } else {\n dataHeaderOperands.push(operand)\n }\n }\n }\n\n traverse(expression.operands);\n\n return {...expression, lastHeaderIndex, operands: dataHeaderOperands};\n}\n\nfunction getOperandIndexesInHeaders(operand: LmrPivotHeaderOperand, headers: LmrPivotDataHeader[]): number[] {\n return (headers || []).reduce<number[]>((indexes, header, index) => {\n if (operandContainsHeader(operand, header)) {\n indexes.push(index)\n }\n return indexes\n }, [])\n}\n\nfunction operandContainsHeader(operand: LmrPivotHeaderOperand, header: LmrPivotDataHeader): boolean {\n return header.title.match(new RegExp(operand.value))?.length > 0\n}\n\nfunction computeValuesByValueType(\n values: any[][],\n valueTypes: LmrPivotValueType[],\n numValues: number,\n valueTypeInfo: ValueTypeInfo[]\n): any[][] {\n const rowsIndexes = [...Array(values.length).keys()];\n const modifiedValues = deepObjectCopy(values);\n\n for (let i = 0; i < numValues; i++) {\n const valueType = valueTypes && valueTypes[i];\n if (!valueType || valueType === LmrPivotValueType.Default) {\n continue;\n }\n\n const columnsCount = (values[0] && values[0].length) || 0;\n const columnIndexes = [...Array(columnsCount).keys()].filter(key => key % numValues === i);\n const info = valueTypeInfo[i];\n\n for (const row of rowsIndexes) {\n for (const column of columnIndexes) {\n if (valueType === LmrPivotValueType.AllPercentage) {\n modifiedValues[row][column] = divideValues(values[row][column], info.sum);\n } else if (valueType === LmrPivotValueType.RowPercentage) {\n modifiedValues[row][column] = divideValues(values[row][column], info.sumsRows[row]);\n } else if (valueType === LmrPivotValueType.ColumnPercentage) {\n modifiedValues[row][column] = divideValues(values[row][column], info.sumsColumns[column]);\n }\n }\n }\n }\n\n return modifiedValues;\n}\n\nfunction getValuesTypeInfo(values: any[][], valueTypes: LmrPivotValueType[], numValues: number): ValueTypeInfo[] {\n const valueTypeInfo = [];\n const rowsIndexes = [...Array(values.length).keys()];\n\n for (let i = 0; i < numValues; i++) {\n const valueType = valueTypes && valueTypes[i];\n const columnsCount = (values[0] && values[0].length) || 0;\n const columnIndexes = [...Array(columnsCount).keys()].filter(key => key % numValues === i);\n\n valueTypeInfo[i] = getValueTypeInfo(values, valueType, rowsIndexes, columnIndexes);\n }\n\n return valueTypeInfo;\n}\n\nfunction getValueTypeInfo(values: any[][], type: LmrPivotValueType, rows: number[], columns: number[]): ValueTypeInfo {\n const containsDecimal = containsDecimalValue(values, rows, columns);\n const valueTypeInfo: ValueTypeInfo = {\n defaultConstraint: containsDecimal ? new NumberConstraint({decimals: 2}) : null,\n };\n\n if (type === LmrPivotValueType.AllPercentage) {\n return {...valueTypeInfo, sum: getNumericValuesSummary(values, rows, columns)};\n } else if (type === LmrPivotValueType.RowPercentage) {\n return {\n ...valueTypeInfo,\n sumsRows: rows.reduce((arr, row) => {\n arr[row] = getNumericValuesSummary(values, [row], columns);\n return arr;\n }, []),\n };\n } else if (type === LmrPivotValueType.ColumnPercentage) {\n return {\n ...valueTypeInfo,\n sumsColumns: columns.reduce((arr, column) => {\n arr[column] = getNumericValuesSummary(values, rows, [column]);\n return arr;\n }, []),\n };\n }\n\n return {...valueTypeInfo};\n}\n\nfunction containsDecimalValue(values: any[][], rows: number[], columns: number[]): boolean {\n for (const row of rows) {\n for (const column of columns) {\n if (isValueDecimal(values[row][column])) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction isValueDecimal(value: string): boolean {\n if (isNullOrUndefined(value)) {\n return false;\n }\n\n if (isNumeric(value)) {\n return toNumber(value) % 1 !== 0;\n }\n return false;\n}\n\nfunction createTransformationMap(\n headers: LmrPivotDataHeader[],\n showSums: boolean[],\n additionalNum: number,\n numberOfSums: number\n): number[] {\n const array = [];\n iterateThroughTransformationMap(headers, additionalNum, array, 0, showSums, numberOfSums);\n return array;\n}\n\nfunction iterateThroughTransformationMap(\n headers: LmrPivotDataHeader[],\n additionalNum: number,\n array: number[],\n level: number,\n showSums: boolean[],\n numberOfSums: number\n) {\n let additional = additionalNum;\n for (let i = 0; i < headers.length; i++) {\n const header = headers[i];\n if (header.children) {\n iterateThroughTransformationMap(header.children, additional, array, level + 1, showSums, numberOfSums);\n additional += getHeaderChildCount(header, level, showSums, numberOfSums);\n } else if (isNotNullOrUndefined(header.targetIndex)) {\n array[header.targetIndex] = i + additional;\n additional += (header.expressions || []).length;\n }\n }\n}\n\nfunction getTargetIndexesForHeaders(headers: LmrPivotDataHeader[]): number[] {\n const allRows = (headers || []).reduce((rows, header) => {\n rows.push(...getTargetIndexesForHeader(header));\n return rows;\n }, []);\n return uniqueValues<number>(allRows);\n}\n\nfunction getTargetIndexesForHeader(pivotDataHeader: LmrPivotDataHeader): number[] {\n if (pivotDataHeader.children) {\n return pivotDataHeader.children.reduce((rows, header) => {\n rows.push(...getTargetIndexesForHeader(header));\n return rows;\n }, []);\n }\n return [pivotDataHeader.targetIndex];\n}\n\nfunction getHeadersChildCount(headers: LmrPivotDataHeader[], showSums: boolean[], numberOfSums = 1): number {\n return (headers || []).reduce(\n (sum, header) => sum + getHeaderChildCount(header, 0, showSums, numberOfSums),\n showSums[0] ? numberOfSums : 0\n );\n}\n\nfunction getHeaderChildCount(\n pivotDataHeader: LmrPivotDataHeader,\n level: number,\n showSums: boolean[],\n numberOfSums = 1,\n): number {\n const numExpressions = (pivotDataHeader.expressions || []).length\n if (pivotDataHeader.children) {\n return pivotDataHeader.children.reduce(\n (sum, header) => sum + getHeaderChildCount(header, level + 1, showSums, numberOfSums),\n (showSums[level + 1] ? numberOfSums : 0) + numExpressions\n );\n }\n return 1 + numExpressions;\n}\n\nfunction getDirectHeaderChildCount(\n pivotDataHeader: LmrPivotDataHeader,\n level: number,\n showSums: boolean[],\n numberOfSums = 1\n): number {\n if (pivotDataHeader.children) {\n return pivotDataHeader.children.reduce(\n (sum, header) => sum + getHeaderChildCount(header, level + 1, showSums, numberOfSums),\n 0\n );\n }\n return 1;\n}\n\nexport function sortPivotData(data: LmrPivotStemData, constraintData: ConstraintData): LmrPivotStemData {\n const rowSorts = (data.rowsConfig || []).map(config => config.sort)\n const columnSorts = (data.columnsConfig || []).map(config => config.sort)\n return {\n ...data,\n rowHeaders: sortPivotRowDataHeaders(data.rowHeaders, rowSorts, data, constraintData),\n columnHeaders: sortPivotColumnDataHeaders(data.columnHeaders, columnSorts, data, constraintData),\n };\n}\n\nfunction sortPivotRowDataHeaders(\n rowHeaders: LmrPivotDataHeader[],\n rowSorts: LmrPivotSort[],\n pivotData: LmrPivotStemData,\n constraintData: ConstraintData\n): LmrPivotDataHeader[] {\n return sortPivotDataHeadersRecursive(\n rowHeaders,\n 0,\n rowSorts,\n pivotData.columnHeaders,\n pivotData.values,\n pivotData.valueTitles || [],\n true,\n constraintData\n );\n}\n\nfunction sortPivotColumnDataHeaders(\n columnHeaders: LmrPivotDataHeader[],\n columnSorts: LmrPivotSort[],\n pivotData: LmrPivotStemData,\n constraintData: ConstraintData\n): LmrPivotDataHeader[] {\n return sortPivotDataHeadersRecursive(\n columnHeaders,\n 0,\n columnSorts,\n pivotData.rowHeaders,\n pivotData.values,\n pivotData.valueTitles || [],\n false,\n constraintData\n );\n}\n\nfunction sortPivotDataHeadersRecursive(\n headers: LmrPivotDataHeader[],\n index: number,\n sorts: LmrPivotSort[],\n otherSideHeaders: LmrPivotDataHeader[],\n values: any[][],\n valueTitles: string[],\n isRows: boolean,\n constraintData: ConstraintData\n): LmrPivotDataHeader[] {\n // we don't want to sort values headers\n if (!isRows && isValuesHeaders(headers, valueTitles)) {\n return headers;\n }\n const sort = sorts && sorts[index];\n const constraint = getConstraintForSort(sort, headers);\n const valuesMap = createHeadersValuesMap(headers, sort, otherSideHeaders, values, valueTitles, isRows);\n return headers\n .map(header => ({\n ...header,\n children:\n header.children &&\n sortPivotDataHeadersRecursive(\n header.children,\n index + 1,\n sorts,\n otherSideHeaders,\n values,\n valueTitles,\n isRows,\n constraintData\n ),\n }))\n .sort((r1, r2) => {\n const r1Value = constraint.createDataValue(valuesMap[r1.title], constraintData);\n const r2Value = constraint.createDataValue(valuesMap[r2.title], constraintData);\n const multiplier = !sort || sort.asc ? 1 : -1;\n return r1Value.compareTo(r2Value) * multiplier;\n });\n}\n\nfunction getConstraintForSort(sort: LmrPivotSort, headers: LmrPivotDataHeader[]): Constraint {\n if ((sort?.list?.values || []).length > 0) {\n // sort is done by values in columns\n return new NumberConstraint({});\n }\n return ((headers || [])[0] && (headers || [])[0].constraint) || new UnknownConstraint();\n}\n\nfunction isValuesHeaders(headers: LmrPivotDataHeader[], valueTitles: string[]): boolean {\n return (\n valueTitles.length > 1 &&\n (headers || []).every(\n (header, index) => isNotNullOrUndefined(header.targetIndex) && header.title === valueTitles[index]\n )\n );\n}\n\nfunction createHeadersValuesMap(\n headers: LmrPivotDataHeader[],\n sort: LmrPivotSort,\n otherSideHeaders: LmrPivotDataHeader[],\n values: any[][],\n valueTitles: string[],\n isRows: boolean\n): Record<string, any> {\n const sortTargetIndexes = sortValueTargetIndexes(sort, otherSideHeaders, valueTitles);\n if (!sortTargetIndexes) {\n return (headers || []).reduce((valuesMap, header) => {\n valuesMap[header.title] = header.title;\n return valuesMap;\n }, {});\n }\n\n return (headers || []).reduce((valuesMap, header) => {\n const rows = isRows ? getTargetIndexesForHeader(header) : sortTargetIndexes;\n const columns = isRows ? sortTargetIndexes : getTargetIndexesForHeader(header);\n valuesMap[header.title] = getNumericValuesSummary(values, rows, columns);\n return valuesMap;\n }, {});\n}\n\nfunction getNumericValuesSummary(values: any[][], rows: number[], columns: number[]): number {\n let sum = 0;\n for (const row of rows) {\n for (const column of columns) {\n const value = values[row][column];\n if (isNotNullOrUndefined(value) && isNumeric(value)) {\n sum += toNumber(value);\n }\n }\n }\n return sum;\n}\n\nfunction sortValueTargetIndexes(\n sort: LmrPivotSort,\n otherSideHeaders: LmrPivotDataHeader[],\n valueTitles: string[]\n): number[] | null {\n if (sort && sort.list) {\n let valueIndex = valueTitles.findIndex(title => title === sort.list.valueTitle);\n if (valueIndex === -1) {\n if (valueTitles.length === 1) {\n valueIndex = 0;\n } else {\n return null;\n }\n }\n\n let pivotHeader: LmrPivotDataHeader = null;\n let currentOtherSideHeaders = otherSideHeaders;\n for (const value of sort.list.values || []) {\n if (value.isSummary) {\n const indexes = getTargetIndexesForHeaders(currentOtherSideHeaders || []) || [];\n return filterIndexesByMod(indexes, valueTitles.length, valueIndex);\n }\n\n pivotHeader = (currentOtherSideHeaders || []).find(header => header.title === value.title);\n if (!pivotHeader) {\n break;\n }\n\n currentOtherSideHeaders = pivotHeader.children || [];\n }\n\n if (pivotHeader) {\n const targetIndexes = isNotNullOrUndefined(pivotHeader.targetIndex)\n ? [pivotHeader.targetIndex]\n : getTargetIndexesForHeaders(currentOtherSideHeaders);\n return filterIndexesByMod(targetIndexes, valueTitles.length, valueIndex);\n }\n }\n\n return null;\n}\n\nfunction filterIndexesByMod(indexes: number[], mod: number, value: number): number[] {\n return (indexes || []).filter(index => index % mod === value);\n}\n\nfunction divideValues(value: any, divider: any): number {\n if (isNullOrUndefined(value)) {\n return null;\n }\n\n if (isNumeric(value) && isNumeric(divider)) {\n if (divider !== 0) {\n return value / divider;\n } else {\n return 0;\n }\n }\n\n return null;\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\n@Directive({ selector: '[lmr-empty-tables-tmp]' })\nexport class LmrEmptyTablesTemplateDirective {\n constructor(public template: TemplateRef<any>) { }\n}\n\n@Directive({ selector: '[lmr-table-cell-tmp]' })\nexport class LmrTableCellTemplateDirective {\n constructor(public template: TemplateRef<any>) { }\n}\n","/*\n * Lumeer: Modern Data Definition and Processing Platform\n *\n * Copyright (C) since 2017 Lumeer.io, s.r.o. and/or its affiliates.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport {Pipe, PipeTransform} from '@angular/core';\n\nimport {LmrPivotData} from '../util/lmr-pivot-data';\n\n@Pipe({\n name: 'pivotDataEmpty',\n})\nexport class PivotDataEmptyPipe implements PipeTransform {\n public transform(value: LmrPivotData): boolean {\n let anythingToDisplay = false;\n\n value?.data?.forEach(d => {\n anythingToDisplay = anythingToDisplay || d.columnHeaders?.length > 0 || d.rowHeaders?.length > 0;\n });\n\n return !anythingToDisplay;\n }\n}\n","/*\n * Lumeer: Modern Data Definition and Processing Platform\n *\n * Copyright (C) since 2017 Lumeer.io, s.r.o. and/or its affiliates.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport {Pipe, PipeTransform} from '@angular/core';\n\nimport {isNotNullOrUndefined} from '@lumeer/utils';\n\nimport {LmrPivotTableCell} from '../util/lmr-pivot-table';\n\n@Pipe({\n name: 'pivotTableCellHasValue',\n})\nexport class PivotTableCellHasValuePipe implements PipeTransform {\n public transform(cell: LmrPivotTableCell): boolean {\n return isNotNullOrUndefined(cell.value) && String(cell.value).trim() !== '';\n }\n}\n","/*\n * Lumeer: Modern Data Definition and Processing Platform\n *\n * Copyright (C) since 2017 Lumeer.io, s.r.o. and/or its affiliates.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport {Injectable, Pipe, PipeTransform} from '@angular/core';\nimport {contrastColor} from '../util/pivot-util';\n\n\n@Pipe({\n name: 'contrastColor',\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class ContrastColorPipe implements PipeTransform {\n public transform(color: string, returnCodes?: {dark: string; light: string}, opacity?: number): string {\n return contrastColor(color, returnCodes, opacity);\n }\n}\n","import {ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, TemplateRef} from '@angular/core';\nimport {LmrPivotConfig, LmrPivotTransform} from './util/lmr-pivot-config';\nimport {Collection, ConstraintData, DocumentsAndLinksData, LinkType, Query} from '@lumeer/data-filters';\nimport {PivotDataConverter} from './util/pivot-data-converter';\nimport {LmrPivotData} from './util/lmr-pivot-data';\nimport {asyncScheduler, BehaviorSubject, filter, map, Observable, tap, throttleTime} from 'rxjs';\nimport {LmrPivotTable, LmrPivotTableCell} from './util/lmr-pivot-table';\nimport {PivotTableConverter} from './util/pivot-table-converter';\nimport {LmrEmptyTablesTemplateDirective, LmrTableCellTemplateDirective} from './directives/lmr-templates.directive';\n\ninterface Data {\n collections: Collection[];\n linkTypes: LinkType[];\n data: DocumentsAndLinksData;\n query: Query;\n constraintData: ConstraintData;\n config: LmrPivotConfig;\n transform: LmrPivotTransform;\n}\n\n@Component({\n selector: 'lmr-pivot-table',\n templateUrl: 'lmr-pivot-table.component.html',\n styleUrls: ['./lmr-pivot-table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LmrPivotTableComponent implements OnInit, OnChanges {\n\n @Input()\n public collections: Collection[];\n\n @Input()\n public data: DocumentsAndLinksData;\n\n @Input()\n public linkTypes: LinkType[];\n\n @Input()\n public query: Query;\n\n @Input()\n public constraintData: ConstraintData;\n\n @Input()\n public config: LmrPivotConfig;\n\n @Input()\n public transform: LmrPivotTransform;\n\n @Input()\n public emptyTablesTemplateInput: TemplateRef<any>;\n\n @Input()\n public tableCellTemplateInput: TemplateRef<any>;\n\n @Output()\n public cellClick = new EventEmitter<LmrPivotTableCell>();\n\n @Output()\n public pivotDataChange = new EventEmitter<LmrPivotData>();\n\n @Output()\n public pivotTablesChange = new EventEmitter<LmrPivotTable[]>();\n\n @ContentChild(LmrEmptyTablesTemplateDirective, { read: TemplateRef }) emptyTablesTemplate: TemplateRef<any>;\n @ContentChild(LmrTableCellTemplateDirective, { read: TemplateRef }) tableCellTemplate: TemplateRef<any>;\n\n private readonly pivotTransformer = new PivotDataConverter();\n private readonly pivotTableConverter: PivotTableConverter = new PivotTableConverter();\n\n private dataSubject = new BehaviorSubject<Data>(null);\n\n public pivotData$: Observable<LmrPivotData>;\n public pivotTables$: Observable<LmrPivotTable[]>;\n\n public ngOnInit() {\n const observable = this.dataSubject.pipe(filter(data => !!data));\n\n this.pivotData$ = observable.pipe(\n throttleTime(200, asyncScheduler, {trailing: true, leading: true}),\n map(data => this.handleData(data)),\n tap(data => this.pivotDataChange.emit(data)),\n );\n\n this.pivotTables$ = this.pivotData$.pipe(\n map(data => this.pivotTableConverter.createTables(data, this.transform)),\n tap(tables => this.pivotTablesChange.emit(tables))\n );\n }\n\n private handleData(data: Data): LmrPivotData {\n return this.pivotTransformer.createData(\n data.config,\n data.transform,\n data.collections,\n data.linkTypes,\n data.data,\n data.query,\n data.constraintData\n );\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n this.dataSubject.next({\n config: this.config,\n transform: this.transform,\n collections: this.collections,\n linkTypes: this.linkTypes,\n data: this.data,\n query: this.query,\n constraintData: this.constraintData,\n });\n }\n\n}\n","<ng-container *ngIf=\"{pivotTables: pivotTables$ | async, pivotData: pivotData$ | async} as data\">\n <ng-container *ngIf=\"data.pivotTables?.length && !(data.pivotData | pivotDataEmpty)\">\n <table *ngFor=\"let pivotTable of data.pivotTables; let first\"\n class=\"table table-without-padding table-borderless table-md\"\n [class.mt-4]=\"!first\">\n <tr *ngFor=\"let rowCells of pivotTable.cells; let rowIndex = index\">\n\n <ng-container *ngFor=\"let cell of rowCells; let cellIndex = index\">\n <td *ngIf=\"cell && {hasValue: cell | pivotTableCellHasValue} as cellData\"\n class=\"cell {{cell.constraint ? (cell.constraint.type | lowercase) : ''}} text-truncate\"\n [style.max-width.px]=\"300\"\n [class.sticky-start]=\"cell.stickyStart\"\n [class.sticky-top]=\"cell.stickyTop\"\n [rowSpan]=\"cell.rowSpan\"\n [colSpan]=\"cell.colSpan\"\n [style.top.px]=\"cell.stickyTop ? (rowIndex * 40) : undefined\"\n [style.left.px]=\"cell.stickyStart ? (cellIndex * 150) : undefined\"\n [ngClass]=\"cell.cssClass\"\n [style.background]=\"cell.background\"\n [style.color]=\"cell.background && (cell.background | contrastColor)\">\n <ng-container *ngIf=\"cell.summary\">\n <ng-container *ngIf=\"cellData.hasValue\">\n <div class=\"d-flex align-items-center h-100\">\n <span class=\"summary me-2\">{{cell.summary}}</span>\n <ng-template #defaultTableCellTemplate>\n <span class=\"flex-grow-1 h-100 text-truncate d-inline-block\">\n {{ cell.value }}\n </span>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"tableCellTemplate || tableCellTemplateInput || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!cellData.hasValue\">\n <span class=\"d-inline-block summary\">{{cell.summary}}</span>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!cell.summary\">\n <ng-container *ngIf=\"cellData.hasValue\">\n <ng-template #defaultTableCellTemplate>\n <span class=\"d-inline-block\">\n {{ cell.value }}\n </span>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"tableCellTemplate || tableCellTemplateInput || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!cellData.hasValue\">&nbsp;</ng-container>\n </ng-container>\n </td>\n </ng-container>\n </tr>\n </table>\n </ng-container>\n\n <ng-container *ngIf=\"!data.pivotTables?.length || (data.pivotData | pivotDataEmpty)\">\n <ng-template #defaultEmptyTablesTemplate>\n <div>&nbsp;</div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"emptyTablesTemplate || emptyTablesTemplateInput || defaultEmptyTablesTemplate\"\n [ngTemplateOutletContext]=\"{ }\">\n </ng-template>\n </ng-container>\n</ng-container>\n","import {ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, OnChanges, Output, SimpleChanges, TemplateRef} from '@angular/core';\nimport {LmrPivotConfig, LmrPivotTransform} from './util/lmr-pivot-config';\nimport {Attribute, AttributesResourceType, Collection, ConstraintData, DocumentModel, DocumentsAndLinksData, generateId, LanguageTag, Query} from '@lumeer/data-filters';\nimport {LmrPivotData} from './util/lmr-pivot-data';\nimport {LmrPivotTable, LmrPivotTableCell} from './util/lmr-pivot-table';\nimport {LmrSimplePivotConfig} from './util/lmr-simple-pivot-config';\nimport {LmrEmptyTablesTemplateDirective, LmrTableCellTemplateDirective} from './directives/lmr-templates.directive';\n\n@Component({\n selector: 'lmr-simple-pivot-table',\n templateUrl: 'lmr-simple-pivot-table.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LmrSimplePivotTableComponent implements OnChanges {\n\n @Input()\n public rows: Record<string, any>[];\n\n @Input()\n public attributes: Attribute[];\n\n @Input()\n public color: string;\n\n @Input()\n public config: LmrSimplePivotConfig;\n\n @Input()\n public transform: LmrPivotTransform;\n\n @Input()\n public locale: LanguageTag;\n\n @Output()\n public cellClick = new EventEmitter<LmrPivotTableCell>();\n\n @Output()\n public pivotDataChange = new EventEmitter<LmrPivotData>();\n\n @Output()\n public pivotTablesChange = new EventEmitter<LmrPivotTable[]>();\n\n @ContentChild(LmrEmptyTablesTemplateDirective, { read: TemplateRef }) emptyTablesTemplate: TemplateRef<any>;\n @ContentChild(LmrTableCellTemplateDirective, { read: TemplateRef }) tableCellTemplate: TemplateRef<any>;\n\n public readonly collectionId = generateId()\n public readonly query: Query = {stems: [{collectionId: this.collectionId}]};\n\n public collection: Collection = this.createCollection();\n public pivotConfig: LmrPivotConfig = this.createConfig();\n public data: DocumentsAndLinksData = this.createRows();\n public constraintData: ConstraintData;\n\n public ngOnChanges(changes: SimpleChanges) {\n if (changes['rows']) {\n this.data = this.createRows();\n }\n if (changes['attributes'] || changes['color']) {\n this.collection = this.createCollection();\n }\n if (changes['config']) {\n this.pivotConfig = this.createConfig();\n }\n this.constraintData = {\n locale: this.locale || LanguageTag.USA,\n }\n }\n\n private createCollection(): Collection {\n return {\n id: this.collectionId,\n attributes: (this.attributes || []),\n color: this.color,\n }\n }\n\n private createConfig(): LmrPivotConfig {\n return {\n stemsConfigs: [{\n stem: this.query.stems[0],\n rowAttributes: (this.config?.rowAttributes || []).map(attribute => ({...attribute, resourceId: this.collectionId, resourceIndex: 0, resourceType: AttributesResourceType.Collection})),\n columnAttributes: (this.config?.columnAttributes || []).map(attribute => ({...attribute, resourceId: this.collectionId, resourceIndex: 0, resourceType: AttributesResourceType.Collection})),\n valueAttributes: (this.config?.valueAttributes || []).map(attribute => ({...attribute, resourceId: this.collectionId, resourceIndex: 0, resourceType: AttributesResourceType.Collection}))\n }]\n }\n }\n\n private createRows(): DocumentsAndLinksData {\n const documents = (this.rows || []).map<DocumentModel>((row, index) => ({id: index.toString(), collectionId: this.collection.id, data: row}));\n return ({\n uniqueDocuments: documents,\n uniqueLinkInstances: [],\n dataByStems: [{\n stem: this.query.stems[0],\n linkInstances: [],\n documents\n }]\n })\n }\n\n}\n","<lmr-pivot-table [transform]=\"transform\"\n [data]=\"data\"\n [config]=\"pivotConfig\"\n [query]=\"query\"\n [constraintData]=\"constraintData\"\n [collections]=\"[collection]\"\n [emptyTablesTemplateInput]=\"emptyTablesTemplate\"\n [tableCellTemplateInput]=\"tableCellTemplate\"\n (pivotDataChange)=\"pivotDataChange.emit($event)\"\n (pivotTablesChange)=\"pivotTablesChange.emit($event)\">\n</lmr-pivot-table>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ScrollingModule} from '@angular/cdk/scrolling';\nimport {LmrPivotTableComponent} from './lmr-pivot-table.component';\nimport {PivotDataEmptyPipe} from './pipes/pivot-data-empty.pipe';\nimport {PivotTableCellHasValuePipe} from './pipes/pivot-table-value.pipe';\nimport {ContrastColorPipe} from './pipes/contrast-color.pipe';\nimport {LmrEmptyTablesTemplateDirective, LmrTableCellTemplateDirective} from './directives/lmr-templates.directive';\nimport {LmrSimplePivotTableComponent} from './lmr-simple-pivot-table.component';\n\n@NgModule({\n declarations: [\n LmrPivotTableComponent,\n LmrSimplePivotTableComponent,\n PivotDataEmptyPipe,\n PivotTableCellHasValuePipe,\n ContrastColorPipe,\n LmrEmptyTablesTemplateDirective,\n LmrTableCellTemplateDirective,\n ],\n imports: [\n CommonModule,\n ScrollingModule,\n ],\n exports: [\n LmrPivotTableComponent,\n LmrSimplePivotTableComponent,\n LmrEmptyTablesTemplateDirective,\n LmrTableCellTemplateDirective,\n ]\n})\nexport class LmrPivotTableModule {\n}\n","/*\n * Public API Surface of lmr-pivot-table\n */\n\nexport * from './lib/lmr-pivot-table.component';\nexport * from './lib/lmr-simple-pivot-table.component';\nexport * from './lib/lmr-pivot-table.module';\nexport { LmrPivotConfig, LmrPivotStemConfig, LmrPivotConfigVersion, LmrPivotTransform, LmrPivotAttribute, LmrPivotRowAttribute, LmrPivotColumnAttribute, LmrPivotSort, LmrPivotValueAttribute, LmrPivotValueType, LmrPivotExpression} from './lib/util/lmr-pivot-config';\nexport * from './lib/util/lmr-simple-pivot-config';\nexport * from './lib/util/lmr-pivot-data';\nexport * from './lib/util/lmr-pivot-table';\nexport * from './lib/util/pivot-util';\nexport * from './lib/directives/lmr-templates.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.PivotDataEmptyPipe","i3.PivotTableCellHasValuePipe","i4.ContrastColorPipe","i1.LmrPivotTableComponent"],"mappings":"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"}
1
+ {"version":3,"file":"lumeer-pivot.mjs","sources":["../../../projects/lmr-pivot-table/src/lib/util/lmr-pivot-config.ts","../../../projects/lmr-pivot-table/src/lib/util/lmr-pivot-constants.ts","../../../projects/lmr-pivot-table/src/lib/util/pivot-util.ts","../../../projects/lmr-pivot-table/src/lib/util/pivot-data-converter.ts","../../../projects/lmr-pivot-table/src/lib/util/pivot-table-converter.ts","../../../projects/lmr-pivot-table/src/lib/directives/lmr-templates.directive.ts","../../../projects/lmr-pivot-table/src/lib/pipes/pivot-data-empty.pipe.ts","../../../projects/lmr-pivot-table/src/lib/pipes/pivot-table-value.pipe.ts","../../../projects/lmr-pivot-table/src/lib/pipes/contrast-color.pipe.ts","../../../projects/lmr-pivot-table/src/lib/lmr-pivot-table.component.ts","../../../projects/lmr-pivot-table/src/lib/lmr-pivot-table.component.html","../../../projects/lmr-pivot-table/src/lib/lmr-simple-pivot-table.component.ts","../../../projects/lmr-pivot-table/src/lib/lmr-simple-pivot-table.component.html","../../../projects/lmr-pivot-table/src/lib/lmr-pivot-table.module.ts","../../../projects/lmr-pivot-table/src/public-api.ts","../../../projects/lmr-pivot-table/src/lumeer-pivot.ts"],"sourcesContent":["import {Constraint, DataAggregationType, QueryAttribute, QueryStem} from '@lumeer/data-filters';\nimport {LmrPivotDataHeader} from './lmr-pivot-data';\n\nexport interface LmrPivotConfig {\n version?: LmrPivotConfigVersion;\n stemsConfigs: LmrPivotStemConfig[];\n mergeTables?: boolean;\n}\n\nexport interface LmrPivotTransform {\n checkValidConstraintOverride?: (c1: Constraint, c2: Constraint) => Constraint;\n formatAggregation?: (type: DataAggregationType) => string;\n formatSummaryHeader?: (header: LmrPivotDataHeader, level: number) => {title?: string; summary: string};\n formatRowHeader?: (title: string, level: number) => string;\n formatColumnHeader?: (title: string, level: number) => string;\n}\n\nexport interface LmrPivotStemConfig {\n stem?: QueryStem;\n rowAttributes: LmrPivotRowAttribute[];\n columnAttributes: LmrPivotColumnAttribute[];\n valueAttributes: LmrPivotValueAttribute[];\n}\n\nexport enum LmrPivotConfigVersion {\n V1 = '1',\n}\n\nexport interface LmrPivotAttribute extends QueryAttribute {}\n\nexport interface LmrPivotRowColumnAttribute extends LmrPivotAttribute {\n showSums?: boolean;\n sticky?: boolean;\n sort?: LmrPivotSort;\n expressions?: LmrPivotExpression[];\n}\n\nexport interface LmrPivotRowAttribute extends LmrPivotRowColumnAttribute {\n showHeader?: boolean;\n}\n\nexport interface LmrPivotColumnAttribute extends LmrPivotRowColumnAttribute {}\n\nexport interface LmrPivotSortValue {\n title: string;\n isSummary?: boolean;\n}\n\nexport interface LmrPivotSortList {\n valueTitle: string;\n values: LmrPivotSortValue[];\n}\n\nexport interface LmrPivotSort {\n attribute?: LmrPivotAttribute;\n list?: LmrPivotSortList;\n asc: boolean;\n}\n\nexport enum LmrPivotValueType {\n Default = 'default',\n ColumnPercentage = 'column',\n RowPercentage = 'row',\n AllPercentage = 'all',\n}\n\nexport interface LmrPivotValueAttribute extends LmrPivotAttribute {\n aggregation: DataAggregationType;\n valueType?: LmrPivotValueType;\n}\n\nexport interface LmrPivotExpression {\n operation: LmrPivotExpressionOperation;\n operands: LmrPivotOperand[];\n title: string;\n type: 'expression'\n}\n\nexport type LmrPivotExpressionOperation = 'add' | 'subtract' | 'multiply' | 'divide';\n\nexport interface LmrPivotHeaderOperand {\n type: 'header';\n value: string;\n}\n\nexport interface LmrPivotValueOperand {\n type: 'value';\n value: number;\n}\n\nexport type LmrPivotOperand = LmrPivotHeaderOperand | LmrPivotValueOperand | LmrPivotExpression;\n","export const COLOR_GRAY100 = '#f8f9fa';\nexport const COLOR_GRAY200 = '#ecf0f1';\nexport const COLOR_GRAY300 = '#dee2e6';\nexport const COLOR_GRAY400 = '#ced4da';\nexport const COLOR_GRAY500 = '#b4bcc2';\nexport const COLOR_GRAY600 = '#95a5a6';\nexport const COLOR_GRAY700 = '#7b8a8b';\nexport const COLOR_GRAY800 = '#343a40';\nexport const COLOR_GRAY900 = '#212529';\n\nexport const COLOR_PRIMARY = '#253746';\n\nexport const COLOR_LIGHT = COLOR_GRAY200;\n","/*\n * Lumeer: Modern Data Definition and Processing Platform\n *\n * Copyright (C) since 2017 Lumeer.io, s.r.o. and/or its affiliates.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\n\nimport {cleanQueryAttribute, Query, QueryStem} from '@lumeer/data-filters';\nimport {deepObjectsEquals, hex2rgba} from '@lumeer/utils';\nimport {LmrPivotAttribute, LmrPivotConfig, LmrPivotConfigVersion, LmrPivotStemConfig} from './lmr-pivot-config';\nimport {COLOR_LIGHT, COLOR_PRIMARY} from './lmr-pivot-constants';\n\nexport function pivotAttributesAreSame(a1: LmrPivotAttribute, a2: LmrPivotAttribute): boolean {\n return deepObjectsEquals(cleanQueryAttribute(a1), cleanQueryAttribute(a2));\n}\n\nexport function isPivotConfigChanged(viewConfig: LmrPivotConfig, currentConfig: LmrPivotConfig): boolean {\n if (!!viewConfig.mergeTables !== !!currentConfig.mergeTables && (currentConfig.stemsConfigs || []).length > 1) {\n return true;\n }\n\n return pivotStemConfigsHasChanged(viewConfig.stemsConfigs || [], currentConfig.stemsConfigs || []);\n}\n\nfunction pivotStemConfigsHasChanged(s1: LmrPivotStemConfig[], s2: LmrPivotStemConfig[]): boolean {\n if (s1.length !== s2.length) {\n return true;\n }\n\n return s1.some((stemConfig, index) => pivotStemConfigHasChanged(stemConfig, s2[index]));\n}\n\nfunction pivotStemConfigHasChanged(s1: LmrPivotStemConfig, s2: LmrPivotStemConfig): boolean {\n return (\n !deepObjectsEquals(s1.rowAttributes || [], s2.rowAttributes || []) ||\n !deepObjectsEquals(s1.columnAttributes || [], s2.columnAttributes || []) ||\n !deepObjectsEquals(s1.valueAttributes || [], s2.valueAttributes || [])\n );\n}\n\nexport function createDefaultPivotConfig(query: Query): LmrPivotConfig {\n const stems = (query && query.stems) || [];\n const stemsConfigs = stems.map(stem => createDefaultPivotStemConfig(stem));\n return {version: LmrPivotConfigVersion.V1, stemsConfigs: stemsConfigs, mergeTables: true};\n}\n\nexport function createDefaultPivotStemConfig(stem?: QueryStem): LmrPivotStemConfig {\n return {stem, rowAttributes: [], columnAttributes: [], valueAttributes: []};\n}\n\nexport function pivotConfigIsEmpty(config: LmrPivotConfig): boolean {\n return (config.stemsConfigs || []).every(stemConfig => pivotStemConfigIsEmpty(stemConfig));\n}\n\nexport function pivotStemConfigIsEmpty(config: LmrPivotStemConfig): boolean {\n return (\n ((config && config.rowAttributes) || []).length === 0 &&\n ((config && config.columnAttributes) || []).length === 0 &&\n ((config && config.valueAttributes) || []).length === 0\n );\n}\n\nexport function contrastColor(color: string, returnCodes?: {dark: string; light: string}, opacity?: number): string {\n if (!color) {\n return returnCodes ? returnCodes.dark : COLOR_PRIMARY;\n }\n\n const f = parseInt(color.indexOf('#') === 0 ? color.slice(1) : color, 16),\n R = f >> 16,\n G = (f >> 8) & 0x00ff,\n B = f & 0x0000ff;\n\n const luminance = (0.299 * R + 0.587 * G + 0.114 * B) / 255;\n\n if (luminance > 0.5) {\n return returnCodes ? returnCodes.dark : hex2rgba(COLOR_PRIMARY, opacity || 1);\n } else {\n return returnCodes ? returnCodes.light : hex2rgba(COLOR_LIGHT, opacity || 1);\n }\n}\n","/*\n * Lumeer: Modern Data Definition and Processing Platform\n *\n * Copyright (C) since 2017 Lumeer.io, s.r.o. and/or its affiliates.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport {\n Attribute,\n AggregatedDataMap,\n AggregatedDataValues,\n AggregatedMapData,\n Constraint,\n ConstraintData,\n ConstraintType,\n DataAggregationType,\n DataAggregator,\n DataAggregatorAttribute,\n DataValue,\n DocumentsAndLinksData,\n UnknownConstraint,\n aggregateDataResources,\n dataAggregationConstraint, QueryStem, Collection, LinkType, DataResource, Query, AttributesResourceType, attributesResourcesAttributesMap,\n} from '@lumeer/data-filters';\nimport {deepObjectsEquals, flattenMatrix, flattenValues, isArray, isNotNullOrUndefined, uniqueValues} from '@lumeer/utils';\nimport {LmrPivotAttribute, LmrPivotConfig, LmrPivotRowColumnAttribute, LmrPivotStemConfig, LmrPivotTransform, LmrPivotValueAttribute} from './lmr-pivot-config';\nimport {LmrPivotData, LmrPivotDataHeader, LmrPivotDimensionConfig, LmrPivotHeaderAttribute, LmrPivotStemData} from './lmr-pivot-data';\nimport {pivotStemConfigIsEmpty} from './pivot-util';\n\ninterface PivotMergeData {\n configs: LmrPivotStemConfig[];\n stems: QueryStem[];\n stemsIndexes: number[];\n type: PivotConfigType;\n}\n\nenum PivotConfigType {\n Values,\n Rows,\n Columns,\n RowsAndColumns,\n}\n\ninterface PivotColors {\n rows: string[];\n columns: string[];\n values: string[];\n}\n\ninterface PivotConfigData {\n rowsConfig: LmrPivotDimensionConfig[];\n rowShowHeaderAttributes: boolean[];\n columnsConfig: LmrPivotDimensionConfig[];\n columnShowHeaderAttributes: boolean[];\n rowAttributes: Attribute[];\n columnAttributes: Attribute[];\n}\n\nexport class PivotDataConverter {\n private collections: Collection[];\n private linkTypes: LinkType[];\n private collectionsAttributesMap: Record<string, Record<string, Attribute>>;\n private linkTypesAttributesMap: Record<string, Record<string, Attribute>>;\n private data: DocumentsAndLinksData;\n private config: LmrPivotConfig;\n private transform: LmrPivotTransform;\n private constraintData: ConstraintData;\n\n private dataAggregator: DataAggregator;\n\n constructor() {\n this.dataAggregator = new DataAggregator((value, constraint, data, aggregatorAttribute) =>\n this.formatPivotValue(value, constraint, data, aggregatorAttribute)\n );\n }\n\n private formatPivotValue(\n value: any,\n constraint: Constraint,\n constraintData: ConstraintData,\n aggregatorAttribute: DataAggregatorAttribute\n ): any {\n const pivotConstraint = aggregatorAttribute.data && (aggregatorAttribute.data as Constraint);\n const overrideConstraint =\n pivotConstraint && this.transform?.checkValidConstraintOverride?.(constraint, pivotConstraint);\n const finalConstraint = overrideConstraint || constraint || new UnknownConstraint();\n const serializedValue = (constraint || new UnknownConstraint()).createDataValue(value, constraintData).serialize()\n return this.formatDataValue(finalConstraint.createDataValue(serializedValue, constraintData), finalConstraint);\n }\n\n private formatDataValue(dataValue: DataValue, constraint: Constraint): any {\n switch (constraint.type) {\n case ConstraintType.DateTime:\n return dataValue.format();\n default:\n return dataValue.serialize();\n }\n }\n\n private updateData(\n config: LmrPivotConfig,\n transform: LmrPivotTransform,\n collections: Collection[],\n linkTypes: LinkType[],\n data: DocumentsAndLinksData,\n constraintData: ConstraintData\n ) {\n this.config = config;\n this.transform = transform;\n this.collections = collections;\n this.linkTypes = linkTypes;\n this.collectionsAttributesMap = attributesResourcesAttributesMap(collections);\n this.linkTypesAttributesMap = attributesResourcesAttributesMap(linkTypes);\n this.data = data;\n this.constraintData = constraintData;\n }\n\n public createData(\n config: LmrPivotConfig,\n transform: LmrPivotTransform,\n collections: Collection[],\n linkTypes: LinkType[],\n data: DocumentsAndLinksData,\n query: Query,\n constraintData?: ConstraintData\n ): LmrPivotData {\n this.updateData(config, transform, collections, linkTypes, data, constraintData);\n\n const {stemsConfigs, stems} = this.filterEmptyConfigs(config, query);\n\n const mergeData = this.createPivotMergeData(config.mergeTables, stemsConfigs, stems);\n const ableToMerge = mergeData.length <= 1;\n const pivotData = this.mergePivotData(mergeData);\n return {data: pivotData, constraintData, ableToMerge, mergeTables: config.mergeTables};\n }\n\n private filterEmptyConfigs(config: LmrPivotConfig, query: Query): {stemsConfigs: LmrPivotStemConfig[]; stems: QueryStem[]} {\n return (config.stemsConfigs || []).reduce(\n ({stemsConfigs, stems}, stemConfig, index) => {\n if (!pivotStemConfigIsEmpty(stemConfig)) {\n const stem = (query.stems || [])[index];\n stemsConfigs.push(stemConfig);\n stems.push(stem);\n }\n\n return {stemsConfigs, stems};\n },\n {stemsConfigs: [], stems: []}\n );\n }\n\n private createPivotMergeData(\n mergeTables: boolean,\n stemsConfigs: LmrPivotStemConfig[],\n stems: QueryStem[]\n ): PivotMergeData[] {\n return stemsConfigs.reduce((mergeData: PivotMergeData[], stemConfig, index) => {\n const configType = getPivotStemConfigType(stemConfig);\n const mergeDataIndex = mergeData.findIndex(\n data => data.type === configType && canMergeConfigsByType(data.type, data.configs[0], stemConfig)\n );\n if (mergeTables && mergeDataIndex >= 0) {\n mergeData[mergeDataIndex].configs.push(stemConfig);\n mergeData[mergeDataIndex].stems.push(stems[index]);\n mergeData[mergeDataIndex].stemsIndexes.push(index);\n } else {\n mergeData.push({configs: [stemConfig], stems: [stems[index]], stemsIndexes: [index], type: configType});\n }\n\n return mergeData;\n }, []);\n }\n\n private mergePivotData(mergeData: PivotMergeData[]): LmrPivotStemData[] {\n return mergeData.reduce((stemData, data) => {\n if (data.type === PivotConfigType.Values) {\n stemData.push(this.convertValueAttributes(data.configs, data.stems, data.stemsIndexes));\n } else {\n stemData.push(this.transformStems(data.configs, data.stems, data.stemsIndexes));\n }\n return stemData;\n }, []);\n }\n\n private transformStems(configs: LmrPivotStemConfig[], queryStems: QueryStem[], stemsIndexes: number[]): LmrPivotStemData {\n const pivotColors: PivotColors = {rows: [], columns: [], values: []};\n const mergedValueAttributes: LmrPivotValueAttribute[] = [];\n let mergedAggregatedData: AggregatedMapData = null;\n let additionalData: PivotConfigData;\n\n for (let i = 0; i < configs.length; i++) {\n const config = configs[i];\n const queryStem = queryStems[i];\n const stemIndex = stemsIndexes[i];\n const stemData = this.data?.dataByStems?.[stemIndex];\n\n this.dataAggregator.updateData(\n this.collections,\n stemData?.documents || [],\n this.linkTypes,\n stemData?.linkInstances || [],\n queryStem,\n this.constraintData\n );\n const rowAttributes = (config.rowAttributes || []).map(attribute =>\n this.convertPivotRowColumnAttribute(attribute)\n );\n const columnAttributes = (config.columnAttributes || []).map(attribute =>\n this.convertPivotRowColumnAttribute(attribute)\n );\n const valueAttributes = (config.valueAttributes || []).map(attribute => this.convertPivotAttribute(attribute));\n\n pivotColors.rows.push(...this.getAttributesColors(config.rowAttributes));\n pivotColors.columns.push(...this.getAttributesColors(config.columnAttributes));\n pivotColors.values.push(...this.getAttributesColors(config.valueAttributes));\n\n const aggregatedData = this.dataAggregator.aggregate(rowAttributes, columnAttributes, valueAttributes);\n mergedAggregatedData = this.mergeAggregatedData(mergedAggregatedData, aggregatedData);\n\n const filteredValueAttributes = (config.valueAttributes || []).filter(\n valueAttr => !mergedValueAttributes.some(merAttr => deepObjectsEquals(valueAttr, merAttr))\n );\n mergedValueAttributes.push(...filteredValueAttributes);\n\n if (!additionalData) {\n const rowSticky = this.mapStickyValues((config.rowAttributes || []).map(attr => attr.sticky));\n const columnSticky = this.mapStickyValues((config.columnAttributes || []).map(attr => attr.sticky));\n additionalData = {\n rowsConfig: (config.rowAttributes || []).map((attr, index) => ({showSums: attr.showSums, sort: attr.sort, expressions: attr.expressions, sticky: rowSticky[index]})),\n columnsConfig: (config.columnAttributes || []).map((attr, index) => ({showSums: attr.showSums, sort: attr.sort, expressions: attr.expressions, sticky: columnSticky[index]})),\n rowShowHeaderAttributes: (config.rowAttributes || []).map(attr => attr.showHeader),\n rowAttributes: (config.rowAttributes || []).map(attr => this.pivotAttributeAttribute(attr)),\n columnShowHeaderAttributes: (config.columnAttributes || []).map(attr => false),\n columnAttributes: (config.columnAttributes || []).map(attr => this.pivotAttributeAttribute(attr)),\n };\n }\n }\n\n return this.convertAggregatedData(mergedAggregatedData, mergedValueAttributes, pivotColors, additionalData);\n }\n\n private mapStickyValues(values: boolean[]): boolean[] {\n // we support only sticky rows/columns in a row\n return values.reduce((stickyValues, sticky, index) => {\n stickyValues.push(sticky && (index === 0 || stickyValues[index - 1]));\n return stickyValues;\n }, []);\n }\n\n private pivotAttributeConstraint(pivotAttribute: LmrPivotAttribute): Constraint | undefined {\n const attribute = this.findAttributeByPivotAttribute(pivotAttribute);\n const constraint = attribute && attribute.constraint;\n const overrideConstraint =\n pivotAttribute.constraint &&\n this.transform?.checkValidConstraintOverride?.(constraint, pivotAttribute.constraint);\n return overrideConstraint || constraint;\n }\n\n private pivotAttributeAttribute(pivotAttribute: LmrPivotAttribute): Attribute | undefined {\n const attribute = this.findAttributeByPivotAttribute(pivotAttribute);\n if (attribute) {\n const constraint = attribute?.constraint;\n const overrideConstraint =\n pivotAttribute.constraint &&\n this.transform?.checkValidConstraintOverride?.(constraint, pivotAttribute.constraint);\n return {...attribute, constraint: overrideConstraint || constraint || new UnknownConstraint()};\n }\n return undefined;\n }\n\n private mergeAggregatedData(a1: AggregatedMapData, a2: AggregatedMapData): AggregatedMapData {\n if (!a1 || !a2) {\n return a1 || a2;\n }\n\n this.mergeMaps(a1.map, a2.map);\n this.mergeMaps(a1.columnsMap, a2.columnsMap);\n return {\n map: a1.map,\n columnsMap: a1.columnsMap,\n rowLevels: Math.max(a1.rowLevels, a2.rowLevels),\n columnLevels: Math.max(a1.columnLevels, a2.columnLevels),\n };\n }\n\n private mergeMaps(m1: Record<string, any>, m2: Record<string, any>) {\n Object.keys(m2).forEach(key => {\n if (m1[key]) {\n if (isArray(m1[key]) && isArray(m2[key])) {\n m1[key].push(...m2[key]);\n } else if (!isArray(m1[key]) && !isArray(m2[key])) {\n this.mergeMaps(m1[key], m2[key]);\n }\n } else {\n m1[key] = m2[key];\n }\n });\n }\n\n private getAttributesColors(attributes: LmrPivotAttribute[]): string[] {\n return (attributes || []).map(attribute => {\n const resource = this.dataAggregator.getNextCollectionResource(attribute.resourceIndex);\n return resource && (<Collection>resource).color;\n });\n }\n\n private convertPivotRowColumnAttribute(pivotAttribute: LmrPivotRowColumnAttribute): DataAggregatorAttribute {\n return {...this.convertPivotAttribute(pivotAttribute), data: pivotAttribute.constraint};\n }\n\n private convertPivotAttribute(pivotAttribute: LmrPivotAttribute): DataAggregatorAttribute {\n return {resourceIndex: pivotAttribute.resourceIndex, attributeId: pivotAttribute.attributeId};\n }\n\n private convertValueAttributes(\n configs: LmrPivotStemConfig[],\n stems: QueryStem[],\n stemsIndexes: number[]\n ): LmrPivotStemData {\n const data = configs.reduce(\n (allData, config, index) => {\n const stem = stems[index];\n const stemIndex = stemsIndexes[index];\n\n const stemData = this.data?.dataByStems?.[stemIndex];\n this.dataAggregator.updateData(\n this.collections,\n stemData?.documents || [],\n this.linkTypes,\n stemData?.linkInstances || [],\n stem,\n this.constraintData\n );\n\n const valueAttributes = config.valueAttributes || [];\n allData.valueTypes.push(...valueAttributes.map(attr => attr.valueType));\n const valueColors = this.getAttributesColors(valueAttributes);\n\n const {titles, constraints} = this.createValueTitles(valueAttributes);\n allData.titles.push(...titles);\n allData.constraints.push(...constraints);\n\n const {headers} = this.convertMapToPivotDataHeader({}, 0, [], valueColors, [], titles, allData.headers.length);\n allData.headers.push(...headers);\n\n allData.aggregations = [...(valueAttributes || []).map(valueAttribute => valueAttribute.aggregation)];\n\n const {values, dataResources} = (valueAttributes || []).reduce<{values: any[]; dataResources: DataResource[][]}>(\n (aggregator, valueAttribute, index) => {\n const dataResources = this.findDataResourcesByPivotAttribute(valueAttribute);\n const attribute = this.findAttributeByPivotAttribute(valueAttribute);\n const value = aggregateDataResources(valueAttribute.aggregation, dataResources, attribute, true);\n aggregator.values.push(value);\n aggregator.dataResources.push(dataResources);\n return aggregator;\n },\n {values: [], dataResources: []}\n );\n\n allData.values.push(...values);\n allData.dataResources.push(...dataResources);\n return allData;\n },\n {titles: [], constraints: [], headers: [], values: [], dataResources: [], valueTypes: [], aggregations: []}\n );\n\n return {\n columnHeaders: data.headers,\n columnHeaderAttributes: [],\n rowHeaders: [],\n rowHeaderAttributes: [],\n valueTitles: data.titles,\n values: [data.values],\n dataResources: [data.dataResources],\n valuesConstraints: data.constraints,\n valueTypes: data.valueTypes,\n valueAggregations: data.aggregations,\n\n rowsConfig: [],\n columnsConfig: [],\n\n hasAdditionalColumnLevel: true,\n };\n }\n\n private findDataResourcesByPivotAttribute(pivotAttribute: LmrPivotAttribute): DataResource[] {\n if (pivotAttribute.resourceType === AttributesResourceType.Collection) {\n return (this.data?.uniqueDocuments || []).filter(document => document.collectionId === pivotAttribute.resourceId);\n } else if (pivotAttribute.resourceType === AttributesResourceType.LinkType) {\n return (this.data?.uniqueLinkInstances || []).filter(link => link.linkTypeId === pivotAttribute.resourceId);\n }\n return [];\n }\n\n private convertAggregatedData(\n aggregatedData: AggregatedMapData,\n valueAttributes: LmrPivotValueAttribute[],\n pivotColors: PivotColors,\n additionalData: PivotConfigData\n ): LmrPivotStemData {\n const rowData = this.convertMapToPivotDataHeader(\n aggregatedData.map,\n aggregatedData.rowLevels,\n pivotColors.rows,\n pivotColors.values,\n additionalData.rowAttributes\n );\n const rowHeaderAttributes: LmrPivotHeaderAttribute[] = (additionalData.rowAttributes || [])\n .map((attribute, index) => additionalData.rowShowHeaderAttributes?.[index] ? ({title: attribute.name, color: pivotColors.rows?.[index]}) : undefined)\n\n const {titles: valueTitles, constraints: valuesConstraints} = this.createValueTitles(valueAttributes);\n const columnData = this.convertMapToPivotDataHeader(\n aggregatedData.rowLevels > 0 ? aggregatedData.columnsMap : aggregatedData.map,\n aggregatedData.columnLevels,\n pivotColors.columns,\n pivotColors.values,\n additionalData.columnAttributes,\n valueTitles\n );\n const columnHeaderAttributes: LmrPivotHeaderAttribute[] = (additionalData.columnAttributes || [])\n .map((attribute, index) => additionalData.columnShowHeaderAttributes?.[index] ? ({title: attribute.name, color: pivotColors.columns?.[index]}) : undefined)\n\n const values = this.initMatrix<number>(rowData.maxIndex + 1, columnData.maxIndex + 1);\n const dataResources = this.initMatrix<DataResource[]>(rowData.maxIndex + 1, columnData.maxIndex + 1);\n if ((valueAttributes || []).length > 0) {\n this.fillValues(values, dataResources, rowData.headers, columnData.headers, valueAttributes, aggregatedData);\n }\n\n const valueAggregations = (valueAttributes || []).map(valueAttribute => valueAttribute.aggregation);\n\n const hasAdditionalColumnLevel =\n (aggregatedData.columnLevels === 0 && valueTitles.length > 0) ||\n (aggregatedData.columnLevels > 0 && valueTitles.length > 1);\n return {\n rowHeaders: rowData.headers,\n rowHeaderAttributes,\n columnHeaders: columnData.headers,\n columnHeaderAttributes,\n valueTitles,\n values,\n dataResources,\n valuesConstraints,\n valueAggregations,\n\n ...additionalData,\n\n valueTypes: valueAttributes.map(attr => attr.valueType!),\n hasAdditionalColumnLevel,\n };\n }\n\n private convertMapToPivotDataHeader(\n map: Record<string, any>,\n levels: number,\n colors: string[],\n valueColors: string[],\n attributes: Attribute[],\n valueTitles?: string[],\n additionalNum: number = 0\n ): {headers: LmrPivotDataHeader[]; maxIndex: number} {\n const headers: LmrPivotDataHeader[] = [];\n const data = {maxIndex: 0};\n if (levels === 0) {\n if ((valueTitles || []).length > 0) {\n headers.push(\n ...valueTitles!.map((title, index) => ({\n title,\n targetIndex: index + additionalNum,\n color: valueColors[index],\n isValueHeader: true,\n }))\n );\n data.maxIndex = valueTitles!.length - 1 + additionalNum;\n }\n } else {\n let currentIndex = additionalNum;\n Object.keys(map).forEach((title, index) => {\n const attribute = attributes && attributes[0];\n if (levels === 1 && (valueTitles || []).length <= 1) {\n headers.push({\n title,\n targetIndex: currentIndex,\n color: colors[0],\n constraint: attribute?.constraint || new UnknownConstraint(),\n isValueHeader: false,\n attributeName: attribute?.name,\n });\n data.maxIndex = Math.max(data.maxIndex, currentIndex);\n } else {\n headers.push({\n title,\n color: colors[0],\n constraint: attribute?.constraint || new UnknownConstraint(),\n isValueHeader: false,\n attributeName: attribute?.name,\n });\n }\n\n this.iterateThroughPivotDataHeader(\n map[title],\n headers[index],\n currentIndex,\n 1,\n levels,\n colors,\n valueColors,\n valueTitles || [],\n attributes,\n data\n );\n currentIndex += this.numChildren(map[title], levels - 1, (valueTitles && valueTitles.length) || 1);\n });\n }\n\n return {headers, maxIndex: data.maxIndex};\n }\n\n private iterateThroughPivotDataHeader(\n currentMap: Record<string, any>,\n header: LmrPivotDataHeader,\n headerIndex: number,\n level: number,\n maxLevels: number,\n colors: string[],\n valueColors: string[],\n valueTitles: string[],\n attributes: Attribute[],\n additionalData: {maxIndex: number}\n ) {\n if (level === maxLevels) {\n if ((valueTitles || []).length > 1) {\n header.children = valueTitles.map((title, index) => ({\n title,\n targetIndex: headerIndex + index,\n color: valueColors[index],\n isValueHeader: true,\n }));\n additionalData.maxIndex = Math.max(additionalData.maxIndex, headerIndex + valueTitles.length - 1);\n }\n return;\n }\n\n header.children = [];\n let currentIndex = headerIndex;\n Object.keys(currentMap).forEach((title, index) => {\n const attribute = attributes && attributes[level];\n if (level + 1 === maxLevels && (valueTitles || []).length <= 1) {\n header.children!.push({\n title,\n targetIndex: currentIndex,\n color: colors[level],\n constraint: attribute?.constraint || new UnknownConstraint(),\n isValueHeader: false,\n attributeName: attribute?.name,\n });\n additionalData.maxIndex = Math.max(additionalData.maxIndex, currentIndex);\n } else {\n header.children!.push({\n title,\n color: colors[level],\n constraint: attribute?.constraint || new UnknownConstraint(),\n isValueHeader: false,\n attributeName: attribute?.name,\n });\n }\n\n this.iterateThroughPivotDataHeader(\n currentMap[title],\n header.children?.[index],\n currentIndex,\n level + 1,\n maxLevels,\n colors,\n valueColors,\n valueTitles,\n attributes,\n additionalData\n );\n\n currentIndex += this.numChildren(\n currentMap[title],\n maxLevels - (level + 1),\n (valueTitles && valueTitles.length) || 1\n );\n });\n }\n\n private numChildren(map: Record<string, any>, maxLevels: number, numTitles: number): number {\n if (maxLevels === 0) {\n return numTitles;\n }\n\n const keys = Object.keys(map || {});\n if (maxLevels === 1) {\n return keys.length * numTitles;\n }\n\n const count = keys.reduce((sum, key) => sum + this.numChildrenRecursive(map[key], 1, maxLevels), 0);\n return count * numTitles;\n }\n\n private numChildrenRecursive(map: Record<string, any>, level: number, maxLevels: number): number {\n if (level >= maxLevels) {\n return 0;\n }\n\n const keys = Object.keys(map || {});\n if (level + 1 === maxLevels) {\n return keys.length;\n }\n\n return keys.reduce((sum, key) => sum + this.numChildrenRecursive(map[key], level + 1, maxLevels), 0);\n }\n\n private createValueTitles(valueAttributes: LmrPivotValueAttribute[]): {titles: string[]; constraints: Constraint[]} {\n return (valueAttributes || []).reduce<{titles: string[]; constraints: Constraint[]}>(\n ({titles, constraints}, pivotAttribute) => {\n const attribute = this.findAttributeByPivotAttribute(pivotAttribute);\n constraints.push(\n dataAggregationConstraint(pivotAttribute.aggregation) || this.pivotAttributeConstraint(pivotAttribute)\n );\n\n const title = this.createValueTitle(pivotAttribute.aggregation, attribute?.name || '');\n titles.push(title);\n\n return {titles, constraints};\n },\n {titles: [], constraints: []}\n );\n }\n\n public createValueTitle(aggregation: DataAggregationType, attributeName: string): string {\n const valueAggregationTitle = this.transform?.formatAggregation?.(aggregation) || aggregation.toString();\n return `${valueAggregationTitle} ${attributeName || ''}`.trim();\n }\n\n private initMatrix<T>(rows: number, columns: number): T[][] {\n const matrix: T[][] = [];\n for (let i = 0; i < rows; i++) {\n matrix[i] = [];\n for (let j = 0; j < columns; j++) {\n matrix[i][j] = undefined;\n }\n }\n\n return matrix;\n }\n\n private fillValues(\n values: number[][],\n dataResources: DataResource[][][],\n rowHeaders: LmrPivotDataHeader[],\n columnHeaders: LmrPivotDataHeader[],\n valueAttributes: LmrPivotValueAttribute[],\n aggregatedData: AggregatedMapData\n ) {\n if (rowHeaders.length > 0) {\n this.iterateThroughRowHeaders(\n values,\n dataResources,\n rowHeaders,\n columnHeaders,\n valueAttributes,\n aggregatedData.map\n );\n } else {\n this.iterateThroughColumnHeaders(values, dataResources, columnHeaders, 0, valueAttributes, aggregatedData.map);\n }\n }\n\n private iterateThroughRowHeaders(\n values: number[][],\n dataResources: DataResource[][][],\n rowHeaders: LmrPivotDataHeader[],\n columnHeaders: LmrPivotDataHeader[],\n valueAttributes: LmrPivotValueAttribute[],\n currentMap: AggregatedDataMap\n ) {\n for (const rowHeader of rowHeaders) {\n const rowHeaderMap = currentMap[rowHeader.title] || {};\n\n if (rowHeader.children) {\n this.iterateThroughRowHeaders(\n values,\n dataResources,\n rowHeader.children,\n columnHeaders,\n valueAttributes,\n rowHeaderMap\n );\n } else if (isNotNullOrUndefined(rowHeader.targetIndex) && columnHeaders.length > 0) {\n this.iterateThroughColumnHeaders(\n values,\n dataResources,\n columnHeaders,\n rowHeader.targetIndex!,\n valueAttributes,\n rowHeaderMap\n );\n }\n }\n }\n\n private iterateThroughColumnHeaders(\n values: number[][],\n dataResources: DataResource[][][],\n columnHeaders: LmrPivotDataHeader[],\n rowIndex: number,\n valueAttributes: LmrPivotValueAttribute[],\n currentMap: AggregatedDataMap | AggregatedDataValues[]\n ) {\n for (const columnHeader of columnHeaders) {\n if (columnHeader.children) {\n this.iterateThroughColumnHeaders(\n values,\n dataResources,\n columnHeader.children,\n rowIndex,\n valueAttributes,\n currentMap[columnHeader.title] || {}\n );\n } else if (isNotNullOrUndefined(columnHeader.targetIndex)) {\n const aggregatedDataValues = isArray(currentMap) ? currentMap : currentMap[columnHeader.title];\n\n if (valueAttributes.length) {\n const valueIndex = columnHeader.targetIndex! % valueAttributes.length;\n const {value, dataResources: aggregatedDataResources} = this.aggregateValue(\n valueAttributes[valueIndex],\n aggregatedDataValues\n );\n values[rowIndex][columnHeader.targetIndex!] = value;\n dataResources[rowIndex][columnHeader.targetIndex!] = aggregatedDataResources || [];\n }\n }\n }\n }\n\n private aggregateValue(\n valueAttribute: LmrPivotValueAttribute,\n aggregatedDataValues: AggregatedDataValues[]\n ): {value?: any; dataResources?: DataResource[]} {\n const resourceAggregatedDataValues = (aggregatedDataValues || []).filter(\n agg => agg.resourceId === valueAttribute.resourceId && agg.type === valueAttribute.resourceType\n );\n if (resourceAggregatedDataValues.length) {\n const dataResources = flattenMatrix(resourceAggregatedDataValues.map(val => val.objects));\n const attribute = this.pivotAttributeAttribute(valueAttribute);\n if (valueAttribute.aggregation === DataAggregationType.Join) {\n // values will be joined in pivot-table-converter\n const values = (dataResources || []).map((resource: DataResource) => resource.data?.[attribute?.id || '']);\n return {value: uniqueValues(flattenValues(values)), dataResources};\n }\n\n const value = attribute && aggregateDataResources(valueAttribute.aggregation, dataResources, attribute, true);\n return {value, dataResources};\n }\n\n return {};\n }\n\n private findAttributeByPivotAttribute(valueAttribute: LmrPivotAttribute): Attribute | undefined {\n if (valueAttribute.resourceType === AttributesResourceType.Collection) {\n return this.collectionsAttributesMap?.[valueAttribute.resourceId]?.[valueAttribute.attributeId];\n } else if (valueAttribute.resourceType === AttributesResourceType.LinkType) {\n return this.linkTypesAttributesMap?.[valueAttribute.resourceId]?.[valueAttribute.attributeId];\n }\n return undefined\n }\n}\n\nfunction getPivotStemConfigType(stemConfig: LmrPivotStemConfig): PivotConfigType {\n const rowLength = (stemConfig.rowAttributes || []).length;\n const columnLength = (stemConfig.columnAttributes || []).length;\n\n if (rowLength > 0 && columnLength > 0) {\n return PivotConfigType.RowsAndColumns;\n } else if (rowLength > 0) {\n return PivotConfigType.Rows;\n } else if (columnLength > 0) {\n return PivotConfigType.Columns;\n }\n return PivotConfigType.Values;\n}\n\nfunction canMergeConfigsByType(type: PivotConfigType, c1: LmrPivotStemConfig, c2: LmrPivotStemConfig): boolean {\n if (type === PivotConfigType.Rows) {\n return (c1.rowAttributes || []).length === (c2.rowAttributes || []).length;\n } else if (type === PivotConfigType.Columns) {\n return (c1.columnAttributes || []).length === (c2.columnAttributes || []).length;\n }\n return (\n (c1.rowAttributes || []).length === (c2.rowAttributes || []).length &&\n (c1.columnAttributes || []).length === (c2.columnAttributes || []).length\n );\n}\n","/*\n * Lumeer: Modern Data Definition and Processing Platform\n *\n * Copyright (C) since 2017 Lumeer.io, s.r.o. and/or its affiliates.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport {aggregateDataValues, Constraint, ConstraintData, DataAggregationType, DataResource, isValueAggregation, NumberConstraint, PercentageConstraint, UnknownConstraint,} from '@lumeer/data-filters';\nimport {deepObjectCopy, isArray, isNotNullOrUndefined, isNullOrUndefined, isNumeric, shadeColor, toNumber, uniqueValues,} from '@lumeer/utils';\n\nimport {LmrPivotData, LmrPivotDataHeader, LmrPivotDataHeaderExpression, LmrPivotDataHeaderOperand, LmrPivotDimensionConfig, LmrPivotStemData} from './lmr-pivot-data';\nimport {LmrPivotTable, LmrPivotTableCell} from './lmr-pivot-table';\nimport {LmrPivotExpression, LmrPivotHeaderOperand, LmrPivotOperand, LmrPivotSort, LmrPivotTransform, LmrPivotValueType} from './lmr-pivot-config';\nimport {COLOR_GRAY100, COLOR_GRAY200, COLOR_GRAY300, COLOR_GRAY400, COLOR_GRAY500} from './lmr-pivot-constants';\n\ninterface HeaderGroupInfo {\n background: string;\n indexes: number[];\n level: number;\n}\n\ninterface ValueTypeInfo {\n sum?: number;\n sumsRows?: number[];\n sumsColumns?: number[];\n defaultConstraint?: Constraint;\n}\n\nexport class PivotTableConverter {\n public static readonly emptyClass = 'pivot-empty-cell';\n public static readonly dataClass = 'pivot-data-cell';\n public static readonly groupDataClass = 'pivot-data-group-cell';\n public static readonly rowHeaderClass = 'pivot-row-header-cell';\n public static readonly rowGroupHeaderClass = 'pivot-row-group-header-cell';\n public static readonly rowAttributeHeaderClass = 'pivot-row-attribute-header-cell';\n public static readonly columnHeaderClass = 'pivot-column-header-cell';\n public static readonly columnGroupHeaderClass = 'pivot-column-group-header-cell';\n\n private readonly groupColors = [COLOR_GRAY100, COLOR_GRAY200, COLOR_GRAY300, COLOR_GRAY400, COLOR_GRAY500];\n\n private readonly percentageConstraint = new PercentageConstraint({decimals: 2});\n\n private data: LmrPivotStemData;\n private transform: LmrPivotTransform;\n private values: any[][];\n private dataResources: DataResource[][][];\n private constraintData: ConstraintData;\n private rowLevels: number;\n private rowsTransformationArray: number[];\n private columnLevels: number;\n private columnsTransformationArray: number[];\n private valueTypeInfo: ValueTypeInfo[];\n private nonStickyRowIndex: number;\n private nonStickyColumnIndex: number;\n\n public createTables(pivotData: LmrPivotData, transform: LmrPivotTransform): LmrPivotTable[] {\n if (!pivotData) {\n return [{cells: []}];\n }\n\n this.transform = transform;\n this.constraintData = pivotData.constraintData;\n\n return (pivotData.data || []).map(d => {\n if (this.dataAreEmpty(d)) {\n return {cells: []};\n }\n this.updateData(d);\n return this.transformData();\n });\n }\n\n private dataAreEmpty(data: LmrPivotStemData): boolean {\n return (data.rowHeaders || []).length === 0 && (data.columnHeaders || []).length === 0;\n }\n\n private updateData(data: LmrPivotStemData) {\n const numberOfSums = Math.max(1, (data.valueTitles || []).length);\n this.valueTypeInfo = getValuesTypeInfo(data.values, data.valueTypes, numberOfSums);\n this.data = preparePivotData(data, this.constraintData, this.valueTypeInfo);\n this.values = data.values || [];\n this.dataResources = data.dataResources || [];\n this.rowLevels = (data.rowsConfig || []).length;\n this.columnLevels = (data.columnsConfig || []).length + (data.hasAdditionalColumnLevel ? 1 : 0);\n const rowAllSticky = this.data.rowsConfig?.length && this.data.rowsConfig.every(config => !!config?.sticky)\n this.nonStickyRowIndex = Math.max(rowAllSticky ? this.rowLevels : (this.data.rowsConfig?.findIndex(config => !config?.sticky) || 0), 0);\n const columnAllSticky = this.data.columnsConfig?.length && this.data.columnsConfig.every(config => !!config?.sticky)\n this.nonStickyColumnIndex = Math.max(columnAllSticky ? this.columnLevels : (this.data.columnsConfig?.findIndex(config => !config?.sticky) || 0), 0);\n const hasValue = (data.valueTitles || []).length > 0;\n if ((this.data.rowHeaders || []).length > 0) {\n this.rowsTransformationArray = createTransformationMap(\n this.data.rowHeaders,\n this.rowShowSums,\n this.columnLevels,\n 1\n );\n } else {\n this.rowsTransformationArray = hasValue ? [this.columnLevels] : [];\n }\n\n if ((this.data.columnHeaders || []).length > 0) {\n this.columnsTransformationArray = createTransformationMap(\n this.data.columnHeaders,\n this.columnShowSums,\n this.rowLevels,\n numberOfSums\n );\n } else {\n this.columnsTransformationArray = hasValue ? [this.rowLevels] : [];\n }\n }\n\n private get rowShowSums(): boolean[] {\n return (this.data.rowsConfig || []).map(config => config.showSums);\n }\n\n private get columnShowSums(): boolean[] {\n return (this.data.columnsConfig || []).map(config => config.showSums);\n }\n\n private transformData(): LmrPivotTable {\n const cells = this.initCells();\n const rowGroups = this.fillCellsByRows(cells);\n const columnGroups = this.fillCellsByColumns(cells);\n this.fillCellsByGroupIntersection(cells, rowGroups, columnGroups);\n return {cells};\n }\n\n private fillCellsByRows(cells: LmrPivotTableCell[][]): HeaderGroupInfo[] {\n const rowGroups = [];\n this.iterateAndFillCellsByRows(cells, rowGroups, this.data.rowHeaders, this.columnLevels, this.rowShowSums, 0);\n return rowGroups;\n }\n\n private iterateAndFillCellsByRows(\n cells: LmrPivotTableCell[][],\n rowGroupsInfo: HeaderGroupInfo[],\n headers: LmrPivotDataHeader[],\n startIndex: number,\n showSums: boolean[],\n level: number,\n parentHeader?: LmrPivotDataHeader\n ) {\n let currentIndex = startIndex;\n for (const header of headers) {\n const rowSpan = getDirectHeaderChildCount(header, level, showSums);\n cells[currentIndex][level] = {\n value: this.formatRowHeader(header.title, level),\n cssClass: PivotTableConverter.rowHeaderClass,\n isHeader: true,\n stickyStart: this.isRowLevelSticky(level),\n rowSpan,\n colSpan: 1,\n background: this.getHeaderBackground(header, level),\n constraint: header.constraint,\n label: header.attributeName,\n };\n\n if (header.children) {\n this.iterateAndFillCellsByRows(\n cells,\n rowGroupsInfo,\n header.children,\n currentIndex,\n showSums,\n level + 1,\n header\n );\n } else if (isNotNullOrUndefined(header.targetIndex)) {\n this.fillCellsForRow(cells, header.targetIndex);\n }\n\n currentIndex += getHeaderChildCount(header, level, showSums);\n\n const expressions = header.expressions || []\n for (let i = 0; i < expressions.length; i++) {\n const expressionIndex = currentIndex - (expressions.length - i)\n const background = this.getSummaryBackground(level);\n this.splitRowGroupHeader(cells, level, expressionIndex, background, expressions[i].title)\n this.fillCellsForExpressionRow(cells, expressions[i], expressionIndex, background)\n }\n }\n\n if (showSums[level]) {\n const { title, summary } = this.formatSummaryHeader(parentHeader, level)\n const background = this.getSummaryBackground(level);\n const columnIndex = Math.max(level - 1, 0);\n this.splitRowGroupHeader(cells, columnIndex, currentIndex, background, summary, title, parentHeader?.constraint, parentHeader?.attributeName)\n\n const rowIndexes = getTargetIndexesForHeaders(headers);\n const transformedRowIndexes = rowIndexes\n .map(v => this.rowsTransformationArray[v])\n .filter(v => isNotNullOrUndefined(v));\n\n rowGroupsInfo[currentIndex] = {background, indexes: transformedRowIndexes, level};\n\n this.fillCellsForGroupedRow(cells, rowIndexes, currentIndex, background);\n }\n }\n\n private splitRowGroupHeader(cells: LmrPivotTableCell[][], columnIndex: number, currentIndex: number, background: string, summary: string, title?: string, constraint?: Constraint, label?: string) {\n let colSpan = this.rowLevels - columnIndex;\n const stickyStart = this.isRowLevelSticky(columnIndex);\n\n // split row group header cell because of correct sticky scroll\n if (stickyStart && this.nonStickyRowIndex > 0 && this.nonStickyRowIndex < this.rowLevels && colSpan > 1) {\n const newColspan = this.nonStickyRowIndex - columnIndex;\n\n cells[currentIndex][this.nonStickyRowIndex] = {\n value: undefined,\n constraint: undefined,\n label: undefined,\n cssClass: PivotTableConverter.rowGroupHeaderClass,\n isHeader: true,\n rowSpan: 1,\n colSpan: colSpan - newColspan,\n background,\n summary: undefined,\n };\n\n colSpan = newColspan;\n }\n\n cells[currentIndex][columnIndex] = {\n value: title,\n constraint,\n label,\n cssClass: PivotTableConverter.rowGroupHeaderClass,\n isHeader: true,\n stickyStart,\n rowSpan: 1,\n colSpan,\n background,\n summary,\n };\n }\n\n private formatSummaryHeader(header: LmrPivotDataHeader, level: number): {title?: string; summary: string} {\n return this.transform.formatSummaryHeader?.(header, level) || {\n title: header?.title,\n summary: '',\n }\n }\n\n private formatRowHeader(title: string, level: number): string {\n return this.transform?.formatRowHeader?.(title, level) || title\n }\n\n private formatColumnHeader(title: string, level: number): string {\n return this.transform?.formatColumnHeader?.(title, level) || title\n }\n\n private getHeaderBackground(header: { color: string }, level: number): string {\n if (header?.color) {\n return shadeColor(header.color, this.getLevelOpacity(level));\n }\n\n return undefined;\n }\n\n private getLevelOpacity(level: number): number {\n return Math.min(80, 50 + level * 5) / 100;\n }\n\n private isRowLevelSticky(level: number): boolean {\n return this.data?.rowsConfig?.[level]?.sticky;\n }\n\n private isColumnLevelSticky(level: number): boolean {\n const maxLevel = Math.min(level, (this.data?.columnsConfig?.length ?? Number.MAX_SAFE_INTEGER) - 1);\n return this.data?.columnsConfig?.[maxLevel]?.sticky;\n }\n\n private getSummaryBackground(level: number): string {\n const index = Math.min(level, this.groupColors.length - 1);\n return this.groupColors[index];\n }\n\n private fillCellsForRow(cells: LmrPivotTableCell[][], row: number) {\n const rowIndexInCells = this.rowsTransformationArray[row];\n if (isNotNullOrUndefined(rowIndexInCells)) {\n for (let column = 0; column < this.columnsTransformationArray.length; column++) {\n const columnIndexInCells = this.columnsTransformationArray[column];\n if (isNotNullOrUndefined(columnIndexInCells)) {\n const value = this.data.values[row][column];\n const dataResources = this.dataResources?.[row]?.[column] || [];\n const formattedValue = this.aggregateOrFormatSingleValue(value, column);\n const stringValue = isNotNullOrUndefined(formattedValue) ? String(formattedValue) : '';\n cells[rowIndexInCells][columnIndexInCells] = {\n value: stringValue,\n dataResources,\n rowSpan: 1,\n colSpan: 1,\n cssClass: PivotTableConverter.dataClass,\n isHeader: false,\n };\n }\n }\n }\n }\n\n private getValueIndexForColumns(columns: number[]): number {\n return columns[0] % this.data.valueTitles.length;\n }\n\n private formatValueByValueType(value: any, valueIndex: number): any {\n const valueType = (this.data.valueTypes || [])[valueIndex];\n if (!valueType || valueType === LmrPivotValueType.Default) {\n return this.formatValueByConstraint(value, valueIndex);\n }\n\n if (\n [LmrPivotValueType.AllPercentage, LmrPivotValueType.ColumnPercentage, LmrPivotValueType.RowPercentage].includes(valueType)\n ) {\n return this.formatValueByPercentage(value);\n }\n\n return this.formatValueByConstraint(value, valueIndex);\n }\n\n private formatGroupedValueByValueType(value: any, rows: number[], columns: number[]): any {\n const valueIndex = columns[0] % this.data.valueTitles.length;\n const valueType = this.data.valueTypes && this.data.valueTypes[valueIndex];\n const valueTypeInfo = this.valueTypeInfo[valueIndex];\n if (!valueTypeInfo || !valueType || valueType === LmrPivotValueType.Default) {\n return this.formatValueByConstraint(value, valueIndex);\n }\n\n if (valueType === LmrPivotValueType.AllPercentage) {\n return this.formatValueByPercentage(divideValues(value, valueTypeInfo.sum));\n } else if (valueType === LmrPivotValueType.ColumnPercentage) {\n const columnsDividers = columns.reduce((dividers, column) => {\n dividers.push(valueTypeInfo.sumsColumns[column]);\n return dividers;\n }, []);\n const columnsDivider = aggregateDataValues(DataAggregationType.Sum, columnsDividers);\n return this.formatValueByPercentage(divideValues(value, columnsDivider));\n } else if (valueType === LmrPivotValueType.RowPercentage) {\n const rowsDividers = rows.reduce((dividers, row) => {\n dividers.push(valueTypeInfo.sumsRows[row]);\n return dividers;\n }, []);\n const rowsDivider = aggregateDataValues(DataAggregationType.Sum, rowsDividers);\n return this.formatValueByPercentage(divideValues(value, rowsDivider));\n }\n\n return this.formatValueByConstraint(value, valueIndex);\n }\n\n private formatValueByPercentage(value: any): string {\n return this.percentageConstraint.createDataValue(value).format();\n }\n\n private formatValueByConstraint(value: any, valueIndex: number): any {\n const constraint = this.data.valuesConstraints?.[valueIndex] || this.valueTypeInfo[valueIndex]?.defaultConstraint;\n if (constraint) {\n return constraint.createDataValue(value, this.constraintData).preview();\n }\n return value;\n }\n\n private fillCellsForGroupedRow(\n cells: LmrPivotTableCell[][],\n rows: number[],\n rowIndexInCells: number,\n background: string\n ) {\n for (let column = 0; column < this.columnsTransformationArray.length; column++) {\n const columnIndexInCells = this.columnsTransformationArray[column];\n if (isNotNullOrUndefined(columnIndexInCells)) {\n const {values, dataResources} = this.getGroupedValuesForRowsAndCols(rows, [column]);\n const formattedValue = this.aggregateAndFormatDataValues(values, rows, [column]);\n cells[rowIndexInCells][columnIndexInCells] = {\n value: String(formattedValue),\n dataResources,\n colSpan: 1,\n rowSpan: 1,\n cssClass: PivotTableConverter.groupDataClass,\n isHeader: false,\n background,\n };\n }\n }\n }\n\n private fillCellsForExpressionRow(\n cells: LmrPivotTableCell[][],\n expression: LmrPivotDataHeaderExpression,\n rowIndexInCells: number,\n background: string\n ) {\n for (let column = 0; column < this.columnsTransformationArray.length; column++) {\n const columnIndexInCells = this.columnsTransformationArray[column];\n if (isNotNullOrUndefined(columnIndexInCells)) {\n const {value, dataResources} = this.evaluateExpression(expression, column);\n const valueIndex = column % this.data.valueTitles.length;\n const formattedValue = this.formatValueByConstraint(value, valueIndex);\n cells[rowIndexInCells][columnIndexInCells] = {\n value: String(formattedValue),\n dataResources,\n colSpan: 1,\n rowSpan: 1,\n cssClass: PivotTableConverter.groupDataClass,\n isHeader: false,\n background,\n };\n }\n }\n }\n\n private evaluateExpression(expression: LmrPivotDataHeaderExpression, column: number): {value: number; dataResources: DataResource[] } {\n return (expression.operands || []).reduce((result, operand, index) => {\n const {value, dataResources } = this.evaluateOperand(operand, column)\n result.dataResources.push(...dataResources)\n switch (expression.operation) {\n case \"add\":\n result.value += value\n break;\n case \"subtract\":\n result.value = (index === 0 ? value : result.value - value)\n break;\n case 'multiply':\n result.value = index === 0 ? value : result.value * value\n break;\n case 'divide':\n result.value = index === 0 ? value : value ? result.value / value : result.value\n break;\n }\n\n return result\n } , {value: 0, dataResources: []})\n }\n\n private evaluateOperand(operand: LmrPivotDataHeaderOperand, column: number): {value: number; dataResources: DataResource[] } {\n switch (operand.type) {\n case \"expression\": return this.evaluateExpression(operand, column)\n case \"value\": return {value: operand.value, dataResources: []}\n case \"header\": {\n const rows = getTargetIndexesForHeaders(operand.headers);\n const {values, dataResources} = this.getGroupedValuesForRowsAndCols(rows, [column]);\n const {value} = this.aggregateDataValues(values, [column]);\n return {value, dataResources}\n }\n }\n }\n\n private getGroupedValuesForRowsAndCols(\n rows: number[],\n columns: number[]\n ): { values: any[]; dataResources: DataResource[] } {\n const values = [];\n const dataResources = [];\n for (const row of rows) {\n for (const column of columns) {\n const rowColumnValue = this.values[row][column];\n if (isArray(rowColumnValue)) {\n values.push(...rowColumnValue);\n } else {\n values.push(rowColumnValue);\n }\n dataResources.push(...(this.dataResources?.[row]?.[column] || []));\n }\n }\n return {values, dataResources};\n }\n\n private fillCellsByColumns(cells: LmrPivotTableCell[][]): HeaderGroupInfo[] {\n const columnGroups = [];\n this.iterateAndFillCellsByColumns(\n cells,\n columnGroups,\n this.data.columnHeaders,\n this.rowLevels,\n this.columnShowSums,\n 0\n );\n return columnGroups;\n }\n\n private iterateAndFillCellsByColumns(\n cells: LmrPivotTableCell[][],\n columnGroupsInfo: HeaderGroupInfo[],\n headers: LmrPivotDataHeader[],\n startIndex: number,\n showSums: boolean[],\n level: number,\n parentHeader?: LmrPivotDataHeader\n ) {\n let currentIndex = startIndex;\n const numberOfSums = Math.max(1, this.data.valueTitles.length);\n for (const header of headers) {\n const colSpan = getDirectHeaderChildCount(header, level, showSums, numberOfSums);\n cells[level][currentIndex] = {\n value: this.formatColumnHeader(header.title, level),\n cssClass: PivotTableConverter.columnHeaderClass,\n isHeader: true,\n rowSpan: 1,\n colSpan,\n stickyTop: this.isColumnLevelSticky(level),\n background: this.getHeaderBackground(header, level),\n constraint: header.constraint,\n label: header.attributeName,\n };\n\n if (header.children) {\n this.iterateAndFillCellsByColumns(\n cells,\n columnGroupsInfo,\n header.children,\n currentIndex,\n showSums,\n level + 1,\n header\n );\n } else if (isNotNullOrUndefined(header.targetIndex)) {\n this.fillCellsForColumn(cells, header.targetIndex);\n }\n\n currentIndex += getHeaderChildCount(header, level, showSums, numberOfSums);\n }\n\n if (showSums[level]) {\n const background = this.getSummaryBackground(level);\n const { title, summary } = this.formatSummaryHeader(parentHeader, level)\n const numberOfValues = this.data.valueTitles.length;\n const rowIndex = Math.max(level - 1, 0);\n const shouldAddValueHeaders = numberOfValues > 1;\n\n cells[rowIndex][currentIndex] = {\n value: title,\n constraint: parentHeader?.constraint,\n label: parentHeader?.attributeName,\n cssClass: PivotTableConverter.columnGroupHeaderClass,\n isHeader: true,\n stickyTop: this.isColumnLevelSticky(level),\n rowSpan: this.columnLevels - rowIndex - (shouldAddValueHeaders ? 1 : 0),\n colSpan: numberOfSums,\n background,\n summary,\n };\n\n if (numberOfValues > 0) {\n for (let i = 0; i < numberOfValues; i++) {\n const columnIndexInCells = currentIndex + i;\n if (shouldAddValueHeaders) {\n const valueTitle = this.data.valueTitles[i];\n cells[this.columnLevels - 1][columnIndexInCells] = {\n value: valueTitle,\n cssClass: PivotTableConverter.columnGroupHeaderClass,\n isHeader: true,\n stickyTop: this.isColumnLevelSticky(level),\n rowSpan: 1,\n colSpan: 1,\n background,\n };\n }\n\n const columnsIndexes = getTargetIndexesForHeaders(headers);\n const valueColumnsIndexes = columnsIndexes.filter(index => index % numberOfValues === i);\n const transformedColumnIndexes = valueColumnsIndexes\n .map(v => this.columnsTransformationArray[v])\n .filter(v => isNotNullOrUndefined(v));\n columnGroupsInfo[columnIndexInCells] = {background, indexes: transformedColumnIndexes, level};\n\n this.fillCellsForGroupedColumn(cells, valueColumnsIndexes, columnIndexInCells, background);\n }\n } else {\n columnGroupsInfo[currentIndex] = {background, indexes: [], level};\n }\n }\n }\n\n private fillCellsForGroupedColumn(\n cells: LmrPivotTableCell[][],\n columns: number[],\n columnIndexInCells: number,\n background: string\n ) {\n for (let row = 0; row < this.rowsTransformationArray.length; row++) {\n const rowIndexInCells = this.rowsTransformationArray[row];\n if (isNotNullOrUndefined(rowIndexInCells)) {\n const {values, dataResources} = this.getGroupedValuesForRowsAndCols([row], columns);\n const formattedValue = this.aggregateAndFormatDataValues(values, [row], columns);\n cells[rowIndexInCells][columnIndexInCells] = {\n value: String(formattedValue),\n dataResources,\n colSpan: 1,\n rowSpan: 1,\n cssClass: PivotTableConverter.groupDataClass,\n isHeader: false,\n background,\n };\n }\n }\n }\n\n private aggregateAndFormatDataValues(values: any[], rows: number[], columns: number[]): any {\n const {value, aggregation} = this.aggregateDataValues(values, columns);\n return aggregation === DataAggregationType.Join ? value : this.formatGroupedValueByValueType(value, rows, columns)\n }\n\n private aggregateDataValues(values: any[], columns: number[]): {value: any; aggregation: DataAggregationType} {\n const aggregation = this.aggregationByColumns(columns);\n if (aggregation === DataAggregationType.Join) {\n const valueIndex = this.getValueIndexForColumns(columns);\n const constraint = this.data.valuesConstraints?.[valueIndex] || this.valueTypeInfo[valueIndex]?.defaultConstraint;\n return {value: aggregateDataValues(aggregation, values, constraint, false, this.constraintData), aggregation};\n }\n return {value: aggregateDataValues(aggregation, values), aggregation};\n }\n\n private aggregationByColumns(columns: number[]): DataAggregationType {\n const valueIndex = columns[0] % this.data.valueTitles.length;\n const aggregation = this.data.valueAggregations?.[valueIndex];\n return isValueAggregation(aggregation) ? aggregation : DataAggregationType.Sum;\n }\n\n private fillCellsForColumn(cells: LmrPivotTableCell[][], column: number) {\n const columnIndexInCells = this.columnsTransformationArray[column];\n if (isNotNullOrUndefined(columnIndexInCells)) {\n for (let row = 0; row < this.rowsTransformationArray.length; row++) {\n const rowIndexInCells = this.rowsTransformationArray[row];\n if (isNotNullOrUndefined(rowIndexInCells)) {\n const value = this.data.values[row][column];\n const dataResources = this.dataResources?.[row]?.[column] || [];\n const formattedValue = this.aggregateOrFormatSingleValue(value, column);\n const stringValue = isNotNullOrUndefined(formattedValue) ? String(formattedValue) : '';\n cells[rowIndexInCells][columnIndexInCells] = {\n value: stringValue,\n dataResources,\n rowSpan: 1,\n colSpan: 1,\n cssClass: PivotTableConverter.dataClass,\n isHeader: false,\n };\n }\n }\n }\n }\n\n private aggregateOrFormatSingleValue(value: any, column: number): any {\n const aggregation = this.aggregationByColumns([column]);\n const valueIndex = this.getValueIndexForColumns([column]);\n if (aggregation === DataAggregationType.Join) {\n const constraint = this.data.valuesConstraints?.[valueIndex] || this.valueTypeInfo[valueIndex]?.defaultConstraint;\n return aggregateDataValues(aggregation, [value], constraint, false, this.constraintData);\n }\n return this.formatValueByValueType(value, valueIndex);\n }\n\n private fillCellsByGroupIntersection(\n cells: LmrPivotTableCell[][],\n rowGroupsInfo: HeaderGroupInfo[],\n columnGroupsInfo: HeaderGroupInfo[]\n ) {\n const rowsCount = cells.length;\n const columnsCount = (cells[0] && cells[0].length) || 0;\n\n for (let i = 0; i < rowGroupsInfo.length; i++) {\n const rowGroupInfo = rowGroupsInfo[i];\n if (rowGroupInfo) {\n for (let j = 0; j < columnGroupsInfo.length; j++) {\n if (columnGroupsInfo[j]) {\n // it's enough to fill group values only from row side\n const {rowsIndexes, columnsIndexes} = this.getValuesIndexesFromCellsIndexes(\n rowGroupInfo.indexes,\n columnGroupsInfo[j].indexes\n );\n const {values, dataResources} = this.getGroupedValuesForRowsAndCols(rowsIndexes, columnsIndexes);\n const formattedValue = this.aggregateAndFormatDataValues(values, rowsIndexes, columnsIndexes);\n cells[i][j] = {\n value: String(formattedValue),\n dataResources,\n colSpan: 1,\n rowSpan: 1,\n cssClass: PivotTableConverter.groupDataClass,\n isHeader: false,\n };\n }\n }\n\n this.fillRowWithColor(cells, i, rowGroupInfo, columnsCount);\n }\n }\n\n for (let j = 0; j < columnGroupsInfo.length; j++) {\n if (columnGroupsInfo[j]) {\n this.fillColumnWithColor(cells, j, columnGroupsInfo[j], rowGroupsInfo, rowsCount);\n }\n }\n }\n\n private getValuesIndexesFromCellsIndexes(\n rows: number[],\n columns: number[]\n ): { rowsIndexes: number[]; columnsIndexes: number[] } {\n const rowsIndexes = rows\n .map(row => this.rowsTransformationArray.findIndex(tRow => tRow === row))\n .filter(index => index >= 0);\n const columnsIndexes = columns\n .map(column => this.columnsTransformationArray.findIndex(tColumn => tColumn === column))\n .filter(index => index >= 0);\n return {rowsIndexes, columnsIndexes};\n }\n\n private fillRowWithColor(\n cells: LmrPivotTableCell[][],\n row: number,\n rowGroupInfo: HeaderGroupInfo,\n columnsCount: number\n ) {\n for (let i = this.rowLevels; i < columnsCount; i++) {\n cells[row][i] && (cells[row][i].background = rowGroupInfo.background);\n }\n }\n\n private fillColumnWithColor(\n cells: LmrPivotTableCell[][],\n column: number,\n columnGroupInfo: HeaderGroupInfo,\n rowGroupsInfo: HeaderGroupInfo[],\n rowCount: number\n ) {\n for (let i = this.columnLevels; i < rowCount; i++) {\n const rowGroupInfo = rowGroupsInfo[i];\n if (!rowGroupInfo || rowGroupInfo.level > columnGroupInfo.level) {\n cells[i][column] && (cells[i][column].background = columnGroupInfo.background);\n }\n }\n }\n\n private initCells(): LmrPivotTableCell[][] {\n const rows = this.getRowsCount() + this.columnLevels;\n const columns = this.getColumnsCount() + this.rowLevels;\n\n const matrix: LmrPivotTableCell[][] = [];\n for (let i = 0; i < rows; i++) {\n matrix[i] = [];\n for (let j = 0; j < columns; j++) {\n if (i >= this.columnLevels && j >= this.rowLevels) {\n const isDataClass = this.rowsTransformationArray.includes(i) && this.columnsTransformationArray.includes(j);\n matrix[i][j] = {\n value: '',\n dataResources: [],\n cssClass: isDataClass ? PivotTableConverter.dataClass : PivotTableConverter.groupDataClass,\n rowSpan: 1,\n colSpan: 1,\n isHeader: false,\n };\n } else {\n matrix[i][j] = undefined;\n }\n }\n }\n\n if (this.rowLevels > 0 && this.columnLevels > 0) {\n for (let j = 0; j < this.rowLevels; j++) {\n const rowHeaderAttribute = this.data.rowHeaderAttributes[j];\n if (rowHeaderAttribute) {\n const titleColSpan = this.nonStickyColumnIndex || this.columnLevels\n matrix[0][j] = {\n value: rowHeaderAttribute.title,\n cssClass: PivotTableConverter.rowAttributeHeaderClass,\n isHeader: true,\n rowSpan: 1,\n colSpan: titleColSpan,\n stickyTop: this.isColumnLevelSticky(0),\n stickyStart: this.isRowLevelSticky(j),\n background: rowHeaderAttribute.color,\n };\n\n if (this.columnLevels - titleColSpan > 0) {\n matrix[this.nonStickyColumnIndex][j] = {\n value: '',\n cssClass: PivotTableConverter.rowAttributeHeaderClass,\n isHeader: true,\n rowSpan: 1,\n colSpan: this.columnLevels - titleColSpan,\n background: rowHeaderAttribute.color,\n stickyStart: this.isRowLevelSticky(j),\n };\n }\n\n } else {\n for (let i = 0; i < this.columnLevels; i++) {\n matrix[i][j] = {\n value: '',\n cssClass: PivotTableConverter.emptyClass,\n rowSpan: 1,\n colSpan: 1,\n stickyStart: this.isRowLevelSticky(j),\n stickyTop: this.isColumnLevelSticky(i),\n isHeader: false,\n }\n }\n }\n }\n }\n\n return matrix;\n }\n\n private getRowsCount(): number {\n if (this.data.rowHeaders.length === 0 && (this.data.valueTitles || []).length > 0) {\n return 1;\n }\n return getHeadersChildCount(this.data.rowHeaders, this.rowShowSums);\n }\n\n private getColumnsCount(): number {\n if (this.data.columnHeaders.length === 0 && (this.data.valueTitles || []).length > 0) {\n return 1;\n }\n const numberOfSums = Math.max(1, (this.data.valueTitles || []).length);\n return getHeadersChildCount(this.data.columnHeaders, this.columnShowSums, numberOfSums);\n }\n}\n\nfunction preparePivotData(\n data: LmrPivotStemData,\n constraintData: ConstraintData,\n valueTypeInfo: ValueTypeInfo[]\n): LmrPivotStemData {\n const numberOfSums = Math.max(1, (data.valueTitles || []).length);\n const values = computeValuesByValueType(data.values, data.valueTypes, numberOfSums, valueTypeInfo);\n const sorted = sortPivotData({...data, values}, constraintData);\n return fillExpressionsToData(sorted)\n}\n\nfunction fillExpressionsToData(data: LmrPivotStemData): LmrPivotStemData {\n return {\n ...data,\n rowHeaders: fillExpressionsToHeaders(data.rowHeaders, data.rowsConfig, 0),\n columnHeaders: fillExpressionsToHeaders(data.columnHeaders, data.columnsConfig, 0),\n }\n}\n\nfunction fillExpressionsToHeaders(headers: LmrPivotDataHeader[], configs: LmrPivotDimensionConfig[], index: number): LmrPivotDataHeader[] {\n const expressions = configs?.[index]?.expressions || []\n const headersCopy = [...(headers || [])]\n for (const expression of expressions) {\n const dataHeaderExpression = extendPivotExpression(expression, headers)\n if (dataHeaderExpression.lastHeaderIndex >= 0) {\n const lastHeaderIndex = dataHeaderExpression.lastHeaderIndex\n const newHeader: LmrPivotDataHeader = {...headersCopy[lastHeaderIndex], expressions: [...(headersCopy[lastHeaderIndex].expressions || []), dataHeaderExpression]}\n headersCopy.splice(lastHeaderIndex, 1, newHeader)\n }\n }\n\n if (configs?.[index + 1]) {\n for (let i = 0; i < headersCopy.length; i++) {\n headersCopy.splice(i, 1, {...headersCopy[i], children: fillExpressionsToHeaders(headersCopy[i].children, configs, index + 1)})\n }\n }\n\n return headersCopy\n}\n\nfunction extendPivotExpression(expression: LmrPivotExpression, headers: LmrPivotDataHeader[]): LmrPivotDataHeaderExpression {\n const dataHeaderOperands: LmrPivotDataHeaderOperand[] = [];\n let lastHeaderIndex: number = -1\n\n function traverse(operands: LmrPivotOperand[]): void {\n for (const operand of operands){\n if (operand.type === 'header') {\n const indexes = getOperandIndexesInHeaders(operand, headers)\n lastHeaderIndex = Math.max(lastHeaderIndex, ...indexes)\n const operandHeaders = indexes.map(index => headers[index])\n dataHeaderOperands.push({...operand, headers: operandHeaders});\n } else if (operand.type === 'expression') {\n traverse(operand.operands);\n } else {\n dataHeaderOperands.push(operand)\n }\n }\n }\n\n traverse(expression.operands);\n\n return {...expression, lastHeaderIndex, operands: dataHeaderOperands};\n}\n\nfunction getOperandIndexesInHeaders(operand: LmrPivotHeaderOperand, headers: LmrPivotDataHeader[]): number[] {\n return (headers || []).reduce<number[]>((indexes, header, index) => {\n if (operandContainsHeader(operand, header)) {\n indexes.push(index)\n }\n return indexes\n }, [])\n}\n\nfunction operandContainsHeader(operand: LmrPivotHeaderOperand, header: LmrPivotDataHeader): boolean {\n return header.title.match(new RegExp(operand.value))?.length > 0\n}\n\nfunction computeValuesByValueType(\n values: any[][],\n valueTypes: LmrPivotValueType[],\n numValues: number,\n valueTypeInfo: ValueTypeInfo[]\n): any[][] {\n const rowsIndexes = [...Array(values.length).keys()];\n const modifiedValues = deepObjectCopy(values);\n\n for (let i = 0; i < numValues; i++) {\n const valueType = valueTypes && valueTypes[i];\n if (!valueType || valueType === LmrPivotValueType.Default) {\n continue;\n }\n\n const columnsCount = (values[0] && values[0].length) || 0;\n const columnIndexes = [...Array(columnsCount).keys()].filter(key => key % numValues === i);\n const info = valueTypeInfo[i];\n\n for (const row of rowsIndexes) {\n for (const column of columnIndexes) {\n if (valueType === LmrPivotValueType.AllPercentage) {\n modifiedValues[row][column] = divideValues(values[row][column], info.sum);\n } else if (valueType === LmrPivotValueType.RowPercentage) {\n modifiedValues[row][column] = divideValues(values[row][column], info.sumsRows[row]);\n } else if (valueType === LmrPivotValueType.ColumnPercentage) {\n modifiedValues[row][column] = divideValues(values[row][column], info.sumsColumns[column]);\n }\n }\n }\n }\n\n return modifiedValues;\n}\n\nfunction getValuesTypeInfo(values: any[][], valueTypes: LmrPivotValueType[], numValues: number): ValueTypeInfo[] {\n const valueTypeInfo = [];\n const rowsIndexes = [...Array(values.length).keys()];\n\n for (let i = 0; i < numValues; i++) {\n const valueType = valueTypes && valueTypes[i];\n const columnsCount = (values[0] && values[0].length) || 0;\n const columnIndexes = [...Array(columnsCount).keys()].filter(key => key % numValues === i);\n\n valueTypeInfo[i] = getValueTypeInfo(values, valueType, rowsIndexes, columnIndexes);\n }\n\n return valueTypeInfo;\n}\n\nfunction getValueTypeInfo(values: any[][], type: LmrPivotValueType, rows: number[], columns: number[]): ValueTypeInfo {\n const containsDecimal = containsDecimalValue(values, rows, columns);\n const valueTypeInfo: ValueTypeInfo = {\n defaultConstraint: containsDecimal ? new NumberConstraint({decimals: 2}) : null,\n };\n\n if (type === LmrPivotValueType.AllPercentage) {\n return {...valueTypeInfo, sum: getNumericValuesSummary(values, rows, columns)};\n } else if (type === LmrPivotValueType.RowPercentage) {\n return {\n ...valueTypeInfo,\n sumsRows: rows.reduce((arr, row) => {\n arr[row] = getNumericValuesSummary(values, [row], columns);\n return arr;\n }, []),\n };\n } else if (type === LmrPivotValueType.ColumnPercentage) {\n return {\n ...valueTypeInfo,\n sumsColumns: columns.reduce((arr, column) => {\n arr[column] = getNumericValuesSummary(values, rows, [column]);\n return arr;\n }, []),\n };\n }\n\n return {...valueTypeInfo};\n}\n\nfunction containsDecimalValue(values: any[][], rows: number[], columns: number[]): boolean {\n for (const row of rows) {\n for (const column of columns) {\n if (isValueDecimal(values[row][column])) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction isValueDecimal(value: string): boolean {\n if (isNullOrUndefined(value)) {\n return false;\n }\n\n if (isNumeric(value)) {\n return toNumber(value) % 1 !== 0;\n }\n return false;\n}\n\nfunction createTransformationMap(\n headers: LmrPivotDataHeader[],\n showSums: boolean[],\n additionalNum: number,\n numberOfSums: number\n): number[] {\n const array = [];\n iterateThroughTransformationMap(headers, additionalNum, array, 0, showSums, numberOfSums);\n return array;\n}\n\nfunction iterateThroughTransformationMap(\n headers: LmrPivotDataHeader[],\n additionalNum: number,\n array: number[],\n level: number,\n showSums: boolean[],\n numberOfSums: number\n) {\n let additional = additionalNum;\n for (let i = 0; i < headers.length; i++) {\n const header = headers[i];\n if (header.children) {\n iterateThroughTransformationMap(header.children, additional, array, level + 1, showSums, numberOfSums);\n additional += getHeaderChildCount(header, level, showSums, numberOfSums);\n } else if (isNotNullOrUndefined(header.targetIndex)) {\n array[header.targetIndex] = i + additional;\n additional += (header.expressions || []).length;\n }\n }\n}\n\nfunction getTargetIndexesForHeaders(headers: LmrPivotDataHeader[]): number[] {\n const allRows = (headers || []).reduce((rows, header) => {\n rows.push(...getTargetIndexesForHeader(header));\n return rows;\n }, []);\n return uniqueValues<number>(allRows);\n}\n\nfunction getTargetIndexesForHeader(pivotDataHeader: LmrPivotDataHeader): number[] {\n if (pivotDataHeader.children) {\n return pivotDataHeader.children.reduce((rows, header) => {\n rows.push(...getTargetIndexesForHeader(header));\n return rows;\n }, []);\n }\n return [pivotDataHeader.targetIndex];\n}\n\nfunction getHeadersChildCount(headers: LmrPivotDataHeader[], showSums: boolean[], numberOfSums = 1): number {\n return (headers || []).reduce(\n (sum, header) => sum + getHeaderChildCount(header, 0, showSums, numberOfSums),\n showSums[0] ? numberOfSums : 0\n );\n}\n\nfunction getHeaderChildCount(\n pivotDataHeader: LmrPivotDataHeader,\n level: number,\n showSums: boolean[],\n numberOfSums = 1,\n): number {\n const numExpressions = (pivotDataHeader.expressions || []).length\n if (pivotDataHeader.children) {\n return pivotDataHeader.children.reduce(\n (sum, header) => sum + getHeaderChildCount(header, level + 1, showSums, numberOfSums),\n (showSums[level + 1] ? numberOfSums : 0) + numExpressions\n );\n }\n return 1 + numExpressions;\n}\n\nfunction getDirectHeaderChildCount(\n pivotDataHeader: LmrPivotDataHeader,\n level: number,\n showSums: boolean[],\n numberOfSums = 1\n): number {\n if (pivotDataHeader.children) {\n return pivotDataHeader.children.reduce(\n (sum, header) => sum + getHeaderChildCount(header, level + 1, showSums, numberOfSums),\n 0\n );\n }\n return 1;\n}\n\nexport function sortPivotData(data: LmrPivotStemData, constraintData: ConstraintData): LmrPivotStemData {\n const rowSorts = (data.rowsConfig || []).map(config => config.sort)\n const columnSorts = (data.columnsConfig || []).map(config => config.sort)\n return {\n ...data,\n rowHeaders: sortPivotRowDataHeaders(data.rowHeaders, rowSorts, data, constraintData),\n columnHeaders: sortPivotColumnDataHeaders(data.columnHeaders, columnSorts, data, constraintData),\n };\n}\n\nfunction sortPivotRowDataHeaders(\n rowHeaders: LmrPivotDataHeader[],\n rowSorts: LmrPivotSort[],\n pivotData: LmrPivotStemData,\n constraintData: ConstraintData\n): LmrPivotDataHeader[] {\n return sortPivotDataHeadersRecursive(\n rowHeaders,\n 0,\n rowSorts,\n pivotData.columnHeaders,\n pivotData.values,\n pivotData.valueTitles || [],\n true,\n constraintData\n );\n}\n\nfunction sortPivotColumnDataHeaders(\n columnHeaders: LmrPivotDataHeader[],\n columnSorts: LmrPivotSort[],\n pivotData: LmrPivotStemData,\n constraintData: ConstraintData\n): LmrPivotDataHeader[] {\n return sortPivotDataHeadersRecursive(\n columnHeaders,\n 0,\n columnSorts,\n pivotData.rowHeaders,\n pivotData.values,\n pivotData.valueTitles || [],\n false,\n constraintData\n );\n}\n\nfunction sortPivotDataHeadersRecursive(\n headers: LmrPivotDataHeader[],\n index: number,\n sorts: LmrPivotSort[],\n otherSideHeaders: LmrPivotDataHeader[],\n values: any[][],\n valueTitles: string[],\n isRows: boolean,\n constraintData: ConstraintData\n): LmrPivotDataHeader[] {\n // we don't want to sort values headers\n if (!isRows && isValuesHeaders(headers, valueTitles)) {\n return headers;\n }\n const sort = sorts && sorts[index];\n const constraint = getConstraintForSort(sort, headers);\n const valuesMap = createHeadersValuesMap(headers, sort, otherSideHeaders, values, valueTitles, isRows);\n return headers\n .map(header => ({\n ...header,\n children:\n header.children &&\n sortPivotDataHeadersRecursive(\n header.children,\n index + 1,\n sorts,\n otherSideHeaders,\n values,\n valueTitles,\n isRows,\n constraintData\n ),\n }))\n .sort((r1, r2) => {\n const r1Value = constraint.createDataValue(valuesMap[r1.title], constraintData);\n const r2Value = constraint.createDataValue(valuesMap[r2.title], constraintData);\n const multiplier = !sort || sort.asc ? 1 : -1;\n return r1Value.compareTo(r2Value) * multiplier;\n });\n}\n\nfunction getConstraintForSort(sort: LmrPivotSort, headers: LmrPivotDataHeader[]): Constraint {\n if ((sort?.list?.values || []).length > 0) {\n // sort is done by values in columns\n return new NumberConstraint({});\n }\n return ((headers || [])[0] && (headers || [])[0].constraint) || new UnknownConstraint();\n}\n\nfunction isValuesHeaders(headers: LmrPivotDataHeader[], valueTitles: string[]): boolean {\n return (\n valueTitles.length > 1 &&\n (headers || []).every(\n (header, index) => isNotNullOrUndefined(header.targetIndex) && header.title === valueTitles[index]\n )\n );\n}\n\nfunction createHeadersValuesMap(\n headers: LmrPivotDataHeader[],\n sort: LmrPivotSort,\n otherSideHeaders: LmrPivotDataHeader[],\n values: any[][],\n valueTitles: string[],\n isRows: boolean\n): Record<string, any> {\n const sortTargetIndexes = sortValueTargetIndexes(sort, otherSideHeaders, valueTitles);\n if (!sortTargetIndexes) {\n return (headers || []).reduce((valuesMap, header) => {\n valuesMap[header.title] = header.title;\n return valuesMap;\n }, {});\n }\n\n return (headers || []).reduce((valuesMap, header) => {\n const rows = isRows ? getTargetIndexesForHeader(header) : sortTargetIndexes;\n const columns = isRows ? sortTargetIndexes : getTargetIndexesForHeader(header);\n valuesMap[header.title] = getNumericValuesSummary(values, rows, columns);\n return valuesMap;\n }, {});\n}\n\nfunction getNumericValuesSummary(values: any[][], rows: number[], columns: number[]): number {\n let sum = 0;\n for (const row of rows) {\n for (const column of columns) {\n const value = values[row][column];\n if (isNotNullOrUndefined(value) && isNumeric(value)) {\n sum += toNumber(value);\n }\n }\n }\n return sum;\n}\n\nfunction sortValueTargetIndexes(\n sort: LmrPivotSort,\n otherSideHeaders: LmrPivotDataHeader[],\n valueTitles: string[]\n): number[] | null {\n if (sort && sort.list) {\n let valueIndex = valueTitles.findIndex(title => title === sort.list.valueTitle);\n if (valueIndex === -1) {\n if (valueTitles.length === 1) {\n valueIndex = 0;\n } else {\n return null;\n }\n }\n\n let pivotHeader: LmrPivotDataHeader = null;\n let currentOtherSideHeaders = otherSideHeaders;\n for (const value of sort.list.values || []) {\n if (value.isSummary) {\n const indexes = getTargetIndexesForHeaders(currentOtherSideHeaders || []) || [];\n return filterIndexesByMod(indexes, valueTitles.length, valueIndex);\n }\n\n pivotHeader = (currentOtherSideHeaders || []).find(header => header.title === value.title);\n if (!pivotHeader) {\n break;\n }\n\n currentOtherSideHeaders = pivotHeader.children || [];\n }\n\n if (pivotHeader) {\n const targetIndexes = isNotNullOrUndefined(pivotHeader.targetIndex)\n ? [pivotHeader.targetIndex]\n : getTargetIndexesForHeaders(currentOtherSideHeaders);\n return filterIndexesByMod(targetIndexes, valueTitles.length, valueIndex);\n }\n }\n\n return null;\n}\n\nfunction filterIndexesByMod(indexes: number[], mod: number, value: number): number[] {\n return (indexes || []).filter(index => index % mod === value);\n}\n\nfunction divideValues(value: any, divider: any): number {\n if (isNullOrUndefined(value)) {\n return null;\n }\n\n if (isNumeric(value) && isNumeric(divider)) {\n if (divider !== 0) {\n return value / divider;\n } else {\n return 0;\n }\n }\n\n return null;\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\n@Directive({ selector: '[lmr-empty-tables-tmp]' })\nexport class LmrEmptyTablesTemplateDirective {\n constructor(public template: TemplateRef<any>) { }\n}\n\n@Directive({ selector: '[lmr-table-cell-tmp]' })\nexport class LmrTableCellTemplateDirective {\n constructor(public template: TemplateRef<any>) { }\n}\n","/*\n * Lumeer: Modern Data Definition and Processing Platform\n *\n * Copyright (C) since 2017 Lumeer.io, s.r.o. and/or its affiliates.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport {Pipe, PipeTransform} from '@angular/core';\n\nimport {LmrPivotData} from '../util/lmr-pivot-data';\n\n@Pipe({\n name: 'pivotDataEmpty',\n})\nexport class PivotDataEmptyPipe implements PipeTransform {\n public transform(value: LmrPivotData): boolean {\n let anythingToDisplay = false;\n\n value?.data?.forEach(d => {\n anythingToDisplay = anythingToDisplay || d.columnHeaders?.length > 0 || d.rowHeaders?.length > 0;\n });\n\n return !anythingToDisplay;\n }\n}\n","/*\n * Lumeer: Modern Data Definition and Processing Platform\n *\n * Copyright (C) since 2017 Lumeer.io, s.r.o. and/or its affiliates.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport {Pipe, PipeTransform} from '@angular/core';\n\nimport {isNotNullOrUndefined} from '@lumeer/utils';\n\nimport {LmrPivotTableCell} from '../util/lmr-pivot-table';\n\n@Pipe({\n name: 'pivotTableCellHasValue',\n})\nexport class PivotTableCellHasValuePipe implements PipeTransform {\n public transform(cell: LmrPivotTableCell): boolean {\n return isNotNullOrUndefined(cell.value) && String(cell.value).trim() !== '';\n }\n}\n","/*\n * Lumeer: Modern Data Definition and Processing Platform\n *\n * Copyright (C) since 2017 Lumeer.io, s.r.o. and/or its affiliates.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n */\nimport {Injectable, Pipe, PipeTransform} from '@angular/core';\nimport {contrastColor} from '../util/pivot-util';\n\n\n@Pipe({\n name: 'contrastColor',\n})\n@Injectable({\n providedIn: 'root',\n})\nexport class ContrastColorPipe implements PipeTransform {\n public transform(color: string, returnCodes?: {dark: string; light: string}, opacity?: number): string {\n return contrastColor(color, returnCodes, opacity);\n }\n}\n","import {ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, TemplateRef} from '@angular/core';\nimport {LmrPivotConfig, LmrPivotTransform} from './util/lmr-pivot-config';\nimport {Collection, ConstraintData, DocumentsAndLinksData, LinkType, Query} from '@lumeer/data-filters';\nimport {PivotDataConverter} from './util/pivot-data-converter';\nimport {LmrPivotData} from './util/lmr-pivot-data';\nimport {asyncScheduler, BehaviorSubject, filter, map, Observable, tap, throttleTime} from 'rxjs';\nimport {LmrPivotTable, LmrPivotTableCell} from './util/lmr-pivot-table';\nimport {PivotTableConverter} from './util/pivot-table-converter';\nimport {LmrEmptyTablesTemplateDirective, LmrTableCellTemplateDirective} from './directives/lmr-templates.directive';\n\ninterface Data {\n collections: Collection[];\n linkTypes: LinkType[];\n data: DocumentsAndLinksData;\n query: Query;\n constraintData: ConstraintData;\n config: LmrPivotConfig;\n transform: LmrPivotTransform;\n}\n\n@Component({\n selector: 'lmr-pivot-table',\n templateUrl: 'lmr-pivot-table.component.html',\n styleUrls: ['./lmr-pivot-table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LmrPivotTableComponent implements OnInit, OnChanges {\n\n @Input()\n public collections: Collection[];\n\n @Input()\n public data: DocumentsAndLinksData;\n\n @Input()\n public linkTypes: LinkType[];\n\n @Input()\n public query: Query;\n\n @Input()\n public constraintData: ConstraintData;\n\n @Input()\n public config: LmrPivotConfig;\n\n @Input()\n public transform: LmrPivotTransform;\n\n @Input()\n public emptyTablesTemplateInput: TemplateRef<any>;\n\n @Input()\n public tableCellTemplateInput: TemplateRef<any>;\n\n @Output()\n public cellClick = new EventEmitter<LmrPivotTableCell>();\n\n @Output()\n public pivotDataChange = new EventEmitter<LmrPivotData>();\n\n @Output()\n public pivotTablesChange = new EventEmitter<LmrPivotTable[]>();\n\n @ContentChild(LmrEmptyTablesTemplateDirective, { read: TemplateRef }) emptyTablesTemplate: TemplateRef<any>;\n @ContentChild(LmrTableCellTemplateDirective, { read: TemplateRef }) tableCellTemplate: TemplateRef<any>;\n\n private readonly pivotTransformer = new PivotDataConverter();\n private readonly pivotTableConverter: PivotTableConverter = new PivotTableConverter();\n\n private dataSubject = new BehaviorSubject<Data>(null);\n\n public pivotData$: Observable<LmrPivotData>;\n public pivotTables$: Observable<LmrPivotTable[]>;\n\n public ngOnInit() {\n const observable = this.dataSubject.pipe(filter(data => !!data));\n\n this.pivotData$ = observable.pipe(\n throttleTime(200, asyncScheduler, {trailing: true, leading: true}),\n map(data => this.handleData(data)),\n tap(data => this.pivotDataChange.emit(data)),\n );\n\n this.pivotTables$ = this.pivotData$.pipe(\n map(data => this.pivotTableConverter.createTables(data, this.transform)),\n tap(tables => this.pivotTablesChange.emit(tables))\n );\n }\n\n private handleData(data: Data): LmrPivotData {\n return this.pivotTransformer.createData(\n data.config,\n data.transform,\n data.collections,\n data.linkTypes,\n data.data,\n data.query,\n data.constraintData\n );\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n this.dataSubject.next({\n config: this.config,\n transform: this.transform,\n collections: this.collections,\n linkTypes: this.linkTypes,\n data: this.data,\n query: this.query,\n constraintData: this.constraintData,\n });\n }\n\n}\n","<ng-container *ngIf=\"{pivotTables: pivotTables$ | async, pivotData: pivotData$ | async} as data\">\n <ng-container *ngIf=\"data.pivotTables?.length && !(data.pivotData | pivotDataEmpty)\">\n <table *ngFor=\"let pivotTable of data.pivotTables; let first\"\n class=\"table table-without-padding table-borderless table-md\"\n [class.mt-4]=\"!first\">\n <tr *ngFor=\"let rowCells of pivotTable.cells; let rowIndex = index\">\n\n <ng-container *ngFor=\"let cell of rowCells; let cellIndex = index\">\n <td *ngIf=\"cell && {hasValue: cell | pivotTableCellHasValue} as cellData\"\n class=\"cell {{cell.constraint ? (cell.constraint.type | lowercase) : ''}} text-truncate\"\n [style.max-width.px]=\"300\"\n [class.sticky-start]=\"cell.stickyStart\"\n [class.sticky-top]=\"cell.stickyTop\"\n [rowSpan]=\"cell.rowSpan\"\n [colSpan]=\"cell.colSpan\"\n [style.top.px]=\"cell.stickyTop ? (rowIndex * 40) : undefined\"\n [style.left.px]=\"cell.stickyStart ? (cellIndex * 150) : undefined\"\n [ngClass]=\"cell.cssClass\"\n [style.background]=\"cell.background\"\n [style.color]=\"cell.background && (cell.background | contrastColor)\">\n <ng-container *ngIf=\"cell.summary\">\n <ng-container *ngIf=\"cellData.hasValue\">\n <div class=\"d-flex align-items-center h-100\">\n <span class=\"summary me-2\">{{cell.summary}}</span>\n <ng-template #defaultTableCellTemplate>\n <span class=\"flex-grow-1 h-100 text-truncate d-inline-block\">\n {{ cell.value }}\n </span>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"tableCellTemplate || tableCellTemplateInput || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!cellData.hasValue\">\n <span class=\"d-inline-block summary\">{{cell.summary}}</span>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!cell.summary\">\n <ng-container *ngIf=\"cellData.hasValue\">\n <ng-template #defaultTableCellTemplate>\n <span class=\"d-inline-block\">\n {{ cell.value }}\n </span>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"tableCellTemplate || tableCellTemplateInput || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!cellData.hasValue\">&nbsp;</ng-container>\n </ng-container>\n </td>\n </ng-container>\n </tr>\n </table>\n </ng-container>\n\n <ng-container *ngIf=\"!data.pivotTables?.length || (data.pivotData | pivotDataEmpty)\">\n <ng-template #defaultEmptyTablesTemplate>\n <div>&nbsp;</div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"emptyTablesTemplate || emptyTablesTemplateInput || defaultEmptyTablesTemplate\"\n [ngTemplateOutletContext]=\"{ }\">\n </ng-template>\n </ng-container>\n</ng-container>\n","import {ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, OnChanges, Output, SimpleChanges, TemplateRef} from '@angular/core';\nimport {LmrPivotConfig, LmrPivotTransform} from './util/lmr-pivot-config';\nimport {Attribute, AttributesResourceType, Collection, ConstraintData, DocumentModel, DocumentsAndLinksData, generateId, LanguageTag, Query} from '@lumeer/data-filters';\nimport {LmrPivotData} from './util/lmr-pivot-data';\nimport {LmrPivotTable, LmrPivotTableCell} from './util/lmr-pivot-table';\nimport {LmrSimplePivotConfig} from './util/lmr-simple-pivot-config';\nimport {LmrEmptyTablesTemplateDirective, LmrTableCellTemplateDirective} from './directives/lmr-templates.directive';\n\n@Component({\n selector: 'lmr-simple-pivot-table',\n templateUrl: 'lmr-simple-pivot-table.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LmrSimplePivotTableComponent implements OnChanges {\n\n @Input()\n public rows: Record<string, any>[];\n\n @Input()\n public attributes: Attribute[];\n\n @Input()\n public color: string;\n\n @Input()\n public config: LmrSimplePivotConfig;\n\n @Input()\n public transform: LmrPivotTransform;\n\n @Input()\n public locale: LanguageTag;\n\n @Output()\n public cellClick = new EventEmitter<LmrPivotTableCell>();\n\n @Output()\n public pivotDataChange = new EventEmitter<LmrPivotData>();\n\n @Output()\n public pivotTablesChange = new EventEmitter<LmrPivotTable[]>();\n\n @ContentChild(LmrEmptyTablesTemplateDirective, { read: TemplateRef }) emptyTablesTemplate: TemplateRef<any>;\n @ContentChild(LmrTableCellTemplateDirective, { read: TemplateRef }) tableCellTemplate: TemplateRef<any>;\n\n public readonly collectionId = generateId()\n public readonly query: Query = {stems: [{collectionId: this.collectionId}]};\n\n public collection: Collection = this.createCollection();\n public pivotConfig: LmrPivotConfig = this.createConfig();\n public data: DocumentsAndLinksData = this.createRows();\n public constraintData: ConstraintData;\n\n public ngOnChanges(changes: SimpleChanges) {\n if (changes['rows']) {\n this.data = this.createRows();\n }\n if (changes['attributes'] || changes['color']) {\n this.collection = this.createCollection();\n }\n if (changes['config']) {\n this.pivotConfig = this.createConfig();\n }\n this.constraintData = {\n locale: this.locale || LanguageTag.USA,\n }\n }\n\n private createCollection(): Collection {\n return {\n id: this.collectionId,\n attributes: (this.attributes || []),\n color: this.color,\n }\n }\n\n private createConfig(): LmrPivotConfig {\n return {\n stemsConfigs: [{\n stem: this.query.stems[0],\n rowAttributes: (this.config?.rowAttributes || []).map(attribute => ({...attribute, resourceId: this.collectionId, resourceIndex: 0, resourceType: AttributesResourceType.Collection})),\n columnAttributes: (this.config?.columnAttributes || []).map(attribute => ({...attribute, resourceId: this.collectionId, resourceIndex: 0, resourceType: AttributesResourceType.Collection})),\n valueAttributes: (this.config?.valueAttributes || []).map(attribute => ({...attribute, resourceId: this.collectionId, resourceIndex: 0, resourceType: AttributesResourceType.Collection}))\n }]\n }\n }\n\n private createRows(): DocumentsAndLinksData {\n const documents = (this.rows || []).map<DocumentModel>((row, index) => ({id: index.toString(), collectionId: this.collection.id, data: row}));\n return ({\n uniqueDocuments: documents,\n uniqueLinkInstances: [],\n dataByStems: [{\n stem: this.query.stems[0],\n linkInstances: [],\n documents\n }]\n })\n }\n\n}\n","<lmr-pivot-table [transform]=\"transform\"\n [data]=\"data\"\n [config]=\"pivotConfig\"\n [query]=\"query\"\n [constraintData]=\"constraintData\"\n [collections]=\"[collection]\"\n [emptyTablesTemplateInput]=\"emptyTablesTemplate\"\n [tableCellTemplateInput]=\"tableCellTemplate\"\n (pivotDataChange)=\"pivotDataChange.emit($event)\"\n (pivotTablesChange)=\"pivotTablesChange.emit($event)\">\n</lmr-pivot-table>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ScrollingModule} from '@angular/cdk/scrolling';\nimport {LmrPivotTableComponent} from './lmr-pivot-table.component';\nimport {PivotDataEmptyPipe} from './pipes/pivot-data-empty.pipe';\nimport {PivotTableCellHasValuePipe} from './pipes/pivot-table-value.pipe';\nimport {ContrastColorPipe} from './pipes/contrast-color.pipe';\nimport {LmrEmptyTablesTemplateDirective, LmrTableCellTemplateDirective} from './directives/lmr-templates.directive';\nimport {LmrSimplePivotTableComponent} from './lmr-simple-pivot-table.component';\n\n@NgModule({\n declarations: [\n LmrPivotTableComponent,\n LmrSimplePivotTableComponent,\n PivotDataEmptyPipe,\n PivotTableCellHasValuePipe,\n ContrastColorPipe,\n LmrEmptyTablesTemplateDirective,\n LmrTableCellTemplateDirective,\n ],\n imports: [\n CommonModule,\n ScrollingModule,\n ],\n exports: [\n LmrPivotTableComponent,\n LmrSimplePivotTableComponent,\n LmrEmptyTablesTemplateDirective,\n LmrTableCellTemplateDirective,\n ]\n})\nexport class LmrPivotTableModule {\n}\n","/*\n * Public API Surface of lmr-pivot-table\n */\n\nexport * from './lib/lmr-pivot-table.component';\nexport * from './lib/lmr-simple-pivot-table.component';\nexport * from './lib/lmr-pivot-table.module';\nexport * from './lib/util/lmr-pivot-config';\nexport * from './lib/util/lmr-simple-pivot-config';\nexport * from './lib/util/lmr-pivot-data';\nexport * from './lib/util/lmr-pivot-table';\nexport * from './lib/util/pivot-util';\nexport * from './lib/directives/lmr-templates.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.PivotDataEmptyPipe","i3.PivotTableCellHasValuePipe","i4.ContrastColorPipe","i1.LmrPivotTableComponent"],"mappings":"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"}
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lumeer/pivot",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "^16.2.12",
6
6
  "@angular/common": "^16.2.12",
package/public-api.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export * from './lib/lmr-pivot-table.component';
2
2
  export * from './lib/lmr-simple-pivot-table.component';
3
3
  export * from './lib/lmr-pivot-table.module';
4
- export { LmrPivotConfig, LmrPivotStemConfig, LmrPivotConfigVersion, LmrPivotTransform, LmrPivotAttribute, LmrPivotRowAttribute, LmrPivotColumnAttribute, LmrPivotSort, LmrPivotValueAttribute, LmrPivotValueType, LmrPivotExpression } from './lib/util/lmr-pivot-config';
4
+ export * from './lib/util/lmr-pivot-config';
5
5
  export * from './lib/util/lmr-simple-pivot-config';
6
6
  export * from './lib/util/lmr-pivot-data';
7
7
  export * from './lib/util/lmr-pivot-table';
Binary file