TokensTable.jsx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import React, { useMemo } from 'react';
  2. import { Empty } from '@douyinfe/semi-ui';
  3. import CardTable from '../../common/ui/CardTable.js';
  4. import {
  5. IllustrationNoResult,
  6. IllustrationNoResultDark,
  7. } from '@douyinfe/semi-illustrations';
  8. import { getTokensColumns } from './TokensColumnDefs.js';
  9. const TokensTable = (tokensData) => {
  10. const {
  11. tokens,
  12. loading,
  13. activePage,
  14. pageSize,
  15. tokenCount,
  16. compactMode,
  17. handlePageChange,
  18. handlePageSizeChange,
  19. rowSelection,
  20. handleRow,
  21. showKeys,
  22. setShowKeys,
  23. copyText,
  24. manageToken,
  25. onOpenLink,
  26. setEditingToken,
  27. setShowEdit,
  28. refresh,
  29. t,
  30. } = tokensData;
  31. // Get all columns
  32. const columns = useMemo(() => {
  33. return getTokensColumns({
  34. t,
  35. showKeys,
  36. setShowKeys,
  37. copyText,
  38. manageToken,
  39. onOpenLink,
  40. setEditingToken,
  41. setShowEdit,
  42. refresh,
  43. });
  44. }, [
  45. t,
  46. showKeys,
  47. setShowKeys,
  48. copyText,
  49. manageToken,
  50. onOpenLink,
  51. setEditingToken,
  52. setShowEdit,
  53. refresh,
  54. ]);
  55. // Handle compact mode by removing fixed positioning
  56. const tableColumns = useMemo(() => {
  57. return compactMode ? columns.map(col => {
  58. if (col.dataIndex === 'operate') {
  59. const { fixed, ...rest } = col;
  60. return rest;
  61. }
  62. return col;
  63. }) : columns;
  64. }, [compactMode, columns]);
  65. return (
  66. <CardTable
  67. columns={tableColumns}
  68. dataSource={tokens}
  69. scroll={compactMode ? undefined : { x: 'max-content' }}
  70. pagination={{
  71. currentPage: activePage,
  72. pageSize: pageSize,
  73. total: tokenCount,
  74. showSizeChanger: true,
  75. pageSizeOptions: [10, 20, 50, 100],
  76. onPageSizeChange: handlePageSizeChange,
  77. onPageChange: handlePageChange,
  78. }}
  79. loading={loading}
  80. rowSelection={rowSelection}
  81. onRow={handleRow}
  82. empty={
  83. <Empty
  84. image={<IllustrationNoResult style={{ width: 150, height: 150 }} />}
  85. darkModeImage={<IllustrationNoResultDark style={{ width: 150, height: 150 }} />}
  86. description={t('搜索无结果')}
  87. style={{ padding: 30 }}
  88. />
  89. }
  90. className="rounded-xl overflow-hidden"
  91. size="middle"
  92. />
  93. );
  94. };
  95. export default TokensTable;