MjLogsTable.jsx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import React, { useMemo } from 'react';
  2. import { Table, Empty } from '@douyinfe/semi-ui';
  3. import {
  4. IllustrationNoResult,
  5. IllustrationNoResultDark,
  6. } from '@douyinfe/semi-illustrations';
  7. import { getMjLogsColumns } from './MjLogsColumnDefs.js';
  8. const MjLogsTable = (mjLogsData) => {
  9. const {
  10. logs,
  11. loading,
  12. activePage,
  13. pageSize,
  14. logCount,
  15. compactMode,
  16. visibleColumns,
  17. handlePageChange,
  18. handlePageSizeChange,
  19. copyText,
  20. openContentModal,
  21. openImageModal,
  22. isAdminUser,
  23. t,
  24. COLUMN_KEYS,
  25. } = mjLogsData;
  26. // Get all columns
  27. const allColumns = useMemo(() => {
  28. return getMjLogsColumns({
  29. t,
  30. COLUMN_KEYS,
  31. copyText,
  32. openContentModal,
  33. openImageModal,
  34. isAdminUser,
  35. });
  36. }, [
  37. t,
  38. COLUMN_KEYS,
  39. copyText,
  40. openContentModal,
  41. openImageModal,
  42. isAdminUser,
  43. ]);
  44. // Filter columns based on visibility settings
  45. const getVisibleColumns = () => {
  46. return allColumns.filter((column) => visibleColumns[column.key]);
  47. };
  48. const visibleColumnsList = useMemo(() => {
  49. return getVisibleColumns();
  50. }, [visibleColumns, allColumns]);
  51. const tableColumns = useMemo(() => {
  52. return compactMode
  53. ? visibleColumnsList.map(({ fixed, ...rest }) => rest)
  54. : visibleColumnsList;
  55. }, [compactMode, visibleColumnsList]);
  56. return (
  57. <Table
  58. columns={tableColumns}
  59. dataSource={logs}
  60. rowKey='key'
  61. loading={loading}
  62. scroll={compactMode ? undefined : { x: 'max-content' }}
  63. className="rounded-xl overflow-hidden"
  64. size="middle"
  65. empty={
  66. <Empty
  67. image={
  68. <IllustrationNoResult style={{ width: 150, height: 150 }} />
  69. }
  70. darkModeImage={
  71. <IllustrationNoResultDark style={{ width: 150, height: 150 }} />
  72. }
  73. description={t('搜索无结果')}
  74. style={{ padding: 30 }}
  75. />
  76. }
  77. pagination={{
  78. currentPage: activePage,
  79. pageSize: pageSize,
  80. total: logCount,
  81. pageSizeOptions: [10, 20, 50, 100],
  82. showSizeChanger: true,
  83. onPageSizeChange: handlePageSizeChange,
  84. onPageChange: handlePageChange,
  85. }}
  86. />
  87. );
  88. };
  89. export default MjLogsTable;