Files
Genarrative/src/stores/usePlatformWalletStore.ts
T
k88936 fc0dcb0782
Project CI / Repository checks (push) Successful in 50s
Project CI / Frontend tests (push) Has been cancelled
Project CI / Backend tests (push) Has been cancelled
Project CI / Native shell tests (push) Has been cancelled
修复泥点消耗刷新不及时 (#138)
refactor:
- 主站复用game agent的zustand store

fix:
- 修复旧请求覆盖问题
- 修复账号切换问题

- 主站原本已经每 4 秒轮询 external generation 任务状态, 在这里补充触发余额刷新的时机

---------

Co-authored-by: 段舒康 <kdletters@qq.com>
Reviewed-on: http://192.168.35.82/git/GenarrativeAI/Genarrative/pulls/138
Co-authored-by: 王德宇 <kvtodev@outlook.com>
Co-committed-by: 王德宇 <kvtodev@outlook.com>
2026-08-08 10:25:02 +08:00

69 lines
2.1 KiB
TypeScript

import { useEffect } from 'react';
import { createProfileWalletStore } from '@/packages/shared/src/stores/createProfileWalletStore';
import { getPlatformProfileRechargeCenter } from '@/src/services/platform-entry/platformProfileClient.ts';
export const usePlatformWalletStore = createProfileWalletStore({
getRechargeCenter: (signal) => getPlatformProfileRechargeCenter({ signal }),
});
export function usePlatformWalletLifecycle(
currentUserId: string | null,
canAccessProtectedData: boolean,
) {
const setWalletOwner = usePlatformWalletStore(
(state) => state.setWalletOwner,
);
const onWalletBalanceMayHaveChanged = usePlatformWalletStore(
(state) => state.onWalletBalanceMayHaveChanged,
);
const resetWalletBalance = usePlatformWalletStore(
(state) => state.resetWalletBalance,
);
useEffect(() => {
const ownerUserId =
canAccessProtectedData && currentUserId ? currentUserId : null;
setWalletOwner(ownerUserId);
if (!ownerUserId) {
return () => {
resetWalletBalance();
};
}
void onWalletBalanceMayHaveChanged();
let foregroundRefreshTimer: number | null = null;
const scheduleWalletRefresh = () => {
if (foregroundRefreshTimer !== null) {
return;
}
foregroundRefreshTimer = window.setTimeout(() => {
foregroundRefreshTimer = null;
void onWalletBalanceMayHaveChanged();
}, 0);
};
const refreshVisibleWallet = () => {
if (document.visibilityState === 'visible') {
scheduleWalletRefresh();
}
};
window.addEventListener('focus', scheduleWalletRefresh);
document.addEventListener('visibilitychange', refreshVisibleWallet);
return () => {
window.removeEventListener('focus', scheduleWalletRefresh);
document.removeEventListener('visibilitychange', refreshVisibleWallet);
if (foregroundRefreshTimer !== null) {
window.clearTimeout(foregroundRefreshTimer);
}
resetWalletBalance();
};
}, [
canAccessProtectedData,
currentUserId,
onWalletBalanceMayHaveChanged,
resetWalletBalance,
setWalletOwner,
]);
}