Skip to content

Commit 1dc6edb

Browse files
committed
fix(grid): handle validation for fields with '.'
1 parent d059fa3 commit 1dc6edb

File tree

3 files changed

+42
-13
lines changed

3 files changed

+42
-13
lines changed

projects/igniteui-angular/src/lib/grids/cell.component.html

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -226,37 +226,37 @@
226226
}
227227

228228
<ng-template #defaultError>
229-
@if (formGroup?.get(column?.field).errors?.['required']) {
229+
@if (formGroup?.get(getTransformedFieldName(column?.field)).errors?.['required']) {
230230
<div>
231231
{{grid.resourceStrings.igx_grid_required_validation_error}}
232232
</div>
233233
}
234-
@if (formGroup?.get(column?.field).errors?.['minlength']) {
234+
@if (formGroup?.get(getTransformedFieldName(column?.field)).errors?.['minlength']) {
235235
<div>
236-
{{grid.resourceStrings.igx_grid_min_length_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.minlength.requiredLength }}
236+
{{grid.resourceStrings.igx_grid_min_length_validation_error | igxStringReplace:'{0}':formGroup.get(getTransformedFieldName(column.field)).errors.minlength.requiredLength }}
237237
</div>
238238
}
239-
@if (formGroup?.get(column?.field).errors?.['maxlength']) {
239+
@if (formGroup?.get(getTransformedFieldName(column?.field)).errors?.['maxlength']) {
240240
<div>
241-
{{grid.resourceStrings.igx_grid_max_length_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.maxlength.requiredLength }}
241+
{{grid.resourceStrings.igx_grid_max_length_validation_error | igxStringReplace:'{0}':formGroup.get(getTransformedFieldName(column.field)).errors.maxlength.requiredLength }}
242242
</div>
243243
}
244-
@if (formGroup?.get(column?.field).errors?.['min']) {
244+
@if (formGroup?.get(getTransformedFieldName(column?.field)).errors?.['min']) {
245245
<div>
246-
{{grid.resourceStrings.igx_grid_min_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.min.min }}
246+
{{grid.resourceStrings.igx_grid_min_validation_error | igxStringReplace:'{0}':formGroup.get(getTransformedFieldName(column.field)).errors.min.min }}
247247
</div>
248248
}
249-
@if (formGroup?.get(column?.field).errors?.['max']) {
249+
@if (formGroup?.get(getTransformedFieldName(column?.field)).errors?.['max']) {
250250
<div>
251-
{{grid.resourceStrings.igx_grid_max_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.max.max }}
251+
{{grid.resourceStrings.igx_grid_max_validation_error | igxStringReplace:'{0}':formGroup.get(getTransformedFieldName(column.field)).errors.max.max }}
252252
</div>
253253
}
254-
@if (formGroup?.get(column?.field).errors?.['email']) {
254+
@if (formGroup?.get(getTransformedFieldName(column?.field)).errors?.['email']) {
255255
<div>
256256
{{grid.resourceStrings.igx_grid_email_validation_error }}
257257
</div>
258258
}
259-
@if (formGroup?.get(column?.field).errors?.['pattern']) {
259+
@if (formGroup?.get(getTransformedFieldName(column?.field)).errors?.['pattern']) {
260260
<div>
261261
{{grid.resourceStrings.igx_grid_pattern_validation_error}}
262262
</div>

projects/igniteui-angular/src/lib/grids/cell.component.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,8 @@ export class IgxGridCellComponent implements OnInit, OnChanges, OnDestroy, CellT
538538
@HostBinding('class.igx-grid__td--invalid')
539539
@HostBinding('attr.aria-invalid')
540540
public get isInvalid() {
541-
const isInvalid = this.formGroup?.get(this.column?.field)?.invalid && this.formGroup?.get(this.column?.field)?.touched;
541+
const fieldName = this.getTransformedFieldName(this.column?.field);
542+
const isInvalid = this.formGroup?.get(fieldName)?.invalid && this.formGroup?.get(fieldName)?.touched;
542543
return !this.intRow.deleted && isInvalid;
543544
}
544545

@@ -548,7 +549,8 @@ export class IgxGridCellComponent implements OnInit, OnChanges, OnDestroy, CellT
548549
*/
549550
@HostBinding('class.igx-grid__td--valid')
550551
public get isValidAfterEdit() {
551-
const formControl = this.formGroup?.get(this.column?.field);
552+
const fieldName = this.getTransformedFieldName(this.column?.field);
553+
const formControl = this.formGroup?.get(fieldName);
552554
return this.editMode && formControl && !formControl.invalid && formControl.dirty;
553555
}
554556

@@ -1175,6 +1177,14 @@ export class IgxGridCellComponent implements OnInit, OnChanges, OnDestroy, CellT
11751177
return meta;
11761178
}
11771179

1180+
/**
1181+
* @hidden
1182+
* @internal
1183+
*/
1184+
public getTransformedFieldName(field: string): string {
1185+
return field?.replace(/\./g, '_');
1186+
}
1187+
11781188
/**
11791189
* @hidden
11801190
* @internal

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,25 @@ describe('IgxGrid - Validation #grid', () => {
171171
expect(erorrMessage).toEqual(' Entry should be at least 4 character(s) long ');
172172
});
173173

174+
it('should mark invalid cell with igx-grid__td--invalid class and show the related error cell template when the field contains "."', () => {
175+
const grid = fixture.componentInstance.grid as IgxGridComponent;
176+
// add new column
177+
fixture.componentInstance.columns.push({ field: 'New.Column', dataType: 'string' });
178+
fixture.detectChanges();
179+
expect(grid.columns.length).toBe(5);
180+
181+
let cell = grid.gridAPI.get_cell_by_visible_index(1, 4);
182+
UIInteractions.simulateDoubleClickAndSelectEvent(cell.element);
183+
cell.update('asd');
184+
fixture.detectChanges();
185+
186+
cell = grid.gridAPI.get_cell_by_visible_index(1, 4);
187+
//min length should be 4
188+
GridFunctions.verifyCellValid(cell, false);
189+
const erorrMessage = cell.errorTooltip.first.elementRef.nativeElement.children[0].textContent;
190+
expect(erorrMessage).toEqual(' Entry should be at least 4 character(s) long ');
191+
});
192+
174193
it('should show the error message on error icon hover and when the invalid cell becomes active.', fakeAsync(() => {
175194
const grid = fixture.componentInstance.grid as IgxGridComponent;
176195

0 commit comments

Comments
 (0)