@progress/kendo-angular-pivotgrid
Version:
PivotGrid package for Angular
77 lines (76 loc) • 3.58 kB
JavaScript
/**-----------------------------------------------------------------------------------------
* Copyright © 2025 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the project root for more information
*-------------------------------------------------------------------------------------------*/
import { EventEmitter, Injectable, NgZone, Output } from '@angular/core';
import { isDocumentAvailable } from '@progress/kendo-angular-common';
import { toColumns, toData, toRows, toTree } from '@progress/kendo-pivotgrid-common';
import { matchAriaAttributes } from '../util';
import { BehaviorSubject } from 'rxjs';
import * as i0 from "@angular/core";
/**
* @hidden
*/
let nextPivotGridId = 0;
/**
* @hidden
*/
export class PivotGridDataService {
ngZone;
expandedStateChange = new EventEmitter();
configuratorFieldChange = new EventEmitter();
expandedFieldChange = new EventEmitter();
directive;
normalizedData;
rows;
columns;
wrapper;
aggregateData;
state;
columnHeaderLeaves;
columnHeaderRows = new BehaviorSubject([]);
columnHeaderCols = new BehaviorSubject([]);
rowHeaderLeaves;
rowHeaderCols = new BehaviorSubject([]);
rowHeaderRows = new BehaviorSubject([]);
valuesRows = new BehaviorSubject([]);
loading = new BehaviorSubject(false);
pivotGridId;
constructor(ngZone) {
this.ngZone = ngZone;
this.pivotGridId = nextPivotGridId++;
}
fields = new BehaviorSubject([]);
configuredFields = new BehaviorSubject([]);
updateRowsAndCols() {
const rowsTree = toTree((this.rows || []).slice());
const [rowHeaderRows, rowHeaderLeaves, rowHeaderDepth, rowHeaderBreadth] = toRows(rowsTree);
const columnsTree = toTree((this.columns || []).slice());
const [columnHeaderRows, columnHeaderLeaves, columnHeaderBreadth] = toColumns(columnsTree);
this.columnHeaderLeaves = columnHeaderLeaves;
this.columnHeaderCols.next(columnHeaderLeaves);
this.columnHeaderRows.next(columnHeaderRows);
this.rowHeaderLeaves = rowHeaderLeaves;
this.rowHeaderCols.next(new Array(rowHeaderBreadth).fill({}));
this.rowHeaderRows.next(rowHeaderRows);
this.valuesRows.next(toData((this.normalizedData || []).slice(), columnHeaderLeaves, rowHeaderLeaves, columnHeaderBreadth, rowHeaderDepth));
if (isDocumentAvailable()) {
this.ngZone.runOutsideAngular(() => {
// needed because all tables need to be rendered in accordance with the new settings
// before applying the required DOM attributes
setTimeout(() => matchAriaAttributes(this.wrapper));
});
}
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PivotGridDataService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PivotGridDataService });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PivotGridDataService, decorators: [{
type: Injectable
}], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { expandedStateChange: [{
type: Output
}], configuratorFieldChange: [{
type: Output
}], expandedFieldChange: [{
type: Output
}] } });