diff --git a/projects/igniteui-angular/grids/core/src/columns/column.component.ts b/projects/igniteui-angular/grids/core/src/columns/column.component.ts index d22c329d338..373336c8d42 100644 --- a/projects/igniteui-angular/grids/core/src/columns/column.component.ts +++ b/projects/igniteui-angular/grids/core/src/columns/column.component.ts @@ -2682,7 +2682,7 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy, ColumnTy } else if (this.minWidth && newSize <= this.userSetMinWidthPx) { this.widthConstrained = true; return this.userSetMinWidthPx; - } else if (!this.minWidth && (!this.widthSetByUser || this.width === 'fit-content') && !this.grid.columnWidthSetByUser && (!newSize || newSize <= this.grid.minColumnWidth)) { + } else if ((this.columnLayout || !this.columnGroup) && !this.minWidth && (!this.widthSetByUser || this.width === 'fit-content') && !this.grid.columnWidthSetByUser && (!newSize || newSize <= this.grid.minColumnWidth)) { return this.grid.minColumnWidth; } else { this.widthConstrained = false; diff --git a/projects/igniteui-angular/grids/grid/src/grid-collapsible-columns.spec.ts b/projects/igniteui-angular/grids/grid/src/grid-collapsible-columns.spec.ts index f4fc2273286..a77bbb04f24 100644 --- a/projects/igniteui-angular/grids/grid/src/grid-collapsible-columns.spec.ts +++ b/projects/igniteui-angular/grids/grid/src/grid-collapsible-columns.spec.ts @@ -4,7 +4,8 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { CollapsibleColumnGroupTestComponent, CollapsibleGroupsTemplatesTestComponent, - CollapsibleGroupsDynamicColComponent + CollapsibleGroupsDynamicColComponent, + CollapsibleColumnGroupWithExplicitWidthsComponent } from '../../../test-utils/grid-samples.spec'; import { GridFunctions } from '../../../test-utils/grid-functions.spec'; import { UIInteractions, wait } from '../../../test-utils/ui-interactions.spec'; @@ -12,6 +13,46 @@ import { DropPosition } from 'igniteui-angular/grids/core'; import { IgxColumnGroupComponent } from 'igniteui-angular/grids/core'; import { SortingDirection } from 'igniteui-angular/core'; +describe('IgxGrid - collapsible column group with explicit widths regression #17042 #grid', () => { + let fixture; + let grid: IgxGridComponent; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + NoopAnimationsModule, + CollapsibleColumnGroupWithExplicitWidthsComponent + ] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(CollapsibleColumnGroupWithExplicitWidthsComponent); + fixture.detectChanges(); + grid = fixture.componentInstance.grid; + }); + + it('collapsed column group calcPixelWidth should equal the sum of visible children calcPixelWidth when columns have explicit widths smaller than minColumnWidth', () => { + const colGroup = grid.getColumnByName('ID').parent as IgxColumnGroupComponent; + const visibleChild = grid.getColumnByName('ID'); + + // Group is collapsed by default (expanded=false in the template) + expect(colGroup.collapsible).toBeTrue(); + expect(colGroup.expanded).toBeFalse(); + + // The visible child has explicit width 100px, which is less than the grid's MINIMUM_COLUMN_WIDTH (136px). + // The column group's calcPixelWidth should equal its visible child's calcPixelWidth, + // NOT be inflated to the grid's minimum column width. + const visibleChildWidth = visibleChild.calcPixelWidth; + const groupWidth = colGroup.calcPixelWidth; + + expect(visibleChildWidth).toBe(100); + expect(groupWidth).toBe(visibleChildWidth, + `Column group calcPixelWidth (${groupWidth}) should equal the visible child calcPixelWidth (${visibleChildWidth}). ` + + `The group header must not be inflated by minColumnWidth because that causes header/cell misalignment.`); + }); +}); + describe('IgxGrid - multi-column headers #grid', () => { let contactInf; let countryInf; diff --git a/projects/igniteui-angular/test-utils/grid-samples.spec.ts b/projects/igniteui-angular/test-utils/grid-samples.spec.ts index 05685a5cd69..4f1d0a558ef 100644 --- a/projects/igniteui-angular/test-utils/grid-samples.spec.ts +++ b/projects/igniteui-angular/test-utils/grid-samples.spec.ts @@ -2009,6 +2009,34 @@ export class CollapsibleGroupsDynamicColComponent { } } +/** + * Test component for verifying that a collapsed collapsible column group with explicit column widths + * smaller than the grid's MINIMUM_COLUMN_WIDTH does not cause header/cell misalignment. + * Regression test for: https://github.com/IgniteUI/igniteui-angular/issues/17042 + */ +@Component({ + template: ` + + + + + + + + + + + + + `, + imports: [IgxGridComponent, IgxColumnComponent, IgxColumnGroupComponent] +}) +export class CollapsibleColumnGroupWithExplicitWidthsComponent { + @ViewChild(IgxGridComponent, { read: IgxGridComponent, static: true }) + public grid: IgxGridComponent; + public data = SampleTestData.contactInfoDataFull(); +} + @Component({ template: `