import React, { useState, useEffect, useMemo } from 'react';
import { Table, Avatar } from '@douyinfe/semi-ui';
const DAY = 24 * 60 * 60 * 1000;
const figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';
const columns = [
{
title: ({ sorter, filter, selection }) => (
{selection}
Name
{sorter}
{filter}
),
dataIndex: 'name',
width: 400,
render: (text, record, index) => {
return (
);
},
filters: [
{
text: 'Semi Design 设计稿',
value: 'Semi Design 设计稿',
},
{
text: 'Semi Pro 设计稿',
value: 'Semi Pro 设计稿',
},
],
onFilter: (value, record) => record.name.includes(value),
useFullRender: true,
// 此处从render的第四个形参中解构出 展开按钮、选择按钮、文本等内容
render: (text, record, index, { expandIcon, selection, indentText }) => {
return (
{indentText}
{expandIcon}
{selection}
{text}
);
},
},
{
title: '大小',
dataIndex: 'size',
sorter: (a, b) => a.size - b.size > 0 ? 1 : -1,
render: (text) => `${text} KB`
},
{
title: '所有者',
dataIndex: 'owner',
render: (text, record, index) => {
return (
{typeof text === 'string' && text.slice(0, 1)}
{text}
);
}
},
{
title: '更新日期',
dataIndex: 'updateTime',
sorter: (a, b) => a.updateTime - b.updateTime > 0 ? 1 : -1,
render: (value) => {
return dateFns.format(new Date(value), 'yyyy-MM-dd');
}
}
];
const getData = (total) => {
const data = [];
for (let i = 0; i < total; i++) {
const isSemiDesign = i % 2 === 0;
const randomNumber = (i * 1000) % 199;
data.push({
key: '' + i,
name: isSemiDesign ? `Semi Design 设计稿${i}.fig` : `Semi Pro 设计稿${i}.fig`,
owner: isSemiDesign ? '姜鹏志' : '郝宣',
size: randomNumber,
updateTime: new Date().valueOf() + randomNumber * DAY,
avatarBg: isSemiDesign ? 'grey' : 'red'
});
}
return data;
};
function Demo() {
const [dataSource, setDataSource] = useState([]);
const total = 46;
const pagination = useMemo(() => ({
pageSize: 12,
}), []);
const rowSelection = useMemo(() => {
return {
hidden: true,
fixed: 'left',
};
}, []);
useEffect(() => {
const data = getData(total);
setDataSource(data);
}, [total]);
return (
console.log(...args)}
expandedRowRender={record => {record.name}}
/>
);
}
render(Demo);