UNPKG

@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.

54 lines (47 loc) 1.76 kB
import { ChainType } from '@lifi/sdk' import { useContext, useMemo } from 'react' import { useWidgetConfig } from '../WidgetProvider/WidgetProvider.js' import { EVMExternalContext } from './EVMExternalContext.js' import { SVMExternalContext } from './SVMExternalContext.js' import { UTXOExternalContext } from './UTXOExternalContext.js' interface ExternalWalletProvider { useExternalWalletProvidersOnly: boolean externalChainTypes: ChainType[] internalChainTypes: ChainType[] } const internalChainTypes = [ChainType.EVM, ChainType.SVM, ChainType.UTXO] export function useExternalWalletProvider(): ExternalWalletProvider { const { walletConfig } = useWidgetConfig() const hasExternalEVMContext = useContext(EVMExternalContext) const hasExternalSVMContext = useContext(SVMExternalContext) const hasExternalUTXOContext = useContext(UTXOExternalContext) const data = useMemo(() => { const providers: ChainType[] = [] if (hasExternalEVMContext) { providers.push(ChainType.EVM) } if (hasExternalSVMContext) { providers.push(ChainType.SVM) } if (hasExternalUTXOContext) { providers.push(ChainType.UTXO) } const hasExternalProvider = hasExternalEVMContext || hasExternalSVMContext || hasExternalUTXOContext const useExternalWalletProvidersOnly = hasExternalProvider && !walletConfig?.usePartialWalletManagement return { useExternalWalletProvidersOnly, externalChainTypes: providers, internalChainTypes: internalChainTypes.filter( (chainType) => !providers.includes(chainType) ), } }, [ hasExternalEVMContext, hasExternalSVMContext, hasExternalUTXOContext, walletConfig?.usePartialWalletManagement, ]) return data }