| 599 | // }) |
| 600 | |
| 601 | const recurseHeadersForSpans = ( |
| 602 | headers: Header<TData, unknown>[], |
| 603 | ): { colSpan: number; rowSpan: number }[] => { |
| 604 | const filteredHeaders = headers.filter((header) => |
| 605 | header.column.getIsVisible(), |
| 606 | ) |
| 607 | |
| 608 | return filteredHeaders.map((header) => { |
| 609 | let colSpan = 0 |
| 610 | let rowSpan = 0 |
| 611 | let childRowSpans = [0] |
| 612 | |
| 613 | if (header.subHeaders && header.subHeaders.length) { |
| 614 | childRowSpans = [] |
| 615 | |
| 616 | recurseHeadersForSpans(header.subHeaders).forEach( |
| 617 | ({ colSpan: childColSpan, rowSpan: childRowSpan }) => { |
| 618 | colSpan += childColSpan |
| 619 | childRowSpans.push(childRowSpan) |
| 620 | }, |
| 621 | ) |
| 622 | } else { |
| 623 | colSpan = 1 |
| 624 | } |
| 625 | |
| 626 | const minChildRowSpan = Math.min(...childRowSpans) |
| 627 | rowSpan = rowSpan + minChildRowSpan |
| 628 | |
| 629 | header.colSpan = colSpan |
| 630 | header.rowSpan = rowSpan |
| 631 | |
| 632 | return { colSpan, rowSpan } |
| 633 | }) |
| 634 | } |
| 635 | |
| 636 | recurseHeadersForSpans(headerGroups[0]?.headers ?? []) |
| 637 | |