igniteui-angular 20.1.25 → 20.1.26

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.
@@ -1291,7 +1291,7 @@ class DefaultMergeStrategy {
1291
1291
  index++;
1292
1292
  continue;
1293
1293
  }
1294
- const recToUpdateData = recData ?? { recordRef: grid.isGhostRecord(rec) ? rec.recordRef : rec, cellMergeMeta: new Map(), ghostRecord: rec.ghostRecord };
1294
+ const recToUpdateData = recData ?? { recordRef: grid.isGhostRecord(rec) ? rec.recordRef : rec, cellMergeMeta: new Map(), ghostRecord: rec.ghostRecord, index: index };
1295
1295
  recToUpdateData.cellMergeMeta.set(field, { rowSpan: 1, childRecords: [] });
1296
1296
  if (prev && comparer.call(this, prev.recordRef, recToUpdateData.recordRef, field, isDate, isTime) && prev.ghostRecord === recToUpdateData.ghostRecord) {
1297
1297
  const root = prev.cellMergeMeta.get(field)?.root ?? prev;
@@ -16499,6 +16499,9 @@ class IgxForOfDirective extends IgxForOfToken {
16499
16499
  this._sizesCache = [];
16500
16500
  this._differ = null;
16501
16501
  this.individualSizeCache = [];
16502
+ /**
16503
+ * @hidden
16504
+ */
16502
16505
  /** Internal track for scroll top that is being virtualized */
16503
16506
  this._virtScrollPosition = 0;
16504
16507
  /** If the next onScroll event is triggered due to internal setting of scrollTop */
@@ -16931,7 +16934,7 @@ class IgxForOfDirective extends IgxForOfToken {
16931
16934
  const maxVirtScrollTop = this._virtSize - containerSize;
16932
16935
  this._bScrollInternal = true;
16933
16936
  this._virtScrollPosition = maxVirtScrollTop;
16934
- this.scrollPosition = maxVirtScrollTop;
16937
+ this.scrollPosition = maxVirtScrollTop / this._virtRatio;
16935
16938
  return;
16936
16939
  }
16937
16940
  if (this._adjustToIndex) {
@@ -17491,11 +17494,13 @@ class IgxForOfDirective extends IgxForOfToken {
17491
17494
  let currentScroll = this.scrollPosition;
17492
17495
  if (this._virtRatio !== 1) {
17493
17496
  this._calcVirtualScrollPosition(this.scrollPosition);
17494
- currentScroll = this._virtScrollPosition;
17497
+ scrollOffset = this.fixedUpdateAllElements(this._virtScrollPosition);
17498
+ }
17499
+ else {
17500
+ const scroll = this.scrollComponent.nativeElement;
17501
+ scrollOffset = scroll && this.scrollComponent.size ?
17502
+ currentScroll - this.sizesCache[this.state.startIndex] : 0;
17495
17503
  }
17496
- const scroll = this.scrollComponent.nativeElement;
17497
- scrollOffset = scroll && this.scrollComponent.size ?
17498
- currentScroll - this.sizesCache[this.state.startIndex] : 0;
17499
17504
  const dir = this.igxForScrollOrientation === 'horizontal' ? 'left' : 'top';
17500
17505
  this.dc.instance._viewContainer.element.nativeElement.style[dir] = -(scrollOffset) + 'px';
17501
17506
  }
@@ -29916,7 +29921,9 @@ class IgxGridPinningActionsComponent extends IgxGridActionsBaseDirective {
29916
29921
  const context = this.strip.context;
29917
29922
  const grid = context.grid;
29918
29923
  grid.scrollTo(context.data, 0);
29919
- this.strip.hide();
29924
+ if (this.asMenuItems) {
29925
+ this.strip.hide();
29926
+ }
29920
29927
  }
29921
29928
  registerSVGIcons() {
29922
29929
  if (!this.isRow(this.strip.context)) {
@@ -64954,10 +64961,15 @@ class IgxGridNavigationService {
64954
64961
  this.grid.selectionService.keyboardStateOnKeydown(this.activeNode, shift, shift && key === 'tab');
64955
64962
  }
64956
64963
  const position = this.getNextPosition(this.activeNode.row, this.activeNode.column, key, shift, ctrl, event);
64964
+ const shouldNotifyVirtualizedKeyboardSelection = ctrl && (key === 'arrowup' || key === 'up' || key === 'arrowdown' || key === 'down') &&
64965
+ this.shouldPerformVerticalScroll(position.rowIndex, position.colIndex);
64957
64966
  if (NAVIGATION_KEYS.has(key)) {
64958
64967
  event.preventDefault();
64959
64968
  this.navigateInBody(position.rowIndex, position.colIndex, (obj) => {
64960
64969
  obj.target.activate(event);
64970
+ if (shouldNotifyVirtualizedKeyboardSelection) {
64971
+ this.grid.notifyChanges();
64972
+ }
64961
64973
  });
64962
64974
  }
64963
64975
  }
@@ -68547,7 +68559,7 @@ class IgxGridBaseDirective {
68547
68559
  }
68548
68560
  getMergeCellOffset(rowData) {
68549
68561
  const index = rowData.dataIndex;
68550
- let offset = this.verticalScrollContainer.scrollPosition - this.verticalScrollContainer.getScrollForIndex(index);
68562
+ let offset = this.verticalScrollContainer._virtScrollPosition - this.verticalScrollContainer.getScrollForIndex(index);
68551
68563
  if (this.hasPinnedRecords && this.isRowPinningToTop) {
68552
68564
  offset -= this.pinnedRowHeight;
68553
68565
  }
@@ -68703,7 +68715,7 @@ class IgxGridBaseDirective {
68703
68715
  this.cdr.detectChanges();
68704
68716
  });
68705
68717
  this.verticalScrollContainer.contentSizeChange.pipe(filter(() => !this._init), throttleTime(30), destructor).subscribe(() => {
68706
- this.notifyChanges(true);
68718
+ this.onContentSizeChange();
68707
68719
  });
68708
68720
  this.verticalScrollContainer.chunkPreload.pipe(filter(() => !this._init), destructor).subscribe(() => {
68709
68721
  this.updateMergedData();
@@ -68873,6 +68885,11 @@ class IgxGridBaseDirective {
68873
68885
  this.paginationComponents.changes.pipe(takeUntil(this.destroy$)).subscribe(() => {
68874
68886
  this.setUpPaginator();
68875
68887
  });
68888
+ this.actionStripComponents.changes.pipe(takeUntil(this.destroy$)).subscribe(() => {
68889
+ if (this.actionStrip) {
68890
+ this.actionStrip.menuOverlaySettings.outlet = this.outlet;
68891
+ }
68892
+ });
68876
68893
  if (this.actionStrip) {
68877
68894
  this.actionStrip.menuOverlaySettings.outlet = this.outlet;
68878
68895
  }
@@ -71740,18 +71757,21 @@ class IgxGridBaseDirective {
71740
71757
  if (!this._height) {
71741
71758
  return null;
71742
71759
  }
71760
+ const styles = this.document.defaultView.getComputedStyle(this.nativeElement);
71743
71761
  const actualTheadRow = this.getTheadRowHeight();
71744
71762
  const footerHeight = this.getFooterHeight();
71745
71763
  const toolbarHeight = this.getToolbarHeight();
71746
71764
  const pagingHeight = this.getPagingFooterHeight();
71747
71765
  const groupAreaHeight = this.getGroupAreaHeight();
71748
71766
  const scrHeight = this.getComputedHeight(this.scr.nativeElement);
71767
+ const borderTop = parseFloat(styles.getPropertyValue('border-top-width')) || 0;
71768
+ const borderBottom = parseFloat(styles.getPropertyValue('border-bottom-width')) || 0;
71749
71769
  const renderedHeight = toolbarHeight + actualTheadRow +
71750
71770
  footerHeight + pagingHeight + groupAreaHeight +
71751
- scrHeight;
71771
+ scrHeight + borderTop + borderBottom;
71752
71772
  let gridHeight = 0;
71753
71773
  if (this.isPercentHeight) {
71754
- const computed = this.document.defaultView.getComputedStyle(this.nativeElement).getPropertyValue('height');
71774
+ const computed = styles.getPropertyValue('height');
71755
71775
  const autoSize = this._shouldAutoSize(renderedHeight);
71756
71776
  if (autoSize || computed.indexOf('%') !== -1) {
71757
71777
  const bodyHeight = this.getDataBasedBodyHeight();
@@ -72264,9 +72284,16 @@ class IgxGridBaseDirective {
72264
72284
  });
72265
72285
  this.disableTransitions = false;
72266
72286
  this.hideOverlays();
72267
- this.actionStrip?.hide();
72268
- if (this.actionStrip) {
72269
- this.actionStrip.context = null;
72287
+ const context = this.actionStrip?.context;
72288
+ const contextEl = context?.element?.nativeElement;
72289
+ const keepActionStrip = !!context?.pinned &&
72290
+ !!contextEl?.isConnected &&
72291
+ !this.hasMenuPinningActions();
72292
+ if (!keepActionStrip) {
72293
+ if (this.actionStrip) {
72294
+ this.actionStrip.hide();
72295
+ this.actionStrip.context = null;
72296
+ }
72270
72297
  }
72271
72298
  const args = {
72272
72299
  direction: 'vertical',
@@ -72275,6 +72302,17 @@ class IgxGridBaseDirective {
72275
72302
  };
72276
72303
  this.gridScroll.emit(args);
72277
72304
  }
72305
+ hasMenuPinningActions() {
72306
+ const strip = this.actionStrip;
72307
+ const actionButtons = strip?.actionButtons;
72308
+ if (!actionButtons?.length) {
72309
+ return false;
72310
+ }
72311
+ return actionButtons
72312
+ .toArray()
72313
+ .some((button) => button instanceof IgxGridPinningActionsComponent &&
72314
+ button.asMenuItems);
72315
+ }
72278
72316
  horizontalScrollHandler(event) {
72279
72317
  const scrollLeft = event.target.scrollLeft;
72280
72318
  this.headerContainer.onHScroll(scrollLeft);
@@ -72617,6 +72655,9 @@ class IgxGridBaseDirective {
72617
72655
  return false;
72618
72656
  return Object.keys(oldData[0]).join() !== Object.keys(newData[0]).join();
72619
72657
  }
72658
+ onContentSizeChange() {
72659
+ this.notifyChanges(true);
72660
+ }
72620
72661
  /**
72621
72662
  * Clears the current navigation service active node
72622
72663
  */
@@ -72650,16 +72691,15 @@ class IgxGridBaseDirective {
72650
72691
  // recalc merged data
72651
72692
  if (this.columnsToMerge.length > 0) {
72652
72693
  const startIndex = this.verticalScrollContainer.state.startIndex;
72653
- const prevDataView = this.verticalScrollContainer.igxForOf?.slice(0, startIndex);
72654
72694
  const data = [];
72655
- for (let index = 0; index < startIndex; index++) {
72656
- const rec = prevDataView[index];
72657
- if (rec.cellMergeMeta &&
72658
- // index + maxRowSpan is within view
72659
- startIndex < (index + Math.max(...rec.cellMergeMeta.values().toArray().map(x => x.rowSpan)))) {
72660
- const visibleIndex = this.isRowPinningToTop ? index + this.pinnedRecordsCount : index;
72661
- data.push({ record: rec, index: visibleIndex, dataIndex: index });
72662
- }
72695
+ const rec = this.verticalScrollContainer.igxForOf[startIndex];
72696
+ if (rec && rec.cellMergeMeta) {
72697
+ this.columnsToMerge.forEach((col) => {
72698
+ const root = rec.cellMergeMeta?.get(col.field)?.root;
72699
+ if (root) {
72700
+ data.push({ record: root, index: root.index, dataIndex: root.index });
72701
+ }
72702
+ });
72663
72703
  }
72664
72704
  this._mergedDataInView = data;
72665
72705
  this.notifyChanges();
@@ -74783,7 +74823,7 @@ class IgxGridUnmergeActivePipe {
74783
74823
  }
74784
74824
  let result = cloneArray(collection);
74785
74825
  uniqueRoots.forEach(x => {
74786
- const index = collection.indexOf(x);
74826
+ const index = x.index;
74787
74827
  const colKeys = [...x.cellMergeMeta.keys()];
74788
74828
  const cols = colsToMerge.filter(col => colKeys.indexOf(col.field) !== -1);
74789
74829
  for (const col of cols) {
@@ -81785,6 +81825,10 @@ class IgxPivotGridComponent extends IgxGridBaseDirective {
81785
81825
  buildDataView(data) {
81786
81826
  this._dataView = data;
81787
81827
  }
81828
+ onContentSizeChange() {
81829
+ super.onContentSizeChange();
81830
+ this.updateDefaultRowHeight();
81831
+ }
81788
81832
  /**
81789
81833
  * @hidden @internal
81790
81834
  */
@@ -89254,9 +89298,11 @@ class IgxHierarchicalGridComponent extends IgxHierarchicalGridBaseDirective {
89254
89298
  get actionStrip() {
89255
89299
  return this.parentIsland ? this.parentIsland.actionStrip : super.actionStrip;
89256
89300
  }
89301
+ /** @hidden @internal */
89257
89302
  get advancedFilteringExpressionsTree() {
89258
89303
  return super.advancedFilteringExpressionsTree;
89259
89304
  }
89305
+ /** @hidden @internal */
89260
89306
  set advancedFilteringExpressionsTree(value) {
89261
89307
  if (!this._hGridSchema) {
89262
89308
  this._hGridSchema = this.generateSchema();