@orderly.network/ui-transfer 3.0.0-beta.6 → 3.0.0-beta.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { i18n, useTranslation, Trans } from '@orderly.network/i18n';
2
- import { registerSimpleDialog, registerSimpleSheet, Tabs, TabPanel, ArrowDownSquareFillIcon, ArrowUpSquareFillIcon, ExtensionSlot, ExtensionPositionEnum, Box, textVariants, Flex, toast, Text, cn, Button, Spinner, Select, Input, inputFormatter, useScreen, modal, Tooltip, Tips, AlertDialog, EditIcon, ArrowLeftRightIcon, WalletIcon, DropdownMenuRoot, DropdownMenuTrigger, DropdownMenuPortal, DropdownMenuContent, ScrollArea, ChainIcon, Badge, TokenIcon, CaretUpIcon, CaretDownIcon, SimpleDialog, CloseRoundFillIcon, ExclamationFillIcon, WarningIcon, SelectItem, ChevronRightIcon, Checkbox, CloseIcon } from '@orderly.network/ui';
2
+ import { registerSimpleDialog, registerSimpleSheet, Tabs, TabPanel, ArrowDownSquareFillIcon, ArrowUpSquareFillIcon, ExtensionSlot, ExtensionPositionEnum, Box, textVariants, Flex, toast, Text, cn, Button, Spinner, Select, Input, inputFormatter, useScreen, modal, Tooltip, Tips, AlertDialog, EditIcon, ArrowLeftRightIcon, WalletIcon, DropdownMenuRoot, DropdownMenuTrigger, DropdownMenuPortal, DropdownMenuContent, ScrollArea, ChainIcon, Badge, CaretUpIcon, CaretDownIcon, SimpleDialog, CloseRoundFillIcon, ExclamationFillIcon, TokenIcon, WarningIcon, SelectItem, ChevronRightIcon, Checkbox, CloseIcon } from '@orderly.network/ui';
3
3
  import { forwardRef, useState, isValidElement, useMemo, useEffect, useCallback, useRef } from 'react';
4
4
  import { useConfig, useWalletConnector, useLocalStorage, useConvert, useOdosQuote, useComputedLTV, useAccount, useAppStore, useTransfer, useSubAccountDataObserver, useSubAccountMaxWithdrawal, useTokensInfo, useEventEmitter, usePositionStream, useIndexPricesStream, useOrderlyContext, useDeposit, useAssetsHistory, useChains, useMemoizedFn, useWithdraw, useWalletTopic, useQuery, useSWR, useTokenInfo, useHoldingStream, useInternalTransfer, useDebouncedCallback, usePrivateQuery, useTransferHistory, useBalanceTopic } from '@orderly.network/hooks';
5
5
  import { Decimal, zero, praseChainIdToNumber, int2hex, toNonExponential, formatWithPrecision, isSolana } from '@orderly.network/utils';
@@ -803,10 +803,10 @@ var buildExplorerUrl = (baseUrl, txId) => {
803
803
  var useExclusiveDeposit = (options2) => {
804
804
  const active = options2.active ?? true;
805
805
  const confirmed = options2.confirmed ?? true;
806
- const { chainId, explorerBaseUrl } = options2;
806
+ const { chainId, token, explorerBaseUrl } = options2;
807
807
  const { t: t0 } = useTranslation();
808
808
  const t = t0;
809
- const receiverAddressKey = confirmed && chainId ? `/v1/client/asset/receiver_address?chain_id=${chainId}` : null;
809
+ const receiverAddressKey = confirmed && chainId && token ? `/v1/client/asset/receiver_address?chain_id=${chainId}&token=${token}` : null;
810
810
  const receiverEventsKey = active && confirmed ? "/v1/client/asset/receiver_events" : null;
811
811
  const {
812
812
  data: addressData,
@@ -858,46 +858,87 @@ var useExclusiveDeposit = (options2) => {
858
858
  eventsError
859
859
  };
860
860
  };
861
- var SUPPORTED_CHAINS = {
862
- prod: [42161],
863
- testnet: [421614]
864
- };
865
- var SUPPORTED_TOKENS = ["USDC"];
866
- var useExclusiveDepositOptions = () => {
867
- const env = useConfig("env");
861
+ var useExclusiveDepositOptions = (params) => {
868
862
  const networkId = useConfig("networkId");
869
- const [chains, { findByChainId }] = useChains(networkId, {
863
+ const tokensInfo = useTokensInfo();
864
+ const selectedNetwork = params?.selectedNetwork;
865
+ const [, { findByChainId }] = useChains(networkId, {
870
866
  pick: "network_infos"
871
867
  });
872
- const supportedChainIds = env === "prod" ? SUPPORTED_CHAINS.prod : SUPPORTED_CHAINS.testnet;
868
+ const combos = useMemo(() => {
869
+ if (!tokensInfo?.length) return [];
870
+ const result = [];
871
+ for (const token of tokensInfo) {
872
+ for (const detail of token.chain_details ?? []) {
873
+ if (detail.exclusive_deposit_supported === true) {
874
+ const chainId = Number(detail.chain_id);
875
+ const chain = findByChainId(chainId);
876
+ result.push({
877
+ chainId,
878
+ chainName: chain?.network_infos?.name ?? `Chain ${chainId}`,
879
+ explorerUrl: chain?.network_infos?.explorer_base_url ?? "",
880
+ tokenSymbol: token.token
881
+ });
882
+ }
883
+ }
884
+ }
885
+ return result;
886
+ }, [tokensInfo, findByChainId]);
873
887
  const networkOptions = useMemo(() => {
874
- return supportedChainIds.map((chainId) => {
875
- const chain = findByChainId(chainId);
876
- const name = chain?.network_infos?.name ?? `Chain ${chainId}`;
877
- const explorerUrl = chain?.network_infos?.explorer_base_url ?? "";
878
- return {
879
- label: name,
880
- value: String(chainId),
881
- chainId,
882
- explorerUrl
883
- };
888
+ const seen = /* @__PURE__ */ new Map();
889
+ for (const combo of combos) {
890
+ if (!seen.has(combo.chainId)) {
891
+ seen.set(combo.chainId, {
892
+ label: combo.chainName,
893
+ value: String(combo.chainId),
894
+ chainId: combo.chainId,
895
+ explorerUrl: combo.explorerUrl
896
+ });
897
+ }
898
+ }
899
+ const list = Array.from(seen.values());
900
+ list.sort((a, b) => {
901
+ if (a.chainId === 42161) return -1;
902
+ if (b.chainId === 42161) return 1;
903
+ return 0;
884
904
  });
885
- }, [supportedChainIds, findByChainId]);
905
+ return list;
906
+ }, [combos]);
886
907
  const tokenOptions = useMemo(() => {
887
- return SUPPORTED_TOKENS.map((symbol) => ({
888
- label: symbol,
889
- value: symbol
890
- }));
891
- }, []);
892
- return { networkOptions, tokenOptions };
908
+ if (!selectedNetwork) return [];
909
+ const chainId = Number(selectedNetwork);
910
+ const seen = /* @__PURE__ */ new Set();
911
+ const result = [];
912
+ for (const combo of combos) {
913
+ if (combo.chainId === chainId && !seen.has(combo.tokenSymbol)) {
914
+ seen.add(combo.tokenSymbol);
915
+ result.push({ label: combo.tokenSymbol, value: combo.tokenSymbol });
916
+ }
917
+ }
918
+ result.sort((a, b) => {
919
+ if (a.value === "USDC") return -1;
920
+ if (b.value === "USDC") return 1;
921
+ return 0;
922
+ });
923
+ return result;
924
+ }, [combos, selectedNetwork]);
925
+ const isSupported = combos.length > 0;
926
+ return { networkOptions, tokenOptions, isSupported };
893
927
  };
894
928
  var ExclusiveDeposit = ({ active }) => {
895
929
  const { t: t0 } = useTranslation();
896
930
  const t = t0;
897
931
  const [selectedNetwork, setSelectedNetwork] = useState("");
898
932
  const [selectedToken, setSelectedToken] = useState("");
899
- const { networkOptions, tokenOptions } = useExclusiveDepositOptions();
933
+ const { networkOptions, tokenOptions} = useExclusiveDepositOptions({
934
+ selectedNetwork
935
+ });
900
936
  const confirmed = !!selectedNetwork && !!selectedToken;
937
+ useEffect(() => {
938
+ if (selectedToken && tokenOptions.length > 0 && !tokenOptions.some((t2) => t2.value === selectedToken)) {
939
+ setSelectedToken("");
940
+ }
941
+ }, [selectedNetwork, selectedToken, tokenOptions]);
901
942
  const selectedNetworkOption = selectedNetwork ? networkOptions.find((n) => n.value === selectedNetwork) : void 0;
902
943
  const selectedChainId = selectedNetworkOption?.chainId;
903
944
  const selectedTokenOption = selectedToken ? tokenOptions.find((t2) => t2.value === selectedToken) : void 0;
@@ -913,6 +954,7 @@ var ExclusiveDeposit = ({ active }) => {
913
954
  active,
914
955
  confirmed,
915
956
  chainId: selectedChainId,
957
+ token: selectedToken,
916
958
  explorerBaseUrl: selectedNetworkOption?.explorerUrl ?? ""
917
959
  });
918
960
  const networkName = selectedNetworkOption?.label ?? "";
@@ -930,31 +972,20 @@ var ExclusiveDeposit = ({ active }) => {
930
972
  address && /* @__PURE__ */ jsx(CopyAddress, { address })
931
973
  ] }),
932
974
  /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: 2, className: "oui-mt-5 oui-w-full", children: [
933
- confirmed ? /* @__PURE__ */ jsxs(Fragment, { children: [
934
- /* @__PURE__ */ jsxs(Flex, { className: "oui-w-full", justify: "between", itemAlign: "center", children: [
935
- /* @__PURE__ */ jsx(Text, { size: "xs", intensity: 36, children: t("common.network") }),
936
- /* @__PURE__ */ jsxs(Flex, { gap: 1, itemAlign: "center", children: [
937
- /* @__PURE__ */ jsx(ChainIcon, { chainId: selectedChainId, size: "2xs" }),
938
- /* @__PURE__ */ jsx(Text, { size: "xs", intensity: 98, children: networkName })
939
- ] })
940
- ] }),
941
- /* @__PURE__ */ jsxs(Flex, { className: "oui-w-full", justify: "between", itemAlign: "center", children: [
942
- /* @__PURE__ */ jsx(Text, { size: "xs", intensity: 36, children: t("common.token") }),
943
- /* @__PURE__ */ jsxs(Flex, { gap: 1, itemAlign: "center", children: [
944
- /* @__PURE__ */ jsx(TokenIcon, { name: tokenName, size: "2xs" }),
945
- /* @__PURE__ */ jsx(Text, { size: "xs", intensity: 98, children: tokenName })
946
- ] })
947
- ] })
948
- ] }) : /* @__PURE__ */ jsx(
975
+ /* @__PURE__ */ jsx(
949
976
  NetworkTokenSelect,
950
977
  {
951
978
  selectedNetwork,
952
979
  selectedToken,
953
- onNetworkChange: setSelectedNetwork,
980
+ onNetworkChange: (value) => {
981
+ setSelectedNetwork(value);
982
+ setSelectedToken("");
983
+ },
954
984
  onTokenChange: setSelectedToken,
955
985
  networkOptions,
956
986
  tokenOptions
957
- }
987
+ },
988
+ selectedNetwork
958
989
  ),
959
990
  /* @__PURE__ */ jsxs(Flex, { className: "oui-w-full", justify: "between", children: [
960
991
  /* @__PURE__ */ jsx(Text, { size: "xs", intensity: 36, children: t("transfer.exclusiveDeposit.minDeposit") }),