UNPKG

@mojito-inc/connect-wallet

Version:

Connecting wallet via metamask, wallet connect, email

111 lines (108 loc) 5.12 kB
import { __awaiter } from '../_virtual/_tslib.js'; import { useState, useCallback, useEffect } from 'react'; import { useTokenGating as useTokenGating$1, useClaims } from '@mojito-inc/core-service'; const useTokenGating = ({ data }) => { const { checkTokenGating } = useTokenGating$1(); const { redeemEarnableItem, getInvoiceDetails } = useClaims(); const [loading, setLoading] = useState({ gatingLoading: false, redeemEarnableLoading: false, invoiceLoading: false, }); const [errorMessage, setErrorMessage] = useState({ gatingMessage: '', invoiceMessage: '', redeemEarnableMessage: '', }); const [gatedTokens, setGatedTokens] = useState(null); const [invoiceDetails, setInvoiceDetails] = useState(null); const [shouldRefetch, setShouldRefetch] = useState(false); const [redeemItem, setRedeemItem] = useState(null); const [error, setError] = useState(false); const handleReCheckTokenGating = useCallback(() => { setShouldRefetch(true); }, []); const isTokenGating = useCallback(() => __awaiter(void 0, void 0, void 0, function* () { try { setError(false); setGatedTokens(null); setLoading(prev => (Object.assign(Object.assign({}, prev), { gatingLoading: true }))); const response = yield checkTokenGating({ buyerAddress: data.buyerAddress, groupID: data.groupID, ruleID: data === null || data === void 0 ? void 0 : data.ruleID, contractAddress: data === null || data === void 0 ? void 0 : data.contractAddress, tokenId: data === null || data === void 0 ? void 0 : data.tokenId, }); setGatedTokens(response.data); setLoading(prev => (Object.assign(Object.assign({}, prev), { gatingLoading: false }))); return response.data; } catch (err) { setLoading(prev => (Object.assign(Object.assign({}, prev), { gatingLoading: false }))); setErrorMessage(prev => (Object.assign(Object.assign({}, prev), { gatingMessage: err === null || err === void 0 ? void 0 : err.message }))); setError(true); setGatedTokens(null); return null; } }), [checkTokenGating, data.buyerAddress, data === null || data === void 0 ? void 0 : data.contractAddress, data.groupID, data === null || data === void 0 ? void 0 : data.ruleID, data === null || data === void 0 ? void 0 : data.tokenId]); const redeemEarnableToken = useCallback((claimableItemId, destAddr, gating) => __awaiter(void 0, void 0, void 0, function* () { try { setError(false); setRedeemItem(null); setLoading(prev => (Object.assign(Object.assign({}, prev), { redeemEarnableLoading: true }))); const response = yield redeemEarnableItem({ claimableItemId, destAddr, gating, }); setRedeemItem(response.data); setLoading(prev => (Object.assign(Object.assign({}, prev), { redeemEarnableLoading: false }))); return response.data; } catch (err) { setLoading(prev => (Object.assign(Object.assign({}, prev), { redeemEarnableLoading: false }))); setErrorMessage(prev => (Object.assign(Object.assign({}, prev), { redeemEarnableMessage: err === null || err === void 0 ? void 0 : err.message }))); setError(true); setRedeemItem(null); return null; } }), [redeemEarnableItem]); const getClaimInvoiceDetails = useCallback((invoiceID) => __awaiter(void 0, void 0, void 0, function* () { try { setLoading(prev => (Object.assign(Object.assign({}, prev), { invoiceLoading: true }))); setInvoiceDetails(null); const response = yield getInvoiceDetails({ invoiceID, }); setInvoiceDetails(response.data); setLoading(prev => (Object.assign(Object.assign({}, prev), { invoiceLoading: false }))); return response.data; } catch (err) { setLoading(prev => (Object.assign(Object.assign({}, prev), { invoiceLoading: false }))); setErrorMessage(prev => (Object.assign(Object.assign({}, prev), { invoiceMessage: err === null || err === void 0 ? void 0 : err.message }))); setError(true); setInvoiceDetails(null); return null; } }), [getInvoiceDetails]); useEffect(() => { if (shouldRefetch) { isTokenGating(); setShouldRefetch(false); } }, [isTokenGating, shouldRefetch]); return { gatedTokens, redeemItem, invoiceDetails, loading, error, errorMessage, handleReCheckTokenGating, redeemEarnableToken, getClaimInvoiceDetails, }; }; export { useTokenGating };