@skyux/data-grid 14.23.0 → 14.25.0
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/fesm2022/skyux-data-grid-testing.mjs +8 -0
- package/fesm2022/skyux-data-grid-testing.mjs.map +1 -1
- package/fesm2022/skyux-data-grid.mjs +474 -43
- package/fesm2022/skyux-data-grid.mjs.map +1 -1
- package/package.json +6 -6
- package/types/skyux-data-grid-testing.d.ts +5 -0
- package/types/skyux-data-grid.d.ts +113 -8
|
@@ -10,9 +10,9 @@ import { SkyLogService, SkyViewkeeperModule } from '@skyux/core';
|
|
|
10
10
|
import * as i4 from '@skyux/indicators';
|
|
11
11
|
import { SkyWaitModule } from '@skyux/indicators';
|
|
12
12
|
import * as i2 from '@skyux/lists';
|
|
13
|
-
import { SkyPagingModule } from '@skyux/lists';
|
|
13
|
+
import { SkyPagingModule, SkyDataColumnSource, SkyDataSelectionSource, SkyDataSortSource } from '@skyux/lists';
|
|
14
14
|
import { AgGridAngular } from 'ag-grid-angular';
|
|
15
|
-
import { ModuleRegistry, CellStyleModule, ClientSideRowModelModule, ColumnApiModule, ColumnAutoSizeModule, CustomEditorModule, EventApiModule, GridStateModule, LocaleModule, PaginationModule, RenderApiModule, RowApiModule, RowAutoHeightModule, RowSelectionModule, RowStyleModule } from 'ag-grid-community';
|
|
15
|
+
import { ModuleRegistry, CellStyleModule, ClientSideRowModelModule, ColumnApiModule, ColumnAutoSizeModule, CustomEditorModule, EventApiModule, GridStateModule, LocaleModule, PaginationModule, RenderApiModule, RowApiModule, RowAutoHeightModule, RowSelectionModule, RowStyleModule, SELECTION_COLUMN_ID } from 'ag-grid-community';
|
|
16
16
|
import { Observable, filter, switchMap, takeUntil, map, startWith } from 'rxjs';
|
|
17
17
|
import * as i1 from '@skyux/help-inline';
|
|
18
18
|
import { SkyHelpInlineModule } from '@skyux/help-inline';
|
|
@@ -26,7 +26,9 @@ class SkyDataGridColumn {
|
|
|
26
26
|
#initialized;
|
|
27
27
|
constructor() {
|
|
28
28
|
/**
|
|
29
|
-
* Whether the column is hidden.
|
|
29
|
+
* Whether the column is hidden. When the grid's `selectedColumnIds` is set,
|
|
30
|
+
* it determines which columns display instead. In a data manager's column
|
|
31
|
+
* picker, the column starts hidden and users can choose to display it.
|
|
30
32
|
* @default false
|
|
31
33
|
*/
|
|
32
34
|
this.columnHidden = input(false, { ...(ngDevMode ? { debugName: "columnHidden" } : {}), transform: booleanAttribute });
|
|
@@ -41,6 +43,11 @@ class SkyDataGridColumn {
|
|
|
41
43
|
* @default 'text'
|
|
42
44
|
*/
|
|
43
45
|
this.dataType = input('text', ...(ngDevMode ? [{ debugName: "dataType" }] : []));
|
|
46
|
+
/**
|
|
47
|
+
* The text to display beneath the column's `headingText` in a data
|
|
48
|
+
* manager's column picker.
|
|
49
|
+
*/
|
|
50
|
+
this.description = input(...(ngDevMode ? [undefined, { debugName: "description" }] : []));
|
|
44
51
|
/**
|
|
45
52
|
* The property to retrieve cell information from an entry on the grid `data` array.
|
|
46
53
|
* You must provide either the `columnId` or `field` property for every column,
|
|
@@ -81,7 +88,9 @@ class SkyDataGridColumn {
|
|
|
81
88
|
/**
|
|
82
89
|
* Whether the column is locked. The intent is to display locked columns first
|
|
83
90
|
* on the left side of the grid. If set to `true`, then users cannot drag the column
|
|
84
|
-
* to another position or drag other columns before it.
|
|
91
|
+
* to another position or drag other columns before it. In a data manager's
|
|
92
|
+
* column picker, a locked column always displays and is not offered as an
|
|
93
|
+
* option.
|
|
85
94
|
* @default false
|
|
86
95
|
*/
|
|
87
96
|
this.locked = input(false, { ...(ngDevMode ? { debugName: "locked" } : {}), transform: booleanAttribute });
|
|
@@ -142,7 +151,7 @@ class SkyDataGridColumn {
|
|
|
142
151
|
this.#initialized.set(true);
|
|
143
152
|
}
|
|
144
153
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyDataGridColumn, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
145
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.0", type: SkyDataGridColumn, isStandalone: true, selector: "sky-data-grid-column", inputs: { columnHidden: { classPropertyName: "columnHidden", publicName: "columnHidden", isSignal: true, isRequired: false, transformFunction: null }, columnId: { classPropertyName: "columnId", publicName: "columnId", isSignal: true, isRequired: false, transformFunction: null }, dataType: { classPropertyName: "dataType", publicName: "dataType", isSignal: true, isRequired: false, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: false, transformFunction: null }, flexWidth: { classPropertyName: "flexWidth", publicName: "flexWidth", isSignal: true, isRequired: false, transformFunction: null }, headingText: { classPropertyName: "headingText", publicName: "headingText", isSignal: true, isRequired: true, transformFunction: null }, headingHidden: { classPropertyName: "headingHidden", publicName: "headingHidden", isSignal: true, isRequired: false, transformFunction: null }, helpPopoverTitle: { classPropertyName: "helpPopoverTitle", publicName: "helpPopoverTitle", isSignal: true, isRequired: false, transformFunction: null }, helpPopoverContent: { classPropertyName: "helpPopoverContent", publicName: "helpPopoverContent", isSignal: true, isRequired: false, transformFunction: null }, locked: { classPropertyName: "locked", publicName: "locked", isSignal: true, isRequired: false, transformFunction: null }, resizable: { classPropertyName: "resizable", publicName: "resizable", isSignal: true, isRequired: false, transformFunction: null }, sortable: { classPropertyName: "sortable", publicName: "sortable", isSignal: true, isRequired: false, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, wrapText: { classPropertyName: "wrapText", publicName: "wrapText", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "templateChild", first: true, predicate: TemplateRef, descendants: true, isSignal: true }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
154
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.0", type: SkyDataGridColumn, isStandalone: true, selector: "sky-data-grid-column", inputs: { columnHidden: { classPropertyName: "columnHidden", publicName: "columnHidden", isSignal: true, isRequired: false, transformFunction: null }, columnId: { classPropertyName: "columnId", publicName: "columnId", isSignal: true, isRequired: false, transformFunction: null }, dataType: { classPropertyName: "dataType", publicName: "dataType", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: false, transformFunction: null }, flexWidth: { classPropertyName: "flexWidth", publicName: "flexWidth", isSignal: true, isRequired: false, transformFunction: null }, headingText: { classPropertyName: "headingText", publicName: "headingText", isSignal: true, isRequired: true, transformFunction: null }, headingHidden: { classPropertyName: "headingHidden", publicName: "headingHidden", isSignal: true, isRequired: false, transformFunction: null }, helpPopoverTitle: { classPropertyName: "helpPopoverTitle", publicName: "helpPopoverTitle", isSignal: true, isRequired: false, transformFunction: null }, helpPopoverContent: { classPropertyName: "helpPopoverContent", publicName: "helpPopoverContent", isSignal: true, isRequired: false, transformFunction: null }, locked: { classPropertyName: "locked", publicName: "locked", isSignal: true, isRequired: false, transformFunction: null }, resizable: { classPropertyName: "resizable", publicName: "resizable", isSignal: true, isRequired: false, transformFunction: null }, sortable: { classPropertyName: "sortable", publicName: "sortable", isSignal: true, isRequired: false, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, wrapText: { classPropertyName: "wrapText", publicName: "wrapText", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "templateChild", first: true, predicate: TemplateRef, descendants: true, isSignal: true }], ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
146
155
|
}
|
|
147
156
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyDataGridColumn, decorators: [{
|
|
148
157
|
type: Component,
|
|
@@ -151,7 +160,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
151
160
|
template: '',
|
|
152
161
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
153
162
|
}]
|
|
154
|
-
}], ctorParameters: () => [], propDecorators: { columnHidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "columnHidden", required: false }] }], columnId: [{ type: i0.Input, args: [{ isSignal: true, alias: "columnId", required: false }] }], dataType: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataType", required: false }] }], field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: false }] }], flexWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "flexWidth", required: false }] }], headingText: [{ type: i0.Input, args: [{ isSignal: true, alias: "headingText", required: true }] }], headingHidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "headingHidden", required: false }] }], helpPopoverTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "helpPopoverTitle", required: false }] }], helpPopoverContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "helpPopoverContent", required: false }] }], locked: [{ type: i0.Input, args: [{ isSignal: true, alias: "locked", required: false }] }], resizable: [{ type: i0.Input, args: [{ isSignal: true, alias: "resizable", required: false }] }], sortable: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortable", required: false }] }], template: [{ type: i0.Input, args: [{ isSignal: true, alias: "template", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], wrapText: [{ type: i0.Input, args: [{ isSignal: true, alias: "wrapText", required: false }] }], templateChild: [{ type: i0.ContentChild, args: [i0.forwardRef(() => TemplateRef), { isSignal: true }] }] } });
|
|
163
|
+
}], ctorParameters: () => [], propDecorators: { columnHidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "columnHidden", required: false }] }], columnId: [{ type: i0.Input, args: [{ isSignal: true, alias: "columnId", required: false }] }], dataType: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataType", required: false }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: false }] }], flexWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "flexWidth", required: false }] }], headingText: [{ type: i0.Input, args: [{ isSignal: true, alias: "headingText", required: true }] }], headingHidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "headingHidden", required: false }] }], helpPopoverTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "helpPopoverTitle", required: false }] }], helpPopoverContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "helpPopoverContent", required: false }] }], locked: [{ type: i0.Input, args: [{ isSignal: true, alias: "locked", required: false }] }], resizable: [{ type: i0.Input, args: [{ isSignal: true, alias: "resizable", required: false }] }], sortable: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortable", required: false }] }], template: [{ type: i0.Input, args: [{ isSignal: true, alias: "template", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], wrapText: [{ type: i0.Input, args: [{ isSignal: true, alias: "wrapText", required: false }] }], templateChild: [{ type: i0.ContentChild, args: [i0.forwardRef(() => TemplateRef), { isSignal: true }] }] } });
|
|
155
164
|
|
|
156
165
|
/**
|
|
157
166
|
* @internal
|
|
@@ -227,6 +236,17 @@ ModuleRegistry.registerModules([
|
|
|
227
236
|
function arraySorted(arr) {
|
|
228
237
|
return arr.slice().sort((a, b) => a.localeCompare(b));
|
|
229
238
|
}
|
|
239
|
+
const DEFAULT_DOCK_TYPE = 'none';
|
|
240
|
+
function arraysEqual(a, b) {
|
|
241
|
+
return a.length === b.length && a.every((value, i) => value === b[i]);
|
|
242
|
+
}
|
|
243
|
+
// The data manager has its own copy of this function, because the two
|
|
244
|
+
// libraries cannot share an internal function without exporting it.
|
|
245
|
+
function columnWidthsEqual(a, b) {
|
|
246
|
+
const keys = Object.keys(a);
|
|
247
|
+
return (keys.length === Object.keys(b).length &&
|
|
248
|
+
keys.every((key) => a[key] === b[key]));
|
|
249
|
+
}
|
|
230
250
|
/**
|
|
231
251
|
* Displays tabular data in a grid using a declarative set of columns and inputs.
|
|
232
252
|
* Provide the `data` array and one `sky-data-grid-column` for each column to render.
|
|
@@ -234,11 +254,37 @@ function arraySorted(arr) {
|
|
|
234
254
|
*/
|
|
235
255
|
class SkyDataGrid {
|
|
236
256
|
#activatedRoute;
|
|
257
|
+
/**
|
|
258
|
+
* The widths in pixels of the columns users resized, keyed by column ID.
|
|
259
|
+
* This is `undefined` until a data manager integration sets the widths, so a
|
|
260
|
+
* grid outside a data manager neither tracks nor restores them.
|
|
261
|
+
*/
|
|
262
|
+
#columnWidths;
|
|
263
|
+
/**
|
|
264
|
+
* The widths the grid gave the columns that have neither a flex nor a
|
|
265
|
+
* width, from before a column width replaced them.
|
|
266
|
+
*/
|
|
267
|
+
#gridSizedWidths;
|
|
268
|
+
#selectionPruningDisabled;
|
|
269
|
+
#viewkeeperDisabled;
|
|
270
|
+
#awaitingInitialAutoSize;
|
|
237
271
|
#gridService;
|
|
238
272
|
#logger;
|
|
239
273
|
#router;
|
|
240
274
|
#columnDefs;
|
|
241
275
|
#hasColumnDefs;
|
|
276
|
+
/**
|
|
277
|
+
* The IDs of the columns that display, in a fixed order, so that moving a
|
|
278
|
+
* column does not change it.
|
|
279
|
+
*/
|
|
280
|
+
#displayedColumnIdSet;
|
|
281
|
+
/**
|
|
282
|
+
* The declared columns that have a usable ID, in declaration order. Columns
|
|
283
|
+
* missing both `columnId` and `field` are omitted; `SkyDataGridColumn`
|
|
284
|
+
* already warns about them. A repeated ID is suffixed the way AG Grid
|
|
285
|
+
* suffixes it (`name_1`), so that every column can be addressed.
|
|
286
|
+
*/
|
|
287
|
+
#columnCatalog;
|
|
242
288
|
#gridDestroyed;
|
|
243
289
|
#gridSelectedRowIds;
|
|
244
290
|
#gridSortChange;
|
|
@@ -290,6 +336,14 @@ class SkyDataGrid {
|
|
|
290
336
|
* the grid will show a "no rows" message.
|
|
291
337
|
*/
|
|
292
338
|
this.data = input(...(ngDevMode ? [undefined, { debugName: "data" }] : []));
|
|
339
|
+
/**
|
|
340
|
+
* How the data grid docks to the page. Use `fill` to dock the data grid to the container's size where the container
|
|
341
|
+
* is a `sky-page` component with its `layout` set to `fit`, or where the container is another element with a
|
|
342
|
+
* relative or absolute position and a fixed size. This property is applied when the grid initializes; changes
|
|
343
|
+
* after initialization are not reflected.
|
|
344
|
+
* @default "none"
|
|
345
|
+
*/
|
|
346
|
+
this.dock = input(DEFAULT_DOCK_TYPE, ...(ngDevMode ? [{ debugName: "dock" }] : []));
|
|
293
347
|
/**
|
|
294
348
|
* The text to read to screen readers to describe the grid. This sets the `aria-label` attribute on the grid container.
|
|
295
349
|
*/
|
|
@@ -301,7 +355,7 @@ class SkyDataGrid {
|
|
|
301
355
|
*/
|
|
302
356
|
this.loading = input(false, { ...(ngDevMode ? { debugName: "loading" } : {}), transform: coerceBooleanProperty });
|
|
303
357
|
/**
|
|
304
|
-
* The minimum height of the grid in pixels.
|
|
358
|
+
* The minimum height of the grid in pixels. This property does not apply when `dock` is set to `fill`.
|
|
305
359
|
* @default 50
|
|
306
360
|
*/
|
|
307
361
|
this.minHeight = input(50, { ...(ngDevMode ? { debugName: "minHeight" } : {}), transform: (value) => coerceNumberProperty(value, 50) });
|
|
@@ -337,7 +391,7 @@ class SkyDataGrid {
|
|
|
337
391
|
} });
|
|
338
392
|
/**
|
|
339
393
|
* Whether the data grid is stacked with another element below it. When specified, the appropriate
|
|
340
|
-
* vertical spacing is automatically added to the data grid.
|
|
394
|
+
* vertical spacing is automatically added to the data grid. This property does not apply when `dock` is set to `fill`.
|
|
341
395
|
* @default false
|
|
342
396
|
*/
|
|
343
397
|
this.stacked = input(false, { ...(ngDevMode ? { debugName: "stacked" } : {}), transform: coerceBooleanProperty });
|
|
@@ -362,6 +416,15 @@ class SkyDataGrid {
|
|
|
362
416
|
* @default []
|
|
363
417
|
*/
|
|
364
418
|
this.selectedRowIds = model([], ...(ngDevMode ? [{ debugName: "selectedRowIds" }] : []));
|
|
419
|
+
/**
|
|
420
|
+
* The IDs of the columns to display, in display order. Columns that are not
|
|
421
|
+
* included are hidden. An ID that does not match a column is ignored until a
|
|
422
|
+
* column with that ID is declared. This is two-way bindable: once set, it
|
|
423
|
+
* emits a new value when the user reorders columns. When `undefined`, every
|
|
424
|
+
* column displays in declaration order except those marked `columnHidden`.
|
|
425
|
+
* Displayed locked columns come first.
|
|
426
|
+
*/
|
|
427
|
+
this.selectedColumnIds = model(...(ngDevMode ? [undefined, { debugName: "selectedColumnIds" }] : []));
|
|
365
428
|
/**
|
|
366
429
|
* The current sort applied to the grid. This is two-way bindable: it emits a new value
|
|
367
430
|
* whenever the user sorts a column, and you can set it to sort the grid programmatically.
|
|
@@ -370,6 +433,62 @@ class SkyDataGrid {
|
|
|
370
433
|
*/
|
|
371
434
|
this.sort = model(undefined, ...(ngDevMode ? [{ debugName: "sort" }] : []));
|
|
372
435
|
this.columns = contentChildren(SkyDataGridColumn, ...(ngDevMode ? [{ debugName: "columns" }] : []));
|
|
436
|
+
/**
|
|
437
|
+
* The columns the grid can display, in declaration order. Read by column
|
|
438
|
+
* picker integrations through `SkyDataColumnSource`.
|
|
439
|
+
* @internal
|
|
440
|
+
*/
|
|
441
|
+
this.columnOptions = computed(() => this.#columnCatalog().map(({ id, column }) => ({
|
|
442
|
+
alwaysDisplayed: column.locked(),
|
|
443
|
+
description: column.description(),
|
|
444
|
+
id,
|
|
445
|
+
initialHide: column.columnHidden(),
|
|
446
|
+
labelText: column.headingText(),
|
|
447
|
+
})), ...(ngDevMode ? [{ debugName: "columnOptions" }] : []));
|
|
448
|
+
/**
|
|
449
|
+
* The widths in pixels of the columns users resized, keyed by column ID.
|
|
450
|
+
* Read by data manager integrations through `SkyDataColumnSource`.
|
|
451
|
+
* @internal
|
|
452
|
+
*/
|
|
453
|
+
this.columnWidths = computed(() => this.#columnWidths() ?? {}, ...(ngDevMode ? [{ debugName: "columnWidths" }] : []));
|
|
454
|
+
/**
|
|
455
|
+
* The IDs of the columns that display, in display order: the
|
|
456
|
+
* `selectedColumnIds` that match a declared column or, when
|
|
457
|
+
* `selectedColumnIds` is `undefined`, every column not marked `columnHidden`.
|
|
458
|
+
* Locked columns come first, as the grid displays them. Read by column
|
|
459
|
+
* picker integrations through `SkyDataColumnSource`.
|
|
460
|
+
* @internal
|
|
461
|
+
*/
|
|
462
|
+
this.displayedColumnIds = computed(() => {
|
|
463
|
+
const catalog = this.#columnCatalog();
|
|
464
|
+
const selectedColumnIds = this.selectedColumnIds();
|
|
465
|
+
const declaredIds = catalog.map(({ id }) => id);
|
|
466
|
+
const lockedIds = catalog
|
|
467
|
+
.filter(({ column }) => column.locked())
|
|
468
|
+
.map(({ id }) => id);
|
|
469
|
+
const columnIds = selectedColumnIds
|
|
470
|
+
? selectedColumnIds.filter((id) => declaredIds.includes(id))
|
|
471
|
+
: catalog
|
|
472
|
+
.filter(({ column }) => !column.columnHidden())
|
|
473
|
+
.map(({ id }) => id);
|
|
474
|
+
return [
|
|
475
|
+
...columnIds.filter((id) => lockedIds.includes(id)),
|
|
476
|
+
...columnIds.filter((id) => !lockedIds.includes(id)),
|
|
477
|
+
];
|
|
478
|
+
}, { ...(ngDevMode ? { debugName: "displayedColumnIds" } : {}), equal: arraysEqual });
|
|
479
|
+
/**
|
|
480
|
+
* The selectors of the elements the grid keeps visible at the top of the
|
|
481
|
+
* viewport while the page scrolls. Read by column picker integrations
|
|
482
|
+
* through `SkyDataColumnSource`.
|
|
483
|
+
* @internal
|
|
484
|
+
*/
|
|
485
|
+
this.viewkeeperClasses = computed(() => {
|
|
486
|
+
const classes = ['.ag-header'];
|
|
487
|
+
if (this.topScrollEnabled()) {
|
|
488
|
+
classes.push('.ag-body-horizontal-scroll');
|
|
489
|
+
}
|
|
490
|
+
return classes;
|
|
491
|
+
}, ...(ngDevMode ? [{ debugName: "viewkeeperClasses" }] : []));
|
|
373
492
|
this.gridApi = signal(undefined, ...(ngDevMode ? [{ debugName: "gridApi" }] : []));
|
|
374
493
|
this.gridOptions = computed(() => {
|
|
375
494
|
const hasColumnDefs = this.#hasColumnDefs();
|
|
@@ -391,7 +510,7 @@ class SkyDataGrid {
|
|
|
391
510
|
context: {
|
|
392
511
|
enableTopScroll: untracked(() => this.topScrollEnabled()),
|
|
393
512
|
},
|
|
394
|
-
domLayout: 'autoHeight',
|
|
513
|
+
domLayout: untracked(() => this.useFillDock() ? 'normal' : 'autoHeight'),
|
|
395
514
|
initialState: sort
|
|
396
515
|
? {
|
|
397
516
|
partialColumnState: true,
|
|
@@ -403,7 +522,45 @@ class SkyDataGrid {
|
|
|
403
522
|
}
|
|
404
523
|
: undefined,
|
|
405
524
|
loading: untracked(() => this.loading() || !Array.isArray(this.data())),
|
|
525
|
+
// A user moves columns with the keyboard or by dragging a column
|
|
526
|
+
// header. A drag moves columns as it goes, and a drag released outside
|
|
527
|
+
// the grid or cancelled with Escape reports no finished move, so sync
|
|
528
|
+
// when any drag ends too.
|
|
529
|
+
onColumnMoved: (event) => {
|
|
530
|
+
if (event.finished) {
|
|
531
|
+
this.#syncColumnOrderFromGrid(event.api);
|
|
532
|
+
}
|
|
533
|
+
},
|
|
534
|
+
// The grid's initial content sizing runs after the grid is ready and
|
|
535
|
+
// would replace the widths applied then, so apply them again. Content
|
|
536
|
+
// sizing after that is a user double-clicking a column's edge.
|
|
537
|
+
onColumnResized: (event) => {
|
|
538
|
+
if (event.source === 'autosizeColumns' &&
|
|
539
|
+
this.#awaitingInitialAutoSize) {
|
|
540
|
+
this.#awaitingInitialAutoSize = false;
|
|
541
|
+
this.#gridSizedWidths.clear();
|
|
542
|
+
this.#rememberGridSizedWidths(event.api);
|
|
543
|
+
this.#reapplyColumnWidths(event.api);
|
|
544
|
+
}
|
|
545
|
+
else if ((event.source === 'uiColumnResized' && event.finished) ||
|
|
546
|
+
event.source === 'autosizeColumns') {
|
|
547
|
+
// AG Grid reports the resized columns with every resize it
|
|
548
|
+
// dispatches from these sources.
|
|
549
|
+
/* istanbul ignore next */
|
|
550
|
+
this.#syncColumnWidthsFromGrid(event.columns ?? []);
|
|
551
|
+
}
|
|
552
|
+
},
|
|
553
|
+
onDragCancelled: (event) => this.#syncColumnOrderFromGrid(event.api),
|
|
554
|
+
onDragStopped: (event) => this.#syncColumnOrderFromGrid(event.api),
|
|
406
555
|
onGridReady: (args) => {
|
|
556
|
+
// The displayed columns may have changed since the column
|
|
557
|
+
// definitions were created.
|
|
558
|
+
this.#applyDisplayedColumns(args.api, this.displayedColumnIds());
|
|
559
|
+
this.#awaitingInitialAutoSize =
|
|
560
|
+
!!args.api.getGridOption('autoSizeStrategy');
|
|
561
|
+
this.#gridSizedWidths.clear();
|
|
562
|
+
this.#rememberGridSizedWidths(args.api);
|
|
563
|
+
this.#reapplyColumnWidths(args.api);
|
|
407
564
|
this.gridApi.set(args.api);
|
|
408
565
|
this.gridReady.set(true);
|
|
409
566
|
},
|
|
@@ -456,23 +613,78 @@ class SkyDataGrid {
|
|
|
456
613
|
} });
|
|
457
614
|
this.skyViewkeeper = computed(() => {
|
|
458
615
|
// Only used when not using SkyDataManagerService because data manager handles SkyViewkeeper.
|
|
459
|
-
|
|
460
|
-
if (this.
|
|
461
|
-
|
|
616
|
+
// Not used in fill mode either: AG Grid keeps its own header in place in that layout.
|
|
617
|
+
if (this.useFillDock()) {
|
|
618
|
+
return [];
|
|
462
619
|
}
|
|
463
|
-
return
|
|
620
|
+
return this.#viewkeeperDisabled() ? [] : this.viewkeeperClasses();
|
|
464
621
|
}, ...(ngDevMode ? [{ debugName: "skyViewkeeper" }] : []));
|
|
622
|
+
this.useFillDock = computed(() => this.dock() === 'fill', ...(ngDevMode ? [{ debugName: "useFillDock" }] : []));
|
|
623
|
+
this.useStacked = computed(() => this.stacked() && this.dock() !== 'fill', ...(ngDevMode ? [{ debugName: "useStacked" }] : []));
|
|
465
624
|
this.#activatedRoute = inject(ActivatedRoute, { optional: true });
|
|
625
|
+
/**
|
|
626
|
+
* The widths in pixels of the columns users resized, keyed by column ID.
|
|
627
|
+
* This is `undefined` until a data manager integration sets the widths, so a
|
|
628
|
+
* grid outside a data manager neither tracks nor restores them.
|
|
629
|
+
*/
|
|
630
|
+
this.#columnWidths = signal(undefined, ...(ngDevMode ? [{ debugName: "#columnWidths" }] : []));
|
|
631
|
+
/**
|
|
632
|
+
* The widths the grid gave the columns that have neither a flex nor a
|
|
633
|
+
* width, from before a column width replaced them.
|
|
634
|
+
*/
|
|
635
|
+
this.#gridSizedWidths = new Map();
|
|
636
|
+
this.#selectionPruningDisabled = signal(false, ...(ngDevMode ? [{ debugName: "#selectionPruningDisabled" }] : []));
|
|
637
|
+
this.#viewkeeperDisabled = signal(false, ...(ngDevMode ? [{ debugName: "#viewkeeperDisabled" }] : []));
|
|
638
|
+
this.#awaitingInitialAutoSize = false;
|
|
466
639
|
this.#gridService = inject(SkyAgGridService);
|
|
467
640
|
this.#logger = inject(SkyLogService);
|
|
468
641
|
this.#router = inject(Router, { optional: true });
|
|
469
642
|
this.#columnDefs = computed(() => {
|
|
470
|
-
const
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
643
|
+
const catalog = this.#columnCatalog();
|
|
644
|
+
// Read untracked so that showing, hiding, or reordering columns does not
|
|
645
|
+
// rebuild the column definitions, which would reset flex columns the user
|
|
646
|
+
// resized. An effect applies those changes as runtime column state instead.
|
|
647
|
+
const displayedIds = untracked(this.displayedColumnIds);
|
|
648
|
+
const entriesById = new Map(catalog.map((entry) => [entry.id, entry]));
|
|
649
|
+
// Displayed columns first, in display order, followed by the hidden
|
|
650
|
+
// columns. Hidden columns keep their column definitions so AG Grid retains
|
|
651
|
+
// their state and they can be shown again without being recreated.
|
|
652
|
+
const displayedColDefs = displayedIds
|
|
653
|
+
.map((id) => entriesById.get(id))
|
|
654
|
+
.filter((entry) => !!entry)
|
|
655
|
+
.map(({ column, id }) => this.#createColDef(column, id, false));
|
|
656
|
+
const hiddenColDefs = catalog
|
|
657
|
+
.filter(({ id }) => !displayedIds.includes(id))
|
|
658
|
+
.map(({ column, id }) => this.#createColDef(column, id, true));
|
|
659
|
+
return [...displayedColDefs, ...hiddenColDefs];
|
|
474
660
|
}, ...(ngDevMode ? [{ debugName: "#columnDefs" }] : []));
|
|
475
661
|
this.#hasColumnDefs = computed(() => this.#columnDefs().length > 0, ...(ngDevMode ? [{ debugName: "#hasColumnDefs" }] : []));
|
|
662
|
+
/**
|
|
663
|
+
* The IDs of the columns that display, in a fixed order, so that moving a
|
|
664
|
+
* column does not change it.
|
|
665
|
+
*/
|
|
666
|
+
this.#displayedColumnIdSet = computed(() => arraySorted(this.displayedColumnIds()), { ...(ngDevMode ? { debugName: "#displayedColumnIdSet" } : {}), equal: arraysEqual });
|
|
667
|
+
/**
|
|
668
|
+
* The declared columns that have a usable ID, in declaration order. Columns
|
|
669
|
+
* missing both `columnId` and `field` are omitted; `SkyDataGridColumn`
|
|
670
|
+
* already warns about them. A repeated ID is suffixed the way AG Grid
|
|
671
|
+
* suffixes it (`name_1`), so that every column can be addressed.
|
|
672
|
+
*/
|
|
673
|
+
this.#columnCatalog = computed(() => {
|
|
674
|
+
const catalog = [];
|
|
675
|
+
for (const column of this.columns()) {
|
|
676
|
+
const declaredId = column.columnId() ?? column.field();
|
|
677
|
+
if (declaredId &&
|
|
678
|
+
column.initialized()) {
|
|
679
|
+
let id = declaredId;
|
|
680
|
+
for (let i = 1; catalog.some((entry) => entry.id === id); i++) {
|
|
681
|
+
id = `${declaredId}_${i}`;
|
|
682
|
+
}
|
|
683
|
+
catalog.push({ column, id });
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
return catalog;
|
|
687
|
+
}, ...(ngDevMode ? [{ debugName: "#columnCatalog" }] : []));
|
|
476
688
|
this.#gridDestroyed = toObservable(this.gridApi).pipe(filter(Boolean), switchMap((api) => fromGridEvent(api, 'gridPreDestroyed')));
|
|
477
689
|
this.#gridSelectedRowIds = toObservable(this.gridApi).pipe(filter(Boolean), switchMap((api) => fromGridEvent(api, 'selectionChanged').pipe(takeUntil(this.#gridDestroyed), map(() => arraySorted(this.#getRowIds(api.getSelectedNodes()))))));
|
|
478
690
|
this.#gridSortChange = toObservable(this.gridApi).pipe(filter(Boolean), switchMap((api) => fromGridEvent(api, 'sortChanged').pipe(takeUntil(this.#gridDestroyed), map((sortEvent) => {
|
|
@@ -507,7 +719,14 @@ class SkyDataGrid {
|
|
|
507
719
|
effect(() => {
|
|
508
720
|
const api = untracked(() => this.gridApi());
|
|
509
721
|
const columnDefs = this.#columnDefs();
|
|
510
|
-
api
|
|
722
|
+
if (api) {
|
|
723
|
+
api.setGridOption('columnDefs', columnDefs);
|
|
724
|
+
untracked(() => {
|
|
725
|
+
this.#rememberGridSizedWidths(api);
|
|
726
|
+
// New column definitions make columns users resized flex again.
|
|
727
|
+
this.#reapplyColumnWidths(api);
|
|
728
|
+
});
|
|
729
|
+
}
|
|
511
730
|
});
|
|
512
731
|
effect(() => {
|
|
513
732
|
const api = untracked(() => this.gridApi());
|
|
@@ -543,7 +762,10 @@ class SkyDataGrid {
|
|
|
543
762
|
const validRowIds = new Set(this.rowData().map((row) => row.id));
|
|
544
763
|
const selectedRowIds = coerceStringArray(this.selectedRowIds());
|
|
545
764
|
const validSelectedRowIds = selectedRowIds.filter((id) => validRowIds.has(id));
|
|
765
|
+
// A data manager integration keeps the IDs of rows its search or
|
|
766
|
+
// filters hide, so they are selected again when the rows return.
|
|
546
767
|
if (this.autoPage() &&
|
|
768
|
+
!this.#selectionPruningDisabled() &&
|
|
547
769
|
validSelectedRowIds.length !== selectedRowIds.length) {
|
|
548
770
|
this.selectedRowIds.set(validSelectedRowIds);
|
|
549
771
|
}
|
|
@@ -589,6 +811,32 @@ class SkyDataGrid {
|
|
|
589
811
|
defaultState: { sort: null },
|
|
590
812
|
});
|
|
591
813
|
});
|
|
814
|
+
// Apply changes to the displayed columns as runtime column state rather
|
|
815
|
+
// than through `columnDefs`, so showing, hiding, or reordering columns does
|
|
816
|
+
// not reset flex columns the user resized. Only a change to the displayed
|
|
817
|
+
// columns re-runs this, so a column order the user set by dragging a header
|
|
818
|
+
// is otherwise left alone.
|
|
819
|
+
effect(() => {
|
|
820
|
+
const displayedIds = this.displayedColumnIds();
|
|
821
|
+
const api = untracked(() => this.gridApi());
|
|
822
|
+
if (api) {
|
|
823
|
+
this.#applyDisplayedColumns(api, displayedIds);
|
|
824
|
+
}
|
|
825
|
+
});
|
|
826
|
+
// A grid that fits its columns to the container, and has no flex columns
|
|
827
|
+
// to take up the space, does not otherwise resize them when a column is
|
|
828
|
+
// hidden or shown. Moving a column leaves the displayed set alone, so it
|
|
829
|
+
// does not discard the widths a user set in a grid that is not tracking
|
|
830
|
+
// them.
|
|
831
|
+
effect(() => {
|
|
832
|
+
this.#displayedColumnIdSet();
|
|
833
|
+
const api = untracked(() => this.gridApi());
|
|
834
|
+
if (api &&
|
|
835
|
+
untracked(this.columnFit) === 'container' &&
|
|
836
|
+
!untracked(() => this.#hasFlexColumns())) {
|
|
837
|
+
this.#fitColumnsToContainer(api);
|
|
838
|
+
}
|
|
839
|
+
});
|
|
592
840
|
effect(() => {
|
|
593
841
|
const api = this.gridApi();
|
|
594
842
|
const page = this.page();
|
|
@@ -679,23 +927,82 @@ class SkyDataGrid {
|
|
|
679
927
|
return val;
|
|
680
928
|
});
|
|
681
929
|
});
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
930
|
+
// Emit the grid's sort, including no sort once no column is sorted, so
|
|
931
|
+
// the two-way bound model does not retain a stale value.
|
|
932
|
+
this.#gridSortChange
|
|
933
|
+
.pipe(takeUntilDestroyed())
|
|
934
|
+
.subscribe((sortChange) => this.setSort(sortChange));
|
|
935
|
+
}
|
|
936
|
+
/**
|
|
937
|
+
* Stops the grid from removing the IDs of rows that are not in `data` from
|
|
938
|
+
* `selectedRowIds`. Called by data manager integrations through
|
|
939
|
+
* `SkyDataSelectionSource` when they keep rows that a search or filter hides
|
|
940
|
+
* selected.
|
|
941
|
+
* @internal
|
|
942
|
+
*/
|
|
943
|
+
disableSelectionPruning() {
|
|
944
|
+
this.#selectionPruningDisabled.set(true);
|
|
945
|
+
}
|
|
946
|
+
/**
|
|
947
|
+
* Stops the grid from keeping the `viewkeeperClasses` elements visible
|
|
948
|
+
* itself. Called by column picker integrations through `SkyDataColumnSource`
|
|
949
|
+
* when a container keeps them visible instead.
|
|
950
|
+
* @internal
|
|
951
|
+
*/
|
|
952
|
+
disableViewkeeper() {
|
|
953
|
+
this.#viewkeeperDisabled.set(true);
|
|
954
|
+
}
|
|
955
|
+
/**
|
|
956
|
+
* Sets the columns that display and their order. Called by column picker
|
|
957
|
+
* integrations through `SkyDataColumnSource`.
|
|
958
|
+
* @internal
|
|
959
|
+
*/
|
|
960
|
+
setDisplayedColumnIds(columnIds) {
|
|
961
|
+
const selectedColumnIds = this.selectedColumnIds();
|
|
962
|
+
if (!selectedColumnIds || !arraysEqual(selectedColumnIds, columnIds)) {
|
|
963
|
+
this.selectedColumnIds.set([...columnIds]);
|
|
964
|
+
}
|
|
965
|
+
}
|
|
966
|
+
/**
|
|
967
|
+
* Sets the widths in pixels of columns, keyed by column ID, and starts
|
|
968
|
+
* tracking the widths users give columns. Columns that are not included
|
|
969
|
+
* return to the widths they are declared with or, when declared without
|
|
970
|
+
* one, the widths the grid gave them. Called by data manager
|
|
971
|
+
* integrations through `SkyDataColumnSource`.
|
|
972
|
+
* @internal
|
|
973
|
+
*/
|
|
974
|
+
setColumnWidths(columnWidths) {
|
|
975
|
+
const currentWidths = this.#columnWidths();
|
|
976
|
+
if (currentWidths && columnWidthsEqual(currentWidths, columnWidths)) {
|
|
977
|
+
return;
|
|
978
|
+
}
|
|
979
|
+
this.#columnWidths.set({ ...columnWidths });
|
|
980
|
+
const api = untracked(this.gridApi);
|
|
981
|
+
if (api) {
|
|
982
|
+
this.#applyColumnWidths(api, columnWidths);
|
|
983
|
+
}
|
|
984
|
+
}
|
|
985
|
+
/**
|
|
986
|
+
* Sets the selected rows. Called by data manager integrations through
|
|
987
|
+
* `SkyDataSelectionSource`.
|
|
988
|
+
* @internal
|
|
989
|
+
*/
|
|
990
|
+
setSelectedRowIds(selectedRowIds) {
|
|
991
|
+
if (!arraysEqual(coerceStringArray(this.selectedRowIds()), selectedRowIds)) {
|
|
992
|
+
this.selectedRowIds.set([...selectedRowIds]);
|
|
993
|
+
}
|
|
994
|
+
}
|
|
995
|
+
/**
|
|
996
|
+
* Sets the sort the grid applies. Called by data manager integrations
|
|
997
|
+
* through `SkyDataSortSource`.
|
|
998
|
+
* @internal
|
|
999
|
+
*/
|
|
1000
|
+
setSort(sort) {
|
|
1001
|
+
const currentSort = this.sort();
|
|
1002
|
+
if (currentSort?.field !== sort?.field ||
|
|
1003
|
+
currentSort?.direction !== sort?.direction) {
|
|
1004
|
+
this.sort.set(sort);
|
|
1005
|
+
}
|
|
699
1006
|
}
|
|
700
1007
|
currentPageChange(page) {
|
|
701
1008
|
if (page && page !== this.page()) {
|
|
@@ -730,15 +1037,15 @@ class SkyDataGrid {
|
|
|
730
1037
|
queryParamsHandling: 'merge',
|
|
731
1038
|
});
|
|
732
1039
|
}
|
|
733
|
-
#createColDef(col) {
|
|
1040
|
+
#createColDef(col, colId, hide) {
|
|
734
1041
|
const field = col.field();
|
|
735
1042
|
const colDef = {
|
|
736
|
-
colId
|
|
1043
|
+
colId,
|
|
737
1044
|
field,
|
|
738
1045
|
headerName: col.headingText(),
|
|
739
1046
|
headerComponentParams: this.#getHeaderComponentParams(col),
|
|
740
|
-
hide
|
|
741
|
-
initialHide:
|
|
1047
|
+
hide,
|
|
1048
|
+
initialHide: hide,
|
|
742
1049
|
resizable: col.resizable(),
|
|
743
1050
|
sortable: col.sortable(),
|
|
744
1051
|
lockPosition: col.locked(),
|
|
@@ -806,6 +1113,121 @@ class SkyDataGrid {
|
|
|
806
1113
|
inlineHelpComponent: SkyDataGridColumnInlineHelp,
|
|
807
1114
|
};
|
|
808
1115
|
}
|
|
1116
|
+
#applyDisplayedColumns(api, displayedIds) {
|
|
1117
|
+
const hiddenIds = untracked(this.#columnCatalog)
|
|
1118
|
+
.map(({ id }) => id)
|
|
1119
|
+
.filter((id) => !displayedIds.includes(id));
|
|
1120
|
+
api.applyColumnState({
|
|
1121
|
+
state: [
|
|
1122
|
+
// AG Grid moves columns missing from the state to the end, which
|
|
1123
|
+
// would put the multiselect column after any locked columns.
|
|
1124
|
+
{ colId: SELECTION_COLUMN_ID },
|
|
1125
|
+
...displayedIds.map((colId) => ({ colId, hide: false })),
|
|
1126
|
+
...hiddenIds.map((colId) => ({ colId, hide: true })),
|
|
1127
|
+
],
|
|
1128
|
+
applyOrder: true,
|
|
1129
|
+
});
|
|
1130
|
+
}
|
|
1131
|
+
#syncColumnOrderFromGrid(api) {
|
|
1132
|
+
// Column moves are tracked only once `selectedColumnIds` is set, so a grid
|
|
1133
|
+
// without it keeps following each column's `columnHidden` setting. Applying
|
|
1134
|
+
// a column layout moves columns too, so compare against what the grid
|
|
1135
|
+
// should display; only a move the user made differs.
|
|
1136
|
+
const selectedColumnIds = this.selectedColumnIds();
|
|
1137
|
+
if (!selectedColumnIds) {
|
|
1138
|
+
return;
|
|
1139
|
+
}
|
|
1140
|
+
const displayedColumnIds = api
|
|
1141
|
+
.getColumnState()
|
|
1142
|
+
.filter((state) => !state.hide && state.colId !== SELECTION_COLUMN_ID)
|
|
1143
|
+
.map((state) => state.colId);
|
|
1144
|
+
if (!arraysEqual(this.displayedColumnIds(), displayedColumnIds)) {
|
|
1145
|
+
// Keep the IDs of columns that are not declared, such as a column
|
|
1146
|
+
// rendered conditionally, so they display once the column is declared.
|
|
1147
|
+
const declaredIds = this.#columnCatalog().map(({ id }) => id);
|
|
1148
|
+
this.selectedColumnIds.set([
|
|
1149
|
+
...displayedColumnIds,
|
|
1150
|
+
...selectedColumnIds.filter((id) => !declaredIds.includes(id)),
|
|
1151
|
+
]);
|
|
1152
|
+
}
|
|
1153
|
+
}
|
|
1154
|
+
/**
|
|
1155
|
+
* Applies the column widths, and returns columns without one to the widths
|
|
1156
|
+
* they are declared with.
|
|
1157
|
+
*/
|
|
1158
|
+
#applyColumnWidths(api, columnWidths) {
|
|
1159
|
+
api.applyColumnState({
|
|
1160
|
+
state: untracked(this.#columnDefs).map(({ colId, flex, initialWidth }) => {
|
|
1161
|
+
const width = columnWidths[colId];
|
|
1162
|
+
// A width stops a column flexing, as a user resizing it does.
|
|
1163
|
+
return width === undefined
|
|
1164
|
+
? {
|
|
1165
|
+
colId: colId,
|
|
1166
|
+
flex: flex || null,
|
|
1167
|
+
width: initialWidth ?? this.#gridSizedWidths.get(colId),
|
|
1168
|
+
}
|
|
1169
|
+
: { colId: colId, flex: null, width };
|
|
1170
|
+
}),
|
|
1171
|
+
});
|
|
1172
|
+
}
|
|
1173
|
+
/**
|
|
1174
|
+
* Remembers the widths of columns that have neither a flex nor a width, so
|
|
1175
|
+
* they can return to them. AG Grid ignores a column state without a width,
|
|
1176
|
+
* so it leaves a column at the width a user gave it.
|
|
1177
|
+
*/
|
|
1178
|
+
#rememberGridSizedWidths(api) {
|
|
1179
|
+
const gridSizedColumnIds = untracked(this.#columnDefs)
|
|
1180
|
+
.filter(({ flex, initialWidth }) => !flex && initialWidth === undefined)
|
|
1181
|
+
.map(({ colId }) => colId);
|
|
1182
|
+
for (const column of api.getAllGridColumns()) {
|
|
1183
|
+
const colId = column.getColId();
|
|
1184
|
+
if (gridSizedColumnIds.includes(colId) &&
|
|
1185
|
+
!this.#gridSizedWidths.has(colId)) {
|
|
1186
|
+
this.#gridSizedWidths.set(colId, column.getActualWidth());
|
|
1187
|
+
}
|
|
1188
|
+
}
|
|
1189
|
+
}
|
|
1190
|
+
/**
|
|
1191
|
+
* Fits the columns to the container, the way the grid does when it
|
|
1192
|
+
* initializes: the columns the grid does not size to their content, such as
|
|
1193
|
+
* those with a declared width and the multiselect column, and the columns
|
|
1194
|
+
* with a width a data manager integration tracks, keep their widths.
|
|
1195
|
+
*/
|
|
1196
|
+
#fitColumnsToContainer(api) {
|
|
1197
|
+
const columnWidths = untracked(this.columnWidths);
|
|
1198
|
+
api.sizeColumnsToFit({
|
|
1199
|
+
columnLimits: api
|
|
1200
|
+
.getAllDisplayedColumns()
|
|
1201
|
+
.filter((column) => column.getColDef().suppressAutoSize ||
|
|
1202
|
+
columnWidths[column.getColId()] !== undefined)
|
|
1203
|
+
.map((column) => ({
|
|
1204
|
+
key: column.getColId(),
|
|
1205
|
+
minWidth: column.getActualWidth(),
|
|
1206
|
+
maxWidth: column.getActualWidth(),
|
|
1207
|
+
})),
|
|
1208
|
+
});
|
|
1209
|
+
}
|
|
1210
|
+
#reapplyColumnWidths(api) {
|
|
1211
|
+
const columnWidths = this.#columnWidths();
|
|
1212
|
+
if (columnWidths && Object.keys(columnWidths).length > 0) {
|
|
1213
|
+
this.#applyColumnWidths(api, columnWidths);
|
|
1214
|
+
}
|
|
1215
|
+
}
|
|
1216
|
+
#syncColumnWidthsFromGrid(columns) {
|
|
1217
|
+
const columnWidths = this.#columnWidths();
|
|
1218
|
+
if (!columnWidths) {
|
|
1219
|
+
return;
|
|
1220
|
+
}
|
|
1221
|
+
// A column a user resizes stops flexing. The flex columns that only filled
|
|
1222
|
+
// the space it left keep flexing, so their widths are not the user's.
|
|
1223
|
+
const updatedWidths = { ...columnWidths };
|
|
1224
|
+
for (const column of columns.filter((col) => !col.getFlex())) {
|
|
1225
|
+
updatedWidths[column.getColId()] = column.getActualWidth();
|
|
1226
|
+
}
|
|
1227
|
+
if (!columnWidthsEqual(columnWidths, updatedWidths)) {
|
|
1228
|
+
this.#columnWidths.set(updatedWidths);
|
|
1229
|
+
}
|
|
1230
|
+
}
|
|
809
1231
|
#getRowIds(rows) {
|
|
810
1232
|
return coerceArray(rows)
|
|
811
1233
|
.map((node) => node?.id)
|
|
@@ -836,7 +1258,11 @@ class SkyDataGrid {
|
|
|
836
1258
|
: { checkboxes: false, mode: 'singleRow' };
|
|
837
1259
|
}
|
|
838
1260
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyDataGrid, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
839
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: SkyDataGrid, isStandalone: true, selector: "sky-data-grid", inputs: { autoSort: { classPropertyName: "autoSort", publicName: "autoSort", isSignal: true, isRequired: false, transformFunction: null }, autoPage: { classPropertyName: "autoPage", publicName: "autoPage", isSignal: true, isRequired: false, transformFunction: null }, columnFit: { classPropertyName: "columnFit", publicName: "columnFit", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, labelText: { classPropertyName: "labelText", publicName: "labelText", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, minHeight: { classPropertyName: "minHeight", publicName: "minHeight", isSignal: true, isRequired: false, transformFunction: null }, multiselect: { classPropertyName: "multiselect", publicName: "multiselect", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, pageQueryParam: { classPropertyName: "pageQueryParam", publicName: "pageQueryParam", isSignal: true, isRequired: false, transformFunction: null }, rowCount: { classPropertyName: "rowCount", publicName: "rowCount", isSignal: true, isRequired: false, transformFunction: null }, stacked: { classPropertyName: "stacked", publicName: "stacked", isSignal: true, isRequired: false, transformFunction: null }, topScrollEnabled: { classPropertyName: "topScrollEnabled", publicName: "topScrollEnabled", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null }, selectedRowIds: { classPropertyName: "selectedRowIds", publicName: "selectedRowIds", isSignal: true, isRequired: false, transformFunction: null }, sort: { classPropertyName: "sort", publicName: "sort", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { page: "pageChange", selectedRowIds: "selectedRowIdsChange", sort: "sortChange" }, host: { properties: { "class.sky-margin-stacked-lg": "stacked()" } }, queries: [{ propertyName: "columns", predicate: SkyDataGridColumn, isSignal: true }], ngImport: i0, template: "<sky-wait [isWaiting]=\"!gridReady()\" />\n@if (gridOptions(); as gridOptions) {\n <sky-ag-grid-wrapper [compact]=\"compact()\" [minHeight]=\"minHeight()\">\n <ag-grid-angular\n skyViewkeeperOmitShadow=\".ag-body-horizontal-scroll\"\n [skyViewkeeper]=\"skyViewkeeper()\"\n [gridOptions]=\"gridOptions\"\n />\n </sky-ag-grid-wrapper>\n\n @if (pageCount() && pageSize(); as pageSize) {\n <sky-paging\n [currentPage]=\"page()\"\n [itemCount]=\"pageItemsCount()\"\n [pageSize]=\"pageSize\"\n (currentPageChange)=\"currentPageChange($event)\"\n />\n }\n}\n", styles: [":host{display:block;max-width:100%}\n"], dependencies: [{ kind: "component", type: AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipSwitchShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "hidePaddedHeaderRows", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "animateColumnResizing", "components", "editType", "suppressStartEditOnTab", "getFullRowEditValidationErrors", "invalidEditValueMode", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "findSearchValue", "findOptions", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "alwaysPassFilter", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "advancedFilterParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableFilterHandlers", "filterHandlers", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "suppressOverlays", "overlayComponent", "overlayComponentParams", "overlayComponentSelector", "activeOverlay", "activeOverlayParams", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "formulaDataSource", "formulaFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableCellSpan", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "refreshAfterGroupEdit", "rowDragInsertDelay", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "treeDataChildrenField", "treeDataParentIdField", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "groupHierarchyConfig", "pinnedTopRowData", "pinnedBottomRowData", "enableRowPinning", "isRowPinnable", "isRowPinned", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "rowNumbers", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "themeCssLayer", "styleNonce", "themeStyleContainer", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "ssrmExpandAllAffectsAllRows", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow", "isRowValidDropPosition"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnsReset", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "bulkEditingStarted", "bulkEditingStopped", "batchEditingStarted", "batchEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "filterUiChanged", "floatingFilterUiChanged", "advancedFilterBuilderVisibleChanged", "findChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "rowResizeStarted", "rowResizeEnded", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "pinnedRowsChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }, { kind: "ngmodule", type: SkyAgGridModule }, { kind: "component", type: i1$1.λ12, selector: "sky-ag-grid-wrapper", inputs: ["compact", "minHeight"] }, { kind: "ngmodule", type: SkyPagingModule }, { kind: "component", type: i2.λ7, selector: "sky-paging", inputs: ["currentPage", "itemCount", "maxPages", "pageSize", "pagingLabel"], outputs: ["currentPageChange", "contentChange"] }, { kind: "ngmodule", type: SkyViewkeeperModule }, { kind: "directive", type: i3.λ3, selector: "[skyViewkeeper]", inputs: ["skyViewkeeper", "skyViewkeeperOmitShadow"] }, { kind: "ngmodule", type: SkyWaitModule }, { kind: "component", type: i4.λ14, selector: "sky-wait", inputs: ["ariaLabel", "isWaiting", "isFullPage", "isNonBlocking", "screenReaderCompletedText"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1261
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: SkyDataGrid, isStandalone: true, selector: "sky-data-grid", inputs: { autoSort: { classPropertyName: "autoSort", publicName: "autoSort", isSignal: true, isRequired: false, transformFunction: null }, autoPage: { classPropertyName: "autoPage", publicName: "autoPage", isSignal: true, isRequired: false, transformFunction: null }, columnFit: { classPropertyName: "columnFit", publicName: "columnFit", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, dock: { classPropertyName: "dock", publicName: "dock", isSignal: true, isRequired: false, transformFunction: null }, labelText: { classPropertyName: "labelText", publicName: "labelText", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, minHeight: { classPropertyName: "minHeight", publicName: "minHeight", isSignal: true, isRequired: false, transformFunction: null }, multiselect: { classPropertyName: "multiselect", publicName: "multiselect", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, pageQueryParam: { classPropertyName: "pageQueryParam", publicName: "pageQueryParam", isSignal: true, isRequired: false, transformFunction: null }, rowCount: { classPropertyName: "rowCount", publicName: "rowCount", isSignal: true, isRequired: false, transformFunction: null }, stacked: { classPropertyName: "stacked", publicName: "stacked", isSignal: true, isRequired: false, transformFunction: null }, topScrollEnabled: { classPropertyName: "topScrollEnabled", publicName: "topScrollEnabled", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null }, selectedRowIds: { classPropertyName: "selectedRowIds", publicName: "selectedRowIds", isSignal: true, isRequired: false, transformFunction: null }, selectedColumnIds: { classPropertyName: "selectedColumnIds", publicName: "selectedColumnIds", isSignal: true, isRequired: false, transformFunction: null }, sort: { classPropertyName: "sort", publicName: "sort", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { page: "pageChange", selectedRowIds: "selectedRowIdsChange", selectedColumnIds: "selectedColumnIdsChange", sort: "sortChange" }, host: { properties: { "class.sky-data-grid-dock-fill": "useFillDock()", "class.sky-margin-stacked-lg": "useStacked()" } }, providers: [
|
|
1262
|
+
{ provide: SkyDataColumnSource, useExisting: SkyDataGrid },
|
|
1263
|
+
{ provide: SkyDataSelectionSource, useExisting: SkyDataGrid },
|
|
1264
|
+
{ provide: SkyDataSortSource, useExisting: SkyDataGrid },
|
|
1265
|
+
], queries: [{ propertyName: "columns", predicate: SkyDataGridColumn, isSignal: true }], ngImport: i0, template: "<sky-wait [isWaiting]=\"!gridReady()\" />\n@if (gridOptions(); as gridOptions) {\n <!-- The grid keeps its column headers visible itself, below. -->\n <sky-ag-grid-wrapper\n viewkeeperDisabled\n [compact]=\"compact()\"\n [minHeight]=\"minHeight()\"\n >\n <ag-grid-angular\n skyViewkeeperOmitShadow=\".ag-body-horizontal-scroll\"\n [skyViewkeeper]=\"skyViewkeeper()\"\n [gridOptions]=\"gridOptions\"\n />\n </sky-ag-grid-wrapper>\n\n @if (pageCount() && pageSize(); as pageSize) {\n <sky-paging\n [currentPage]=\"page()\"\n [itemCount]=\"pageItemsCount()\"\n [pageSize]=\"pageSize\"\n (currentPageChange)=\"currentPageChange($event)\"\n />\n }\n}\n", styles: [":host{display:block;max-width:100%}:host.sky-data-grid-dock-fill{position:absolute;inset:0;display:flex;flex-direction:column}:host.sky-data-grid-dock-fill sky-ag-grid-wrapper{flex:1 1 auto;min-height:0}\n"], dependencies: [{ kind: "component", type: AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipSwitchShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "hidePaddedHeaderRows", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "animateColumnResizing", "components", "editType", "suppressStartEditOnTab", "getFullRowEditValidationErrors", "invalidEditValueMode", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "findSearchValue", "findOptions", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "alwaysPassFilter", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "advancedFilterParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableFilterHandlers", "filterHandlers", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "suppressOverlays", "overlayComponent", "overlayComponentParams", "overlayComponentSelector", "activeOverlay", "activeOverlayParams", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "formulaDataSource", "formulaFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableCellSpan", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "refreshAfterGroupEdit", "rowDragInsertDelay", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "treeDataChildrenField", "treeDataParentIdField", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "groupHierarchyConfig", "pinnedTopRowData", "pinnedBottomRowData", "enableRowPinning", "isRowPinnable", "isRowPinned", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "rowNumbers", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "themeCssLayer", "styleNonce", "themeStyleContainer", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "ssrmExpandAllAffectsAllRows", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow", "isRowValidDropPosition"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnsReset", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "bulkEditingStarted", "bulkEditingStopped", "batchEditingStarted", "batchEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "filterUiChanged", "floatingFilterUiChanged", "advancedFilterBuilderVisibleChanged", "findChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "rowResizeStarted", "rowResizeEnded", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "pinnedRowsChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }, { kind: "ngmodule", type: SkyAgGridModule }, { kind: "component", type: i1$1.λ12, selector: "sky-ag-grid-wrapper", inputs: ["compact", "minHeight", "viewkeeperDisabled"] }, { kind: "ngmodule", type: SkyPagingModule }, { kind: "component", type: i2.λ7, selector: "sky-paging", inputs: ["currentPage", "itemCount", "maxPages", "pageSize", "pagingLabel"], outputs: ["currentPageChange", "contentChange"] }, { kind: "ngmodule", type: SkyViewkeeperModule }, { kind: "directive", type: i3.λ3, selector: "[skyViewkeeper]", inputs: ["skyViewkeeper", "skyViewkeeperOmitShadow"] }, { kind: "ngmodule", type: SkyWaitModule }, { kind: "component", type: i4.λ14, selector: "sky-wait", inputs: ["ariaLabel", "isWaiting", "isFullPage", "isNonBlocking", "screenReaderCompletedText"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
840
1266
|
}
|
|
841
1267
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SkyDataGrid, decorators: [{
|
|
842
1268
|
type: Component,
|
|
@@ -847,9 +1273,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
847
1273
|
SkyViewkeeperModule,
|
|
848
1274
|
SkyWaitModule,
|
|
849
1275
|
], host: {
|
|
850
|
-
'[class.sky-
|
|
851
|
-
|
|
852
|
-
|
|
1276
|
+
'[class.sky-data-grid-dock-fill]': 'useFillDock()',
|
|
1277
|
+
'[class.sky-margin-stacked-lg]': 'useStacked()',
|
|
1278
|
+
}, providers: [
|
|
1279
|
+
{ provide: SkyDataColumnSource, useExisting: SkyDataGrid },
|
|
1280
|
+
{ provide: SkyDataSelectionSource, useExisting: SkyDataGrid },
|
|
1281
|
+
{ provide: SkyDataSortSource, useExisting: SkyDataGrid },
|
|
1282
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<sky-wait [isWaiting]=\"!gridReady()\" />\n@if (gridOptions(); as gridOptions) {\n <!-- The grid keeps its column headers visible itself, below. -->\n <sky-ag-grid-wrapper\n viewkeeperDisabled\n [compact]=\"compact()\"\n [minHeight]=\"minHeight()\"\n >\n <ag-grid-angular\n skyViewkeeperOmitShadow=\".ag-body-horizontal-scroll\"\n [skyViewkeeper]=\"skyViewkeeper()\"\n [gridOptions]=\"gridOptions\"\n />\n </sky-ag-grid-wrapper>\n\n @if (pageCount() && pageSize(); as pageSize) {\n <sky-paging\n [currentPage]=\"page()\"\n [itemCount]=\"pageItemsCount()\"\n [pageSize]=\"pageSize\"\n (currentPageChange)=\"currentPageChange($event)\"\n />\n }\n}\n", styles: [":host{display:block;max-width:100%}:host.sky-data-grid-dock-fill{position:absolute;inset:0;display:flex;flex-direction:column}:host.sky-data-grid-dock-fill sky-ag-grid-wrapper{flex:1 1 auto;min-height:0}\n"] }]
|
|
1283
|
+
}], ctorParameters: () => [], propDecorators: { autoSort: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoSort", required: false }] }], autoPage: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoPage", required: false }] }], columnFit: [{ type: i0.Input, args: [{ isSignal: true, alias: "columnFit", required: false }] }], compact: [{ type: i0.Input, args: [{ isSignal: true, alias: "compact", required: false }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], dock: [{ type: i0.Input, args: [{ isSignal: true, alias: "dock", required: false }] }], labelText: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelText", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], minHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "minHeight", required: false }] }], multiselect: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiselect", required: false }] }], pageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSize", required: false }] }], pageQueryParam: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageQueryParam", required: false }] }], rowCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowCount", required: false }] }], stacked: [{ type: i0.Input, args: [{ isSignal: true, alias: "stacked", required: false }] }], topScrollEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "topScrollEnabled", required: false }] }], page: [{ type: i0.Input, args: [{ isSignal: true, alias: "page", required: false }] }, { type: i0.Output, args: ["pageChange"] }], selectedRowIds: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedRowIds", required: false }] }, { type: i0.Output, args: ["selectedRowIdsChange"] }], selectedColumnIds: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedColumnIds", required: false }] }, { type: i0.Output, args: ["selectedColumnIdsChange"] }], sort: [{ type: i0.Input, args: [{ isSignal: true, alias: "sort", required: false }] }, { type: i0.Output, args: ["sortChange"] }], columns: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => SkyDataGridColumn), { isSignal: true }] }] } });
|
|
853
1284
|
|
|
854
1285
|
/**
|
|
855
1286
|
* Generated bundle index. Do not edit.
|