From 252fddf3def7b443b3bea661fbe739dcec2b3730 Mon Sep 17 00:00:00 2001 From: t0ng7u Date: Sun, 20 Jul 2025 01:21:06 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20feat:=20Enhance=20table=20UX=20&?= =?UTF-8?q?=20fix=20reset=20actions=20across=20Users=20/=20Tokens=20/=20Re?= =?UTF-8?q?demptions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Users table (UsersColumnDefs.js) • Merged “Status” into the “Statistics” tag: unified text-color logic, removed duplicate renderStatus / renderOverallStatus helpers. • Switch now disabled for deleted users. • Replaced dropdown “More” menu with explicit action buttons (Edit / Promote / Demote / Delete) and set column width to 200 px. • Deleted unused Dropdown & IconMore imports and tidied redundant code. Users filters & hooks • UsersFilters.jsx – store formApi in a ref; reset button clears form then reloads data after 100 ms. • useUsersData.js – call setLoading(true) at the start of loadUsers so the Query button shows loading on reset / reload. TokensFilters.jsx & RedemptionsFilters.jsx • Same ref-based reset pattern with 100 ms debounce to restore working “Reset” buttons. Other clean-ups • Removed repeated status strings and unused helper functions. • Updated import lists to reflect component changes. Result – Reset buttons now reliably clear filters and reload data with proper loading feedback. – Users table shows concise status information and all operation buttons without extra clicks. --- web/src/components/layout/SiderBar.js | 4 +-- .../table/redemptions/RedemptionsFilters.jsx | 25 ++++++++++-------- .../components/table/tokens/TokensFilters.jsx | 25 ++++++++++-------- .../components/table/users/UsersFilters.jsx | 26 ++++++++++--------- web/src/hooks/users/useUsersData.js | 1 + web/src/i18n/locales/en.json | 5 ++-- 6 files changed, 48 insertions(+), 38 deletions(-) diff --git a/web/src/components/layout/SiderBar.js b/web/src/components/layout/SiderBar.js index c7f7df31..e8703113 100644 --- a/web/src/components/layout/SiderBar.js +++ b/web/src/components/layout/SiderBar.js @@ -128,13 +128,13 @@ const SiderBar = ({ onNavigate = () => { } }) => { const adminItems = useMemo( () => [ { - text: t('渠道'), + text: t('渠道管理'), itemKey: 'channel', to: '/channel', className: isAdmin() ? '' : 'tableHiddle', }, { - text: t('兑换码'), + text: t('兑换码管理'), itemKey: 'redemption', to: '/redemption', className: isAdmin() ? '' : 'tableHiddle', diff --git a/web/src/components/table/redemptions/RedemptionsFilters.jsx b/web/src/components/table/redemptions/RedemptionsFilters.jsx index f659200c..3766706b 100644 --- a/web/src/components/table/redemptions/RedemptionsFilters.jsx +++ b/web/src/components/table/redemptions/RedemptionsFilters.jsx @@ -17,7 +17,7 @@ along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ -import React from 'react'; +import React, { useRef } from 'react'; import { Form, Button } from '@douyinfe/semi-ui'; import { IconSearch } from '@douyinfe/semi-icons'; @@ -31,20 +31,23 @@ const RedemptionsFilters = ({ }) => { // Handle form reset and immediate search - const handleReset = (formApi) => { - if (formApi) { - formApi.reset(); - // Reset and search immediately - setTimeout(() => { - searchRedemptions(); - }, 100); - } + const formApiRef = useRef(null); + + const handleReset = () => { + if (!formApiRef.current) return; + formApiRef.current.reset(); + setTimeout(() => { + searchRedemptions(); + }, 100); }; return (
setFormApi(api)} + getFormApi={(api) => { + setFormApi(api); + formApiRef.current = api; + }} onSubmit={searchRedemptions} allowEmpty={true} autoComplete="off" @@ -76,7 +79,7 @@ const RedemptionsFilters = ({