A table displays rows of data.
A table displays rows of data.
import { Table } from '@yuntijs/ui';based on antd Table component, add a CollapseTable component.
import { Space, Table, Tag } from 'antd';
import type { TableProps } from 'antd';
import React from 'react';
interface DataType {
key: string;
name: string;
age: number;
address: string;
tags: string[];
}
const columns: TableProps<DataType>['columns'] = [
{
title: 'Name',
dataIndex: 'name',
key: 'name',
render: text => <a>{text}</a>,
},
{
title: 'Age',
dataIndex: 'age',
key: 'age',
},
{
title: 'Address',
dataIndex: 'address',
key: 'address',
},
{
title: 'Tags',
key: 'tags',
dataIndex: 'tags',
render: (_, { tags }) => (
<>
{tags.map(tag => {
let color = tag.length > 5 ? 'geekblue' : 'green';
if (tag === 'loser') {
color = 'volcano';
}
return (
<Tag color={color} key={tag}>
{tag.toUpperCase()}
</Tag>
);
})}
</>
),
},
{
title: 'Action',
key: 'action',
render: (_, record) => (
<Space size="middle">
<a>Invite {record.name}</a>
<a>Delete</a>
</Space>
),
},
];
const data: DataType[] = [
{
key: '1',
name: 'John Brown',
age: 32,
address: 'New York No. 1 Lake Park',
tags: ['nice', 'developer'],
},
{
key: '2',
name: 'Jim Green',
age: 42,
address: 'London No. 1 Lake Park',
tags: ['loser'],
},
{
key: '3',
name: 'Joe Black',
age: 32,
address: 'Sydney No. 1 Lake Park',
tags: ['cool', 'teacher'],
},
];
const App: React.FC = () => <Table columns={columns} dataSource={data} />;
export default App;CollapseTable| Name | Description | Type | Default |
|---|---|---|---|
| dropdownPrefixCls | -- | string | -- |
| dataSource | -- | {length:number;toString:()=>string;toLocaleString:()=>string;concat:(items:ConcatArray<T>[])=>T[]|(items:(T | ConcatArray<T>)[])=>T[];join:(separator?:string)=>string;slice:(start?:number,end?:number)=>T[];indexOf:(searchElement:T,fromIndex?:number)=>number;lastIndexOf:(searchElement:T,fromIndex?:number)=>number;every:(predicate:(value: T, index: number, array: readonly T[]) => value is S,thisArg?:any)=>boolean|(predicate:(value: T, index: number, array: readonly T[]) => unknown,thisArg?:any)=>boolean;some:(predicate:(value: T, index: number, array: readonly T[]) => unknown,thisArg?:any)=>boolean;forEach:(callbackfn:(value: T, index: number, array: readonly T[]) => void,thisArg?:any)=>void;map:(callbackfn:(value: T, index: number, array: readonly T[]) => U,thisArg?:any)=>U[];filter:(predicate:(value: T, index: number, array: readonly T[]) => value is S,thisArg?:any)=>S[]|(predicate:(value: T, index: number, array: readonly T[]) => unknown,thisArg?:any)=>T[];reduce:(callbackfn:(previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T)=>any|(callbackfn:(previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T,initialValue:T)=>any|(callbackfn:(previousValue: U, currentValue: T, currentIndex: number, array: readonly T[]) => U,initialValue:U)=>any;reduceRight:(callbackfn:(previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T)=>any|(callbackfn:(previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T,initialValue:T)=>any|(callbackfn:(previousValue: U, currentValue: T, currentIndex: number, array: readonly T[]) => U,initialValue:U)=>any;find:(predicate:(this: void, value: T, index: number, obj: readonly T[]) => value is S,thisArg?:any)=>any|(predicate:(value: T, index: number, obj: readonly T[]) => unknown,thisArg?:any)=>any;findIndex:(predicate:(value: T, index: number, obj: readonly T[]) => unknown,thisArg?:any)=>number;entries:unknown;keys:unknown;values:()=>unknown;includes:(searchElement:T,fromIndex?:number)=>boolean;flatMap:(callback:(this: This, value: T, index: number, array: T[]) => U | readonly U[],thisArg?:This)=>U[];flat:(depth?:D)=>FlatArray<A_D>[];__@iterator@1032:()=>unknown} | -- |
| columns | -- | ColumnGroupType<RecordType>|ColumnType<RecordType>[] | -- |
| pagination | -- | |TablePaginationConfig | -- |
| loading | -- | boolean|SpinProps | -- |
| size | -- | "small"|"middle"|"large" | -- |
| bordered | -- | boolean | -- |
| locale | -- | {filterTitle?:string;filterConfirm?:ReactNode;filterReset?:ReactNode;filterEmptyText?:ReactNode;filterCheckall?:ReactNode;filterCheckAll?:ReactNode;filterSearchPlaceholder?:string;emptyText?:ReactNode|()=>|string|number|unknown|ReactElement|unknown|ReactPortal|Promise<AwaitedReactNode>|boolean;selectAll?:ReactNode;selectNone?:ReactNode;selectInvert?:ReactNode;selectionAll?:ReactNode;sortTitle?:string;expand?:string;collapse?:string;triggerDesc?:string;triggerAsc?:string;cancelSort?:string} | -- |
| rootClassName | -- | string | -- |
| onChange | -- | (pagination:import("/node_modules/antd/es/table/interface").TablePaginationConfig,filters:Record<string, import("/node_modules/antd/es/table/interface").FilterValue | null>,sorter:import("/node_modules/antd/es/table/interface").SorterResult<RecordType> | import("/node_modules/antd/es/table/interface").SorterResult<RecordType>[],extra:import("/node_modules/antd/es/table/interface").TableCurrentDataSource<RecordType>)=>void | -- |
| rowSelection | -- | {preserveSelectedRowKeys?:boolean;type?:"checkbox"|"radio";selectedRowKeys?:Key[];defaultSelectedRowKeys?:Key[];onChange?:(selectedRowKeys:React.Key[],selectedRows:T[],info:{ type: import("/node_modules/antd/es/table/interface").RowSelectMethod; })=>void;getCheckboxProps?:(record:T)=>{children?:ReactNode;style?:object;onChange?:(e:T)=>void;prefixCls?:string;className?:string;rootClassName?:string;autoFocus?:boolean;value?:any;onFocus?:(event:E)=>void;onBlur?:(event:E)=>void;id?:string;disabled?:boolean;type?:string;tabIndex?:number;title?:string;onKeyDown?:(event:E)=>void;onKeyPress?:(event:E)=>void;onClick?:(event:E)=>void;onMouseEnter?:(event:E)=>void;onMouseLeave?:(event:E)=>void;name?:string;required?:boolean;indeterminate?:boolean;skipGroup?:boolean};onSelect?:(record:T,selected:boolean,selectedRows:T[],nativeEvent:Event)=>void;onSelectMultiple?:(selected:boolean,selectedRows:T[],changeRows:T[])=>void;onSelectAll?:(selected:boolean,selectedRows:T[],changeRows:T[])=>void;onSelectInvert?:(selectedRowKeys:React.Key[])=>void;onSelectNone?:()=>void;selections?:Array<INTERNAL_SELECTION_ITEM>|boolean;hideSelectAll?:boolean;fixed?:left|right|boolean;columnWidth?:string|number;columnTitle?:ReactNode|(checkboxNode:React.ReactNode)=>|string|number|unknown|ReactElement|unknown|ReactPortal|Promise<AwaitedReactNode>|boolean;checkStrictly?:boolean;align?:"left"|"right"|"center";renderCell?:(value:boolean,record:T,index:number,originNode:React.ReactNode)=>|string|number|unknown|ReactElement|unknown|ReactPortal|Promise<AwaitedReactNode>|RenderedCell<T>|boolean;onCell?:(data:DataType,index?:number)=>unknown;getTitleCheckboxProps?:()=>unknown} | -- |
| getPopupContainer | -- | (triggerNode:HTMLElement)=>HTMLElement | -- |
| scroll | -- | {x?:number||string;y?:number|string;scrollToFirstRowOnChange?:boolean} | -- |
| sortDirections | -- | SortOrder[] | -- |
| showSorterTooltip | -- | boolean|SorterTooltipProps | -- |
| virtual | -- | boolean | -- |
| children | -- | ReactNode | -- |
| style | -- | {} | -- |
| prefixCls | -- | string | -- |
| className | -- | string | -- |
| direction | -- | "ltr"|"rtl" | -- |
| id | -- | string | -- |
| title | -- | (data:readonly RecordType[])=>|string|number|unknown|ReactElement|unknown|ReactPortal|Promise<AwaitedReactNode>|boolean | -- |
| onScroll | -- | (event:E)=>void | -- |
| expandIcon | -- | (props:import("/node_modules/rc-table/lib/interface").RenderExpandIconProps<RecordType>)=>|string|number|unknown|ReactElement|unknown|ReactPortal|Promise<AwaitedReactNode>|boolean | -- |
| components | -- | {table?:string|number|unknown|unknown|FunctionComponent|FC|ForwardRefExoticComponent;header?:object;body?:CustomizeScrollBody<RecordType>|{wrapper?:string|number|unknown|unknown|FunctionComponent|FC|ForwardRefExoticComponent;row?:string|number|unknown|unknown|FunctionComponent|FC|ForwardRefExoticComponent;cell?:string|number|unknown|unknown|FunctionComponent|FC|ForwardRefExoticComponent}} | -- |
| footer | -- | (data:readonly RecordType[])=>|string|number|unknown|ReactElement|unknown|ReactPortal|Promise<AwaitedReactNode>|boolean | -- |
| summary | -- | (data:readonly RecordType[])=>|string|number|unknown|ReactElement|unknown|ReactPortal|Promise<AwaitedReactNode>|boolean | -- |
| caption | -- | ReactNode | -- |
| expandedRowKeys | -- | Key[] | -- |
| defaultExpandedRowKeys | -- | Key[] | -- |
| expandedRowRender | -- | (record:ValueType,index:number,indent:number,expanded:boolean)=>|string|number|unknown|ReactElement|unknown|ReactPortal|Promise<AwaitedReactNode>|boolean | -- |
| expandRowByClick | -- | boolean | -- |
| onExpand | -- | (expanded:boolean,record:RecordType)=>void | -- |
| onExpandedRowsChange | -- | (expandedKeys:React.Key[])=>void | -- |
| defaultExpandAllRows | -- | boolean | -- |
| indentSize | -- | number | -- |
| expandIconColumnIndex | -- | number | -- |
| expandedRowClassName | -- | (record:RecordType,index:number,indent:number)=>string | -- |
| childrenColumnName | -- | string | -- |
| rowKey | -- | string|unknown|GetRowKey<RecordType> | -- |
| tableLayout | -- | "auto"|"fixed" | -- |
| expandable | Config expand rows | {expandedRowKeys?:object;defaultExpandedRowKeys?:object;expandedRowRender?:(record:ValueType,index:number,indent:number,expanded:boolean)=>|string|number|unknown|ReactElement|unknown|ReactPortal|Promise<AwaitedReactNode>|boolean;columnTitle?:ReactNode;expandRowByClick?:boolean;expandIcon?:(props:import("/node_modules/rc-table/lib/interface").RenderExpandIconProps<RecordType>)=>|string|number|unknown|ReactElement|unknown|ReactPortal|Promise<AwaitedReactNode>|boolean;onExpand?:(expanded:boolean,record:RecordType)=>void;onExpandedRowsChange?:(expandedKeys:readonly React.Key[])=>void;defaultExpandAllRows?:boolean;indentSize?:number;expandIconColumnIndex?:number;showExpandColumn?:boolean;expandedRowClassName?:string|RowClassName<RecordType>;childrenColumnName?:string;rowExpandable?:(record:RecordType)=>boolean;columnWidth?:number|string;fixed?:left|right|boolean;expandedRowOffset?:number} | -- |
| rowClassName | -- | string|RowClassName<RecordType> | -- |
| showHeader | -- | boolean | -- |
| onRow | -- | unknown | -- |
| onHeaderRow | -- | (data:DataType,index?:number)=>unknown | -- |
| sticky | -- | boolean|TableSticky | -- |
| rowHoverable | -- | boolean | -- |
| tailor | -- | boolean | -- |
| getContainerWidth | -- | (ele:HTMLElement,width:number)=>number | -- |
| Name | Age | Tags | Action | ||
|---|---|---|---|---|---|
| The YuntiUI components are inspired by LobeUI and developed based on Antd components, fully compatible with Antd components, and it is recommended to use antd-style as the default css-in-js styling solution. | 32 | NICEDEVELOPER | |||
| Jim Green | 42 | LOSER | |||
| Not Expandable | 29 | COOLTEACHER | |||
| Joe Black | 32 | COOLTEACHER |
| Name | Age | Tags | Action | ||
|---|---|---|---|---|---|
| The YuntiUI components are inspired by LobeUI and developed based on Antd components, fully compatible with Antd components, and it is recommended to use antd-style as the default css-in-js styling solution. | 32 | NICEDEVELOPER | |||
| Jim Green | 42 | LOSER | |||
| Not Expandable | 29 | COOLTEACHER | |||
| Joe Black | 32 | COOLTEACHER |