|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import React, { useMemo } from 'react'; |
|
|
import { Empty, Descriptions } from '@douyinfe/semi-ui'; |
|
|
import CardTable from '../../common/ui/CardTable'; |
|
|
import { |
|
|
IllustrationNoResult, |
|
|
IllustrationNoResultDark, |
|
|
} from '@douyinfe/semi-illustrations'; |
|
|
import { getLogsColumns } from './UsageLogsColumnDefs'; |
|
|
|
|
|
const LogsTable = (logsData) => { |
|
|
const { |
|
|
logs, |
|
|
expandData, |
|
|
loading, |
|
|
activePage, |
|
|
pageSize, |
|
|
logCount, |
|
|
compactMode, |
|
|
visibleColumns, |
|
|
handlePageChange, |
|
|
handlePageSizeChange, |
|
|
copyText, |
|
|
showUserInfoFunc, |
|
|
hasExpandableRows, |
|
|
isAdminUser, |
|
|
t, |
|
|
COLUMN_KEYS, |
|
|
} = logsData; |
|
|
|
|
|
|
|
|
const allColumns = useMemo(() => { |
|
|
return getLogsColumns({ |
|
|
t, |
|
|
COLUMN_KEYS, |
|
|
copyText, |
|
|
showUserInfoFunc, |
|
|
isAdminUser, |
|
|
}); |
|
|
}, [t, COLUMN_KEYS, copyText, showUserInfoFunc, isAdminUser]); |
|
|
|
|
|
|
|
|
const getVisibleColumns = () => { |
|
|
return allColumns.filter((column) => visibleColumns[column.key]); |
|
|
}; |
|
|
|
|
|
const visibleColumnsList = useMemo(() => { |
|
|
return getVisibleColumns(); |
|
|
}, [visibleColumns, allColumns]); |
|
|
|
|
|
const tableColumns = useMemo(() => { |
|
|
return compactMode |
|
|
? visibleColumnsList.map(({ fixed, ...rest }) => rest) |
|
|
: visibleColumnsList; |
|
|
}, [compactMode, visibleColumnsList]); |
|
|
|
|
|
const expandRowRender = (record, index) => { |
|
|
return <Descriptions data={expandData[record.key]} />; |
|
|
}; |
|
|
|
|
|
return ( |
|
|
<CardTable |
|
|
columns={tableColumns} |
|
|
{...(hasExpandableRows() && { |
|
|
expandedRowRender: expandRowRender, |
|
|
expandRowByClick: true, |
|
|
rowExpandable: (record) => |
|
|
expandData[record.key] && expandData[record.key].length > 0, |
|
|
})} |
|
|
dataSource={logs} |
|
|
rowKey='key' |
|
|
loading={loading} |
|
|
scroll={compactMode ? undefined : { x: 'max-content' }} |
|
|
className='rounded-xl overflow-hidden' |
|
|
size='middle' |
|
|
empty={ |
|
|
<Empty |
|
|
image={<IllustrationNoResult style={{ width: 150, height: 150 }} />} |
|
|
darkModeImage={ |
|
|
<IllustrationNoResultDark style={{ width: 150, height: 150 }} /> |
|
|
} |
|
|
description={t('搜索无结果')} |
|
|
style={{ padding: 30 }} |
|
|
/> |
|
|
} |
|
|
pagination={{ |
|
|
currentPage: activePage, |
|
|
pageSize: pageSize, |
|
|
total: logCount, |
|
|
pageSizeOptions: [10, 20, 50, 100], |
|
|
showSizeChanger: true, |
|
|
onPageSizeChange: (size) => { |
|
|
handlePageSizeChange(size); |
|
|
}, |
|
|
onPageChange: handlePageChange, |
|
|
}} |
|
|
hidePagination={true} |
|
|
/> |
|
|
); |
|
|
}; |
|
|
|
|
|
export default LogsTable; |
|
|
|