@velora-dex/widget 0.2.1 → 0.2.2

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.
Files changed (137) hide show
  1. package/README.md +3 -3
  2. package/dist/assets/price-impact.svg.js +12 -0
  3. package/dist/assets/price-impact.svg.js.map +1 -0
  4. package/dist/components/ui/accordion.js +1 -1
  5. package/dist/components/ui/accordion.js.map +1 -1
  6. package/dist/components/ui/progress.d.ts.map +1 -1
  7. package/dist/components/ui/progress.js.map +1 -1
  8. package/dist/components/widget/Dialog/SelectTokenDialog/SelectTokenDialog.d.ts +3 -1
  9. package/dist/components/widget/Dialog/SelectTokenDialog/SelectTokenDialog.d.ts.map +1 -1
  10. package/dist/components/widget/Dialog/SelectTokenDialog/SelectTokenDialog.js +70 -64
  11. package/dist/components/widget/Dialog/SelectTokenDialog/SelectTokenDialog.js.map +1 -1
  12. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/RegularTokenList.d.ts +3 -1
  13. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/RegularTokenList.d.ts.map +1 -1
  14. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/RegularTokenList.js +39 -21
  15. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/RegularTokenList.js.map +1 -1
  16. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/TokenListBody.d.ts.map +1 -1
  17. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/TokenListBody.js +1 -1
  18. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/TokenListBody.js.map +1 -1
  19. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/TokenListRow.js +1 -1
  20. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/TokenListRow.js.map +1 -1
  21. package/dist/components/widget/Drawer/state/useDrawerControls.d.ts.map +1 -1
  22. package/dist/components/widget/Drawer/state/useDrawerControls.js +5 -0
  23. package/dist/components/widget/Drawer/state/useDrawerControls.js.map +1 -1
  24. package/dist/components/widget/ImportToken/ImportToken.d.ts.map +1 -1
  25. package/dist/components/widget/ImportToken/ImportToken.js +1 -1
  26. package/dist/components/widget/ImportToken/ImportToken.js.map +1 -1
  27. package/dist/components/widget/LimitOrdersDrawer/LimitOrderDetails/Controls.js +4 -4
  28. package/dist/components/widget/LimitOrdersDrawer/LimitOrderDetails/Controls.js.map +1 -1
  29. package/dist/components/widget/LimitOrdersDrawer/LimitOrderListItem.d.ts.map +1 -1
  30. package/dist/components/widget/LimitOrdersDrawer/LimitOrderListItem.js +21 -18
  31. package/dist/components/widget/LimitOrdersDrawer/LimitOrderListItem.js.map +1 -1
  32. package/dist/components/widget/NetworkSwitcher/types.d.ts +1 -0
  33. package/dist/components/widget/NetworkSwitcher/types.d.ts.map +1 -1
  34. package/dist/components/widget/OtcOrdersDrawer/OtcOrderDetails/OtcOrderDetails.d.ts.map +1 -1
  35. package/dist/components/widget/OtcOrdersDrawer/OtcOrderDetails/OtcOrderDetails.js +33 -39
  36. package/dist/components/widget/OtcOrdersDrawer/OtcOrderDetails/OtcOrderDetails.js.map +1 -1
  37. package/dist/components/widget/RowVirtualizer/RowVirtualizerFixed.d.ts.map +1 -1
  38. package/dist/components/widget/RowVirtualizer/RowVirtualizerFixed.js +1 -1
  39. package/dist/components/widget/RowVirtualizer/RowVirtualizerFixed.js.map +1 -1
  40. package/dist/components/widget/SelectToken/SelectTokenButton.d.ts +6 -2
  41. package/dist/components/widget/SelectToken/SelectTokenButton.d.ts.map +1 -1
  42. package/dist/components/widget/SelectToken/SelectTokenButton.js +84 -76
  43. package/dist/components/widget/SelectToken/SelectTokenButton.js.map +1 -1
  44. package/dist/components/widget/SelectToken/types.d.ts +2 -0
  45. package/dist/components/widget/SelectToken/types.d.ts.map +1 -1
  46. package/dist/components/widget/TokenInput/index.d.ts.map +1 -1
  47. package/dist/components/widget/TokenInput/index.js +43 -41
  48. package/dist/components/widget/TokenInput/index.js.map +1 -1
  49. package/dist/components/widget/WrapEth/hooks/useSubmitDepositTxMutation.d.ts +1 -1
  50. package/dist/components/widget/WrapEth/hooks/useSubmitDepositTxMutation.d.ts.map +1 -1
  51. package/dist/components/widget/WrapEth/hooks/useSubmitDepositTxMutation.js.map +1 -1
  52. package/dist/core/Toaster.js +1 -1
  53. package/dist/core/Toaster.js.map +1 -1
  54. package/dist/core/button/hooks/useWidgetButtonExtraProps.d.ts.map +1 -1
  55. package/dist/core/button/hooks/useWidgetButtonExtraProps.js +5 -1
  56. package/dist/core/button/hooks/useWidgetButtonExtraProps.js.map +1 -1
  57. package/dist/core/index.d.ts.map +1 -1
  58. package/dist/core/index.js.map +1 -1
  59. package/dist/core/limit/state/selectedTokenActionsAtom.d.ts.map +1 -1
  60. package/dist/core/limit/state/selectedTokenActionsAtom.js.map +1 -1
  61. package/dist/core/limit/state/selectedTokenAtom.d.ts.map +1 -1
  62. package/dist/core/limit/state/selectedTokenAtom.js +5 -1
  63. package/dist/core/limit/state/selectedTokenAtom.js.map +1 -1
  64. package/dist/core/limit/useLimitTokenToInputProps.d.ts +7 -0
  65. package/dist/core/limit/useLimitTokenToInputProps.d.ts.map +1 -1
  66. package/dist/core/limit/useLimitTokenToInputProps.js +167 -23
  67. package/dist/core/limit/useLimitTokenToInputProps.js.map +1 -1
  68. package/dist/core/otc/state/selectedTokenAtom.d.ts.map +1 -1
  69. package/dist/core/otc/state/selectedTokenAtom.js +3 -1
  70. package/dist/core/otc/state/selectedTokenAtom.js.map +1 -1
  71. package/dist/core/otc/useOtcTokenToInputProps.d.ts.map +1 -1
  72. package/dist/core/otc/useOtcTokenToInputProps.js +42 -16
  73. package/dist/core/otc/useOtcTokenToInputProps.js.map +1 -1
  74. package/dist/core/swapDetails/fees.d.ts.map +1 -1
  75. package/dist/core/swapDetails/fees.js +4 -2
  76. package/dist/core/swapDetails/fees.js.map +1 -1
  77. package/dist/core/swapDetails/orderRouting.d.ts.map +1 -1
  78. package/dist/core/swapDetails/orderRouting.js +7 -3
  79. package/dist/core/swapDetails/orderRouting.js.map +1 -1
  80. package/dist/core/swapDetails/priceImpact.d.ts +3 -1
  81. package/dist/core/swapDetails/priceImpact.d.ts.map +1 -1
  82. package/dist/core/swapDetails/priceImpact.js +6 -2
  83. package/dist/core/swapDetails/priceImpact.js.map +1 -1
  84. package/dist/core/swapDetails/useSwapDetailsListProps.d.ts.map +1 -1
  85. package/dist/core/swapDetails/useSwapDetailsListProps.js +155 -42
  86. package/dist/core/swapDetails/useSwapDetailsListProps.js.map +1 -1
  87. package/dist/core/swapDetails/youGet.d.ts.map +1 -1
  88. package/dist/core/swapDetails/youGet.js +5 -2
  89. package/dist/core/swapDetails/youGet.js.map +1 -1
  90. package/dist/hooks/otc/mutations/useCancelLimitOrder.d.ts +4 -4
  91. package/dist/hooks/otc/mutations/useCancelLimitOrder.d.ts.map +1 -1
  92. package/dist/hooks/otc/mutations/useCancelLimitOrder.js +2 -2
  93. package/dist/hooks/otc/mutations/useCancelLimitOrder.js.map +1 -1
  94. package/dist/hooks/otc/mutations/useCreateLimitOrder.d.ts +2 -2
  95. package/dist/hooks/otc/mutations/useCreateLimitOrder.d.ts.map +1 -1
  96. package/dist/hooks/otc/mutations/useCreateLimitOrder.js +2 -2
  97. package/dist/hooks/otc/mutations/useCreateLimitOrder.js.map +1 -1
  98. package/dist/hooks/otc/mutations/useFillOrder.d.ts +5 -5
  99. package/dist/hooks/otc/mutations/useFillOrder.d.ts.map +1 -1
  100. package/dist/hooks/otc/mutations/useFillOrder.js.map +1 -1
  101. package/dist/hooks/swap/prices/delta/bridge/useBridgedDeposit.d.ts.map +1 -1
  102. package/dist/hooks/swap/prices/delta/mutations/useCancelLimitDeltaOrders.d.ts +2 -2
  103. package/dist/hooks/swap/prices/delta/mutations/useCancelLimitDeltaOrders.d.ts.map +1 -1
  104. package/dist/hooks/swap/prices/delta/mutations/useCancelLimitDeltaOrders.js.map +1 -1
  105. package/dist/hooks/swap/prices/delta/mutations/useCreateDeltaOrder.d.ts +2 -2
  106. package/dist/hooks/swap/prices/delta/mutations/useCreateDeltaOrder.d.ts.map +1 -1
  107. package/dist/hooks/swap/prices/delta/mutations/useCreateDeltaOrder.js +2 -2
  108. package/dist/hooks/swap/prices/delta/mutations/useCreateDeltaOrder.js.map +1 -1
  109. package/dist/hooks/swap/prices/delta/mutations/useCreatePreSignableDeltaOrder.d.ts +2 -2
  110. package/dist/hooks/swap/prices/delta/mutations/useCreatePreSignableDeltaOrder.d.ts.map +1 -1
  111. package/dist/hooks/swap/prices/delta/mutations/useCreatePreSignableDeltaOrder.js.map +1 -1
  112. package/dist/hooks/swap/prices/delta/mutations/usePostDeltaOrder.d.ts +2 -2
  113. package/dist/hooks/swap/prices/delta/mutations/usePostDeltaOrder.d.ts.map +1 -1
  114. package/dist/hooks/swap/prices/delta/mutations/usePostDeltaOrder.js.map +1 -1
  115. package/dist/hooks/swap/prices/delta/queries/useWatchDeltaOrder.d.ts.map +1 -1
  116. package/dist/hooks/swap/prices/delta/queries/useWatchDeltaOrder.js.map +1 -1
  117. package/dist/hooks/swap/prices/market/mutations/useBuildTx.d.ts +2 -2
  118. package/dist/hooks/swap/prices/market/mutations/useBuildTx.d.ts.map +1 -1
  119. package/dist/hooks/swap/prices/market/mutations/useBuildTx.js.map +1 -1
  120. package/dist/hooks/swap/prices/useSwapPrices.d.ts.map +1 -1
  121. package/dist/hooks/swap/prices/useSwapPrices.js +15 -1
  122. package/dist/hooks/swap/prices/useSwapPrices.js.map +1 -1
  123. package/dist/hooks/tokens/data/useCombineTokensWithFetched.d.ts +7 -1
  124. package/dist/hooks/tokens/data/useCombineTokensWithFetched.d.ts.map +1 -1
  125. package/dist/hooks/tokens/data/useCombineTokensWithFetched.js +81 -67
  126. package/dist/hooks/tokens/data/useCombineTokensWithFetched.js.map +1 -1
  127. package/dist/hooks/tokens/useAllTokensWithFilter.js +1 -1
  128. package/dist/hooks/tokens/useAllTokensWithFilter.js.map +1 -1
  129. package/dist/lib/utils/useDateNow.d.ts +2 -0
  130. package/dist/lib/utils/useDateNow.d.ts.map +1 -0
  131. package/dist/lib/utils/useDateNow.js +7 -0
  132. package/dist/lib/utils/useDateNow.js.map +1 -0
  133. package/dist/styles.css +3 -4
  134. package/dist/tokens/state/addImportedTokenAtom.d.ts.map +1 -1
  135. package/dist/tokens/state/addImportedTokenAtom.js +6 -23
  136. package/dist/tokens/state/addImportedTokenAtom.js.map +1 -1
  137. package/package.json +8 -7
@@ -1 +1 @@
1
- {"version":3,"file":"useSwapPrices.js","sources":["../../../../src/hooks/swap/prices/useSwapPrices.ts"],"sourcesContent":["import { useMarketPriceQuery } from \"./market/queries/useMarketPriceQuery\";\nimport { usePricesParams } from \"./usePricesParams\";\nimport { useDeltaPriceQuery } from \"./delta/queries/useDeltaPriceQuery\";\nimport { swapModeAtom } from \"@/components/widget/SwapModeSwitcher/state/swapModeAtom\";\nimport { type SwapMode } from \"@/components/widget/SwapModeSwitcher/state/types\";\nimport { useAtomValue } from \"jotai\";\nimport type { BridgePrice, DeltaPrice, OptimalRate } from \"@velora-dex/sdk\";\nimport type { UseSwapPricesInput } from \"./types\";\nimport { useGlobalDeltaEnabled } from \"@/hooks/useGlobalDeltaEnabled\";\nimport { useRef } from \"react\";\nimport { isETH, isWETH } from \"@/tokens/utils/eth\";\nimport { wrappedNativeCurrency } from \"@/lib/constants/weth\";\n\nconst PRICE_REFETCH_INTERVAL = 5000; // 5 seconds\n\ntype UseSwapPricesReturn = {\n priceMode: SwapMode;\n userSelectedPriceMode: SwapMode;\n market: {\n price?: OptimalRate;\n /** @description whether the market price can be used for the current price params */\n canBeUsed: boolean;\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n };\n delta: {\n price?: DeltaPrice | BridgePrice;\n /** @description whether the delta price can be used for the current price params && widget config */\n canBeUsed: boolean;\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n };\n};\n\nexport function useSwapPrices(\n params: UseSwapPricesInput = {}\n): UseSwapPricesReturn {\n const { priceParams, isCrossChain, chainId, destChainId } =\n usePricesParams(\"swap\");\n\n // selected by the user if both options are available, otherwise always \"market\"\n const swapMode = useAtomValue(swapModeAtom);\n\n const {\n enabledInConfig: deltaEnabledInConfig,\n enabledInSettings: deltaEnabledInSettings,\n enabledOnCurrentChain: deltaEnabledOnCurrentChain,\n } = useGlobalDeltaEnabled();\n\n const fetchAnyPrice = priceParams.amount !== \"0\" && !!priceParams.destToken;\n\n const isBUY = priceParams.side === \"BUY\";\n\n const isEthToWethSameChain =\n !isCrossChain &&\n !!priceParams.destToken &&\n isETH({ address: priceParams.srcToken }) &&\n isWETH({ address: priceParams.destToken }, chainId);\n const isWethToEthSameChain =\n !isCrossChain &&\n !!priceParams.destToken &&\n isWETH({ address: priceParams.srcToken }, chainId) &&\n isETH({ address: priceParams.destToken });\n\n const deltaEnabled =\n // enabled in widget config\n deltaEnabledInConfig &&\n // enabled in user settings\n deltaEnabledInSettings &&\n // enabled on API for current chain\n deltaEnabledOnCurrentChain &&\n // SELL side only\n priceParams.side === \"SELL\" &&\n // ETH -> WETH same chain is market only\n !isEthToWethSameChain &&\n // WETH -> ETH same chain is market only\n !isWethToEthSameChain &&\n // user selected Delta\n swapMode === \"delta\";\n // @TODO add BUY support for Delta when available\n\n // whether delta price can be used in principle for current price params,\n // irrespective of user settings\n const deltaCanBeUsed =\n fetchAnyPrice &&\n deltaEnabledInConfig &&\n deltaEnabledOnCurrentChain &&\n priceParams.side === \"SELL\" &&\n // @TODO add BUY support for Delta when available\n !isEthToWethSameChain &&\n !isWethToEthSameChain;\n\n // Delta /prices errors when srcToken=ETH;\n // we will pre-wrap ETH->WETH before Swap anyway;\n // be careful not to use deltaPrices.srcToken with the assumption that (tokenFrom=ETH) !== (deltaPrices.srcToken=WETH)\n const srcTokenForDelta = isETH({ address: priceParams.srcToken })\n ? wrappedNativeCurrency[chainId]\n : priceParams.srcToken;\n\n const deltaPriceQuery = useDeltaPriceQuery({\n priceParams: {\n ...priceParams,\n srcToken: srcTokenForDelta,\n },\n chainId,\n destChainId,\n timeout: 5000,\n query: {\n enabled: deltaEnabled && fetchAnyPrice && (params.enabled ?? true),\n refetchInterval: PRICE_REFETCH_INTERVAL,\n // already refetched on short interval\n // prevents delay before deltaPriceQuery.error is set\n retry: false,\n },\n });\n\n // keep track if last result was error\n const deltaErrorRef = useRef(deltaPriceQuery.error);\n // by itself isError resets when fetching\n if (deltaPriceQuery.error) deltaErrorRef.current = deltaPriceQuery.error;\n // keep errorRef until delta succeeds\n if (deltaPriceQuery.isSuccess) deltaErrorRef.current = null;\n\n const deltaErrorCached = deltaErrorRef.current;\n\n // no market for Crosschain swaps, otherwise always enabled as a fallback for Delta\n const marketEnabled = !isCrossChain;\n const marketCanBeUsed = marketEnabled && fetchAnyPrice;\n\n const marketIsFallback = deltaErrorCached && marketEnabled;\n\n // @TODO remove isBUY once BUY is supported for Delta\n const marketIsMainMode =\n (swapMode === \"market\" && marketEnabled) || !deltaEnabled || isBUY;\n const priceMode = marketIsFallback || marketIsMainMode ? \"market\" : \"delta\";\n\n const marketRefetchInterval =\n // if only market mode or delta has an error\n !deltaEnabled || deltaErrorCached // using cached error here so we don't continuously switch between 2 intervals,\n ? // which caused market price query reschedule and no fetch ever happening\n // frequent updates for Market price\n PRICE_REFETCH_INTERVAL\n : // otherwise when Delta is working, less frequent updates for Market price\n 2 * PRICE_REFETCH_INTERVAL;\n\n const marketPriceQuery = useMarketPriceQuery({\n priceParams,\n chainId,\n timeout: 5000,\n query: {\n enabled: marketEnabled && fetchAnyPrice && (params.enabled ?? true),\n refetchInterval: marketRefetchInterval,\n retry: false,\n },\n });\n\n return {\n priceMode,\n userSelectedPriceMode: swapMode,\n market: {\n price: marketPriceQuery.data,\n isLoading: marketPriceQuery.isLoading,\n isError: marketPriceQuery.isError,\n error: marketPriceQuery.error,\n canBeUsed: marketCanBeUsed,\n },\n delta: {\n price: deltaPriceQuery.data,\n isLoading: deltaPriceQuery.isLoading,\n isError: deltaPriceQuery.isError,\n error: deltaPriceQuery.error,\n canBeUsed: deltaCanBeUsed,\n },\n };\n}\n\ntype UseCurrentSwapPriceReturn = {\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n} & (\n | {\n priceMode: \"market\";\n price?: OptimalRate;\n }\n | {\n priceMode: \"delta\";\n price?: DeltaPrice | BridgePrice;\n }\n);\n\nexport function useCurrentSwapPrice(\n params: UseSwapPricesInput = { enabled: true }\n): UseCurrentSwapPriceReturn {\n const { market, delta, priceMode } = useSwapPrices(params);\n\n if (priceMode === \"market\") {\n return {\n priceMode,\n price: market.price,\n isLoading: market.isLoading,\n isError: market.isError,\n error: market.error,\n };\n }\n\n return {\n priceMode,\n price: delta.price,\n isLoading: delta.isLoading,\n isError: delta.isError,\n error: delta.error,\n };\n}\n"],"names":["PRICE_REFETCH_INTERVAL","useSwapPrices","params","priceParams","isCrossChain","chainId","destChainId","usePricesParams","swapMode","useAtomValue","swapModeAtom","enabledInConfig","deltaEnabledInConfig","enabledInSettings","deltaEnabledInSettings","enabledOnCurrentChain","deltaEnabledOnCurrentChain","useGlobalDeltaEnabled","fetchAnyPrice","amount","destToken","isBUY","side","isEthToWethSameChain","isETH","address","srcToken","isWETH","isWethToEthSameChain","deltaEnabled","deltaCanBeUsed","srcTokenForDelta","wrappedNativeCurrency","deltaPriceQuery","useDeltaPriceQuery","timeout","query","enabled","refetchInterval","retry","deltaErrorRef","useRef","error","current","isSuccess","deltaErrorCached","marketEnabled","marketCanBeUsed","marketIsFallback","marketIsMainMode","priceMode","marketRefetchInterval","marketPriceQuery","useMarketPriceQuery","userSelectedPriceMode","market","price","data","isLoading","isError","canBeUsed","delta","useCurrentSwapPrice","t0","$","_c","t1","undefined","t2"],"mappings":"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"}
1
+ {"version":3,"file":"useSwapPrices.js","sources":["../../../../src/hooks/swap/prices/useSwapPrices.ts"],"sourcesContent":["import { useMarketPriceQuery } from \"./market/queries/useMarketPriceQuery\";\nimport { usePricesParams } from \"./usePricesParams\";\nimport { useDeltaPriceQuery } from \"./delta/queries/useDeltaPriceQuery\";\nimport { swapModeAtom } from \"@/components/widget/SwapModeSwitcher/state/swapModeAtom\";\nimport { type SwapMode } from \"@/components/widget/SwapModeSwitcher/state/types\";\nimport { useAtomValue } from \"jotai\";\nimport type { BridgePrice, DeltaPrice, OptimalRate } from \"@velora-dex/sdk\";\nimport type { UseSwapPricesInput } from \"./types\";\nimport { useGlobalDeltaEnabled } from \"@/hooks/useGlobalDeltaEnabled\";\nimport { useRef } from \"react\";\nimport { isETH, isWETH } from \"@/tokens/utils/eth\";\nimport { wrappedNativeCurrency } from \"@/lib/constants/weth\";\nimport { useIsTokenSupportedInDeltaQuery } from \"./delta/queries/useIsTokenSupportedInDelta\";\n\nconst PRICE_REFETCH_INTERVAL = 5000; // 5 seconds\n\ntype UseSwapPricesReturn = {\n priceMode: SwapMode;\n userSelectedPriceMode: SwapMode;\n market: {\n price?: OptimalRate;\n /** @description whether the market price can be used for the current price params */\n canBeUsed: boolean;\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n };\n delta: {\n price?: DeltaPrice | BridgePrice;\n /** @description whether the delta price can be used for the current price params && widget config */\n canBeUsed: boolean;\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n };\n};\n\nexport function useSwapPrices(\n params: UseSwapPricesInput = {}\n): UseSwapPricesReturn {\n const { priceParams, isCrossChain, chainId, destChainId } =\n usePricesParams(\"swap\");\n\n // selected by the user if both options are available, otherwise always \"market\"\n const swapMode = useAtomValue(swapModeAtom);\n\n const {\n enabledInConfig: deltaEnabledInConfig,\n enabledInSettings: deltaEnabledInSettings,\n enabledOnCurrentChain: deltaEnabledOnCurrentChain,\n } = useGlobalDeltaEnabled();\n\n const fetchAnyPrice = priceParams.amount !== \"0\" && !!priceParams.destToken;\n\n const isBUY = priceParams.side === \"BUY\";\n\n const isEthToWethSameChain =\n !isCrossChain &&\n !!priceParams.destToken &&\n isETH({ address: priceParams.srcToken }) &&\n isWETH({ address: priceParams.destToken }, chainId);\n const isWethToEthSameChain =\n !isCrossChain &&\n !!priceParams.destToken &&\n isWETH({ address: priceParams.srcToken }, chainId) &&\n isETH({ address: priceParams.destToken });\n\n const { data: isSrcTokenSupported } = useIsTokenSupportedInDeltaQuery({\n token: priceParams.srcToken,\n chainId,\n });\n const { data: isDestTokenSupported } = useIsTokenSupportedInDeltaQuery({\n token: priceParams.destToken,\n chainId,\n });\n\n const deltaEnabled =\n // enabled in widget config\n deltaEnabledInConfig &&\n // enabled in user settings\n deltaEnabledInSettings &&\n // enabled on API for current chain\n deltaEnabledOnCurrentChain &&\n // SELL side only\n priceParams.side === \"SELL\" &&\n // ETH -> WETH same chain is market only\n !isEthToWethSameChain &&\n // WETH -> ETH same chain is market only\n !isWethToEthSameChain &&\n // user selected Delta\n swapMode === \"delta\" &&\n // tokens are supported in Delta\n isSrcTokenSupported !== false &&\n isDestTokenSupported !== false;\n // @TODO add BUY support for Delta when available\n\n // whether delta price can be used in principle for current price params,\n // irrespective of user settings\n const deltaCanBeUsed =\n fetchAnyPrice &&\n deltaEnabledInConfig &&\n deltaEnabledOnCurrentChain &&\n priceParams.side === \"SELL\" &&\n // @TODO add BUY support for Delta when available\n !isEthToWethSameChain &&\n !isWethToEthSameChain;\n\n // Delta /prices errors when srcToken=ETH;\n // we will pre-wrap ETH->WETH before Swap anyway;\n // be careful not to use deltaPrices.srcToken with the assumption that (tokenFrom=ETH) !== (deltaPrices.srcToken=WETH)\n const srcTokenForDelta = isETH({ address: priceParams.srcToken })\n ? wrappedNativeCurrency[chainId]\n : priceParams.srcToken;\n\n const deltaPriceQuery = useDeltaPriceQuery({\n priceParams: {\n ...priceParams,\n srcToken: srcTokenForDelta,\n },\n chainId,\n destChainId,\n timeout: 5000,\n query: {\n enabled: deltaEnabled && fetchAnyPrice && (params.enabled ?? true),\n refetchInterval: PRICE_REFETCH_INTERVAL,\n // already refetched on short interval\n // prevents delay before deltaPriceQuery.error is set\n retry: false,\n },\n });\n\n // keep track if last result was error\n const deltaErrorRef = useRef(deltaPriceQuery.error);\n // by itself isError resets when fetching\n /* eslint-disable react-hooks/refs */\n if (deltaPriceQuery.error) deltaErrorRef.current = deltaPriceQuery.error;\n // keep errorRef until delta succeeds\n if (deltaPriceQuery.isSuccess) deltaErrorRef.current = null;\n\n const deltaErrorCached = deltaErrorRef.current;\n /* eslint-enable react-hooks/refs */\n\n // no market for Crosschain swaps, otherwise always enabled as a fallback for Delta\n const marketEnabled = !isCrossChain;\n const marketCanBeUsed = marketEnabled && fetchAnyPrice;\n\n const marketIsFallback = deltaErrorCached && marketEnabled;\n\n // @TODO remove isBUY once BUY is supported for Delta\n const marketIsMainMode =\n (swapMode === \"market\" && marketEnabled) || !deltaEnabled || isBUY;\n const priceMode = marketIsFallback || marketIsMainMode ? \"market\" : \"delta\";\n\n const marketRefetchInterval =\n // if only market mode or delta has an error\n !deltaEnabled || deltaErrorCached // using cached error here so we don't continuously switch between 2 intervals,\n ? // which caused market price query reschedule and no fetch ever happening\n // frequent updates for Market price\n PRICE_REFETCH_INTERVAL\n : // otherwise when Delta is working, less frequent updates for Market price\n 2 * PRICE_REFETCH_INTERVAL;\n\n const marketPriceQuery = useMarketPriceQuery({\n priceParams,\n chainId,\n timeout: 5000,\n query: {\n enabled: marketEnabled && fetchAnyPrice && (params.enabled ?? true),\n refetchInterval: marketRefetchInterval,\n retry: false,\n },\n });\n\n return {\n priceMode,\n userSelectedPriceMode: swapMode,\n market: {\n price: marketPriceQuery.data,\n isLoading: marketPriceQuery.isLoading,\n isError: marketPriceQuery.isError,\n error: marketPriceQuery.error,\n canBeUsed: marketCanBeUsed,\n },\n delta: {\n price: deltaPriceQuery.data,\n isLoading: deltaPriceQuery.isLoading,\n isError: deltaPriceQuery.isError,\n error: deltaPriceQuery.error,\n canBeUsed: deltaCanBeUsed,\n },\n };\n}\n\ntype UseCurrentSwapPriceReturn = {\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n} & (\n | {\n priceMode: \"market\";\n price?: OptimalRate;\n }\n | {\n priceMode: \"delta\";\n price?: DeltaPrice | BridgePrice;\n }\n);\n\nexport function useCurrentSwapPrice(\n params: UseSwapPricesInput = { enabled: true }\n): UseCurrentSwapPriceReturn {\n const { market, delta, priceMode } = useSwapPrices(params);\n\n if (priceMode === \"market\") {\n return {\n priceMode,\n price: market.price,\n isLoading: market.isLoading,\n isError: market.isError,\n error: market.error,\n };\n }\n\n return {\n priceMode,\n price: delta.price,\n isLoading: delta.isLoading,\n isError: delta.isError,\n error: delta.error,\n };\n}\n"],"names":["PRICE_REFETCH_INTERVAL","useSwapPrices","params","priceParams","isCrossChain","chainId","destChainId","usePricesParams","swapMode","useAtomValue","swapModeAtom","enabledInConfig","deltaEnabledInConfig","enabledInSettings","deltaEnabledInSettings","enabledOnCurrentChain","deltaEnabledOnCurrentChain","useGlobalDeltaEnabled","fetchAnyPrice","amount","destToken","isBUY","side","isEthToWethSameChain","isETH","address","srcToken","isWETH","isWethToEthSameChain","data","isSrcTokenSupported","useIsTokenSupportedInDeltaQuery","token","isDestTokenSupported","deltaEnabled","deltaCanBeUsed","srcTokenForDelta","wrappedNativeCurrency","deltaPriceQuery","useDeltaPriceQuery","timeout","query","enabled","refetchInterval","retry","deltaErrorRef","useRef","error","current","isSuccess","deltaErrorCached","marketEnabled","marketCanBeUsed","marketIsFallback","marketIsMainMode","priceMode","marketRefetchInterval","marketPriceQuery","useMarketPriceQuery","userSelectedPriceMode","market","price","isLoading","isError","canBeUsed","delta","useCurrentSwapPrice","t0","$","_c","t1","undefined","t2"],"mappings":"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"}
@@ -1,8 +1,14 @@
1
1
  import { TokenMaybeWithUsdBalance } from '../../../tokens/state/types';
2
2
  import { TokenRowForFetchedToken } from '../../../components/widget/Dialog/SelectTokenDialog/TokenListBody/TokenListRow';
3
+ import { SupportedChainId } from '../../../lib/web3/wagmi/types';
3
4
  type UseCombineTokensWithFetchedReturn = {
4
5
  tokenRowsCombined: TokenRowForFetchedToken[];
5
6
  };
6
- export declare const useCombineTokensWithFetched: (allTokenRows: TokenMaybeWithUsdBalance[], tokenFilter: string) => UseCombineTokensWithFetchedReturn;
7
+ type UseCombineTokensWithFetchedInput = {
8
+ allTokenRows: TokenMaybeWithUsdBalance[];
9
+ tokenFilter: string;
10
+ selectableChains?: SupportedChainId[];
11
+ };
12
+ export declare const useCombineTokensWithFetched: ({ allTokenRows, tokenFilter, selectableChains, }: UseCombineTokensWithFetchedInput) => UseCombineTokensWithFetchedReturn;
7
13
  export {};
8
14
  //# sourceMappingURL=useCombineTokensWithFetched.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useCombineTokensWithFetched.d.ts","sourceRoot":"","sources":["../../../../src/hooks/tokens/data/useCombineTokensWithFetched.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAGrE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yEAAyE,CAAC;AAOvH,KAAK,iCAAiC,GAAG;IACvC,iBAAiB,EAAE,uBAAuB,EAAE,CAAC;CAC9C,CAAC;AACF,eAAO,MAAM,2BAA2B,GACtC,cAAc,wBAAwB,EAAE,EACxC,aAAa,MAAM,KAClB,iCAqDF,CAAC"}
1
+ {"version":3,"file":"useCombineTokensWithFetched.d.ts","sourceRoot":"","sources":["../../../../src/hooks/tokens/data/useCombineTokensWithFetched.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAGrE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yEAAyE,CAAC;AACvH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAM/D,KAAK,iCAAiC,GAAG;IACvC,iBAAiB,EAAE,uBAAuB,EAAE,CAAC;CAC9C,CAAC;AAEF,KAAK,gCAAgC,GAAG;IACtC,YAAY,EAAE,wBAAwB,EAAE,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACvC,CAAC;AACF,eAAO,MAAM,2BAA2B,GAAI,kDAIzC,gCAAgC,KAAG,iCAsErC,CAAC"}
@@ -6,108 +6,122 @@ import { constructToken } from '@velora-dex/sdk';
6
6
  import { isBlacklistedToken } from '../../../tokens/blacklist.js';
7
7
  import { useAllEnabledChains } from '../../../core/state/enabledChainsAtom.js';
8
8
 
9
- const useCombineTokensWithFetched = (allTokenRows, tokenFilter) => {
10
- const $ = distExports.c(22);
11
- let t0;
9
+ const useCombineTokensWithFetched = (t0) => {
10
+ const $ = distExports.c(19);
11
+ const {
12
+ allTokenRows,
13
+ tokenFilter,
14
+ selectableChains
15
+ } = t0;
16
+ let t1;
12
17
  if ($[0] !== tokenFilter) {
13
- t0 = isAddress(tokenFilter) && !isBlacklistedToken({
18
+ t1 = isAddress(tokenFilter) && !isBlacklistedToken({
14
19
  address: tokenFilter
15
20
  });
16
21
  $[0] = tokenFilter;
17
- $[1] = t0;
22
+ $[1] = t1;
18
23
  } else {
19
- t0 = $[1];
24
+ t1 = $[1];
20
25
  }
21
- const isTokenFilterValidAddress = t0;
26
+ const isTokenFilterValidAddress = t1;
22
27
  const enabledChains = useAllEnabledChains();
23
- let t1;
24
- if ($[2] !== allTokenRows || $[3] !== enabledChains || $[4] !== isTokenFilterValidAddress) {
25
- t1 = !isTokenFilterValidAddress ? enabledChains : enabledChains.filter((chainId) => !allTokenRows.some((token) => token.network === chainId));
26
- $[2] = allTokenRows;
27
- $[3] = enabledChains;
28
- $[4] = isTokenFilterValidAddress;
29
- $[5] = t1;
30
- } else {
31
- t1 = $[5];
28
+ let chainsToFetchOn = selectableChains || enabledChains;
29
+ if (isTokenFilterValidAddress) {
30
+ let t22;
31
+ if ($[2] !== allTokenRows) {
32
+ t22 = new Set(allTokenRows.map(_temp));
33
+ $[2] = allTokenRows;
34
+ $[3] = t22;
35
+ } else {
36
+ t22 = $[3];
37
+ }
38
+ const foundChains = t22;
39
+ let t32;
40
+ if ($[4] !== chainsToFetchOn || $[5] !== foundChains) {
41
+ let t42;
42
+ if ($[7] !== foundChains) {
43
+ t42 = (chainId) => !foundChains.has(chainId);
44
+ $[7] = foundChains;
45
+ $[8] = t42;
46
+ } else {
47
+ t42 = $[8];
48
+ }
49
+ t32 = chainsToFetchOn.filter(t42);
50
+ $[4] = chainsToFetchOn;
51
+ $[5] = foundChains;
52
+ $[6] = t32;
53
+ } else {
54
+ t32 = $[6];
55
+ }
56
+ chainsToFetchOn = t32;
32
57
  }
33
- const chainsWithNoTokenFound = t1;
34
58
  let t2;
35
- if ($[6] !== isTokenFilterValidAddress || $[7] !== tokenFilter) {
59
+ if ($[9] !== isTokenFilterValidAddress || $[10] !== tokenFilter) {
36
60
  t2 = isTokenFilterValidAddress ? [tokenFilter] : [];
37
- $[6] = isTokenFilterValidAddress;
38
- $[7] = tokenFilter;
39
- $[8] = t2;
61
+ $[9] = isTokenFilterValidAddress;
62
+ $[10] = tokenFilter;
63
+ $[11] = t2;
40
64
  } else {
41
- t2 = $[8];
65
+ t2 = $[11];
42
66
  }
43
67
  let t3;
44
- if ($[9] !== chainsWithNoTokenFound || $[10] !== t2) {
68
+ if ($[12] !== chainsToFetchOn || $[13] !== t2) {
45
69
  t3 = {
46
70
  addresses: t2,
47
- chainIds: chainsWithNoTokenFound
71
+ chainIds: chainsToFetchOn
48
72
  };
49
- $[9] = chainsWithNoTokenFound;
50
- $[10] = t2;
51
- $[11] = t3;
73
+ $[12] = chainsToFetchOn;
74
+ $[13] = t2;
75
+ $[14] = t3;
52
76
  } else {
53
- t3 = $[11];
77
+ t3 = $[14];
54
78
  }
55
79
  const tokenRowsFetched = useFetchTokens(t3);
80
+ const possibleTokenImage = !isTokenFilterValidAddress ? void 0 : allTokenRows.find(_temp2)?.img;
56
81
  const tokensFetched = tokenRowsFetched.tokens;
57
82
  let t4;
58
- if ($[12] !== tokensFetched) {
59
- t4 = tokensFetched.reduce(_temp, {});
60
- $[12] = tokensFetched;
61
- $[13] = t4;
83
+ if ($[15] !== tokensFetched) {
84
+ t4 = tokensFetched.reduce(_temp3, {});
85
+ $[15] = tokensFetched;
86
+ $[16] = t4;
62
87
  } else {
63
- t4 = $[13];
88
+ t4 = $[16];
64
89
  }
65
90
  const tokenFetchedAddressesMap = t4;
66
91
  let t5;
67
- if ($[14] !== tokenFetchedAddressesMap) {
92
+ if ($[17] !== tokenFetchedAddressesMap) {
68
93
  t5 = {
69
94
  addressesMap: tokenFetchedAddressesMap
70
95
  };
71
- $[14] = tokenFetchedAddressesMap;
72
- $[15] = t5;
96
+ $[17] = tokenFetchedAddressesMap;
97
+ $[18] = t5;
73
98
  } else {
74
- t5 = $[15];
99
+ t5 = $[18];
75
100
  }
76
101
  const attachTokenBalance = useAttachTokenBalanceMultichain(t5);
77
- let t6;
78
- if ($[16] !== allTokenRows || $[17] !== attachTokenBalance || $[18] !== tokenRowsFetched.tokens) {
79
- let t7;
80
- if ($[20] !== attachTokenBalance) {
81
- t7 = (token_1) => attachTokenBalance({
82
- ...constructToken(token_1),
83
- network: token_1.network,
84
- fetchedOnChain: true
85
- });
86
- $[20] = attachTokenBalance;
87
- $[21] = t7;
88
- } else {
89
- t7 = $[21];
90
- }
91
- const tokensFetchedWithBalance = tokenRowsFetched.tokens.map(t7);
92
- const combinedTokenRows = [...allTokenRows, ...tokensFetchedWithBalance];
93
- t6 = {
94
- tokenRowsCombined: combinedTokenRows
95
- };
96
- $[16] = allTokenRows;
97
- $[17] = attachTokenBalance;
98
- $[18] = tokenRowsFetched.tokens;
99
- $[19] = t6;
100
- } else {
101
- t6 = $[19];
102
- }
103
- return t6;
102
+ const tokensFetchedWithBalance = tokenRowsFetched.tokens.map((token_2) => attachTokenBalance({
103
+ ...constructToken(token_2),
104
+ network: token_2.network,
105
+ fetchedOnChain: true,
106
+ img: possibleTokenImage
107
+ }));
108
+ const combinedTokenRows = [...allTokenRows, ...tokensFetchedWithBalance];
109
+ return {
110
+ tokenRowsCombined: combinedTokenRows
111
+ };
104
112
  };
105
- function _temp(acc, token_0) {
106
- const chainId_0 = token_0.network;
113
+ function _temp(token) {
114
+ return token.network;
115
+ }
116
+ function _temp2(token_0) {
117
+ return token_0.img;
118
+ }
119
+ function _temp3(acc, token_1) {
120
+ const chainId_0 = token_1.network;
107
121
  if (!acc[chainId_0]) {
108
122
  acc[chainId_0] = [];
109
123
  }
110
- acc[chainId_0].push(token_0.address);
124
+ acc[chainId_0].push(token_1.address);
111
125
  return acc;
112
126
  }
113
127
 
@@ -1 +1 @@
1
- {"version":3,"file":"useCombineTokensWithFetched.js","sources":["../../../../src/hooks/tokens/data/useCombineTokensWithFetched.ts"],"sourcesContent":["import type { TokenMaybeWithUsdBalance } from \"@/tokens/state/types\";\nimport { useFetchTokens } from \"./useFetchTokens\";\nimport { isAddress } from \"viem\";\nimport type { TokenRowForFetchedToken } from \"@/components/widget/Dialog/SelectTokenDialog/TokenListBody/TokenListRow\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { useAttachTokenBalanceMultichain } from \"../balances/useAttachTokenBalanceMultichain\";\nimport { constructToken } from \"@velora-dex/sdk\";\nimport { isBlacklistedToken } from \"@/tokens/blacklist\";\nimport { useAllEnabledChains } from \"@/core/state/enabledChainsAtom\";\n\ntype UseCombineTokensWithFetchedReturn = {\n tokenRowsCombined: TokenRowForFetchedToken[];\n};\nexport const useCombineTokensWithFetched = (\n allTokenRows: TokenMaybeWithUsdBalance[],\n tokenFilter: string\n): UseCombineTokensWithFetchedReturn => {\n const isTokenFilterValidAddress =\n isAddress(tokenFilter) && !isBlacklistedToken({ address: tokenFilter });\n\n // fetch on enabled chains only\n const enabledChains = useAllEnabledChains();\n const chainsWithNoTokenFound = !isTokenFilterValidAddress\n ? enabledChains\n : enabledChains.filter(\n // if exact match by address found in tokenLists, no need to fetch Token data onchain for that chain\n (chainId) => !allTokenRows.some((token) => token.network === chainId)\n );\n\n // if user's typed filter is a valid address, fetch tokens for all networks (as it's possible that lists data not enough -- even if token is spotted in one of the lists for one chain, it could be missing in another one)\n const tokenRowsFetched = useFetchTokens({\n addresses: isTokenFilterValidAddress ? [tokenFilter] : [],\n chainIds: chainsWithNoTokenFound,\n });\n\n const tokensFetched = tokenRowsFetched.tokens;\n\n const tokenFetchedAddressesMap = tokensFetched.reduce<\n Partial<Record<SupportedChainId, string[]>>\n >((acc, token) => {\n const chainId = token.network;\n if (!acc[chainId]) acc[chainId] = [];\n\n acc[chainId].push(token.address);\n return acc;\n }, {});\n\n const attachTokenBalance = useAttachTokenBalanceMultichain({\n addressesMap: tokenFetchedAddressesMap,\n });\n\n const tokensFetchedWithBalance =\n tokenRowsFetched.tokens.map<TokenRowForFetchedToken>((token) =>\n attachTokenBalance({\n ...constructToken(token),\n network: token.network,\n fetchedOnChain: true,\n })\n );\n\n const combinedTokenRows: TokenRowForFetchedToken[] = [\n ...allTokenRows,\n ...tokensFetchedWithBalance, // tokens not present in allTokenRows,\n // because chains to fetch on exclude chains found for exact token in another chain\n ];\n\n return {\n tokenRowsCombined: combinedTokenRows,\n };\n};\n"],"names":["useCombineTokensWithFetched","allTokenRows","tokenFilter","$","_c","t0","isAddress","isBlacklistedToken","address","isTokenFilterValidAddress","enabledChains","useAllEnabledChains","t1","filter","chainId","some","token","network","chainsWithNoTokenFound","t2","t3","addresses","chainIds","tokenRowsFetched","useFetchTokens","tokensFetched","tokens","t4","reduce","_temp","tokenFetchedAddressesMap","t5","addressesMap","attachTokenBalance","useAttachTokenBalanceMultichain","t6","t7","token_1","constructToken","fetchedOnChain","tokensFetchedWithBalance","map","combinedTokenRows","tokenRowsCombined","acc","token_0","chainId_0","push"],"mappings":"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"}
1
+ {"version":3,"file":"useCombineTokensWithFetched.js","sources":["../../../../src/hooks/tokens/data/useCombineTokensWithFetched.ts"],"sourcesContent":["import type { TokenMaybeWithUsdBalance } from \"@/tokens/state/types\";\nimport { useFetchTokens } from \"./useFetchTokens\";\nimport { isAddress } from \"viem\";\nimport type { TokenRowForFetchedToken } from \"@/components/widget/Dialog/SelectTokenDialog/TokenListBody/TokenListRow\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { useAttachTokenBalanceMultichain } from \"../balances/useAttachTokenBalanceMultichain\";\nimport { constructToken } from \"@velora-dex/sdk\";\nimport { isBlacklistedToken } from \"@/tokens/blacklist\";\nimport { useAllEnabledChains } from \"@/core/state/enabledChainsAtom\";\n\ntype UseCombineTokensWithFetchedReturn = {\n tokenRowsCombined: TokenRowForFetchedToken[];\n};\n\ntype UseCombineTokensWithFetchedInput = {\n allTokenRows: TokenMaybeWithUsdBalance[];\n tokenFilter: string;\n selectableChains?: SupportedChainId[];\n};\nexport const useCombineTokensWithFetched = ({\n allTokenRows,\n tokenFilter,\n selectableChains,\n}: UseCombineTokensWithFetchedInput): UseCombineTokensWithFetchedReturn => {\n const isTokenFilterValidAddress =\n isAddress(tokenFilter) && !isBlacklistedToken({ address: tokenFilter });\n\n // fetch on enabled chains only\n const enabledChains = useAllEnabledChains();\n let chainsToFetchOn: SupportedChainId[] = selectableChains || enabledChains;\n if (isTokenFilterValidAddress) {\n const foundChains = new Set(allTokenRows.map((token) => token.network));\n // if exact match by address found in tokenLists, no need to fetch Token data onchain for that chain\n chainsToFetchOn = chainsToFetchOn.filter(\n (chainId) => !foundChains.has(chainId)\n );\n }\n\n // if user's typed filter is a valid address, fetch tokens for all networks (as it's possible that lists data not enough -- even if token is spotted in one of the lists for one chain, it could be missing in another one)\n const tokenRowsFetched = useFetchTokens({\n addresses: isTokenFilterValidAddress ? [tokenFilter] : [],\n chainIds: chainsToFetchOn,\n });\n\n /**\n no way to get token icon for a token which data we just fetched onchain when knowing its address only:\n 1. coingecko, coinmarket and other APIs that return token data including icon are paid only,\n 2. public repos with many token icons (trustwallet, cowswap) don't include more than our tokenLists already have,\n 3. if token was not found in any of the lists, there are likely no other bigger lists out there.\n BUT it is possible that tokenLists have this token (same address) on other chains, with icon present,\n we can assume if addresses are same then tokens are too, coincidences are unlikely, though in reality tokens sometimes have old vs new icon on different chains:\n case in point -- USDT and USDT0\n */\n const possibleTokenImage = !isTokenFilterValidAddress\n ? undefined\n : // tokens here are found by address, so they must be the same as the fetched ones but on different chains\n allTokenRows.find((token) => token.img)?.img;\n\n const tokensFetched = tokenRowsFetched.tokens;\n\n const tokenFetchedAddressesMap = tokensFetched.reduce<\n Partial<Record<SupportedChainId, string[]>>\n >((acc, token) => {\n const chainId = token.network;\n if (!acc[chainId]) acc[chainId] = [];\n\n acc[chainId].push(token.address);\n return acc;\n }, {});\n\n const attachTokenBalance = useAttachTokenBalanceMultichain({\n addressesMap: tokenFetchedAddressesMap,\n });\n\n const tokensFetchedWithBalance =\n tokenRowsFetched.tokens.map<TokenRowForFetchedToken>((token) =>\n attachTokenBalance({\n ...constructToken(token),\n network: token.network,\n fetchedOnChain: true,\n img: possibleTokenImage,\n })\n );\n\n const combinedTokenRows: TokenRowForFetchedToken[] = [\n ...allTokenRows,\n ...tokensFetchedWithBalance, // tokens not present in allTokenRows,\n // because chains to fetch on exclude chains found for exact token in another chain\n ];\n\n return {\n tokenRowsCombined: combinedTokenRows,\n };\n};\n"],"names":["useCombineTokensWithFetched","t0","$","_c","allTokenRows","tokenFilter","selectableChains","t1","isAddress","isBlacklistedToken","address","isTokenFilterValidAddress","enabledChains","useAllEnabledChains","chainsToFetchOn","t2","Set","map","_temp","foundChains","t3","t4","chainId","has","filter","addresses","chainIds","tokenRowsFetched","useFetchTokens","possibleTokenImage","undefined","find","_temp2","img","tokensFetched","tokens","reduce","_temp3","tokenFetchedAddressesMap","t5","addressesMap","attachTokenBalance","useAttachTokenBalanceMultichain","tokensFetchedWithBalance","token_2","constructToken","token","network","fetchedOnChain","combinedTokenRows","tokenRowsCombined","token_0","acc","token_1","chainId_0","push"],"mappings":"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"}
@@ -40,7 +40,7 @@ const useAllTokensWithFilter = (t0) => {
40
40
  tokenArray: allIncludedTokens
41
41
  });
42
42
  const isTokenFilterValidAddress = isAddress(tokenFilter);
43
- const searchOnAllChains = isTokenFilterValidAddress || filteredTokens.length === 0 && !!tokenFilter && searchOnOtherChainsIfNothingFound;
43
+ const searchOnAllChains = isTokenFilterValidAddress && searchOnOtherChainsIfNothingFound || filteredTokens.length === 0 && !!tokenFilter && searchOnOtherChainsIfNothingFound;
44
44
  const t3 = !searchOnAllChains ? emptyArray : void 0;
45
45
  let t4;
46
46
  if ($[4] !== t3) {
@@ -1 +1 @@
1
- {"version":3,"file":"useAllTokensWithFilter.js","sources":["../../../src/hooks/tokens/useAllTokensWithFilter.ts"],"sourcesContent":["import { sortTokens } from \"@/tokens/utils/sorting\";\nimport { filterTokens } from \"@/tokens/utils/filtering\";\nimport { useAllTokens } from \"@/tokens/hooks\";\nimport type { Token, TokenMaybeWithUsdBalance } from \"@/tokens/state/types\";\nimport { useAtomValue } from \"jotai\";\nimport { useMemo } from \"react\";\nimport { useNativeToken } from \"./useNativeToken\";\nimport { useAttachTokenBalanceMultichain } from \"./balances/useAttachTokenBalanceMultichain\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { useChainId } from \"wagmi\";\nimport { useTokensFromAcross } from \"./useTokensFromAcross\";\nimport { emptyArray } from \"@/lib/constants\";\nimport { isAddress } from \"viem\";\nimport { allTokensByChainAtom } from \"@/tokens/state/allTokensByChainAtom\";\n\nexport const useAllTokensWithFilter = ({\n tokenFilter,\n forcedChainId,\n searchOnOtherChainsIfNothingFound,\n withETH = true,\n}: {\n tokenFilter: string;\n forcedChainId?: SupportedChainId;\n searchOnOtherChainsIfNothingFound?: boolean;\n withETH?: boolean;\n}): TokenMaybeWithUsdBalance[] => {\n const appChainId = useChainId();\n\n const allTokens = useAllTokens(forcedChainId);\n const nativeToken = useNativeToken(forcedChainId);\n\n const allIncludedTokens = withETH\n ? [nativeToken].concat(allTokens)\n : allTokens;\n\n const filteredTokens = useMemo(() => {\n return filterTokens({\n filterString: tokenFilter.trim(),\n tokenArray: allIncludedTokens,\n });\n }, [tokenFilter, allIncludedTokens]);\n\n const isTokenFilterValidAddress = isAddress(tokenFilter);\n const searchOnAllChains =\n isTokenFilterValidAddress || // if it's a token address, always search on other chains\n // -- we want to show this token on all chains.\n (filteredTokens.length === 0 &&\n // not already found tokens on current chain &&\n // filter given, and explicitly asked to search other chains\n !!tokenFilter &&\n searchOnOtherChainsIfNothingFound);\n\n const { tokens: tokensFromAllChains, addressMap: tokensFromAllChainsMap } =\n useAllTokensFromChains({\n // no need to exclude any chains, we actually want to search on all chains in this scenario\n // excludeChains: forcedChainId ? [forcedChainId] : [appChainId],\n includeChains: !searchOnAllChains ? emptyArray : undefined,\n });\n\n const { addressesMap, tokensToDisplay } = useMemo(() => {\n if (searchOnAllChains)\n return {\n tokensToDisplay: tokensFromAllChains,\n addressesMap: tokensFromAllChainsMap,\n };\n\n const currentChainId = forcedChainId ?? appChainId;\n const allTokensWithNativeAddresses = allIncludedTokens.map(\n ({ address }) => address\n );\n\n return {\n tokensToDisplay: allIncludedTokens,\n addressesMap: {\n [currentChainId]: allTokensWithNativeAddresses,\n },\n };\n }, [\n appChainId,\n forcedChainId,\n searchOnAllChains,\n tokensFromAllChains,\n tokensFromAllChainsMap,\n allIncludedTokens,\n ]);\n\n const attachTokenBalance = useAttachTokenBalanceMultichain({\n addressesMap,\n });\n\n const filteredAndSortedTokens = useMemo<TokenMaybeWithUsdBalance[]>(() => {\n return filterTokens({\n filterString: tokenFilter.trim(),\n tokenArray: tokensToDisplay,\n })\n .map(attachTokenBalance)\n .sort(sortTokens);\n }, [attachTokenBalance, tokenFilter, tokensToDisplay]);\n\n return filteredAndSortedTokens;\n};\n\nexport const usePrefetchTokenBalances = () => {\n // will fetch balances for all tokens from tokenLists for current chain,\n // if necessary, can be made to fetch for all chains, but that may be too many requests\n useAllTokensWithFilter({\n tokenFilter: \"\",\n });\n};\n\ntype AllTokensFromChainsInput = {\n includeChains?: number[];\n excludeChains?: number[];\n};\n\n/**\n * @description\n * Returns tokens and token address maps from all chains, optionally filtered by include/exclude chains.\n * If no chains are specified, it will return all tokens from all chains.\n * If includeChains is specified, it will only return tokens from those chains.\n * If excludeChains is specified, it will exclude tokens from those chains.\n */\nexport function useAllTokensFromChains({\n includeChains,\n excludeChains,\n}: AllTokensFromChainsInput): {\n tokens: Token[];\n addressMap: Record<number, string[]>;\n} {\n const { listByChainId: tokensListsByChain } =\n useAtomValue(allTokensByChainAtom);\n\n return useMemo(() => {\n const tokens: Token[] = [];\n const addressMap: Record<number, string[]> = {};\n\n for (const [_chainId, { tokens: _tokens }] of Object.entries(\n tokensListsByChain\n )) {\n const chainId = Number(_chainId);\n if (includeChains && !includeChains.includes(chainId)) continue;\n if (excludeChains && excludeChains.includes(chainId)) continue;\n\n tokens.push(..._tokens);\n addressMap[chainId] = _tokens.map((token) => token.address);\n }\n\n return { tokens, addressMap };\n }, [tokensListsByChain, includeChains, excludeChains]);\n}\n\nexport function useAcrossTokenLists({\n tokenFilter,\n fromChainId,\n toChainId,\n}: {\n tokenFilter: string;\n fromChainId: SupportedChainId;\n toChainId: SupportedChainId;\n}) {\n const { crossTokens } = useTokensFromAcross({\n fromChainId,\n toChainId,\n });\n\n const attachTokenBalance = useAttachTokenBalanceMultichain({\n addressesMap: {\n [toChainId]: crossTokens.map((token) => token.address),\n },\n });\n\n return useMemo<TokenMaybeWithUsdBalance[]>(\n () =>\n filterTokens({\n filterString: tokenFilter.trim(),\n tokenArray: crossTokens,\n })\n .map(attachTokenBalance)\n .sort(sortTokens),\n [attachTokenBalance, crossTokens, tokenFilter]\n );\n}\n"],"names":["useAllTokensWithFilter","t0","$","_c","tokenFilter","forcedChainId","searchOnOtherChainsIfNothingFound","withETH","t1","undefined","appChainId","useChainId","allTokens","useAllTokens","nativeToken","useNativeToken","t2","concat","allIncludedTokens","filteredTokens","filterTokens","filterString","trim","tokenArray","isTokenFilterValidAddress","isAddress","searchOnAllChains","length","t3","emptyArray","t4","includeChains","tokens","tokensFromAllChains","addressMap","tokensFromAllChainsMap","useAllTokensFromChains","t5","bb0","t6","tokensToDisplay","addressesMap","currentChainId","map","_temp","allTokensWithNativeAddresses","t7","t8","attachTokenBalance","useAttachTokenBalanceMultichain","sort","sortTokens","filteredAndSortedTokens","usePrefetchTokenBalances","Symbol","for","excludeChains","listByChainId","tokensListsByChain","useAtomValue","allTokensByChainAtom","useMemo","_chainId","_tokens","Object","entries","chainId","Number","includes","push","token","address","useAcrossTokenLists","fromChainId","toChainId","crossTokens","useTokensFromAcross","_temp3"],"mappings":"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"}
1
+ {"version":3,"file":"useAllTokensWithFilter.js","sources":["../../../src/hooks/tokens/useAllTokensWithFilter.ts"],"sourcesContent":["import { sortTokens } from \"@/tokens/utils/sorting\";\nimport { filterTokens } from \"@/tokens/utils/filtering\";\nimport { useAllTokens } from \"@/tokens/hooks\";\nimport type { Token, TokenMaybeWithUsdBalance } from \"@/tokens/state/types\";\nimport { useAtomValue } from \"jotai\";\nimport { useMemo } from \"react\";\nimport { useNativeToken } from \"./useNativeToken\";\nimport { useAttachTokenBalanceMultichain } from \"./balances/useAttachTokenBalanceMultichain\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { useChainId } from \"wagmi\";\nimport { useTokensFromAcross } from \"./useTokensFromAcross\";\nimport { emptyArray } from \"@/lib/constants\";\nimport { isAddress } from \"viem\";\nimport { allTokensByChainAtom } from \"@/tokens/state/allTokensByChainAtom\";\n\nexport const useAllTokensWithFilter = ({\n tokenFilter,\n forcedChainId,\n searchOnOtherChainsIfNothingFound,\n withETH = true,\n}: {\n tokenFilter: string;\n forcedChainId?: SupportedChainId;\n searchOnOtherChainsIfNothingFound?: boolean;\n withETH?: boolean;\n}): TokenMaybeWithUsdBalance[] => {\n const appChainId = useChainId();\n\n const allTokens = useAllTokens(forcedChainId);\n const nativeToken = useNativeToken(forcedChainId);\n\n const allIncludedTokens = withETH\n ? [nativeToken].concat(allTokens)\n : allTokens;\n\n const filteredTokens = useMemo(() => {\n return filterTokens({\n filterString: tokenFilter.trim(),\n tokenArray: allIncludedTokens,\n });\n }, [tokenFilter, allIncludedTokens]);\n\n const isTokenFilterValidAddress = isAddress(tokenFilter);\n const searchOnAllChains =\n (isTokenFilterValidAddress && searchOnOtherChainsIfNothingFound) || // if it's a token address, always search on other chains, if allowed\n // -- we want to show this token on all chains.\n (filteredTokens.length === 0 &&\n // not already found tokens on current chain &&\n // filter given, and explicitly asked to search other chains\n !!tokenFilter &&\n searchOnOtherChainsIfNothingFound);\n\n const { tokens: tokensFromAllChains, addressMap: tokensFromAllChainsMap } =\n useAllTokensFromChains({\n // no need to exclude any chains, we actually want to search on all chains in this scenario\n // excludeChains: forcedChainId ? [forcedChainId] : [appChainId],\n includeChains: !searchOnAllChains ? emptyArray : undefined,\n });\n\n const { addressesMap, tokensToDisplay } = useMemo(() => {\n if (searchOnAllChains)\n return {\n tokensToDisplay: tokensFromAllChains,\n addressesMap: tokensFromAllChainsMap,\n };\n\n const currentChainId = forcedChainId ?? appChainId;\n const allTokensWithNativeAddresses = allIncludedTokens.map(\n ({ address }) => address\n );\n\n return {\n tokensToDisplay: allIncludedTokens,\n addressesMap: {\n [currentChainId]: allTokensWithNativeAddresses,\n },\n };\n }, [\n appChainId,\n forcedChainId,\n searchOnAllChains,\n tokensFromAllChains,\n tokensFromAllChainsMap,\n allIncludedTokens,\n ]);\n\n const attachTokenBalance = useAttachTokenBalanceMultichain({\n addressesMap,\n });\n\n const filteredAndSortedTokens = useMemo<TokenMaybeWithUsdBalance[]>(() => {\n return filterTokens({\n filterString: tokenFilter.trim(),\n tokenArray: tokensToDisplay,\n })\n .map(attachTokenBalance)\n .sort(sortTokens);\n }, [attachTokenBalance, tokenFilter, tokensToDisplay]);\n\n return filteredAndSortedTokens;\n};\n\nexport const usePrefetchTokenBalances = () => {\n // will fetch balances for all tokens from tokenLists for current chain,\n // if necessary, can be made to fetch for all chains, but that may be too many requests\n useAllTokensWithFilter({\n tokenFilter: \"\",\n });\n};\n\ntype AllTokensFromChainsInput = {\n includeChains?: number[];\n excludeChains?: number[];\n};\n\n/**\n * @description\n * Returns tokens and token address maps from all chains, optionally filtered by include/exclude chains.\n * If no chains are specified, it will return all tokens from all chains.\n * If includeChains is specified, it will only return tokens from those chains.\n * If excludeChains is specified, it will exclude tokens from those chains.\n */\nexport function useAllTokensFromChains({\n includeChains,\n excludeChains,\n}: AllTokensFromChainsInput): {\n tokens: Token[];\n addressMap: Record<number, string[]>;\n} {\n const { listByChainId: tokensListsByChain } =\n useAtomValue(allTokensByChainAtom);\n\n return useMemo(() => {\n const tokens: Token[] = [];\n const addressMap: Record<number, string[]> = {};\n\n for (const [_chainId, { tokens: _tokens }] of Object.entries(\n tokensListsByChain\n )) {\n const chainId = Number(_chainId);\n if (includeChains && !includeChains.includes(chainId)) continue;\n if (excludeChains && excludeChains.includes(chainId)) continue;\n\n tokens.push(..._tokens);\n addressMap[chainId] = _tokens.map((token) => token.address);\n }\n\n return { tokens, addressMap };\n }, [tokensListsByChain, includeChains, excludeChains]);\n}\n\nexport function useAcrossTokenLists({\n tokenFilter,\n fromChainId,\n toChainId,\n}: {\n tokenFilter: string;\n fromChainId: SupportedChainId;\n toChainId: SupportedChainId;\n}) {\n const { crossTokens } = useTokensFromAcross({\n fromChainId,\n toChainId,\n });\n\n const attachTokenBalance = useAttachTokenBalanceMultichain({\n addressesMap: {\n [toChainId]: crossTokens.map((token) => token.address),\n },\n });\n\n return useMemo<TokenMaybeWithUsdBalance[]>(\n () =>\n filterTokens({\n filterString: tokenFilter.trim(),\n tokenArray: crossTokens,\n })\n .map(attachTokenBalance)\n .sort(sortTokens),\n [attachTokenBalance, crossTokens, tokenFilter]\n );\n}\n"],"names":["useAllTokensWithFilter","t0","$","_c","tokenFilter","forcedChainId","searchOnOtherChainsIfNothingFound","withETH","t1","undefined","appChainId","useChainId","allTokens","useAllTokens","nativeToken","useNativeToken","t2","concat","allIncludedTokens","filteredTokens","filterTokens","filterString","trim","tokenArray","isTokenFilterValidAddress","isAddress","searchOnAllChains","length","t3","emptyArray","t4","includeChains","tokens","tokensFromAllChains","addressMap","tokensFromAllChainsMap","useAllTokensFromChains","t5","bb0","t6","tokensToDisplay","addressesMap","currentChainId","map","_temp","allTokensWithNativeAddresses","t7","t8","attachTokenBalance","useAttachTokenBalanceMultichain","sort","sortTokens","filteredAndSortedTokens","usePrefetchTokenBalances","Symbol","for","excludeChains","listByChainId","tokensListsByChain","useAtomValue","allTokensByChainAtom","useMemo","_chainId","_tokens","Object","entries","chainId","Number","includes","push","token","address","useAcrossTokenLists","fromChainId","toChainId","crossTokens","useTokensFromAcross","_temp3"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function useDateNow(): number;
2
+ //# sourceMappingURL=useDateNow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDateNow.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/useDateNow.ts"],"names":[],"mappings":"AACA,wBAAgB,UAAU,IAAI,MAAM,CAGnC"}
@@ -0,0 +1,7 @@
1
+ function useDateNow() {
2
+ "use no memo";
3
+ return Date.now();
4
+ }
5
+
6
+ export { useDateNow };
7
+ //# sourceMappingURL=useDateNow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDateNow.js","sources":["../../../src/lib/utils/useDateNow.ts"],"sourcesContent":["// workaround for react-compiler trying to memoize Date.now() result based on an unrelated cached value\nexport function useDateNow(): number {\n \"use no memo\";\n return Date.now();\n}\n"],"names":["useDateNow","Date","now"],"mappings":"AACO,SAASA,UAAAA,GAAqB;AACnC,EAAA,aAAA;AACA,EAAA,OAAOC,KAAKC,GAAAA,EAAI;AAClB;;;;"}
package/dist/styles.css CHANGED
@@ -935,10 +935,6 @@
935
935
  --tw-translate-y: calc(calc(1 / 2 * 100%) * -1);
936
936
  translate: var(--tw-translate-x) var(--tw-translate-y);
937
937
  }
938
- .velora-widget.velora-widget .translate-y-0\.5 {
939
- --tw-translate-y: calc(var(--spacing) * .5);
940
- translate: var(--tw-translate-x) var(--tw-translate-y);
941
- }
942
938
  .velora-widget.velora-widget .translate-y-\[-50\%\] {
943
939
  --tw-translate-y: -50%;
944
940
  translate: var(--tw-translate-x) var(--tw-translate-y);
@@ -1782,6 +1778,9 @@
1782
1778
  .velora-widget.velora-widget .underline {
1783
1779
  text-decoration-line: underline;
1784
1780
  }
1781
+ .velora-widget.velora-widget .underline-offset-2 {
1782
+ text-underline-offset: 2px;
1783
+ }
1785
1784
  .velora-widget.velora-widget .underline-offset-4 {
1786
1785
  text-underline-offset: 4px;
1787
1786
  }
@@ -1 +1 @@
1
- {"version":3,"file":"addImportedTokenAtom.d.ts","sourceRoot":"","sources":["../../../src/tokens/state/addImportedTokenAtom.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AASpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAgBlD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,KAAK,eAAe,GAAG,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACrD,MAAM,MAAM,cAAc,GAAG,CAAC,aAAa,EAAE,eAAe,KAAK,IAAI,CAAC;AAEtE,eAAO,MAAM,oBAAoB;cASjB,eAAe;kBACX,sBAAsB,CAAC,iBAAiB,CAAC;;;CA8D5D,CAAC;AAKF,eAAO,MAAM,wBAAwB;aAKR,OAAO;aAAW,gBAAgB;;;CA8B9D,CAAC"}
1
+ {"version":3,"file":"addImportedTokenAtom.d.ts","sourceRoot":"","sources":["../../../src/tokens/state/addImportedTokenAtom.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAKpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI/D,KAAK,eAAe,GAAG,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACrD,MAAM,MAAM,cAAc,GAAG,CAAC,aAAa,EAAE,eAAe,KAAK,IAAI,CAAC;AAEtE,eAAO,MAAM,oBAAoB;cASjB,eAAe;kBACX,sBAAsB,CAAC,iBAAiB,CAAC;;;CAuC5D,CAAC;AAKF,eAAO,MAAM,wBAAwB;aAKR,OAAO;aAAW,gBAAgB;;;CA8B9D,CAAC"}
@@ -1,10 +1,9 @@
1
1
  import { atom } from 'jotai';
2
2
  import { importedTokensAtom, autoImportedTokensAtom } from './importedTokensAtom.js';
3
- import { pickDefaultTokenPair } from '../defaultTokens.js';
4
- import { swapTokenToAtom, swapTokenFromAtom } from '../../core/inputs/state/selectedTokenAtom.js';
5
- import { selectSwapTokenToAtom, selectSwapTokenFromAtom } from '../../core/inputs/state/selectedTokenActionsAtom.js';
6
3
  import { fetchUnknownTokenData } from '../../hooks/tokens/data/useMultichainTokensData.js';
7
4
  import { constructToken } from '@velora-dex/sdk';
5
+ import { tradeModeAtom } from '../../core/state/tradeModeAtom.js';
6
+ import { tradeModeToSetTokenAtoms } from '../../core/inputs/state/common.js';
8
7
 
9
8
  const addImportedTokenAtom = atom(null, (get, set, {
10
9
  newToken,
@@ -27,26 +26,10 @@ const addImportedTokenAtom = atom(null, (get, set, {
27
26
  [chainId]: [...tokensForChain, tokenToAdd]
28
27
  });
29
28
  if (!afterAction) return tokenToAdd;
30
- const oppositeCurrentToken = get(afterAction === "set-token-from" ? swapTokenToAtom : swapTokenFromAtom);
31
- const willBeCrosschain = oppositeCurrentToken && oppositeCurrentToken.network !== tokenToAdd.network;
32
- if (willBeCrosschain) {
33
- const [defaultTokenFrom, defaultTokenTo] = pickDefaultTokenPair(
34
- tokenToAdd.network,
35
- "swap"
36
- // "swap" is alright as long as we set token into Swap TokenInput
37
- );
38
- const oppositeDefaultToken = afterAction === "set-token-from" ? defaultTokenTo : defaultTokenFrom;
39
- if (afterAction === "set-token-from") {
40
- set(selectSwapTokenToAtom, oppositeDefaultToken);
41
- } else {
42
- set(selectSwapTokenFromAtom, oppositeDefaultToken);
43
- }
44
- }
45
- if (afterAction === "set-token-from") {
46
- set(selectSwapTokenFromAtom, tokenToAdd);
47
- } else if (afterAction === "set-token-to") {
48
- set(selectSwapTokenToAtom, tokenToAdd);
49
- }
29
+ const tradeMode = get(tradeModeAtom);
30
+ const tokensToSet = tradeModeToSetTokenAtoms[tradeMode];
31
+ const tokenAtomToSet = tokensToSet[afterAction === "set-token-from" ? "tokenFromAtom" : "tokenToAtom"];
32
+ set(tokenAtomToSet, tokenToAdd);
50
33
  return tokenToAdd;
51
34
  });
52
35
  const autoAddImportedTokenAtom = atom([], async (get, set, minTokenData) => {
@@ -1 +1 @@
1
- {"version":3,"file":"addImportedTokenAtom.js","sources":["../../../src/tokens/state/addImportedTokenAtom.ts"],"sourcesContent":["import { atom } from \"jotai\";\nimport type { ImportedToken, Token } from \"./types\";\nimport type { ImportTokenDrawerProps } from \"@/components/widget/ImportToken/types\";\n// import {\n// selectTokenFromAtom,\n// selectTokenToAtom,\n// } from \"@/core/inputs/state/selectedTokenActionsAtom\";\nimport {\n autoImportedTokensAtom,\n importedTokensAtom,\n} from \"./importedTokensAtom\";\nimport type { MarkRequired } from \"ts-essentials\";\n// import {\n// tokenFromAtom,\n// tokenToAtom,\n// } from \"@/core/inputs/state/selectedTokenAtom\";\nimport { pickDefaultTokenPair } from \"../defaultTokens\";\nimport {\n swapTokenFromAtom,\n swapTokenToAtom,\n} from \"@/core/inputs/state/selectedTokenAtom\";\nimport {\n selectSwapTokenFromAtom,\n selectSwapTokenToAtom,\n} from \"@/core/inputs/state/selectedTokenActionsAtom\";\nimport { fetchUnknownTokenData } from \"@/hooks/tokens/data/useMultichainTokensData\";\nimport { constructToken } from \"@velora-dex/sdk\";\nimport type { Address } from \"viem\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\n\ntype TokenWithSymbol = MarkRequired<Token, \"symbol\">;\nexport type OnImportAction = (tokenImported: TokenWithSymbol) => void;\n\nexport const addImportedTokenAtom = atom(\n null,\n (\n get,\n set,\n {\n newToken,\n afterAction,\n }: {\n newToken: TokenWithSymbol;\n afterAction?: ImportTokenDrawerProps[\"onConfirmAction\"];\n }\n ) => {\n const chainId = newToken.network;\n const currentTokens = get(importedTokensAtom);\n const tokensForChain = currentTokens[chainId] ?? [];\n // Avoid duplicates by address\n const newTokenAddressLower = newToken.address.toLowerCase();\n const alreadyExists = tokensForChain.some(\n (t) => t.address.toLowerCase() === newTokenAddressLower\n );\n if (alreadyExists) return;\n\n const tokenToAdd: ImportedToken = {\n // get rid of extra props attached for display purposes (usdBalance, fetchedOnChain)\n ...pickOnlyTokenProps(newToken),\n imported: true,\n symbol: newToken.symbol,\n };\n\n set(importedTokensAtom, {\n ...currentTokens,\n [chainId]: [...tokensForChain, tokenToAdd],\n });\n\n if (!afterAction) return tokenToAdd;\n\n const oppositeCurrentToken = get(\n afterAction === \"set-token-from\" ? swapTokenToAtom : swapTokenFromAtom\n );\n const willBeCrosschain =\n oppositeCurrentToken &&\n oppositeCurrentToken.network !== tokenToAdd.network;\n // if setting the newly imported Token into TokenInput would force crosschain,\n // given that all crosschain supported tokens are already available from crosschain tokenList,\n // the new crosschain pair will not be valid.\n if (willBeCrosschain) {\n // get default token pair for the imported token chain\n const [defaultTokenFrom, defaultTokenTo] = pickDefaultTokenPair(\n tokenToAdd.network,\n \"swap\" // \"swap\" is alright as long as we set token into Swap TokenInput\n );\n const oppositeDefaultToken =\n afterAction === \"set-token-from\" ? defaultTokenTo : defaultTokenFrom;\n if (afterAction === \"set-token-from\") {\n // imported token set as tokenFrom -> set tokenTo to default token for the imported token chain\n set(selectSwapTokenToAtom, oppositeDefaultToken);\n } else {\n // imported token set as tokenTo -> set tokenFrom to default token for the imported token chain\n set(selectSwapTokenFromAtom, oppositeDefaultToken);\n }\n // internally in selectToken*Atom we request chain switch\n }\n\n if (afterAction === \"set-token-from\") {\n set(selectSwapTokenFromAtom, tokenToAdd);\n } else if (afterAction === \"set-token-to\") {\n set(selectSwapTokenToAtom, tokenToAdd);\n }\n\n return tokenToAdd;\n }\n);\n\n// fetches Token data onchain internally,\n// adds it to addImportedTokenAtom.\n// then adds it to autoImportedTokensAtom.\nexport const autoAddImportedTokenAtom = atom(\n [],\n async (\n get,\n set,\n minTokenData: { address: Address; chainId: SupportedChainId }\n ) => {\n const fetchedToken = await fetchUnknownTokenData(minTokenData);\n\n if (fetchedToken) {\n const constructedToken = constructToken(fetchedToken);\n const importedToken = set(addImportedTokenAtom, {\n newToken: {\n ...constructedToken,\n symbol: fetchedToken.symbol,\n network: minTokenData.chainId,\n },\n });\n\n if (importedToken) {\n const currentAutoImportedTokens = get(autoImportedTokensAtom);\n const alreadyExists = currentAutoImportedTokens.some(\n (t) =>\n t.address.toLowerCase() === importedToken.address.toLowerCase() &&\n t.network === importedToken.network\n );\n if (alreadyExists) return;\n\n set(autoImportedTokensAtom, [\n ...currentAutoImportedTokens,\n importedToken,\n ]);\n }\n }\n }\n);\n\nfunction pickOnlyTokenProps(token: Token): Token {\n return {\n address: token.address,\n decimals: token.decimals,\n symbol: token.symbol,\n tokenType: token.tokenType,\n mainConnector: token.mainConnector,\n connectors: token.connectors,\n network: token.network,\n img: token.img,\n allowance: token.allowance,\n balance: token.balance,\n imported: token.imported,\n name: token.name,\n fromList: token.fromList,\n fromListURL: token.fromListURL,\n };\n}\n"],"names":["addImportedTokenAtom","atom","get","set","newToken","afterAction","chainId","network","currentTokens","importedTokensAtom","tokensForChain","newTokenAddressLower","address","toLowerCase","alreadyExists","some","t","tokenToAdd","pickOnlyTokenProps","imported","symbol","oppositeCurrentToken","swapTokenToAtom","swapTokenFromAtom","willBeCrosschain","defaultTokenFrom","defaultTokenTo","pickDefaultTokenPair","oppositeDefaultToken","selectSwapTokenToAtom","selectSwapTokenFromAtom","autoAddImportedTokenAtom","minTokenData","fetchedToken","fetchUnknownTokenData","constructedToken","constructToken","importedToken","currentAutoImportedTokens","autoImportedTokensAtom","token","decimals","tokenType","mainConnector","connectors","img","allowance","balance","name","fromList","fromListURL"],"mappings":"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"}
1
+ {"version":3,"file":"addImportedTokenAtom.js","sources":["../../../src/tokens/state/addImportedTokenAtom.ts"],"sourcesContent":["import { atom } from \"jotai\";\nimport type { ImportedToken, Token } from \"./types\";\nimport type { ImportTokenDrawerProps } from \"@/components/widget/ImportToken/types\";\nimport {\n autoImportedTokensAtom,\n importedTokensAtom,\n} from \"./importedTokensAtom\";\nimport type { MarkRequired } from \"ts-essentials\";\nimport { fetchUnknownTokenData } from \"@/hooks/tokens/data/useMultichainTokensData\";\nimport { constructToken } from \"@velora-dex/sdk\";\nimport type { Address } from \"viem\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { tradeModeAtom } from \"@/core/state/tradeModeAtom\";\nimport { tradeModeToSetTokenAtoms } from \"@/core/inputs/state/common\";\n\ntype TokenWithSymbol = MarkRequired<Token, \"symbol\">;\nexport type OnImportAction = (tokenImported: TokenWithSymbol) => void;\n\nexport const addImportedTokenAtom = atom(\n null,\n (\n get,\n set,\n {\n newToken,\n afterAction,\n }: {\n newToken: TokenWithSymbol;\n afterAction?: ImportTokenDrawerProps[\"onConfirmAction\"];\n }\n ) => {\n const chainId = newToken.network;\n const currentTokens = get(importedTokensAtom);\n const tokensForChain = currentTokens[chainId] ?? [];\n // Avoid duplicates by address\n const newTokenAddressLower = newToken.address.toLowerCase();\n const alreadyExists = tokensForChain.some(\n (t) => t.address.toLowerCase() === newTokenAddressLower\n );\n if (alreadyExists) return;\n\n const tokenToAdd: ImportedToken = {\n // get rid of extra props attached for display purposes (usdBalance, fetchedOnChain)\n ...pickOnlyTokenProps(newToken),\n imported: true,\n symbol: newToken.symbol,\n };\n\n set(importedTokensAtom, {\n ...currentTokens,\n [chainId]: [...tokensForChain, tokenToAdd],\n });\n\n if (!afterAction) return tokenToAdd;\n\n const tradeMode = get(tradeModeAtom);\n const tokensToSet = tradeModeToSetTokenAtoms[tradeMode];\n const tokenAtomToSet =\n tokensToSet[\n afterAction === \"set-token-from\" ? \"tokenFromAtom\" : \"tokenToAtom\"\n ];\n // atom setter inside takes care of disallowed pair choices,\n // like invalid crosschain match\n set(tokenAtomToSet, tokenToAdd);\n\n return tokenToAdd;\n }\n);\n\n// fetches Token data onchain internally,\n// adds it to addImportedTokenAtom.\n// then adds it to autoImportedTokensAtom.\nexport const autoAddImportedTokenAtom = atom(\n [],\n async (\n get,\n set,\n minTokenData: { address: Address; chainId: SupportedChainId }\n ) => {\n const fetchedToken = await fetchUnknownTokenData(minTokenData);\n\n if (fetchedToken) {\n const constructedToken = constructToken(fetchedToken);\n const importedToken = set(addImportedTokenAtom, {\n newToken: {\n ...constructedToken,\n symbol: fetchedToken.symbol,\n network: minTokenData.chainId,\n },\n });\n\n if (importedToken) {\n const currentAutoImportedTokens = get(autoImportedTokensAtom);\n const alreadyExists = currentAutoImportedTokens.some(\n (t) =>\n t.address.toLowerCase() === importedToken.address.toLowerCase() &&\n t.network === importedToken.network\n );\n if (alreadyExists) return;\n\n set(autoImportedTokensAtom, [\n ...currentAutoImportedTokens,\n importedToken,\n ]);\n }\n }\n }\n);\n\nfunction pickOnlyTokenProps(token: Token): Token {\n return {\n address: token.address,\n decimals: token.decimals,\n symbol: token.symbol,\n tokenType: token.tokenType,\n mainConnector: token.mainConnector,\n connectors: token.connectors,\n network: token.network,\n img: token.img,\n allowance: token.allowance,\n balance: token.balance,\n imported: token.imported,\n name: token.name,\n fromList: token.fromList,\n fromListURL: token.fromListURL,\n };\n}\n"],"names":["addImportedTokenAtom","atom","get","set","newToken","afterAction","chainId","network","currentTokens","importedTokensAtom","tokensForChain","newTokenAddressLower","address","toLowerCase","alreadyExists","some","t","tokenToAdd","pickOnlyTokenProps","imported","symbol","tradeMode","tradeModeAtom","tokensToSet","tradeModeToSetTokenAtoms","tokenAtomToSet","autoAddImportedTokenAtom","minTokenData","fetchedToken","fetchUnknownTokenData","constructedToken","constructToken","importedToken","currentAutoImportedTokens","autoImportedTokensAtom","token","decimals","tokenType","mainConnector","connectors","img","allowance","balance","name","fromList","fromListURL"],"mappings":"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"}