@lifi/widget
Version:
LI.FI Widget for cross-chain bridging and swapping. It will drive your multi-chain strategy and attract new users from everywhere.
55 lines • 2.18 kB
JavaScript
import { useMemo } from 'react';
import { useFromTokenSufficiency } from '../../hooks/useFromTokenSufficiency.js';
import { useGasSufficiency } from '../../hooks/useGasSufficiency.js';
import { useIsCompatibleDestinationAccount } from '../../hooks/useIsCompatibleDestinationAccount.js';
import { useToAddressRequirements } from '../../hooks/useToAddressRequirements.js';
export const useMessageQueue = (route, allowInteraction) => {
const { requiredToAddress, toAddress } = useToAddressRequirements(route);
const { isCompatibleDestinationAccount, isLoading: isCompatibleDestinationAccountLoading, } = useIsCompatibleDestinationAccount(route);
const { insufficientFromToken, isLoading: isFromTokenSufficiencyLoading } = useFromTokenSufficiency(route);
const { insufficientGas, isLoading: isGasSufficiencyLoading } = useGasSufficiency(route);
const messageQueue = useMemo(() => {
const queue = [];
if (insufficientFromToken) {
queue.push({
id: 'INSUFFICIENT_FUNDS',
priority: 1,
});
}
if (insufficientGas?.length) {
queue.push({
id: 'INSUFFICIENT_GAS',
priority: 2,
props: { insufficientGas },
});
}
if (!isCompatibleDestinationAccount && !allowInteraction) {
queue.push({
id: 'ACCOUNT_NOT_DEPLOYED',
priority: 3,
});
}
if (requiredToAddress && !toAddress) {
queue.push({
id: 'TO_ADDRESS_REQUIRED',
priority: 4,
});
}
return queue.sort((a, b) => a.priority - b.priority);
}, [
allowInteraction,
insufficientFromToken,
insufficientGas,
isCompatibleDestinationAccount,
requiredToAddress,
toAddress,
]);
return {
messages: messageQueue,
hasMessages: messageQueue.length > 0,
isLoading: isGasSufficiencyLoading ||
isFromTokenSufficiencyLoading ||
isCompatibleDestinationAccountLoading,
};
};
//# sourceMappingURL=useMessageQueue.js.map