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.

67 lines (61 loc) 2.05 kB
import { ChainType } from '@lifi/sdk' import { useContext, useMemo } from 'react' import { useWidgetConfig } from '../WidgetProvider/WidgetProvider.js' import { EVMExternalContext } from './EVMExternalContext.js' import { SuiExternalContext } from './SuiExternalContext.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, ChainType.MVM, ] export function useExternalWalletProvider(): ExternalWalletProvider { const { walletConfig } = useWidgetConfig() const hasExternalEVMContext = useContext(EVMExternalContext) const hasExternalSVMContext = useContext(SVMExternalContext) const hasExternalUTXOContext = useContext(UTXOExternalContext) const hasExternalSuiContext = useContext(SuiExternalContext) const data = useMemo(() => { const providers: ChainType[] = [] if (hasExternalEVMContext) { providers.push(ChainType.EVM) } if (hasExternalSVMContext) { providers.push(ChainType.SVM) } if (hasExternalUTXOContext) { providers.push(ChainType.UTXO) } if (hasExternalSuiContext) { providers.push(ChainType.MVM) } const hasExternalProvider = hasExternalEVMContext || hasExternalSVMContext || hasExternalUTXOContext || hasExternalSuiContext const useExternalWalletProvidersOnly = hasExternalProvider && !walletConfig?.usePartialWalletManagement return { useExternalWalletProvidersOnly, externalChainTypes: providers, internalChainTypes: internalChainTypes.filter( (chainType) => !providers.includes(chainType) ), } }, [ hasExternalEVMContext, hasExternalSVMContext, hasExternalUTXOContext, hasExternalSuiContext, walletConfig?.usePartialWalletManagement, ]) return data }