From d13526b242e16a3fceba3d13d8ac03bcb077f905 Mon Sep 17 00:00:00 2001 From: Maksim Zakharov <251575087+bit-byte0@users.noreply.github.com> Date: Mon, 25 May 2026 18:53:01 +0400 Subject: [PATCH 1/2] fix(pivot-grid): use nullish coalescing for header filter aria-label caption --- .../grids/pivot_grid/field_chooser/m_field_chooser_base.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/devextreme/js/__internal/grids/pivot_grid/field_chooser/m_field_chooser_base.ts b/packages/devextreme/js/__internal/grids/pivot_grid/field_chooser/m_field_chooser_base.ts index 812cc164c4e2..2d83c76bbba9 100644 --- a/packages/devextreme/js/__internal/grids/pivot_grid/field_chooser/m_field_chooser_base.ts +++ b/packages/devextreme/js/__internal/grids/pivot_grid/field_chooser/m_field_chooser_base.ts @@ -174,7 +174,7 @@ export class FieldChooserBase extends mixinWidget { renderField(field, showColumnLines) { const that = this; const $fieldContent = $(DIV).addClass(CLASSES.area.fieldContent) - .text(field.caption || field.dataField); + .text(field.caption ?? field.dataField ?? ''); const $fieldElement = $(DIV) .addClass(CLASSES.area.field) .addClass(CLASSES.area.box) @@ -191,7 +191,7 @@ export class FieldChooserBase extends mixinWidget { alignment: that.option('rtlEnabled') ? 'right' : 'left', sortOrder: field.sortOrder === 'desc' ? 'desc' : 'asc', allowSorting: field.allowSorting, - caption: field.caption || field.dataField, + caption: field.caption ?? field.dataField ?? '', }, showColumnLines, }); @@ -205,7 +205,7 @@ export class FieldChooserBase extends mixinWidget { filterValues: mainGroupField.filterValues, allowFiltering: mainGroupField.allowFiltering && !field.groupIndex, allowSorting: field.allowSorting, - caption: field.caption || field.dataField, + caption: field.caption ?? field.dataField ?? '', }, showColumnLines, }); From 0d5e61a1478fd0f828093075df197bdca73cfbcc Mon Sep 17 00:00:00 2001 From: Maksim Zakharov <251575087+bit-byte0@users.noreply.github.com> Date: Tue, 26 May 2026 14:24:54 +0400 Subject: [PATCH 2/2] test(pivot-grid): add regression case for undefined in header filter aria-label --- .../pivotGrid/fieldPanel/T1287521_fields_aria_label.ts | 6 +++++- .../grids/pivot_grid/field_chooser/m_field_chooser_base.ts | 7 ++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/e2e/testcafe-devextreme/tests/common/pivotGrid/fieldPanel/T1287521_fields_aria_label.ts b/e2e/testcafe-devextreme/tests/common/pivotGrid/fieldPanel/T1287521_fields_aria_label.ts index feb3c5653ab2..f3c9c1de73e3 100644 --- a/e2e/testcafe-devextreme/tests/common/pivotGrid/fieldPanel/T1287521_fields_aria_label.ts +++ b/e2e/testcafe-devextreme/tests/common/pivotGrid/fieldPanel/T1287521_fields_aria_label.ts @@ -23,7 +23,9 @@ test('Header fields should have correct aria-label', async (t) => { .expect(columnHeader.getHeaderFilterIcon(1).ariaLabel) .eql('Show filter options for column \'Column2\'') .expect(filterHeader.getHeaderFilterIcon(0).ariaLabel) - .eql('Show filter options for column \'Column3\''); + .eql('Show filter options for column \'Column3\'') + .expect(columnHeader.getHeaderFilterIcon(2).ariaLabel) + .notContains('undefined'); }).before(async () => { await createWidget('dxPivotGrid', { allowFiltering: true, @@ -43,6 +45,8 @@ test('Header fields should have correct aria-label', async (t) => { }, { dataField: 'column2', area: 'column', + }, { + area: 'column', }, { dataField: 'column3', area: 'filter', diff --git a/packages/devextreme/js/__internal/grids/pivot_grid/field_chooser/m_field_chooser_base.ts b/packages/devextreme/js/__internal/grids/pivot_grid/field_chooser/m_field_chooser_base.ts index 2d83c76bbba9..67161398d56e 100644 --- a/packages/devextreme/js/__internal/grids/pivot_grid/field_chooser/m_field_chooser_base.ts +++ b/packages/devextreme/js/__internal/grids/pivot_grid/field_chooser/m_field_chooser_base.ts @@ -173,8 +173,9 @@ export class FieldChooserBase extends mixinWidget { renderField(field, showColumnLines) { const that = this; + const caption = field.caption ?? field.dataField ?? ''; const $fieldContent = $(DIV).addClass(CLASSES.area.fieldContent) - .text(field.caption ?? field.dataField ?? ''); + .text(caption); const $fieldElement = $(DIV) .addClass(CLASSES.area.field) .addClass(CLASSES.area.box) @@ -191,7 +192,7 @@ export class FieldChooserBase extends mixinWidget { alignment: that.option('rtlEnabled') ? 'right' : 'left', sortOrder: field.sortOrder === 'desc' ? 'desc' : 'asc', allowSorting: field.allowSorting, - caption: field.caption ?? field.dataField ?? '', + caption, }, showColumnLines, }); @@ -205,7 +206,7 @@ export class FieldChooserBase extends mixinWidget { filterValues: mainGroupField.filterValues, allowFiltering: mainGroupField.allowFiltering && !field.groupIndex, allowSorting: field.allowSorting, - caption: field.caption ?? field.dataField ?? '', + caption, }, showColumnLines, });