import React, { useState, useEffect, useRef, useMemo } from 'react';
import { Table, Switch, Avatar, Tooltip } from '../../../index';
// eslint-disable-next-line max-lines-per-function
function Demo() {
const rowKey = record => `${record.city && record.city.toLowerCase()}-${record.job && record.job.toLowerCase()}`;
const [dynamic, setDynamic] = useState(false);
const [times, setTimes] = useState(1);
const { current: cache } = useRef({ times, size: 1, interval: null, intervalTimeout: 3000 });
useEffect(() => {
if (dynamic) {
cache.interval = setInterval(() => {
cache.times++;
setTimes(cache.times);
}, cache.intervalTimeout);
}
return () => {
clearInterval(cache.interval);
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [dynamic]);
const data = useMemo(() => {
/**
* FE => frontend engineer
* BE => backend engineer
* Andoird => android engineer
* IOS => ios engineer
* SE => software engineer
*/
const rawData = [
{ city: 'Beijing', job: 'FE', department: 'IES' },
{ city: 'Beijing', job: 'BE', department: 'IES' },
{ city: 'Shanghai', job: 'Android', department: 'IES' },
{ city: 'Tokyo', job: 'Android', department: 'IES' },
{ city: 'Shanghai', job: 'IOS', department: 'EE' },
{ city: 'LA', job: 'SE', department: 'EE' },
{ city: 'Beijing', job: 'Android', department: 'EE' },
{ city: 'Tokyo', job: 'IOS', department: 'EE' },
{ city: 'Tokyo', job: 'SE', department: 'DATA' },
{ city: 'Shanghai', job: 'BE', department: 'DATA' },
{ city: 'LA', job: 'Android', department: 'DATA' },
{ city: 'LA', job: 'IOS', department: 'DATA' },
];
const start = 0;
const end = times * cache.size;
const newData = [];
for (let i = start + 1; i <= end; i++) {
newData.push(
...rawData.map(item => ({
...item,
job: `${item.job } L${i}`,
}))
);
}
console.log('newData: ', newData);
return newData;
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [times]);
const columns = [
{
dataIndex: 'city',
title: 'City',
width: 200,
sorter: (a, b) => (a.city > b.city ? 1 : -1),
fixed: 'left',
},
{
dataIndex: 'job',
title: 'Job',
filters: [{ text: 'IOS', value: 'IOS' }, { text: 'Android', value: 'Android' }],
onFilter: (value, record) => record.job && record.job.indexOf(value) === 0,
},
{
dataIndex: 'department',
title: 'Department',
fixed: 'right',
width: 200,
render: text => (