From a0ab04d4fe8be0c75b84743dfb2ba481ca04d887 Mon Sep 17 00:00:00 2001 From: Hoang Date: Wed, 16 Jul 2025 17:49:18 -0700 Subject: [PATCH] fix(core, platform): Narrow empty check when cell is focused and add option for empty cell announcement for column template --- ...table-custom-column-example.component.html | 20 +++++---- ...m-table-custom-column-example.component.ts | 2 +- .../table/platform-table-docs.component.html | 4 ++ libs/platform/table-helpers/table-column.ts | 8 +++- .../table-column/table-column.component.ts | 6 ++- .../table-row/table-row.component.html | 5 ++- .../table-row/table-row.component.ts | 41 ++++++++++++++++++- 7 files changed, 72 insertions(+), 14 deletions(-) diff --git a/libs/docs/platform/table/examples/platform-table-custom-column-example.component.html b/libs/docs/platform/table/examples/platform-table-custom-column-example.component.html index c4f2634388b..5a892c8a7ab 100644 --- a/libs/docs/platform/table/examples/platform-table-custom-column-example.component.html +++ b/libs/docs/platform/table/examples/platform-table-custom-column-example.component.html @@ -48,16 +48,20 @@ {{ item.name }} - + Description - - + @if (!item.description) { + + } @else { + + + } diff --git a/libs/docs/platform/table/examples/platform-table-custom-column-example.component.ts b/libs/docs/platform/table/examples/platform-table-custom-column-example.component.ts index 313f0dda20b..7058d48695e 100644 --- a/libs/docs/platform/table/examples/platform-table-custom-column-example.component.ts +++ b/libs/docs/platform/table/examples/platform-table-custom-column-example.component.ts @@ -207,7 +207,7 @@ const ITEMS: ExampleItem[] = [ }, { name: 'Beam Breaker B-1', - description: 'fermentum donec ut', + description: '', price: { value: 36.56, currency: 'NZD' diff --git a/libs/docs/platform/table/platform-table-docs.component.html b/libs/docs/platform/table/platform-table-docs.component.html index 149d71c7d18..fc6336c3748 100644 --- a/libs/docs/platform/table/platform-table-docs.component.html +++ b/libs/docs/platform/table/platform-table-docs.component.html @@ -47,6 +47,10 @@

This example shows custom column definition implementation

Developers are able to change the appearance of a regular cell and header cell as well.

Additionally, developers can define custom renderer of the header cell popover.

+

+ The [announceEmptyCell] allows you to control the screen reader announcement for empty cells, which + is particularly useful for columns that use a custom cell template (*fdpCellDef). +

diff --git a/libs/platform/table-helpers/table-column.ts b/libs/platform/table-helpers/table-column.ts index 38ae2f08c6c..e7386b3ab03 100644 --- a/libs/platform/table-helpers/table-column.ts +++ b/libs/platform/table-helpers/table-column.ts @@ -1,4 +1,4 @@ -import { TemplateRef } from '@angular/core'; +import { Signal, TemplateRef } from '@angular/core'; import { Nullable } from '@fundamental-ngx/cdk/utils'; import { Observable } from 'rxjs'; @@ -86,6 +86,12 @@ export abstract class TableColumn { /** Column role attribute. */ abstract role: 'cell' | 'rowheader' | 'gridcell'; + /** + * Whether to announce built-in empty cells to screen readers for columns with column templates. + * This provides option to turn off the announcement if the column template already includes its own + * */ + abstract announceEmptyCell: Signal; + /** @hidden */ abstract _freezed: boolean; diff --git a/libs/platform/table/components/table-column/table-column.component.ts b/libs/platform/table/components/table-column/table-column.component.ts index c8372bc1f75..34d09751474 100644 --- a/libs/platform/table/components/table-column/table-column.component.ts +++ b/libs/platform/table/components/table-column/table-column.component.ts @@ -9,7 +9,8 @@ import { Optional, SimpleChanges, TemplateRef, - ViewEncapsulation + ViewEncapsulation, + input } from '@angular/core'; import { Nullable } from '@fundamental-ngx/cdk/utils'; import { @@ -148,6 +149,9 @@ export class TableColumnComponent extends TableColumn implements OnInit, OnChang @Input() role: 'cell' | 'rowheader' | 'gridcell' = 'gridcell'; + /** Whether to announce empty cells to screen readers. Default is true. */ + readonly announceEmptyCell = input(true); + /** Column cell template */ columnCellTemplate: Nullable>; diff --git a/libs/platform/table/components/table-row/table-row.component.html b/libs/platform/table/components/table-row/table-row.component.html index a220f60e48a..698b099ee57 100644 --- a/libs/platform/table/components/table-row/table-row.component.html +++ b/libs/platform/table/components/table-row/table-row.component.html @@ -136,7 +136,8 @@ " [attr.aria-expanded]="_isTreeRowFirstCell($index, row) ? row.expanded : null" [attr.data-nesting-level]="$index === 0 ? row.level + 1 : null" - (cellFocused)="_tableRowService.cellFocused($event); _tableRowService.cellActivate($index, row)" + (cellFocused)="_handleCellFocused($event, $index, row, column, tableTextContainer)" + (focusout)="_announceEmptyCell.set(false)" (click)="_tableRowService.cellClicked({ index: $index, row })" (keydown.enter)="_isTreeRowFirstCell($index, row, $event) && _toggleGroupRow()" (keydown.arrowLeft)="_tableRowService.scrollToOverlappedCell()" @@ -163,7 +164,7 @@ > } @if (row.state === 'readonly') { - @if (tableTextContainer.innerText?.trim() === '') { + @if (_announceEmptyCell()) {