@progress/kendo-angular-grid 19.3.1-develop.3 → 20.0.0-develop.1
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/codemods/template-transformer/index.js +94 -0
- package/codemods/utils.js +553 -0
- package/codemods/v20/grid-kendogridgroupbinding.js +51 -0
- package/common/provider.service.d.ts +3 -2
- package/databinding.directive.d.ts +0 -3
- package/directives.d.ts +3 -4
- package/esm2022/common/error-messages.mjs +0 -6
- package/esm2022/common/provider.service.mjs +1 -0
- package/esm2022/data/data.iterators.mjs +0 -7
- package/esm2022/databinding.directive.mjs +4 -4
- package/esm2022/directives.mjs +0 -3
- package/esm2022/grid.component.mjs +63 -31
- package/esm2022/grid.module.mjs +15 -16
- package/esm2022/grouping/group-header.component.mjs +6 -3
- package/esm2022/index.mjs +0 -1
- package/esm2022/navigation/navigation-metadata.mjs +4 -2
- package/esm2022/navigation/navigation.service.mjs +4 -2
- package/esm2022/package-metadata.mjs +2 -2
- package/esm2022/pdf/pdf.component.mjs +16 -0
- package/esm2022/pdf/pdf.service.mjs +1 -0
- package/esm2022/rendering/list.component.mjs +188 -92
- package/esm2022/rendering/table-body.component.mjs +19 -5
- package/esm2022/scrolling/row-height.service.mjs +23 -65
- package/esm2022/scrolling/scroller.service.mjs +175 -35
- package/fesm2022/progress-kendo-angular-grid.mjs +508 -588
- package/grid.component.d.ts +6 -6
- package/grid.module.d.ts +14 -15
- package/grouping/group-header.component.d.ts +1 -1
- package/index.d.ts +0 -2
- package/navigation/navigation-metadata.d.ts +2 -1
- package/package.json +36 -21
- package/pdf/pdf.component.d.ts +1 -0
- package/pdf/pdf.service.d.ts +1 -0
- package/rendering/list.component.d.ts +11 -5
- package/rendering/table-body.component.d.ts +3 -2
- package/schematics/ngAdd/index.js +4 -4
- package/scrolling/row-height.service.d.ts +3 -8
- package/scrolling/scroller.service.d.ts +35 -9
- package/esm2022/grouping/group-scroll-binding.directive.mjs +0 -347
- package/esm2022/grouping/virtual-group-result.interface.mjs +0 -5
- package/grouping/group-scroll-binding.directive.d.ts +0 -85
- package/grouping/virtual-group-result.interface.d.ts +0 -18
|
@@ -6,7 +6,7 @@ import * as i0 from '@angular/core';
|
|
|
6
6
|
import { EventEmitter, Injectable, SecurityContext, InjectionToken, Optional, Inject, Directive, SkipSelf, Input, isDevMode, QueryList, Component, ContentChildren, ContentChild, forwardRef, Host, Output, HostBinding, Pipe, TemplateRef, ChangeDetectionStrategy, ViewChildren, ViewChild, Self, NgZone, HostListener, ElementRef, ViewContainerRef, ViewEncapsulation, inject, Injector, NgModule } from '@angular/core';
|
|
7
7
|
import { merge, of, Subject, zip as zip$1, from, Subscription, interval, fromEvent, Observable, BehaviorSubject } from 'rxjs';
|
|
8
8
|
import * as i1$3 from '@progress/kendo-angular-common';
|
|
9
|
-
import { isDocumentAvailable, Keys, hasClasses as hasClasses$1, isPresent as isPresent$1, normalizeNumpadKeys, anyChanged, TemplateContextDirective, DraggableDirective, EventsOutsideAngularDirective, replaceMessagePlaceholder, isChanged as isChanged$1, KendoInput, guid, closest as closest$1, hasObservers, ResizeSensorComponent, closestInScope as closestInScope$1, isFocusable as isFocusable$1, PreventableEvent as PreventableEvent$1, getLicenseMessage, shouldShowValidationUI, WatermarkOverlayComponent, ResizeBatchService } from '@progress/kendo-angular-common';
|
|
9
|
+
import { isDocumentAvailable, Keys, hasClasses as hasClasses$1, isPresent as isPresent$1, normalizeNumpadKeys, anyChanged, TemplateContextDirective, DraggableDirective, EventsOutsideAngularDirective, replaceMessagePlaceholder, isChanged as isChanged$1, KendoInput, guid, closest as closest$1, hasObservers, ResizeSensorComponent, isFirefox, firefoxMaxHeight, closestInScope as closestInScope$1, isFocusable as isFocusable$1, PreventableEvent as PreventableEvent$1, getLicenseMessage, shouldShowValidationUI, WatermarkOverlayComponent, ResizeBatchService } from '@progress/kendo-angular-common';
|
|
10
10
|
import * as i1 from '@angular/platform-browser';
|
|
11
11
|
import * as i1$1 from '@progress/kendo-angular-icons';
|
|
12
12
|
import { IconWrapperComponent, IconsService, KENDO_ICONS } from '@progress/kendo-angular-icons';
|
|
@@ -16,7 +16,7 @@ import * as i1$2 from '@progress/kendo-angular-l10n';
|
|
|
16
16
|
import { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';
|
|
17
17
|
import * as i53 from '@progress/kendo-angular-pager';
|
|
18
18
|
import { PagerContextService, PagerNavigationService, PagerTemplateDirective, KENDO_PAGER } from '@progress/kendo-angular-pager';
|
|
19
|
-
import { orderBy, isCompositeFilterDescriptor, groupBy, process
|
|
19
|
+
import { orderBy, isCompositeFilterDescriptor, groupBy, process } from '@progress/kendo-data-query';
|
|
20
20
|
import { NgFor, NgIf, NgTemplateOutlet, NgSwitch, NgSwitchCase, NgClass, NgStyle, NgSwitchDefault, KeyValuePipe } from '@angular/common';
|
|
21
21
|
import { getter } from '@progress/kendo-common';
|
|
22
22
|
import * as i1$4 from '@progress/kendo-angular-intl';
|
|
@@ -867,6 +867,7 @@ class ContextService {
|
|
|
867
867
|
topToolbarNavigation;
|
|
868
868
|
bottomToolbarNavigation;
|
|
869
869
|
navigable;
|
|
870
|
+
scroller;
|
|
870
871
|
dataBindingDirective;
|
|
871
872
|
highlightDirective;
|
|
872
873
|
constructor(renderer, localization) {
|
|
@@ -2170,9 +2171,6 @@ const GridConfigurationErrorMessages = {
|
|
|
2170
2171
|
functionType: (propName, fn) => `${propName} must be a function, but received ${JSON.stringify(fn)}.`,
|
|
2171
2172
|
incompatibleFeatures: (feat1Name, feat2Name) => `'Having both ${feat1Name} and ${feat2Name} is not supported.'`,
|
|
2172
2173
|
nonLockedColumnPresent: 'There should be at least one non-locked column. See https://www.telerik.com/kendo-angular-ui/components/grid/columns/locked/#toc-known-limitations',
|
|
2173
|
-
rowHeightVirtual: `The virtual scrolling functionality requires setting the rowHeight (and detailRowHeight when there are detail rows).
|
|
2174
|
-
Row height and detail row height settings should be set only when virtual scrolling mode is enabled.
|
|
2175
|
-
See https://www.telerik.com/kendo-angular-ui/components/grid/scroll-modes/virtual/#toc-getting-started.`,
|
|
2176
2174
|
focusNavigable: 'The Grid should be configured as navigable to control focus. See https://www.telerik.com/kendo-angular-ui/components/grid/keyboard-navigation/.',
|
|
2177
2175
|
expandCollapseMethods: (expandMethodName, collapseMethodName, directiveName, callbackName) => `The ${expandMethodName} and ${collapseMethodName} methods should not be called
|
|
2178
2176
|
when using the ${directiveName} directive or the ${callbackName} callback.
|
|
@@ -2180,9 +2178,6 @@ const GridConfigurationErrorMessages = {
|
|
|
2180
2178
|
requiredEditService: `The default edit service of the editing directives works only when binding to plain array.
|
|
2181
2179
|
Please provide an editService. See https://www.telerik.com/kendo-angular-ui/components/grid/editing/editing-directives/#toc-custom-editing-service.`,
|
|
2182
2180
|
requiredModule: (exportedType, moduleName, componentSelector) => `Creating ${exportedType} requires including the ${moduleName} and adding the ${componentSelector} component.`,
|
|
2183
|
-
groupBindingDirectives: `Using the "kendoGridGroupBinding" directive in combination with the "kendoGridExpandGroupBy" directive
|
|
2184
|
-
or the "isGroupExpanded" callback is not supported. To use grouping with the "kendoGridGroupBinding" directive,
|
|
2185
|
-
set the Grid "groupable" property to "true".`,
|
|
2186
2181
|
unsupportedMethod: (methodName, suggestedMethodName) => `Using ${methodName} in this context is not supported. Use ${suggestedMethodName} instead.`,
|
|
2187
2182
|
unsupportedToolbarConfig: `
|
|
2188
2183
|
Defining both a toolbar template and a ToolBarComponent within the Grid is not supported.
|
|
@@ -3522,7 +3517,7 @@ class NavigationService {
|
|
|
3522
3517
|
isShiftPressed = false;
|
|
3523
3518
|
currentSelection = [];
|
|
3524
3519
|
get activeDataRow() {
|
|
3525
|
-
return Math.max(0, this.activeRowIndex - this.meta.headerRows);
|
|
3520
|
+
return Math.min(Math.max(0, this.activeRowIndex - this.meta.headerRows), this.meta.maxLogicalRowIndex);
|
|
3526
3521
|
}
|
|
3527
3522
|
constructor(zone, domEvents, pagerContextService, scrollRequestService, groupsService, detailsService, focusRoot, editService, cd, ctx, resizeService, focusableParent) {
|
|
3528
3523
|
this.zone = zone;
|
|
@@ -4084,8 +4079,10 @@ class NavigationService {
|
|
|
4084
4079
|
const dataRowIndex = this.activeDataRow;
|
|
4085
4080
|
if (this.meta && (this.meta.isVirtual &&
|
|
4086
4081
|
args.rowIndex >= this.meta.headerRows &&
|
|
4082
|
+
args.rowIndex <= this.meta.maxLogicalRowIndex - this.meta.footerRow &&
|
|
4087
4083
|
this.viewport &&
|
|
4088
|
-
!this.viewport.containsRow(dataRowIndex) &&
|
|
4084
|
+
!this.viewport.containsRow(dataRowIndex) &&
|
|
4085
|
+
dataRowIndex > -1)) {
|
|
4089
4086
|
this.scrollRequestService.scrollTo({ row: dataRowIndex });
|
|
4090
4087
|
}
|
|
4091
4088
|
if (this.meta.virtualColumns && args.colIndex >= this.meta.columns.lockedLeafColumns.length) {
|
|
@@ -5716,8 +5713,11 @@ class GroupHeaderComponent {
|
|
|
5716
5713
|
prefixGroupCell(item) {
|
|
5717
5714
|
return new Array(item.level);
|
|
5718
5715
|
}
|
|
5719
|
-
toggleGroup(item) {
|
|
5716
|
+
toggleGroup(item, event) {
|
|
5720
5717
|
this.groupsService.toggleRow(item);
|
|
5718
|
+
if (this.ctx.navigable) {
|
|
5719
|
+
this.ctx.grid.navigationService.focusCellByElement(event.target.closest('td'));
|
|
5720
|
+
}
|
|
5721
5721
|
return false;
|
|
5722
5722
|
}
|
|
5723
5723
|
groupSpan(item) {
|
|
@@ -5793,7 +5793,7 @@ class GroupHeaderComponent {
|
|
|
5793
5793
|
[colSpan]="logicalColSpan()">
|
|
5794
5794
|
<p class="k-reset">
|
|
5795
5795
|
<ng-container *ngIf="!skipGroupDecoration">
|
|
5796
|
-
<a href="#" tabindex="-1" (click)="toggleGroup(item)"
|
|
5796
|
+
<a href="#" tabindex="-1" (click)="toggleGroup(item, $event)"
|
|
5797
5797
|
role="presentation"
|
|
5798
5798
|
[attr.title]="groupButtonTitle"
|
|
5799
5799
|
[attr.aria-label]="groupButtonTitle">
|
|
@@ -5884,7 +5884,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
5884
5884
|
[colSpan]="logicalColSpan()">
|
|
5885
5885
|
<p class="k-reset">
|
|
5886
5886
|
<ng-container *ngIf="!skipGroupDecoration">
|
|
5887
|
-
<a href="#" tabindex="-1" (click)="toggleGroup(item)"
|
|
5887
|
+
<a href="#" tabindex="-1" (click)="toggleGroup(item, $event)"
|
|
5888
5888
|
role="presentation"
|
|
5889
5889
|
[attr.title]="groupButtonTitle"
|
|
5890
5890
|
[attr.aria-label]="groupButtonTitle">
|
|
@@ -15735,6 +15735,7 @@ class PDFService {
|
|
|
15735
15735
|
exportClick = new EventEmitter();
|
|
15736
15736
|
dataChanged = new EventEmitter();
|
|
15737
15737
|
exporting;
|
|
15738
|
+
restoreDOMVirtualization = new EventEmitter();
|
|
15738
15739
|
save(component) {
|
|
15739
15740
|
this.emitEvent(this.savePDF, component);
|
|
15740
15741
|
}
|
|
@@ -16061,6 +16062,7 @@ class PDFComponent extends PDFExportComponent {
|
|
|
16061
16062
|
drawSubscription;
|
|
16062
16063
|
renderAllPages;
|
|
16063
16064
|
originalColumns;
|
|
16065
|
+
restoreDOMVirtualization;
|
|
16064
16066
|
constructor(pdfService, suspendService, ngZone, element, ctx) {
|
|
16065
16067
|
super(element);
|
|
16066
16068
|
this.pdfService = pdfService;
|
|
@@ -16109,6 +16111,16 @@ class PDFComponent extends PDFExportComponent {
|
|
|
16109
16111
|
this.pdfService.exporting = true;
|
|
16110
16112
|
this.initProgress();
|
|
16111
16113
|
this.renderAllPages = this.allPages && pageSize < total;
|
|
16114
|
+
if (component.isVirtual && component.pageable) {
|
|
16115
|
+
component.scrollable = 'scrollable';
|
|
16116
|
+
this.restoreDOMVirtualization = true;
|
|
16117
|
+
if (!this.renderAllPages) {
|
|
16118
|
+
this.changePage(component.skip, pageSize, callback, columns);
|
|
16119
|
+
if (!(columns.length || component.virtualColumns)) {
|
|
16120
|
+
return;
|
|
16121
|
+
}
|
|
16122
|
+
}
|
|
16123
|
+
}
|
|
16112
16124
|
if (this.renderAllPages) {
|
|
16113
16125
|
this.skip = component.skip;
|
|
16114
16126
|
this.pageSize = pageSize;
|
|
@@ -16191,6 +16203,11 @@ class PDFComponent extends PDFExportComponent {
|
|
|
16191
16203
|
if (this.component) {
|
|
16192
16204
|
const originalColumns = this.originalColumns;
|
|
16193
16205
|
delete this.originalColumns;
|
|
16206
|
+
if (this.restoreDOMVirtualization) {
|
|
16207
|
+
this.component.scrollable = 'virtual';
|
|
16208
|
+
this.pdfService.restoreDOMVirtualization.emit();
|
|
16209
|
+
this.restoreDOMVirtualization = false;
|
|
16210
|
+
}
|
|
16194
16211
|
if (this.renderAllPages) {
|
|
16195
16212
|
this.changePage(this.skip, this.pageSize, this.reset, originalColumns);
|
|
16196
16213
|
}
|
|
@@ -20240,6 +20257,8 @@ class TableBodyComponent {
|
|
|
20240
20257
|
rowSticky;
|
|
20241
20258
|
totalColumns;
|
|
20242
20259
|
rowClass = () => null;
|
|
20260
|
+
rowHeight;
|
|
20261
|
+
detailRowHeight;
|
|
20243
20262
|
hostClass = true;
|
|
20244
20263
|
groupHeaderSlaveCellsCount;
|
|
20245
20264
|
groupHeaderColumns;
|
|
@@ -20352,7 +20371,8 @@ class TableBodyComponent {
|
|
|
20352
20371
|
}
|
|
20353
20372
|
}
|
|
20354
20373
|
logicalRowIndex(rowIndex) {
|
|
20355
|
-
|
|
20374
|
+
const skip = this.skip + (this.ctx.scroller?.virtualSkip ?? 0);
|
|
20375
|
+
let pos = rowIndex + skip;
|
|
20356
20376
|
if (this.hasDetailTemplate && !this.isStackedMode) {
|
|
20357
20377
|
pos *= 2;
|
|
20358
20378
|
}
|
|
@@ -20444,9 +20464,6 @@ class TableBodyComponent {
|
|
|
20444
20464
|
}, []);
|
|
20445
20465
|
return colsToRender;
|
|
20446
20466
|
}
|
|
20447
|
-
showGroupHeader(item) {
|
|
20448
|
-
return !item.data.skipHeader;
|
|
20449
|
-
}
|
|
20450
20467
|
addStickyColumnStyles(column) {
|
|
20451
20468
|
const stickyStyles = this.columnInfoService.stickyColumnsStyles(column);
|
|
20452
20469
|
return { ...column.style, ...stickyStyles };
|
|
@@ -20610,9 +20627,10 @@ class TableBodyComponent {
|
|
|
20610
20627
|
}
|
|
20611
20628
|
}
|
|
20612
20629
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableBodyComponent, deps: [{ token: DetailsService }, { token: GroupsService }, { token: ChangeNotificationService }, { token: EditService }, { token: ContextService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: DomEventsService }, { token: SelectionService }, { token: CellSelectionService }, { token: ColumnInfoService }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
20613
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TableBodyComponent, isStandalone: true, selector: "[kendoGridTableBody]", inputs: { columns: "columns", allColumns: "allColumns", groups: "groups", detailTemplate: "detailTemplate", noRecordsTemplate: "noRecordsTemplate", rowsToRender: "rowsToRender", skip: "skip", selectable: "selectable", filterable: "filterable", noRecordsText: "noRecordsText", isLocked: "isLocked", isLoading: "isLoading", isVirtual: "isVirtual", cellLoadingTemplate: "cellLoadingTemplate", skipGroupDecoration: "skipGroupDecoration", lockedColumnsCount: "lockedColumnsCount", totalColumnsCount: "totalColumnsCount", virtualColumns: "virtualColumns", trackBy: "trackBy", rowSticky: "rowSticky", totalColumns: "totalColumns", rowClass: "rowClass" }, host: { properties: { "class.k-table-tbody": "this.hostClass" } }, usesOnChanges: true, ngImport: i0, template: `
|
|
20630
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TableBodyComponent, isStandalone: true, selector: "[kendoGridTableBody]", inputs: { columns: "columns", allColumns: "allColumns", groups: "groups", detailTemplate: "detailTemplate", noRecordsTemplate: "noRecordsTemplate", rowsToRender: "rowsToRender", skip: "skip", selectable: "selectable", filterable: "filterable", noRecordsText: "noRecordsText", isLocked: "isLocked", isLoading: "isLoading", isVirtual: "isVirtual", cellLoadingTemplate: "cellLoadingTemplate", skipGroupDecoration: "skipGroupDecoration", lockedColumnsCount: "lockedColumnsCount", totalColumnsCount: "totalColumnsCount", virtualColumns: "virtualColumns", trackBy: "trackBy", rowSticky: "rowSticky", totalColumns: "totalColumns", rowClass: "rowClass", rowHeight: "rowHeight", detailRowHeight: "detailRowHeight" }, host: { properties: { "class.k-table-tbody": "this.hostClass" } }, usesOnChanges: true, ngImport: i0, template: `
|
|
20614
20631
|
<ng-container *ngIf="editService.hasNewItem">
|
|
20615
20632
|
<tr class="k-grid-add-row k-grid-edit-row k-master-row"
|
|
20633
|
+
[style.height.px]="rowHeight"
|
|
20616
20634
|
kendoGridLogicalRow
|
|
20617
20635
|
[logicalRowIndex]="addRowLogicalIndex()"
|
|
20618
20636
|
[logicalSlaveRow]="lockedColumnsCount > 0 && !isStackedMode"
|
|
@@ -20682,6 +20700,7 @@ class TableBodyComponent {
|
|
|
20682
20700
|
</tr>
|
|
20683
20701
|
<ng-container *ngFor="let item of rowsToRender; trackBy: trackByWrapper; let rowIndex = index;">
|
|
20684
20702
|
<tr *ngIf="item.type === 'group'"
|
|
20703
|
+
[style.height.px]="rowHeight"
|
|
20685
20704
|
kendoGridGroupHeader
|
|
20686
20705
|
[columns]="columns"
|
|
20687
20706
|
[groups]="groups"
|
|
@@ -20700,6 +20719,7 @@ class TableBodyComponent {
|
|
|
20700
20719
|
[logicalSlaveCellsCount]="groupHeaderSlaveCellsCount">
|
|
20701
20720
|
</tr>
|
|
20702
20721
|
<tr *ngIf="item.showDataItem"
|
|
20722
|
+
[style.height.px]="rowHeight"
|
|
20703
20723
|
kendoGridLogicalRow
|
|
20704
20724
|
[dataRowIndex]="$any(item).index"
|
|
20705
20725
|
[dataItem]="item.data"
|
|
@@ -20801,6 +20821,7 @@ class TableBodyComponent {
|
|
|
20801
20821
|
</tr>
|
|
20802
20822
|
<tr *ngIf="item.showDetailRow"
|
|
20803
20823
|
class="k-detail-row"
|
|
20824
|
+
[style.height.px]="detailRowHeight"
|
|
20804
20825
|
kendoGridLogicalRow
|
|
20805
20826
|
[dataRowIndex]="$any(item).index"
|
|
20806
20827
|
[dataItem]="item.data"
|
|
@@ -20855,6 +20876,7 @@ class TableBodyComponent {
|
|
|
20855
20876
|
</tr>
|
|
20856
20877
|
<tr *ngIf="item.type === 'footer'"
|
|
20857
20878
|
class="k-group-footer"
|
|
20879
|
+
[style.height.px]="rowHeight"
|
|
20858
20880
|
kendoGridLogicalRow
|
|
20859
20881
|
[logicalRowIndex]="logicalRowIndex(rowIndex)"
|
|
20860
20882
|
[logicalSlaveRow]="lockedColumnsCount > 0 && !isStackedMode"
|
|
@@ -20928,6 +20950,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
20928
20950
|
template: `
|
|
20929
20951
|
<ng-container *ngIf="editService.hasNewItem">
|
|
20930
20952
|
<tr class="k-grid-add-row k-grid-edit-row k-master-row"
|
|
20953
|
+
[style.height.px]="rowHeight"
|
|
20931
20954
|
kendoGridLogicalRow
|
|
20932
20955
|
[logicalRowIndex]="addRowLogicalIndex()"
|
|
20933
20956
|
[logicalSlaveRow]="lockedColumnsCount > 0 && !isStackedMode"
|
|
@@ -20997,6 +21020,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
20997
21020
|
</tr>
|
|
20998
21021
|
<ng-container *ngFor="let item of rowsToRender; trackBy: trackByWrapper; let rowIndex = index;">
|
|
20999
21022
|
<tr *ngIf="item.type === 'group'"
|
|
21023
|
+
[style.height.px]="rowHeight"
|
|
21000
21024
|
kendoGridGroupHeader
|
|
21001
21025
|
[columns]="columns"
|
|
21002
21026
|
[groups]="groups"
|
|
@@ -21015,6 +21039,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
21015
21039
|
[logicalSlaveCellsCount]="groupHeaderSlaveCellsCount">
|
|
21016
21040
|
</tr>
|
|
21017
21041
|
<tr *ngIf="item.showDataItem"
|
|
21042
|
+
[style.height.px]="rowHeight"
|
|
21018
21043
|
kendoGridLogicalRow
|
|
21019
21044
|
[dataRowIndex]="$any(item).index"
|
|
21020
21045
|
[dataItem]="item.data"
|
|
@@ -21116,6 +21141,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
21116
21141
|
</tr>
|
|
21117
21142
|
<tr *ngIf="item.showDetailRow"
|
|
21118
21143
|
class="k-detail-row"
|
|
21144
|
+
[style.height.px]="detailRowHeight"
|
|
21119
21145
|
kendoGridLogicalRow
|
|
21120
21146
|
[dataRowIndex]="$any(item).index"
|
|
21121
21147
|
[dataItem]="item.data"
|
|
@@ -21170,6 +21196,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
21170
21196
|
</tr>
|
|
21171
21197
|
<tr *ngIf="item.type === 'footer'"
|
|
21172
21198
|
class="k-group-footer"
|
|
21199
|
+
[style.height.px]="rowHeight"
|
|
21173
21200
|
kendoGridLogicalRow
|
|
21174
21201
|
[logicalRowIndex]="logicalRowIndex(rowIndex)"
|
|
21175
21202
|
[logicalSlaveRow]="lockedColumnsCount > 0 && !isStackedMode"
|
|
@@ -21285,6 +21312,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
21285
21312
|
type: Input
|
|
21286
21313
|
}], rowClass: [{
|
|
21287
21314
|
type: Input
|
|
21315
|
+
}], rowHeight: [{
|
|
21316
|
+
type: Input
|
|
21317
|
+
}], detailRowHeight: [{
|
|
21318
|
+
type: Input
|
|
21288
21319
|
}], hostClass: [{
|
|
21289
21320
|
type: HostBinding,
|
|
21290
21321
|
args: ['class.k-table-tbody']
|
|
@@ -22025,8 +22056,8 @@ const packageMetadata = {
|
|
|
22025
22056
|
productName: 'Kendo UI for Angular',
|
|
22026
22057
|
productCode: 'KENDOUIANGULAR',
|
|
22027
22058
|
productCodes: ['KENDOUIANGULAR'],
|
|
22028
|
-
publishDate:
|
|
22029
|
-
version: '
|
|
22059
|
+
publishDate: 1755704951,
|
|
22060
|
+
version: '20.0.0-develop.1',
|
|
22030
22061
|
licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
|
|
22031
22062
|
};
|
|
22032
22063
|
|
|
@@ -22137,10 +22168,6 @@ const isGroupItem = (source) => {
|
|
|
22137
22168
|
return source.items !== undefined &&
|
|
22138
22169
|
source.field !== undefined;
|
|
22139
22170
|
};
|
|
22140
|
-
const isVirtualGroupItem = (source) => {
|
|
22141
|
-
return source.offset !== undefined &&
|
|
22142
|
-
source.skipHeader !== undefined;
|
|
22143
|
-
};
|
|
22144
22171
|
const flattenGroups = (groups) => (groups.reduce((acc, curr) => {
|
|
22145
22172
|
if (isGroupItem(curr)) {
|
|
22146
22173
|
return acc.concat(flattenGroups(curr.items));
|
|
@@ -22163,9 +22190,6 @@ const itemAt = (data, index) => {
|
|
|
22163
22190
|
const getIterator = (data, { footers, level, dataIndex, parentGroupIndex, groupIndex, parentGroup }) => {
|
|
22164
22191
|
const first = data[0];
|
|
22165
22192
|
if (isPresent(first) && isGroupItem(first)) {
|
|
22166
|
-
if (isVirtualGroupItem(first)) {
|
|
22167
|
-
groupIndex = isPresent(first.offset) ? first.offset : groupIndex;
|
|
22168
|
-
}
|
|
22169
22193
|
return new GroupIterator(data, footers, level, dataIndex, parentGroupIndex, groupIndex, parentGroup);
|
|
22170
22194
|
}
|
|
22171
22195
|
return new ItemIterator(data, dataIndex, parentGroupIndex, parentGroup);
|
|
@@ -22938,12 +22962,13 @@ class NavigationMetadata {
|
|
|
22938
22962
|
gridElement;
|
|
22939
22963
|
virtualColumns;
|
|
22940
22964
|
columns;
|
|
22965
|
+
footerRow;
|
|
22941
22966
|
isStacked;
|
|
22942
22967
|
get maxLogicalRowIndex() {
|
|
22943
22968
|
const dataRows = this.hasDetailTemplate ? this.dataRows * 2 : this.dataRows;
|
|
22944
|
-
return this.headerRows + dataRows - 1;
|
|
22969
|
+
return this.headerRows + dataRows + this.footerRow - 1;
|
|
22945
22970
|
}
|
|
22946
|
-
constructor(dataRows, headerRows, isVirtual, hasPager, hasDetailTemplate, gridElement, virtualColumns, columns, isStacked) {
|
|
22971
|
+
constructor(dataRows, headerRows, isVirtual, hasPager, hasDetailTemplate, gridElement, virtualColumns, columns, footerRow, isStacked) {
|
|
22947
22972
|
this.dataRows = dataRows;
|
|
22948
22973
|
this.headerRows = headerRows;
|
|
22949
22974
|
this.isVirtual = isVirtual;
|
|
@@ -22952,6 +22977,7 @@ class NavigationMetadata {
|
|
|
22952
22977
|
this.gridElement = gridElement;
|
|
22953
22978
|
this.virtualColumns = virtualColumns;
|
|
22954
22979
|
this.columns = columns;
|
|
22980
|
+
this.footerRow = footerRow;
|
|
22955
22981
|
this.isStacked = isStacked;
|
|
22956
22982
|
}
|
|
22957
22983
|
}
|
|
@@ -23811,26 +23837,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
23811
23837
|
}]
|
|
23812
23838
|
}], ctorParameters: function () { return [{ type: i1$3.DraggableDirective }, { type: SelectionService }, { type: CellSelectionService }, { type: DomEventsService }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; } });
|
|
23813
23839
|
|
|
23814
|
-
/**
|
|
23815
|
-
* @hidden
|
|
23816
|
-
*/
|
|
23817
|
-
const update = (arr, idx, value) => ([
|
|
23818
|
-
...arr.slice(0, idx + 1),
|
|
23819
|
-
...(arr.slice(idx + 1).map(x => x + value))
|
|
23820
|
-
]);
|
|
23821
23840
|
/**
|
|
23822
23841
|
* @hidden
|
|
23823
23842
|
*/
|
|
23824
23843
|
class RowHeightService {
|
|
23825
23844
|
total;
|
|
23826
|
-
rowHeight;
|
|
23827
|
-
detailRowHeight;
|
|
23828
23845
|
offsets = [];
|
|
23829
23846
|
heights = [];
|
|
23830
|
-
constructor(total = 0, rowHeight
|
|
23847
|
+
constructor(total = 0, rowHeight) {
|
|
23831
23848
|
this.total = total;
|
|
23832
|
-
this.rowHeight = rowHeight;
|
|
23833
|
-
this.detailRowHeight = detailRowHeight;
|
|
23834
23849
|
let agg = 0;
|
|
23835
23850
|
for (let idx = 0; idx < total; idx++) {
|
|
23836
23851
|
this.offsets.push(agg);
|
|
@@ -23841,66 +23856,35 @@ class RowHeightService {
|
|
|
23841
23856
|
height(rowIndex) {
|
|
23842
23857
|
return this.heights[rowIndex];
|
|
23843
23858
|
}
|
|
23844
|
-
expandDetail(rowIndex) {
|
|
23845
|
-
if (this.height(rowIndex) === this.rowHeight) {
|
|
23846
|
-
this.updateRowHeight(rowIndex, this.detailRowHeight);
|
|
23847
|
-
}
|
|
23848
|
-
}
|
|
23849
|
-
collapseDetail(rowIndex) {
|
|
23850
|
-
if (this.height(rowIndex) > this.rowHeight) {
|
|
23851
|
-
this.updateRowHeight(rowIndex, this.detailRowHeight * -1);
|
|
23852
|
-
}
|
|
23853
|
-
}
|
|
23854
|
-
isExpanded(rowIndex) {
|
|
23855
|
-
return this.height(rowIndex) > this.rowHeight;
|
|
23856
|
-
}
|
|
23857
23859
|
index(position) {
|
|
23858
|
-
|
|
23859
|
-
|
|
23860
|
-
|
|
23861
|
-
const result = this.offsets.reduce((prev, current, idx) => {
|
|
23862
|
-
if (prev !== undefined) {
|
|
23863
|
-
return prev;
|
|
23864
|
-
}
|
|
23865
|
-
else if (current === position) {
|
|
23866
|
-
return idx;
|
|
23860
|
+
for (let i = 0; i < this.offsets.length; i++) {
|
|
23861
|
+
if (position === this.offsets[i]) {
|
|
23862
|
+
return i;
|
|
23867
23863
|
}
|
|
23868
|
-
|
|
23869
|
-
return
|
|
23864
|
+
if (position < this.offsets[i]) {
|
|
23865
|
+
return i - 1;
|
|
23870
23866
|
}
|
|
23871
|
-
return undefined;
|
|
23872
|
-
}, undefined);
|
|
23873
|
-
return result === undefined ? this.total - 1 : result;
|
|
23874
|
-
}
|
|
23875
|
-
offset(rowIndex, adjustIndex = false) {
|
|
23876
|
-
if (adjustIndex) {
|
|
23877
|
-
let targetOffset = 0;
|
|
23878
|
-
let targetIndex = 0;
|
|
23879
|
-
for (let i = 0; i < rowIndex; i++) {
|
|
23880
|
-
targetOffset += this.rowHeight;
|
|
23881
|
-
targetIndex++;
|
|
23882
|
-
if (targetIndex === rowIndex) {
|
|
23883
|
-
return targetOffset;
|
|
23884
|
-
}
|
|
23885
|
-
if (this.isExpanded(i)) {
|
|
23886
|
-
targetOffset += this.detailRowHeight;
|
|
23887
|
-
targetIndex++;
|
|
23888
|
-
if (targetIndex === rowIndex) {
|
|
23889
|
-
return targetOffset;
|
|
23890
|
-
}
|
|
23891
|
-
}
|
|
23892
|
-
}
|
|
23893
|
-
return targetOffset;
|
|
23894
23867
|
}
|
|
23868
|
+
return this.total - 1;
|
|
23869
|
+
}
|
|
23870
|
+
offset(rowIndex) {
|
|
23895
23871
|
return this.offsets[rowIndex];
|
|
23896
23872
|
}
|
|
23897
23873
|
totalHeight() {
|
|
23898
|
-
|
|
23874
|
+
if (!this.offsets.length) {
|
|
23875
|
+
return 0;
|
|
23876
|
+
}
|
|
23877
|
+
const lastOffset = this.offsets[this.offsets.length - 1];
|
|
23878
|
+
const lastHeight = this.heights[this.heights.length - 1];
|
|
23879
|
+
return lastOffset + lastHeight;
|
|
23899
23880
|
}
|
|
23900
|
-
|
|
23901
|
-
|
|
23902
|
-
|
|
23903
|
-
this.offsets =
|
|
23881
|
+
update(startIndex, rowHeights) {
|
|
23882
|
+
let agg = this.offsets[startIndex];
|
|
23883
|
+
for (let i = startIndex; i < this.heights.length; i++) {
|
|
23884
|
+
this.offsets[i] = agg;
|
|
23885
|
+
const currHeight = rowHeights[i - startIndex] || this.heights[i];
|
|
23886
|
+
agg += currHeight;
|
|
23887
|
+
this.heights[i] = currHeight;
|
|
23904
23888
|
}
|
|
23905
23889
|
}
|
|
23906
23890
|
}
|
|
@@ -23910,8 +23894,10 @@ class RowHeightService {
|
|
|
23910
23894
|
*/
|
|
23911
23895
|
class ScrollAction {
|
|
23912
23896
|
offset;
|
|
23913
|
-
|
|
23897
|
+
changeVirtualData;
|
|
23898
|
+
constructor(offset, changeVirtualData) {
|
|
23914
23899
|
this.offset = offset;
|
|
23900
|
+
this.changeVirtualData = changeVirtualData;
|
|
23915
23901
|
}
|
|
23916
23902
|
}
|
|
23917
23903
|
/**
|
|
@@ -23936,16 +23922,29 @@ const SCROLL_BOTTOM_THRESHOLD = 2;
|
|
|
23936
23922
|
*/
|
|
23937
23923
|
class ScrollerService {
|
|
23938
23924
|
scrollObservable;
|
|
23939
|
-
|
|
23940
|
-
|
|
23941
|
-
lastScrollTop;
|
|
23942
|
-
take;
|
|
23943
|
-
total;
|
|
23925
|
+
ctx;
|
|
23926
|
+
total = 0;
|
|
23944
23927
|
rowHeightService;
|
|
23928
|
+
table = null;
|
|
23929
|
+
tableBody = null;
|
|
23930
|
+
container = null;
|
|
23931
|
+
scrollHeightContainer = null;
|
|
23932
|
+
scrollableVirtual = false;
|
|
23933
|
+
tableTransformOffset = 0;
|
|
23934
|
+
virtualSkip = 0;
|
|
23935
|
+
virtualPageSize = 0;
|
|
23936
|
+
firstToLoad = 0;
|
|
23937
|
+
lastLoaded = 0;
|
|
23938
|
+
scrollSyncing = false;
|
|
23939
|
+
take;
|
|
23945
23940
|
scrollSubscription;
|
|
23946
23941
|
subscription;
|
|
23947
|
-
|
|
23942
|
+
lastScrollTop = 0;
|
|
23943
|
+
firstLoaded = 0;
|
|
23944
|
+
expandedRows = {};
|
|
23945
|
+
constructor(scrollObservable, ctx) {
|
|
23948
23946
|
this.scrollObservable = scrollObservable;
|
|
23947
|
+
this.ctx = ctx;
|
|
23949
23948
|
}
|
|
23950
23949
|
create(rowHeightService, skip, take, total) {
|
|
23951
23950
|
this.rowHeightService = rowHeightService;
|
|
@@ -23954,13 +23953,50 @@ class ScrollerService {
|
|
|
23954
23953
|
this.take = take;
|
|
23955
23954
|
this.total = total;
|
|
23956
23955
|
this.lastScrollTop = 0;
|
|
23957
|
-
const
|
|
23956
|
+
const offset = this.rowHeightService.offset(skip);
|
|
23957
|
+
const subject = new BehaviorSubject(new ScrollAction(offset, this.scrollableVirtual && (Boolean(this.ctx.grid?.pageable) || Boolean(this.ctx.grid?.group?.length))));
|
|
23958
23958
|
this.subscription = Observable.create(observer => {
|
|
23959
23959
|
this.unsubscribe();
|
|
23960
23960
|
this.scrollSubscription = this.scrollObservable.subscribe(x => this.onScroll(x, observer));
|
|
23961
23961
|
}).subscribe(x => subject.next(x));
|
|
23962
23962
|
return subject;
|
|
23963
23963
|
}
|
|
23964
|
+
reset(skipScroll = false) {
|
|
23965
|
+
if (!skipScroll) {
|
|
23966
|
+
this.firstToLoad = 0;
|
|
23967
|
+
this.firstLoaded = 0;
|
|
23968
|
+
this.lastLoaded = 0;
|
|
23969
|
+
this.virtualSkip = 0;
|
|
23970
|
+
}
|
|
23971
|
+
this.rowHeightService = undefined;
|
|
23972
|
+
if (skipScroll) {
|
|
23973
|
+
this.scrollSyncing = true;
|
|
23974
|
+
}
|
|
23975
|
+
if (!skipScroll && this.container && this.container.scrollTop !== 0) {
|
|
23976
|
+
this.scrollSyncing = true;
|
|
23977
|
+
this.container.scrollTop = 0;
|
|
23978
|
+
this.lastScrollTop = 0;
|
|
23979
|
+
this.translate(0, true);
|
|
23980
|
+
this.tableTransformOffset = 0;
|
|
23981
|
+
}
|
|
23982
|
+
}
|
|
23983
|
+
update(skipAdjust = false) {
|
|
23984
|
+
const itemHeights = this.getItemHeights();
|
|
23985
|
+
if (this.firstLoaded > this.firstToLoad) {
|
|
23986
|
+
// Scrolled up
|
|
23987
|
+
const count = Math.min(this.firstLoaded - this.firstToLoad, this.take);
|
|
23988
|
+
const newItemsHeight = this.getTotalHeight(count, itemHeights);
|
|
23989
|
+
const newItemsExpectedHeight = this.getExpectedTotalHeight(count);
|
|
23990
|
+
const diff = newItemsHeight - newItemsExpectedHeight;
|
|
23991
|
+
if (!skipAdjust && diff !== 0) {
|
|
23992
|
+
this.adjustScroll(diff);
|
|
23993
|
+
}
|
|
23994
|
+
}
|
|
23995
|
+
this.rowHeightService?.update(this.firstToLoad, itemHeights);
|
|
23996
|
+
this.scrollHeightContainer && this.setScrollHeightContainerHeight();
|
|
23997
|
+
this.firstLoaded = this.firstToLoad;
|
|
23998
|
+
this.lastLoaded = this.firstLoaded + itemHeights.length - 1;
|
|
23999
|
+
}
|
|
23964
24000
|
destroy() {
|
|
23965
24001
|
this.unsubscribe();
|
|
23966
24002
|
if (this.subscription) {
|
|
@@ -23968,42 +24004,49 @@ class ScrollerService {
|
|
|
23968
24004
|
}
|
|
23969
24005
|
}
|
|
23970
24006
|
onScroll({ scrollTop, offsetHeight, scrollHeight, clientHeight }, observer) {
|
|
24007
|
+
if (this.scrollSyncing) {
|
|
24008
|
+
this.scrollSyncing = false;
|
|
24009
|
+
return;
|
|
24010
|
+
}
|
|
23971
24011
|
if (!isDocumentAvailable() || (this.lastScrollTop === scrollTop)) {
|
|
23972
24012
|
return;
|
|
23973
24013
|
}
|
|
23974
24014
|
const up = this.lastScrollTop >= scrollTop;
|
|
24015
|
+
const down = !up;
|
|
23975
24016
|
this.lastScrollTop = scrollTop;
|
|
23976
24017
|
let firstItemIndex = this.rowHeightService.index(scrollTop);
|
|
23977
|
-
let firstItemOffset = this.rowHeightService.offset(firstItemIndex);
|
|
23978
24018
|
const lastItemIndex = this.rowHeightService.index(scrollTop + offsetHeight);
|
|
23979
|
-
|
|
23980
|
-
|
|
23981
|
-
|
|
23982
|
-
|
|
23983
|
-
|
|
23984
|
-
|
|
23985
|
-
|
|
23986
|
-
|
|
23987
|
-
observer.next(new
|
|
23988
|
-
let nextTake = this.firstLoaded + this.take;
|
|
23989
|
-
this.lastLoaded = Math.min(nextTake, this.total);
|
|
23990
|
-
nextTake = nextTake > this.total ? this.total - this.firstLoaded : this.take;
|
|
23991
|
-
observer.next(new PageAction(this.firstLoaded, this.take));
|
|
23992
|
-
}
|
|
23993
|
-
else {
|
|
23994
|
-
const atBottom = scrollHeight - clientHeight - scrollTop < SCROLL_BOTTOM_THRESHOLD;
|
|
23995
|
-
if (atBottom) {
|
|
23996
|
-
observer.next(new ScrollBottomAction());
|
|
23997
|
-
}
|
|
24019
|
+
const overflow = Math.max(firstItemIndex + (this.virtualPageSize || this.take) - this.total, 0);
|
|
24020
|
+
firstItemIndex = Math.max(firstItemIndex - overflow, 0);
|
|
24021
|
+
if (lastItemIndex < this.lastLoaded) {
|
|
24022
|
+
this.lastLoaded = lastItemIndex;
|
|
24023
|
+
}
|
|
24024
|
+
if (down) {
|
|
24025
|
+
const atBottom = scrollHeight - clientHeight - scrollTop < SCROLL_BOTTOM_THRESHOLD;
|
|
24026
|
+
if (atBottom) {
|
|
24027
|
+
observer.next(new ScrollBottomAction());
|
|
23998
24028
|
}
|
|
23999
24029
|
}
|
|
24000
|
-
if (
|
|
24001
|
-
|
|
24002
|
-
|
|
24003
|
-
|
|
24004
|
-
this.
|
|
24005
|
-
|
|
24030
|
+
if (!this.scrollableVirtual) {
|
|
24031
|
+
return;
|
|
24032
|
+
}
|
|
24033
|
+
if (down && lastItemIndex >= this.lastLoaded && this.lastLoaded < this.total - 1) {
|
|
24034
|
+
this.firstToLoad = firstItemIndex;
|
|
24035
|
+
this.loadPage(observer);
|
|
24036
|
+
}
|
|
24037
|
+
else if (up && firstItemIndex < this.firstLoaded) {
|
|
24038
|
+
const nonVisibleBuffer = Math.max(Math.floor((this.virtualPageSize || this.take) * 0.3) - overflow, 0);
|
|
24039
|
+
this.firstToLoad = Math.max(firstItemIndex - nonVisibleBuffer, 0);
|
|
24040
|
+
this.loadPage(observer);
|
|
24041
|
+
}
|
|
24042
|
+
}
|
|
24043
|
+
loadPage(observer) {
|
|
24044
|
+
if (!this.rowHeightService) {
|
|
24045
|
+
return;
|
|
24006
24046
|
}
|
|
24047
|
+
this.translate(this.rowHeightService.offset(this.firstToLoad));
|
|
24048
|
+
observer.next(new ScrollAction(this.rowHeightService.offset(this.firstToLoad)));
|
|
24049
|
+
this.virtualPageChange(this.firstToLoad, observer);
|
|
24007
24050
|
}
|
|
24008
24051
|
unsubscribe() {
|
|
24009
24052
|
if (this.scrollSubscription) {
|
|
@@ -24011,6 +24054,87 @@ class ScrollerService {
|
|
|
24011
24054
|
this.scrollSubscription = undefined;
|
|
24012
24055
|
}
|
|
24013
24056
|
}
|
|
24057
|
+
translate(dY, forceSet) {
|
|
24058
|
+
if (this.scrollableVirtual && this.table) {
|
|
24059
|
+
if (forceSet) {
|
|
24060
|
+
this.table.style.transform = 'translateY(' + dY + 'px)';
|
|
24061
|
+
}
|
|
24062
|
+
else {
|
|
24063
|
+
this.tableTransformOffset = dY;
|
|
24064
|
+
}
|
|
24065
|
+
}
|
|
24066
|
+
}
|
|
24067
|
+
adjustScroll(scrollOffset, initialAdjust = false) {
|
|
24068
|
+
if (Number.isNaN(scrollOffset)) {
|
|
24069
|
+
return;
|
|
24070
|
+
}
|
|
24071
|
+
this.scrollSyncing = true;
|
|
24072
|
+
if (this.container) {
|
|
24073
|
+
if (initialAdjust) {
|
|
24074
|
+
this.container.scrollTop = scrollOffset;
|
|
24075
|
+
this.translate(scrollOffset, true);
|
|
24076
|
+
this.tableTransformOffset = scrollOffset;
|
|
24077
|
+
this.firstToLoad = this.rowHeightService.index(scrollOffset);
|
|
24078
|
+
}
|
|
24079
|
+
else {
|
|
24080
|
+
this.container.scrollTop += scrollOffset;
|
|
24081
|
+
}
|
|
24082
|
+
}
|
|
24083
|
+
}
|
|
24084
|
+
isExpanded(rowIndex) {
|
|
24085
|
+
return this.expandedRows[rowIndex] || false;
|
|
24086
|
+
}
|
|
24087
|
+
resetVirtualSkip = () => {
|
|
24088
|
+
if (this.scrollableVirtual && this.virtualSkip) {
|
|
24089
|
+
this.virtualSkip = 0;
|
|
24090
|
+
}
|
|
24091
|
+
};
|
|
24092
|
+
setScrollHeightContainerHeight() {
|
|
24093
|
+
if (this.scrollableVirtual) {
|
|
24094
|
+
let containerHeight = this.rowHeightService?.totalHeight() || 0;
|
|
24095
|
+
containerHeight = isFirefox ? Math.min(firefoxMaxHeight, containerHeight) : containerHeight;
|
|
24096
|
+
this.scrollHeightContainer.style.height = containerHeight + 'px';
|
|
24097
|
+
}
|
|
24098
|
+
else {
|
|
24099
|
+
this.scrollHeightContainer.style.height = '0';
|
|
24100
|
+
}
|
|
24101
|
+
}
|
|
24102
|
+
getItemHeights() {
|
|
24103
|
+
const result = [];
|
|
24104
|
+
if (this.tableBody) {
|
|
24105
|
+
Array.from(this.tableBody.children).forEach((item, index) => {
|
|
24106
|
+
const itemHeight = item.getBoundingClientRect().height;
|
|
24107
|
+
if (item.classList.contains('k-detail-row')) {
|
|
24108
|
+
result[result.length - 1] += itemHeight;
|
|
24109
|
+
this.expandedRows[index] = true;
|
|
24110
|
+
}
|
|
24111
|
+
else {
|
|
24112
|
+
result.push(itemHeight);
|
|
24113
|
+
}
|
|
24114
|
+
});
|
|
24115
|
+
}
|
|
24116
|
+
return result;
|
|
24117
|
+
}
|
|
24118
|
+
getTotalHeight(count, itemHeights) {
|
|
24119
|
+
return itemHeights.slice(0, count).reduce((sum, current) => sum + current, 0);
|
|
24120
|
+
}
|
|
24121
|
+
getExpectedTotalHeight(count) {
|
|
24122
|
+
const service = this.rowHeightService;
|
|
24123
|
+
if (!service) {
|
|
24124
|
+
return 0;
|
|
24125
|
+
}
|
|
24126
|
+
const lastItemIndex = this.firstToLoad + (count - 1);
|
|
24127
|
+
return service.offset(lastItemIndex) + service.height(lastItemIndex) - service.offset(this.firstToLoad);
|
|
24128
|
+
}
|
|
24129
|
+
virtualPageChange = (skip, observer) => {
|
|
24130
|
+
if (this.ctx.grid.pageable || this.ctx.grid.group?.length) {
|
|
24131
|
+
this.virtualSkip = skip;
|
|
24132
|
+
observer.next(new ScrollAction(this.rowHeightService?.offset(skip) || 0, true));
|
|
24133
|
+
}
|
|
24134
|
+
else if (skip !== this.ctx.grid.skip) {
|
|
24135
|
+
observer.next(new PageAction(Math.max(0, skip), this.take));
|
|
24136
|
+
}
|
|
24137
|
+
};
|
|
24014
24138
|
}
|
|
24015
24139
|
|
|
24016
24140
|
/**
|
|
@@ -24304,8 +24428,8 @@ const SCROLLER_FACTORY_TOKEN = new InjectionToken('grid-scroll-service-factory')
|
|
|
24304
24428
|
/**
|
|
24305
24429
|
* @hidden
|
|
24306
24430
|
*/
|
|
24307
|
-
function DEFAULT_SCROLLER_FACTORY(observable) {
|
|
24308
|
-
return new ScrollerService(observable);
|
|
24431
|
+
function DEFAULT_SCROLLER_FACTORY(observable, ctx) {
|
|
24432
|
+
return new ScrollerService(observable, ctx);
|
|
24309
24433
|
}
|
|
24310
24434
|
const wheelDeltaY = (e) => {
|
|
24311
24435
|
const deltaY = e.wheelDeltaY;
|
|
@@ -24322,7 +24446,7 @@ const preventLockedScroll = (args, element) => {
|
|
|
24322
24446
|
const scrollTop = element.scrollTop;
|
|
24323
24447
|
const allowScroll = (scrollTop === 0 && 0 < delta) || (element.scrollHeight <= element.offsetHeight + scrollTop && delta < 0);
|
|
24324
24448
|
if (!allowScroll) {
|
|
24325
|
-
|
|
24449
|
+
args.preventDefault();
|
|
24326
24450
|
}
|
|
24327
24451
|
};
|
|
24328
24452
|
const translateY = (renderer, value) => el => renderer.setStyle(el, "transform", `translateY(${value}px)`);
|
|
@@ -24378,9 +24502,9 @@ class ListComponent {
|
|
|
24378
24502
|
contentScroll = new EventEmitter();
|
|
24379
24503
|
pageChange = new EventEmitter();
|
|
24380
24504
|
scrollBottom = new EventEmitter();
|
|
24381
|
-
totalHeight;
|
|
24382
24505
|
columnsStartIdx = 0;
|
|
24383
24506
|
allItems = [];
|
|
24507
|
+
itemsToRender = [];
|
|
24384
24508
|
get showFooter() {
|
|
24385
24509
|
return this.groupable && this.groupable.showFooter;
|
|
24386
24510
|
}
|
|
@@ -24406,6 +24530,7 @@ class ListComponent {
|
|
|
24406
24530
|
columnsEndIdx;
|
|
24407
24531
|
viewportColumnsWidth;
|
|
24408
24532
|
scrollLeft = 0;
|
|
24533
|
+
virtualPageSize;
|
|
24409
24534
|
observer;
|
|
24410
24535
|
get lockedLeafColumns() {
|
|
24411
24536
|
return this.columns.lockedLeafColumns;
|
|
@@ -24439,6 +24564,8 @@ class ListComponent {
|
|
|
24439
24564
|
columnUpdateFrame;
|
|
24440
24565
|
hasLockedContainer;
|
|
24441
24566
|
minRowHeight;
|
|
24567
|
+
handleSkipOnData = false;
|
|
24568
|
+
scrollToIndex = null;
|
|
24442
24569
|
constructor(scrollerFactory, detailsService, changeNotification, suspendService, groupsService, ngZone, renderer, scrollSyncService, resizeService, editService, supportService, navigationService, scrollRequestService, ctx, columnResizingService, changeDetector, pdfService, columnInfo, dataMappingService) {
|
|
24443
24570
|
this.changeNotification = changeNotification;
|
|
24444
24571
|
this.suspendService = suspendService;
|
|
@@ -24456,14 +24583,24 @@ class ListComponent {
|
|
|
24456
24583
|
this.pdfService = pdfService;
|
|
24457
24584
|
this.columnInfo = columnInfo;
|
|
24458
24585
|
this.dataMappingService = dataMappingService;
|
|
24459
|
-
this.scroller = scrollerFactory(this.dispatcher);
|
|
24460
|
-
this.subscriptions = detailsService.changes.subscribe(
|
|
24586
|
+
this.scroller = this.ctx.scroller = scrollerFactory(this.dispatcher, this.ctx);
|
|
24587
|
+
this.subscriptions = detailsService.changes.subscribe(() => this.detailExpand());
|
|
24461
24588
|
this.subscriptions.add(scrollRequestService.requests.subscribe(req => isPresent(req.adjustIndex) ? this.scrollTo(req.request, req.adjustIndex) : this.scrollToItem(req.request)));
|
|
24589
|
+
this.subscriptions.add(this.pdfService.restoreDOMVirtualization.subscribe(() => {
|
|
24590
|
+
this.ngZone.onStable.pipe(take(1)).subscribe(() => {
|
|
24591
|
+
this.init();
|
|
24592
|
+
this.setScrollerOptions();
|
|
24593
|
+
this.scroller.update();
|
|
24594
|
+
});
|
|
24595
|
+
}));
|
|
24462
24596
|
}
|
|
24463
24597
|
ngOnInit() {
|
|
24464
24598
|
this.minRowHeight = this.isVirtual ? this.rowHeight || calcRowHeight(this.table.nativeElement) : this.rowHeight;
|
|
24465
24599
|
this.init();
|
|
24466
24600
|
this.subscriptions.add(this.ngZone.runOutsideAngular(this.handleRowSync.bind(this)));
|
|
24601
|
+
this.subscriptions.add(this.groupsService.changes.subscribe(() => {
|
|
24602
|
+
this.skipScroll = this.isVirtual;
|
|
24603
|
+
}));
|
|
24467
24604
|
this.subscriptions.add(this.ngZone.runOutsideAngular(this.handleRowNavigationLocked.bind(this)));
|
|
24468
24605
|
this.subscriptions.add(merge(this.columns.changes, this.resizeService.changes).subscribe(() => {
|
|
24469
24606
|
if (this.virtualColumns) {
|
|
@@ -24482,48 +24619,110 @@ class ListComponent {
|
|
|
24482
24619
|
const changesInSkip = changes['skip'];
|
|
24483
24620
|
const hasInitialSkip = changesInSkip && changesInSkip.firstChange && changesInSkip.currentValue > 0;
|
|
24484
24621
|
if (hasInitialSkip) {
|
|
24485
|
-
this.
|
|
24622
|
+
this.handleSkipOnData = true;
|
|
24623
|
+
}
|
|
24624
|
+
if (isChanged$1('isVirtual', changes)) {
|
|
24625
|
+
this.ngZone.onStable.pipe(take(1)).subscribe(() => {
|
|
24626
|
+
this.scroller.reset();
|
|
24627
|
+
this.rowHeightService = this.scroller.rowHeightService = new RowHeightService(this.total, this.rowHeight || this.minRowHeight);
|
|
24628
|
+
this.setScrollerOptions();
|
|
24629
|
+
this.scroller.update();
|
|
24630
|
+
});
|
|
24486
24631
|
}
|
|
24487
24632
|
if (isChanged$1("skip", changes) && !this.rebind) {
|
|
24488
24633
|
this.skipScroll = true;
|
|
24489
|
-
this.container.nativeElement.scrollTop = this.rowHeightService.offset(this.skip);
|
|
24634
|
+
this.container.nativeElement.scrollTop = (this.isVirtual && this.ctx.grid?.pageable) ? 0 : this.rowHeightService.offset(this.skip);
|
|
24490
24635
|
}
|
|
24491
24636
|
if (anyChanged(['total', 'take'], changes)) {
|
|
24492
24637
|
this.init();
|
|
24493
24638
|
}
|
|
24494
24639
|
this.rebind = false;
|
|
24495
24640
|
}
|
|
24641
|
+
zoneSub;
|
|
24642
|
+
get totalIsAllItems() {
|
|
24643
|
+
return this.isVirtual && (Boolean(this.ctx.grid?.pageable || this.ctx.grid?.group?.length));
|
|
24644
|
+
}
|
|
24496
24645
|
ngDoCheck() {
|
|
24497
24646
|
if (this.virtualColumns && (!this.viewportColumns || this.viewportWidthChange())) {
|
|
24498
24647
|
this.updateViewportColumns();
|
|
24499
24648
|
}
|
|
24500
|
-
|
|
24501
|
-
|
|
24502
|
-
|
|
24649
|
+
if (!isPresent(this.virtualPageSize) && !this.ctx.grid?.pageable && isPresent(this.ctx.grid?.pageSize)) {
|
|
24650
|
+
this.virtualPageSize = this.ctx.grid.pageSize;
|
|
24651
|
+
}
|
|
24652
|
+
const shouldCalculatePageSize = isDocumentAvailable() && this.isVirtual && !isPresent(this.virtualPageSize) && (!isPresent(this.ctx.grid?.pageSize) || this.ctx.grid?.pageable);
|
|
24653
|
+
const previousTotal = this.allItems.length;
|
|
24654
|
+
this.allItems = this.dataMappingService.dataMapper(this.data, this.nonLockedColumnsToRender, this.lockedLeafColumns, this.detailTemplate, this.showFooter);
|
|
24655
|
+
if (!this.isVirtual || (this.isVirtual && !this.ctx.grid?.pageable && !this.ctx.grid?.group?.length)) {
|
|
24656
|
+
this.itemsToRender = this.allItems;
|
|
24657
|
+
}
|
|
24658
|
+
const totalChanged = previousTotal !== this.allItems.length;
|
|
24659
|
+
if (this.totalIsAllItems && totalChanged) {
|
|
24660
|
+
this.scroller.reset(this.skipScroll);
|
|
24661
|
+
this.scroller.total = this.allItems.length;
|
|
24662
|
+
}
|
|
24663
|
+
if (shouldCalculatePageSize || !isPresent(this.scroller.rowHeightService)) {
|
|
24664
|
+
const calculatedPageSize = this.virtualPageSize ?? this.calcVirtualPageSize();
|
|
24503
24665
|
if (calculatedPageSize > 0) {
|
|
24504
24666
|
this.ngZone.onStable.pipe(take(1)).subscribe(() => {
|
|
24505
|
-
this.ctx.grid
|
|
24506
|
-
|
|
24507
|
-
this.
|
|
24508
|
-
|
|
24509
|
-
|
|
24667
|
+
if (!isPresent(this.ctx.grid?.pageSize)) {
|
|
24668
|
+
this.ctx.grid.pageSize = calculatedPageSize;
|
|
24669
|
+
this.ngZone.run(() => {
|
|
24670
|
+
this.pageChange.emit({
|
|
24671
|
+
skip: this.skip || 0,
|
|
24672
|
+
take: calculatedPageSize
|
|
24673
|
+
});
|
|
24510
24674
|
});
|
|
24511
|
-
}
|
|
24675
|
+
}
|
|
24676
|
+
if (this.ctx.grid?.pageable || this.ctx.grid?.group?.length) {
|
|
24677
|
+
this.virtualPageSize = this.scroller.virtualPageSize = calculatedPageSize;
|
|
24678
|
+
this.ngZone.run(() => this.itemsToRender = this.allItems.slice(this.scroller.virtualSkip, this.scroller.virtualSkip + this.virtualPageSize));
|
|
24679
|
+
}
|
|
24512
24680
|
});
|
|
24513
24681
|
}
|
|
24514
24682
|
}
|
|
24515
|
-
|
|
24683
|
+
if (!this.zoneSub) {
|
|
24684
|
+
this.zoneSub = this.ngZone.onStable.subscribe(() => {
|
|
24685
|
+
if (!this.scroller.rowHeightService) {
|
|
24686
|
+
const total = this.isVirtual && (this.ctx.grid?.pageable || this.ctx.grid?.group?.length) ? this.allItems.length : this.total;
|
|
24687
|
+
this.scroller.rowHeightService = this.rowHeightService = new RowHeightService(total, this.rowHeight || this.minRowHeight);
|
|
24688
|
+
}
|
|
24689
|
+
if (this.allItems.length && this.handleSkipOnData && this.isVirtual && this.skip > 0 && this.total > 0) {
|
|
24690
|
+
this.ngZone.onStable.pipe(take(1)).subscribe(() => {
|
|
24691
|
+
this.scroller.adjustScroll(this.scroller.rowHeightService.offset(this.skip), true);
|
|
24692
|
+
this.handleSkipOnData = false;
|
|
24693
|
+
});
|
|
24694
|
+
}
|
|
24695
|
+
if (this.isVirtual && this.ctx.grid?.group?.length && this.scroller.total !== this.allItems.length) {
|
|
24696
|
+
this.scroller.total = this.allItems.length;
|
|
24697
|
+
this.rowHeightService = this.scroller.rowHeightService = new RowHeightService(this.scroller.total, this.rowHeight || this.minRowHeight);
|
|
24698
|
+
}
|
|
24699
|
+
this.isVirtual && this.scroller.update();
|
|
24700
|
+
// Item outside of the viewport is scrolled to programmatically.
|
|
24701
|
+
// RowHeightService offset for given index still may not match the current scrollTop
|
|
24702
|
+
// depending on the varying row heights, so we need to adjust the scroll position.
|
|
24703
|
+
if (isPresent(this.scrollToIndex)) {
|
|
24704
|
+
const offset = this.scroller.rowHeightService.offset(this.scrollToIndex);
|
|
24705
|
+
if (offset > this.container.nativeElement.scrollTop) {
|
|
24706
|
+
this.scroller.adjustScroll(offset - this.container.nativeElement.scrollTop);
|
|
24707
|
+
}
|
|
24708
|
+
this.scrollToIndex = null;
|
|
24709
|
+
}
|
|
24710
|
+
if (this.isVirtual) {
|
|
24711
|
+
this.ctx.grid?.updateNavigationMetadata();
|
|
24712
|
+
this.resetNavigationViewport();
|
|
24713
|
+
}
|
|
24714
|
+
this.zoneSub.unsubscribe();
|
|
24715
|
+
this.zoneSub = null;
|
|
24716
|
+
});
|
|
24717
|
+
}
|
|
24516
24718
|
}
|
|
24517
24719
|
ngAfterViewInit() {
|
|
24518
24720
|
if (!isDocumentAvailable()) {
|
|
24519
24721
|
return;
|
|
24520
24722
|
}
|
|
24521
|
-
if (this.skip && this.isVirtual) {
|
|
24522
|
-
this.container.nativeElement.scrollTop = this.rowHeightService.offset(this.skip);
|
|
24523
|
-
}
|
|
24524
|
-
this.resetNavigationViewport();
|
|
24525
24723
|
this.attachContainerScroll();
|
|
24526
24724
|
this.initResizeService();
|
|
24725
|
+
this.setScrollerOptions();
|
|
24527
24726
|
}
|
|
24528
24727
|
ngAfterViewChecked() {
|
|
24529
24728
|
const isLocked = this.isLocked;
|
|
@@ -24541,6 +24740,10 @@ class ListComponent {
|
|
|
24541
24740
|
if (this.subscriptions) {
|
|
24542
24741
|
this.subscriptions.unsubscribe();
|
|
24543
24742
|
}
|
|
24743
|
+
if (this.zoneSub) {
|
|
24744
|
+
this.zoneSub.unsubscribe();
|
|
24745
|
+
this.zoneSub = null;
|
|
24746
|
+
}
|
|
24544
24747
|
if (this.resizeService) {
|
|
24545
24748
|
this.resizeService.destroy();
|
|
24546
24749
|
}
|
|
@@ -24551,10 +24754,16 @@ class ListComponent {
|
|
|
24551
24754
|
if (this.suspendService.scroll) {
|
|
24552
24755
|
return;
|
|
24553
24756
|
}
|
|
24554
|
-
|
|
24555
|
-
this.
|
|
24757
|
+
const total = this.isVirtual && this.ctx.grid?.pageable ? this.ctx.grid.pageSize : this.total;
|
|
24758
|
+
this.rowHeightService = this.scroller.rowHeightService = new RowHeightService(total, this.rowHeight || this.minRowHeight);
|
|
24556
24759
|
if (!isUniversal()) {
|
|
24557
|
-
|
|
24760
|
+
if (this.skipScroll) {
|
|
24761
|
+
this.setScrollerOptions();
|
|
24762
|
+
this.scroller.update();
|
|
24763
|
+
}
|
|
24764
|
+
else {
|
|
24765
|
+
this.ngZone.runOutsideAngular(this.createScroller.bind(this));
|
|
24766
|
+
}
|
|
24558
24767
|
}
|
|
24559
24768
|
}
|
|
24560
24769
|
lockedScroll() {
|
|
@@ -24618,14 +24827,47 @@ class ListComponent {
|
|
|
24618
24827
|
get isStacked() {
|
|
24619
24828
|
return this.ctx.grid?.isStacked;
|
|
24620
24829
|
}
|
|
24621
|
-
|
|
24622
|
-
if (
|
|
24623
|
-
|
|
24830
|
+
resetNavigationViewport() {
|
|
24831
|
+
if (!isDocumentAvailable) {
|
|
24832
|
+
return;
|
|
24624
24833
|
}
|
|
24625
|
-
|
|
24626
|
-
this.
|
|
24834
|
+
if (this.skipScroll || this.scroller.scrollSyncing) {
|
|
24835
|
+
this.ngZone.runOutsideAngular(() => {
|
|
24836
|
+
setTimeout(() => {
|
|
24837
|
+
this.skipScroll = this.scroller.scrollSyncing = false;
|
|
24838
|
+
});
|
|
24839
|
+
});
|
|
24840
|
+
return;
|
|
24841
|
+
}
|
|
24842
|
+
if (!this.container || !this.navigationService.tableEnabled ||
|
|
24843
|
+
!this.navigationService.needsViewport() || this.allItems.length === 0) {
|
|
24844
|
+
return;
|
|
24845
|
+
}
|
|
24846
|
+
const { scrollTop, offsetHeight } = this.container.nativeElement;
|
|
24847
|
+
const scrollBottom = scrollTop + offsetHeight;
|
|
24848
|
+
const firstItemIndex = this.rowHeightService.index(scrollTop);
|
|
24849
|
+
const lastItemIndex = this.rowHeightService.index(scrollBottom);
|
|
24850
|
+
const lastItemOffset = this.rowHeightService.offset(lastItemIndex);
|
|
24851
|
+
let viewportStart = firstItemIndex;
|
|
24852
|
+
let viewportEnd = lastItemIndex;
|
|
24853
|
+
if (isPresent(this.detailTemplate)) {
|
|
24854
|
+
viewportStart *= 2;
|
|
24855
|
+
viewportEnd *= 2;
|
|
24856
|
+
const firstItemHeight = this.rowHeightService.offset(firstItemIndex);
|
|
24857
|
+
if (firstItemHeight + this.rowHeight < scrollTop) {
|
|
24858
|
+
viewportStart++;
|
|
24859
|
+
}
|
|
24860
|
+
const lastItemHeight = this.rowHeightService.height(lastItemIndex);
|
|
24861
|
+
const lastItemExpanded = this.scroller.isExpanded(lastItemIndex);
|
|
24862
|
+
const lastItemDetailOverflows = lastItemOffset + lastItemHeight > scrollBottom;
|
|
24863
|
+
if (lastItemExpanded && !lastItemDetailOverflows) {
|
|
24864
|
+
viewportEnd++;
|
|
24865
|
+
}
|
|
24627
24866
|
}
|
|
24628
|
-
this.
|
|
24867
|
+
const offset = this.isVirtual && this.ctx.grid?.pageable ? this.skip : 0;
|
|
24868
|
+
this.navigationService.setViewport(viewportStart + offset, viewportEnd + offset);
|
|
24869
|
+
}
|
|
24870
|
+
detailExpand() {
|
|
24629
24871
|
this.resetNavigationViewport();
|
|
24630
24872
|
}
|
|
24631
24873
|
attachContainerScroll() {
|
|
@@ -24669,12 +24911,16 @@ class ListComponent {
|
|
|
24669
24911
|
this.scrollerSubscription.add(observable.pipe(filter((x) => x instanceof ScrollBottomAction))
|
|
24670
24912
|
.subscribe(() => this.scrollBottom.emit()));
|
|
24671
24913
|
}
|
|
24672
|
-
scroll(
|
|
24914
|
+
scroll(scrollActionArgs) {
|
|
24915
|
+
this.skipScroll = false;
|
|
24673
24916
|
if (this.isVirtual) {
|
|
24674
24917
|
[
|
|
24675
24918
|
maybeNativeElement(this.table),
|
|
24676
24919
|
maybeNativeElement(this.lockedTable)
|
|
24677
|
-
].filter(isPresent).forEach(translateY(this.renderer, offset));
|
|
24920
|
+
].filter(isPresent).forEach(translateY(this.renderer, scrollActionArgs.offset));
|
|
24921
|
+
if (this.virtualPageSize && scrollActionArgs.changeVirtualData && (this.ctx.grid.pageable || this.ctx.grid.group?.length)) {
|
|
24922
|
+
this.ngZone.run(() => this.itemsToRender = this.allItems.slice(this.scroller.virtualSkip, this.scroller.virtualSkip + this.virtualPageSize));
|
|
24923
|
+
}
|
|
24678
24924
|
}
|
|
24679
24925
|
this.resetNavigationViewport();
|
|
24680
24926
|
}
|
|
@@ -24684,24 +24930,13 @@ class ListComponent {
|
|
|
24684
24930
|
this.lockedContainer.nativeElement.scrollTop = scrollTop;
|
|
24685
24931
|
}
|
|
24686
24932
|
}
|
|
24687
|
-
handleInitialScrollToSkip() {
|
|
24688
|
-
const shouldScroll = () => this.isVirtual && this.skip > 0 && this.total > 0;
|
|
24689
|
-
const sub = this.changeNotification.changes
|
|
24690
|
-
.pipe(filter(shouldScroll))
|
|
24691
|
-
.subscribe(() => {
|
|
24692
|
-
this.scrollTo({ row: this.skip });
|
|
24693
|
-
sub.unsubscribe();
|
|
24694
|
-
});
|
|
24695
|
-
}
|
|
24696
24933
|
handleRowSync() {
|
|
24697
24934
|
const isLocked = () => isPresent(this.lockedContainer);
|
|
24698
24935
|
const onStable = () => this.ngZone.onStable.asObservable().pipe(take(1));
|
|
24699
24936
|
return merge(this.changeNotification.changes, this.groupsService.changes
|
|
24700
24937
|
.pipe(filter(isLocked), switchMapTo(onStable())), this.editService.changed, this.resizeService.changes, this.columnResizingService.changes
|
|
24701
24938
|
.pipe(filter(change => change.type === 'end')), this.supportService.changes)
|
|
24702
|
-
.pipe(
|
|
24703
|
-
this.resetNavigationViewport();
|
|
24704
|
-
}), filter(isLocked))
|
|
24939
|
+
.pipe(filter(isLocked))
|
|
24705
24940
|
.subscribe(() => {
|
|
24706
24941
|
const scrollTop = this.container.nativeElement.scrollTop;
|
|
24707
24942
|
const scrollLeft = this.container.nativeElement.scrollLeft;
|
|
@@ -24730,9 +24965,9 @@ class ListComponent {
|
|
|
24730
24965
|
if (isPresent(this.detailTemplate) && adjustIndexForDetailTemplate) {
|
|
24731
24966
|
itemIndex = Math.floor(itemIndex / 2);
|
|
24732
24967
|
}
|
|
24733
|
-
const offset = this.rowHeightService.offset(itemIndex
|
|
24968
|
+
const offset = this.rowHeightService.offset(itemIndex);
|
|
24734
24969
|
this.container.nativeElement.scrollTop = offset;
|
|
24735
|
-
this.
|
|
24970
|
+
this.scrollToIndex = itemIndex;
|
|
24736
24971
|
}
|
|
24737
24972
|
scrollTo({ row, column }, adjustIndex = false) {
|
|
24738
24973
|
if (isNumber(row)) {
|
|
@@ -24785,39 +25020,8 @@ class ListComponent {
|
|
|
24785
25020
|
return dataAttribute && +dataAttribute === this.ctx.grid.skip + dataItemIndex;
|
|
24786
25021
|
});
|
|
24787
25022
|
row && row.scrollIntoView();
|
|
24788
|
-
this.
|
|
24789
|
-
}
|
|
24790
|
-
}
|
|
24791
|
-
resetNavigationViewport() {
|
|
24792
|
-
if (!isDocumentAvailable) {
|
|
24793
|
-
return;
|
|
24794
|
-
}
|
|
24795
|
-
if (!this.container || !this.navigationService.tableEnabled ||
|
|
24796
|
-
!this.navigationService.needsViewport() || this.data.length === 0) {
|
|
24797
|
-
return;
|
|
24798
|
-
}
|
|
24799
|
-
const { scrollTop, offsetHeight } = this.container.nativeElement;
|
|
24800
|
-
const scrollBottom = scrollTop + offsetHeight;
|
|
24801
|
-
const firstItemIndex = this.rowHeightService.index(scrollTop);
|
|
24802
|
-
const lastItemIndex = this.rowHeightService.index(scrollBottom);
|
|
24803
|
-
const lastItemOffset = this.rowHeightService.offset(lastItemIndex);
|
|
24804
|
-
let viewportStart = firstItemIndex;
|
|
24805
|
-
let viewportEnd = lastItemIndex;
|
|
24806
|
-
if (isPresent(this.detailTemplate)) {
|
|
24807
|
-
viewportStart *= 2;
|
|
24808
|
-
viewportEnd *= 2;
|
|
24809
|
-
const firstItemHeight = this.rowHeightService.offset(firstItemIndex);
|
|
24810
|
-
if (firstItemHeight + this.rowHeight < scrollTop) {
|
|
24811
|
-
viewportStart++;
|
|
24812
|
-
}
|
|
24813
|
-
const lastItemHeight = this.rowHeightService.height(lastItemIndex);
|
|
24814
|
-
const lastItemExpanded = this.rowHeightService.isExpanded(lastItemIndex);
|
|
24815
|
-
const lastItemDetailOverflows = lastItemOffset + lastItemHeight > scrollBottom;
|
|
24816
|
-
if (lastItemExpanded && !lastItemDetailOverflows) {
|
|
24817
|
-
viewportEnd++;
|
|
24818
|
-
}
|
|
25023
|
+
this.resetNavigationViewport();
|
|
24819
25024
|
}
|
|
24820
|
-
this.navigationService.setViewport(viewportStart, viewportEnd);
|
|
24821
25025
|
}
|
|
24822
25026
|
cleanupScroller() {
|
|
24823
25027
|
if (this.scrollerSubscription) {
|
|
@@ -24921,6 +25125,14 @@ class ListComponent {
|
|
|
24921
25125
|
}
|
|
24922
25126
|
return 0;
|
|
24923
25127
|
};
|
|
25128
|
+
setScrollerOptions() {
|
|
25129
|
+
this.scroller.scrollableVirtual = this.isVirtual;
|
|
25130
|
+
this.scroller.table = this.table.nativeElement;
|
|
25131
|
+
this.scroller.tableBody = this.table.nativeElement.tBodies[0];
|
|
25132
|
+
this.scroller.container = this.container.nativeElement;
|
|
25133
|
+
this.scroller.scrollHeightContainer = this.container.nativeElement.querySelector('.k-height-container');
|
|
25134
|
+
this.scroller.total = this.isVirtual && !this.ctx.grid?.pageable ? this.total : this.allItems.length;
|
|
25135
|
+
}
|
|
24924
25136
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListComponent, deps: [{ token: SCROLLER_FACTORY_TOKEN }, { token: DetailsService }, { token: ChangeNotificationService }, { token: SuspendService }, { token: GroupsService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: ScrollSyncService }, { token: ResizeService }, { token: EditService }, { token: BrowserSupportService }, { token: NavigationService }, { token: ScrollRequestService }, { token: ContextService }, { token: ColumnResizingService }, { token: i0.ChangeDetectorRef }, { token: PDFService }, { token: ColumnInfoService }, { token: DataMappingService }], target: i0.ɵɵFactoryTarget.Component });
|
|
24925
25137
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ListComponent, isStandalone: true, selector: "kendo-grid-list", inputs: { data: "data", groups: "groups", total: "total", rowHeight: "rowHeight", detailRowHeight: "detailRowHeight", take: "take", skip: "skip", columns: "columns", detailTemplate: "detailTemplate", noRecordsTemplate: "noRecordsTemplate", selectable: "selectable", groupable: "groupable", filterable: "filterable", rowClass: "rowClass", rowSticky: "rowSticky", loading: "loading", trackBy: "trackBy", virtualColumns: "virtualColumns", isVirtual: "isVirtual", cellLoadingTemplate: "cellLoadingTemplate", loadingTemplate: "loadingTemplate", sort: "sort", size: "size" }, outputs: { contentScroll: "contentScroll", pageChange: "pageChange", scrollBottom: "scrollBottom" }, host: { properties: { "class.k-grid-container": "this.hostClass", "attr.role": "this.hostRole" } }, providers: [
|
|
24926
25138
|
{
|
|
@@ -24958,7 +25170,9 @@ class ListComponent {
|
|
|
24958
25170
|
role="presentation"
|
|
24959
25171
|
[groups]="groups"
|
|
24960
25172
|
[isLocked]="true"
|
|
24961
|
-
[rowsToRender]="
|
|
25173
|
+
[rowsToRender]="itemsToRender"
|
|
25174
|
+
[rowHeight]="rowHeight"
|
|
25175
|
+
[detailRowHeight]="detailRowHeight"
|
|
24962
25176
|
[noRecordsText]="''"
|
|
24963
25177
|
[columns]="$any(lockedLeafColumns)"
|
|
24964
25178
|
[totalColumnsCount]="leafColumns.length"
|
|
@@ -24976,8 +25190,8 @@ class ListComponent {
|
|
|
24976
25190
|
</table>
|
|
24977
25191
|
<kendo-resize-sensor></kendo-resize-sensor>
|
|
24978
25192
|
</div>
|
|
24979
|
-
<div
|
|
24980
|
-
<div
|
|
25193
|
+
<div class="k-height-container" *ngIf="isVirtual" role="presentation">
|
|
25194
|
+
<div></div>
|
|
24981
25195
|
</div>
|
|
24982
25196
|
</div>
|
|
24983
25197
|
<div
|
|
@@ -25005,7 +25219,7 @@ class ListComponent {
|
|
|
25005
25219
|
<tbody kendoGridTableBody
|
|
25006
25220
|
role="rowgroup"
|
|
25007
25221
|
[skipGroupDecoration]="isLocked"
|
|
25008
|
-
[rowsToRender]="
|
|
25222
|
+
[rowsToRender]="itemsToRender"
|
|
25009
25223
|
[groups]="groups"
|
|
25010
25224
|
[columns]="$any(nonLockedColumnsToRender)"
|
|
25011
25225
|
[allColumns]="$any(nonLockedLeafColumns)"
|
|
@@ -25023,20 +25237,22 @@ class ListComponent {
|
|
|
25023
25237
|
[virtualColumns]="virtualColumns"
|
|
25024
25238
|
[isLoading]="loading"
|
|
25025
25239
|
[isVirtual]="isVirtual"
|
|
25026
|
-
[cellLoadingTemplate]="cellLoadingTemplate"
|
|
25240
|
+
[cellLoadingTemplate]="cellLoadingTemplate"
|
|
25241
|
+
[rowHeight]="rowHeight"
|
|
25242
|
+
[detailRowHeight]="detailRowHeight">
|
|
25027
25243
|
</tbody>
|
|
25028
25244
|
</table>
|
|
25029
25245
|
<kendo-resize-sensor *ngIf="isLocked"></kendo-resize-sensor>
|
|
25030
25246
|
</div>
|
|
25031
25247
|
<kendo-resize-sensor *ngIf="isLocked || virtualColumns"></kendo-resize-sensor>
|
|
25032
25248
|
<div *ngIf="isVirtual" class="k-height-container" role="presentation">
|
|
25033
|
-
<div
|
|
25249
|
+
<div></div>
|
|
25034
25250
|
</div>
|
|
25035
25251
|
<div *ngIf="virtualColumns && !isStacked" class="k-width-container" role="presentation">
|
|
25036
25252
|
<div [style.width.px]="totalWidth"></div>
|
|
25037
25253
|
</div>
|
|
25038
25254
|
</div>
|
|
25039
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "directive", type: TableDirective, selector: "[kendoGridResizableTable]", inputs: ["locked", "virtualColumns"] }, { kind: "directive", type: GridTableDirective, selector: "[kendoGridTable]", inputs: ["size"] }, { kind: "component", type: ColGroupComponent, selector: "[kendoGridColGroup]", inputs: ["columns", "groups", "detailTemplate", "sort"] }, { kind: "component", type: TableBodyComponent, selector: "[kendoGridTableBody]", inputs: ["columns", "allColumns", "groups", "detailTemplate", "noRecordsTemplate", "rowsToRender", "skip", "selectable", "filterable", "noRecordsText", "isLocked", "isLoading", "isVirtual", "cellLoadingTemplate", "skipGroupDecoration", "lockedColumnsCount", "totalColumnsCount", "virtualColumns", "trackBy", "rowSticky", "totalColumns", "rowClass"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "directive", type: ResizableContainerDirective, selector: "[kendoGridResizableContainer]", inputs: ["lockedWidth", "kendoGridResizableContainer"] }] });
|
|
25255
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "directive", type: TableDirective, selector: "[kendoGridResizableTable]", inputs: ["locked", "virtualColumns"] }, { kind: "directive", type: GridTableDirective, selector: "[kendoGridTable]", inputs: ["size"] }, { kind: "component", type: ColGroupComponent, selector: "[kendoGridColGroup]", inputs: ["columns", "groups", "detailTemplate", "sort"] }, { kind: "component", type: TableBodyComponent, selector: "[kendoGridTableBody]", inputs: ["columns", "allColumns", "groups", "detailTemplate", "noRecordsTemplate", "rowsToRender", "skip", "selectable", "filterable", "noRecordsText", "isLocked", "isLoading", "isVirtual", "cellLoadingTemplate", "skipGroupDecoration", "lockedColumnsCount", "totalColumnsCount", "virtualColumns", "trackBy", "rowSticky", "totalColumns", "rowClass", "rowHeight", "detailRowHeight"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "directive", type: ResizableContainerDirective, selector: "[kendoGridResizableContainer]", inputs: ["lockedWidth", "kendoGridResizableContainer"] }] });
|
|
25040
25256
|
}
|
|
25041
25257
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListComponent, decorators: [{
|
|
25042
25258
|
type: Component,
|
|
@@ -25079,7 +25295,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
25079
25295
|
role="presentation"
|
|
25080
25296
|
[groups]="groups"
|
|
25081
25297
|
[isLocked]="true"
|
|
25082
|
-
[rowsToRender]="
|
|
25298
|
+
[rowsToRender]="itemsToRender"
|
|
25299
|
+
[rowHeight]="rowHeight"
|
|
25300
|
+
[detailRowHeight]="detailRowHeight"
|
|
25083
25301
|
[noRecordsText]="''"
|
|
25084
25302
|
[columns]="$any(lockedLeafColumns)"
|
|
25085
25303
|
[totalColumnsCount]="leafColumns.length"
|
|
@@ -25097,8 +25315,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
25097
25315
|
</table>
|
|
25098
25316
|
<kendo-resize-sensor></kendo-resize-sensor>
|
|
25099
25317
|
</div>
|
|
25100
|
-
<div
|
|
25101
|
-
<div
|
|
25318
|
+
<div class="k-height-container" *ngIf="isVirtual" role="presentation">
|
|
25319
|
+
<div></div>
|
|
25102
25320
|
</div>
|
|
25103
25321
|
</div>
|
|
25104
25322
|
<div
|
|
@@ -25126,7 +25344,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
25126
25344
|
<tbody kendoGridTableBody
|
|
25127
25345
|
role="rowgroup"
|
|
25128
25346
|
[skipGroupDecoration]="isLocked"
|
|
25129
|
-
[rowsToRender]="
|
|
25347
|
+
[rowsToRender]="itemsToRender"
|
|
25130
25348
|
[groups]="groups"
|
|
25131
25349
|
[columns]="$any(nonLockedColumnsToRender)"
|
|
25132
25350
|
[allColumns]="$any(nonLockedLeafColumns)"
|
|
@@ -25144,14 +25362,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
25144
25362
|
[virtualColumns]="virtualColumns"
|
|
25145
25363
|
[isLoading]="loading"
|
|
25146
25364
|
[isVirtual]="isVirtual"
|
|
25147
|
-
[cellLoadingTemplate]="cellLoadingTemplate"
|
|
25365
|
+
[cellLoadingTemplate]="cellLoadingTemplate"
|
|
25366
|
+
[rowHeight]="rowHeight"
|
|
25367
|
+
[detailRowHeight]="detailRowHeight">
|
|
25148
25368
|
</tbody>
|
|
25149
25369
|
</table>
|
|
25150
25370
|
<kendo-resize-sensor *ngIf="isLocked"></kendo-resize-sensor>
|
|
25151
25371
|
</div>
|
|
25152
25372
|
<kendo-resize-sensor *ngIf="isLocked || virtualColumns"></kendo-resize-sensor>
|
|
25153
25373
|
<div *ngIf="isVirtual" class="k-height-container" role="presentation">
|
|
25154
|
-
<div
|
|
25374
|
+
<div></div>
|
|
25155
25375
|
</div>
|
|
25156
25376
|
<div *ngIf="virtualColumns && !isStacked" class="k-width-container" role="presentation">
|
|
25157
25377
|
<div [style.width.px]="totalWidth"></div>
|
|
@@ -29365,9 +29585,7 @@ class GridComponent {
|
|
|
29365
29585
|
*/
|
|
29366
29586
|
height;
|
|
29367
29587
|
/**
|
|
29368
|
-
*
|
|
29369
|
-
* Required for [virtual scrolling]({% slug scrollmmodes_grid %}).
|
|
29370
|
-
* Set `rowHeight` to match the actual DOM row height. The property does not change the height of the rows in the UI.
|
|
29588
|
+
* Sets the `style.height` attribute of each Grid data or group header/footer row (`tr`) element in the DOM in pixels.
|
|
29371
29589
|
*/
|
|
29372
29590
|
rowHeight;
|
|
29373
29591
|
/**
|
|
@@ -29377,9 +29595,7 @@ class GridComponent {
|
|
|
29377
29595
|
*/
|
|
29378
29596
|
adaptiveMode = 'none';
|
|
29379
29597
|
/**
|
|
29380
|
-
*
|
|
29381
|
-
* Required for [virtual scrolling]({% slug scrollmmodes_grid %}).
|
|
29382
|
-
* Set `detailRowHeight` to match the actual DOM detail row height. The property does not change the height of the rows in the UI.
|
|
29598
|
+
* Sets the `style.height` attribute of each Grid detail row (`tr.k-detail-row`) element in the DOM in pixels.
|
|
29383
29599
|
*/
|
|
29384
29600
|
detailRowHeight;
|
|
29385
29601
|
/**
|
|
@@ -29490,14 +29706,14 @@ class GridComponent {
|
|
|
29490
29706
|
*/
|
|
29491
29707
|
get showTopPager() {
|
|
29492
29708
|
const position = this.pageable.position;
|
|
29493
|
-
return
|
|
29709
|
+
return this.pageable !== false && ['top', 'both'].indexOf(position) > -1;
|
|
29494
29710
|
}
|
|
29495
29711
|
/**
|
|
29496
29712
|
* @hidden
|
|
29497
29713
|
*/
|
|
29498
29714
|
get showBottomPager() {
|
|
29499
29715
|
const position = this.pageable.position;
|
|
29500
|
-
return
|
|
29716
|
+
return this.pageable !== false && position !== 'top';
|
|
29501
29717
|
}
|
|
29502
29718
|
/**
|
|
29503
29719
|
* @hidden
|
|
@@ -29962,7 +30178,7 @@ class GridComponent {
|
|
|
29962
30178
|
cellLoadingTemplateChildren;
|
|
29963
30179
|
get cellLoadingTemplate() {
|
|
29964
30180
|
if (this._cellLoadingTemplate) {
|
|
29965
|
-
return this.
|
|
30181
|
+
return this._cellLoadingTemplate;
|
|
29966
30182
|
}
|
|
29967
30183
|
return this.cellLoadingTemplateChildren ? this.cellLoadingTemplateChildren.first : undefined;
|
|
29968
30184
|
}
|
|
@@ -30492,6 +30708,7 @@ class GridComponent {
|
|
|
30492
30708
|
}
|
|
30493
30709
|
ngOnInit() {
|
|
30494
30710
|
if (this.navigable.length) {
|
|
30711
|
+
this.ctx.navigable = this.navigable.includes('table');
|
|
30495
30712
|
this.navigationService.init(this.navigationMetadata(), this.navigable);
|
|
30496
30713
|
}
|
|
30497
30714
|
this.isStacked && this.generateStackedColumns();
|
|
@@ -30578,6 +30795,15 @@ class GridComponent {
|
|
|
30578
30795
|
}
|
|
30579
30796
|
this.columnRangeChangeSubscription.unsubscribe();
|
|
30580
30797
|
}
|
|
30798
|
+
/**
|
|
30799
|
+
* @hidden
|
|
30800
|
+
*/
|
|
30801
|
+
onResize() {
|
|
30802
|
+
if (this.isVirtual) {
|
|
30803
|
+
this.ctx.scroller.update();
|
|
30804
|
+
this.listComponent.resetNavigationViewport();
|
|
30805
|
+
}
|
|
30806
|
+
}
|
|
30581
30807
|
/**
|
|
30582
30808
|
* @hidden
|
|
30583
30809
|
*/
|
|
@@ -31120,12 +31346,6 @@ class GridComponent {
|
|
|
31120
31346
|
if (this.columnList.filter(x => x.locked && x.parent && !x.parent.isLocked).length) {
|
|
31121
31347
|
throw new Error(ColumnConfigurationErrorMessages.lockedParent);
|
|
31122
31348
|
}
|
|
31123
|
-
if (this.detailRowHeight && !this.isVirtual) {
|
|
31124
|
-
console.warn(GridConfigurationErrorMessages.rowHeightVirtual);
|
|
31125
|
-
}
|
|
31126
|
-
if (!this.detailRowHeight && this.isVirtual && this.detailTemplate) {
|
|
31127
|
-
console.warn(GridConfigurationErrorMessages.rowHeightVirtual);
|
|
31128
|
-
}
|
|
31129
31349
|
if (!this.isStacked && stickyColumns && expandColumns(this.columnList.toArray()).filter(column => !column.width && !isColumnGroupComponent(column)).length) {
|
|
31130
31350
|
console.warn(ColumnConfigurationErrorMessages.requiredWidth('Sticky'));
|
|
31131
31351
|
}
|
|
@@ -31193,11 +31413,21 @@ class GridComponent {
|
|
|
31193
31413
|
}
|
|
31194
31414
|
attachStateChangesEmitter() {
|
|
31195
31415
|
this.stateChangeSubscription =
|
|
31196
|
-
merge(this.pageChange.pipe(
|
|
31416
|
+
merge(this.pageChange.pipe(tap(() => {
|
|
31417
|
+
if (this.pageable) {
|
|
31418
|
+
this.ctx.scroller?.reset();
|
|
31419
|
+
}
|
|
31420
|
+
}), map(x => ({
|
|
31197
31421
|
filter: this.filter, group: this.group, skip: x.skip, sort: this.sort, take: x.take
|
|
31198
|
-
}))), this.sortChange.pipe(
|
|
31199
|
-
|
|
31200
|
-
}))), this.
|
|
31422
|
+
}))), this.sortChange.pipe(tap(() => {
|
|
31423
|
+
this.ctx.scroller?.reset();
|
|
31424
|
+
}), map(sort => ({ filter: this.filter, group: this.group, skip: this.isVirtual && !this.pageable ? 0 : this.skip, sort: sort, take: this.pageSize }))), this.groupChange.pipe(tap(() => {
|
|
31425
|
+
this.ctx.scroller?.reset();
|
|
31426
|
+
}), map(group => ({
|
|
31427
|
+
filter: this.filter, group: group, skip: this.pageable ? this.skip : 0, sort: this.sort, take: (this.pageable || !group?.length) ? this.pageSize : undefined
|
|
31428
|
+
}))), this.filterChange.pipe(tap(() => {
|
|
31429
|
+
this.ctx.scroller?.reset();
|
|
31430
|
+
}), map(filter => ({
|
|
31201
31431
|
filter: filter, group: this.group, skip: 0, sort: this.sort, take: this.pageSize
|
|
31202
31432
|
}))))
|
|
31203
31433
|
.subscribe(x => {
|
|
@@ -31206,11 +31436,18 @@ class GridComponent {
|
|
|
31206
31436
|
if (this.selectable && this.selectableSettings?.enabled && this.isVirtual) {
|
|
31207
31437
|
this.blockArrowSelection = true;
|
|
31208
31438
|
}
|
|
31439
|
+
this.isVirtual && this.ctx.scroller?.resetVirtualSkip();
|
|
31209
31440
|
this.dataStateChange.emit(x);
|
|
31210
31441
|
hasObservers(this.gridStateChange) && this.gridStateChange.emit({ ...this.currentState, ...x });
|
|
31211
31442
|
});
|
|
31212
31443
|
this.stateChangeSubscription.add(merge(this.columnReorder, this.columnResize, this.columnVisibilityChange, this.columnLockedChange, this.columnStickyChange).pipe(flatMap(() => this.ngZone.onStable.pipe(take(1))))
|
|
31213
|
-
.subscribe(() => this.ngZone.run(() =>
|
|
31444
|
+
.subscribe(() => this.ngZone.run(() => {
|
|
31445
|
+
hasObservers(this.gridStateChange) && this.gridStateChange.emit(this.currentState);
|
|
31446
|
+
if (this.isVirtual) {
|
|
31447
|
+
this.ctx.scroller?.update();
|
|
31448
|
+
this.listComponent?.resetNavigationViewport();
|
|
31449
|
+
}
|
|
31450
|
+
})));
|
|
31214
31451
|
}
|
|
31215
31452
|
attachEditHandlers() {
|
|
31216
31453
|
if (!this.editService) {
|
|
@@ -31395,12 +31632,25 @@ class GridComponent {
|
|
|
31395
31632
|
_rowClass = () => null;
|
|
31396
31633
|
navigationMetadata() {
|
|
31397
31634
|
const isVirtual = this.isVirtual;
|
|
31398
|
-
const
|
|
31399
|
-
const
|
|
31635
|
+
const dataVirtualization = isVirtual && !this.pageable && !this.group?.length;
|
|
31636
|
+
const groupedVirtual = isVirtual && this.group?.length > 0;
|
|
31637
|
+
let dataRows;
|
|
31638
|
+
if (this.pageable) {
|
|
31639
|
+
dataRows = this.skip + Math.min(this.pageSize, this.view.length); // last page might have less rows than the rest
|
|
31640
|
+
}
|
|
31641
|
+
else {
|
|
31642
|
+
dataRows = this.view.total;
|
|
31643
|
+
}
|
|
31644
|
+
if (groupedVirtual) {
|
|
31645
|
+
dataRows = this.ctx.scroller?.total ?? 0;
|
|
31646
|
+
if (!dataVirtualization) {
|
|
31647
|
+
dataRows += this.skip;
|
|
31648
|
+
}
|
|
31649
|
+
}
|
|
31400
31650
|
const addRowOffset = this.editService.hasNewItem ? 1 : 0;
|
|
31401
31651
|
const filterRowOffset = hasFilterRow(this.filterable) ? 1 : 0;
|
|
31402
31652
|
const headerRows = this.isStacked ? 0 : this.totalColumnLevels + 1 + filterRowOffset + addRowOffset;
|
|
31403
|
-
return new NavigationMetadata(dataRows, headerRows, isVirtual, this.hasPager, isPresent(this.detailTemplate), this.wrapper, this.virtualColumns, this.columnsContainer, this.isStacked);
|
|
31653
|
+
return new NavigationMetadata(dataRows, headerRows, isVirtual, this.hasPager, isPresent(this.detailTemplate), this.wrapper, this.virtualColumns, this.columnsContainer, this.showFooter ? 1 : 0, this.isStacked);
|
|
31404
31654
|
}
|
|
31405
31655
|
applyAutoSize() {
|
|
31406
31656
|
const cols = this.columns.filter((c) => this.autoSize ? c.autoSize !== false : c.autoSize);
|
|
@@ -31482,10 +31732,8 @@ class GridComponent {
|
|
|
31482
31732
|
}
|
|
31483
31733
|
if (this.groupsService.isExpanded({ groupIndex: index }) !== expand) {
|
|
31484
31734
|
this.groupsService.toggleRow({ index }, false);
|
|
31485
|
-
if (this.ctx.dataBindingDirective && isPresent(this.ctx.dataBindingDirective.groupExpand)) {
|
|
31486
|
-
this.ctx.dataBindingDirective[`group${expand ? 'Expand' : 'Collapse'}`]({ groupIndex: index });
|
|
31487
|
-
}
|
|
31488
31735
|
}
|
|
31736
|
+
this.changeDetectorRef.markForCheck();
|
|
31489
31737
|
}
|
|
31490
31738
|
shouldResetSelection(selectableChanges) {
|
|
31491
31739
|
const previousValue = selectableChanges.previousValue;
|
|
@@ -32233,6 +32481,8 @@ class GridComponent {
|
|
|
32233
32481
|
</thead>
|
|
32234
32482
|
<tbody kendoGridTableBody
|
|
32235
32483
|
[isLoading]="loading"
|
|
32484
|
+
[rowHeight]="rowHeight"
|
|
32485
|
+
[detailRowHeight]="detailRowHeight"
|
|
32236
32486
|
[groups]="group"
|
|
32237
32487
|
[rowsToRender]="rowsToRender"
|
|
32238
32488
|
[skip]="skip"
|
|
@@ -32347,11 +32597,11 @@ class GridComponent {
|
|
|
32347
32597
|
<div #dialogContainer></div>
|
|
32348
32598
|
|
|
32349
32599
|
<kendo-grid-adaptive-renderer *ngIf="isAdaptiveModeEnabled"></kendo-grid-adaptive-renderer>
|
|
32350
|
-
|
|
32600
|
+
<kendo-resize-sensor *ngIf="isVirtual" (resize)="onResize()"></kendo-resize-sensor>
|
|
32351
32601
|
<div *ngIf="aiAssistantToolbarTool" #windowContainer></div>
|
|
32352
32602
|
|
|
32353
32603
|
<div kendoWatermarkOverlay *ngIf="showLicenseWatermark" [licenseMessage]="licenseMessage"></div>
|
|
32354
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoGridLocalizedMessages]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ToolbarComponent, selector: "kendo-grid-toolbar", inputs: ["position", "size", "navigable"] }, { kind: "component", type: GroupPanelComponent, selector: "kendo-grid-group-panel", inputs: ["text", "navigable", "groups"], outputs: ["change"] }, { kind: "directive", type: TableDirective, selector: "[kendoGridResizableTable]", inputs: ["locked", "virtualColumns"] }, { kind: "directive", type: GridTableDirective, selector: "[kendoGridTable]", inputs: ["size"] }, { kind: "component", type: ColGroupComponent, selector: "[kendoGridColGroup]", inputs: ["columns", "groups", "detailTemplate", "sort"] }, { kind: "component", type: HeaderComponent, selector: "[kendoGridHeader]", inputs: ["totalColumnLevels", "columns", "groups", "detailTemplate", "scrollable", "filterable", "sort", "filter", "sortable", "groupable", "lockedColumnsCount", "resizable", "reorderable", "columnMenu", "columnMenuTemplate", "totalColumnsCount", "totalColumns", "tabIndex", "size"] }, { kind: "directive", type: ResizableContainerDirective, selector: "[kendoGridResizableContainer]", inputs: ["lockedWidth", "kendoGridResizableContainer"] }, { kind: "component", type: ListComponent, selector: "kendo-grid-list", inputs: ["data", "groups", "total", "rowHeight", "detailRowHeight", "take", "skip", "columns", "detailTemplate", "noRecordsTemplate", "selectable", "groupable", "filterable", "rowClass", "rowSticky", "loading", "trackBy", "virtualColumns", "isVirtual", "cellLoadingTemplate", "loadingTemplate", "sort", "size"], outputs: ["contentScroll", "pageChange", "scrollBottom"] }, { kind: "directive", type: DragTargetContainerDirective, selector: "[kendoDragTargetContainer]", inputs: ["hint", "dragTargetFilter", "dragHandle", "dragDelay", "threshold", "dragTargetId", "dragData", "dragDisabled", "mode", "cursorStyle", "hintContext"], outputs: ["onDragReady", "onPress", "onDragStart", "onDrag", "onRelease", "onDragEnd"], exportAs: ["kendoDragTargetContainer"] }, { kind: "directive", type: DropTargetContainerDirective, selector: "[kendoDropTargetContainer]", inputs: ["dropTargetFilter", "dropDisabled"], outputs: ["onDragEnter", "onDragOver", "onDragLeave", "onDrop"], exportAs: ["kendoDropTargetContainer"] }, { kind: "directive", type: DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { kind: "directive", type: GridMarqueeDirective, selector: "[kendoGridSelectionMarquee]" }, { kind: "component", type: FooterComponent, selector: "[kendoGridFooter]", inputs: ["columns", "groups", "detailTemplate", "scrollable", "lockedColumnsCount", "logicalRowIndex", "totalColumns", "totalColumnsCount"] }, { kind: "component", type: TableBodyComponent, selector: "[kendoGridTableBody]", inputs: ["columns", "allColumns", "groups", "detailTemplate", "noRecordsTemplate", "rowsToRender", "skip", "selectable", "filterable", "noRecordsText", "isLocked", "isLoading", "isVirtual", "cellLoadingTemplate", "skipGroupDecoration", "lockedColumnsCount", "totalColumnsCount", "virtualColumns", "trackBy", "rowSticky", "totalColumns", "rowClass"] }, { kind: "component", type: LoadingComponent, selector: "[kendoGridLoading]", inputs: ["loadingTemplate"] }, { kind: "component", type: StatusBarComponent, selector: "kendo-grid-status-bar", inputs: ["statusBarTemplate"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]", inputs: ["licenseMessage"] }, { kind: "component", type: i53.CustomMessagesComponent, selector: "kendo-datapager-messages, kendo-pager-messages" }, { kind: "component", type: i53.PagerInfoComponent, selector: "kendo-datapager-info, kendo-pager-info" }, { kind: "component", type: i53.PagerInputComponent, selector: "kendo-datapager-input, kendo-pager-input", inputs: ["showPageText", "size"] }, { kind: "component", type: i53.PagerNextButtonsComponent, selector: "kendo-datapager-next-buttons, kendo-pager-next-buttons", inputs: ["size"] }, { kind: "component", type: i53.PagerNumericButtonsComponent, selector: "kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons", inputs: ["buttonCount", "size"] }, { kind: "component", type: i53.PagerPageSizesComponent, selector: "kendo-datapager-page-sizes, kendo-pager-page-sizes", inputs: ["showItemsText", "pageSizes", "size", "adaptiveMode"] }, { kind: "component", type: i53.PagerPrevButtonsComponent, selector: "kendo-datapager-prev-buttons, kendo-pager-prev-buttons", inputs: ["size"] }, { kind: "directive", type: i53.PagerTemplateDirective, selector: "[kendoDataPagerTemplate], [kendoPagerTemplate]" }, { kind: "component", type: i53.PagerComponent, selector: "kendo-datapager, kendo-pager", inputs: ["externalTemplate", "total", "skip", "pageSize", "buttonCount", "info", "type", "pageSizeValues", "previousNext", "navigable", "size", "responsive", "adaptiveMode"], outputs: ["pageChange", "pageSizeChange", "pagerInputVisibilityChange", "pageTextVisibilityChange", "itemsTextVisibilityChange"], exportAs: ["kendoDataPager", "kendoPager"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AdaptiveRendererComponent, selector: "kendo-grid-adaptive-renderer" }], encapsulation: i0.ViewEncapsulation.None });
|
|
32604
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoGridLocalizedMessages]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ToolbarComponent, selector: "kendo-grid-toolbar", inputs: ["position", "size", "navigable"] }, { kind: "component", type: GroupPanelComponent, selector: "kendo-grid-group-panel", inputs: ["text", "navigable", "groups"], outputs: ["change"] }, { kind: "directive", type: TableDirective, selector: "[kendoGridResizableTable]", inputs: ["locked", "virtualColumns"] }, { kind: "directive", type: GridTableDirective, selector: "[kendoGridTable]", inputs: ["size"] }, { kind: "component", type: ColGroupComponent, selector: "[kendoGridColGroup]", inputs: ["columns", "groups", "detailTemplate", "sort"] }, { kind: "component", type: HeaderComponent, selector: "[kendoGridHeader]", inputs: ["totalColumnLevels", "columns", "groups", "detailTemplate", "scrollable", "filterable", "sort", "filter", "sortable", "groupable", "lockedColumnsCount", "resizable", "reorderable", "columnMenu", "columnMenuTemplate", "totalColumnsCount", "totalColumns", "tabIndex", "size"] }, { kind: "directive", type: ResizableContainerDirective, selector: "[kendoGridResizableContainer]", inputs: ["lockedWidth", "kendoGridResizableContainer"] }, { kind: "component", type: ListComponent, selector: "kendo-grid-list", inputs: ["data", "groups", "total", "rowHeight", "detailRowHeight", "take", "skip", "columns", "detailTemplate", "noRecordsTemplate", "selectable", "groupable", "filterable", "rowClass", "rowSticky", "loading", "trackBy", "virtualColumns", "isVirtual", "cellLoadingTemplate", "loadingTemplate", "sort", "size"], outputs: ["contentScroll", "pageChange", "scrollBottom"] }, { kind: "directive", type: DragTargetContainerDirective, selector: "[kendoDragTargetContainer]", inputs: ["hint", "dragTargetFilter", "dragHandle", "dragDelay", "threshold", "dragTargetId", "dragData", "dragDisabled", "mode", "cursorStyle", "hintContext"], outputs: ["onDragReady", "onPress", "onDragStart", "onDrag", "onRelease", "onDragEnd"], exportAs: ["kendoDragTargetContainer"] }, { kind: "directive", type: DropTargetContainerDirective, selector: "[kendoDropTargetContainer]", inputs: ["dropTargetFilter", "dropDisabled"], outputs: ["onDragEnter", "onDragOver", "onDragLeave", "onDrop"], exportAs: ["kendoDropTargetContainer"] }, { kind: "directive", type: DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { kind: "directive", type: GridMarqueeDirective, selector: "[kendoGridSelectionMarquee]" }, { kind: "component", type: FooterComponent, selector: "[kendoGridFooter]", inputs: ["columns", "groups", "detailTemplate", "scrollable", "lockedColumnsCount", "logicalRowIndex", "totalColumns", "totalColumnsCount"] }, { kind: "component", type: TableBodyComponent, selector: "[kendoGridTableBody]", inputs: ["columns", "allColumns", "groups", "detailTemplate", "noRecordsTemplate", "rowsToRender", "skip", "selectable", "filterable", "noRecordsText", "isLocked", "isLoading", "isVirtual", "cellLoadingTemplate", "skipGroupDecoration", "lockedColumnsCount", "totalColumnsCount", "virtualColumns", "trackBy", "rowSticky", "totalColumns", "rowClass", "rowHeight", "detailRowHeight"] }, { kind: "component", type: LoadingComponent, selector: "[kendoGridLoading]", inputs: ["loadingTemplate"] }, { kind: "component", type: StatusBarComponent, selector: "kendo-grid-status-bar", inputs: ["statusBarTemplate"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]", inputs: ["licenseMessage"] }, { kind: "component", type: i53.CustomMessagesComponent, selector: "kendo-datapager-messages, kendo-pager-messages" }, { kind: "component", type: i53.PagerInfoComponent, selector: "kendo-datapager-info, kendo-pager-info" }, { kind: "component", type: i53.PagerInputComponent, selector: "kendo-datapager-input, kendo-pager-input", inputs: ["showPageText", "size"] }, { kind: "component", type: i53.PagerNextButtonsComponent, selector: "kendo-datapager-next-buttons, kendo-pager-next-buttons", inputs: ["size"] }, { kind: "component", type: i53.PagerNumericButtonsComponent, selector: "kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons", inputs: ["buttonCount", "size"] }, { kind: "component", type: i53.PagerPageSizesComponent, selector: "kendo-datapager-page-sizes, kendo-pager-page-sizes", inputs: ["showItemsText", "pageSizes", "size", "adaptiveMode"] }, { kind: "component", type: i53.PagerPrevButtonsComponent, selector: "kendo-datapager-prev-buttons, kendo-pager-prev-buttons", inputs: ["size"] }, { kind: "directive", type: i53.PagerTemplateDirective, selector: "[kendoDataPagerTemplate], [kendoPagerTemplate]" }, { kind: "component", type: i53.PagerComponent, selector: "kendo-datapager, kendo-pager", inputs: ["externalTemplate", "total", "skip", "pageSize", "buttonCount", "info", "type", "pageSizeValues", "previousNext", "navigable", "size", "responsive", "adaptiveMode"], outputs: ["pageChange", "pageSizeChange", "pagerInputVisibilityChange", "pageTextVisibilityChange", "itemsTextVisibilityChange"], exportAs: ["kendoDataPager", "kendoPager"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AdaptiveRendererComponent, selector: "kendo-grid-adaptive-renderer" }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
32355
32605
|
}
|
|
32356
32606
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridComponent, decorators: [{
|
|
32357
32607
|
type: Component,
|
|
@@ -33088,6 +33338,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
33088
33338
|
</thead>
|
|
33089
33339
|
<tbody kendoGridTableBody
|
|
33090
33340
|
[isLoading]="loading"
|
|
33341
|
+
[rowHeight]="rowHeight"
|
|
33342
|
+
[detailRowHeight]="detailRowHeight"
|
|
33091
33343
|
[groups]="group"
|
|
33092
33344
|
[rowsToRender]="rowsToRender"
|
|
33093
33345
|
[skip]="skip"
|
|
@@ -33202,7 +33454,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
33202
33454
|
<div #dialogContainer></div>
|
|
33203
33455
|
|
|
33204
33456
|
<kendo-grid-adaptive-renderer *ngIf="isAdaptiveModeEnabled"></kendo-grid-adaptive-renderer>
|
|
33205
|
-
|
|
33457
|
+
<kendo-resize-sensor *ngIf="isVirtual" (resize)="onResize()"></kendo-resize-sensor>
|
|
33206
33458
|
<div *ngIf="aiAssistantToolbarTool" #windowContainer></div>
|
|
33207
33459
|
|
|
33208
33460
|
<div kendoWatermarkOverlay *ngIf="showLicenseWatermark" [licenseMessage]="licenseMessage"></div>
|
|
@@ -33213,7 +33465,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
33213
33465
|
TableDirective, GridTableDirective, ColGroupComponent, HeaderComponent, ResizableContainerDirective,
|
|
33214
33466
|
ListComponent, DragTargetContainerDirective, DropTargetContainerDirective, DraggableDirective,
|
|
33215
33467
|
GridMarqueeDirective, FooterComponent, TableBodyComponent, LoadingComponent, StatusBarComponent,
|
|
33216
|
-
IconWrapperComponent, WatermarkOverlayComponent, ...KENDO_PAGER, NgTemplateOutlet, AdaptiveRendererComponent
|
|
33468
|
+
IconWrapperComponent, WatermarkOverlayComponent, ...KENDO_PAGER, NgTemplateOutlet, AdaptiveRendererComponent, ResizeSensorComponent
|
|
33217
33469
|
]
|
|
33218
33470
|
}]
|
|
33219
33471
|
}], ctorParameters: function () { return [{ type: BrowserSupportService }, { type: SelectionService }, { type: CellSelectionService }, { type: i0.ElementRef }, { type: GroupInfoService }, { type: GroupsService }, { type: ChangeNotificationService }, { type: DetailsService }, { type: EditService }, { type: FilterService }, { type: PDFService }, { type: ResponsiveService }, { type: i0.Renderer2 }, { type: ExcelService }, { type: i0.NgZone }, { type: ScrollSyncService }, { type: DomEventsService }, { type: ColumnResizingService }, { type: i0.ChangeDetectorRef }, { type: ColumnReorderService }, { type: ColumnInfoService }, { type: NavigationService }, { type: SortService }, { type: ScrollRequestService }, { type: i1$2.LocalizationService }, { type: ContextService }, { type: SizingOptionsService }, { type: AdaptiveGridService }, { type: RowReorderService }, { type: DataMappingService }]; }, propDecorators: { data: [{
|
|
@@ -33611,9 +33863,6 @@ class DataBindingDirective {
|
|
|
33611
33863
|
this.rowReorderSubscription.unsubscribe();
|
|
33612
33864
|
}
|
|
33613
33865
|
}
|
|
33614
|
-
/**
|
|
33615
|
-
* @hidden
|
|
33616
|
-
*/
|
|
33617
33866
|
ngOnChanges(changes) {
|
|
33618
33867
|
if (anyChanged(["pageSize", "skip", "sort", "group", "filter"], changes)) {
|
|
33619
33868
|
this.rebind();
|
|
@@ -33656,7 +33905,7 @@ class DataBindingDirective {
|
|
|
33656
33905
|
}
|
|
33657
33906
|
}
|
|
33658
33907
|
process(state) {
|
|
33659
|
-
if (this.grid.isVirtual && (!isPresent(state.take) || state.take === 0)) {
|
|
33908
|
+
if (this.grid.isVirtual && ((!isPresent(state.take) || state.take === 0) && !state.group?.length)) {
|
|
33660
33909
|
return {
|
|
33661
33910
|
data: [],
|
|
33662
33911
|
total: this.originalData?.length || 0
|
|
@@ -33672,6 +33921,9 @@ class DataBindingDirective {
|
|
|
33672
33921
|
this.filter = filter;
|
|
33673
33922
|
}
|
|
33674
33923
|
updateGridData() {
|
|
33924
|
+
if (this.grid.isVirtual && !this.grid.pageable && this.state.group?.length) {
|
|
33925
|
+
this.state.take = undefined;
|
|
33926
|
+
}
|
|
33675
33927
|
this.grid.data = this.process(this.state);
|
|
33676
33928
|
this.grid.updateNavigationMetadata();
|
|
33677
33929
|
this.dataChanged = false;
|
|
@@ -34622,336 +34874,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
34622
34874
|
type: Input
|
|
34623
34875
|
}] } });
|
|
34624
34876
|
|
|
34625
|
-
const hasGroups = (items) => items && items.length && items[0].field && items[0].items;
|
|
34626
|
-
const groupDescriptorsPresent = (descriptors) => isPresent(descriptors) && descriptors.length > 0;
|
|
34627
|
-
const processGroups = (data, state) => process(data, state).data;
|
|
34628
|
-
const removeParentDescriptors = (parents, owner) => g => g.field !== owner.field && !parents.some(y => y.field === g.field);
|
|
34629
|
-
const findGroup = (groupIndex, groups) => {
|
|
34630
|
-
const parents = [];
|
|
34631
|
-
return {
|
|
34632
|
-
group: groupIndex.split("_").reduce((acc, x) => {
|
|
34633
|
-
const idx = parseInt(x, 10);
|
|
34634
|
-
if (acc.items) {
|
|
34635
|
-
parents.push(acc);
|
|
34636
|
-
return acc.items[idx];
|
|
34637
|
-
}
|
|
34638
|
-
return isArray(acc) ? acc[idx] : acc;
|
|
34639
|
-
}, groups),
|
|
34640
|
-
parents
|
|
34641
|
-
};
|
|
34642
|
-
};
|
|
34643
|
-
const findChildren = (data, parents) => {
|
|
34644
|
-
const filters = parents.map(p => ({ field: p.field, operator: "eq", value: p.value }));
|
|
34645
|
-
return filterBy(data, {
|
|
34646
|
-
filters: filters,
|
|
34647
|
-
logic: "and"
|
|
34648
|
-
});
|
|
34649
|
-
};
|
|
34650
|
-
/**
|
|
34651
|
-
* @hidden
|
|
34652
|
-
*/
|
|
34653
|
-
const count = (groups, includeFooters = false) => (groups.reduce((acc, group) => {
|
|
34654
|
-
if (!group.skipHeader) {
|
|
34655
|
-
acc++;
|
|
34656
|
-
}
|
|
34657
|
-
if (group.items) {
|
|
34658
|
-
const children = count(group.items, includeFooters);
|
|
34659
|
-
if (includeFooters && children && !group.hideFooter) {
|
|
34660
|
-
acc++;
|
|
34661
|
-
}
|
|
34662
|
-
acc += children;
|
|
34663
|
-
}
|
|
34664
|
-
return acc;
|
|
34665
|
-
}, 0));
|
|
34666
|
-
/**
|
|
34667
|
-
* @hidden
|
|
34668
|
-
*/
|
|
34669
|
-
const noDescriptors = (descriptors) => !isPresent(descriptors) || !descriptors.length;
|
|
34670
|
-
/**
|
|
34671
|
-
* @hidden
|
|
34672
|
-
*/
|
|
34673
|
-
const slice = (groups, skip, take, includeFooters = false) => {
|
|
34674
|
-
if (!isPresent(take)) {
|
|
34675
|
-
return groups;
|
|
34676
|
-
}
|
|
34677
|
-
const result = [];
|
|
34678
|
-
for (let idx = 0, length = groups.length; idx < length; idx++) {
|
|
34679
|
-
if (take <= 0) {
|
|
34680
|
-
break;
|
|
34681
|
-
}
|
|
34682
|
-
const group = groups[idx];
|
|
34683
|
-
const groupItems = group.items;
|
|
34684
|
-
let itemCount = count(groupItems, includeFooters);
|
|
34685
|
-
if (includeFooters && groupItems.length) {
|
|
34686
|
-
itemCount++;
|
|
34687
|
-
}
|
|
34688
|
-
const skipHeader = skip > 0;
|
|
34689
|
-
if (skip) {
|
|
34690
|
-
skip--;
|
|
34691
|
-
if (itemCount && skip >= itemCount) {
|
|
34692
|
-
skip -= itemCount;
|
|
34693
|
-
continue;
|
|
34694
|
-
}
|
|
34695
|
-
}
|
|
34696
|
-
if (!skipHeader || itemCount) {
|
|
34697
|
-
const items = [];
|
|
34698
|
-
let hideFooter = true;
|
|
34699
|
-
if (!skipHeader) {
|
|
34700
|
-
take--;
|
|
34701
|
-
}
|
|
34702
|
-
if (take) {
|
|
34703
|
-
if (hasGroups(groupItems)) {
|
|
34704
|
-
const children = slice(groupItems, skip, take, includeFooters);
|
|
34705
|
-
items.push(...children);
|
|
34706
|
-
take -= count(children, includeFooters);
|
|
34707
|
-
}
|
|
34708
|
-
else {
|
|
34709
|
-
items.push(...groupItems.slice(skip, Math.min(skip + take, groupItems.length)));
|
|
34710
|
-
take -= items.length;
|
|
34711
|
-
}
|
|
34712
|
-
if (take && includeFooters) {
|
|
34713
|
-
hideFooter = false;
|
|
34714
|
-
take--;
|
|
34715
|
-
}
|
|
34716
|
-
skip = 0;
|
|
34717
|
-
}
|
|
34718
|
-
result.push({
|
|
34719
|
-
aggregates: group.aggregates,
|
|
34720
|
-
field: group.field,
|
|
34721
|
-
hideFooter,
|
|
34722
|
-
items,
|
|
34723
|
-
offset: idx,
|
|
34724
|
-
skipHeader,
|
|
34725
|
-
value: group.value
|
|
34726
|
-
});
|
|
34727
|
-
}
|
|
34728
|
-
}
|
|
34729
|
-
return result;
|
|
34730
|
-
};
|
|
34731
|
-
const skippedHeaders = (groupItem) => {
|
|
34732
|
-
let total = 0;
|
|
34733
|
-
while (groupItem) {
|
|
34734
|
-
if (groupItem.skipHeader) {
|
|
34735
|
-
total++;
|
|
34736
|
-
}
|
|
34737
|
-
groupItem = groupItem.items && groupItem.items[0] || null;
|
|
34738
|
-
}
|
|
34739
|
-
return total;
|
|
34740
|
-
};
|
|
34741
|
-
/**
|
|
34742
|
-
* A directive which encapsulates the in-memory handling of grouping with virtual scrolling.
|
|
34743
|
-
* @remarks
|
|
34744
|
-
* Applied to: {@link GridComponent}.
|
|
34745
|
-
*/
|
|
34746
|
-
class GroupBindingDirective extends DataBindingDirective {
|
|
34747
|
-
groupsService;
|
|
34748
|
-
/**
|
|
34749
|
-
* The array of data which will be used to populate the Grid.
|
|
34750
|
-
*/
|
|
34751
|
-
set kendoGridGroupBinding(value) {
|
|
34752
|
-
this.groups = null;
|
|
34753
|
-
this.grid.resetGroupsState();
|
|
34754
|
-
this.data = value;
|
|
34755
|
-
}
|
|
34756
|
-
/**
|
|
34757
|
-
* @hidden
|
|
34758
|
-
*/
|
|
34759
|
-
set data(value) {
|
|
34760
|
-
this.originalData = value || [];
|
|
34761
|
-
this.dataChanged = true;
|
|
34762
|
-
}
|
|
34763
|
-
/**
|
|
34764
|
-
* Defines the descriptors by which the data will be sorted.
|
|
34765
|
-
*/
|
|
34766
|
-
set sort(value) {
|
|
34767
|
-
const noCurrentDescriptors = noDescriptors(this.state.sort);
|
|
34768
|
-
const noIncomingDescriptors = noDescriptors(value);
|
|
34769
|
-
const clear = this.state.sort !== value && !(noCurrentDescriptors && noIncomingDescriptors);
|
|
34770
|
-
this.grid.sort = this.state.sort = value;
|
|
34771
|
-
if (clear) {
|
|
34772
|
-
this.groups = null;
|
|
34773
|
-
this.grid.resetGroupsState();
|
|
34774
|
-
}
|
|
34775
|
-
}
|
|
34776
|
-
/**
|
|
34777
|
-
* Defines the descriptor by which the data will be filtered.
|
|
34778
|
-
*/
|
|
34779
|
-
set filter(value) {
|
|
34780
|
-
const clear = diffFilters(this.state.filter, value);
|
|
34781
|
-
if (clear) {
|
|
34782
|
-
this.state.filter = value;
|
|
34783
|
-
this.grid.filter = cloneFilters(value);
|
|
34784
|
-
this.groups = null;
|
|
34785
|
-
this.grid.resetGroupsState();
|
|
34786
|
-
}
|
|
34787
|
-
}
|
|
34788
|
-
/**
|
|
34789
|
-
* Defines the descriptors by which the data will be grouped.
|
|
34790
|
-
*/
|
|
34791
|
-
set group(value) {
|
|
34792
|
-
// don't clear if no groups are present in previous and current value
|
|
34793
|
-
const groupsPresent = groupDescriptorsPresent(this.state.group) || groupDescriptorsPresent(value);
|
|
34794
|
-
const clear = this.state.group !== value && groupsPresent;
|
|
34795
|
-
this.grid.group = this.state.group = value;
|
|
34796
|
-
if (clear) {
|
|
34797
|
-
this.groups = null;
|
|
34798
|
-
this.grid.resetGroupsState();
|
|
34799
|
-
this.skip = 0;
|
|
34800
|
-
}
|
|
34801
|
-
}
|
|
34802
|
-
groups;
|
|
34803
|
-
gridSubs = new Subscription();
|
|
34804
|
-
constructor(changeDetector, localDataChangesService, ctxService, groupsService) {
|
|
34805
|
-
super(ctxService.grid, changeDetector, localDataChangesService, null, ctxService);
|
|
34806
|
-
this.groupsService = groupsService;
|
|
34807
|
-
ctxService.dataBindingDirective = this;
|
|
34808
|
-
}
|
|
34809
|
-
ngOnInit() {
|
|
34810
|
-
super.ngOnInit();
|
|
34811
|
-
this.gridSubs.add(this.grid.groupExpand.subscribe(this.groupExpand.bind(this)));
|
|
34812
|
-
this.gridSubs.add(this.grid.groupCollapse.subscribe(this.groupCollapse.bind(this)));
|
|
34813
|
-
}
|
|
34814
|
-
ngAfterContentInit() {
|
|
34815
|
-
if (isDevMode() && this.grid.isGroupExpanded) {
|
|
34816
|
-
throw new Error(GridConfigurationErrorMessages.groupBindingDirectives);
|
|
34817
|
-
}
|
|
34818
|
-
}
|
|
34819
|
-
ngOnDestroy() {
|
|
34820
|
-
this.gridSubs.unsubscribe();
|
|
34821
|
-
}
|
|
34822
|
-
/**
|
|
34823
|
-
* @hidden
|
|
34824
|
-
*/
|
|
34825
|
-
toggleAll(expand) {
|
|
34826
|
-
this.skip = 0;
|
|
34827
|
-
this.grid.scrollTo({ row: 0, column: 0 });
|
|
34828
|
-
this.groups.forEach((gr, idx) => {
|
|
34829
|
-
const expanded = this.groupsService.isExpanded({
|
|
34830
|
-
group: gr,
|
|
34831
|
-
groupIndex: idx.toString(),
|
|
34832
|
-
parentGroup: undefined
|
|
34833
|
-
});
|
|
34834
|
-
const performToggle = (expand && !expanded) || (!expand && expanded);
|
|
34835
|
-
if (performToggle) {
|
|
34836
|
-
this.grid.groupsService.toggleRow({
|
|
34837
|
-
type: 'group',
|
|
34838
|
-
data: gr,
|
|
34839
|
-
index: idx.toString(),
|
|
34840
|
-
level: 0,
|
|
34841
|
-
parentGroup: undefined
|
|
34842
|
-
});
|
|
34843
|
-
this[expand ? 'groupExpand' : 'groupCollapse']({ groupIndex: idx.toString() });
|
|
34844
|
-
}
|
|
34845
|
-
});
|
|
34846
|
-
}
|
|
34847
|
-
/**
|
|
34848
|
-
* Collapses all expanded root level groups.
|
|
34849
|
-
*/
|
|
34850
|
-
collapseAll() {
|
|
34851
|
-
this.toggleAll(false);
|
|
34852
|
-
}
|
|
34853
|
-
/**
|
|
34854
|
-
* Expands all expanded root level groups.
|
|
34855
|
-
*/
|
|
34856
|
-
expandAll() {
|
|
34857
|
-
this.toggleAll(true);
|
|
34858
|
-
}
|
|
34859
|
-
/**
|
|
34860
|
-
* @hidden
|
|
34861
|
-
*/
|
|
34862
|
-
groupExpand({ groupIndex }) {
|
|
34863
|
-
const { group, parents } = findGroup(groupIndex, this.groups);
|
|
34864
|
-
if (!group) {
|
|
34865
|
-
return;
|
|
34866
|
-
}
|
|
34867
|
-
this.groupsService.expandChildren(groupIndex);
|
|
34868
|
-
if (!group.items.length) {
|
|
34869
|
-
const descriptors = this.state.group.filter(removeParentDescriptors(parents, group));
|
|
34870
|
-
const children = findChildren(this.originalData, parents.concat(group));
|
|
34871
|
-
group.items = processGroups(children, {
|
|
34872
|
-
filter: this.state.filter,
|
|
34873
|
-
group: descriptors,
|
|
34874
|
-
sort: this.state.sort
|
|
34875
|
-
});
|
|
34876
|
-
}
|
|
34877
|
-
this.grid.data = this.dataResult(this.state.skip, this.state.take);
|
|
34878
|
-
}
|
|
34879
|
-
/**
|
|
34880
|
-
* @hidden
|
|
34881
|
-
*/
|
|
34882
|
-
groupCollapse({ groupIndex }) {
|
|
34883
|
-
const { group } = findGroup(groupIndex, this.groups);
|
|
34884
|
-
if (group) {
|
|
34885
|
-
group.items = [];
|
|
34886
|
-
}
|
|
34887
|
-
else {
|
|
34888
|
-
return;
|
|
34889
|
-
}
|
|
34890
|
-
this.grid.data = this.dataResult(this.state.skip, this.state.take);
|
|
34891
|
-
}
|
|
34892
|
-
process(state) {
|
|
34893
|
-
if (this.grid.isVirtual && (!isPresent(state.take) || state.take === 0)) {
|
|
34894
|
-
return {
|
|
34895
|
-
data: [],
|
|
34896
|
-
total: this.originalData?.length || 0
|
|
34897
|
-
};
|
|
34898
|
-
}
|
|
34899
|
-
if (state.group && state.group.length) {
|
|
34900
|
-
const groups = this.processGroups(state);
|
|
34901
|
-
this.grid.skip -= skippedHeaders(groups.data[0]);
|
|
34902
|
-
return groups;
|
|
34903
|
-
}
|
|
34904
|
-
else {
|
|
34905
|
-
this.groups = null;
|
|
34906
|
-
}
|
|
34907
|
-
return super.process(state);
|
|
34908
|
-
}
|
|
34909
|
-
processGroups(state) {
|
|
34910
|
-
if (!this.groups || !this.groups.length) {
|
|
34911
|
-
this.groups = processGroups(this.originalData, {
|
|
34912
|
-
filter: state.filter,
|
|
34913
|
-
group: state.group,
|
|
34914
|
-
sort: state.sort
|
|
34915
|
-
});
|
|
34916
|
-
}
|
|
34917
|
-
return this.dataResult(state.skip, state.take);
|
|
34918
|
-
}
|
|
34919
|
-
dataResult(skip, take) {
|
|
34920
|
-
const includeFooters = this.grid.showGroupFooters;
|
|
34921
|
-
return {
|
|
34922
|
-
data: slice(this.groups, skip, take, includeFooters),
|
|
34923
|
-
total: count(this.groups, includeFooters)
|
|
34924
|
-
};
|
|
34925
|
-
}
|
|
34926
|
-
applyState({ skip, take, sort, group, filter }) {
|
|
34927
|
-
this.skip = skip;
|
|
34928
|
-
this.state.take = take;
|
|
34929
|
-
// this.pageSize = take; // do need to update take as the process with slice correctly
|
|
34930
|
-
this.sort = sort;
|
|
34931
|
-
this.group = group;
|
|
34932
|
-
this.filter = filter;
|
|
34933
|
-
}
|
|
34934
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GroupBindingDirective, deps: [{ token: i0.ChangeDetectorRef }, { token: LocalDataChangesService }, { token: ContextService }, { token: GroupsService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
34935
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: GroupBindingDirective, isStandalone: true, selector: "[kendoGridGroupBinding]", inputs: { kendoGridGroupBinding: "kendoGridGroupBinding", sort: "sort", filter: "filter", group: "group" }, exportAs: ["kendoGridGroupBinding"], usesInheritance: true, ngImport: i0 });
|
|
34936
|
-
}
|
|
34937
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GroupBindingDirective, decorators: [{
|
|
34938
|
-
type: Directive,
|
|
34939
|
-
args: [{
|
|
34940
|
-
selector: '[kendoGridGroupBinding]',
|
|
34941
|
-
exportAs: 'kendoGridGroupBinding',
|
|
34942
|
-
standalone: true
|
|
34943
|
-
}]
|
|
34944
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: LocalDataChangesService }, { type: ContextService }, { type: GroupsService }]; }, propDecorators: { kendoGridGroupBinding: [{
|
|
34945
|
-
type: Input,
|
|
34946
|
-
args: ["kendoGridGroupBinding"]
|
|
34947
|
-
}], sort: [{
|
|
34948
|
-
type: Input
|
|
34949
|
-
}], filter: [{
|
|
34950
|
-
type: Input
|
|
34951
|
-
}], group: [{
|
|
34952
|
-
type: Input
|
|
34953
|
-
}] } });
|
|
34954
|
-
|
|
34955
34877
|
/**
|
|
34956
34878
|
* Represents the Kendo UI GridSpacer component for Angular.
|
|
34957
34879
|
* Used to give additional white space between the Pager inner elements,
|
|
@@ -37473,7 +37395,6 @@ const KENDO_GRID_DECLARATIONS = [
|
|
|
37473
37395
|
ExternalEditingDirective,
|
|
37474
37396
|
ExpandDetailsDirective,
|
|
37475
37397
|
ExpandGroupDirective,
|
|
37476
|
-
GroupBindingDirective,
|
|
37477
37398
|
GridMarqueeDirective,
|
|
37478
37399
|
GridSpacerComponent,
|
|
37479
37400
|
GridToolbarFocusableDirective,
|
|
@@ -37500,7 +37421,6 @@ const KENDO_GRID_EXPORTS = [
|
|
|
37500
37421
|
SelectionDirective,
|
|
37501
37422
|
HighlightDirective,
|
|
37502
37423
|
CustomMessagesComponent,
|
|
37503
|
-
GroupBindingDirective,
|
|
37504
37424
|
TemplateEditingDirective,
|
|
37505
37425
|
ReactiveEditingDirective,
|
|
37506
37426
|
InCellEditingDirective,
|
|
@@ -37592,9 +37512,9 @@ const KENDO_GRID = [
|
|
|
37592
37512
|
*/
|
|
37593
37513
|
class GridModule {
|
|
37594
37514
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
37595
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: GridModule, imports: [GroupHeaderTemplateDirective, GroupHeaderColumnTemplateDirective, GroupFooterTemplateDirective, GroupHeaderComponent, GroupPanelComponent, ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, i1$3.TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, LoadingComponent, GridTableDirective, CommandColumnComponent, CheckboxColumnComponent, SelectionCheckboxDirective, CellTemplateDirective, EditTemplateDirective, RowDragHandleTemplateDirective, RowDragHintTemplateDirective, TableBodyComponent, NoRecordsTemplateDirective, CellComponent, EditCommandDirective, CancelCommandDirective, SaveCommandDirective, RemoveCommandDirective, AddCommandDirective, AddCommandToolbarDirective, EditCommandToolbarDirective, SaveCommandToolbarDirective, RemoveCommandToolbarDirective, CancelCommandToolbarDirective, CellLoadingTemplateDirective, LoadingTemplateDirective, RowReorderColumnComponent, SortCommandToolbarDirective, FilterCommandToolbarDirective, AIAssistantToolbarDirective, GroupCommandToolbarDirective, SelectAllToolbarToolComponent, HeaderComponent, HeaderTemplateDirective, ColumnHandleDirective, SelectAllCheckboxDirective, FooterComponent, i53.CustomMessagesComponent, i53.PagerFocusableDirective, i53.PagerInfoComponent, i53.PagerInputComponent, i53.PagerNextButtonsComponent, i53.PagerNumericButtonsComponent, i53.PagerPageSizesComponent, i53.PagerPrevButtonsComponent, i53.PagerTemplateDirective, i53.PagerComponent, i53.PagerSpacerComponent, i54.ToolBarComponent, i54.ToolbarCustomMessagesComponent, i54.ToolBarButtonComponent, i54.ToolBarButtonGroupComponent, i54.ToolBarDropDownButtonComponent, i54.ToolBarSeparatorComponent, i54.ToolBarSpacerComponent, i54.ToolBarSplitButtonComponent, i54.ToolBarToolComponent, FilterRowComponent, FilterCellComponent, FilterCellTemplateDirective, StringFilterCellComponent, NumericFilterCellComponent, AutoCompleteFilterCellComponent, BooleanFilterCellComponent, FilterCellHostDirective, FilterCellWrapperComponent, DateFilterCellComponent, ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, i1$3.TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, LoadingComponent, GridTableDirective, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, FilterInputDirective, ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, i1$3.TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, LoadingComponent, GridTableDirective, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, FilterInputDirective, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuInputWrapperComponent, StringFilterMenuInputComponent, StringFilterMenuComponent, FilterMenuTemplateDirective, NumericFilterMenuComponent, NumericFilterMenuInputComponent, DateFilterMenuInputComponent, DateFilterMenuComponent, FilterMenuHostDirective, BooleanFilterMenuComponent, FilterMenuDropDownListDirective, BooleanFilterRadioButtonDirective, ColumnMenuChooserItemCheckedDirective, ColumnListComponent, ColumnChooserComponent, ColumnChooserToolbarDirective, ColumnMenuChooserComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuSortComponent, ColumnMenuComponent, ColumnMenuLockComponent, ColumnMenuTemplateDirective, ColumnMenuContainerComponent, ColumnMenuItemDirective, ColumnMenuStickComponent, ColumnMenuPositionComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuAutoSizeAllColumnsComponent, GridComponent, ListComponent, ToolbarComponent, LocalizedMessagesDirective, CustomMessagesComponent, DataBindingDirective, ToolbarTemplateDirective, SelectionDirective, HighlightDirective, TemplateEditingDirective, ReactiveEditingDirective, InCellEditingDirective, ExternalEditingDirective, ExpandDetailsDirective, ExpandGroupDirective,
|
|
37515
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: GridModule, imports: [GroupHeaderTemplateDirective, GroupHeaderColumnTemplateDirective, GroupFooterTemplateDirective, GroupHeaderComponent, GroupPanelComponent, ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, i1$3.TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, LoadingComponent, GridTableDirective, CommandColumnComponent, CheckboxColumnComponent, SelectionCheckboxDirective, CellTemplateDirective, EditTemplateDirective, RowDragHandleTemplateDirective, RowDragHintTemplateDirective, TableBodyComponent, NoRecordsTemplateDirective, CellComponent, EditCommandDirective, CancelCommandDirective, SaveCommandDirective, RemoveCommandDirective, AddCommandDirective, AddCommandToolbarDirective, EditCommandToolbarDirective, SaveCommandToolbarDirective, RemoveCommandToolbarDirective, CancelCommandToolbarDirective, CellLoadingTemplateDirective, LoadingTemplateDirective, RowReorderColumnComponent, SortCommandToolbarDirective, FilterCommandToolbarDirective, AIAssistantToolbarDirective, GroupCommandToolbarDirective, SelectAllToolbarToolComponent, HeaderComponent, HeaderTemplateDirective, ColumnHandleDirective, SelectAllCheckboxDirective, FooterComponent, i53.CustomMessagesComponent, i53.PagerFocusableDirective, i53.PagerInfoComponent, i53.PagerInputComponent, i53.PagerNextButtonsComponent, i53.PagerNumericButtonsComponent, i53.PagerPageSizesComponent, i53.PagerPrevButtonsComponent, i53.PagerTemplateDirective, i53.PagerComponent, i53.PagerSpacerComponent, i54.ToolBarComponent, i54.ToolbarCustomMessagesComponent, i54.ToolBarButtonComponent, i54.ToolBarButtonGroupComponent, i54.ToolBarDropDownButtonComponent, i54.ToolBarSeparatorComponent, i54.ToolBarSpacerComponent, i54.ToolBarSplitButtonComponent, i54.ToolBarToolComponent, FilterRowComponent, FilterCellComponent, FilterCellTemplateDirective, StringFilterCellComponent, NumericFilterCellComponent, AutoCompleteFilterCellComponent, BooleanFilterCellComponent, FilterCellHostDirective, FilterCellWrapperComponent, DateFilterCellComponent, ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, i1$3.TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, LoadingComponent, GridTableDirective, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, FilterInputDirective, ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, i1$3.TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, LoadingComponent, GridTableDirective, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, FilterInputDirective, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuInputWrapperComponent, StringFilterMenuInputComponent, StringFilterMenuComponent, FilterMenuTemplateDirective, NumericFilterMenuComponent, NumericFilterMenuInputComponent, DateFilterMenuInputComponent, DateFilterMenuComponent, FilterMenuHostDirective, BooleanFilterMenuComponent, FilterMenuDropDownListDirective, BooleanFilterRadioButtonDirective, ColumnMenuChooserItemCheckedDirective, ColumnListComponent, ColumnChooserComponent, ColumnChooserToolbarDirective, ColumnMenuChooserComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuSortComponent, ColumnMenuComponent, ColumnMenuLockComponent, ColumnMenuTemplateDirective, ColumnMenuContainerComponent, ColumnMenuItemDirective, ColumnMenuStickComponent, ColumnMenuPositionComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuAutoSizeAllColumnsComponent, GridComponent, ListComponent, ToolbarComponent, LocalizedMessagesDirective, CustomMessagesComponent, DataBindingDirective, ToolbarTemplateDirective, SelectionDirective, HighlightDirective, TemplateEditingDirective, ReactiveEditingDirective, InCellEditingDirective, ExternalEditingDirective, ExpandDetailsDirective, ExpandGroupDirective, GridMarqueeDirective, GridSpacerComponent, GridToolbarFocusableDirective, StatusBarComponent, StatusBarTemplateDirective, GridClipboardDirective, FormComponent, DialogFormComponent, FormFormFieldComponent, UndoRedoDirective, i54.ToolBarComponent, i54.ToolbarCustomMessagesComponent, i54.ToolBarButtonComponent, i54.ToolBarButtonGroupComponent, i54.ToolBarDropDownButtonComponent, i54.ToolBarSeparatorComponent, i54.ToolBarSpacerComponent, i54.ToolBarSplitButtonComponent, i54.ToolBarToolComponent, TableDirective,
|
|
37596
37516
|
UndoCommandToolbarDirective,
|
|
37597
|
-
RedoCommandToolbarDirective], exports: [GridComponent, ToolbarTemplateDirective, ToolbarComponent, GridSpacerComponent, StatusBarTemplateDirective, DataBindingDirective, SelectionDirective, HighlightDirective, CustomMessagesComponent,
|
|
37517
|
+
RedoCommandToolbarDirective], exports: [GridComponent, ToolbarTemplateDirective, ToolbarComponent, GridSpacerComponent, StatusBarTemplateDirective, DataBindingDirective, SelectionDirective, HighlightDirective, CustomMessagesComponent, TemplateEditingDirective, ReactiveEditingDirective, InCellEditingDirective, ExternalEditingDirective, ExpandDetailsDirective, ExpandGroupDirective, GridToolbarFocusableDirective, GroupHeaderTemplateDirective, GroupHeaderColumnTemplateDirective, GroupFooterTemplateDirective, GroupHeaderComponent, GroupPanelComponent, ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, i1$3.TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, LoadingComponent, GridTableDirective, CommandColumnComponent, CheckboxColumnComponent, SelectionCheckboxDirective, CellTemplateDirective, EditTemplateDirective, RowDragHandleTemplateDirective, RowDragHintTemplateDirective, TableBodyComponent, NoRecordsTemplateDirective, CellComponent, EditCommandDirective, CancelCommandDirective, SaveCommandDirective, RemoveCommandDirective, AddCommandDirective, AddCommandToolbarDirective, EditCommandToolbarDirective, SaveCommandToolbarDirective, RemoveCommandToolbarDirective, CancelCommandToolbarDirective, CellLoadingTemplateDirective, LoadingTemplateDirective, RowReorderColumnComponent, SortCommandToolbarDirective, FilterCommandToolbarDirective, AIAssistantToolbarDirective, GroupCommandToolbarDirective, SelectAllToolbarToolComponent, HeaderComponent, HeaderTemplateDirective, ColumnHandleDirective, SelectAllCheckboxDirective, FilterRowComponent, FilterCellComponent, FilterCellTemplateDirective, StringFilterCellComponent, NumericFilterCellComponent, AutoCompleteFilterCellComponent, BooleanFilterCellComponent, FilterCellHostDirective, FilterCellWrapperComponent, DateFilterCellComponent, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuInputWrapperComponent, StringFilterMenuInputComponent, StringFilterMenuComponent, FilterMenuTemplateDirective, NumericFilterMenuComponent, NumericFilterMenuInputComponent, DateFilterMenuInputComponent, DateFilterMenuComponent, FilterMenuHostDirective, BooleanFilterMenuComponent, FilterMenuDropDownListDirective, BooleanFilterRadioButtonDirective, ColumnChooserComponent, ColumnChooserToolbarDirective, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuSortComponent, ColumnMenuLockComponent, ColumnMenuStickComponent, ColumnMenuPositionComponent, ColumnMenuChooserComponent, ColumnMenuTemplateDirective, ColumnMenuContainerComponent, ColumnMenuItemDirective, ColumnMenuComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuAutoSizeAllColumnsComponent, GridClipboardDirective, UndoRedoDirective, UndoCommandToolbarDirective, RedoCommandToolbarDirective, i54.ToolBarComponent, i54.ToolbarCustomMessagesComponent, i54.ToolBarButtonComponent, i54.ToolBarButtonGroupComponent, i54.ToolBarDropDownButtonComponent, i54.ToolBarSeparatorComponent, i54.ToolBarSpacerComponent, i54.ToolBarSplitButtonComponent, i54.ToolBarToolComponent, i53.CustomMessagesComponent, i53.PagerFocusableDirective, i53.PagerInfoComponent, i53.PagerInputComponent, i53.PagerNextButtonsComponent, i53.PagerNumericButtonsComponent, i53.PagerPageSizesComponent, i53.PagerPrevButtonsComponent, i53.PagerTemplateDirective, i53.PagerComponent, i53.PagerSpacerComponent] });
|
|
37598
37518
|
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridModule, providers: [
|
|
37599
37519
|
PopupService,
|
|
37600
37520
|
ResizeBatchService,
|
|
@@ -37721,5 +37641,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
37721
37641
|
* Generated bundle index. Do not edit.
|
|
37722
37642
|
*/
|
|
37723
37643
|
|
|
37724
|
-
export { AIAssistantToolbarDirective, AddCommandDirective, AddCommandToolbarDirective, AfterEqFilterOperatorComponent, AfterFilterOperatorComponent, AutoCompleteFilterCellComponent, BaseFilterCellComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, BooleanFilterCellComponent, BooleanFilterComponent, BooleanFilterMenuComponent, BooleanFilterRadioButtonDirective, BrowserSupportService, CELL_CONTEXT, CancelCommandDirective, CancelCommandToolbarDirective, CellCloseEvent, CellComponent, CellLoadingTemplateDirective, CellSelectionAggregateService, CellSelectionService, CellTemplateDirective, ChangeNotificationService, CheckboxColumnComponent, ColGroupComponent, ColumnBase, ColumnChooserComponent, ColumnChooserToolbarDirective, ColumnComponent, ColumnGroupComponent, ColumnHandleDirective, ColumnInfoService, ColumnListComponent, ColumnLockedChangeEvent, ColumnMenuAutoSizeAllColumnsComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuChooserComponent, ColumnMenuComponent, ColumnMenuContainerComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuItemDirective, ColumnMenuLockComponent, ColumnMenuPositionComponent, ColumnMenuService, ColumnMenuSortComponent, ColumnMenuStickComponent, ColumnMenuTemplateDirective, ColumnReorderEvent, ColumnReorderService, ColumnResizingService, ColumnStickyChangeEvent, ColumnVisibilityChangeEvent, ColumnsContainer, CommandColumnComponent, ContainsFilterOperatorComponent, ContextService, CustomMessagesComponent, DEFAULT_AI_REQUEST_OPTIONS, DEFAULT_SCROLLER_FACTORY, DataBindingDirective, DateFilterCellComponent, DateFilterComponent, DateFilterMenuComponent, DateFilterMenuInputComponent, DetailCollapseEvent, DetailExpandEvent, DetailTemplateDirective, DetailsService, DoesNotContainFilterOperatorComponent, DomEventsService, DragAndDropService, DragHintService, DropCueService, EditCommandDirective, EditCommandToolbarDirective, EditService as EditServiceClass, EditTemplateDirective, EditingDirectiveBase, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, ExcelCommandDirective, ExcelCommandToolbarDirective, ExcelComponent, ExcelExportEvent, ExcelModule, ExcelService, ExpandDetailsDirective, ExpandGroupDirective, ExternalEditingDirective, FieldAccessorPipe, FilterCellComponent, FilterCellHostDirective, FilterCellOperatorsComponent, FilterCellTemplateDirective, FilterCellWrapperComponent, FilterCommandToolbarDirective, FilterInputDirective, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuDropDownListDirective, FilterMenuHostDirective, FilterMenuInputWrapperComponent, FilterMenuTemplateDirective, FilterRowComponent, FilterService, FocusRoot, FocusableDirective, FooterComponent, FooterTemplateDirective, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, GridClipboardDirective, GridComponent, GridModule, GridSpacerComponent, GridTableDirective, GridToolbarAIResponseErrorEvent, GridToolbarAIResponseSuccessEvent, GridToolbarFocusableDirective, GridToolbarNavigationService,
|
|
37644
|
+
export { AIAssistantToolbarDirective, AddCommandDirective, AddCommandToolbarDirective, AfterEqFilterOperatorComponent, AfterFilterOperatorComponent, AutoCompleteFilterCellComponent, BaseFilterCellComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, BooleanFilterCellComponent, BooleanFilterComponent, BooleanFilterMenuComponent, BooleanFilterRadioButtonDirective, BrowserSupportService, CELL_CONTEXT, CancelCommandDirective, CancelCommandToolbarDirective, CellCloseEvent, CellComponent, CellLoadingTemplateDirective, CellSelectionAggregateService, CellSelectionService, CellTemplateDirective, ChangeNotificationService, CheckboxColumnComponent, ColGroupComponent, ColumnBase, ColumnChooserComponent, ColumnChooserToolbarDirective, ColumnComponent, ColumnGroupComponent, ColumnHandleDirective, ColumnInfoService, ColumnListComponent, ColumnLockedChangeEvent, ColumnMenuAutoSizeAllColumnsComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuChooserComponent, ColumnMenuComponent, ColumnMenuContainerComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuItemDirective, ColumnMenuLockComponent, ColumnMenuPositionComponent, ColumnMenuService, ColumnMenuSortComponent, ColumnMenuStickComponent, ColumnMenuTemplateDirective, ColumnReorderEvent, ColumnReorderService, ColumnResizingService, ColumnStickyChangeEvent, ColumnVisibilityChangeEvent, ColumnsContainer, CommandColumnComponent, ContainsFilterOperatorComponent, ContextService, CustomMessagesComponent, DEFAULT_AI_REQUEST_OPTIONS, DEFAULT_SCROLLER_FACTORY, DataBindingDirective, DateFilterCellComponent, DateFilterComponent, DateFilterMenuComponent, DateFilterMenuInputComponent, DetailCollapseEvent, DetailExpandEvent, DetailTemplateDirective, DetailsService, DoesNotContainFilterOperatorComponent, DomEventsService, DragAndDropService, DragHintService, DropCueService, EditCommandDirective, EditCommandToolbarDirective, EditService as EditServiceClass, EditTemplateDirective, EditingDirectiveBase, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, ExcelCommandDirective, ExcelCommandToolbarDirective, ExcelComponent, ExcelExportEvent, ExcelModule, ExcelService, ExpandDetailsDirective, ExpandGroupDirective, ExternalEditingDirective, FieldAccessorPipe, FilterCellComponent, FilterCellHostDirective, FilterCellOperatorsComponent, FilterCellTemplateDirective, FilterCellWrapperComponent, FilterCommandToolbarDirective, FilterInputDirective, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuDropDownListDirective, FilterMenuHostDirective, FilterMenuInputWrapperComponent, FilterMenuTemplateDirective, FilterRowComponent, FilterService, FocusRoot, FocusableDirective, FooterComponent, FooterTemplateDirective, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, GridClipboardDirective, GridComponent, GridModule, GridSpacerComponent, GridTableDirective, GridToolbarAIResponseErrorEvent, GridToolbarAIResponseSuccessEvent, GridToolbarFocusableDirective, GridToolbarNavigationService, GroupCommandToolbarDirective, GroupFooterTemplateDirective, GroupHeaderColumnTemplateDirective, GroupHeaderComponent, GroupHeaderTemplateDirective, GroupInfoService, GroupPanelComponent, GroupsService, HeaderComponent, HeaderTemplateDirective, HighlightDirective, IdService, InCellEditingDirective, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, KENDO_GRID, KENDO_GRID_BODY_EXPORTS, KENDO_GRID_COLUMN_DRAGANDDROP, KENDO_GRID_COLUMN_MENU_DECLARATIONS, KENDO_GRID_COLUMN_MENU_EXPORTS, KENDO_GRID_DECLARATIONS, KENDO_GRID_EXCEL_EXPORT, KENDO_GRID_EXPORTS, KENDO_GRID_FILTER_MENU, KENDO_GRID_FILTER_MENU_EXPORTS, KENDO_GRID_FILTER_OPERATORS, KENDO_GRID_FILTER_ROW, KENDO_GRID_FILTER_ROW_EXPORTS, KENDO_GRID_FILTER_SHARED, KENDO_GRID_FOOTER_EXPORTS, KENDO_GRID_GROUP_EXPORTS, KENDO_GRID_HEADER_EXPORTS, KENDO_GRID_PDF_EXPORT, KENDO_GRID_SHARED, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, ListComponent, LoadingComponent, LoadingTemplateDirective, LocalDataChangesService, LogicalCellDirective, LogicalRowDirective, MenuTabbingService, NavigationService, NoRecordsTemplateDirective, NotEqualFilterOperatorComponent, NumericFilterCellComponent, NumericFilterComponent, NumericFilterMenuComponent, NumericFilterMenuInputComponent, PDFCommandDirective, PDFCommandToolbarDirective, PDFComponent, PDFMarginComponent, PDFModule, PDFService, PDFTemplateDirective, PopupCloseEvent, ReactiveEditingDirective, RedoCommandToolbarDirective, RemoveCommandDirective, RemoveCommandToolbarDirective, ResizableContainerDirective, ResizeService, ResponsiveService, RowDragHandleTemplateDirective, RowDragHintTemplateDirective, RowEditingDirectiveBase, RowReorderColumnComponent, RowReorderService, SaveCommandDirective, SaveCommandToolbarDirective, ScrollRequestService, ScrollSyncService, SelectAllCheckboxDirective, SelectAllToolbarToolComponent, SelectionCheckboxDirective, SelectionDirective, SelectionService, SinglePopupService, SizingOptionsService, Skip, SortCommandToolbarDirective, SortService, SpanColumnComponent, StartsWithFilterOperatorComponent, StatusBarTemplateDirective, StringFilterCellComponent, StringFilterComponent, StringFilterMenuComponent, StringFilterMenuInputComponent, SuspendService, TableBodyComponent, TableDirective, TemplateEditingDirective, ToolbarComponent, ToolbarTemplateDirective, UndoCommandToolbarDirective, UndoRedoDirective, UndoRedoEvent, convertDateStringsInFilter, defaultTrackBy, hasFilterMenu, hasFilterRow, isDateField, isFilterable };
|
|
37725
37645
|
|