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: {