import * as React from 'react'; import { Table, TableProps } from 'react-bootstrap'; import { Panel, PanelFragment, PanelItemContext, PanelItemProps, PanelTemplateProps, } from './Panel'; // clone of react-bootstrap TableProps, but without the subclassing export type BootstrapTableProps = Omit>; export interface TablePanelProps< T = {}, TContext extends PanelItemContext = PanelItemContext > extends PanelItemProps, PanelTemplateProps, BootstrapTableProps { header?: PanelFragment; fixedLayout?: boolean; } export interface TablePanelComponentProps extends TablePanelProps, TableProps {} export class TablePanel extends Panel { public static displayName = 'TablePanel'; static defaultProps: Partial = { fixedLayout: true, bordered: true, hover: true, responsive: true, striped: true, }; render() { const { props, rest } = this.restProps(x => { const { header, fixedLayout } = x; return { header, fixedLayout }; }); return this.renderPanel( this.wxr.classNames('TablePanel', { 'TablePanel-fixedLayout': props.fixedLayout, }), rest, Table, ); } renderItems(children?: React.ReactNode, componentClass?: React.ReactType) { const fragments: PanelFragment[] = []; const itemTemplates = super.renderItems(children, componentClass || ''); if (this.props.header != null) { fragments.push({this.props.header}); } fragments.push({itemTemplates}); return fragments; } }