diff --git a/resources/js/Components/DataTable/TableCell.jsx b/resources/js/Components/DataTable/TableCell.jsx
index f2363bdc3..0352410bc 100644
--- a/resources/js/Components/DataTable/TableCell.jsx
+++ b/resources/js/Components/DataTable/TableCell.jsx
@@ -1,3 +1,6 @@
+import {type Cash} from 'cash-dom/dist/cash';
+import {inRange} from 'lodash-es';
+
import Component from '../Component.jsx';
/**
@@ -16,4 +19,30 @@ export default class TableCell extends Component {
return
{vnode.children} | ;
}
+
+ oncreate(vnode) {
+ super.oncreate(vnode);
+
+ const checkboxes = (): Cash => $(this.element)
+ .closest('.mdc-data-table')
+ .find('tbody tr[checkable] mwc-checkbox');
+
+ const cell: Cash = $(this.element);
+ cell.children('mwc-checkbox').on('change', (event) => {
+ const row = cell.parent();
+ row.toggleClass('mdc-data-table__row--selected');
+
+ const headerCheckbox = cell.closest('.mdc-data-table').find('thead th mwc-checkbox');
+ const checks = checkboxes();
+ const checked = checks.filter('[checked]');
+
+ if (inRange(checked.length, 1, checks.length)) {
+ headerCheckbox.prop('indeterminate', true);
+ headerCheckbox.prop('checked', false);
+ } else {
+ headerCheckbox.prop('checked', checks.length === checked.length);
+ headerCheckbox.prop('indeterminate', false);
+ }
+ });
+ }
}