UNPKG

@openocean.finance/widget

Version:

Openocean Widget for cross-chain bridging and swapping. It will drive your multi-chain strategy and attract new users from everywhere.

99 lines 4.12 kB
import { ChainType, config, getChains } from '@openocean.finance/widget-sdk'; import { useQuery } from '@tanstack/react-query'; import { useCallback } from 'react'; import { useWidgetConfig } from '../providers/WidgetProvider/WidgetProvider.js'; import { isItemAllowed } from '../utils/item.js'; import { DEFAULT_CHAIN_IDS } from '../config/defaultChainIds.js'; const supportedChainTypes = [ChainType.EVM, ChainType.SVM, ChainType.UTXO]; export const useAvailableChains = (chainTypes) => { const { chains } = useWidgetConfig(); // const { providers } = useHasExternalWalletProvider(); const { data, isLoading } = useQuery({ queryKey: [ 'chains', // providers, chains?.types, chains?.allow, chains?.deny, chains?.from, chains?.to, ], queryFn: async ({ queryKey: [, chainTypesConfig] }) => { const chainTypesRequest = supportedChainTypes // providers.length > 0 ? providers : supportedChainTypes .filter((chainType) => isItemAllowed(chainType, chainTypesConfig)); let availableChains = await getChains(); // reset solana chain id const solanaChain = availableChains.find((chain) => chain.key === 'sol'); if (solanaChain) { solanaChain.chainType = ChainType.SVM; solanaChain.id = 1151111081099710; } // allow chains "starknet","aptos","near","ont","sui", const allowedChainsIds = chains?.allow?.length ? chains.allow : DEFAULT_CHAIN_IDS; const allowedChains = availableChains.filter((chain) => { if (allowedChainsIds.indexOf(chain.id) >= 0) { return true; } return false; }); /* allowedChains.push({ "key":"eth", "chainType":ChainType.EVM, "name":"Ethereum", "coin":CoinKey.WETH, "id":1, "mainnet":true, "logoURI":"https://raw.githubusercontent.com/lifinance/types/main/src/assets/icons/chains/ethereum.svg", "tokenlistUrl":"https://gateway.ipfs.io/ipns/tokens.uniswap.org", "multicallAddress":"0xcA11bde05977b3631167028862bE2a173976CA11", "relayerSupported":false, "metamask":{ "chainId":"0x1", "blockExplorerUrls":["https://etherscan.io/"], "chainName":"Ethereum Mainnet", "nativeCurrency":{ "name":"ETH", "symbol":"ETH", "decimals":18 }, "rpcUrls":[ "https://ethereum-rpc.publicnode.com", "https://eth.drpc.org" ] }, "nativeToken":{ "address":"0x0000000000000000000000000000000000000000", "chainId":1,"symbol": "ETH","decimals":18, "name":"ETH", "coinKey":"ETH", "logoURI":"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png", "priceUSD":"3804.11" }, "diamondAddress":"0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", "permit2":"0x000000000022D473030F116dDEE9F6B43aC78BA3", "permit2Proxy":"0x89c6340B1a1f4b25D36cd8B063D49045caF3f818" }) */ config.setChains(allowedChains); return allowedChains; }, refetchInterval: 300000, staleTime: 300000, }); const getChainById = useCallback((chainId, chains = data) => { if (!chainId) { return; } const chain = chains?.find((chain) => chain.id === chainId); return chain; }, [data]); return { chains: data, getChainById, isLoading, }; }; //# sourceMappingURL=useAvailableChains.js.map