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() {
-
+
{currentUser?.coin || '--'}
- void refreshWalletBalance()}
+ className="flex h-design-13 w-design-13 shrink-0 cursor-pointer items-center justify-center text-[#8DE4EA] disabled:cursor-wait disabled:opacity-65"
+ >
+
+
+
+ >
+
+
-
+
) : (
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: {