Skip to content

Commit bb7916f

Browse files
authored
Merge pull request #16135 from IgniteUI/rivanova/fix-16057-20.0.x
fix(column): use minWidth when sizing columns - 20.0.x
2 parents 5b2242a + 0aa93a3 commit bb7916f

File tree

5 files changed

+55
-14
lines changed

5 files changed

+55
-14
lines changed

projects/igniteui-angular/src/lib/grids/columns/column.component.ts

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -968,8 +968,9 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy, ColumnTy
968968
*/
969969
public get minWidthPx() {
970970
const gridAvailableSize = this.grid.calcWidth;
971-
const isPercentageWidth = this.minWidth && typeof this.minWidth === 'string' && this.minWidth.indexOf('%') !== -1;
972-
return isPercentageWidth ? parseFloat(this.minWidth) / 100 * gridAvailableSize : parseFloat(this.minWidth);
971+
const minWidth = this.minWidth || this.defaultMinWidth;
972+
const isPercentageWidth = minWidth && typeof minWidth === 'string' && minWidth.indexOf('%') !== -1;
973+
return isPercentageWidth ? parseFloat(minWidth) / 100 * gridAvailableSize : parseFloat(minWidth);
973974
}
974975

975976
/**
@@ -986,8 +987,9 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy, ColumnTy
986987
*/
987988
public get minWidthPercent() {
988989
const gridAvailableSize = this.grid.calcWidth;
989-
const isPercentageWidth = this.minWidth && typeof this.minWidth === 'string' && this.minWidth.indexOf('%') !== -1;
990-
return isPercentageWidth ? parseFloat(this.minWidth) : parseFloat(this.minWidth) / gridAvailableSize * 100;
990+
const minWidth = this.minWidth || this.defaultMinWidth;
991+
const isPercentageWidth = minWidth && typeof minWidth === 'string' && minWidth.indexOf('%') !== -1;
992+
return isPercentageWidth ? parseFloat(minWidth) : parseFloat(minWidth) / gridAvailableSize * 100;
991993
}
992994

993995

@@ -1015,7 +1017,7 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy, ColumnTy
10151017
this.grid.notifyChanges(true);
10161018
}
10171019
public get minWidth(): string {
1018-
return !this._defaultMinWidth ? this.defaultMinWidth : this._defaultMinWidth;
1020+
return this._defaultMinWidth;
10191021
}
10201022

10211023
/** @hidden @internal **/
@@ -2647,8 +2649,15 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy, ColumnTy
26472649
const currentCalcWidth = this.defaultWidth || this.grid.getPossibleColumnWidth();
26482650
this._calcWidth = this.getConstrainedSizePx(currentCalcWidth);
26492651
} else {
2650-
const currentCalcWidth = parseFloat(this.width);
2651-
this._calcWidth =this.getConstrainedSizePx(currentCalcWidth);
2652+
let possibleColumnWidth = '';
2653+
if (!this.widthSetByUser && this.userSetMinWidthPx && this.userSetMinWidthPx < this.grid.minColumnWidth) {
2654+
possibleColumnWidth = this.defaultWidth = this.grid.getPossibleColumnWidth(null, this.userSetMinWidthPx);
2655+
} else {
2656+
possibleColumnWidth = this.width;
2657+
}
2658+
2659+
const currentCalcWidth = parseFloat(possibleColumnWidth);
2660+
this._calcWidth = this.getConstrainedSizePx(currentCalcWidth);
26522661
}
26532662
this.calcPixelWidth = parseFloat(this._calcWidth);
26542663
}

projects/igniteui-angular/src/lib/grids/common/grid.interface.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1200,7 +1200,7 @@ export interface GridType extends IGridDataBindable {
12001200
refreshSearch(): void;
12011201
getDefaultExpandState(record: any): boolean;
12021202
trackColumnChanges(index: number, column: any): any;
1203-
getPossibleColumnWidth(): string;
1203+
getPossibleColumnWidth(baseWidth?: number, minColumnWidth?: number): string;
12041204
resetHorizontalVirtualization(): void;
12051205
hasVerticalScroll(): boolean;
12061206
getVisibleContentHeight(): number;

projects/igniteui-angular/src/lib/grids/grid-base.directive.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5484,7 +5484,7 @@ export abstract class IgxGridBaseDirective implements GridType,
54845484
/**
54855485
* @hidden @internal
54865486
*/
5487-
public getPossibleColumnWidth(baseWidth: number = null) {
5487+
public getPossibleColumnWidth(baseWidth: number = null, minColumnWidth: number = null) {
54885488
let computedWidth;
54895489
if (baseWidth !== null) {
54905490
computedWidth = baseWidth;
@@ -5533,9 +5533,11 @@ export abstract class IgxGridBaseDirective implements GridType,
55335533
}
55345534
computedWidth -= this.featureColumnsWidth();
55355535

5536+
const minColWidth = minColumnWidth || this.minColumnWidth;
5537+
55365538
const columnWidth = !Number.isFinite(sumExistingWidths) ?
5537-
Math.max(computedWidth / columnsToSize, this.minColumnWidth) :
5538-
Math.max((computedWidth - sumExistingWidths) / columnsToSize, this.minColumnWidth);
5539+
Math.max(computedWidth / columnsToSize, minColWidth) :
5540+
Math.max((computedWidth - sumExistingWidths) / columnsToSize, minColWidth);
55395541

55405542
return columnWidth + 'px';
55415543
}

projects/igniteui-angular/src/lib/grids/grid/column-resizing.spec.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ describe('IgxGrid - Deferred Column Resizing #grid', () => {
2929
GridFeaturesComponent,
3030
LargePinnedColGridComponent,
3131
NullColumnsComponent,
32+
MinWidthColumnsComponent,
3233
ColGridComponent,
3334
ColPercentageGridComponent
3435
]
@@ -902,6 +903,18 @@ describe('IgxGrid - Deferred Column Resizing #grid', () => {
902903
expect(headers[headers.length - 1].nativeElement.innerText).toEqual("ReleaseDate");
903904
expect(firstRowCells.length).toEqual(11);
904905
}));
906+
907+
it('should use user-provided `minWidth` as default min column width to size columns - #16057.', fakeAsync(() => {
908+
const fixture = TestBed.createComponent(MinWidthColumnsComponent);
909+
fixture.detectChanges();
910+
911+
const grid = fixture.componentInstance.grid;
912+
913+
expect(grid.columnList.get(0).width).toEqual('130px');
914+
expect(grid.columnList.get(1).width).toEqual('90px');
915+
expect(grid.columnList.get(2).width).toEqual('90px');
916+
expect(grid.columnList.get(3).width).toEqual('90px');
917+
}));
905918
});
906919

907920
describe('Resizer tests: ', () => {
@@ -1060,6 +1073,23 @@ export class NullColumnsComponent implements OnInit {
10601073
}
10611074
}
10621075

1076+
@Component({
1077+
template: GridTemplateStrings.declareGrid(`width="400px" height="200px"`, ``, `<igx-column [field]="'ID'" [width]="'130px'" [resizable]="true"></igx-column>
1078+
<igx-column [field]="'CompanyName'" [minWidth]="'50px'" [resizable]="true"></igx-column>
1079+
<igx-column [field]="'ContactName'" [minWidth]="'50px'" [resizable]="true"></igx-column>
1080+
<igx-column [field]="'ContactTitle'" [minWidth]="'50px'" [resizable]="true"></igx-column>`),
1081+
imports: [IgxGridComponent, IgxColumnComponent]
1082+
})
1083+
export class MinWidthColumnsComponent implements OnInit {
1084+
@ViewChild(IgxGridComponent, { static: true }) public grid: IgxGridComponent;
1085+
1086+
public data = [];
1087+
1088+
public ngOnInit(): void {
1089+
this.data = SampleTestData.contactInfoData();
1090+
}
1091+
}
1092+
10631093
@Component({
10641094
template: GridTemplateStrings.declareGrid(`width="400px" height="600px" [allowFiltering]="true"`, ``, `<igx-column [field]="'Items'" [width]="'40px'" dataType="string" [filterable]="true"></igx-column>
10651095
<igx-column [field]="'ID'" [width]="'50px'" [header]="'ID'" [filterable]="true"></igx-column>

projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,7 @@ describe('IgxPivotGrid #pivotGrid', () => {
531531
expect(pivotGrid.gridSize).toBe(Size.Small);
532532
const dimensionContents = fixture.debugElement.queryAll(By.css('.igx-grid__tbody-pivot-dimension'));
533533
let rowHeaders = dimensionContents[0].queryAll(By.directive(IgxPivotRowDimensionHeaderGroupComponent));
534-
expect(rowHeaders[0].componentInstance.column.minWidth).toBe(minWidthSupercompact);
534+
expect(rowHeaders[0].componentInstance.column.defaultMinWidth).toBe(minWidthSupercompact);
535535
expect(pivotGrid.rowList.first.cells.first.nativeElement.offsetHeight).toBe(cellHeightSuperCompact);
536536

537537
pivotGrid.superCompactMode = false;
@@ -543,7 +543,7 @@ describe('IgxPivotGrid #pivotGrid', () => {
543543

544544
expect(pivotGrid.gridSize).toBe(Size.Large);
545545
rowHeaders = dimensionContents[0].queryAll(By.directive(IgxPivotRowDimensionHeaderGroupComponent));
546-
expect(rowHeaders[0].componentInstance.column.minWidth).toBe(minWidthComf);
546+
expect(rowHeaders[0].componentInstance.column.defaultMinWidth).toBe(minWidthComf);
547547
expect(pivotGrid.rowList.first.cells.first.nativeElement.offsetHeight).toBe(cellHeightComf);
548548
}));
549549

@@ -2411,7 +2411,7 @@ describe('IgxPivotGrid #pivotGrid', () => {
24112411
fixture.detectChanges();
24122412

24132413
rowHeaders = dimensionContents[0].queryAll(By.directive(IgxPivotRowDimensionHeaderGroupComponent));
2414-
const minWdith = parseFloat(rowHeaders[0].componentInstance.column.minWidth);
2414+
const minWdith = parseFloat(rowHeaders[0].componentInstance.column.defaultMinWidth);
24152415
expect(parseFloat(rowHeaders[0].componentInstance.column.width)).toEqual(minWdith);
24162416
expect(parseFloat(rowHeaders[3].componentInstance.column.width)).toEqual(minWdith);
24172417

0 commit comments

Comments
 (0)