Skip to content

Commit c30fa66

Browse files
fix(data-table): respect disabled attribute on select-all (#20766)
* fix(data-table): respect disabled to prevent selections * fix: conditionally disabled selectall on filter * fix: filtering condition * chore: cleanup * chore: remove test story --------- Co-authored-by: Riddhi Bansal <[email protected]>
1 parent 49b936f commit c30fa66

File tree

1 file changed

+17
-4
lines changed
  • packages/web-components/src/components/data-table

1 file changed

+17
-4
lines changed

packages/web-components/src/components/data-table/table.ts

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,19 @@ class CDSTable extends HostListenerMixin(LitElement) {
346346
unfilteredRows.push(elem);
347347
}
348348

349+
if (this.isSelectable) {
350+
const unfilteredSelectableLength = unfilteredRows.filter((elem) => {
351+
return !elem.hasAttribute('disabled');
352+
}).length;
353+
354+
const headerCheckbox = this._tableHeaderRow.shadowRoot
355+
?.querySelector(`${prefix}-checkbox`)
356+
.shadowRoot.querySelector(`.${prefix}--checkbox`);
357+
358+
headerCheckbox.disabled =
359+
unfilteredSelectableLength === 0 ? true : false;
360+
}
361+
349362
if (this.expandable) {
350363
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- https://github.com/carbon-design-system/carbon/issues/20452
351364
(elem as any).nextElementSibling.filtered = filtered;
@@ -529,15 +542,15 @@ class CDSTable extends HostListenerMixin(LitElement) {
529542
}
530543
}
531544

532-
const totalRows = [...this._tableRows].filter(
533-
(elem) => !elem.hasAttribute('filtered')
545+
const totalSelectableRows = [...this._tableRows].filter(
546+
(elem) => !elem.hasAttribute('filtered') && !elem.hasAttribute('disabled')
534547
).length;
535548

536549
// selected header checkbox upon all rows being selected
537550
const headerCheckbox = tableHeaderRow.shadowRoot
538551
?.querySelector(`${prefix}-checkbox`)
539552
.shadowRoot.querySelector(`.${prefix}--checkbox`);
540-
const allRowsSelected = this._selectedRows.length === totalRows;
553+
const allRowsSelected = this._selectedRows.length === totalSelectableRows;
541554
headerCheckbox.checked = !this._selectedRows.length ? false : true;
542555
headerCheckbox.indeterminate =
543556
!allRowsSelected && this._selectedRows.length > 0;
@@ -580,7 +593,7 @@ class CDSTable extends HostListenerMixin(LitElement) {
580593

581594
let totalRows = 0;
582595
forEach(tableRows, (elem) => {
583-
if (!(elem as CDSTableRow).filtered) {
596+
if (!(elem as CDSTableRow).filtered && !(elem as CDSTableRow).disabled) {
584597
(elem as CDSTableRow).selected = selected;
585598
if (this.radio) {
586599
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- https://github.com/carbon-design-system/carbon/issues/20452

0 commit comments

Comments
 (0)