fc0dcb0782
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>
69 lines
2.1 KiB
TypeScript
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,
|
|
]);
|
|
}
|