import React from 'react'; import {RendererProps, Renderer} from '../../factory'; import QuickEdit from '../QuickEdit'; import Copyable from '../Copyable'; import PopOverable from '../PopOver'; import {observer} from 'mobx-react'; export interface TableCellProps extends RendererProps { wrapperComponent?: React.ReactType; column: object; } export class TableCell extends React.Component { static defaultProps = { wrapperComponent: 'td' }; static propsList: Array = [ 'type', 'label', 'column', 'body', 'tpl', 'rowSpan', 'remark' ]; render() { let { className, render, style, wrapperComponent: Component, column, value, data, children, width, innerClassName, label, tabIndex, onKeyUp, rowSpan, body: _body, tpl, remark, prefix, affix, isHead, ...rest } = this.props; const schema = { ...column, className: innerClassName, type: (column && column.type) || 'plain' }; delete schema.label; let body = children ? children : render('field', schema, { ...rest, inputOnly: true, value, data }); if (width) { style = { ...style, width: (style && style.width) || width }; if (!/%$/.test(String(style.width))) { body = (
{prefix} {body} {affix}
); prefix = null; affix = null; // delete style.width; } } if (!Component) { return body as JSX.Element; } if (isHead) { Component = 'th'; } return ( 1 ? rowSpan : undefined} style={style} className={className} tabIndex={tabIndex} onKeyUp={onKeyUp} > {prefix} {body} {affix} ); } } @Renderer({ test: /(^|\/)table\/(?:.*\/)?cell$/, name: 'table-cell' }) @QuickEdit() @PopOverable({ targetOutter: true }) @Copyable() @observer export class TableCellRenderer extends TableCell { static propsList = [ 'quickEdit', 'quickEditEnabledOn', 'popOver', 'copyable', 'inline', ...TableCell.propsList ]; } @Renderer({ test: /(^|\/)field$/, name: 'field' }) @PopOverable() @Copyable() export class FieldRenderer extends TableCell { static defaultProps = { ...TableCell.defaultProps, wrapperComponent: 'div' }; }