import PropTypes from '../../_util/vue-types' import TableHeaderRow from './TableHeaderRow' function getHeaderRows (columns, currentRow = 0, rows) { rows = rows || [] rows[currentRow] = rows[currentRow] || [] columns.forEach(column => { if (column.rowSpan && rows.length < column.rowSpan) { while (rows.length < column.rowSpan) { rows.push([]) } } const cell = { key: column.key, className: column.className || column.class || '', children: column.title, column, } if (column.children) { getHeaderRows(column.children, currentRow + 1, rows) } if ('colSpan' in column) { cell.colSpan = column.colSpan } if ('rowSpan' in column) { cell.rowSpan = column.rowSpan } if (cell.colSpan !== 0) { rows[currentRow].push(cell) } }) return rows.filter(row => row.length > 0) } export default { name: 'TableHeader', props: { fixed: PropTypes.string, columns: PropTypes.array.isRequired, expander: PropTypes.object.isRequired, }, inject: { table: { default: {}}, }, render () { const { sComponents: components, prefixCls, showHeader, customHeaderRow } = this.table const { expander, columns, fixed } = this if (!showHeader) { return null } const rows = getHeaderRows(columns) expander.renderExpandIndentCell(rows, fixed) const HeaderWrapper = components.header.wrapper return ( { rows.map((row, index) => ( )) } ) }, }