import React, { useMemo } from 'react' import withDefaults from '../utils/with-defaults' import useTheme from '../styles/use-theme' import { TableColumnItem } from './table-context' interface Props { width: number columns: Array className?: string } const defaultProps = { className: '', } type NativeAttrs = Omit, keyof Props> export type TableHeadProps = Props & typeof defaultProps & NativeAttrs const makeColgroup = (width: number, columns: Array) => { const unsetWidthCount = columns.filter(c => !c.width).length const customWidthTotal = columns.reduce((pre, current) => { return current.width ? pre + current.width : pre }, 0) const averageWidth = (width - customWidthTotal) / unsetWidthCount if (averageWidth <= 0) return return ( {columns.map((column, index) => ( ))} ) } const TableHead: React.FC = ({ columns, width }) => { const theme = useTheme() const isScalableWidth = useMemo(() => columns.find(item => !!item.width), [columns]) const colgroup = useMemo(() => { if (!isScalableWidth) return return makeColgroup(width, columns) }, [isScalableWidth, width]) return ( <> {colgroup} {columns.map((column, index) => (
{column.label}
))} ) } const MemoTableHead = React.memo(TableHead) export default withDefaults(MemoTableHead, defaultProps)