| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
| 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,
|
| openChannelAffinityUsageCacheModal,
|
| hasExpandableRows,
|
| isAdminUser,
|
| t,
|
| COLUMN_KEYS,
|
| } = logsData;
|
|
|
|
|
| const allColumns = useMemo(() => {
|
| return getLogsColumns({
|
| t,
|
| COLUMN_KEYS,
|
| copyText,
|
| showUserInfoFunc,
|
| openChannelAffinityUsageCacheModal,
|
| isAdminUser,
|
| });
|
| }, [
|
| t,
|
| COLUMN_KEYS,
|
| copyText,
|
| showUserInfoFunc,
|
| openChannelAffinityUsageCacheModal,
|
| 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;
|
|
|