Skip to content

Commit 9948443

Browse files
authored
Merge pull request #9096 from IgniteUI/hanastasov/cond-support-nested-props-102x
Conditional support for nested data binding
2 parents 8b75bd7 + 6b43be1 commit 9948443

File tree

7 files changed

+31
-14
lines changed

7 files changed

+31
-14
lines changed

projects/igniteui-angular/src/lib/grids/api.service.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,11 @@ export class GridBaseAPIService<T extends IgxGridBaseDirective & GridType> {
156156
}
157157

158158
const data = cell.rowData;
159-
mergeObjects(data, reverseMapper(cell.column.field, args.newValue));
159+
if (cell.column.hasNestedPath) {
160+
mergeObjects(data, reverseMapper(cell.column.field, args.newValue));
161+
} else {
162+
data[cell.column.field] = args.newValue;
163+
}
160164
this.grid.crudService.row.data = data;
161165
const doneArgs = cell.createDoneEditEventArgs(args.newValue);
162166
doneArgs.rowData = data;

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,13 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy {
7676
* @memberof IgxColumnComponent
7777
*/
7878
@Input()
79-
public field: string;
79+
set field(value: string) {
80+
this._field = value;
81+
this.hasNestedPath = value?.includes('.');
82+
}
83+
get field(): string {
84+
return this._field;
85+
}
8086
/**
8187
* Sets/gets the `header` value.
8288
* ```typescript
@@ -442,6 +448,7 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy {
442448
return this.getCalcWidth();
443449
}
444450

451+
private _field: string;
445452
private _calcWidth = null;
446453
public calcPixelWidth: number;
447454
/**
@@ -1245,6 +1252,11 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy {
12451252
*/
12461253
public widthSetByUser: boolean;
12471254

1255+
/**
1256+
* @hidden
1257+
*/
1258+
public hasNestedPath: boolean;
1259+
12481260
/**
12491261
* Returns the filteringExpressionsTree of the column.
12501262
* ```typescript

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,6 @@ export interface ColumnType {
4646
parent?: ColumnType;
4747
hasLastPinnedChildColumn: boolean;
4848
pipeArgs: IColumnPipeArgs;
49+
hasNestedPath: boolean;
4950
getGridTemplate(isRow: boolean, isIE: boolean): string;
5051
}

projects/igniteui-angular/src/lib/grids/common/pipes.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -268,8 +268,8 @@ export class IgxSortActionColumnsPipe implements PipeTransform {
268268
@Pipe({ name: 'dataMapper' })
269269
export class IgxGridDataMapperPipe implements PipeTransform {
270270

271-
transform(data: any[], field: string, _: number, __: any) {
272-
return resolveNestedPath(data, field);
271+
transform(data: any[], field: string, _: number, val: any, isNestedPath: boolean) {
272+
return isNestedPath ? resolveNestedPath(data, field) : val;
273273
}
274274
}
275275

projects/igniteui-angular/src/lib/grids/grid/grid-row.component.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@
119119
[style.left]="col.rightPinnedOffset"
120120
[width]="col.getCellWidth()"
121121
[visibleColumnIndex]="col.visibleIndex"
122-
[value]="rowData | dataMapper:col.field:grid.pipeTrigger:rowData[col.field]"
122+
[value]="rowData | dataMapper:col.field:grid.pipeTrigger:rowData[col.field]:col.hasNestedPath"
123123
[cellTemplate]="col.bodyTemplate"
124124
[lastSearchInfo]="grid.lastSearchInfo"
125125
[active]="isCellActive(col.visibleIndex)"
@@ -151,7 +151,7 @@
151151
[style.flex-basis]="col.width"
152152
[width]="col.getCellWidth()"
153153
[visibleColumnIndex]="col.visibleIndex"
154-
[value]="rowData | dataMapper:col.field:grid.pipeTrigger:rowData[col.field]"
154+
[value]="rowData | dataMapper:col.field:grid.pipeTrigger:rowData[col.field]:col.hasNestedPath"
155155
[cellTemplate]="col.bodyTemplate"
156156
[lastSearchInfo]="grid.lastSearchInfo"
157157
[active]="isCellActive(col.visibleIndex)"
@@ -187,7 +187,7 @@
187187
[style.min-height.px]="cellHeight"
188188
[rowData]="rowData"
189189
[visibleColumnIndex]="col.visibleIndex"
190-
[value]="rowData | dataMapper:col.field:grid.pipeTrigger:rowData[col.field]"
190+
[value]="rowData | dataMapper:col.field:grid.pipeTrigger:rowData[col.field]:col.hasNestedPath"
191191
[cellTemplate]="col.bodyTemplate"
192192
[lastSearchInfo]="grid.lastSearchInfo"
193193
[active]="isCellActive(col.visibleIndex)"
@@ -223,7 +223,7 @@
223223
[style.min-height.px]="cellHeight"
224224
[rowData]="rowData"
225225
[visibleColumnIndex]="col.visibleIndex"
226-
[value]="rowData | dataMapper:col.field:grid.pipeTrigger:rowData[col.field]"
226+
[value]="rowData | dataMapper:col.field:grid.pipeTrigger:rowData[col.field]:col.hasNestedPath"
227227
[cellTemplate]="col.bodyTemplate"
228228
[lastSearchInfo]="grid.lastSearchInfo"
229229
[active]="isCellActive(col.visibleIndex)"

projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-row.component.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767
[style.flex-basis]="col.width"
6868
[width]="col.getCellWidth()"
6969
[visibleColumnIndex]="col.visibleIndex"
70-
[value]="rowData | dataMapper:col.field:grid.pipeTrigger:rowData[col.field]"
70+
[value]="rowData | dataMapper:col.field:grid.pipeTrigger:rowData[col.field]:col.hasNestedPath"
7171
[cellTemplate]="col.bodyTemplate"
7272
[lastSearchInfo]="grid.lastSearchInfo"
7373
[cellSelectionMode]="grid.cellSelection"
@@ -116,7 +116,7 @@
116116
[style.left]="col.rightPinnedOffset"
117117
[width]="col.getCellWidth()"
118118
[visibleColumnIndex]="col.visibleIndex"
119-
[value]="rowData | dataMapper:col.field:grid.pipeTrigger:rowData[col.field]"
119+
[value]="rowData | dataMapper:col.field:grid.pipeTrigger:rowData[col.field]:col.hasNestedPath"
120120
[cellTemplate]="col.bodyTemplate"
121121
[lastSearchInfo]="grid.lastSearchInfo"
122122
[cellSelectionMode]="grid.cellSelection"

projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-row.component.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
[style.flex-basis]="col.width"
4444
[width]="col.getCellWidth()"
4545
[visibleColumnIndex]="col.visibleIndex"
46-
[value]="rowData | dataMapper:col.field:grid.pipeTrigger:rowData[col.field]"
46+
[value]="rowData | dataMapper:col.field:grid.pipeTrigger:rowData[col.field]:col.hasNestedPath"
4747
[cellTemplate]="col.bodyTemplate"
4848
[lastSearchInfo]="grid.lastSearchInfo"
4949
[active]="isCellActive(col.visibleIndex)"
@@ -74,7 +74,7 @@
7474
[style.flex-basis]="col.width"
7575
[width]="col.getCellWidth()"
7676
[visibleColumnIndex]="col.visibleIndex"
77-
[value]="rowData | dataMapper:col.field:grid.pipeTrigger:rowData[col.field]"
77+
[value]="rowData | dataMapper:col.field:grid.pipeTrigger:rowData[col.field]:col.hasNestedPath"
7878
[isLoading]="isLoading"
7979
[cellTemplate]="col.bodyTemplate"
8080
[lastSearchInfo]="grid.lastSearchInfo"
@@ -127,7 +127,7 @@
127127
[style.left]="col.rightPinnedOffset"
128128
[width]="col.getCellWidth()"
129129
[visibleColumnIndex]="col.visibleIndex"
130-
[value]="rowData | dataMapper:col.field:grid.pipeTrigger:rowData[col.field]"
130+
[value]="rowData | dataMapper:col.field:grid.pipeTrigger:rowData[col.field]:col.hasNestedPath"
131131
[cellTemplate]="col.bodyTemplate"
132132
[lastSearchInfo]="grid.lastSearchInfo"
133133
[active]="isCellActive(col.visibleIndex)"
@@ -160,7 +160,7 @@
160160
[style.left]="col.rightPinnedOffset"
161161
[width]="col.getCellWidth()"
162162
[visibleColumnIndex]="col.visibleIndex"
163-
[value]="rowData | dataMapper:col.field:grid.pipeTrigger:rowData[col.field]"
163+
[value]="rowData | dataMapper:col.field:grid.pipeTrigger:rowData[col.field]:col.hasNestedPath"
164164
[isLoading]="isLoading"
165165
[cellTemplate]="col.bodyTemplate"
166166
[lastSearchInfo]="grid.lastSearchInfo"

0 commit comments

Comments
 (0)