RedemptionsTable.jsx 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. import React, { useMemo, useState } from 'react';
  2. import { Table, Empty } from '@douyinfe/semi-ui';
  3. import {
  4. IllustrationNoResult,
  5. IllustrationNoResultDark
  6. } from '@douyinfe/semi-illustrations';
  7. import { getRedemptionsColumns, isExpired } from './RedemptionsColumnDefs';
  8. import DeleteRedemptionModal from './modals/DeleteRedemptionModal';
  9. const RedemptionsTable = (redemptionsData) => {
  10. const {
  11. redemptions,
  12. loading,
  13. activePage,
  14. pageSize,
  15. tokenCount,
  16. compactMode,
  17. handlePageChange,
  18. rowSelection,
  19. handleRow,
  20. manageRedemption,
  21. copyText,
  22. setEditingRedemption,
  23. setShowEdit,
  24. refresh,
  25. t,
  26. } = redemptionsData;
  27. // Modal states
  28. const [showDeleteModal, setShowDeleteModal] = useState(false);
  29. const [deletingRecord, setDeletingRecord] = useState(null);
  30. // Handle show delete modal
  31. const showDeleteRedemptionModal = (record) => {
  32. setDeletingRecord(record);
  33. setShowDeleteModal(true);
  34. };
  35. // Get all columns
  36. const columns = useMemo(() => {
  37. return getRedemptionsColumns({
  38. t,
  39. manageRedemption,
  40. copyText,
  41. setEditingRedemption,
  42. setShowEdit,
  43. refresh,
  44. redemptions,
  45. activePage,
  46. showDeleteRedemptionModal
  47. });
  48. }, [
  49. t,
  50. manageRedemption,
  51. copyText,
  52. setEditingRedemption,
  53. setShowEdit,
  54. refresh,
  55. redemptions,
  56. activePage,
  57. showDeleteRedemptionModal,
  58. ]);
  59. // Handle compact mode by removing fixed positioning
  60. const tableColumns = useMemo(() => {
  61. return compactMode ? columns.map(col => {
  62. if (col.dataIndex === 'operate') {
  63. const { fixed, ...rest } = col;
  64. return rest;
  65. }
  66. return col;
  67. }) : columns;
  68. }, [compactMode, columns]);
  69. return (
  70. <>
  71. <Table
  72. columns={tableColumns}
  73. dataSource={redemptions}
  74. scroll={compactMode ? undefined : { x: 'max-content' }}
  75. pagination={{
  76. currentPage: activePage,
  77. pageSize: pageSize,
  78. total: tokenCount,
  79. showSizeChanger: true,
  80. pageSizeOptions: [10, 20, 50, 100],
  81. onPageSizeChange: redemptionsData.handlePageSizeChange,
  82. onPageChange: handlePageChange,
  83. }}
  84. loading={loading}
  85. rowSelection={rowSelection}
  86. onRow={handleRow}
  87. empty={
  88. <Empty
  89. image={<IllustrationNoResult style={{ width: 150, height: 150 }} />}
  90. darkModeImage={<IllustrationNoResultDark style={{ width: 150, height: 150 }} />}
  91. description={t('搜索无结果')}
  92. style={{ padding: 30 }}
  93. />
  94. }
  95. className="rounded-xl overflow-hidden"
  96. size="middle"
  97. />
  98. <DeleteRedemptionModal
  99. visible={showDeleteModal}
  100. onCancel={() => setShowDeleteModal(false)}
  101. record={deletingRecord}
  102. manageRedemption={manageRedemption}
  103. refresh={refresh}
  104. redemptions={redemptions}
  105. activePage={activePage}
  106. t={t}
  107. />
  108. </>
  109. );
  110. };
  111. export default RedemptionsTable;