@progress/kendo-angular-pivotgrid 0.2.0-dev.202208181226 → 0.2.0-dev.202208190706
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.
- package/bundles/kendo-angular-pivotgrid.umd.js +1 -1
- package/configurator/configurator.component.d.ts +96 -0
- package/configurator/configurator.service.d.ts +17 -0
- package/configurator/draggable.directive.d.ts +32 -0
- package/configurator/drop-cue.service.d.ts +22 -0
- package/configurator/drop-target.directive.d.ts +32 -0
- package/data-binding/base-binding-directive.d.ts +27 -5
- package/data-binding/local-binding.directive.d.ts +8 -1
- package/data-binding/olap-binding.directive.d.ts +13 -1
- package/data-binding/pivotgrid-data.service.d.ts +13 -4
- package/esm2015/configurator/configurator.component.js +500 -0
- package/esm2015/configurator/configurator.service.js +38 -0
- package/esm2015/configurator/draggable.directive.js +94 -0
- package/esm2015/configurator/drop-cue.service.js +64 -0
- package/esm2015/configurator/drop-target.directive.js +82 -0
- package/esm2015/data-binding/base-binding-directive.js +68 -9
- package/esm2015/data-binding/local-binding.directive.js +20 -8
- package/esm2015/data-binding/olap-binding.directive.js +131 -6
- package/esm2015/data-binding/pivotgrid-data.service.js +26 -3
- package/esm2015/localization/custom-messages.component.js +41 -0
- package/esm2015/localization/localized-messages.directive.js +36 -0
- package/esm2015/localization/messages.js +77 -0
- package/esm2015/main.js +8 -0
- package/esm2015/models/configuration-change-event.js +18 -0
- package/esm2015/models/configurator-settings.js +14 -0
- package/esm2015/models/expanded-change-event.js +18 -0
- package/esm2015/package-metadata.js +1 -1
- package/esm2015/pivotgrid.component.js +360 -63
- package/esm2015/pivotgrid.module.js +43 -16
- package/esm2015/rendering/pivotgrid-cell.directive.js +6 -3
- package/esm2015/rendering/pivotgrid-table.component.js +29 -10
- package/esm2015/util.js +86 -0
- package/fesm2015/kendo-angular-pivotgrid.js +1696 -156
- package/localization/custom-messages.component.d.ts +18 -0
- package/localization/localized-messages.directive.d.ts +16 -0
- package/localization/messages.d.ts +172 -0
- package/main.d.ts +6 -0
- package/models/configuration-change-event.d.ts +36 -0
- package/models/configurator-settings.d.ts +32 -0
- package/models/expanded-change-event.d.ts +27 -0
- package/package.json +7 -1
- package/pivotgrid.component.d.ts +28 -3
- package/pivotgrid.module.d.ts +15 -7
- package/rendering/pivotgrid-table.component.d.ts +3 -2
- package/util.d.ts +31 -0
|
@@ -3,19 +3,27 @@
|
|
|
3
3
|
* Licensed under commercial license. See LICENSE.md in the project root for more information
|
|
4
4
|
*-------------------------------------------------------------------------------------------*/
|
|
5
5
|
import * as i0 from '@angular/core';
|
|
6
|
-
import { EventEmitter, Injectable, Output, Component, HostBinding, Input, ElementRef, ViewChild,
|
|
6
|
+
import { EventEmitter, Injectable, Output, Component, HostBinding, Input, Directive, Optional, forwardRef, ElementRef, ViewChild, NgModule } from '@angular/core';
|
|
7
7
|
import { validatePackage } from '@progress/kendo-licensing';
|
|
8
|
-
import * as
|
|
9
|
-
import { isDocumentAvailable, anyChanged, EventsModule } from '@progress/kendo-angular-common';
|
|
10
|
-
import { toTree, toRows, toColumns, toData, HEADERS_ACTION, headersReducer, createDataTree, createLocalDataState, rootFields, fetchData, createDataState } from '@progress/kendo-pivotgrid-common';
|
|
8
|
+
import * as i3 from '@progress/kendo-angular-common';
|
|
9
|
+
import { isDocumentAvailable, PreventableEvent, hasObservers, anyChanged, EventsModule, DraggableModule } from '@progress/kendo-angular-common';
|
|
10
|
+
import { toTree, toRows, toColumns, toData, configuratorReducer, PIVOT_CONFIGURATOR_ACTION, HEADERS_ACTION, headersReducer, createFlatSchemaDimensions, createDataTree, createLocalDataState, rootFields, fetchData, createDataState, fetchDiscover, addKPI, buildKPIMeasures } from '@progress/kendo-pivotgrid-common';
|
|
11
11
|
export { averageAggregate, maxAggregate, minAggregate, sumAggregate } from '@progress/kendo-pivotgrid-common';
|
|
12
|
-
import { BehaviorSubject, Subscription, fromEvent } from 'rxjs';
|
|
13
|
-
import { merge } from 'rxjs/operators';
|
|
14
|
-
import * as i2 from '@angular
|
|
12
|
+
import { BehaviorSubject, Subscription, from, of, fromEvent } from 'rxjs';
|
|
13
|
+
import { mergeMap, merge } from 'rxjs/operators';
|
|
14
|
+
import * as i2 from '@progress/kendo-angular-l10n';
|
|
15
|
+
import { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';
|
|
16
|
+
import * as i6 from '@angular/common';
|
|
15
17
|
import { CommonModule } from '@angular/common';
|
|
16
|
-
import * as
|
|
18
|
+
import * as i5$1 from '@progress/kendo-angular-indicators';
|
|
17
19
|
import { IndicatorsModule } from '@progress/kendo-angular-indicators';
|
|
18
|
-
import
|
|
20
|
+
import * as i4 from '@progress/kendo-angular-treeview';
|
|
21
|
+
import { TreeViewModule } from '@progress/kendo-angular-treeview';
|
|
22
|
+
import * as i5 from '@progress/kendo-angular-buttons';
|
|
23
|
+
import { ButtonsModule } from '@progress/kendo-angular-buttons';
|
|
24
|
+
import * as i7 from '@progress/kendo-angular-inputs';
|
|
25
|
+
import { InputsModule } from '@progress/kendo-angular-inputs';
|
|
26
|
+
import { __awaiter } from 'tslib';
|
|
19
27
|
|
|
20
28
|
/**
|
|
21
29
|
* @hidden
|
|
@@ -24,46 +32,11 @@ const packageMetadata = {
|
|
|
24
32
|
name: '@progress/kendo-angular-pivotgrid',
|
|
25
33
|
productName: 'Kendo UI for Angular',
|
|
26
34
|
productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
|
|
27
|
-
publishDate:
|
|
35
|
+
publishDate: 1660892763,
|
|
28
36
|
version: '',
|
|
29
37
|
licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'
|
|
30
38
|
};
|
|
31
39
|
|
|
32
|
-
/**
|
|
33
|
-
* @hidden
|
|
34
|
-
*/
|
|
35
|
-
class PivotGridDataService {
|
|
36
|
-
constructor() {
|
|
37
|
-
this.expandedStateChange = new EventEmitter();
|
|
38
|
-
this.columnHeaderRows = new BehaviorSubject([]);
|
|
39
|
-
this.columnHeaderCols = new BehaviorSubject([]);
|
|
40
|
-
this.rowHeaderCols = new BehaviorSubject([]);
|
|
41
|
-
this.rowHeaderRows = new BehaviorSubject([]);
|
|
42
|
-
this.valuesRows = new BehaviorSubject([]);
|
|
43
|
-
this.loading = new BehaviorSubject(false);
|
|
44
|
-
}
|
|
45
|
-
updateRowsAndCols() {
|
|
46
|
-
const rowsTree = toTree((this.rows || []).slice());
|
|
47
|
-
const [rowHeaderRows, rowHeaderLeaves, rowHeaderDepth, rowHeaderBreadth] = toRows(rowsTree);
|
|
48
|
-
const columnsTree = toTree((this.columns || []).slice());
|
|
49
|
-
const [columnHeaderRows, columnHeaderLeaves, columnHeaderBreadth] = toColumns(columnsTree);
|
|
50
|
-
this.columnHeaderLeaves = columnHeaderLeaves;
|
|
51
|
-
this.columnHeaderCols.next(columnHeaderLeaves);
|
|
52
|
-
this.columnHeaderRows.next(columnHeaderRows);
|
|
53
|
-
this.rowHeaderLeaves = rowHeaderLeaves;
|
|
54
|
-
this.rowHeaderCols.next(new Array(rowHeaderBreadth).fill({}));
|
|
55
|
-
this.rowHeaderRows.next(rowHeaderRows);
|
|
56
|
-
this.valuesRows.next(toData((this.normalizedData || []).slice(), columnHeaderLeaves, rowHeaderLeaves, columnHeaderBreadth, rowHeaderDepth));
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
PivotGridDataService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
60
|
-
PivotGridDataService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridDataService });
|
|
61
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridDataService, decorators: [{
|
|
62
|
-
type: Injectable
|
|
63
|
-
}], propDecorators: { expandedStateChange: [{
|
|
64
|
-
type: Output
|
|
65
|
-
}] } });
|
|
66
|
-
|
|
67
40
|
/**
|
|
68
41
|
* @hidden
|
|
69
42
|
*/
|
|
@@ -126,6 +99,148 @@ const syncWheel = (event, tables, prop, axis) => {
|
|
|
126
99
|
tables[1][prop] += delta;
|
|
127
100
|
}
|
|
128
101
|
};
|
|
102
|
+
/**
|
|
103
|
+
* @hidden
|
|
104
|
+
*/
|
|
105
|
+
function cloneTo(obj, result) {
|
|
106
|
+
for (let field in obj) {
|
|
107
|
+
if (obj.hasOwnProperty(field)) {
|
|
108
|
+
const value = obj[field];
|
|
109
|
+
if (Array.isArray(value)) {
|
|
110
|
+
result[field] = value.slice(0);
|
|
111
|
+
}
|
|
112
|
+
else if (value && typeof value === 'object' && !(value instanceof Date)) {
|
|
113
|
+
result[field] = result[field] || {};
|
|
114
|
+
cloneTo(value, result[field]);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
result[field] = value;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* @hidden
|
|
124
|
+
*/
|
|
125
|
+
function clone(obj) {
|
|
126
|
+
const result = {};
|
|
127
|
+
cloneTo(obj, result);
|
|
128
|
+
return result;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* @hidden
|
|
132
|
+
*/
|
|
133
|
+
const getDocument = element => element.ownerDocument.documentElement;
|
|
134
|
+
/**
|
|
135
|
+
* @hidden
|
|
136
|
+
*/
|
|
137
|
+
const getWindow = element => element.ownerDocument.defaultView;
|
|
138
|
+
/**
|
|
139
|
+
* @hidden
|
|
140
|
+
*/
|
|
141
|
+
const offset = element => {
|
|
142
|
+
const { clientTop, clientLeft } = getDocument(element);
|
|
143
|
+
const { pageYOffset, pageXOffset } = getWindow(element);
|
|
144
|
+
const { top, left } = element.getBoundingClientRect();
|
|
145
|
+
return {
|
|
146
|
+
top: top + pageYOffset - clientTop,
|
|
147
|
+
left: left + pageXOffset - clientLeft
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* @hidden
|
|
152
|
+
*/
|
|
153
|
+
const matchAriaAttributes = (wrapper) => {
|
|
154
|
+
const rowHeaderRows = wrapper.querySelectorAll('.k-pivotgrid-row-headers .k-pivotgrid-row');
|
|
155
|
+
const colHeaderCells = wrapper.querySelectorAll('.k-pivotgrid-column-headers th');
|
|
156
|
+
const valueTableCells = wrapper.querySelectorAll('.k-pivotgrid-values td');
|
|
157
|
+
rowHeaderRows.forEach((row, index) => {
|
|
158
|
+
const valueCellsIds = filterAndMap(Array.from(valueTableCells), c => c.getAttribute('id').split('-')[4] === (index + 1).toString(), c => c.getAttribute('id'));
|
|
159
|
+
row.setAttribute('aria-owns', valueCellsIds.join(' '));
|
|
160
|
+
});
|
|
161
|
+
valueTableCells.forEach(cell => {
|
|
162
|
+
const cellColIndex = +cell.getAttribute('id').split('-')[5];
|
|
163
|
+
const colHeaderCellsIds = filterAndMap(Array.from(colHeaderCells), c => {
|
|
164
|
+
const headerCellColIndex = +c.getAttribute('id').split('-')[5];
|
|
165
|
+
const headerCellColspan = +c.getAttribute('colspan');
|
|
166
|
+
const colIndexIsEqual = cellColIndex === headerCellColIndex;
|
|
167
|
+
const cellColIndexIsWithinHeaderCellRange = headerCellColspan > 1 && (headerCellColIndex + headerCellColspan - 1 >= cellColIndex);
|
|
168
|
+
return colIndexIsEqual || cellColIndexIsWithinHeaderCellRange;
|
|
169
|
+
}, c => c.getAttribute('id'));
|
|
170
|
+
cell.setAttribute('aria-describedby', colHeaderCellsIds.join(' '));
|
|
171
|
+
});
|
|
172
|
+
};
|
|
173
|
+
/**
|
|
174
|
+
* @hidden
|
|
175
|
+
*/
|
|
176
|
+
const position = (target, before) => {
|
|
177
|
+
const targetRect = offset(target);
|
|
178
|
+
const { offsetWidth, offsetHeight } = target;
|
|
179
|
+
const left = targetRect.left + (before ? 0 : offsetWidth);
|
|
180
|
+
const top = targetRect.top + offsetHeight / 2;
|
|
181
|
+
const height = offsetHeight;
|
|
182
|
+
return { left, top, height };
|
|
183
|
+
};
|
|
184
|
+
/**
|
|
185
|
+
* @hidden
|
|
186
|
+
*/
|
|
187
|
+
const filterAndMap = (arr, predicate, mapper) => arr.reduce((acc, curr) => predicate(curr) ? [...acc, mapper(curr)] : acc, []);
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* @hidden
|
|
191
|
+
*/
|
|
192
|
+
let nextPivotGridId = 0;
|
|
193
|
+
/**
|
|
194
|
+
* @hidden
|
|
195
|
+
*/
|
|
196
|
+
class PivotGridDataService {
|
|
197
|
+
constructor(ngZone) {
|
|
198
|
+
this.ngZone = ngZone;
|
|
199
|
+
this.expandedStateChange = new EventEmitter();
|
|
200
|
+
this.configuratorFieldChange = new EventEmitter();
|
|
201
|
+
this.expandedFieldChange = new EventEmitter();
|
|
202
|
+
this.columnHeaderRows = new BehaviorSubject([]);
|
|
203
|
+
this.columnHeaderCols = new BehaviorSubject([]);
|
|
204
|
+
this.rowHeaderCols = new BehaviorSubject([]);
|
|
205
|
+
this.rowHeaderRows = new BehaviorSubject([]);
|
|
206
|
+
this.valuesRows = new BehaviorSubject([]);
|
|
207
|
+
this.loading = new BehaviorSubject(false);
|
|
208
|
+
this.fields = new BehaviorSubject([]);
|
|
209
|
+
this.configuredFields = new BehaviorSubject([]);
|
|
210
|
+
this.pivotGridId = nextPivotGridId++;
|
|
211
|
+
}
|
|
212
|
+
updateRowsAndCols() {
|
|
213
|
+
const rowsTree = toTree((this.rows || []).slice());
|
|
214
|
+
const [rowHeaderRows, rowHeaderLeaves, rowHeaderDepth, rowHeaderBreadth] = toRows(rowsTree);
|
|
215
|
+
const columnsTree = toTree((this.columns || []).slice());
|
|
216
|
+
const [columnHeaderRows, columnHeaderLeaves, columnHeaderBreadth] = toColumns(columnsTree);
|
|
217
|
+
this.columnHeaderLeaves = columnHeaderLeaves;
|
|
218
|
+
this.columnHeaderCols.next(columnHeaderLeaves);
|
|
219
|
+
this.columnHeaderRows.next(columnHeaderRows);
|
|
220
|
+
this.rowHeaderLeaves = rowHeaderLeaves;
|
|
221
|
+
this.rowHeaderCols.next(new Array(rowHeaderBreadth).fill({}));
|
|
222
|
+
this.rowHeaderRows.next(rowHeaderRows);
|
|
223
|
+
this.valuesRows.next(toData((this.normalizedData || []).slice(), columnHeaderLeaves, rowHeaderLeaves, columnHeaderBreadth, rowHeaderDepth));
|
|
224
|
+
if (isDocumentAvailable()) {
|
|
225
|
+
this.ngZone.runOutsideAngular(() => {
|
|
226
|
+
// needed because all tables need to be rendered in accordance with the new settings
|
|
227
|
+
// before applying the required DOM attributes
|
|
228
|
+
setTimeout(() => matchAriaAttributes(this.wrapper));
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
PivotGridDataService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridDataService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
234
|
+
PivotGridDataService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridDataService });
|
|
235
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridDataService, decorators: [{
|
|
236
|
+
type: Injectable
|
|
237
|
+
}], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { expandedStateChange: [{
|
|
238
|
+
type: Output
|
|
239
|
+
}], configuratorFieldChange: [{
|
|
240
|
+
type: Output
|
|
241
|
+
}], expandedFieldChange: [{
|
|
242
|
+
type: Output
|
|
243
|
+
}] } });
|
|
129
244
|
|
|
130
245
|
/**
|
|
131
246
|
* @hidden
|
|
@@ -149,15 +264,16 @@ class PivotGridCellDirective {
|
|
|
149
264
|
return ((_a = this.kendoPivotGridCell) === null || _a === void 0 ? void 0 : _a.hasChildren) && this.kendoPivotGridCell.children.length;
|
|
150
265
|
}
|
|
151
266
|
ngOnInit() {
|
|
267
|
+
var _a, _b, _c;
|
|
152
268
|
const nativeElement = this.hostEl.nativeElement;
|
|
153
269
|
this.renderer.setAttribute(nativeElement, 'rowspan', this.kendoPivotGridCell.rowSpan || 1);
|
|
154
270
|
this.renderer.setAttribute(nativeElement, 'colspan', this.kendoPivotGridCell.colSpan || 1);
|
|
155
271
|
const classesToAdd = {
|
|
156
|
-
'k-pivotgrid-header-total': this.kendoPivotGridCell.total || (this.tableType === 'values'
|
|
272
|
+
'k-pivotgrid-header-total': ((_a = this.kendoPivotGridCell) === null || _a === void 0 ? void 0 : _a.total) || (this.tableType === 'values'
|
|
157
273
|
&& (this.dataService.rowHeaderLeaves[this.rowIndex].total ||
|
|
158
274
|
this.dataService.columnHeaderLeaves[this.colIndex].total)),
|
|
159
|
-
'k-pivotgrid-header-root': this.kendoPivotGridCell.levelNum === 0,
|
|
160
|
-
'k-pivotgrid-expanded': this.kendoPivotGridCell.hasChildren && this.kendoPivotGridCell.children.length,
|
|
275
|
+
'k-pivotgrid-header-root': ((_b = this.kendoPivotGridCell) === null || _b === void 0 ? void 0 : _b.levelNum) === 0,
|
|
276
|
+
'k-pivotgrid-expanded': ((_c = this.kendoPivotGridCell) === null || _c === void 0 ? void 0 : _c.hasChildren) && this.kendoPivotGridCell.children.length,
|
|
161
277
|
'k-first': this.colIndex > 0
|
|
162
278
|
};
|
|
163
279
|
for (let prop in classesToAdd) {
|
|
@@ -172,13 +288,14 @@ PivotGridCellDirective.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
|
|
|
172
288
|
<span
|
|
173
289
|
*ngIf="kendoPivotGridCell.hasChildren && !kendoPivotGridCell.total"
|
|
174
290
|
class="k-icon"
|
|
291
|
+
aria-hidden="true"
|
|
175
292
|
[kendoEventsOutsideAngular]="{
|
|
176
293
|
click: handleClick
|
|
177
294
|
}"
|
|
178
295
|
[ngClass]="{
|
|
179
296
|
'k-i-arrow-chevron-up': expanded,
|
|
180
297
|
'k-i-arrow-chevron-down': !expanded
|
|
181
|
-
}"></span>{{ kendoPivotGridCell.data ? kendoPivotGridCell.data.fmtValue : kendoPivotGridCell.caption }}`, isInline: true, directives: [{ type:
|
|
298
|
+
}"></span>{{ kendoPivotGridCell.data ? kendoPivotGridCell.data.fmtValue : kendoPivotGridCell.caption }}`, isInline: true, directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
182
299
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridCellDirective, decorators: [{
|
|
183
300
|
type: Component,
|
|
184
301
|
args: [{
|
|
@@ -188,6 +305,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
188
305
|
<span
|
|
189
306
|
*ngIf="kendoPivotGridCell.hasChildren && !kendoPivotGridCell.total"
|
|
190
307
|
class="k-icon"
|
|
308
|
+
aria-hidden="true"
|
|
191
309
|
[kendoEventsOutsideAngular]="{
|
|
192
310
|
click: handleClick
|
|
193
311
|
}"
|
|
@@ -217,6 +335,9 @@ class PivotGridTableComponent {
|
|
|
217
335
|
this.dataService = dataService;
|
|
218
336
|
this.dataChangeSubs = new Subscription();
|
|
219
337
|
}
|
|
338
|
+
get pivotGridId() {
|
|
339
|
+
return `kendo-pivotgrid-${this.dataService.pivotGridId}-`;
|
|
340
|
+
}
|
|
220
341
|
ngOnInit() {
|
|
221
342
|
this.dataChangeSubs.add(this.dataService[`${this.tableType}Rows`].subscribe(rows => this.rows = rows));
|
|
222
343
|
this.dataChangeSubs.add(this.tableType === 'values' ?
|
|
@@ -229,86 +350,933 @@ class PivotGridTableComponent {
|
|
|
229
350
|
}
|
|
230
351
|
PivotGridTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridTableComponent, deps: [{ token: PivotGridDataService }], target: i0.ɵɵFactoryTarget.Component });
|
|
231
352
|
PivotGridTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: PivotGridTableComponent, selector: "kendo-pivotgrid-table", inputs: { tableType: "tableType", colWidth: "colWidth" }, ngImport: i0, template: `
|
|
232
|
-
<table
|
|
353
|
+
<table
|
|
354
|
+
class="k-pivotgrid-table"
|
|
355
|
+
role="presentation">
|
|
233
356
|
<colgroup>
|
|
234
357
|
<col
|
|
235
358
|
*ngFor="let item of headerItems;"
|
|
236
359
|
[style.width]="tableType !== 'rowHeader' ? colWidth >= 0 ? colWidth + 'px' : '200px' : undefined" />
|
|
237
360
|
</colgroup>
|
|
238
|
-
<tbody class="k-pivotgrid-tbody">
|
|
361
|
+
<tbody class="k-pivotgrid-tbody" role="rowgroup">
|
|
239
362
|
<tr *ngFor="let row of rows; index as rowIndex"
|
|
240
|
-
class="k-pivotgrid-row"
|
|
363
|
+
class="k-pivotgrid-row"
|
|
364
|
+
role="row">
|
|
241
365
|
<ng-container *ngFor="let cell of row.cells; index as colIndex">
|
|
242
366
|
<th
|
|
243
367
|
*ngIf="cell && tableType !== 'values'"
|
|
244
368
|
[kendoPivotGridCell]="cell"
|
|
245
369
|
[tableType]="tableType"
|
|
246
370
|
[colIndex]="colIndex"
|
|
247
|
-
[rowIndex]="rowIndex"
|
|
371
|
+
[rowIndex]="rowIndex"
|
|
372
|
+
[attr.aria-expanded]="cell.hasChildren && cell.children.length ? 'true' : 'false'"
|
|
373
|
+
[attr.role]="tableType === 'columnHeader' ? 'columnheader' : 'rowheader'"
|
|
374
|
+
[attr.id]="pivotGridId + (tableType === 'columnHeader' ? 'ch-' : 'rh-') + (rowIndex + 1) + '-' + (colIndex + 1)"></th>
|
|
248
375
|
<td
|
|
249
376
|
*ngIf="cell && tableType === 'values'"
|
|
250
377
|
[kendoPivotGridCell]="cell"
|
|
251
378
|
tableType="values"
|
|
252
379
|
[colIndex]="colIndex"
|
|
253
|
-
[rowIndex]="rowIndex"
|
|
380
|
+
[rowIndex]="rowIndex"
|
|
381
|
+
role="gridcell"
|
|
382
|
+
[attr.id]="pivotGridId + 'cell-' + (rowIndex + 1) + '-' + (colIndex + 1)"></td>
|
|
254
383
|
</ng-container>
|
|
255
384
|
</tr>
|
|
256
385
|
</tbody>
|
|
257
386
|
</table>
|
|
258
|
-
`, isInline: true, components: [{ type: PivotGridCellDirective, selector: "[kendoPivotGridCell]", inputs: ["kendoPivotGridCell", "tableType", "rowIndex", "colIndex"] }], directives: [{ type:
|
|
387
|
+
`, isInline: true, components: [{ type: PivotGridCellDirective, selector: "[kendoPivotGridCell]", inputs: ["kendoPivotGridCell", "tableType", "rowIndex", "colIndex"] }], directives: [{ type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
259
388
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridTableComponent, decorators: [{
|
|
260
389
|
type: Component,
|
|
261
390
|
args: [{
|
|
262
391
|
selector: 'kendo-pivotgrid-table',
|
|
263
392
|
template: `
|
|
264
|
-
<table
|
|
393
|
+
<table
|
|
394
|
+
class="k-pivotgrid-table"
|
|
395
|
+
role="presentation">
|
|
265
396
|
<colgroup>
|
|
266
397
|
<col
|
|
267
398
|
*ngFor="let item of headerItems;"
|
|
268
399
|
[style.width]="tableType !== 'rowHeader' ? colWidth >= 0 ? colWidth + 'px' : '200px' : undefined" />
|
|
269
400
|
</colgroup>
|
|
270
|
-
<tbody class="k-pivotgrid-tbody">
|
|
401
|
+
<tbody class="k-pivotgrid-tbody" role="rowgroup">
|
|
271
402
|
<tr *ngFor="let row of rows; index as rowIndex"
|
|
272
|
-
class="k-pivotgrid-row"
|
|
403
|
+
class="k-pivotgrid-row"
|
|
404
|
+
role="row">
|
|
273
405
|
<ng-container *ngFor="let cell of row.cells; index as colIndex">
|
|
274
406
|
<th
|
|
275
407
|
*ngIf="cell && tableType !== 'values'"
|
|
276
408
|
[kendoPivotGridCell]="cell"
|
|
277
409
|
[tableType]="tableType"
|
|
278
410
|
[colIndex]="colIndex"
|
|
279
|
-
[rowIndex]="rowIndex"
|
|
411
|
+
[rowIndex]="rowIndex"
|
|
412
|
+
[attr.aria-expanded]="cell.hasChildren && cell.children.length ? 'true' : 'false'"
|
|
413
|
+
[attr.role]="tableType === 'columnHeader' ? 'columnheader' : 'rowheader'"
|
|
414
|
+
[attr.id]="pivotGridId + (tableType === 'columnHeader' ? 'ch-' : 'rh-') + (rowIndex + 1) + '-' + (colIndex + 1)"></th>
|
|
280
415
|
<td
|
|
281
416
|
*ngIf="cell && tableType === 'values'"
|
|
282
417
|
[kendoPivotGridCell]="cell"
|
|
283
418
|
tableType="values"
|
|
284
419
|
[colIndex]="colIndex"
|
|
285
|
-
[rowIndex]="rowIndex"
|
|
420
|
+
[rowIndex]="rowIndex"
|
|
421
|
+
role="gridcell"
|
|
422
|
+
[attr.id]="pivotGridId + 'cell-' + (rowIndex + 1) + '-' + (colIndex + 1)"></td>
|
|
286
423
|
</ng-container>
|
|
287
424
|
</tr>
|
|
288
425
|
</tbody>
|
|
289
426
|
</table>
|
|
290
427
|
`
|
|
291
428
|
}]
|
|
292
|
-
}], ctorParameters: function () { return [{ type: PivotGridDataService }]; }, propDecorators: { tableType: [{
|
|
429
|
+
}], ctorParameters: function () { return [{ type: PivotGridDataService }]; }, propDecorators: { tableType: [{
|
|
430
|
+
type: Input
|
|
431
|
+
}], colWidth: [{
|
|
432
|
+
type: Input
|
|
433
|
+
}] } });
|
|
434
|
+
|
|
435
|
+
/**
|
|
436
|
+
* @hidden
|
|
437
|
+
*/
|
|
438
|
+
class ConfiguratorService {
|
|
439
|
+
constructor() {
|
|
440
|
+
this.configuratorStateChange = new EventEmitter();
|
|
441
|
+
}
|
|
442
|
+
parseConfiguratorState(action) {
|
|
443
|
+
const newState = configuratorReducer({
|
|
444
|
+
filter: [],
|
|
445
|
+
sort: [],
|
|
446
|
+
rowAxes: this.state.rowAxes,
|
|
447
|
+
columnAxes: this.state.columnAxes,
|
|
448
|
+
measureAxes: this.state.measureAxes,
|
|
449
|
+
dragItem: this.state.dragItem,
|
|
450
|
+
dropDirection: this.state.dropDirection,
|
|
451
|
+
dropTarget: this.state.dropTarget,
|
|
452
|
+
dropZone: this.state.dropZone
|
|
453
|
+
}, action);
|
|
454
|
+
Object.keys(newState).forEach(key => newState[key] === undefined && delete newState[key]);
|
|
455
|
+
this.state = Object.assign(Object.assign({}, this.state), newState);
|
|
456
|
+
this.configuratorStateChange.emit(this.state);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
ConfiguratorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ConfiguratorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
460
|
+
ConfiguratorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ConfiguratorService });
|
|
461
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ConfiguratorService, decorators: [{
|
|
462
|
+
type: Injectable
|
|
463
|
+
}], propDecorators: { configuratorStateChange: [{
|
|
464
|
+
type: Output
|
|
465
|
+
}] } });
|
|
466
|
+
|
|
467
|
+
/**
|
|
468
|
+
* @hidden
|
|
469
|
+
*/
|
|
470
|
+
const append = (element) => {
|
|
471
|
+
let appended = false;
|
|
472
|
+
return () => {
|
|
473
|
+
if (!appended) {
|
|
474
|
+
document.body.appendChild(element);
|
|
475
|
+
appended = true;
|
|
476
|
+
}
|
|
477
|
+
return element;
|
|
478
|
+
};
|
|
479
|
+
};
|
|
480
|
+
/**
|
|
481
|
+
* @hidden
|
|
482
|
+
*/
|
|
483
|
+
class DropCueService {
|
|
484
|
+
create() {
|
|
485
|
+
this.dom = document.createElement('span');
|
|
486
|
+
this.dom.style.position = 'absolute';
|
|
487
|
+
const wrapper = document.createElement('div');
|
|
488
|
+
wrapper.classList.add('k-drop-hint', 'k-drop-hint-v');
|
|
489
|
+
const hintStart = document.createElement('div');
|
|
490
|
+
hintStart.classList.add('k-drop-hint-start');
|
|
491
|
+
const hintLine = document.createElement('div');
|
|
492
|
+
hintLine.classList.add('k-drop-hint-line');
|
|
493
|
+
const hintEnd = document.createElement('div');
|
|
494
|
+
hintEnd.classList.add('k-drop-hint-end');
|
|
495
|
+
wrapper.append(hintStart, hintLine, hintEnd);
|
|
496
|
+
this.dom.append(wrapper);
|
|
497
|
+
this.hide();
|
|
498
|
+
}
|
|
499
|
+
attach() {
|
|
500
|
+
return append(this.dom)();
|
|
501
|
+
}
|
|
502
|
+
remove() {
|
|
503
|
+
if (this.dom && this.dom.parentElement) {
|
|
504
|
+
document.body.removeChild(this.dom);
|
|
505
|
+
this.dom = null;
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
hide() {
|
|
509
|
+
this.dom.style.display = "none";
|
|
510
|
+
}
|
|
511
|
+
position({ left, top, height }) {
|
|
512
|
+
this.dom.style.display = 'block';
|
|
513
|
+
this.dom.style.height = height + 'px';
|
|
514
|
+
this.dom.style.top = top + 'px';
|
|
515
|
+
this.dom.style.zIndex = '1000';
|
|
516
|
+
const width = this.dom.offsetWidth / 2;
|
|
517
|
+
this.dom.style.left = left - width + 'px';
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
DropCueService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DropCueService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
521
|
+
DropCueService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DropCueService });
|
|
522
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DropCueService, decorators: [{
|
|
523
|
+
type: Injectable
|
|
524
|
+
}] });
|
|
525
|
+
|
|
526
|
+
/**
|
|
527
|
+
* @hidden
|
|
528
|
+
*/
|
|
529
|
+
class DropTargetDirective {
|
|
530
|
+
constructor(element, configuratorService, cue, renderer, zone) {
|
|
531
|
+
this.element = element;
|
|
532
|
+
this.configuratorService = configuratorService;
|
|
533
|
+
this.cue = cue;
|
|
534
|
+
this.renderer = renderer;
|
|
535
|
+
this.zone = zone;
|
|
536
|
+
this.subs = new Subscription();
|
|
537
|
+
}
|
|
538
|
+
ngOnInit() {
|
|
539
|
+
const element = this.element.nativeElement;
|
|
540
|
+
this.elementType = element.nodeName === 'KENDO-CHIP' ? 'chip' : 'container';
|
|
541
|
+
this.zone.runOutsideAngular(() => {
|
|
542
|
+
this.subs.add(this.renderer.listen(element, 'mouseenter', this.handleMouseEnter.bind(this)));
|
|
543
|
+
this.subs.add(this.renderer.listen(element, 'mousemove', this.handleMouseMove.bind(this)));
|
|
544
|
+
this.subs.add(this.renderer.listen(element, 'mouseleave', this.handleMouseLeave.bind(this)));
|
|
545
|
+
});
|
|
546
|
+
}
|
|
547
|
+
ngOnDestroy() {
|
|
548
|
+
this.subs.unsubscribe();
|
|
549
|
+
}
|
|
550
|
+
handleMouseEnter(event) {
|
|
551
|
+
if (this.configuratorService.state.dragItem) {
|
|
552
|
+
if (this.elementType === 'chip') {
|
|
553
|
+
this.configuratorService.parseConfiguratorState({ type: PIVOT_CONFIGURATOR_ACTION.setDropTarget, payload: this.item });
|
|
554
|
+
this.targetElement = event.target;
|
|
555
|
+
this.cue.position(position(event.target, this.configuratorService.state.dropDirection === 'before'));
|
|
556
|
+
}
|
|
557
|
+
this.configuratorService.parseConfiguratorState({ type: PIVOT_CONFIGURATOR_ACTION.setDropZone, payload: this.axes });
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
handleMouseMove($event) {
|
|
561
|
+
if (this.configuratorService.state.dragItem) {
|
|
562
|
+
if (this.elementType !== 'chip') {
|
|
563
|
+
return;
|
|
564
|
+
}
|
|
565
|
+
if (this.element.nativeElement) {
|
|
566
|
+
const rect = this.element.nativeElement.getBoundingClientRect();
|
|
567
|
+
const x = $event.clientX - rect.left;
|
|
568
|
+
const direction = x < rect.width / 2 ? 'before' : 'after';
|
|
569
|
+
if ((direction !== this.configuratorService.state.dropDirection) && this.targetElement) {
|
|
570
|
+
this.cue.position(position(this.targetElement, direction === 'before'));
|
|
571
|
+
}
|
|
572
|
+
this.configuratorService.parseConfiguratorState({ type: PIVOT_CONFIGURATOR_ACTION.setDropDirection, payload: direction });
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
handleMouseLeave() {
|
|
577
|
+
if (this.elementType === 'chip') {
|
|
578
|
+
return;
|
|
579
|
+
}
|
|
580
|
+
if (this.configuratorService.state.dragItem) {
|
|
581
|
+
this.configuratorService.parseConfiguratorState({ type: PIVOT_CONFIGURATOR_ACTION.setDropZone, payload: null });
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
DropTargetDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DropTargetDirective, deps: [{ token: i0.ElementRef }, { token: ConfiguratorService }, { token: DropCueService }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
|
|
586
|
+
DropTargetDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: DropTargetDirective, selector: "[kendoDropTarget]", inputs: { item: "item", axes: "axes" }, ngImport: i0 });
|
|
587
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DropTargetDirective, decorators: [{
|
|
588
|
+
type: Directive,
|
|
589
|
+
args: [{
|
|
590
|
+
selector: '[kendoDropTarget]'
|
|
591
|
+
}]
|
|
592
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ConfiguratorService }, { type: DropCueService }, { type: i0.Renderer2 }, { type: i0.NgZone }]; }, propDecorators: { item: [{
|
|
593
|
+
type: Input
|
|
594
|
+
}], axes: [{
|
|
595
|
+
type: Input
|
|
596
|
+
}] } });
|
|
597
|
+
|
|
598
|
+
/**
|
|
599
|
+
* @hidden
|
|
600
|
+
*/
|
|
601
|
+
class DraggableChipDirective {
|
|
602
|
+
constructor(draggable, element, zone, service, cue) {
|
|
603
|
+
this.draggable = draggable;
|
|
604
|
+
this.element = element;
|
|
605
|
+
this.zone = zone;
|
|
606
|
+
this.service = service;
|
|
607
|
+
this.cue = cue;
|
|
608
|
+
this.touchActions = 'none';
|
|
609
|
+
this.initialX = {};
|
|
610
|
+
this.initialY = {};
|
|
611
|
+
this.subs = new Subscription();
|
|
612
|
+
}
|
|
613
|
+
get pointerEvents() {
|
|
614
|
+
return this.drag ? 'none' : undefined;
|
|
615
|
+
}
|
|
616
|
+
ngOnInit() {
|
|
617
|
+
this.zone.runOutsideAngular(() => this.subs.add(this.draggable.kendoPress
|
|
618
|
+
.subscribe((event) => {
|
|
619
|
+
if (isDocumentAvailable()) {
|
|
620
|
+
this.cue.create();
|
|
621
|
+
this.cue.attach();
|
|
622
|
+
this.initialX.current = event.clientX;
|
|
623
|
+
this.initialY.current = event.clientY;
|
|
624
|
+
}
|
|
625
|
+
})));
|
|
626
|
+
this.zone.runOutsideAngular(() => this.subs.add(this.draggable.kendoDrag
|
|
627
|
+
.subscribe((event) => {
|
|
628
|
+
if (isDocumentAvailable()) {
|
|
629
|
+
if (Math.abs(this.initialX.current - event.clientX) < 10 &&
|
|
630
|
+
Math.abs(this.initialY.current - event.clientY) < 10) {
|
|
631
|
+
return;
|
|
632
|
+
}
|
|
633
|
+
if (this.element.nativeElement) {
|
|
634
|
+
this.element.nativeElement.style.transform = `translate(${event.clientX - this.initialX.current}px, ${event.clientY - this.initialY.current}px)`;
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
this.drag = true;
|
|
638
|
+
this.service.parseConfiguratorState({ type: PIVOT_CONFIGURATOR_ACTION.setDragItem, payload: this.item });
|
|
639
|
+
})));
|
|
640
|
+
this.zone.runOutsideAngular(() => this.subs.add(this.draggable.kendoRelease
|
|
641
|
+
.subscribe(() => {
|
|
642
|
+
this.drag = false;
|
|
643
|
+
if (this.service.state.dragItem) {
|
|
644
|
+
if (isDocumentAvailable()) {
|
|
645
|
+
if (this.element.nativeElement) {
|
|
646
|
+
this.element.nativeElement.style.transform = '';
|
|
647
|
+
}
|
|
648
|
+
this.cue.remove();
|
|
649
|
+
}
|
|
650
|
+
this.service.parseConfiguratorState({ type: PIVOT_CONFIGURATOR_ACTION.drop, payload: this.item });
|
|
651
|
+
this.service.state.dragItem = null;
|
|
652
|
+
this.service.state.dropDirection = null;
|
|
653
|
+
this.service.state.dropTarget = null;
|
|
654
|
+
this.service.state.dropZone = null;
|
|
655
|
+
}
|
|
656
|
+
})));
|
|
657
|
+
}
|
|
658
|
+
ngOnDestroy() {
|
|
659
|
+
this.subs.unsubscribe();
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
DraggableChipDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DraggableChipDirective, deps: [{ token: i3.DraggableDirective, optional: true }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: ConfiguratorService }, { token: DropCueService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
663
|
+
DraggableChipDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: DraggableChipDirective, selector: "[kendoChipDraggable]", inputs: { item: "item" }, host: { properties: { "style.pointerEvents": "this.pointerEvents", "style.touch-action": "this.touchActions" } }, ngImport: i0 });
|
|
664
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DraggableChipDirective, decorators: [{
|
|
665
|
+
type: Directive,
|
|
666
|
+
args: [{
|
|
667
|
+
selector: '[kendoChipDraggable]'
|
|
668
|
+
}]
|
|
669
|
+
}], ctorParameters: function () { return [{ type: i3.DraggableDirective, decorators: [{
|
|
670
|
+
type: Optional
|
|
671
|
+
}] }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: ConfiguratorService }, { type: DropCueService }]; }, propDecorators: { pointerEvents: [{
|
|
672
|
+
type: HostBinding,
|
|
673
|
+
args: ['style.pointerEvents']
|
|
674
|
+
}], touchActions: [{
|
|
675
|
+
type: HostBinding,
|
|
676
|
+
args: ['style.touch-action']
|
|
677
|
+
}], item: [{
|
|
678
|
+
type: Input
|
|
679
|
+
}] } });
|
|
680
|
+
|
|
681
|
+
/**
|
|
682
|
+
* @hidden
|
|
683
|
+
* Represents the Kendo UI PivotGrid Configurator component for Angular.
|
|
684
|
+
*/
|
|
685
|
+
class PivotGridConfiguratorComponent {
|
|
686
|
+
constructor(dataService, localization, configuratorService, cdr) {
|
|
687
|
+
this.dataService = dataService;
|
|
688
|
+
this.localization = localization;
|
|
689
|
+
this.configuratorService = configuratorService;
|
|
690
|
+
this.cdr = cdr;
|
|
691
|
+
this.hostClass = true;
|
|
692
|
+
this.horizontal = false;
|
|
693
|
+
this.checked = [];
|
|
694
|
+
this.subs = new Subscription();
|
|
695
|
+
/**
|
|
696
|
+
* A function which determines if a specific node has child nodes.
|
|
697
|
+
*/
|
|
698
|
+
this.hasChildren = (node) => !('hierarchyUniqueName' in node) && !('aggregator' in node);
|
|
699
|
+
/**
|
|
700
|
+
* A function which provides the child nodes for a given parent node.
|
|
701
|
+
*/
|
|
702
|
+
this.children = (node) => {
|
|
703
|
+
if (this.dataService.directive.type === 'olap') {
|
|
704
|
+
const observable = from(this.dataService.directive.fetchChildren(node, this.fields));
|
|
705
|
+
return observable.pipe(mergeMap(value => of(value)));
|
|
706
|
+
}
|
|
707
|
+
return of(node.children);
|
|
708
|
+
};
|
|
709
|
+
}
|
|
710
|
+
ngOnInit() {
|
|
711
|
+
this.subs.add(this.dataService.fields
|
|
712
|
+
.subscribe(res => {
|
|
713
|
+
this.fields = res;
|
|
714
|
+
}));
|
|
715
|
+
this.subs.add(this.dataService.configuredFields
|
|
716
|
+
.subscribe(res => {
|
|
717
|
+
this.originalState = clone(res);
|
|
718
|
+
this.setState(clone(res));
|
|
719
|
+
this.setChecked();
|
|
720
|
+
}));
|
|
721
|
+
this.subs.add(this.configuratorService.configuratorStateChange
|
|
722
|
+
.subscribe(res => {
|
|
723
|
+
this.state = res;
|
|
724
|
+
this.cdr.detectChanges();
|
|
725
|
+
}));
|
|
726
|
+
}
|
|
727
|
+
ngOnDestroy() {
|
|
728
|
+
this.subs.unsubscribe();
|
|
729
|
+
}
|
|
730
|
+
getName(name) {
|
|
731
|
+
return name.toString();
|
|
732
|
+
}
|
|
733
|
+
setState(state) {
|
|
734
|
+
this.state = state;
|
|
735
|
+
this.configuratorService.state = state;
|
|
736
|
+
}
|
|
737
|
+
/**
|
|
738
|
+
* Returns the localized message for a given token
|
|
739
|
+
*/
|
|
740
|
+
messageFor(localizationToken) {
|
|
741
|
+
return this.localization.get(localizationToken);
|
|
742
|
+
}
|
|
743
|
+
/**
|
|
744
|
+
* Retrieves the 'Columns' section item names
|
|
745
|
+
*/
|
|
746
|
+
get columnHierarchies() {
|
|
747
|
+
return this.extractDefaultFields(this.state.columnAxes);
|
|
748
|
+
}
|
|
749
|
+
;
|
|
750
|
+
/**
|
|
751
|
+
* Retrieves the 'Rows' section item names
|
|
752
|
+
*/
|
|
753
|
+
get rowHierarchies() {
|
|
754
|
+
return this.extractDefaultFields(this.state.rowAxes);
|
|
755
|
+
}
|
|
756
|
+
;
|
|
757
|
+
/**
|
|
758
|
+
* Retrieves the 'Value' section item names
|
|
759
|
+
*/
|
|
760
|
+
get measureHierarchies() {
|
|
761
|
+
return this.extractDefaultFields(this.state.measureAxes);
|
|
762
|
+
}
|
|
763
|
+
;
|
|
764
|
+
/**
|
|
765
|
+
* Constructs an array with all selected fields.
|
|
766
|
+
* @param fields - used for when child nodes are loaded on demand.
|
|
767
|
+
* Child nodes are concatinated to the root level nodes.
|
|
768
|
+
*/
|
|
769
|
+
setChecked(fields = []) {
|
|
770
|
+
const allFields = [...this.fields, ...fields];
|
|
771
|
+
const checked = this.getFieldsFlatMap(allFields).filter((f) => [
|
|
772
|
+
...this.columnHierarchies,
|
|
773
|
+
...this.rowHierarchies,
|
|
774
|
+
...this.measureHierarchies
|
|
775
|
+
].some((h) => (h === f.uniqueName || h === f.defaultHierarchy)));
|
|
776
|
+
this.checked = checked;
|
|
777
|
+
}
|
|
778
|
+
/**
|
|
779
|
+
* A function which determines if a specific node is checked/
|
|
780
|
+
*/
|
|
781
|
+
isItemChecked(node) {
|
|
782
|
+
var _a, _b;
|
|
783
|
+
const res = this.checked.some(s => node.defaultHierarchy
|
|
784
|
+
? s.defaultHierarchy === node.defaultHierarchy
|
|
785
|
+
: s.uniqueName === node.uniqueName)
|
|
786
|
+
|| (((_a = node.children) === null || _a === void 0 ? void 0 : _a.length) && ((_b = node.children) === null || _b === void 0 ? void 0 : _b.every((c) => c.checked)));
|
|
787
|
+
return res || null;
|
|
788
|
+
}
|
|
789
|
+
/**
|
|
790
|
+
* Determines if a checkbox should be rendered.
|
|
791
|
+
*/
|
|
792
|
+
isSelectable(node) {
|
|
793
|
+
const hasChildren = !('hierarchyUniqueName' in node) && !('aggregator' in node);
|
|
794
|
+
return !Boolean((!hasChildren && !node.aggregator && !node.measure)
|
|
795
|
+
|| (node.type === 2)
|
|
796
|
+
|| node.uniqueName === '[KPIs]');
|
|
797
|
+
}
|
|
798
|
+
/**
|
|
799
|
+
* Check if the newly loaded child nodes have checked items.
|
|
800
|
+
* (Only for OLAP data-binding directive)
|
|
801
|
+
*/
|
|
802
|
+
handleChildrenLoaded(event) {
|
|
803
|
+
if (this.dataService.directive.type === 'local') {
|
|
804
|
+
return;
|
|
805
|
+
}
|
|
806
|
+
const fields = event.children.map(item => item.dataItem);
|
|
807
|
+
this.setChecked(fields);
|
|
808
|
+
}
|
|
809
|
+
handleCheckedChange(event, item) {
|
|
810
|
+
if (event.target.checked) {
|
|
811
|
+
this.checked = [...this.checked, item];
|
|
812
|
+
}
|
|
813
|
+
else {
|
|
814
|
+
const itemIndex = this.checked.findIndex(checkedItem => checkedItem.uniqueName === item.uniqueName);
|
|
815
|
+
this.checked.splice(itemIndex, 1);
|
|
816
|
+
}
|
|
817
|
+
const action = {
|
|
818
|
+
type: 'PIVOT_CONFIGURATOR_ACTION_TOGGLE_SELECTION',
|
|
819
|
+
payload: item
|
|
820
|
+
};
|
|
821
|
+
this.configuratorService.parseConfiguratorState(action);
|
|
822
|
+
}
|
|
823
|
+
handleSubmit() {
|
|
824
|
+
this.dataService.configuratorFieldChange.emit(this.state);
|
|
825
|
+
}
|
|
826
|
+
/**
|
|
827
|
+
* Reset the configurator to the last saved state
|
|
828
|
+
*/
|
|
829
|
+
handleReset() {
|
|
830
|
+
this.setState(clone(this.originalState));
|
|
831
|
+
this.setChecked();
|
|
832
|
+
}
|
|
833
|
+
/**
|
|
834
|
+
* Flattens all available fields.
|
|
835
|
+
*/
|
|
836
|
+
getFieldsFlatMap(nodes = []) {
|
|
837
|
+
let result = [...nodes];
|
|
838
|
+
(nodes || []).forEach((child) => {
|
|
839
|
+
result = result.concat(this.getFieldsFlatMap(child.children));
|
|
840
|
+
});
|
|
841
|
+
return result;
|
|
842
|
+
}
|
|
843
|
+
/**
|
|
844
|
+
* Creates an array containing only the field names, e.g. '[Date].[Calendar]' or 'Product'
|
|
845
|
+
*/
|
|
846
|
+
extractDefaultFields(columns = []) {
|
|
847
|
+
const result = new Set();
|
|
848
|
+
columns.forEach((column) => {
|
|
849
|
+
result.add(String(column.name));
|
|
850
|
+
});
|
|
851
|
+
return Array.from(result);
|
|
852
|
+
}
|
|
853
|
+
;
|
|
854
|
+
}
|
|
855
|
+
PivotGridConfiguratorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridConfiguratorComponent, deps: [{ token: PivotGridDataService }, { token: i2.LocalizationService }, { token: ConfiguratorService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
856
|
+
PivotGridConfiguratorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: PivotGridConfiguratorComponent, selector: "kendo-pivotgrid-configurator", inputs: { horizontal: "horizontal" }, host: { properties: { "class.k-pivotgrid-configurator": "this.hostClass" } }, providers: [
|
|
857
|
+
ConfiguratorService,
|
|
858
|
+
DropCueService
|
|
859
|
+
], ngImport: i0, template: `
|
|
860
|
+
<div
|
|
861
|
+
class="k-pivotgrid-configurator-panel k-pivotgrid-configurator-push"
|
|
862
|
+
[ngClass]="{
|
|
863
|
+
'k-pivotgrid-configurator-horizontal': horizontal,
|
|
864
|
+
'k-pivotgrid-configurator-vertical': !horizontal
|
|
865
|
+
}"
|
|
866
|
+
>
|
|
867
|
+
<div class="k-pivotgrid-configurator-header">
|
|
868
|
+
<div class="k-pivotgrid-configurator-header-text">{{messageFor('configuratorHeaderText')}}</div>
|
|
869
|
+
</div>
|
|
870
|
+
|
|
871
|
+
<div class="k-pivotgrid-configurator-content">
|
|
872
|
+
<div class="k-form" [class.k-form-horizontal]="horizontal">
|
|
873
|
+
<div class="k-form-field-wrapper">
|
|
874
|
+
<div class="k-form-field">
|
|
875
|
+
<span class="k-label">{{messageFor('configuratorFieldsText')}}</span>
|
|
876
|
+
</div>
|
|
877
|
+
|
|
878
|
+
<div class="k-form-field">
|
|
879
|
+
<div class="k-fields-list-wrapper">
|
|
880
|
+
<kendo-treeview
|
|
881
|
+
[nodes]="fields"
|
|
882
|
+
textField="caption"
|
|
883
|
+
[children]="children"
|
|
884
|
+
[hasChildren]="hasChildren"
|
|
885
|
+
kendoTreeViewExpandable
|
|
886
|
+
(childrenLoaded)="handleChildrenLoaded($event)"
|
|
887
|
+
>
|
|
888
|
+
<ng-template kendoTreeViewNodeTemplate let-dataItem>
|
|
889
|
+
<input kendoCheckBox
|
|
890
|
+
*ngIf="isSelectable(dataItem)"
|
|
891
|
+
type="checkbox"
|
|
892
|
+
kendoCheckBox
|
|
893
|
+
[checked]="isItemChecked(dataItem)"
|
|
894
|
+
(change)="handleCheckedChange($event, dataItem)"/>
|
|
895
|
+
{{ dataItem.caption }}
|
|
896
|
+
</ng-template>
|
|
897
|
+
</kendo-treeview>
|
|
898
|
+
|
|
899
|
+
</div>
|
|
900
|
+
</div>
|
|
901
|
+
</div>
|
|
902
|
+
|
|
903
|
+
<div *ngIf="horizontal; else verticalTemplate" class="k-form-field-wrapper">
|
|
904
|
+
<ng-container *ngTemplateOutlet="verticalTemplate"></ng-container>
|
|
905
|
+
</div>
|
|
906
|
+
|
|
907
|
+
<ng-template #verticalTemplate>
|
|
908
|
+
<div class="k-form-field" kendoDropTarget axes="columnAxes">
|
|
909
|
+
<span class="k-label">{{messageFor('configuratorColumnsText')}}</span>
|
|
910
|
+
</div>
|
|
911
|
+
|
|
912
|
+
<kendo-chiplist
|
|
913
|
+
*ngIf="state.columnAxes && state.columnAxes.length; else noColumnAxes"
|
|
914
|
+
kendoDropTarget
|
|
915
|
+
axes="columnAxes"
|
|
916
|
+
>
|
|
917
|
+
<kendo-chip *ngFor="let item of state.columnAxes"
|
|
918
|
+
kendoChipDraggable
|
|
919
|
+
kendoDraggable
|
|
920
|
+
kendoDropTarget
|
|
921
|
+
[item]="item"
|
|
922
|
+
axes="columnAxes"
|
|
923
|
+
rounded="full"
|
|
924
|
+
[removable]="true"
|
|
925
|
+
>
|
|
926
|
+
{{ getName(item.name) }}
|
|
927
|
+
</kendo-chip>
|
|
928
|
+
</kendo-chiplist>
|
|
929
|
+
|
|
930
|
+
<ng-template #noColumnAxes>
|
|
931
|
+
<div class="k-settings-description" kendoDropTarget axes="columnAxes">{{messageFor('configuratorEmptyColumnsText')}}</div>
|
|
932
|
+
</ng-template>
|
|
933
|
+
|
|
934
|
+
<div class="k-form-field" kendoDropTarget axes="rowAxes">
|
|
935
|
+
<span class="k-label">{{messageFor('configuratorRowsText')}}</span>
|
|
936
|
+
</div>
|
|
937
|
+
|
|
938
|
+
<kendo-chiplist
|
|
939
|
+
*ngIf="state.rowAxes && state.rowAxes.length; else noRowAxes"
|
|
940
|
+
kendoDropTarget
|
|
941
|
+
axes="rowAxes"
|
|
942
|
+
>
|
|
943
|
+
<kendo-chip *ngFor="let item of state.rowAxes"
|
|
944
|
+
kendoChipDraggable
|
|
945
|
+
kendoDraggable
|
|
946
|
+
kendoDropTarget
|
|
947
|
+
[item]="item"
|
|
948
|
+
axes="rowAxes"
|
|
949
|
+
rounded="full"
|
|
950
|
+
[removable]="true"
|
|
951
|
+
>
|
|
952
|
+
{{ getName(item.name) }}
|
|
953
|
+
</kendo-chip>
|
|
954
|
+
</kendo-chiplist>
|
|
955
|
+
|
|
956
|
+
<ng-template #noRowAxes>
|
|
957
|
+
<div class="k-settings-description" kendoDropTarget axes="rowAxes">{{messageFor('configuratorEmptyRowsText')}}</div>
|
|
958
|
+
</ng-template>
|
|
959
|
+
</ng-template>
|
|
960
|
+
|
|
961
|
+
<div *ngIf="horizontal; else elseTpl2" class="k-form-field-wrapper">
|
|
962
|
+
<ng-container *ngTemplateOutlet="elseTpl2"></ng-container>
|
|
963
|
+
</div>
|
|
964
|
+
|
|
965
|
+
<ng-template #elseTpl2>
|
|
966
|
+
<div class="k-form-field" kendoDropTarget axes="measureAxes">
|
|
967
|
+
<span class="k-label">{{messageFor('configuratorValuesText')}}</span>
|
|
968
|
+
</div>
|
|
969
|
+
|
|
970
|
+
<kendo-chiplist
|
|
971
|
+
*ngIf="state.measureAxes && state.measureAxes.length; else noMeasureAxes"
|
|
972
|
+
kendoDropTarget
|
|
973
|
+
axes="measureAxes"
|
|
974
|
+
>
|
|
975
|
+
<kendo-chip *ngFor="let item of state.measureAxes"
|
|
976
|
+
kendoChipDraggable
|
|
977
|
+
kendoDraggable
|
|
978
|
+
kendoDropTarget
|
|
979
|
+
[item]="item"
|
|
980
|
+
axes="measureAxes"
|
|
981
|
+
|
|
982
|
+
rounded="full"
|
|
983
|
+
[removable]="true"
|
|
984
|
+
>
|
|
985
|
+
{{ getName(item.name) }}
|
|
986
|
+
</kendo-chip>
|
|
987
|
+
</kendo-chiplist>
|
|
988
|
+
|
|
989
|
+
<ng-template #noMeasureAxes>
|
|
990
|
+
<div class="k-settings-description" kendoDropTarget axes="measureAxes">{{messageFor('configuratorEmptyMeasuresText')}}</div>
|
|
991
|
+
</ng-template>
|
|
992
|
+
</ng-template>
|
|
993
|
+
|
|
994
|
+
</div>
|
|
995
|
+
</div>
|
|
996
|
+
<div class="k-pivotgrid-configurator-actions k-actions k-hstack k-justify-content-end">
|
|
997
|
+
<button kendoButton type="button" (click)="handleReset()">{{messageFor('configuratorCancelButtonText')}}</button>
|
|
998
|
+
<button kendoButton themeColor="primary" type="button" (click)="handleSubmit()">{{messageFor('configuratorApplyButtonText')}}</button>
|
|
999
|
+
</div>
|
|
1000
|
+
</div>
|
|
1001
|
+
`, isInline: true, components: [{ type: i4.TreeViewComponent, selector: "kendo-treeview", inputs: ["filterInputPlaceholder", "expandDisabledNodes", "animate", "nodeTemplate", "loadMoreButtonTemplate", "trackBy", "nodes", "textField", "hasChildren", "isChecked", "isDisabled", "isExpanded", "isSelected", "isVisible", "navigable", "children", "loadOnDemand", "filterable", "filter", "size", "disableParentNodesOnly"], outputs: ["childrenLoaded", "blur", "focus", "expand", "collapse", "nodeDragStart", "nodeDrag", "filterStateChange", "nodeDrop", "nodeDragEnd", "addItem", "removeItem", "checkedChange", "selectionChange", "filterChange", "nodeClick", "nodeDblClick"], exportAs: ["kendoTreeView"] }, { type: i5.ChipListComponent, selector: "kendo-chiplist, kendo-chip-list", inputs: ["selection", "size"], outputs: ["selectedChange", "remove"] }, { type: i5.ChipComponent, selector: "kendo-chip", inputs: ["label", "icon", "iconClass", "avatarClass", "selected", "removable", "removeIcon", "disabled", "size", "rounded", "fillMode", "themeColor"], outputs: ["remove", "contentClick"] }], directives: [{ type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.ExpandDirective, selector: "[kendoTreeViewExpandable]", inputs: ["isExpanded", "expandBy", "expandOnFilter", "expandedKeys"], outputs: ["expandedKeysChange"] }, { type: i4.NodeTemplateDirective, selector: "[kendoTreeViewNodeTemplate]" }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: DropTargetDirective, selector: "[kendoDropTarget]", inputs: ["item", "axes"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: DraggableChipDirective, selector: "[kendoChipDraggable]", inputs: ["item"] }, { type: i3.DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { type: i5.ButtonDirective, selector: "button[kendoButton], span[kendoButton]", inputs: ["toggleable", "togglable", "selected", "tabIndex", "icon", "iconClass", "imageUrl", "disabled", "size", "rounded", "fillMode", "themeColor", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
|
|
1002
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridConfiguratorComponent, decorators: [{
|
|
1003
|
+
type: Component,
|
|
1004
|
+
args: [{
|
|
1005
|
+
selector: 'kendo-pivotgrid-configurator',
|
|
1006
|
+
providers: [
|
|
1007
|
+
ConfiguratorService,
|
|
1008
|
+
DropCueService
|
|
1009
|
+
],
|
|
1010
|
+
template: `
|
|
1011
|
+
<div
|
|
1012
|
+
class="k-pivotgrid-configurator-panel k-pivotgrid-configurator-push"
|
|
1013
|
+
[ngClass]="{
|
|
1014
|
+
'k-pivotgrid-configurator-horizontal': horizontal,
|
|
1015
|
+
'k-pivotgrid-configurator-vertical': !horizontal
|
|
1016
|
+
}"
|
|
1017
|
+
>
|
|
1018
|
+
<div class="k-pivotgrid-configurator-header">
|
|
1019
|
+
<div class="k-pivotgrid-configurator-header-text">{{messageFor('configuratorHeaderText')}}</div>
|
|
1020
|
+
</div>
|
|
1021
|
+
|
|
1022
|
+
<div class="k-pivotgrid-configurator-content">
|
|
1023
|
+
<div class="k-form" [class.k-form-horizontal]="horizontal">
|
|
1024
|
+
<div class="k-form-field-wrapper">
|
|
1025
|
+
<div class="k-form-field">
|
|
1026
|
+
<span class="k-label">{{messageFor('configuratorFieldsText')}}</span>
|
|
1027
|
+
</div>
|
|
1028
|
+
|
|
1029
|
+
<div class="k-form-field">
|
|
1030
|
+
<div class="k-fields-list-wrapper">
|
|
1031
|
+
<kendo-treeview
|
|
1032
|
+
[nodes]="fields"
|
|
1033
|
+
textField="caption"
|
|
1034
|
+
[children]="children"
|
|
1035
|
+
[hasChildren]="hasChildren"
|
|
1036
|
+
kendoTreeViewExpandable
|
|
1037
|
+
(childrenLoaded)="handleChildrenLoaded($event)"
|
|
1038
|
+
>
|
|
1039
|
+
<ng-template kendoTreeViewNodeTemplate let-dataItem>
|
|
1040
|
+
<input kendoCheckBox
|
|
1041
|
+
*ngIf="isSelectable(dataItem)"
|
|
1042
|
+
type="checkbox"
|
|
1043
|
+
kendoCheckBox
|
|
1044
|
+
[checked]="isItemChecked(dataItem)"
|
|
1045
|
+
(change)="handleCheckedChange($event, dataItem)"/>
|
|
1046
|
+
{{ dataItem.caption }}
|
|
1047
|
+
</ng-template>
|
|
1048
|
+
</kendo-treeview>
|
|
1049
|
+
|
|
1050
|
+
</div>
|
|
1051
|
+
</div>
|
|
1052
|
+
</div>
|
|
1053
|
+
|
|
1054
|
+
<div *ngIf="horizontal; else verticalTemplate" class="k-form-field-wrapper">
|
|
1055
|
+
<ng-container *ngTemplateOutlet="verticalTemplate"></ng-container>
|
|
1056
|
+
</div>
|
|
1057
|
+
|
|
1058
|
+
<ng-template #verticalTemplate>
|
|
1059
|
+
<div class="k-form-field" kendoDropTarget axes="columnAxes">
|
|
1060
|
+
<span class="k-label">{{messageFor('configuratorColumnsText')}}</span>
|
|
1061
|
+
</div>
|
|
1062
|
+
|
|
1063
|
+
<kendo-chiplist
|
|
1064
|
+
*ngIf="state.columnAxes && state.columnAxes.length; else noColumnAxes"
|
|
1065
|
+
kendoDropTarget
|
|
1066
|
+
axes="columnAxes"
|
|
1067
|
+
>
|
|
1068
|
+
<kendo-chip *ngFor="let item of state.columnAxes"
|
|
1069
|
+
kendoChipDraggable
|
|
1070
|
+
kendoDraggable
|
|
1071
|
+
kendoDropTarget
|
|
1072
|
+
[item]="item"
|
|
1073
|
+
axes="columnAxes"
|
|
1074
|
+
rounded="full"
|
|
1075
|
+
[removable]="true"
|
|
1076
|
+
>
|
|
1077
|
+
{{ getName(item.name) }}
|
|
1078
|
+
</kendo-chip>
|
|
1079
|
+
</kendo-chiplist>
|
|
1080
|
+
|
|
1081
|
+
<ng-template #noColumnAxes>
|
|
1082
|
+
<div class="k-settings-description" kendoDropTarget axes="columnAxes">{{messageFor('configuratorEmptyColumnsText')}}</div>
|
|
1083
|
+
</ng-template>
|
|
1084
|
+
|
|
1085
|
+
<div class="k-form-field" kendoDropTarget axes="rowAxes">
|
|
1086
|
+
<span class="k-label">{{messageFor('configuratorRowsText')}}</span>
|
|
1087
|
+
</div>
|
|
1088
|
+
|
|
1089
|
+
<kendo-chiplist
|
|
1090
|
+
*ngIf="state.rowAxes && state.rowAxes.length; else noRowAxes"
|
|
1091
|
+
kendoDropTarget
|
|
1092
|
+
axes="rowAxes"
|
|
1093
|
+
>
|
|
1094
|
+
<kendo-chip *ngFor="let item of state.rowAxes"
|
|
1095
|
+
kendoChipDraggable
|
|
1096
|
+
kendoDraggable
|
|
1097
|
+
kendoDropTarget
|
|
1098
|
+
[item]="item"
|
|
1099
|
+
axes="rowAxes"
|
|
1100
|
+
rounded="full"
|
|
1101
|
+
[removable]="true"
|
|
1102
|
+
>
|
|
1103
|
+
{{ getName(item.name) }}
|
|
1104
|
+
</kendo-chip>
|
|
1105
|
+
</kendo-chiplist>
|
|
1106
|
+
|
|
1107
|
+
<ng-template #noRowAxes>
|
|
1108
|
+
<div class="k-settings-description" kendoDropTarget axes="rowAxes">{{messageFor('configuratorEmptyRowsText')}}</div>
|
|
1109
|
+
</ng-template>
|
|
1110
|
+
</ng-template>
|
|
1111
|
+
|
|
1112
|
+
<div *ngIf="horizontal; else elseTpl2" class="k-form-field-wrapper">
|
|
1113
|
+
<ng-container *ngTemplateOutlet="elseTpl2"></ng-container>
|
|
1114
|
+
</div>
|
|
1115
|
+
|
|
1116
|
+
<ng-template #elseTpl2>
|
|
1117
|
+
<div class="k-form-field" kendoDropTarget axes="measureAxes">
|
|
1118
|
+
<span class="k-label">{{messageFor('configuratorValuesText')}}</span>
|
|
1119
|
+
</div>
|
|
1120
|
+
|
|
1121
|
+
<kendo-chiplist
|
|
1122
|
+
*ngIf="state.measureAxes && state.measureAxes.length; else noMeasureAxes"
|
|
1123
|
+
kendoDropTarget
|
|
1124
|
+
axes="measureAxes"
|
|
1125
|
+
>
|
|
1126
|
+
<kendo-chip *ngFor="let item of state.measureAxes"
|
|
1127
|
+
kendoChipDraggable
|
|
1128
|
+
kendoDraggable
|
|
1129
|
+
kendoDropTarget
|
|
1130
|
+
[item]="item"
|
|
1131
|
+
axes="measureAxes"
|
|
1132
|
+
|
|
1133
|
+
rounded="full"
|
|
1134
|
+
[removable]="true"
|
|
1135
|
+
>
|
|
1136
|
+
{{ getName(item.name) }}
|
|
1137
|
+
</kendo-chip>
|
|
1138
|
+
</kendo-chiplist>
|
|
1139
|
+
|
|
1140
|
+
<ng-template #noMeasureAxes>
|
|
1141
|
+
<div class="k-settings-description" kendoDropTarget axes="measureAxes">{{messageFor('configuratorEmptyMeasuresText')}}</div>
|
|
1142
|
+
</ng-template>
|
|
1143
|
+
</ng-template>
|
|
1144
|
+
|
|
1145
|
+
</div>
|
|
1146
|
+
</div>
|
|
1147
|
+
<div class="k-pivotgrid-configurator-actions k-actions k-hstack k-justify-content-end">
|
|
1148
|
+
<button kendoButton type="button" (click)="handleReset()">{{messageFor('configuratorCancelButtonText')}}</button>
|
|
1149
|
+
<button kendoButton themeColor="primary" type="button" (click)="handleSubmit()">{{messageFor('configuratorApplyButtonText')}}</button>
|
|
1150
|
+
</div>
|
|
1151
|
+
</div>
|
|
1152
|
+
`
|
|
1153
|
+
}]
|
|
1154
|
+
}], ctorParameters: function () { return [{ type: PivotGridDataService }, { type: i2.LocalizationService }, { type: ConfiguratorService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { hostClass: [{
|
|
1155
|
+
type: HostBinding,
|
|
1156
|
+
args: ['class.k-pivotgrid-configurator']
|
|
1157
|
+
}], horizontal: [{
|
|
293
1158
|
type: Input
|
|
294
|
-
}]
|
|
1159
|
+
}] } });
|
|
1160
|
+
|
|
1161
|
+
/**
|
|
1162
|
+
* @hidden
|
|
1163
|
+
*/
|
|
1164
|
+
class PivotGridMessages extends ComponentMessages {
|
|
1165
|
+
}
|
|
1166
|
+
PivotGridMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
1167
|
+
PivotGridMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: PivotGridMessages, inputs: { fieldMenuFilterItemLabel: "fieldMenuFilterItemLabel", fieldMenuSortAscendingItemLabel: "fieldMenuSortAscendingItemLabel", fieldMenuSortDescendingItemLabel: "fieldMenuSortDescendingItemLabel", filterInputLabel: "filterInputLabel", filterOperatorsDropDownLabel: "filterOperatorsDropDownLabel", filterEqOperator: "filterEqOperator", filterNotEqOperator: "filterNotEqOperator", filterIsNullOperator: "filterIsNullOperator", filterIsNotNullOperator: "filterIsNotNullOperator", filterIsEmptyOperator: "filterIsEmptyOperator", filterIsNotEmptyOperator: "filterIsNotEmptyOperator", filterStartsWithOperator: "filterStartsWithOperator", filterContainsOperator: "filterContainsOperator", filterNotContainsOperator: "filterNotContainsOperator", filterEndsWithOperator: "filterEndsWithOperator", filterFilterButton: "filterFilterButton", filterClearButton: "filterClearButton", loading: "loading", emptyCellLabel: "emptyCellLabel", configuratorButtonText: "configuratorButtonText", configuratorHeaderText: "configuratorHeaderText", configuratorFieldsText: "configuratorFieldsText", configuratorColumnsText: "configuratorColumnsText", configuratorRowsText: "configuratorRowsText", configuratorValuesText: "configuratorValuesText", configuratorCancelButtonText: "configuratorCancelButtonText", configuratorApplyButtonText: "configuratorApplyButtonText", configuratorEmptyRowsText: "configuratorEmptyRowsText", configuratorEmptyColumnsText: "configuratorEmptyColumnsText", configuratorEmptyMeasuresText: "configuratorEmptyMeasuresText" }, usesInheritance: true, ngImport: i0 });
|
|
1168
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridMessages, decorators: [{
|
|
1169
|
+
type: Directive
|
|
1170
|
+
}], propDecorators: { fieldMenuFilterItemLabel: [{
|
|
1171
|
+
type: Input
|
|
1172
|
+
}], fieldMenuSortAscendingItemLabel: [{
|
|
1173
|
+
type: Input
|
|
1174
|
+
}], fieldMenuSortDescendingItemLabel: [{
|
|
1175
|
+
type: Input
|
|
1176
|
+
}], filterInputLabel: [{
|
|
1177
|
+
type: Input
|
|
1178
|
+
}], filterOperatorsDropDownLabel: [{
|
|
1179
|
+
type: Input
|
|
1180
|
+
}], filterEqOperator: [{
|
|
1181
|
+
type: Input
|
|
1182
|
+
}], filterNotEqOperator: [{
|
|
1183
|
+
type: Input
|
|
1184
|
+
}], filterIsNullOperator: [{
|
|
1185
|
+
type: Input
|
|
1186
|
+
}], filterIsNotNullOperator: [{
|
|
1187
|
+
type: Input
|
|
1188
|
+
}], filterIsEmptyOperator: [{
|
|
1189
|
+
type: Input
|
|
1190
|
+
}], filterIsNotEmptyOperator: [{
|
|
1191
|
+
type: Input
|
|
1192
|
+
}], filterStartsWithOperator: [{
|
|
1193
|
+
type: Input
|
|
1194
|
+
}], filterContainsOperator: [{
|
|
1195
|
+
type: Input
|
|
1196
|
+
}], filterNotContainsOperator: [{
|
|
1197
|
+
type: Input
|
|
1198
|
+
}], filterEndsWithOperator: [{
|
|
1199
|
+
type: Input
|
|
1200
|
+
}], filterFilterButton: [{
|
|
1201
|
+
type: Input
|
|
1202
|
+
}], filterClearButton: [{
|
|
1203
|
+
type: Input
|
|
1204
|
+
}], loading: [{
|
|
1205
|
+
type: Input
|
|
1206
|
+
}], emptyCellLabel: [{
|
|
1207
|
+
type: Input
|
|
1208
|
+
}], configuratorButtonText: [{
|
|
1209
|
+
type: Input
|
|
1210
|
+
}], configuratorHeaderText: [{
|
|
1211
|
+
type: Input
|
|
1212
|
+
}], configuratorFieldsText: [{
|
|
1213
|
+
type: Input
|
|
1214
|
+
}], configuratorColumnsText: [{
|
|
1215
|
+
type: Input
|
|
1216
|
+
}], configuratorRowsText: [{
|
|
1217
|
+
type: Input
|
|
1218
|
+
}], configuratorValuesText: [{
|
|
1219
|
+
type: Input
|
|
1220
|
+
}], configuratorCancelButtonText: [{
|
|
1221
|
+
type: Input
|
|
1222
|
+
}], configuratorApplyButtonText: [{
|
|
1223
|
+
type: Input
|
|
1224
|
+
}], configuratorEmptyRowsText: [{
|
|
1225
|
+
type: Input
|
|
1226
|
+
}], configuratorEmptyColumnsText: [{
|
|
1227
|
+
type: Input
|
|
1228
|
+
}], configuratorEmptyMeasuresText: [{
|
|
295
1229
|
type: Input
|
|
296
1230
|
}] } });
|
|
297
1231
|
|
|
1232
|
+
/**
|
|
1233
|
+
* @hidden
|
|
1234
|
+
*/
|
|
1235
|
+
class LocalizedMessagesDirective extends PivotGridMessages {
|
|
1236
|
+
constructor(service) {
|
|
1237
|
+
super();
|
|
1238
|
+
this.service = service;
|
|
1239
|
+
}
|
|
1240
|
+
}
|
|
1241
|
+
LocalizedMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: LocalizedMessagesDirective, deps: [{ token: i2.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
1242
|
+
LocalizedMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: LocalizedMessagesDirective, selector: "[kendoPivotGridLocalizedMessages]", providers: [
|
|
1243
|
+
{
|
|
1244
|
+
provide: PivotGridMessages,
|
|
1245
|
+
useExisting: forwardRef(() => LocalizedMessagesDirective)
|
|
1246
|
+
}
|
|
1247
|
+
], usesInheritance: true, ngImport: i0 });
|
|
1248
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: LocalizedMessagesDirective, decorators: [{
|
|
1249
|
+
type: Directive,
|
|
1250
|
+
args: [{
|
|
1251
|
+
providers: [
|
|
1252
|
+
{
|
|
1253
|
+
provide: PivotGridMessages,
|
|
1254
|
+
useExisting: forwardRef(() => LocalizedMessagesDirective)
|
|
1255
|
+
}
|
|
1256
|
+
],
|
|
1257
|
+
selector: '[kendoPivotGridLocalizedMessages]'
|
|
1258
|
+
}]
|
|
1259
|
+
}], ctorParameters: function () { return [{ type: i2.LocalizationService }]; } });
|
|
1260
|
+
|
|
298
1261
|
const DEFAULT_LOADER_SETTINGS = {
|
|
299
1262
|
type: 'converging-spinner',
|
|
300
1263
|
themeColor: 'primary',
|
|
301
1264
|
size: 'large'
|
|
302
1265
|
};
|
|
1266
|
+
const DEFAULT_CONFIGURATOR_SETTINGS = {
|
|
1267
|
+
position: 'right',
|
|
1268
|
+
horizontal: false
|
|
1269
|
+
};
|
|
303
1270
|
/**
|
|
304
1271
|
* Represents the Kendo UI PivotGrid component for Angular.
|
|
305
1272
|
*/
|
|
306
1273
|
class PivotGridComponent {
|
|
307
|
-
constructor(hostEl, zone, dataService, _scrollbarWidthService) {
|
|
308
|
-
this.hostEl = hostEl;
|
|
1274
|
+
constructor(hostEl, zone, dataService, localization, _scrollbarWidthService) {
|
|
309
1275
|
this.zone = zone;
|
|
310
1276
|
this.dataService = dataService;
|
|
1277
|
+
this.localization = localization;
|
|
311
1278
|
this.hostClass = true;
|
|
1279
|
+
this.ariaRole = 'grid';
|
|
312
1280
|
/**
|
|
313
1281
|
* Specify the width of the column header and data cells. Value is treated as pixels.
|
|
314
1282
|
*
|
|
@@ -318,12 +1286,13 @@ class PivotGridComponent {
|
|
|
318
1286
|
this.resizeObservers = [];
|
|
319
1287
|
this._loaderSettings = DEFAULT_LOADER_SETTINGS;
|
|
320
1288
|
this.subs = new Subscription();
|
|
1289
|
+
this.rtl = false;
|
|
321
1290
|
this.resizeContainer = (axis, element) => {
|
|
322
1291
|
const isRows = axis === 'Rows';
|
|
323
|
-
const
|
|
1292
|
+
const table = this.table.nativeElement;
|
|
324
1293
|
const size = isRows ? 'offsetHeight' : 'offsetWidth';
|
|
325
|
-
|
|
326
|
-
|
|
1294
|
+
table.style[`gridTemplate${axis}`] = '';
|
|
1295
|
+
table.style[`gridTemplate${axis}`] = `${element[size]}px 1fr`;
|
|
327
1296
|
};
|
|
328
1297
|
this.handleScroll = (event) => {
|
|
329
1298
|
if (event.target === this.valuesTable.nativeElement) {
|
|
@@ -340,6 +1309,30 @@ class PivotGridComponent {
|
|
|
340
1309
|
}
|
|
341
1310
|
};
|
|
342
1311
|
validatePackage(packageMetadata);
|
|
1312
|
+
this.subs.add(this.localization.changes.subscribe(({ rtl }) => {
|
|
1313
|
+
this.rtl = rtl;
|
|
1314
|
+
this.direction = this.rtl ? 'rtl' : 'ltr';
|
|
1315
|
+
}));
|
|
1316
|
+
dataService.wrapper = hostEl.nativeElement;
|
|
1317
|
+
}
|
|
1318
|
+
get rightPositionClass() {
|
|
1319
|
+
var _a;
|
|
1320
|
+
return ((_a = this.configuratorSettings) === null || _a === void 0 ? void 0 : _a.position) === 'right';
|
|
1321
|
+
}
|
|
1322
|
+
get leftPositionClass() {
|
|
1323
|
+
var _a;
|
|
1324
|
+
return ((_a = this.configuratorSettings) === null || _a === void 0 ? void 0 : _a.position) === 'left';
|
|
1325
|
+
}
|
|
1326
|
+
get bottomPositionClass() {
|
|
1327
|
+
var _a;
|
|
1328
|
+
return ((_a = this.configuratorSettings) === null || _a === void 0 ? void 0 : _a.position) === 'bottom';
|
|
1329
|
+
}
|
|
1330
|
+
get topPositionClass() {
|
|
1331
|
+
var _a;
|
|
1332
|
+
return ((_a = this.configuratorSettings) === null || _a === void 0 ? void 0 : _a.position) === 'top';
|
|
1333
|
+
}
|
|
1334
|
+
get dir() {
|
|
1335
|
+
return this.direction;
|
|
343
1336
|
}
|
|
344
1337
|
/**
|
|
345
1338
|
* Specify the type, size and color of the PivotGrid's loader.
|
|
@@ -356,6 +1349,15 @@ class PivotGridComponent {
|
|
|
356
1349
|
get loaderSettings() {
|
|
357
1350
|
return this._loaderSettings;
|
|
358
1351
|
}
|
|
1352
|
+
/**
|
|
1353
|
+
* @hidden
|
|
1354
|
+
*/
|
|
1355
|
+
get loadingText() {
|
|
1356
|
+
return this.localization.get('loading');
|
|
1357
|
+
}
|
|
1358
|
+
get configuratorSettings() {
|
|
1359
|
+
return this.configurator && Object.assign({}, DEFAULT_CONFIGURATOR_SETTINGS, this.configurator);
|
|
1360
|
+
}
|
|
359
1361
|
ngAfterViewInit() {
|
|
360
1362
|
if (isDocumentAvailable()) {
|
|
361
1363
|
this.zone.runOutsideAngular(() => {
|
|
@@ -378,67 +1380,295 @@ class PivotGridComponent {
|
|
|
378
1380
|
this.resizeObservers.forEach(o => o.disconnect());
|
|
379
1381
|
this.subs.unsubscribe();
|
|
380
1382
|
}
|
|
1383
|
+
/**
|
|
1384
|
+
* @hidden
|
|
1385
|
+
*/
|
|
1386
|
+
messageFor(localizationToken) {
|
|
1387
|
+
return this.localization.get(localizationToken);
|
|
1388
|
+
}
|
|
381
1389
|
}
|
|
382
|
-
PivotGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: PivotGridDataService }, { token: i2
|
|
383
|
-
PivotGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: PivotGridComponent, selector: "kendo-pivotgrid", inputs: { loaderSettings: "loaderSettings", columnHeadersWidth: "columnHeadersWidth" }, host: { properties: { "class.k-
|
|
384
|
-
PivotGridDataService
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
1390
|
+
PivotGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: PivotGridDataService }, { token: i2.LocalizationService }, { token: i3.ScrollbarWidthService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1391
|
+
PivotGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: PivotGridComponent, selector: "kendo-pivotgrid", inputs: { loaderSettings: "loaderSettings", configurator: "configurator", columnHeadersWidth: "columnHeadersWidth" }, host: { properties: { "class.k-d-flex": "this.hostClass", "class.k-pos-relative": "this.hostClass", "class.k-flex-row": "this.rightPositionClass", "class.k-flex-row-reverse": "this.leftPositionClass", "class.k-flex-column": "this.bottomPositionClass", "class.k-flex-column-reverse": "this.topPositionClass", "attr.dir": "this.dir", "attr.role": "this.ariaRole" } }, providers: [
|
|
1392
|
+
PivotGridDataService,
|
|
1393
|
+
LocalizationService,
|
|
1394
|
+
{
|
|
1395
|
+
provide: L10N_PREFIX,
|
|
1396
|
+
useValue: 'kendo.pivotgrid'
|
|
1397
|
+
}
|
|
1398
|
+
], viewQueries: [{ propertyName: "colHeadersTable", first: true, predicate: ["colHeadersTable"], descendants: true, read: ElementRef }, { propertyName: "rowHeadersTable", first: true, predicate: ["rowHeadersTable"], descendants: true, read: ElementRef }, { propertyName: "valuesTable", first: true, predicate: ["valuesTable"], descendants: true, read: ElementRef }, { propertyName: "table", first: true, predicate: ["table"], descendants: true, read: ElementRef }], ngImport: i0, template: `
|
|
1399
|
+
<ng-container kendoPivotGridLocalizedMessages
|
|
1400
|
+
i18n-loading="kendo.pivotgrid.loading|The loading text"
|
|
1401
|
+
loading="Loading"
|
|
1402
|
+
|
|
1403
|
+
i18n-emptyCellLabel="kendo.pivotgrid.emptyCellLabel|The value of the aria-label attribute placed on the focusable empty cell element"
|
|
1404
|
+
emptyCellLabel="PivotGrid Empty Cell"
|
|
1405
|
+
|
|
1406
|
+
i18n-fieldMenuFilterItemLabel="kendo.pivotgrid.fieldMenuFilterItemLabel|The text content of the filter item in the column and row fields menu"
|
|
1407
|
+
fieldMenuFilterItemLabel="Filter"
|
|
1408
|
+
|
|
1409
|
+
i18n-fieldMenuSortAscendingItemLabel="kendo.pivotgrid.fieldMenuSortAscendingItemLabel|The text content of the sort ascending item in the column and row fields menu"
|
|
1410
|
+
fieldMenuSortAscendingItemLabel="Sort ascending"
|
|
1411
|
+
|
|
1412
|
+
i18n-fieldMenuSortDescendingItemLabel="kendo.pivotgrid.fieldMenuSortDescendingItemLabel|The text content of the sort descending item in the column and row fields menu"
|
|
1413
|
+
fieldMenuSortDescendingItemLabel="Sort descending"
|
|
1414
|
+
|
|
1415
|
+
i18n-filterInputLabel="kendo.pivotgrid.filterInputLabel|The label of the filter input"
|
|
1416
|
+
filterInputLabel="{{ '{fields} Filter' }}"
|
|
1417
|
+
|
|
1418
|
+
i18n-filterOperatorsDropDownLabel="kendo.pivotgrid.filterOperatorsDropDownLabel|The label of the filter operators DropDownList"
|
|
1419
|
+
filterOperatorsDropDownLabel="{{ '{fields} Filter Operators' }}"
|
|
1420
|
+
|
|
1421
|
+
i18n-filterEqOperator="kendo.pivotgrid.filterEqOperator|The text of the equal filter operator"
|
|
1422
|
+
filterEqOperator="Is equal to"
|
|
1423
|
+
|
|
1424
|
+
i18n-filterNotEqOperator="kendo.pivotgrid.filterNotEqOperator|The text of the not equal filter operator"
|
|
1425
|
+
filterNotEqOperator="Is not equal to"
|
|
1426
|
+
|
|
1427
|
+
i18n-filterIsNullOperator="kendo.pivotgrid.filterIsNullOperator|The text of the is null filter operator"
|
|
1428
|
+
filterIsNullOperator="Is null"
|
|
1429
|
+
|
|
1430
|
+
i18n-filterIsNotNullOperator="kendo.pivotgrid.filterIsNotNullOperator|The text of the is not null filter operator"
|
|
1431
|
+
filterIsNotNullOperator="Is not null"
|
|
1432
|
+
|
|
1433
|
+
i18n-filterIsEmptyOperator="kendo.pivotgrid.filterIsEmptyOperator|The text of the is empty filter operator"
|
|
1434
|
+
filterIsEmptyOperator="Is empty"
|
|
1435
|
+
|
|
1436
|
+
i18n-filterIsNotEmptyOperator="kendo.pivotgrid.filterIsNotEmptyOperator|The text of the is not empty filter operator"
|
|
1437
|
+
filterIsNotEmptyOperator="Is not empty"
|
|
1438
|
+
|
|
1439
|
+
i18n-filterStartsWithOperator="kendo.pivotgrid.filterStartsWithOperator|The text of the starts with filter operator"
|
|
1440
|
+
filterStartsWithOperator="Starts with"
|
|
1441
|
+
|
|
1442
|
+
i18n-filterContainsOperator="kendo.pivotgrid.filterContainsOperator|The text of the contains filter operator"
|
|
1443
|
+
filterContainsOperator="Contains"
|
|
1444
|
+
|
|
1445
|
+
i18n-filterNotContainsOperator="kendo.pivotgrid.filterNotContainsOperator|The text of the does not contain filter operator"
|
|
1446
|
+
filterNotContainsOperator="Does not contain"
|
|
1447
|
+
|
|
1448
|
+
i18n-filterEndsWithOperator="kendo.pivotgrid.filterEndsWithOperator|The text of the ends with filter operator"
|
|
1449
|
+
filterEndsWithOperator="Ends with"
|
|
1450
|
+
|
|
1451
|
+
i18n-filterFilterButton="kendo.pivotgrid.filterFilterButton|The text of the filter button"
|
|
1452
|
+
filterFilterButton="Filter"
|
|
1453
|
+
|
|
1454
|
+
i18n-filterClearButton="kendo.pivotgrid.filterClearButton|The text of the clear filter button"
|
|
1455
|
+
filterClearButton="Clear"
|
|
1456
|
+
|
|
1457
|
+
i18n-configuratorButtonText="kendo.pivotgrid.configuratorButtonText|The text content of the button that opens and closes the PivotGrid configurator"
|
|
1458
|
+
configuratorButtonText="Change Settings"
|
|
1459
|
+
|
|
1460
|
+
i18n-configuratorHeaderText="kendo.pivotgrid.configuratorHeaderText|The text content of the PivotGrid configurator title element"
|
|
1461
|
+
configuratorHeaderText="Settings"
|
|
1462
|
+
|
|
1463
|
+
i18n-configuratorFieldsText="kendo.pivotgrid.configuratorFieldsText|The text content of the PivotGrid configurator fields section title element"
|
|
1464
|
+
configuratorFieldsText="Fields"
|
|
1465
|
+
|
|
1466
|
+
i18n-configuratorColumnsText="kendo.pivotgrid.configuratorColumnsText|The text content of the PivotGrid configurator columns section title element"
|
|
1467
|
+
configuratorColumnsText="Columns"
|
|
1468
|
+
|
|
1469
|
+
i18n-configuratorRowsText="kendo.pivotgrid.configuratorRowsText|The text content of the PivotGrid configurator rows section title element"
|
|
1470
|
+
configuratorRowsText="Rows"
|
|
1471
|
+
|
|
1472
|
+
i18n-configuratorValuesText="kendo.pivotgrid.configuratorValuesText|The text content of the PivotGrid configurator values section title element"
|
|
1473
|
+
configuratorValuesText="Values"
|
|
1474
|
+
|
|
1475
|
+
i18n-configuratorCancelButtonText="kendo.pivotgrid.configuratorCancelButtonText|The text content of the PivotGrid configurator configurator Cancel button"
|
|
1476
|
+
configuratorCancelButtonText="Cancel"
|
|
1477
|
+
|
|
1478
|
+
i18n-configuratorApplyButtonText="kendo.pivotgrid.configuratorApplyButtonText|The text content of the PivotGrid configurator configurator Apply button"
|
|
1479
|
+
configuratorApplyButtonText="Apply"
|
|
1480
|
+
|
|
1481
|
+
i18n-configuratorEmptyRowsText="kendo.pivotgrid.configuratorEmptyRowsText|The text content of the PivotGrid configurator empty rows container"
|
|
1482
|
+
configuratorEmptyRowsText="Select some fields to begin setup"
|
|
1483
|
+
|
|
1484
|
+
i18n-configuratorEmptyColumnsText="kendo.pivotgrid.configuratorEmptyColumnsText|The text content of the PivotGrid configurator empty columns container"
|
|
1485
|
+
configuratorEmptyColumnsText="Select some fields to begin setup"
|
|
1486
|
+
|
|
1487
|
+
i18n-configuratorEmptyMeasuresText="kendo.pivotgrid.configuratorEmptyMeasuresText|The text content of the PivotGrid configurator empty measures container"
|
|
1488
|
+
configuratorEmptyMeasuresText="Select some fields to begin setup"></ng-container>
|
|
1489
|
+
|
|
1490
|
+
<div #table class="k-pivotgrid">
|
|
1491
|
+
<span class="k-pivotgrid-empty-cell" [attr.aria-label]="messageFor('emptyCellLabel')"></span>
|
|
1492
|
+
<kendo-pivotgrid-table
|
|
1493
|
+
#colHeadersTable
|
|
1494
|
+
[colWidth]="columnHeadersWidth"
|
|
1495
|
+
class="k-pivotgrid-column-headers"
|
|
1496
|
+
tableType="columnHeader"></kendo-pivotgrid-table>
|
|
1497
|
+
<kendo-pivotgrid-table
|
|
1498
|
+
#rowHeadersTable
|
|
1499
|
+
class="k-pivotgrid-row-headers"
|
|
1500
|
+
tableType="rowHeader"></kendo-pivotgrid-table>
|
|
1501
|
+
<kendo-pivotgrid-table
|
|
1502
|
+
#valuesTable
|
|
1503
|
+
[colWidth]="columnHeadersWidth"
|
|
1504
|
+
class="k-pivotgrid-values"
|
|
1505
|
+
tableType="values"></kendo-pivotgrid-table>
|
|
1506
|
+
|
|
1507
|
+
<div *ngIf="loading" class="k-loader">
|
|
1508
|
+
<kendo-loader
|
|
1509
|
+
[type]="loaderSettings?.type"
|
|
1510
|
+
[themeColor]="loaderSettings?.themeColor"
|
|
1511
|
+
[size]="loaderSettings?.size"
|
|
1512
|
+
>
|
|
1513
|
+
</kendo-loader>
|
|
1514
|
+
<span class="k-loading-text">{{ loadingText }}</span>
|
|
1515
|
+
</div>
|
|
1516
|
+
</div>
|
|
1517
|
+
|
|
1518
|
+
<kendo-pivotgrid-configurator
|
|
1519
|
+
*ngIf="showConfigurator"
|
|
1520
|
+
[horizontal]="configuratorSettings.horizontal">
|
|
1521
|
+
</kendo-pivotgrid-configurator>
|
|
1522
|
+
|
|
1523
|
+
<div *ngIf="configurator"
|
|
1524
|
+
class="k-pivotgrid-configurator-button"
|
|
1525
|
+
(click)="showConfigurator = !showConfigurator">
|
|
1526
|
+
<span>{{ messageFor('configuratorButtonText') }}<span class="k-icon k-i-gear k-color-inherit"></span>
|
|
1527
|
+
</span>
|
|
409
1528
|
</div>
|
|
410
|
-
`, isInline: true, styles: ["\n /** TODO: Remove if added to themes */\n div.k-loader {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n "], components: [{ type: PivotGridTableComponent, selector: "kendo-pivotgrid-table", inputs: ["tableType", "colWidth"] }, { type:
|
|
1529
|
+
`, isInline: true, styles: ["\n /** TODO: Remove if added to themes */\n div.k-loader {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n "], components: [{ type: PivotGridTableComponent, selector: "kendo-pivotgrid-table", inputs: ["tableType", "colWidth"] }, { type: i5$1.LoaderComponent, selector: "kendo-loader", inputs: ["type", "themeColor", "size"] }, { type: PivotGridConfiguratorComponent, selector: "kendo-pivotgrid-configurator", inputs: ["horizontal"] }], directives: [{ type: LocalizedMessagesDirective, selector: "[kendoPivotGridLocalizedMessages]" }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
411
1530
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridComponent, decorators: [{
|
|
412
1531
|
type: Component,
|
|
413
1532
|
args: [{
|
|
414
1533
|
selector: 'kendo-pivotgrid',
|
|
415
1534
|
providers: [
|
|
416
|
-
PivotGridDataService
|
|
1535
|
+
PivotGridDataService,
|
|
1536
|
+
LocalizationService,
|
|
1537
|
+
{
|
|
1538
|
+
provide: L10N_PREFIX,
|
|
1539
|
+
useValue: 'kendo.pivotgrid'
|
|
1540
|
+
}
|
|
417
1541
|
],
|
|
418
1542
|
template: `
|
|
419
|
-
<
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
1543
|
+
<ng-container kendoPivotGridLocalizedMessages
|
|
1544
|
+
i18n-loading="kendo.pivotgrid.loading|The loading text"
|
|
1545
|
+
loading="Loading"
|
|
1546
|
+
|
|
1547
|
+
i18n-emptyCellLabel="kendo.pivotgrid.emptyCellLabel|The value of the aria-label attribute placed on the focusable empty cell element"
|
|
1548
|
+
emptyCellLabel="PivotGrid Empty Cell"
|
|
1549
|
+
|
|
1550
|
+
i18n-fieldMenuFilterItemLabel="kendo.pivotgrid.fieldMenuFilterItemLabel|The text content of the filter item in the column and row fields menu"
|
|
1551
|
+
fieldMenuFilterItemLabel="Filter"
|
|
1552
|
+
|
|
1553
|
+
i18n-fieldMenuSortAscendingItemLabel="kendo.pivotgrid.fieldMenuSortAscendingItemLabel|The text content of the sort ascending item in the column and row fields menu"
|
|
1554
|
+
fieldMenuSortAscendingItemLabel="Sort ascending"
|
|
1555
|
+
|
|
1556
|
+
i18n-fieldMenuSortDescendingItemLabel="kendo.pivotgrid.fieldMenuSortDescendingItemLabel|The text content of the sort descending item in the column and row fields menu"
|
|
1557
|
+
fieldMenuSortDescendingItemLabel="Sort descending"
|
|
1558
|
+
|
|
1559
|
+
i18n-filterInputLabel="kendo.pivotgrid.filterInputLabel|The label of the filter input"
|
|
1560
|
+
filterInputLabel="{{ '{fields} Filter' }}"
|
|
1561
|
+
|
|
1562
|
+
i18n-filterOperatorsDropDownLabel="kendo.pivotgrid.filterOperatorsDropDownLabel|The label of the filter operators DropDownList"
|
|
1563
|
+
filterOperatorsDropDownLabel="{{ '{fields} Filter Operators' }}"
|
|
1564
|
+
|
|
1565
|
+
i18n-filterEqOperator="kendo.pivotgrid.filterEqOperator|The text of the equal filter operator"
|
|
1566
|
+
filterEqOperator="Is equal to"
|
|
1567
|
+
|
|
1568
|
+
i18n-filterNotEqOperator="kendo.pivotgrid.filterNotEqOperator|The text of the not equal filter operator"
|
|
1569
|
+
filterNotEqOperator="Is not equal to"
|
|
1570
|
+
|
|
1571
|
+
i18n-filterIsNullOperator="kendo.pivotgrid.filterIsNullOperator|The text of the is null filter operator"
|
|
1572
|
+
filterIsNullOperator="Is null"
|
|
1573
|
+
|
|
1574
|
+
i18n-filterIsNotNullOperator="kendo.pivotgrid.filterIsNotNullOperator|The text of the is not null filter operator"
|
|
1575
|
+
filterIsNotNullOperator="Is not null"
|
|
1576
|
+
|
|
1577
|
+
i18n-filterIsEmptyOperator="kendo.pivotgrid.filterIsEmptyOperator|The text of the is empty filter operator"
|
|
1578
|
+
filterIsEmptyOperator="Is empty"
|
|
1579
|
+
|
|
1580
|
+
i18n-filterIsNotEmptyOperator="kendo.pivotgrid.filterIsNotEmptyOperator|The text of the is not empty filter operator"
|
|
1581
|
+
filterIsNotEmptyOperator="Is not empty"
|
|
1582
|
+
|
|
1583
|
+
i18n-filterStartsWithOperator="kendo.pivotgrid.filterStartsWithOperator|The text of the starts with filter operator"
|
|
1584
|
+
filterStartsWithOperator="Starts with"
|
|
1585
|
+
|
|
1586
|
+
i18n-filterContainsOperator="kendo.pivotgrid.filterContainsOperator|The text of the contains filter operator"
|
|
1587
|
+
filterContainsOperator="Contains"
|
|
1588
|
+
|
|
1589
|
+
i18n-filterNotContainsOperator="kendo.pivotgrid.filterNotContainsOperator|The text of the does not contain filter operator"
|
|
1590
|
+
filterNotContainsOperator="Does not contain"
|
|
1591
|
+
|
|
1592
|
+
i18n-filterEndsWithOperator="kendo.pivotgrid.filterEndsWithOperator|The text of the ends with filter operator"
|
|
1593
|
+
filterEndsWithOperator="Ends with"
|
|
1594
|
+
|
|
1595
|
+
i18n-filterFilterButton="kendo.pivotgrid.filterFilterButton|The text of the filter button"
|
|
1596
|
+
filterFilterButton="Filter"
|
|
1597
|
+
|
|
1598
|
+
i18n-filterClearButton="kendo.pivotgrid.filterClearButton|The text of the clear filter button"
|
|
1599
|
+
filterClearButton="Clear"
|
|
1600
|
+
|
|
1601
|
+
i18n-configuratorButtonText="kendo.pivotgrid.configuratorButtonText|The text content of the button that opens and closes the PivotGrid configurator"
|
|
1602
|
+
configuratorButtonText="Change Settings"
|
|
1603
|
+
|
|
1604
|
+
i18n-configuratorHeaderText="kendo.pivotgrid.configuratorHeaderText|The text content of the PivotGrid configurator title element"
|
|
1605
|
+
configuratorHeaderText="Settings"
|
|
1606
|
+
|
|
1607
|
+
i18n-configuratorFieldsText="kendo.pivotgrid.configuratorFieldsText|The text content of the PivotGrid configurator fields section title element"
|
|
1608
|
+
configuratorFieldsText="Fields"
|
|
1609
|
+
|
|
1610
|
+
i18n-configuratorColumnsText="kendo.pivotgrid.configuratorColumnsText|The text content of the PivotGrid configurator columns section title element"
|
|
1611
|
+
configuratorColumnsText="Columns"
|
|
1612
|
+
|
|
1613
|
+
i18n-configuratorRowsText="kendo.pivotgrid.configuratorRowsText|The text content of the PivotGrid configurator rows section title element"
|
|
1614
|
+
configuratorRowsText="Rows"
|
|
1615
|
+
|
|
1616
|
+
i18n-configuratorValuesText="kendo.pivotgrid.configuratorValuesText|The text content of the PivotGrid configurator values section title element"
|
|
1617
|
+
configuratorValuesText="Values"
|
|
1618
|
+
|
|
1619
|
+
i18n-configuratorCancelButtonText="kendo.pivotgrid.configuratorCancelButtonText|The text content of the PivotGrid configurator configurator Cancel button"
|
|
1620
|
+
configuratorCancelButtonText="Cancel"
|
|
1621
|
+
|
|
1622
|
+
i18n-configuratorApplyButtonText="kendo.pivotgrid.configuratorApplyButtonText|The text content of the PivotGrid configurator configurator Apply button"
|
|
1623
|
+
configuratorApplyButtonText="Apply"
|
|
1624
|
+
|
|
1625
|
+
i18n-configuratorEmptyRowsText="kendo.pivotgrid.configuratorEmptyRowsText|The text content of the PivotGrid configurator empty rows container"
|
|
1626
|
+
configuratorEmptyRowsText="Select some fields to begin setup"
|
|
1627
|
+
|
|
1628
|
+
i18n-configuratorEmptyColumnsText="kendo.pivotgrid.configuratorEmptyColumnsText|The text content of the PivotGrid configurator empty columns container"
|
|
1629
|
+
configuratorEmptyColumnsText="Select some fields to begin setup"
|
|
1630
|
+
|
|
1631
|
+
i18n-configuratorEmptyMeasuresText="kendo.pivotgrid.configuratorEmptyMeasuresText|The text content of the PivotGrid configurator empty measures container"
|
|
1632
|
+
configuratorEmptyMeasuresText="Select some fields to begin setup"></ng-container>
|
|
1633
|
+
|
|
1634
|
+
<div #table class="k-pivotgrid">
|
|
1635
|
+
<span class="k-pivotgrid-empty-cell" [attr.aria-label]="messageFor('emptyCellLabel')"></span>
|
|
1636
|
+
<kendo-pivotgrid-table
|
|
1637
|
+
#colHeadersTable
|
|
1638
|
+
[colWidth]="columnHeadersWidth"
|
|
1639
|
+
class="k-pivotgrid-column-headers"
|
|
1640
|
+
tableType="columnHeader"></kendo-pivotgrid-table>
|
|
1641
|
+
<kendo-pivotgrid-table
|
|
1642
|
+
#rowHeadersTable
|
|
1643
|
+
class="k-pivotgrid-row-headers"
|
|
1644
|
+
tableType="rowHeader"></kendo-pivotgrid-table>
|
|
1645
|
+
<kendo-pivotgrid-table
|
|
1646
|
+
#valuesTable
|
|
1647
|
+
[colWidth]="columnHeadersWidth"
|
|
1648
|
+
class="k-pivotgrid-values"
|
|
1649
|
+
tableType="values"></kendo-pivotgrid-table>
|
|
1650
|
+
|
|
1651
|
+
<div *ngIf="loading" class="k-loader">
|
|
1652
|
+
<kendo-loader
|
|
1653
|
+
[type]="loaderSettings?.type"
|
|
1654
|
+
[themeColor]="loaderSettings?.themeColor"
|
|
1655
|
+
[size]="loaderSettings?.size"
|
|
1656
|
+
>
|
|
1657
|
+
</kendo-loader>
|
|
1658
|
+
<span class="k-loading-text">{{ loadingText }}</span>
|
|
1659
|
+
</div>
|
|
1660
|
+
</div>
|
|
1661
|
+
|
|
1662
|
+
<kendo-pivotgrid-configurator
|
|
1663
|
+
*ngIf="showConfigurator"
|
|
1664
|
+
[horizontal]="configuratorSettings.horizontal">
|
|
1665
|
+
</kendo-pivotgrid-configurator>
|
|
1666
|
+
|
|
1667
|
+
<div *ngIf="configurator"
|
|
1668
|
+
class="k-pivotgrid-configurator-button"
|
|
1669
|
+
(click)="showConfigurator = !showConfigurator">
|
|
1670
|
+
<span>{{ messageFor('configuratorButtonText') }}<span class="k-icon k-i-gear k-color-inherit"></span>
|
|
1671
|
+
</span>
|
|
442
1672
|
</div>
|
|
443
1673
|
`,
|
|
444
1674
|
styles: [`
|
|
@@ -451,9 +1681,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
451
1681
|
}
|
|
452
1682
|
`]
|
|
453
1683
|
}]
|
|
454
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: PivotGridDataService }, { type: i2
|
|
1684
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: PivotGridDataService }, { type: i2.LocalizationService }, { type: i3.ScrollbarWidthService }]; }, propDecorators: { hostClass: [{
|
|
1685
|
+
type: HostBinding,
|
|
1686
|
+
args: ['class.k-d-flex']
|
|
1687
|
+
}, {
|
|
1688
|
+
type: HostBinding,
|
|
1689
|
+
args: ['class.k-pos-relative']
|
|
1690
|
+
}], rightPositionClass: [{
|
|
1691
|
+
type: HostBinding,
|
|
1692
|
+
args: ['class.k-flex-row']
|
|
1693
|
+
}], leftPositionClass: [{
|
|
1694
|
+
type: HostBinding,
|
|
1695
|
+
args: ['class.k-flex-row-reverse']
|
|
1696
|
+
}], bottomPositionClass: [{
|
|
455
1697
|
type: HostBinding,
|
|
456
|
-
args: ['class.k-
|
|
1698
|
+
args: ['class.k-flex-column']
|
|
1699
|
+
}], topPositionClass: [{
|
|
1700
|
+
type: HostBinding,
|
|
1701
|
+
args: ['class.k-flex-column-reverse']
|
|
1702
|
+
}], dir: [{
|
|
1703
|
+
type: HostBinding,
|
|
1704
|
+
args: ['attr.dir']
|
|
1705
|
+
}], ariaRole: [{
|
|
1706
|
+
type: HostBinding,
|
|
1707
|
+
args: ['attr.role']
|
|
457
1708
|
}], colHeadersTable: [{
|
|
458
1709
|
type: ViewChild,
|
|
459
1710
|
args: ['colHeadersTable', { read: ElementRef }]
|
|
@@ -463,12 +1714,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
463
1714
|
}], valuesTable: [{
|
|
464
1715
|
type: ViewChild,
|
|
465
1716
|
args: ['valuesTable', { read: ElementRef }]
|
|
1717
|
+
}], table: [{
|
|
1718
|
+
type: ViewChild,
|
|
1719
|
+
args: ['table', { read: ElementRef }]
|
|
466
1720
|
}], loaderSettings: [{
|
|
467
1721
|
type: Input
|
|
1722
|
+
}], configurator: [{
|
|
1723
|
+
type: Input
|
|
468
1724
|
}], columnHeadersWidth: [{
|
|
469
1725
|
type: Input
|
|
470
1726
|
}] } });
|
|
471
1727
|
|
|
1728
|
+
/**
|
|
1729
|
+
* @hidden
|
|
1730
|
+
*/
|
|
1731
|
+
class PivotGridState {
|
|
1732
|
+
constructor(columnAxes, rowAxes, measureAxes) {
|
|
1733
|
+
this.columnAxes = columnAxes;
|
|
1734
|
+
this.rowAxes = rowAxes;
|
|
1735
|
+
this.measureAxes = measureAxes;
|
|
1736
|
+
}
|
|
1737
|
+
}
|
|
1738
|
+
|
|
1739
|
+
/**
|
|
1740
|
+
* The event data for the ExpandChangeEvent
|
|
1741
|
+
*/
|
|
1742
|
+
class ExpandChangeEvent extends PreventableEvent {
|
|
1743
|
+
/**
|
|
1744
|
+
* @hidden
|
|
1745
|
+
*/
|
|
1746
|
+
constructor(args) {
|
|
1747
|
+
super();
|
|
1748
|
+
Object.assign(this, args);
|
|
1749
|
+
}
|
|
1750
|
+
}
|
|
1751
|
+
;
|
|
1752
|
+
|
|
1753
|
+
/**
|
|
1754
|
+
* The event data for the ConfigurationChangeEvent
|
|
1755
|
+
*/
|
|
1756
|
+
class ConfigurationChangeEvent extends PreventableEvent {
|
|
1757
|
+
/**
|
|
1758
|
+
* @hidden
|
|
1759
|
+
*/
|
|
1760
|
+
constructor(args) {
|
|
1761
|
+
super();
|
|
1762
|
+
Object.assign(this, args);
|
|
1763
|
+
}
|
|
1764
|
+
}
|
|
1765
|
+
;
|
|
1766
|
+
|
|
472
1767
|
/**
|
|
473
1768
|
* @hidden
|
|
474
1769
|
* A directive which binds the PivotGrid to an array of objects.
|
|
@@ -489,11 +1784,28 @@ class PivotBaseBindingDirective {
|
|
|
489
1784
|
* Represents the measure axes configuration of the PivotGrid.
|
|
490
1785
|
*/
|
|
491
1786
|
this.measureAxes = [];
|
|
492
|
-
|
|
1787
|
+
/**
|
|
1788
|
+
* Fires each time a row or column header gets expanded or collapsed by the end user. The event is preventable.
|
|
1789
|
+
* If you prevent the event, the PivotGrid will not be rerendered with the new state, resulting from the end user interaction.
|
|
1790
|
+
*/
|
|
1791
|
+
this.expandChange = new EventEmitter();
|
|
1792
|
+
/**
|
|
1793
|
+
* Fires when the Configurator Apply button is pressed. The event is preventable.
|
|
1794
|
+
* If you prevent the event, the PivotGrid will not be rerendered with the new state, resulting from the configuration changes, applied through the configurator interface.
|
|
1795
|
+
*/
|
|
1796
|
+
this.configurationChange = new EventEmitter();
|
|
1797
|
+
this.subs = new Subscription();
|
|
1798
|
+
}
|
|
1799
|
+
/**
|
|
1800
|
+
* @hidden
|
|
1801
|
+
*/
|
|
1802
|
+
get state() {
|
|
1803
|
+
return new PivotGridState(this.columnAxes, this.rowAxes, this.measureAxes);
|
|
493
1804
|
}
|
|
494
1805
|
ngOnInit() {
|
|
495
|
-
this.loadData();
|
|
496
|
-
this.
|
|
1806
|
+
this.loadData(this.state);
|
|
1807
|
+
this.loadFields();
|
|
1808
|
+
this.subs.add(this.dataService.expandedStateChange.subscribe((state) => {
|
|
497
1809
|
this.zone.run(() => {
|
|
498
1810
|
const isCol = state.tableType === 'columnHeader';
|
|
499
1811
|
const axes = isCol ? 'columnAxes' : 'rowAxes';
|
|
@@ -501,10 +1813,28 @@ class PivotBaseBindingDirective {
|
|
|
501
1813
|
const tree = toTree((isCol ? this.dataService.columns : this.dataService.rows || []).slice());
|
|
502
1814
|
this.updateHeaders(axes, tree, state.cell.path);
|
|
503
1815
|
});
|
|
504
|
-
});
|
|
1816
|
+
}));
|
|
1817
|
+
this.subs.add(this.dataService.configuratorFieldChange.subscribe((state) => {
|
|
1818
|
+
this.zone.run(() => {
|
|
1819
|
+
if (hasObservers(this.configurationChange)) {
|
|
1820
|
+
const event = new ConfigurationChangeEvent(state);
|
|
1821
|
+
this.configurationChange.emit(event);
|
|
1822
|
+
if (event.isDefaultPrevented()) {
|
|
1823
|
+
return;
|
|
1824
|
+
}
|
|
1825
|
+
}
|
|
1826
|
+
this.dataService.configuredFields.next({
|
|
1827
|
+
columnAxes: state.columnAxes,
|
|
1828
|
+
rowAxes: state.rowAxes,
|
|
1829
|
+
measureAxes: state.measureAxes
|
|
1830
|
+
});
|
|
1831
|
+
this.loadData(state);
|
|
1832
|
+
});
|
|
1833
|
+
}));
|
|
1834
|
+
this.dataService.directive = this;
|
|
505
1835
|
}
|
|
506
1836
|
ngOnDestroy() {
|
|
507
|
-
this.
|
|
1837
|
+
this.subs.unsubscribe();
|
|
508
1838
|
}
|
|
509
1839
|
updateDataServiceFields() {
|
|
510
1840
|
this.dataService.normalizedData = this.dataState.data;
|
|
@@ -512,6 +1842,14 @@ class PivotBaseBindingDirective {
|
|
|
512
1842
|
this.dataService.columns = this.dataState.columns;
|
|
513
1843
|
this.dataService.updateRowsAndCols();
|
|
514
1844
|
}
|
|
1845
|
+
updateConfiguratorFields() {
|
|
1846
|
+
this.dataService.fields.next(this.configuratorFields);
|
|
1847
|
+
this.dataService.configuredFields.next({
|
|
1848
|
+
columnAxes: this.columnAxes,
|
|
1849
|
+
rowAxes: this.rowAxes,
|
|
1850
|
+
measureAxes: this.measureAxes
|
|
1851
|
+
});
|
|
1852
|
+
}
|
|
515
1853
|
updateHeaders(axes, tree, path) {
|
|
516
1854
|
// Action to determine expand/collapse state
|
|
517
1855
|
const action = {
|
|
@@ -520,15 +1858,23 @@ class PivotBaseBindingDirective {
|
|
|
520
1858
|
};
|
|
521
1859
|
// The `headersReducer` method is responsible for udpating
|
|
522
1860
|
// the expanded state based on the toggle action (expand/collapse)
|
|
523
|
-
const newHeaders = headersReducer(this[axes].slice(), Object.assign(Object.assign({}, action), { tree }));
|
|
524
1861
|
// Update axes and reload data
|
|
1862
|
+
const newHeaders = headersReducer(this[axes].slice(), Object.assign(Object.assign({}, action), { tree }));
|
|
1863
|
+
if (hasObservers(this.expandChange)) {
|
|
1864
|
+
const newState = Object.assign(Object.assign({}, this.state), { [axes]: newHeaders });
|
|
1865
|
+
const event = new ExpandChangeEvent(newState);
|
|
1866
|
+
this.expandChange.emit(event);
|
|
1867
|
+
if (event.isDefaultPrevented()) {
|
|
1868
|
+
return;
|
|
1869
|
+
}
|
|
1870
|
+
}
|
|
525
1871
|
this[axes] = newHeaders;
|
|
526
|
-
this.loadData();
|
|
1872
|
+
this.loadData(this.state);
|
|
527
1873
|
}
|
|
528
1874
|
;
|
|
529
1875
|
}
|
|
530
1876
|
PivotBaseBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotBaseBindingDirective, deps: [{ token: PivotGridDataService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
|
|
531
|
-
PivotBaseBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: PivotBaseBindingDirective, selector: "kendo-base-binding-directive", inputs: { columnAxes: "columnAxes", rowAxes: "rowAxes", measureAxes: "measureAxes" }, ngImport: i0 });
|
|
1877
|
+
PivotBaseBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: PivotBaseBindingDirective, selector: "kendo-base-binding-directive", inputs: { columnAxes: "columnAxes", rowAxes: "rowAxes", measureAxes: "measureAxes" }, outputs: { expandChange: "expandChange", configurationChange: "configurationChange" }, ngImport: i0 });
|
|
532
1878
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotBaseBindingDirective, decorators: [{
|
|
533
1879
|
type: Directive,
|
|
534
1880
|
args: [{
|
|
@@ -540,6 +1886,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
540
1886
|
type: Input
|
|
541
1887
|
}], measureAxes: [{
|
|
542
1888
|
type: Input
|
|
1889
|
+
}], expandChange: [{
|
|
1890
|
+
type: Output
|
|
1891
|
+
}], configurationChange: [{
|
|
1892
|
+
type: Output
|
|
543
1893
|
}] } });
|
|
544
1894
|
|
|
545
1895
|
const dataField = 'aggregate';
|
|
@@ -552,26 +1902,38 @@ const stringSeparator = '&';
|
|
|
552
1902
|
class PivotLocalBindingDirective extends PivotBaseBindingDirective {
|
|
553
1903
|
constructor(dataService, zone) {
|
|
554
1904
|
super(dataService, zone);
|
|
1905
|
+
this.type = 'local';
|
|
555
1906
|
this.createAxisSettings = (key) => (Object.assign({ key }, this.dimensions[key]));
|
|
556
1907
|
}
|
|
557
1908
|
ngOnChanges(changes) {
|
|
558
1909
|
if (anyChanged(['data', 'dimensions', 'columnAxes', 'rowAxes', 'measureAxes', 'measures'], changes)) {
|
|
559
|
-
this.loadData();
|
|
1910
|
+
this.loadData(this.state);
|
|
560
1911
|
}
|
|
561
1912
|
}
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
1913
|
+
/**
|
|
1914
|
+
* @hidden
|
|
1915
|
+
*/
|
|
1916
|
+
fetchChildren(node) {
|
|
1917
|
+
return node.children;
|
|
1918
|
+
}
|
|
1919
|
+
loadFields() {
|
|
1920
|
+
this.configuratorFields = createFlatSchemaDimensions(this.dimensions, this.measures);
|
|
1921
|
+
this.updateConfiguratorFields();
|
|
1922
|
+
}
|
|
1923
|
+
loadData(state) {
|
|
1924
|
+
const { columnAxes, rowAxes, measureAxes } = state;
|
|
1925
|
+
const rootColumnAxes = this.getRootAxes(columnAxes);
|
|
1926
|
+
const rootRowAxes = this.getRootAxes(rowAxes);
|
|
565
1927
|
const columnSettings = rootColumnAxes.split(stringSeparator).map(this.createAxisSettings);
|
|
566
1928
|
const rowSettings = rootRowAxes.split(stringSeparator).map(this.createAxisSettings);
|
|
567
|
-
const measuresSettings =
|
|
1929
|
+
const measuresSettings = measureAxes.map(m => this.measures.find(meas => String(meas.name) === String(m.name))).filter(Boolean);
|
|
568
1930
|
const dataTree = createDataTree(this.data, rowSettings, columnSettings, measuresSettings, bindingFields);
|
|
569
1931
|
this.dataState = createLocalDataState({
|
|
570
1932
|
dataTree,
|
|
571
1933
|
rowSettings,
|
|
572
1934
|
columnSettings,
|
|
573
|
-
rowAxes:
|
|
574
|
-
columnAxes:
|
|
1935
|
+
rowAxes: rowAxes,
|
|
1936
|
+
columnAxes: columnAxes,
|
|
575
1937
|
measures: measuresSettings,
|
|
576
1938
|
sort: [],
|
|
577
1939
|
fields: bindingFields
|
|
@@ -605,22 +1967,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
605
1967
|
class PivotOLAPBindingDirective extends PivotBaseBindingDirective {
|
|
606
1968
|
constructor(dataService, zone) {
|
|
607
1969
|
super(dataService, zone);
|
|
1970
|
+
this.type = 'olap';
|
|
608
1971
|
}
|
|
609
1972
|
ngOnChanges(changes) {
|
|
610
1973
|
if (anyChanged(['url', 'cube', 'catalog', 'columnAxes', 'rowAxes', 'measureAxes'], changes)) {
|
|
611
|
-
this.loadData();
|
|
1974
|
+
this.loadData(this.state);
|
|
1975
|
+
this.loadFields();
|
|
612
1976
|
}
|
|
613
1977
|
}
|
|
614
|
-
loadData() {
|
|
1978
|
+
loadData(state) {
|
|
1979
|
+
const { columnAxes, rowAxes, measureAxes } = state;
|
|
615
1980
|
this.dataService.loading.next(true);
|
|
616
1981
|
const options = {
|
|
617
1982
|
connection: {
|
|
618
1983
|
catalog: this.catalog,
|
|
619
1984
|
cube: this.cube
|
|
620
1985
|
},
|
|
621
|
-
columnAxes:
|
|
622
|
-
rowAxes:
|
|
623
|
-
measureAxes:
|
|
1986
|
+
columnAxes: columnAxes,
|
|
1987
|
+
rowAxes: rowAxes,
|
|
1988
|
+
measureAxes: measureAxes
|
|
624
1989
|
};
|
|
625
1990
|
fetchData({ url: this.url }, JSON.parse(JSON.stringify(options)))
|
|
626
1991
|
.then(createDataState)
|
|
@@ -630,6 +1995,127 @@ class PivotOLAPBindingDirective extends PivotBaseBindingDirective {
|
|
|
630
1995
|
this.dataService.loading.next(false);
|
|
631
1996
|
});
|
|
632
1997
|
}
|
|
1998
|
+
loadFields() {
|
|
1999
|
+
const options = {
|
|
2000
|
+
connection: {
|
|
2001
|
+
catalog: this.catalog,
|
|
2002
|
+
cube: this.cube
|
|
2003
|
+
},
|
|
2004
|
+
restrictions: {
|
|
2005
|
+
catalogName: this.catalog,
|
|
2006
|
+
cubeName: this.cube
|
|
2007
|
+
},
|
|
2008
|
+
command: 'schemaDimensions'
|
|
2009
|
+
};
|
|
2010
|
+
fetchDiscover({ url: this.url }, options)
|
|
2011
|
+
.then((newFields) => {
|
|
2012
|
+
addKPI(newFields);
|
|
2013
|
+
this.configuratorFields = newFields;
|
|
2014
|
+
this.updateConfiguratorFields();
|
|
2015
|
+
});
|
|
2016
|
+
}
|
|
2017
|
+
updateFields(event, fields) {
|
|
2018
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
2019
|
+
const newFields = fields.slice();
|
|
2020
|
+
const field = this.getField(newFields, event);
|
|
2021
|
+
if (field && field.uniqueName === '[KPIs]') {
|
|
2022
|
+
const KPIs = this.normalizeKPIs(yield this.loadKPIs());
|
|
2023
|
+
field.children = KPIs;
|
|
2024
|
+
}
|
|
2025
|
+
else if (field && field.type === 'kpi') {
|
|
2026
|
+
field.children = buildKPIMeasures(field);
|
|
2027
|
+
}
|
|
2028
|
+
else if (field && !field.children) {
|
|
2029
|
+
const additionalFields = yield this.loadAvailableFields(field);
|
|
2030
|
+
field.children = additionalFields;
|
|
2031
|
+
}
|
|
2032
|
+
return field === null || field === void 0 ? void 0 : field.children;
|
|
2033
|
+
});
|
|
2034
|
+
}
|
|
2035
|
+
/**
|
|
2036
|
+
* @hidden
|
|
2037
|
+
*/
|
|
2038
|
+
fetchChildren(event, fields) {
|
|
2039
|
+
return this.updateFields(event, fields);
|
|
2040
|
+
}
|
|
2041
|
+
normalizeKPIs(data) {
|
|
2042
|
+
for (let idx = 0, length = data.length; idx < length; idx++) {
|
|
2043
|
+
data[idx].uniqueName = data[idx].name;
|
|
2044
|
+
data[idx].type = 'kpi';
|
|
2045
|
+
}
|
|
2046
|
+
return data;
|
|
2047
|
+
}
|
|
2048
|
+
;
|
|
2049
|
+
getField(nodes = [], target) {
|
|
2050
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
2051
|
+
const node = nodes[i];
|
|
2052
|
+
if (node.uniqueName === target.uniqueName) {
|
|
2053
|
+
return node;
|
|
2054
|
+
}
|
|
2055
|
+
let result = this.getField(node.children, target);
|
|
2056
|
+
if (result !== null) {
|
|
2057
|
+
return result;
|
|
2058
|
+
}
|
|
2059
|
+
}
|
|
2060
|
+
return null;
|
|
2061
|
+
}
|
|
2062
|
+
;
|
|
2063
|
+
loadKPIs() {
|
|
2064
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
2065
|
+
const options = {
|
|
2066
|
+
connection: {
|
|
2067
|
+
catalog: this.catalog,
|
|
2068
|
+
cube: this.cube
|
|
2069
|
+
},
|
|
2070
|
+
restrictions: {
|
|
2071
|
+
catalogName: this.catalog,
|
|
2072
|
+
cubeName: this.cube
|
|
2073
|
+
},
|
|
2074
|
+
command: 'schemaKPIs'
|
|
2075
|
+
};
|
|
2076
|
+
return fetchDiscover({ url: this.url }, options);
|
|
2077
|
+
});
|
|
2078
|
+
}
|
|
2079
|
+
;
|
|
2080
|
+
loadAvailableFields(field) {
|
|
2081
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
2082
|
+
let command;
|
|
2083
|
+
let dimensionUniqueName;
|
|
2084
|
+
let hierarchyUniqueName;
|
|
2085
|
+
let levelUniqueName;
|
|
2086
|
+
let memberUniqueName;
|
|
2087
|
+
let treeOp;
|
|
2088
|
+
if (field.type === 2) {
|
|
2089
|
+
command = 'schemaMeasures';
|
|
2090
|
+
}
|
|
2091
|
+
else if (field.dimensionUniqueName) {
|
|
2092
|
+
command = 'schemaLevels';
|
|
2093
|
+
hierarchyUniqueName = field.uniqueName;
|
|
2094
|
+
}
|
|
2095
|
+
else {
|
|
2096
|
+
command = 'schemaHierarchies';
|
|
2097
|
+
dimensionUniqueName = field.uniqueName;
|
|
2098
|
+
}
|
|
2099
|
+
const options = {
|
|
2100
|
+
connection: {
|
|
2101
|
+
catalog: this.catalog,
|
|
2102
|
+
cube: this.cube
|
|
2103
|
+
},
|
|
2104
|
+
restrictions: {
|
|
2105
|
+
catalogName: this.catalog,
|
|
2106
|
+
cubeName: this.cube,
|
|
2107
|
+
hierarchyUniqueName,
|
|
2108
|
+
dimensionUniqueName,
|
|
2109
|
+
levelUniqueName,
|
|
2110
|
+
memberUniqueName,
|
|
2111
|
+
treeOp
|
|
2112
|
+
},
|
|
2113
|
+
command
|
|
2114
|
+
};
|
|
2115
|
+
return fetchDiscover({ url: this.url }, options);
|
|
2116
|
+
});
|
|
2117
|
+
}
|
|
2118
|
+
;
|
|
633
2119
|
}
|
|
634
2120
|
PivotOLAPBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotOLAPBindingDirective, deps: [{ token: PivotGridDataService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
|
|
635
2121
|
PivotOLAPBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: PivotOLAPBindingDirective, selector: "[kendoPivotOLAPBinding]", inputs: { url: "url", cube: "cube", catalog: "catalog" }, exportAs: ["kendoPivotOLAPBinding"], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
|
|
@@ -647,17 +2133,68 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
647
2133
|
type: Input
|
|
648
2134
|
}] } });
|
|
649
2135
|
|
|
2136
|
+
/**
|
|
2137
|
+
* Custom component messages override default component messages
|
|
2138
|
+
* ([see example]({% slug globalization_pivotgrid %}#toc-localization)).
|
|
2139
|
+
*/
|
|
2140
|
+
class CustomMessagesComponent extends PivotGridMessages {
|
|
2141
|
+
constructor(service) {
|
|
2142
|
+
super();
|
|
2143
|
+
this.service = service;
|
|
2144
|
+
}
|
|
2145
|
+
get override() {
|
|
2146
|
+
return true;
|
|
2147
|
+
}
|
|
2148
|
+
}
|
|
2149
|
+
CustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CustomMessagesComponent, deps: [{ token: i2.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
2150
|
+
CustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CustomMessagesComponent, selector: "kendo-pivotgrid-messages", providers: [
|
|
2151
|
+
{
|
|
2152
|
+
provide: PivotGridMessages,
|
|
2153
|
+
useExisting: forwardRef(() => CustomMessagesComponent)
|
|
2154
|
+
}
|
|
2155
|
+
], usesInheritance: true, ngImport: i0, template: ``, isInline: true });
|
|
2156
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CustomMessagesComponent, decorators: [{
|
|
2157
|
+
type: Component,
|
|
2158
|
+
args: [{
|
|
2159
|
+
providers: [
|
|
2160
|
+
{
|
|
2161
|
+
provide: PivotGridMessages,
|
|
2162
|
+
useExisting: forwardRef(() => CustomMessagesComponent)
|
|
2163
|
+
}
|
|
2164
|
+
],
|
|
2165
|
+
selector: 'kendo-pivotgrid-messages',
|
|
2166
|
+
template: ``
|
|
2167
|
+
}]
|
|
2168
|
+
}], ctorParameters: function () { return [{ type: i2.LocalizationService }]; } });
|
|
2169
|
+
|
|
650
2170
|
const IMPORTED_MODULES = [
|
|
651
2171
|
CommonModule,
|
|
652
2172
|
EventsModule,
|
|
653
|
-
IndicatorsModule
|
|
2173
|
+
IndicatorsModule,
|
|
2174
|
+
ButtonsModule,
|
|
2175
|
+
TreeViewModule,
|
|
2176
|
+
InputsModule,
|
|
2177
|
+
DraggableModule
|
|
654
2178
|
];
|
|
655
2179
|
const DECLARATIONS = [
|
|
2180
|
+
PivotGridComponent,
|
|
2181
|
+
PivotGridTableComponent,
|
|
2182
|
+
PivotGridConfiguratorComponent,
|
|
2183
|
+
PivotGridCellDirective,
|
|
2184
|
+
PivotLocalBindingDirective,
|
|
2185
|
+
PivotOLAPBindingDirective,
|
|
2186
|
+
DraggableChipDirective,
|
|
2187
|
+
DropTargetDirective,
|
|
2188
|
+
LocalizedMessagesDirective,
|
|
2189
|
+
CustomMessagesComponent
|
|
2190
|
+
];
|
|
2191
|
+
const EXPORTS = [
|
|
656
2192
|
PivotGridComponent,
|
|
657
2193
|
PivotGridTableComponent,
|
|
658
2194
|
PivotGridCellDirective,
|
|
659
2195
|
PivotLocalBindingDirective,
|
|
660
|
-
PivotOLAPBindingDirective
|
|
2196
|
+
PivotOLAPBindingDirective,
|
|
2197
|
+
CustomMessagesComponent
|
|
661
2198
|
];
|
|
662
2199
|
/**
|
|
663
2200
|
* Sample module
|
|
@@ -667,29 +2204,32 @@ class PivotGridModule {
|
|
|
667
2204
|
PivotGridModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
668
2205
|
PivotGridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridModule, declarations: [PivotGridComponent,
|
|
669
2206
|
PivotGridTableComponent,
|
|
2207
|
+
PivotGridConfiguratorComponent,
|
|
670
2208
|
PivotGridCellDirective,
|
|
671
2209
|
PivotLocalBindingDirective,
|
|
672
|
-
PivotOLAPBindingDirective
|
|
2210
|
+
PivotOLAPBindingDirective,
|
|
2211
|
+
DraggableChipDirective,
|
|
2212
|
+
DropTargetDirective,
|
|
2213
|
+
LocalizedMessagesDirective,
|
|
2214
|
+
CustomMessagesComponent], imports: [CommonModule,
|
|
673
2215
|
EventsModule,
|
|
674
|
-
IndicatorsModule
|
|
2216
|
+
IndicatorsModule,
|
|
2217
|
+
ButtonsModule,
|
|
2218
|
+
TreeViewModule,
|
|
2219
|
+
InputsModule,
|
|
2220
|
+
DraggableModule], exports: [PivotGridComponent,
|
|
675
2221
|
PivotGridTableComponent,
|
|
676
2222
|
PivotGridCellDirective,
|
|
677
2223
|
PivotLocalBindingDirective,
|
|
678
|
-
PivotOLAPBindingDirective
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
useValue: 'kendo.pivotgrid'
|
|
682
|
-
}], imports: [[...IMPORTED_MODULES]] });
|
|
2224
|
+
PivotOLAPBindingDirective,
|
|
2225
|
+
CustomMessagesComponent] });
|
|
2226
|
+
PivotGridModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridModule, imports: [[...IMPORTED_MODULES]] });
|
|
683
2227
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridModule, decorators: [{
|
|
684
2228
|
type: NgModule,
|
|
685
2229
|
args: [{
|
|
686
2230
|
imports: [...IMPORTED_MODULES],
|
|
687
2231
|
declarations: [...DECLARATIONS],
|
|
688
|
-
exports: [...
|
|
689
|
-
providers: [{
|
|
690
|
-
provide: L10N_PREFIX,
|
|
691
|
-
useValue: 'kendo.pivotgrid'
|
|
692
|
-
}]
|
|
2232
|
+
exports: [...EXPORTS]
|
|
693
2233
|
}]
|
|
694
2234
|
}] });
|
|
695
2235
|
|
|
@@ -697,5 +2237,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
697
2237
|
* Generated bundle index. Do not edit.
|
|
698
2238
|
*/
|
|
699
2239
|
|
|
700
|
-
export { PivotGridCellDirective, PivotGridComponent, PivotGridModule, PivotGridTableComponent, PivotLocalBindingDirective, PivotOLAPBindingDirective };
|
|
2240
|
+
export { ConfigurationChangeEvent, CustomMessagesComponent, DraggableChipDirective, DropTargetDirective, ExpandChangeEvent, PivotGridCellDirective, PivotGridComponent, PivotGridConfiguratorComponent, PivotGridModule, PivotGridTableComponent, PivotLocalBindingDirective, PivotOLAPBindingDirective };
|
|
701
2241
|
|