Skip to content

Commit 0588fb3

Browse files
authored
Merge branch 'master' into mkirova/optional-hammer-time
2 parents 804124e + 8ba4a32 commit 0588fb3

File tree

5 files changed

+61
-7
lines changed

5 files changed

+61
-7
lines changed

projects/igniteui-angular/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@
100100
"migrations": "./migrations/migration-collection.json",
101101
"packageGroup": [
102102
"igniteui-angular",
103+
"igniteui-angular-extras",
103104
"igniteui-angular-i18n"
104105
]
105106
},

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1541,7 +1541,7 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy, ColumnTy
15411541
this._visibleWhenCollapsed = value;
15421542
this.visibleWhenCollapsedChange.emit(this._visibleWhenCollapsed);
15431543
if (this.parent) {
1544-
this.parent.setExpandCollapseState();
1544+
this.parent?.setExpandCollapseState?.();
15451545
}
15461546
}
15471547

projects/igniteui-angular/src/lib/grids/state.directive.spec.ts

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { GridSelectionRange } from './common/types';
1818
import { CustomFilter } from '../test-utils/grid-samples.spec';
1919
import { IgxPaginatorComponent } from '../paginator/paginator.component';
2020
import { NgFor } from '@angular/common';
21-
import { IgxColumnComponent, IgxGridDetailTemplateDirective } from './public_api';
21+
import { IgxColumnComponent, IgxColumnGroupComponent, IgxGridDetailTemplateDirective } from './public_api';
2222

2323
/* eslint-disable max-len */
2424
describe('IgxGridState - input properties #grid', () => {
@@ -397,6 +397,32 @@ describe('IgxGridState - input properties #grid', () => {
397397
expect(grid.columnInit.emit).toHaveBeenCalledTimes(columnsStateObject.columns.length);
398398
});
399399

400+
it('setState should correctly restore grid columns state properties: collapsible and expanded', () => {
401+
const fix = TestBed.createComponent(CollapsibleColumnGroupTestComponent);
402+
fix.detectChanges();
403+
const state = fix.componentInstance.state;
404+
const grid = fix.componentInstance.grid;
405+
/* eslint-disable max-len */
406+
const initialState = '{"columns":[{"pinned":false,"sortable":false,"filterable":true,"editable":false,"sortingIgnoreCase":true,"filteringIgnoreCase":true,"headerClasses":"","headerGroupClasses":"","groupable":false,"movable":false,"hidden":false,"dataType":"string","hasSummary":false,"field":"ID","width":"100px","header":"","resizable":false,"searchable":true,"selectable":true,"parent":null,"columnGroup":false,"disableHiding":false,"disablePinning":false},{"pinned":false,"sortable":false,"filterable":true,"editable":false,"sortingIgnoreCase":true,"filteringIgnoreCase":true,"headerClasses":"","headerGroupClasses":"","groupable":false,"movable":false,"hidden":false,"dataType":"string","hasSummary":false,"width":"100px","header":"Address Information","resizable":false,"searchable":true,"selectable":true,"parent":null,"columnGroup":true,"disableHiding":false,"disablePinning":false,"collapsible":true,"expanded":true},{"pinned":false,"sortable":false,"filterable":true,"editable":false,"sortingIgnoreCase":true,"filteringIgnoreCase":true,"headerClasses":"","headerGroupClasses":"","groupable":false,"movable":false,"hidden":true,"dataType":"string","hasSummary":false,"field":"City","width":"100px","header":"","resizable":false,"searchable":true,"selectable":true,"parent":"Address Information","columnGroup":false,"disableHiding":false,"disablePinning":false,"visibleWhenCollapsed":true},{"pinned":false,"sortable":false,"filterable":true,"editable":false,"sortingIgnoreCase":true,"filteringIgnoreCase":true,"headerClasses":"","headerGroupClasses":"","groupable":false,"movable":false,"hidden":false,"dataType":"string","hasSummary":false,"field":"Address","width":"100px","header":"","resizable":false,"searchable":true,"selectable":true,"parent":"Address Information","columnGroup":false,"disableHiding":false,"disablePinning":false,"visibleWhenCollapsed":false}]}'
407+
const newState = `{"columns":[{"pinned":false,"sortable":false,"filterable":true,"editable":false,"sortingIgnoreCase":true,"filteringIgnoreCase":true,"headerClasses":"","headerGroupClasses":"","groupable":false,"movable":false,"hidden":false,"dataType":"string","hasSummary":false,"field":"ID","width":"100px","header":"","resizable":false,"searchable":true,"selectable":true,"parent":null,"columnGroup":false,"disableHiding":false,"disablePinning":false},{"pinned":false,"sortable":false,"filterable":true,"editable":false,"sortingIgnoreCase":true,"filteringIgnoreCase":true,"headerClasses":"","headerGroupClasses":"","groupable":false,"movable":false,"hidden":false,"dataType":"string","hasSummary":false,"width":"100px","header":"Address Information","resizable":false,"searchable":true,"selectable":true,"parent":null,"columnGroup":true,"disableHiding":false,"disablePinning":false,"collapsible":true,"expanded":false},{"pinned":false,"sortable":false,"filterable":true,"editable":false,"sortingIgnoreCase":true,"filteringIgnoreCase":true,"headerClasses":"","headerGroupClasses":"","groupable":false,"movable":false,"hidden":true,"dataType":"string","hasSummary":false,"field":"City","width":"100px","header":"","resizable":false,"searchable":true,"selectable":true,"parent":"Address Information","columnGroup":false,"disableHiding":false,"disablePinning":false,"visibleWhenCollapsed":true},{"pinned":false,"sortable":false,"filterable":true,"editable":false,"sortingIgnoreCase":true,"filteringIgnoreCase":true,"headerClasses":"","headerGroupClasses":"","groupable":false,"movable":false,"hidden":false,"dataType":"string","hasSummary":false,"field":"Address","width":"100px","header":"","resizable":false,"searchable":true,"selectable":true,"parent":"Address Information","columnGroup":false,"disableHiding":false,"disablePinning":false,"visibleWhenCollapsed":false}]}`
408+
/* eslint-enable max-len */
409+
const columnsStateObject = JSON.parse(newState);
410+
let gridState = state.getState(true, 'columns');
411+
expect(gridState).toBe(initialState);
412+
// 1. initial state collapsible:true, expanded: true;
413+
// 2. new state collapsible:true, expanded: false after restoration
414+
415+
state.setState(columnsStateObject); // set new state - resored state
416+
gridState = state.getState(false, 'columns') as IGridState;
417+
HelperFunctions.verifyColumns(columnsStateObject.columns, gridState);
418+
gridState = state.getState(true, 'columns');
419+
fix.detectChanges();
420+
expect(gridState).toBe(newState);
421+
422+
const addressInfoGroup = grid.columns.find(c => c.header === "Address Information");
423+
expect(addressInfoGroup.collapsible).toBe(true);
424+
expect(addressInfoGroup.expanded).toBe(false);
425+
});
400426
it('setState should correctly restore grid paging state from string', () => {
401427
const fix = TestBed.createComponent(IgxGridStateComponent);
402428
fix.detectChanges();
@@ -847,5 +873,26 @@ export class IgxGridStateWithDetailsComponent {
847873

848874
public data = SampleTestData.foodProductData();
849875
}
876+
877+
@Component({
878+
template: `
879+
<igx-grid #grid [data]="data" igxGridState height="500px" width="1300px" columnWidth="100px">
880+
<igx-column field="ID"></igx-column>
881+
<igx-column-group header="Address Information" [collapsible]="true">
882+
<igx-column field="City" [visibleWhenCollapsed]="true"></igx-column>
883+
<igx-column field="Address" [visibleWhenCollapsed]="false"></igx-column>
884+
</igx-column-group>
885+
</igx-grid>
886+
`,
887+
standalone: true,
888+
imports: [IgxGridComponent, IgxColumnComponent, IgxColumnGroupComponent, IgxGridStateDirective, NgFor]
889+
})
890+
export class CollapsibleColumnGroupTestComponent {
891+
@ViewChild(IgxGridComponent, { read: IgxGridComponent, static: true })
892+
public grid: IgxGridComponent;
893+
@ViewChild(IgxGridStateDirective, { static: true })
894+
public state: IgxGridStateDirective;
895+
public data = SampleTestData.contactInfoDataFull();
896+
}
850897
/* eslint-enable max-len */
851898

projects/igniteui-angular/src/lib/grids/state.directive.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,9 @@ export interface IColumnState {
9090
parent: any;
9191
disableHiding: boolean;
9292
disablePinning: boolean;
93+
collapsible?: boolean;
94+
expanded?: boolean;
95+
visibleWhenCollapsed?: boolean;
9396
}
9497

9598
export type GridFeatures = keyof IGridStateOptions;
@@ -202,7 +205,10 @@ export class IgxGridStateDirective {
202205
parent: c.parent ? c.parent.header : null,
203206
columnGroup: c.columnGroup,
204207
disableHiding: c.disableHiding,
205-
disablePinning: c.disablePinning
208+
disablePinning: c.disablePinning,
209+
collapsible: c.columnGroup ? c.collapsible : undefined,
210+
expanded: c.columnGroup ? c.expanded : undefined,
211+
visibleWhenCollapsed: c.parent?.columnGroup ? (c as IgxColumnComponent).visibleWhenCollapsed : undefined
206212
}));
207213
return { columns: gridColumns };
208214
},

src/app/grid-state/grid-state.component.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,10 @@
5858
<igx-column [resizable]="true" field="EmployeeID" [filterable]="false"></igx-column>
5959
<igx-column-group [pinned]="false" header="Employee">
6060
<igx-column [sortable]="true" [resizable]="true" field="Country"></igx-column>
61-
<igx-column-group header="Employee Names">
61+
<igx-column-group header="Employee Names" [collapsible]="true">
6262
<igx-column [pinned]="false" [sortable]="true" [resizable]="true"
63-
field="FirstName"></igx-column>
64-
<igx-column [sortable]="true" [resizable]="true" field="LastName"></igx-column>
63+
field="FirstName" [visibleWhenCollapsed]="true"></igx-column>
64+
<igx-column [sortable]="true" [resizable]="true" field="LastName" [visibleWhenCollapsed]="false"></igx-column>
6565
</igx-column-group>
6666
</igx-column-group>
6767
<igx-column-group header="Additional Information">
@@ -243,4 +243,4 @@
243243

244244
<ng-template igxCell #activeTemplate let-column let-cell="cell">
245245
Hi I'm {{ cell.value }}
246-
</ng-template>
246+
</ng-template>

0 commit comments

Comments
 (0)