From 50d906b3e3bb841917bafc05bc65ae7c01a57705 Mon Sep 17 00:00:00 2001 From: Karl Seamon Date: Wed, 11 Dec 2024 16:19:05 -0500 Subject: [PATCH] fix(cdk-experimental/column-resize): Previous size was being sent for persistance rather than newly updated size in non-live resize mode. (#30161) --- .../column-resize/overlay-handle.ts | 5 +++- .../column-resize/column-resize.spec.ts | 25 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/cdk-experimental/column-resize/overlay-handle.ts b/src/cdk-experimental/column-resize/overlay-handle.ts index 5ea1985a5b05..991d6e2172e6 100644 --- a/src/cdk-experimental/column-resize/overlay-handle.ts +++ b/src/cdk-experimental/column-resize/overlay-handle.ts @@ -218,7 +218,10 @@ export abstract class ResizeOverlayHandle implements AfterViewInit, OnDestroy { this.updateResizeActive(false); this.ngZone.run(() => { - const sizeMessage = {columnId: this.columnDef.name, size}; + const sizeMessage = { + columnId: this.columnDef.name, + size: this._computeNewSize(size, this._cumulativeDeltaX), + }; if (completedSuccessfully) { if (!this.resizeRef.liveUpdates) { this._triggerResize(size, this._cumulativeDeltaX); diff --git a/src/material-experimental/column-resize/column-resize.spec.ts b/src/material-experimental/column-resize/column-resize.spec.ts index a6434c3b30ee..045ad22c6d82 100644 --- a/src/material-experimental/column-resize/column-resize.spec.ts +++ b/src/material-experimental/column-resize/column-resize.spec.ts @@ -691,6 +691,31 @@ describe('Material Popover Edit', () => { expect(columnId).toBe('name'); (expect(sizePx) as any).isApproximately(initialColumnWidth + 5); })); + + it('persists the user-triggered size update (live updates off)', fakeAsync(() => { + const initialColumnWidth = component.getColumnWidth(1); + + component.columnResize.liveResizeUpdates = false; + + component.triggerHoverState(); + fixture.detectChanges(); + + component.resizeColumnWithMouse(1, 5); + fixture.detectChanges(); + flush(); + + component.completeResizeWithMouseInProgress(1); + flush(); + + component.endHoverState(); + fixture.detectChanges(); + + expect(columnSizeStore.setSizeCalls.length).toBe(1); + const {tableId, columnId, sizePx} = columnSizeStore.setSizeCalls[0]; + expect(tableId).toBe('theTable'); + expect(columnId).toBe('name'); + (expect(sizePx) as any).isApproximately(initialColumnWidth + 5); + })); }); });