From 2a76f1d722790fba9de770f4bc8920ead91a8136 Mon Sep 17 00:00:00 2001 From: JiaJun <2394389886@qq.com> Date: Fri, 17 Jul 2026 17:26:06 +0800 Subject: [PATCH] =?UTF-8?q?feat(game):=20=E6=B7=BB=E5=8A=A0=E9=92=B1?= =?UTF-8?q?=E5=8C=85=E4=BD=99=E9=A2=9D=E5=88=B7=E6=96=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在桌面端和移动端头部组件中添加余额刷新按钮 - 实现 useWalletBalanceRefresh 钩子用于余额刷新逻辑 - 添加刷新图标并集成到钻石币显示区域 - 支持多语言本地化包括英语、印尼语、马来语和中文 - 优化消息广播组件的动画过渡效果 - 添加防重复提交机制避免并发刷新请求 - 集成加载状态显示和错误处理通知功能 --- src/components/message-broadcast.tsx | 7 ++- .../components/desktop/desktop-header.tsx | 40 ++++++++++++----- .../game/components/mobile/mobile-header.tsx | 44 +++++++++++++----- src/hooks/use-wallet-balance-refresh.ts | 45 +++++++++++++++++++ src/locales/en-US.ts | 1 + src/locales/id-ID.ts | 1 + src/locales/ms-MY.ts | 1 + src/locales/zh-CN.ts | 1 + 8 files changed, 117 insertions(+), 23 deletions(-) create mode 100644 src/hooks/use-wallet-balance-refresh.ts diff --git a/src/components/message-broadcast.tsx b/src/components/message-broadcast.tsx index 72c2f02..6eb4f4a 100644 --- a/src/components/message-broadcast.tsx +++ b/src/components/message-broadcast.tsx @@ -120,7 +120,7 @@ export function MessageBroadcast({ src={broadcast} />
- + {activeBroadcast ? ( state.setModalOpen) + const { isRefreshingBalance, refreshWalletBalance } = + useWalletBalanceRefresh() const { authStatus, currentLanguageLabel, @@ -217,10 +222,7 @@ export function DesktopHeader() {
- + + - + ) : (
state.setModalOpen) + const { isRefreshingBalance, refreshWalletBalance } = + useWalletBalanceRefresh() const { authStatus, currentLanguageLabel, @@ -133,11 +137,7 @@ export function MobileHeader() {
- + - + ) : (
diff --git a/src/hooks/use-wallet-balance-refresh.ts b/src/hooks/use-wallet-balance-refresh.ts new file mode 100644 index 0000000..b8d5bd7 --- /dev/null +++ b/src/hooks/use-wallet-balance-refresh.ts @@ -0,0 +1,45 @@ +import { useCallback, useRef, useState } from 'react' +import { useTranslation } from 'react-i18next' +import { getCurrentUserProfile } from '@/api' +import { notify } from '@/lib/notify' +import { useAuthStore } from '@/store' + +export function useWalletBalanceRefresh() { + const { t } = useTranslation() + const setCurrentUser = useAuthStore((state) => state.setCurrentUser) + const [isRefreshingBalance, setIsRefreshingBalance] = useState(false) + const refreshPromiseRef = useRef | null>(null) + + const refreshWalletBalance = useCallback(() => { + if (refreshPromiseRef.current) { + return refreshPromiseRef.current + } + + setIsRefreshingBalance(true) + + const refreshPromise = getCurrentUserProfile() + .then((currentUser) => { + setCurrentUser(currentUser) + }) + .catch((error: unknown) => { + notify.error( + error instanceof Error + ? error.message + : t('commonUi.toast.requestFailed'), + ) + }) + .finally(() => { + refreshPromiseRef.current = null + setIsRefreshingBalance(false) + }) + + refreshPromiseRef.current = refreshPromise + + return refreshPromise + }, [setCurrentUser, t]) + + return { + isRefreshingBalance, + refreshWalletBalance, + } +} diff --git a/src/locales/en-US.ts b/src/locales/en-US.ts index d25973d..97c86f3 100644 --- a/src/locales/en-US.ts +++ b/src/locales/en-US.ts @@ -479,6 +479,7 @@ export default { }, commonUi: { actions: { + refreshBalance: 'Refresh balance', submitting: TEXT_SUBMITTING, }, dialog: { diff --git a/src/locales/id-ID.ts b/src/locales/id-ID.ts index a920692..77c7c44 100644 --- a/src/locales/id-ID.ts +++ b/src/locales/id-ID.ts @@ -478,6 +478,7 @@ export default { }, commonUi: { actions: { + refreshBalance: 'Segarkan saldo', submitting: TEXT_SUBMITTING, }, dialog: { diff --git a/src/locales/ms-MY.ts b/src/locales/ms-MY.ts index b651815..7d4f64a 100644 --- a/src/locales/ms-MY.ts +++ b/src/locales/ms-MY.ts @@ -481,6 +481,7 @@ export default { }, commonUi: { actions: { + refreshBalance: 'Segarkan baki', submitting: TEXT_SUBMITTING, }, dialog: { diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index a4a17c5..ed04774 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -462,6 +462,7 @@ export default { }, commonUi: { actions: { + refreshBalance: '刷新余额', submitting: TEXT_SUBMITTING, }, dialog: {