( row: Row<TData>, selection: Record<string, boolean>, table: Table<TData>, )
| 637 | } |
| 638 | |
| 639 | export function isSubRowSelected<TData extends RowData>( |
| 640 | row: Row<TData>, |
| 641 | selection: Record<string, boolean>, |
| 642 | table: Table<TData>, |
| 643 | ): boolean | 'some' | 'all' { |
| 644 | if (!row.subRows?.length) return false |
| 645 | |
| 646 | let allChildrenSelected = true |
| 647 | let someSelected = false |
| 648 | |
| 649 | row.subRows.forEach((subRow) => { |
| 650 | // Bail out early if we know both of these |
| 651 | if (someSelected && !allChildrenSelected) { |
| 652 | return |
| 653 | } |
| 654 | |
| 655 | if (subRow.getCanSelect()) { |
| 656 | if (isRowSelected(subRow, selection)) { |
| 657 | someSelected = true |
| 658 | } else { |
| 659 | allChildrenSelected = false |
| 660 | } |
| 661 | } |
| 662 | |
| 663 | // Check row selection of nested subrows |
| 664 | if (subRow.subRows && subRow.subRows.length) { |
| 665 | const subRowChildrenSelected = isSubRowSelected(subRow, selection, table) |
| 666 | if (subRowChildrenSelected === 'all') { |
| 667 | someSelected = true |
| 668 | } else if (subRowChildrenSelected === 'some') { |
| 669 | someSelected = true |
| 670 | allChildrenSelected = false |
| 671 | } else { |
| 672 | allChildrenSelected = false |
| 673 | } |
| 674 | } |
| 675 | }) |
| 676 | |
| 677 | return allChildrenSelected ? 'all' : someSelected ? 'some' : false |
| 678 | } |
no test coverage detected