UNPKG

@keccak256-evg/passport-sdk

Version:

T-REX Passport SDK for interacting with Passport and Registry contracts

79 lines 3.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useWalletPassport = useWalletPassport; const react_1 = require("react"); /** * 检查钱包是否有 Passport 的 Hook * 支持自动检查和轮询更新 */ function useWalletPassport(config) { const { sdk, walletAddress, autoCheck = true, pollingInterval = 0 } = config; const [walletPassport, setWalletPassport] = (0, react_1.useState)(null); const [isLoading, setIsLoading] = (0, react_1.useState)(false); const [error, setError] = (0, react_1.useState)(null); // 使用 ref 来跟踪当前的请求状态,避免依赖 isLoading const isRequestingRef = (0, react_1.useRef)(false); // 检查钱包 Passport - 移除对 isLoading 的依赖 const checkWalletPassport = (0, react_1.useCallback)(async () => { if (!sdk || !walletAddress || isRequestingRef.current) return; isRequestingRef.current = true; setIsLoading(true); setError(null); try { const result = await sdk.checkWalletHasPassport(walletAddress); setWalletPassport(result); } catch (err) { const error = err instanceof Error ? err : new Error('Failed to check wallet passport'); setError(error); console.error('❌ Error checking wallet passport:', error); } finally { setIsLoading(false); isRequestingRef.current = false; } }, [sdk, walletAddress]); // 移除 isLoading 依赖 // 手动检查 const check = (0, react_1.useCallback)(async () => { await checkWalletPassport(); }, [checkWalletPassport]); // 清除数据 const clear = (0, react_1.useCallback)(() => { setWalletPassport(null); setError(null); }, []); // 自动检查 - 只依赖核心参数 (0, react_1.useEffect)(() => { if (autoCheck && sdk && walletAddress) { checkWalletPassport(); } }, [autoCheck, sdk, walletAddress, checkWalletPassport]); // 轮询 - 移除对 isLoading 和 checkWalletPassport 的依赖 (0, react_1.useEffect)(() => { if (!pollingInterval || pollingInterval <= 0 || !sdk || !walletAddress) { return; } const interval = setInterval(() => { // 直接检查 ref 状态,避免依赖 isLoading if (!isRequestingRef.current && sdk && walletAddress) { checkWalletPassport(); } }, pollingInterval); return () => clearInterval(interval); }, [pollingInterval, sdk, walletAddress]); // 移除 isLoading 和 checkWalletPassport 依赖 // 清理数据当依赖变化时 (0, react_1.useEffect)(() => { if (!sdk || !walletAddress) { clear(); } }, [sdk, walletAddress, clear]); return { walletPassport, isLoading, error, check, clear, }; } //# sourceMappingURL=useWalletPassport.js.map