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: `