RedemptionsTable.jsx 3.0 KB

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