@mojito-inc/connect-wallet
Version:
Connecting wallet via metamask, wallet connect, email
111 lines (108 loc) • 5.12 kB
JavaScript
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 };