@keccak256-evg/passport-sdk
Version:
T-REX Passport SDK for interacting with Passport and Registry contracts
79 lines • 3.02 kB
JavaScript
;
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