( row: Row<TData>, selection: Record<string, boolean>, table: Table<TData> )
| 627 | } |
| 628 | |
| 629 | export function isSubRowSelected<TData extends RowData>( |
| 630 | row: Row<TData>, |
| 631 | selection: Record<string, boolean>, |
| 632 | table: Table<TData> |
| 633 | ): boolean | 'some' | 'all' { |
| 634 | if (!row.subRows?.length) return false |
| 635 | |
| 636 | let allChildrenSelected = true |
| 637 | let someSelected = false |
| 638 | |
| 639 | row.subRows.forEach(subRow => { |
| 640 | // Bail out early if we know both of these |
| 641 | if (someSelected && !allChildrenSelected) { |
| 642 | return |
| 643 | } |
| 644 | |
| 645 | if (subRow.getCanSelect()) { |
| 646 | if (isRowSelected(subRow, selection)) { |
| 647 | someSelected = true |
| 648 | } else { |
| 649 | allChildrenSelected = false |
| 650 | } |
| 651 | } |
| 652 | |
| 653 | // Check row selection of nested subrows |
| 654 | if (subRow.subRows && subRow.subRows.length) { |
| 655 | const subRowChildrenSelected = isSubRowSelected(subRow, selection, table) |
| 656 | if (subRowChildrenSelected === 'all') { |
| 657 | someSelected = true |
| 658 | } else if (subRowChildrenSelected === 'some') { |
| 659 | someSelected = true |
| 660 | allChildrenSelected = false |
| 661 | } else { |
| 662 | allChildrenSelected = false |
| 663 | } |
| 664 | } |
| 665 | }) |
| 666 | |
| 667 | return allChildrenSelected ? 'all' : someSelected ? 'some' : false |
| 668 | } |
no test coverage detected
searching dependent graphs…