import Cell from './Cell'; import { getOptionProps, getSlot, getClass, getStyle, getComponent } from '../_util/props-util'; import { FunctionalComponent, VNode } from 'vue'; interface CellConfig { component: string | [string, string]; type: string; showLabel?: boolean; showContent?: boolean; } export interface RowProps { prefixCls: string; vertical: boolean; row: any[]; bordered: boolean; colon: boolean; index: number; } const Row: FunctionalComponent = props => { const renderCells = ( items: VNode[], { colon, prefixCls, bordered }, { component, type, showLabel, showContent }: CellConfig, ) => { return items.map((item, index) => { const { prefixCls: itemPrefixCls = prefixCls, span = 1 } = getOptionProps(item); const label = getComponent(item, 'label'); const children = getSlot(item); const className = getClass(item); const style = getStyle(item); const { key } = item; if (typeof component === 'string') { return ( ); } return [ , , ]; }); }; const { prefixCls, vertical, row, index, bordered } = props; if (vertical) { return ( <> {renderCells(row, props, { component: 'th', type: 'label', showLabel: true })} {renderCells(row, props, { component: 'td', type: 'content', showContent: true, })} ); } return ( {renderCells(row, props, { component: bordered ? ['th', 'td'] : 'td', type: 'item', showLabel: true, showContent: true, })} ); }; export default Row;