@lumeer/pivot 0.0.2 → 0.0.3
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.
|
@@ -46,11 +46,11 @@ export class LmrPivotTableComponent {
|
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
48
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LmrPivotTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
49
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LmrPivotTableComponent, selector: "lmr-pivot-table", inputs: { collections: "collections", data: "data", linkTypes: "linkTypes", query: "query", constraintData: "constraintData", config: "config", transform: "transform", strings: "strings" }, outputs: { cellClick: "cellClick", pivotDataChange: "pivotDataChange" }, queries: [{ propertyName: "emptyTablesTemplate", first: true, predicate: LmrEmptyTablesTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "tableCellTemplate", first: true, predicate: LmrTableCellTemplateDirective, descendants: true, read: TemplateRef }], usesOnChanges: true, ngImport: i0, template: "<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 <div class=\"d-flex align-items-center h-100\">\n <span class=\"summary\" [class.me-2]=\"cellData.hasValue\">{{cell.summary}}</span>\n <ng-container *ngIf=\"cellData.hasValue\">\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 || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </ng-container>\n </div>\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 || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!cellData.hasValue\"> </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> </div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"emptyTablesTemplate || defaultEmptyTablesTemplate\"\n [ngTemplateOutletContext]=\"{ }\">\n </ng-template>\n </ng-container>\n</ng-container>\n", styles: [".table{border-spacing:0;border-collapse:separate}.pivot-data-cell,.pivot-data-group-cell{text-align:right}.pivot-column-header-cell,.pivot-row-header-cell,.pivot-data-group-cell,.pivot-row-group-header-cell,.pivot-column-group-header-cell{font-weight:700;border:1px #f8f9fa solid}.pivot-row-header-cell.sticky-start,.pivot-row-group-header-cell.sticky-start,.pivot-empty-cell.sticky-start{position:sticky;width:150px;min-width:150px;max-width:150px!important;z-index:9}.pivot-column-header-cell.sticky-top,.pivot-column-group-header-cell.sticky-top,.pivot-empty-cell.sticky-top{position:sticky;z-index:10}.pivot-empty-cell{background:white;border:1px white solid}.pivot-empty-cell.sticky-top{z-index:11}.cell.color{padding:0!important;height:30px}.cell.color .summary{padding-left:.5rem}
|
|
49
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LmrPivotTableComponent, selector: "lmr-pivot-table", inputs: { collections: "collections", data: "data", linkTypes: "linkTypes", query: "query", constraintData: "constraintData", config: "config", transform: "transform", strings: "strings" }, outputs: { cellClick: "cellClick", pivotDataChange: "pivotDataChange" }, queries: [{ propertyName: "emptyTablesTemplate", first: true, predicate: LmrEmptyTablesTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "tableCellTemplate", first: true, predicate: LmrTableCellTemplateDirective, descendants: true, read: TemplateRef }], usesOnChanges: true, ngImport: i0, template: "<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 <div class=\"d-flex align-items-center h-100\">\n <span class=\"summary\" [class.me-2]=\"cellData.hasValue\">{{cell.summary}}</span>\n <ng-container *ngIf=\"cellData.hasValue\">\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 || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </ng-container>\n </div>\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 || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!cellData.hasValue\"> </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> </div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"emptyTablesTemplate || defaultEmptyTablesTemplate\"\n [ngTemplateOutletContext]=\"{ }\">\n </ng-template>\n </ng-container>\n</ng-container>\n", styles: [".table{border-spacing:0;border-collapse:separate}.pivot-data-cell,.pivot-data-group-cell{text-align:right}.pivot-column-header-cell,.pivot-row-header-cell,.pivot-data-group-cell,.pivot-row-group-header-cell,.pivot-column-group-header-cell{font-weight:700;border:1px #f8f9fa solid}.pivot-row-header-cell.sticky-start,.pivot-row-group-header-cell.sticky-start,.pivot-empty-cell.sticky-start{position:sticky;width:150px;min-width:150px;max-width:150px!important;z-index:9}.pivot-column-header-cell.sticky-top,.pivot-column-group-header-cell.sticky-top,.pivot-empty-cell.sticky-top{position:sticky;z-index:10}.pivot-empty-cell{background:white;border:1px white solid}.pivot-empty-cell.sticky-top{z-index:11}.cell.color{padding:0!important;height:30px}.cell.color .summary{padding-left:.5rem}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: i2.PivotDataEmptyPipe, name: "pivotDataEmpty" }, { kind: "pipe", type: i3.PivotTableCellHasValuePipe, name: "pivotTableCellHasValue" }, { kind: "pipe", type: i4.ContrastColorPipe, name: "contrastColor" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
50
50
|
}
|
|
51
51
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LmrPivotTableComponent, decorators: [{
|
|
52
52
|
type: Component,
|
|
53
|
-
args: [{ selector: 'lmr-pivot-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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 <div class=\"d-flex align-items-center h-100\">\n <span class=\"summary\" [class.me-2]=\"cellData.hasValue\">{{cell.summary}}</span>\n <ng-container *ngIf=\"cellData.hasValue\">\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 || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </ng-container>\n </div>\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 || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!cellData.hasValue\"> </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> </div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"emptyTablesTemplate || defaultEmptyTablesTemplate\"\n [ngTemplateOutletContext]=\"{ }\">\n </ng-template>\n </ng-container>\n</ng-container>\n", styles: [".table{border-spacing:0;border-collapse:separate}.pivot-data-cell,.pivot-data-group-cell{text-align:right}.pivot-column-header-cell,.pivot-row-header-cell,.pivot-data-group-cell,.pivot-row-group-header-cell,.pivot-column-group-header-cell{font-weight:700;border:1px #f8f9fa solid}.pivot-row-header-cell.sticky-start,.pivot-row-group-header-cell.sticky-start,.pivot-empty-cell.sticky-start{position:sticky;width:150px;min-width:150px;max-width:150px!important;z-index:9}.pivot-column-header-cell.sticky-top,.pivot-column-group-header-cell.sticky-top,.pivot-empty-cell.sticky-top{position:sticky;z-index:10}.pivot-empty-cell{background:white;border:1px white solid}.pivot-empty-cell.sticky-top{z-index:11}.cell.color{padding:0!important;height:30px}.cell.color .summary{padding-left:.5rem}
|
|
53
|
+
args: [{ selector: 'lmr-pivot-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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 <div class=\"d-flex align-items-center h-100\">\n <span class=\"summary\" [class.me-2]=\"cellData.hasValue\">{{cell.summary}}</span>\n <ng-container *ngIf=\"cellData.hasValue\">\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 || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </ng-container>\n </div>\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 || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!cellData.hasValue\"> </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> </div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"emptyTablesTemplate || defaultEmptyTablesTemplate\"\n [ngTemplateOutletContext]=\"{ }\">\n </ng-template>\n </ng-container>\n</ng-container>\n", styles: [".table{border-spacing:0;border-collapse:separate}.pivot-data-cell,.pivot-data-group-cell{text-align:right}.pivot-column-header-cell,.pivot-row-header-cell,.pivot-data-group-cell,.pivot-row-group-header-cell,.pivot-column-group-header-cell{font-weight:700;border:1px #f8f9fa solid}.pivot-row-header-cell.sticky-start,.pivot-row-group-header-cell.sticky-start,.pivot-empty-cell.sticky-start{position:sticky;width:150px;min-width:150px;max-width:150px!important;z-index:9}.pivot-column-header-cell.sticky-top,.pivot-column-group-header-cell.sticky-top,.pivot-empty-cell.sticky-top{position:sticky;z-index:10}.pivot-empty-cell{background:white;border:1px white solid}.pivot-empty-cell.sticky-top{z-index:11}.cell.color{padding:0!important;height:30px}.cell.color .summary{padding-left:.5rem}\n"] }]
|
|
54
54
|
}], propDecorators: { collections: [{
|
|
55
55
|
type: Input
|
|
56
56
|
}], data: [{
|
|
@@ -1565,11 +1565,11 @@ class LmrPivotTableComponent {
|
|
|
1565
1565
|
});
|
|
1566
1566
|
}
|
|
1567
1567
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LmrPivotTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1568
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LmrPivotTableComponent, selector: "lmr-pivot-table", inputs: { collections: "collections", data: "data", linkTypes: "linkTypes", query: "query", constraintData: "constraintData", config: "config", transform: "transform", strings: "strings" }, outputs: { cellClick: "cellClick", pivotDataChange: "pivotDataChange" }, queries: [{ propertyName: "emptyTablesTemplate", first: true, predicate: LmrEmptyTablesTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "tableCellTemplate", first: true, predicate: LmrTableCellTemplateDirective, descendants: true, read: TemplateRef }], usesOnChanges: true, ngImport: i0, template: "<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 <div class=\"d-flex align-items-center h-100\">\n <span class=\"summary\" [class.me-2]=\"cellData.hasValue\">{{cell.summary}}</span>\n <ng-container *ngIf=\"cellData.hasValue\">\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 || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </ng-container>\n </div>\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 || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!cellData.hasValue\"> </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> </div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"emptyTablesTemplate || defaultEmptyTablesTemplate\"\n [ngTemplateOutletContext]=\"{ }\">\n </ng-template>\n </ng-container>\n</ng-container>\n", styles: [".table{border-spacing:0;border-collapse:separate}.pivot-data-cell,.pivot-data-group-cell{text-align:right}.pivot-column-header-cell,.pivot-row-header-cell,.pivot-data-group-cell,.pivot-row-group-header-cell,.pivot-column-group-header-cell{font-weight:700;border:1px #f8f9fa solid}.pivot-row-header-cell.sticky-start,.pivot-row-group-header-cell.sticky-start,.pivot-empty-cell.sticky-start{position:sticky;width:150px;min-width:150px;max-width:150px!important;z-index:9}.pivot-column-header-cell.sticky-top,.pivot-column-group-header-cell.sticky-top,.pivot-empty-cell.sticky-top{position:sticky;z-index:10}.pivot-empty-cell{background:white;border:1px white solid}.pivot-empty-cell.sticky-top{z-index:11}.cell.color{padding:0!important;height:30px}.cell.color .summary{padding-left:.5rem}
|
|
1568
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LmrPivotTableComponent, selector: "lmr-pivot-table", inputs: { collections: "collections", data: "data", linkTypes: "linkTypes", query: "query", constraintData: "constraintData", config: "config", transform: "transform", strings: "strings" }, outputs: { cellClick: "cellClick", pivotDataChange: "pivotDataChange" }, queries: [{ propertyName: "emptyTablesTemplate", first: true, predicate: LmrEmptyTablesTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "tableCellTemplate", first: true, predicate: LmrTableCellTemplateDirective, descendants: true, read: TemplateRef }], usesOnChanges: true, ngImport: i0, template: "<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 <div class=\"d-flex align-items-center h-100\">\n <span class=\"summary\" [class.me-2]=\"cellData.hasValue\">{{cell.summary}}</span>\n <ng-container *ngIf=\"cellData.hasValue\">\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 || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </ng-container>\n </div>\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 || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!cellData.hasValue\"> </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> </div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"emptyTablesTemplate || defaultEmptyTablesTemplate\"\n [ngTemplateOutletContext]=\"{ }\">\n </ng-template>\n </ng-container>\n</ng-container>\n", styles: [".table{border-spacing:0;border-collapse:separate}.pivot-data-cell,.pivot-data-group-cell{text-align:right}.pivot-column-header-cell,.pivot-row-header-cell,.pivot-data-group-cell,.pivot-row-group-header-cell,.pivot-column-group-header-cell{font-weight:700;border:1px #f8f9fa solid}.pivot-row-header-cell.sticky-start,.pivot-row-group-header-cell.sticky-start,.pivot-empty-cell.sticky-start{position:sticky;width:150px;min-width:150px;max-width:150px!important;z-index:9}.pivot-column-header-cell.sticky-top,.pivot-column-group-header-cell.sticky-top,.pivot-empty-cell.sticky-top{position:sticky;z-index:10}.pivot-empty-cell{background:white;border:1px white solid}.pivot-empty-cell.sticky-top{z-index:11}.cell.color{padding:0!important;height:30px}.cell.color .summary{padding-left:.5rem}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: PivotDataEmptyPipe, name: "pivotDataEmpty" }, { kind: "pipe", type: PivotTableCellHasValuePipe, name: "pivotTableCellHasValue" }, { kind: "pipe", type: ContrastColorPipe, name: "contrastColor" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1569
1569
|
}
|
|
1570
1570
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LmrPivotTableComponent, decorators: [{
|
|
1571
1571
|
type: Component,
|
|
1572
|
-
args: [{ selector: 'lmr-pivot-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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 <div class=\"d-flex align-items-center h-100\">\n <span class=\"summary\" [class.me-2]=\"cellData.hasValue\">{{cell.summary}}</span>\n <ng-container *ngIf=\"cellData.hasValue\">\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 || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </ng-container>\n </div>\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 || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!cellData.hasValue\"> </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> </div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"emptyTablesTemplate || defaultEmptyTablesTemplate\"\n [ngTemplateOutletContext]=\"{ }\">\n </ng-template>\n </ng-container>\n</ng-container>\n", styles: [".table{border-spacing:0;border-collapse:separate}.pivot-data-cell,.pivot-data-group-cell{text-align:right}.pivot-column-header-cell,.pivot-row-header-cell,.pivot-data-group-cell,.pivot-row-group-header-cell,.pivot-column-group-header-cell{font-weight:700;border:1px #f8f9fa solid}.pivot-row-header-cell.sticky-start,.pivot-row-group-header-cell.sticky-start,.pivot-empty-cell.sticky-start{position:sticky;width:150px;min-width:150px;max-width:150px!important;z-index:9}.pivot-column-header-cell.sticky-top,.pivot-column-group-header-cell.sticky-top,.pivot-empty-cell.sticky-top{position:sticky;z-index:10}.pivot-empty-cell{background:white;border:1px white solid}.pivot-empty-cell.sticky-top{z-index:11}.cell.color{padding:0!important;height:30px}.cell.color .summary{padding-left:.5rem}
|
|
1572
|
+
args: [{ selector: 'lmr-pivot-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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 <div class=\"d-flex align-items-center h-100\">\n <span class=\"summary\" [class.me-2]=\"cellData.hasValue\">{{cell.summary}}</span>\n <ng-container *ngIf=\"cellData.hasValue\">\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 || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </ng-container>\n </div>\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 || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!cellData.hasValue\"> </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> </div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"emptyTablesTemplate || defaultEmptyTablesTemplate\"\n [ngTemplateOutletContext]=\"{ }\">\n </ng-template>\n </ng-container>\n</ng-container>\n", styles: [".table{border-spacing:0;border-collapse:separate}.pivot-data-cell,.pivot-data-group-cell{text-align:right}.pivot-column-header-cell,.pivot-row-header-cell,.pivot-data-group-cell,.pivot-row-group-header-cell,.pivot-column-group-header-cell{font-weight:700;border:1px #f8f9fa solid}.pivot-row-header-cell.sticky-start,.pivot-row-group-header-cell.sticky-start,.pivot-empty-cell.sticky-start{position:sticky;width:150px;min-width:150px;max-width:150px!important;z-index:9}.pivot-column-header-cell.sticky-top,.pivot-column-group-header-cell.sticky-top,.pivot-empty-cell.sticky-top{position:sticky;z-index:10}.pivot-empty-cell{background:white;border:1px white solid}.pivot-empty-cell.sticky-top{z-index:11}.cell.color{padding:0!important;height:30px}.cell.color .summary{padding-left:.5rem}\n"] }]
|
|
1573
1573
|
}], propDecorators: { collections: [{
|
|
1574
1574
|
type: Input
|
|
1575
1575
|
}], data: [{
|
|
@@ -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-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';\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 translateAggregation?: (type: DataAggregationType) => string;\n}\n\nexport interface LmrPivotStrings {\n summaryString: string;\n headerSummaryString: 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}\n\nexport interface LmrPivotRowAttribute extends LmrPivotRowColumnAttribute {}\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","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, LmrPivotSort, LmrPivotStemConfig, LmrPivotTransform, LmrPivotValueAttribute} from './lmr-pivot-config';\nimport {LmrPivotData, LmrPivotDataHeader, 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 rowShowSums: boolean[];\n rowSticky: boolean[];\n rowSorts: LmrPivotSort[];\n columnShowSums: boolean[];\n columnSticky: boolean[];\n columnSorts: LmrPivotSort[];\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 return this.formatDataValue(finalConstraint.createDataValue(value, 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 additionalData = {\n rowShowSums: (config.rowAttributes || []).map(attr => attr.showSums),\n rowSticky: this.mapStickyValues((config.rowAttributes || []).map(attr => !!attr.sticky)),\n rowSorts: (config.rowAttributes || []).map(attr => attr.sort),\n rowAttributes: (config.rowAttributes || []).map(attr => this.pivotAttributeAttribute(attr)),\n columnShowSums: (config.columnAttributes || []).map(attr => attr.showSums),\n columnSticky: this.mapStickyValues((config.columnAttributes || []).map(attr => !!attr.sticky)),\n columnSorts: (config.columnAttributes || []).map(attr => attr.sort),\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 rowHeaders: [],\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 rowShowSums: [],\n rowSticky: [],\n rowSorts: [],\n columnShowSums: [],\n columnSticky: [],\n columnSorts: [],\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\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\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 columnHeaders: columnData.headers,\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?.translateAggregation?.(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 {\n Constraint,\n ConstraintData,\n DataAggregationType,\n NumberConstraint,\n PercentageConstraint,\n UnknownConstraint,\n aggregateDataValues,\n isValueAggregation, DataResource,\n} from '@lumeer/data-filters';\nimport {\n deepObjectCopy,\n isArray,\n isNotNullOrUndefined,\n isNullOrUndefined,\n isNumeric, shadeColor,\n toNumber,\n uniqueValues,\n} from '@lumeer/utils';\n\nimport {LmrPivotData, LmrPivotDataHeader, LmrPivotStemData} from './lmr-pivot-data';\nimport {LmrPivotTable, LmrPivotTableCell} from './lmr-pivot-table';\nimport {LmrPivotSort, LmrPivotStrings, 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 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 strings: LmrPivotStrings;\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\n public createTables(pivotData: LmrPivotData, strings: LmrPivotStrings): LmrPivotTable[] {\n if (!pivotData) {\n return [{cells: []}];\n }\n\n this.strings = strings;\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.nonStickyRowIndex = this.data.rowSticky?.findIndex(sticky => !sticky) || 0;\n this.values = data.values || [];\n this.dataResources = data.dataResources || [];\n this.rowLevels = (data.rowShowSums || []).length;\n this.columnLevels = (data.columnShowSums || []).length + (data.hasAdditionalColumnLevel ? 1 : 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.rowShowSums;\n }\n\n private get columnShowSums(): boolean[] {\n return this.data.columnShowSums;\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: header.title,\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\n if (showSums[level]) {\n const background = this.getSummaryBackground(level);\n const summary = level === 0 ? this.strings.summaryString : this.strings.headerSummaryString;\n const columnIndex = Math.max(level - 1, 0);\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 && 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: parentHeader?.title,\n constraint: parentHeader?.constraint,\n label: parentHeader?.attributeName,\n cssClass: PivotTableConverter.rowGroupHeaderClass,\n isHeader: true,\n stickyStart,\n rowSpan: 1,\n colSpan,\n background,\n summary,\n };\n\n const rowIndexes = getTargetIndexesForHeaders(headers);\n const transformedRowIndexes = rowIndexes\n .map(v => this.rowsTransformationArray[v])\n .filter(v => isNotNullOrUndefined(v));\n rowGroupsInfo[currentIndex] = {background, indexes: transformedRowIndexes, level};\n\n this.fillCellsForGroupedRow(cells, rowIndexes, currentIndex, background);\n }\n }\n\n private getHeaderBackground(header: LmrPivotDataHeader, 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?.rowSticky?.[level];\n }\n\n private isColumnLevelSticky(level: number): boolean {\n const maxLevel = Math.min(level, (this.data?.columnSticky?.length ?? Number.MAX_SAFE_INTEGER) - 1);\n return this.data?.columnSticky?.[maxLevel];\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 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: header.title,\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 summary = level === 0 ? this.strings.summaryString : this.strings.headerSummaryString;\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: parentHeader?.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 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 aggregateDataValues(aggregation, values, constraint, false, this.constraintData);\n }\n const aggregatedValue = aggregateDataValues(aggregation, values);\n return this.formatGroupedValueByValueType(aggregatedValue, rows, columns);\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 i = 0; i < this.columnLevels; i++) {\n for (let j = 0; j < this.rowLevels; j++) {\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 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 return sortPivotData({...data, values}, constraintData);\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 }\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 includeChild = true\n): number {\n if (pivotDataHeader.children) {\n return pivotDataHeader.children.reduce(\n (sum, header) => sum + getHeaderChildCount(header, level + 1, showSums, numberOfSums, includeChild),\n showSums[level + 1] ? numberOfSums : 0\n );\n }\n return includeChild ? 1 : 0;\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 return {\n ...data,\n rowHeaders: sortPivotRowDataHeaders(data.rowHeaders, data.rowSorts, data, constraintData),\n columnHeaders: sortPivotColumnDataHeaders(data.columnHeaders, data.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, LmrPivotStrings, 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 strings: LmrPivotStrings;\n\n @Output()\n public cellClick = new EventEmitter<LmrPivotTableCell>();\n\n @Output()\n public pivotDataChange = new EventEmitter<LmrPivotData>();\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.strings))\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 <div class=\"d-flex align-items-center h-100\">\n <span class=\"summary\" [class.me-2]=\"cellData.hasValue\">{{cell.summary}}</span>\n <ng-container *ngIf=\"cellData.hasValue\">\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 || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </ng-container>\n </div>\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 || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!cellData.hasValue\"> </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> </div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"emptyTablesTemplate || defaultEmptyTablesTemplate\"\n [ngTemplateOutletContext]=\"{ }\">\n </ng-template>\n </ng-container>\n</ng-container>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\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';\n\n@NgModule({\n declarations: [\n LmrPivotTableComponent,\n PivotDataEmptyPipe,\n PivotTableCellHasValuePipe,\n ContrastColorPipe,\n LmrEmptyTablesTemplateDirective,\n LmrTableCellTemplateDirective,\n ],\n imports: [\n CommonModule,\n ],\n exports: [\n LmrPivotTableComponent,\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-pivot-table.module';\nexport * from './lib/util/lmr-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"],"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-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';\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 translateAggregation?: (type: DataAggregationType) => string;\n}\n\nexport interface LmrPivotStrings {\n summaryString: string;\n headerSummaryString: 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}\n\nexport interface LmrPivotRowAttribute extends LmrPivotRowColumnAttribute {}\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","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, LmrPivotSort, LmrPivotStemConfig, LmrPivotTransform, LmrPivotValueAttribute} from './lmr-pivot-config';\nimport {LmrPivotData, LmrPivotDataHeader, 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 rowShowSums: boolean[];\n rowSticky: boolean[];\n rowSorts: LmrPivotSort[];\n columnShowSums: boolean[];\n columnSticky: boolean[];\n columnSorts: LmrPivotSort[];\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 return this.formatDataValue(finalConstraint.createDataValue(value, 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 additionalData = {\n rowShowSums: (config.rowAttributes || []).map(attr => attr.showSums),\n rowSticky: this.mapStickyValues((config.rowAttributes || []).map(attr => !!attr.sticky)),\n rowSorts: (config.rowAttributes || []).map(attr => attr.sort),\n rowAttributes: (config.rowAttributes || []).map(attr => this.pivotAttributeAttribute(attr)),\n columnShowSums: (config.columnAttributes || []).map(attr => attr.showSums),\n columnSticky: this.mapStickyValues((config.columnAttributes || []).map(attr => !!attr.sticky)),\n columnSorts: (config.columnAttributes || []).map(attr => attr.sort),\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 rowHeaders: [],\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 rowShowSums: [],\n rowSticky: [],\n rowSorts: [],\n columnShowSums: [],\n columnSticky: [],\n columnSorts: [],\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\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\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 columnHeaders: columnData.headers,\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?.translateAggregation?.(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 {\n Constraint,\n ConstraintData,\n DataAggregationType,\n NumberConstraint,\n PercentageConstraint,\n UnknownConstraint,\n aggregateDataValues,\n isValueAggregation, DataResource,\n} from '@lumeer/data-filters';\nimport {\n deepObjectCopy,\n isArray,\n isNotNullOrUndefined,\n isNullOrUndefined,\n isNumeric, shadeColor,\n toNumber,\n uniqueValues,\n} from '@lumeer/utils';\n\nimport {LmrPivotData, LmrPivotDataHeader, LmrPivotStemData} from './lmr-pivot-data';\nimport {LmrPivotTable, LmrPivotTableCell} from './lmr-pivot-table';\nimport {LmrPivotSort, LmrPivotStrings, 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 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 strings: LmrPivotStrings;\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\n public createTables(pivotData: LmrPivotData, strings: LmrPivotStrings): LmrPivotTable[] {\n if (!pivotData) {\n return [{cells: []}];\n }\n\n this.strings = strings;\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.nonStickyRowIndex = this.data.rowSticky?.findIndex(sticky => !sticky) || 0;\n this.values = data.values || [];\n this.dataResources = data.dataResources || [];\n this.rowLevels = (data.rowShowSums || []).length;\n this.columnLevels = (data.columnShowSums || []).length + (data.hasAdditionalColumnLevel ? 1 : 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.rowShowSums;\n }\n\n private get columnShowSums(): boolean[] {\n return this.data.columnShowSums;\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: header.title,\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\n if (showSums[level]) {\n const background = this.getSummaryBackground(level);\n const summary = level === 0 ? this.strings.summaryString : this.strings.headerSummaryString;\n const columnIndex = Math.max(level - 1, 0);\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 && 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: parentHeader?.title,\n constraint: parentHeader?.constraint,\n label: parentHeader?.attributeName,\n cssClass: PivotTableConverter.rowGroupHeaderClass,\n isHeader: true,\n stickyStart,\n rowSpan: 1,\n colSpan,\n background,\n summary,\n };\n\n const rowIndexes = getTargetIndexesForHeaders(headers);\n const transformedRowIndexes = rowIndexes\n .map(v => this.rowsTransformationArray[v])\n .filter(v => isNotNullOrUndefined(v));\n rowGroupsInfo[currentIndex] = {background, indexes: transformedRowIndexes, level};\n\n this.fillCellsForGroupedRow(cells, rowIndexes, currentIndex, background);\n }\n }\n\n private getHeaderBackground(header: LmrPivotDataHeader, 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?.rowSticky?.[level];\n }\n\n private isColumnLevelSticky(level: number): boolean {\n const maxLevel = Math.min(level, (this.data?.columnSticky?.length ?? Number.MAX_SAFE_INTEGER) - 1);\n return this.data?.columnSticky?.[maxLevel];\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 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: header.title,\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 summary = level === 0 ? this.strings.summaryString : this.strings.headerSummaryString;\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: parentHeader?.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 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 aggregateDataValues(aggregation, values, constraint, false, this.constraintData);\n }\n const aggregatedValue = aggregateDataValues(aggregation, values);\n return this.formatGroupedValueByValueType(aggregatedValue, rows, columns);\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 i = 0; i < this.columnLevels; i++) {\n for (let j = 0; j < this.rowLevels; j++) {\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 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 return sortPivotData({...data, values}, constraintData);\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 }\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 includeChild = true\n): number {\n if (pivotDataHeader.children) {\n return pivotDataHeader.children.reduce(\n (sum, header) => sum + getHeaderChildCount(header, level + 1, showSums, numberOfSums, includeChild),\n showSums[level + 1] ? numberOfSums : 0\n );\n }\n return includeChild ? 1 : 0;\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 return {\n ...data,\n rowHeaders: sortPivotRowDataHeaders(data.rowHeaders, data.rowSorts, data, constraintData),\n columnHeaders: sortPivotColumnDataHeaders(data.columnHeaders, data.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, LmrPivotStrings, 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 strings: LmrPivotStrings;\n\n @Output()\n public cellClick = new EventEmitter<LmrPivotTableCell>();\n\n @Output()\n public pivotDataChange = new EventEmitter<LmrPivotData>();\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.strings))\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 <div class=\"d-flex align-items-center h-100\">\n <span class=\"summary\" [class.me-2]=\"cellData.hasValue\">{{cell.summary}}</span>\n <ng-container *ngIf=\"cellData.hasValue\">\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 || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </ng-container>\n </div>\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 || defaultTableCellTemplate\"\n [ngTemplateOutletContext]=\"{ value: cell.value, cell: cell }\">\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!cellData.hasValue\"> </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> </div>\n </ng-template>\n\n <ng-template\n [ngTemplateOutlet]=\"emptyTablesTemplate || defaultEmptyTablesTemplate\"\n [ngTemplateOutletContext]=\"{ }\">\n </ng-template>\n </ng-container>\n</ng-container>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\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';\n\n@NgModule({\n declarations: [\n LmrPivotTableComponent,\n PivotDataEmptyPipe,\n PivotTableCellHasValuePipe,\n ContrastColorPipe,\n LmrEmptyTablesTemplateDirective,\n LmrTableCellTemplateDirective,\n ],\n imports: [\n CommonModule,\n ],\n exports: [\n LmrPivotTableComponent,\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-pivot-table.module';\nexport * from './lib/util/lmr-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"],"mappings":"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"}
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lumeer/pivot",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": "^16.2.12",
|
|
6
6
|
"@angular/core": "^16.2.12",
|
|
7
|
-
"@lumeer/data-filters": "^0.8.
|
|
7
|
+
"@lumeer/data-filters": "^0.8.5",
|
|
8
8
|
"@lumeer/utils": "^0.1.3"
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
package/lumeer-pivot-0.0.2.tgz
DELETED
|
Binary file
|