@lifi/widget 4.0.0-beta.18 → 4.0.0-beta.19
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/esm/App.js.map +1 -1
- package/dist/esm/AppDefault.js.map +1 -1
- package/dist/esm/AppDrawer.js.map +1 -1
- package/dist/esm/AppLayout.js.map +1 -1
- package/dist/esm/AppProvider.js.map +1 -1
- package/dist/esm/components/AmountInput/AmountInput.js.map +1 -1
- package/dist/esm/components/AmountInput/AmountInputEndAdornment.js.map +1 -1
- package/dist/esm/components/AmountInput/AmountInputStartAdornment.js.map +1 -1
- package/dist/esm/components/AmountInput/PriceFormHelperText.js.map +1 -1
- package/dist/esm/components/AppContainer.js.map +1 -1
- package/dist/esm/components/Avatar/AccountAvatar.js.map +1 -1
- package/dist/esm/components/Avatar/Avatar.js.map +1 -1
- package/dist/esm/components/Avatar/Avatar.style.js.map +1 -1
- package/dist/esm/components/Avatar/ChainBadgeContent.js.map +1 -1
- package/dist/esm/components/Avatar/SmallAvatar.js.map +1 -1
- package/dist/esm/components/Avatar/TokenAvatar.js.map +1 -1
- package/dist/esm/components/Avatar/utils.js.map +1 -1
- package/dist/esm/components/BaseTransactionButton/BaseTransactionButton.js.map +1 -1
- package/dist/esm/components/BottomSheet/BottomSheet.js.map +1 -1
- package/dist/esm/components/Card/Card.js.map +1 -1
- package/dist/esm/components/Card/CardIconButton.js.map +1 -1
- package/dist/esm/components/ChainSelect/ChainSelect.js.map +1 -1
- package/dist/esm/components/ChainSelect/ChainSelect.style.js.map +1 -1
- package/dist/esm/components/ChainSelect/useChainSelect.js.map +1 -1
- package/dist/esm/components/Chains/AllChainsAvatar.js.map +1 -1
- package/dist/esm/components/Chains/ChainList.js.map +1 -1
- package/dist/esm/components/Chains/ChainList.style.js.map +1 -1
- package/dist/esm/components/Chains/ChainListItem.js.map +1 -1
- package/dist/esm/components/Chains/ChainSearchInput.js.map +1 -1
- package/dist/esm/components/Chains/ChainsExpanded.js.map +1 -1
- package/dist/esm/components/Chains/PinChainButton.js.map +1 -1
- package/dist/esm/components/Chains/SelectChainContent.js.map +1 -1
- package/dist/esm/components/Chains/VirtualizedChainList.js.map +1 -1
- package/dist/esm/components/ContextMenu.js.map +1 -1
- package/dist/esm/components/ContractComponent/ContractComponent.js.map +1 -1
- package/dist/esm/components/ContractComponent/ItemPrice.js.map +1 -1
- package/dist/esm/components/ContractComponent/NFT/NFT.js.map +1 -1
- package/dist/esm/components/ContractComponent/NFT/NFTBase.js.map +1 -1
- package/dist/esm/components/Dialog/Dialog.js.map +1 -1
- package/dist/esm/components/Expansion/Expansion.js.map +1 -1
- package/dist/esm/components/Expansion/ExpansionTransition.js.map +1 -1
- package/dist/esm/components/FeeBreakdownTooltip.js.map +1 -1
- package/dist/esm/components/Header/ActivitiesButton.js.map +1 -1
- package/dist/esm/components/Header/BackButton.js.map +1 -1
- package/dist/esm/components/Header/CloseDrawerButton.js.map +1 -1
- package/dist/esm/components/Header/DisconnectIconButton.js.map +1 -1
- package/dist/esm/components/Header/Header.js.map +1 -1
- package/dist/esm/components/Header/Header.style.js.map +1 -1
- package/dist/esm/components/Header/NavigationHeader.js.map +1 -1
- package/dist/esm/components/Header/SettingsButton.js.map +1 -1
- package/dist/esm/components/Header/SettingsButton.style.js.map +1 -1
- package/dist/esm/components/Header/SplitNavigationTabs.js.map +1 -1
- package/dist/esm/components/Header/WalletHeader.js.map +1 -1
- package/dist/esm/components/Header/WalletMenu.js.map +1 -1
- package/dist/esm/components/IconCircle/IconCircle.js.map +1 -1
- package/dist/esm/components/IconCircle/IconCircle.style.js.map +1 -1
- package/dist/esm/components/Initializer.js.map +1 -1
- package/dist/esm/components/ListItemButton.js.map +1 -1
- package/dist/esm/components/Messages/AccountDeployedMessage.js.map +1 -1
- package/dist/esm/components/Messages/AccountNotDeployedMessage.js.map +1 -1
- package/dist/esm/components/Messages/FundsSufficiencyMessage.js.map +1 -1
- package/dist/esm/components/Messages/GasRefuelMessage.js.map +1 -1
- package/dist/esm/components/Messages/GasSufficiencyMessage.js.map +1 -1
- package/dist/esm/components/Messages/MinFromAmountUSDMessage.js.map +1 -1
- package/dist/esm/components/Messages/MissingRouteRequiredAccountMessage.js.map +1 -1
- package/dist/esm/components/Messages/WarningMessages.js.map +1 -1
- package/dist/esm/components/Messages/useMessageQueue.js.map +1 -1
- package/dist/esm/components/NotFound.js.map +1 -1
- package/dist/esm/components/PageEntered.js.map +1 -1
- package/dist/esm/components/PoweredBy/PoweredBy.js.map +1 -1
- package/dist/esm/components/ProgressToNextUpdate.js.map +1 -1
- package/dist/esm/components/ReverseTokensButton/ReverseTokensButton.js.map +1 -1
- package/dist/esm/components/ReverseTokensButton/ReverseTokensButton.style.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteCard.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteCardEssentials.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteCardSkeleton.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteDetails.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteNotFoundCard.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteToken.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteTokens.js.map +1 -1
- package/dist/esm/components/RouteCard/getMatchingLabels.js.map +1 -1
- package/dist/esm/components/Routes/Routes.js.map +1 -1
- package/dist/esm/components/Routes/RoutesContent.js.map +1 -1
- package/dist/esm/components/Routes/RoutesExpanded.js.map +1 -1
- package/dist/esm/components/Routes/RoutesExpanded.style.js.map +1 -1
- package/dist/esm/components/Search/SearchInput.js.map +1 -1
- package/dist/esm/components/SelectChainAndToken.js.map +1 -1
- package/dist/esm/components/SelectTokenButton/SelectTokenButton.js.map +1 -1
- package/dist/esm/components/SelectTokenButton/SelectTokenButton.style.js.map +1 -1
- package/dist/esm/components/SendToWallet/SendToWalletButton.js.map +1 -1
- package/dist/esm/components/SendToWallet/SendToWalletExpandButton.js.map +1 -1
- package/dist/esm/components/Skeleton/WidgetSkeleton.js.map +1 -1
- package/dist/esm/components/Skeleton/WidgetSkeleton.style.js.map +1 -1
- package/dist/esm/components/Step/CircularProgress.js.map +1 -1
- package/dist/esm/components/Step/CircularProgress.style.js.map +1 -1
- package/dist/esm/components/Step/DestinationWalletAddress.js.map +1 -1
- package/dist/esm/components/Step/Step.js.map +1 -1
- package/dist/esm/components/Step/StepAction.js.map +1 -1
- package/dist/esm/components/Step/StepActions.js.map +1 -1
- package/dist/esm/components/Step/StepList.js.map +1 -1
- package/dist/esm/components/StepActions/StepActions.js.map +1 -1
- package/dist/esm/components/StepDivider/StepDivider.js.map +1 -1
- package/dist/esm/components/TextFitter/TextFitter.js.map +1 -1
- package/dist/esm/components/Timer/StepTimer.js.map +1 -1
- package/dist/esm/components/Timer/TimerContent.js.map +1 -1
- package/dist/esm/components/Token/Token.js.map +1 -1
- package/dist/esm/components/TokenList/PinTokenButton.js.map +1 -1
- package/dist/esm/components/TokenList/TokenDetailsSheet.js.map +1 -1
- package/dist/esm/components/TokenList/TokenDetailsSheetContent.js.map +1 -1
- package/dist/esm/components/TokenList/TokenList.js.map +1 -1
- package/dist/esm/components/TokenList/TokenListItem.js.map +1 -1
- package/dist/esm/components/TokenList/TokenNotFound.js.map +1 -1
- package/dist/esm/components/TokenList/VirtualizedTokenList.js.map +1 -1
- package/dist/esm/components/TokenList/useTokenSelect.js.map +1 -1
- package/dist/esm/components/TokenRate/TokenRate.js.map +1 -1
- package/dist/esm/components/Tools/ToolItem.js.map +1 -1
- package/dist/esm/components/Tools/Tools.js.map +1 -1
- package/dist/esm/components/TransactionCard/ActiveTransactionCard.js.map +1 -1
- package/dist/esm/components/TransactionCard/TransactionCard.js.map +1 -1
- package/dist/esm/components/TransactionCard/TransactionCardSkeleton.js.map +1 -1
- package/dist/esm/components/TransactionDetails.js.map +1 -1
- package/dist/esm/config/version.d.ts +1 -1
- package/dist/esm/config/version.js +1 -1
- package/dist/esm/config/version.js.map +1 -1
- package/dist/esm/hooks/timer/time.js.map +1 -1
- package/dist/esm/hooks/timer/useExecutionTimer.js.map +1 -1
- package/dist/esm/hooks/timer/useInterval.js.map +1 -1
- package/dist/esm/hooks/timer/useTimer.js.map +1 -1
- package/dist/esm/hooks/timer/validate.js.map +1 -1
- package/dist/esm/hooks/useAccountsBalancesData.js.map +1 -1
- package/dist/esm/hooks/useActionMessage.js.map +1 -1
- package/dist/esm/hooks/useAddressActivity.js.map +1 -1
- package/dist/esm/hooks/useAddressValidation.js.map +1 -1
- package/dist/esm/hooks/useAvailableChains.js.map +1 -1
- package/dist/esm/hooks/useChain.js.map +1 -1
- package/dist/esm/hooks/useChains.js.map +1 -1
- package/dist/esm/hooks/useContactSupport.js.map +1 -1
- package/dist/esm/hooks/useDebouncedWatch.js.map +1 -1
- package/dist/esm/hooks/useDefaultElementId.js.map +1 -1
- package/dist/esm/hooks/useExplorer.js.map +1 -1
- package/dist/esm/hooks/useFilteredByTokenBalances.js.map +1 -1
- package/dist/esm/hooks/useFromAmountThreshold.js.map +1 -1
- package/dist/esm/hooks/useFromTokenSufficiency.js.map +1 -1
- package/dist/esm/hooks/useGasRecommendation.js.map +1 -1
- package/dist/esm/hooks/useGasRefuel.js.map +1 -1
- package/dist/esm/hooks/useGasSufficiency.js.map +1 -1
- package/dist/esm/hooks/useHasChainExpansion.js.map +1 -1
- package/dist/esm/hooks/useHeader.js.map +1 -1
- package/dist/esm/hooks/useInitializeSDKProviders.js.map +1 -1
- package/dist/esm/hooks/useInitializer.js.map +1 -1
- package/dist/esm/hooks/useIsBatchingSupported.js.map +1 -1
- package/dist/esm/hooks/useIsContractAddress.js.map +1 -1
- package/dist/esm/hooks/useLanguages.js.map +1 -1
- package/dist/esm/hooks/useListHeight.js.map +1 -1
- package/dist/esm/hooks/useLongPress.js.map +1 -1
- package/dist/esm/hooks/useNavigateBack.js.map +1 -1
- package/dist/esm/hooks/useRouteExecution.js.map +1 -1
- package/dist/esm/hooks/useRouteRequiredAccountConnection.js.map +1 -1
- package/dist/esm/hooks/useRoutes.js.map +1 -1
- package/dist/esm/hooks/useScrollableContainer.js.map +1 -1
- package/dist/esm/hooks/useSetContentHeight.js.map +1 -1
- package/dist/esm/hooks/useSettingMonitor.js.map +1 -1
- package/dist/esm/hooks/useSwapOnly.js.map +1 -1
- package/dist/esm/hooks/useToAddressAutoPopulate.js.map +1 -1
- package/dist/esm/hooks/useToAddressRequirements.js.map +1 -1
- package/dist/esm/hooks/useToAddressReset.js.map +1 -1
- package/dist/esm/hooks/useToken.js.map +1 -1
- package/dist/esm/hooks/useTokenAddressBalance.js.map +1 -1
- package/dist/esm/hooks/useTokenBalance.js.map +1 -1
- package/dist/esm/hooks/useTokenBalances.js.map +1 -1
- package/dist/esm/hooks/useTokenBalancesQueries.js.map +1 -1
- package/dist/esm/hooks/useTokenRateText.js.map +1 -1
- package/dist/esm/hooks/useTokenSearch.js.map +1 -1
- package/dist/esm/hooks/useTokens.js.map +1 -1
- package/dist/esm/hooks/useTools.js.map +1 -1
- package/dist/esm/hooks/useTransactionDetails.js.map +1 -1
- package/dist/esm/hooks/useTransactionHistory.js.map +1 -1
- package/dist/esm/hooks/useTransactionList.js.map +1 -1
- package/dist/esm/hooks/useWideVariant.js.map +1 -1
- package/dist/esm/hooks/useWidgetChains.js.map +1 -1
- package/dist/esm/hooks/useWidgetEvents.js.map +1 -1
- package/dist/esm/pages/ActivitiesPage/ActiveTransactionItem.js.map +1 -1
- package/dist/esm/pages/ActivitiesPage/ActivitiesPage.js.map +1 -1
- package/dist/esm/pages/ActivitiesPage/ActivitiesPageMenuButton.js.map +1 -1
- package/dist/esm/pages/ActivitiesPage/TransactionHistoryEmpty.js.map +1 -1
- package/dist/esm/pages/ActivitiesPage/TransactionHistoryItem.js.map +1 -1
- package/dist/esm/pages/LanguagesPage.js.map +1 -1
- package/dist/esm/pages/MainPage/MainPage.js.map +1 -1
- package/dist/esm/pages/MainPage/MainWarningMessages.js.map +1 -1
- package/dist/esm/pages/MainPage/ReviewButton.js.map +1 -1
- package/dist/esm/pages/RoutesPage/RoutesPage.js.map +1 -1
- package/dist/esm/pages/SelectChainPage/SelectChainPage.js.map +1 -1
- package/dist/esm/pages/SelectEnabledToolsPage.js.map +1 -1
- package/dist/esm/pages/SelectTokenPage/SearchTokenInput.js.map +1 -1
- package/dist/esm/pages/SelectTokenPage/SelectTokenPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/BookmarkAddressSheet.js.map +1 -1
- package/dist/esm/pages/SendToWallet/BookmarksPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/ConfirmAddressSheet.js.map +1 -1
- package/dist/esm/pages/SendToWallet/ConnectedWalletsPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/RecentWalletsPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/SendToConfiguredWalletPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/SendToWalletPage.js.map +1 -1
- package/dist/esm/pages/SettingsPage/BridgeAndExchangeSettings.js.map +1 -1
- package/dist/esm/pages/SettingsPage/GasPriceSettings.js.map +1 -1
- package/dist/esm/pages/SettingsPage/LanguageSetting.js.map +1 -1
- package/dist/esm/pages/SettingsPage/ResetSettingsButton.js.map +1 -1
- package/dist/esm/pages/SettingsPage/RoutePrioritySettings.js.map +1 -1
- package/dist/esm/pages/SettingsPage/SettingsCard/SettingCardExpandable.js.map +1 -1
- package/dist/esm/pages/SettingsPage/SettingsCard/SettingsAccordian.js.map +1 -1
- package/dist/esm/pages/SettingsPage/SettingsPage.js.map +1 -1
- package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.js.map +1 -1
- package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.style.js.map +1 -1
- package/dist/esm/pages/SettingsPage/SmallBalanceFilterSettings.js.map +1 -1
- package/dist/esm/pages/SettingsPage/ThemeSettings.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/ActionRow.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/ContactSupportButton.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/ReceiptsCard.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/SentToWalletRow.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/StepActionRow.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/StepActionsList.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/TransactionDetailsPage.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/TransactionDetailsSkeleton.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/TransferIdCard.js.map +1 -1
- package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.js.map +1 -1
- package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.js.map +1 -1
- package/dist/esm/pages/TransactionPage/RouteTracker.js.map +1 -1
- package/dist/esm/pages/TransactionPage/StartTransactionButton.js.map +1 -1
- package/dist/esm/pages/TransactionPage/StatusBottomSheet.js.map +1 -1
- package/dist/esm/pages/TransactionPage/StatusBottomSheet.style.js.map +1 -1
- package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js.map +1 -1
- package/dist/esm/pages/TransactionPage/TransactionPage.js.map +1 -1
- package/dist/esm/pages/TransactionPage/utils.js.map +1 -1
- package/dist/esm/providers/I18nProvider/I18nProvider.js.map +1 -1
- package/dist/esm/providers/I18nProvider/i18n.js.map +1 -1
- package/dist/esm/providers/QueryClientProvider.js.map +1 -1
- package/dist/esm/providers/SDKClientProvider.js.map +1 -1
- package/dist/esm/providers/ThemeProvider/ThemeProvider.js.map +1 -1
- package/dist/esm/providers/WalletProvider/WalletProvider.js.map +1 -1
- package/dist/esm/providers/WalletProvider/useExternalWalletProvider.js.map +1 -1
- package/dist/esm/providers/WidgetProvider/WidgetProvider.js.map +1 -1
- package/dist/esm/stores/StoreProvider.js.map +1 -1
- package/dist/esm/stores/bookmarks/BookmarkStore.js.map +1 -1
- package/dist/esm/stores/bookmarks/createBookmarkStore.js.map +1 -1
- package/dist/esm/stores/bookmarks/useBookmarkActions.js.map +1 -1
- package/dist/esm/stores/bookmarks/useBookmarks.js.map +1 -1
- package/dist/esm/stores/chains/ChainOrderStore.js.map +1 -1
- package/dist/esm/stores/chains/createChainOrderStore.js.map +1 -1
- package/dist/esm/stores/chains/useChainOrder.js.map +1 -1
- package/dist/esm/stores/form/FormStore.js.map +1 -1
- package/dist/esm/stores/form/FormUpdater.js.map +1 -1
- package/dist/esm/stores/form/URLSearchParamsBuilder.js.map +1 -1
- package/dist/esm/stores/form/createFormStore.js.map +1 -1
- package/dist/esm/stores/form/getDefaultValuesFromQueryString.js.map +1 -1
- package/dist/esm/stores/form/useFieldActions.js.map +1 -1
- package/dist/esm/stores/form/useFieldValues.js.map +1 -1
- package/dist/esm/stores/form/useFormRef.js.map +1 -1
- package/dist/esm/stores/form/useFormStore.js.map +1 -1
- package/dist/esm/stores/form/useTouchedFields.js.map +1 -1
- package/dist/esm/stores/header/useHeaderStore.js.map +1 -1
- package/dist/esm/stores/inputMode/useInputModeStore.js.map +1 -1
- package/dist/esm/stores/pinnedTokens/PinnedTokensStore.js.map +1 -1
- package/dist/esm/stores/pinnedTokens/createPinnedTokensStore.js.map +1 -1
- package/dist/esm/stores/routes/RouteExecutionStore.js.map +1 -1
- package/dist/esm/stores/routes/createRouteExecutionStore.js.map +1 -1
- package/dist/esm/stores/routes/useIntermediateRoutesStore.js.map +1 -1
- package/dist/esm/stores/routes/useRouteExecutionIndicator.js.map +1 -1
- package/dist/esm/stores/routes/useSetExecutableRoute.js.map +1 -1
- package/dist/esm/stores/routes/utils.js.map +1 -1
- package/dist/esm/stores/settings/SettingsStore.js.map +1 -1
- package/dist/esm/stores/settings/createSettingsStore.js.map +1 -1
- package/dist/esm/stores/settings/useSettings.js.map +1 -1
- package/dist/esm/stores/settings/useSettingsActions.js.map +1 -1
- package/dist/esm/stores/settings/useSplitSubvariantStore.js.map +1 -1
- package/dist/esm/themes/createTheme.js.map +1 -1
- package/dist/esm/themes/utils.js.map +1 -1
- package/dist/esm/types/events.js.map +1 -1
- package/dist/esm/types/widget.js.map +1 -1
- package/dist/esm/utils/compactNumberFormatter.js.map +1 -1
- package/dist/esm/utils/converters.js.map +1 -1
- package/dist/esm/utils/currencyExtendedFormatter.js.map +1 -1
- package/dist/esm/utils/deepEqual.js.map +1 -1
- package/dist/esm/utils/deepMerge.js.map +1 -1
- package/dist/esm/utils/fees.js.map +1 -1
- package/dist/esm/utils/format.js.map +1 -1
- package/dist/esm/utils/getActionMessage.js.map +1 -1
- package/dist/esm/utils/getErrorMessage.js.map +1 -1
- package/dist/esm/utils/getPriceImpact.js.map +1 -1
- package/dist/esm/utils/input.js.map +1 -1
- package/dist/esm/utils/item.js.map +1 -1
- package/dist/esm/utils/percentFormatter.js.map +1 -1
- package/dist/esm/utils/prepareActions.js.map +1 -1
- package/dist/esm/utils/timer.js.map +1 -1
- package/dist/esm/utils/token.js.map +1 -1
- package/dist/esm/utils/tokenList.js.map +1 -1
- package/dist/esm/utils/variant.js.map +1 -1
- package/dist/esm/utils/widgetSize.js.map +1 -1
- package/package.json +11 -11
- package/src/config/version.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SmallBalanceFilterSettings.js","names":["Switch"],"sources":["../../../../src/pages/SettingsPage/SmallBalanceFilterSettings.tsx"],"sourcesContent":["import AttachMoney from '@mui/icons-material/AttachMoney'\nimport { Box } from '@mui/material'\nimport {\n type ChangeEvent,\n type ChangeEventHandler,\n type FocusEventHandler,\n useEffect,\n useRef,\n useState,\n} from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Switch } from '../../components/Switch.js'\nimport { useSettings } from '../../stores/settings/useSettings.js'\nimport { useSettingsActions } from '../../stores/settings/useSettingsActions.js'\nimport { formatInputAmount, usdDecimals } from '../../utils/format.js'\nimport {\n SettingCardExpandable,\n type SettingCardExpandableRef,\n} from './SettingsCard/SettingCardExpandable.js'\nimport {\n SettingsCustomInput,\n SettingsFieldSet,\n} from './SlippageSettings/SlippageSettings.style.js'\n\nconst defaultThreshold = '0.01'\n\nexport const SmallBalanceFilterSettings: React.FC = () => {\n const { t } = useTranslation()\n const { smallBalanceThreshold } = useSettings(['smallBalanceThreshold'])\n const { setValue } = useSettingsActions()\n const [inputValue, setInputValue] = useState(\n smallBalanceThreshold ?? defaultThreshold\n )\n const buttonRef = useRef<SettingCardExpandableRef>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const formatAndSetThreshold = (inputValue: string, returnInitial = false) => {\n const value = inputValue.replace('$', '')\n const formattedValue = formatInputAmount(value, usdDecimals, returnInitial)\n if (returnInitial) {\n setInputValue(formattedValue)\n } else {\n const formattedOrDefault = formattedValue || defaultThreshold\n setInputValue(formattedOrDefault)\n setValue('smallBalanceThreshold', formattedOrDefault)\n }\n }\n\n const handleInputUpdate: ChangeEventHandler<HTMLInputElement> = (event) => {\n formatAndSetThreshold(event.target.value, true)\n }\n\n const handleInputBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n formatAndSetThreshold(event.target.value, false)\n }\n\n const handleHideSmallBalancesChange = (\n event: ChangeEvent<HTMLInputElement>\n ) => {\n setValue(\n 'smallBalanceThreshold',\n event.target.checked ? defaultThreshold : undefined\n )\n if (buttonRef.current) {\n buttonRef.current?.toggleExpanded(event.target.checked)\n }\n }\n\n const handleExpanded = () => {\n if (inputRef.current) {\n inputRef.current.focus()\n }\n }\n\n useEffect(() => {\n setInputValue(smallBalanceThreshold ?? defaultThreshold)\n }, [smallBalanceThreshold])\n\n return (\n <SettingCardExpandable\n ref={buttonRef}\n value={\n <Switch\n checked={!!smallBalanceThreshold}\n onChange={handleHideSmallBalancesChange}\n aria-label={t('settings.hideSmallBalances')}\n />\n }\n icon={<AttachMoney />}\n title={t('settings.hideSmallBalances')}\n disabled={!smallBalanceThreshold}\n keepValueVisible\n onEntered={handleExpanded}\n >\n <Box\n sx={{\n mt: 1.5,\n }}\n >\n <SettingsFieldSet>\n <SettingsCustomInput\n inputRef={inputRef}\n selected\n inputProps={{\n inputMode: 'decimal',\n }}\n onChange={handleInputUpdate}\n onBlur={handleInputBlur}\n value={`$${inputValue}`}\n autoComplete=\"off\"\n />\n </SettingsFieldSet>\n </Box>\n </SettingCardExpandable>\n )\n}\n"],"mappings":";;;;;;;;;;;;AAwBA,MAAM,mBAAmB;AAEzB,MAAa,mCAA6C;CACxD,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,EAAE,0BAA0B,YAAY,CAAC,wBAAwB,CAAC;CACxE,MAAM,EAAE,aAAa,oBAAoB;CACzC,MAAM,CAAC,YAAY,iBAAiB,SAClC,yBAAyB,iBAC1B;CACD,MAAM,YAAY,OAAiC,KAAK;CACxD,MAAM,WAAW,OAAyB,KAAK;CAE/C,MAAM,yBAAyB,YAAoB,gBAAgB,UAAU;EAE3E,MAAM,iBAAiB,kBADT,WAAW,QAAQ,KAAK,GACQ,EAAA,GAAe,cAAc;
|
|
1
|
+
{"version":3,"file":"SmallBalanceFilterSettings.js","names":["Switch"],"sources":["../../../../src/pages/SettingsPage/SmallBalanceFilterSettings.tsx"],"sourcesContent":["import AttachMoney from '@mui/icons-material/AttachMoney'\nimport { Box } from '@mui/material'\nimport {\n type ChangeEvent,\n type ChangeEventHandler,\n type FocusEventHandler,\n useEffect,\n useRef,\n useState,\n} from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Switch } from '../../components/Switch.js'\nimport { useSettings } from '../../stores/settings/useSettings.js'\nimport { useSettingsActions } from '../../stores/settings/useSettingsActions.js'\nimport { formatInputAmount, usdDecimals } from '../../utils/format.js'\nimport {\n SettingCardExpandable,\n type SettingCardExpandableRef,\n} from './SettingsCard/SettingCardExpandable.js'\nimport {\n SettingsCustomInput,\n SettingsFieldSet,\n} from './SlippageSettings/SlippageSettings.style.js'\n\nconst defaultThreshold = '0.01'\n\nexport const SmallBalanceFilterSettings: React.FC = () => {\n const { t } = useTranslation()\n const { smallBalanceThreshold } = useSettings(['smallBalanceThreshold'])\n const { setValue } = useSettingsActions()\n const [inputValue, setInputValue] = useState(\n smallBalanceThreshold ?? defaultThreshold\n )\n const buttonRef = useRef<SettingCardExpandableRef>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const formatAndSetThreshold = (inputValue: string, returnInitial = false) => {\n const value = inputValue.replace('$', '')\n const formattedValue = formatInputAmount(value, usdDecimals, returnInitial)\n if (returnInitial) {\n setInputValue(formattedValue)\n } else {\n const formattedOrDefault = formattedValue || defaultThreshold\n setInputValue(formattedOrDefault)\n setValue('smallBalanceThreshold', formattedOrDefault)\n }\n }\n\n const handleInputUpdate: ChangeEventHandler<HTMLInputElement> = (event) => {\n formatAndSetThreshold(event.target.value, true)\n }\n\n const handleInputBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n formatAndSetThreshold(event.target.value, false)\n }\n\n const handleHideSmallBalancesChange = (\n event: ChangeEvent<HTMLInputElement>\n ) => {\n setValue(\n 'smallBalanceThreshold',\n event.target.checked ? defaultThreshold : undefined\n )\n if (buttonRef.current) {\n buttonRef.current?.toggleExpanded(event.target.checked)\n }\n }\n\n const handleExpanded = () => {\n if (inputRef.current) {\n inputRef.current.focus()\n }\n }\n\n useEffect(() => {\n setInputValue(smallBalanceThreshold ?? defaultThreshold)\n }, [smallBalanceThreshold])\n\n return (\n <SettingCardExpandable\n ref={buttonRef}\n value={\n <Switch\n checked={!!smallBalanceThreshold}\n onChange={handleHideSmallBalancesChange}\n aria-label={t('settings.hideSmallBalances')}\n />\n }\n icon={<AttachMoney />}\n title={t('settings.hideSmallBalances')}\n disabled={!smallBalanceThreshold}\n keepValueVisible\n onEntered={handleExpanded}\n >\n <Box\n sx={{\n mt: 1.5,\n }}\n >\n <SettingsFieldSet>\n <SettingsCustomInput\n inputRef={inputRef}\n selected\n inputProps={{\n inputMode: 'decimal',\n }}\n onChange={handleInputUpdate}\n onBlur={handleInputBlur}\n value={`$${inputValue}`}\n autoComplete=\"off\"\n />\n </SettingsFieldSet>\n </Box>\n </SettingCardExpandable>\n )\n}\n"],"mappings":";;;;;;;;;;;;AAwBA,MAAM,mBAAmB;AAEzB,MAAa,mCAA6C;CACxD,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,EAAE,0BAA0B,YAAY,CAAC,wBAAwB,CAAC;CACxE,MAAM,EAAE,aAAa,oBAAoB;CACzC,MAAM,CAAC,YAAY,iBAAiB,SAClC,yBAAyB,iBAC1B;CACD,MAAM,YAAY,OAAiC,KAAK;CACxD,MAAM,WAAW,OAAyB,KAAK;CAE/C,MAAM,yBAAyB,YAAoB,gBAAgB,UAAU;EAE3E,MAAM,iBAAiB,kBADT,WAAW,QAAQ,KAAK,GACQ,EAAA,GAAe,cAAc;EAC3E,IAAI,eACF,cAAc,eAAe;OACxB;GACL,MAAM,qBAAqB,kBAAkB;GAC7C,cAAc,mBAAmB;GACjC,SAAS,yBAAyB,mBAAmB;;;CAIzD,MAAM,qBAA2D,UAAU;EACzE,sBAAsB,MAAM,OAAO,OAAO,KAAK;;CAGjD,MAAM,mBAAwD,UAAU;EACtE,sBAAsB,MAAM,OAAO,OAAO,MAAM;;CAGlD,MAAM,iCACJ,UACG;EACH,SACE,yBACA,MAAM,OAAO,UAAU,mBAAmB,KAAA,EAC3C;EACD,IAAI,UAAU,SACZ,UAAU,SAAS,eAAe,MAAM,OAAO,QAAQ;;CAI3D,MAAM,uBAAuB;EAC3B,IAAI,SAAS,SACX,SAAS,QAAQ,OAAO;;CAI5B,gBAAgB;EACd,cAAc,yBAAyB,iBAAiB;IACvD,CAAC,sBAAsB,CAAC;CAE3B,OACE,oBAAC,uBAAD;EACE,KAAK;EACL,OACE,oBAACA,UAAD;GACE,SAAS,CAAC,CAAC;GACX,UAAU;GACV,cAAY,EAAE,6BAA6B;GAC3C,CAAA;EAEJ,MAAM,oBAAC,aAAD,EAAe,CAAA;EACrB,OAAO,EAAE,6BAA6B;EACtC,UAAU,CAAC;EACX,kBAAA;EACA,WAAW;YAEX,oBAAC,KAAD;GACE,IAAI,EACF,IAAI,KACL;aAED,oBAAC,kBAAD,EAAA,UACE,oBAAC,qBAAD;IACY;IACV,UAAA;IACA,YAAY,EACV,WAAW,WACZ;IACD,UAAU;IACV,QAAQ;IACR,OAAO,IAAI;IACX,cAAa;IACb,CAAA,EACe,CAAA;GACf,CAAA;EACgB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeSettings.js","names":["Tab"],"sources":["../../../../src/pages/SettingsPage/ThemeSettings.tsx"],"sourcesContent":["import BrightnessAuto from '@mui/icons-material/BrightnessAuto'\nimport LightMode from '@mui/icons-material/LightMode'\nimport Nightlight from '@mui/icons-material/Nightlight'\nimport { Tooltip, useColorScheme } from '@mui/material'\nimport { useTranslation } from 'react-i18next'\nimport { CardValue } from '../../components/Card/CardButton.style.js'\nimport { CardTabs, Tab } from '../../components/Tabs/Tabs.style.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport type { Appearance } from '../../types/widget.js'\nimport { HiddenUI } from '../../types/widget.js'\nimport { SettingCardExpandable } from './SettingsCard/SettingCardExpandable.js'\n\nconst themeIcons = {\n light: LightMode,\n dark: Nightlight,\n system: BrightnessAuto,\n}\n\ninterface ThemeTabProps {\n title: string\n value: Appearance\n Icon: React.ReactElement\n}\n\n// If the Tab is not the direct child of the Tabs component you can loose the switching\n// The component passes the props to the Tab component so switching isn't lost\nconst ThemeTab: React.FC<ThemeTabProps> = ({\n title,\n value,\n Icon,\n ...props\n}) => (\n <Tooltip title={title}>\n <Tab icon={Icon} value={value} {...props} disableRipple />\n </Tooltip>\n)\n\nexport const ThemeSettings: React.FC = () => {\n const { t } = useTranslation()\n const { mode, setMode } = useColorScheme()\n const { hiddenUI } = useWidgetConfig()\n\n if (hiddenUI?.includes(HiddenUI.Appearance)) {\n return null\n }\n\n const appearance = mode ?? 'system'\n\n const ThemeIcon = themeIcons[appearance]\n\n const handleThemeChange = (\n _: React.SyntheticEvent,\n appearance: Appearance\n ) => {\n setMode(appearance)\n }\n\n return (\n <SettingCardExpandable\n value={<CardValue>{t(`button.${appearance}`)} </CardValue>}\n icon={<ThemeIcon />}\n title={t('settings.appearance')}\n >\n <CardTabs\n value={appearance}\n aria-label=\"tabs\"\n indicatorColor=\"primary\"\n onChange={handleThemeChange}\n sx={{ mt: 1.5 }}\n >\n {Object.entries(themeIcons).map(([theme, Icon]) => {\n const supportedThemeOption = theme as Appearance\n\n return (\n <ThemeTab\n key={supportedThemeOption}\n title={t(`button.${supportedThemeOption}`)}\n value={supportedThemeOption}\n Icon={<Icon />}\n />\n )\n })}\n </CardTabs>\n </SettingCardExpandable>\n )\n}\n"],"mappings":";;;;;;;;;;;;AAYA,MAAM,aAAa;CACjB,OAAO;CACP,MAAM;CACN,QAAQ;CACT;AAUD,MAAM,YAAqC,EACzC,OACA,OACA,MACA,GAAG,YAEH,oBAAC,SAAD;CAAgB;WACd,oBAACA,OAAD;EAAK,MAAM;EAAa;EAAO,GAAI;EAAO,eAAA;EAAgB,CAAA;CAClD,CAAA;AAGZ,MAAa,sBAAgC;CAC3C,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,EAAE,MAAM,YAAY,gBAAgB;CAC1C,MAAM,EAAE,aAAa,iBAAiB;
|
|
1
|
+
{"version":3,"file":"ThemeSettings.js","names":["Tab"],"sources":["../../../../src/pages/SettingsPage/ThemeSettings.tsx"],"sourcesContent":["import BrightnessAuto from '@mui/icons-material/BrightnessAuto'\nimport LightMode from '@mui/icons-material/LightMode'\nimport Nightlight from '@mui/icons-material/Nightlight'\nimport { Tooltip, useColorScheme } from '@mui/material'\nimport { useTranslation } from 'react-i18next'\nimport { CardValue } from '../../components/Card/CardButton.style.js'\nimport { CardTabs, Tab } from '../../components/Tabs/Tabs.style.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport type { Appearance } from '../../types/widget.js'\nimport { HiddenUI } from '../../types/widget.js'\nimport { SettingCardExpandable } from './SettingsCard/SettingCardExpandable.js'\n\nconst themeIcons = {\n light: LightMode,\n dark: Nightlight,\n system: BrightnessAuto,\n}\n\ninterface ThemeTabProps {\n title: string\n value: Appearance\n Icon: React.ReactElement\n}\n\n// If the Tab is not the direct child of the Tabs component you can loose the switching\n// The component passes the props to the Tab component so switching isn't lost\nconst ThemeTab: React.FC<ThemeTabProps> = ({\n title,\n value,\n Icon,\n ...props\n}) => (\n <Tooltip title={title}>\n <Tab icon={Icon} value={value} {...props} disableRipple />\n </Tooltip>\n)\n\nexport const ThemeSettings: React.FC = () => {\n const { t } = useTranslation()\n const { mode, setMode } = useColorScheme()\n const { hiddenUI } = useWidgetConfig()\n\n if (hiddenUI?.includes(HiddenUI.Appearance)) {\n return null\n }\n\n const appearance = mode ?? 'system'\n\n const ThemeIcon = themeIcons[appearance]\n\n const handleThemeChange = (\n _: React.SyntheticEvent,\n appearance: Appearance\n ) => {\n setMode(appearance)\n }\n\n return (\n <SettingCardExpandable\n value={<CardValue>{t(`button.${appearance}`)} </CardValue>}\n icon={<ThemeIcon />}\n title={t('settings.appearance')}\n >\n <CardTabs\n value={appearance}\n aria-label=\"tabs\"\n indicatorColor=\"primary\"\n onChange={handleThemeChange}\n sx={{ mt: 1.5 }}\n >\n {Object.entries(themeIcons).map(([theme, Icon]) => {\n const supportedThemeOption = theme as Appearance\n\n return (\n <ThemeTab\n key={supportedThemeOption}\n title={t(`button.${supportedThemeOption}`)}\n value={supportedThemeOption}\n Icon={<Icon />}\n />\n )\n })}\n </CardTabs>\n </SettingCardExpandable>\n )\n}\n"],"mappings":";;;;;;;;;;;;AAYA,MAAM,aAAa;CACjB,OAAO;CACP,MAAM;CACN,QAAQ;CACT;AAUD,MAAM,YAAqC,EACzC,OACA,OACA,MACA,GAAG,YAEH,oBAAC,SAAD;CAAgB;WACd,oBAACA,OAAD;EAAK,MAAM;EAAa;EAAO,GAAI;EAAO,eAAA;EAAgB,CAAA;CAClD,CAAA;AAGZ,MAAa,sBAAgC;CAC3C,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,EAAE,MAAM,YAAY,gBAAgB;CAC1C,MAAM,EAAE,aAAa,iBAAiB;CAEtC,IAAI,UAAU,SAAA,aAA6B,EACzC,OAAO;CAGT,MAAM,aAAa,QAAQ;CAE3B,MAAM,YAAY,WAAW;CAE7B,MAAM,qBACJ,GACA,eACG;EACH,QAAQ,WAAW;;CAGrB,OACE,oBAAC,uBAAD;EACE,OAAO,qBAAC,WAAD,EAAA,UAAA,CAAY,EAAE,UAAU,aAAa,EAAC,IAAa,EAAA,CAAA;EAC1D,MAAM,oBAAC,WAAD,EAAa,CAAA;EACnB,OAAO,EAAE,sBAAsB;YAE/B,oBAAC,UAAD;GACE,OAAO;GACP,cAAW;GACX,gBAAe;GACf,UAAU;GACV,IAAI,EAAE,IAAI,KAAK;aAEd,OAAO,QAAQ,WAAW,CAAC,KAAK,CAAC,OAAO,UAAU;IACjD,MAAM,uBAAuB;IAE7B,OACE,oBAAC,UAAD;KAEE,OAAO,EAAE,UAAU,uBAAuB;KAC1C,OAAO;KACP,MAAM,oBAAC,MAAD,EAAQ,CAAA;KACd,EAJK,qBAIL;KAEJ;GACO,CAAA;EACW,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionRow.js","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/ActionRow.tsx"],"sourcesContent":["import type { FC, ReactNode } from 'react'\nimport { ActionRowContainer, ActionRowLabel } from './ActionRow.style.js'\n\ninterface ActionRowProps {\n message: string\n startAdornment: ReactNode\n endAdornment?: ReactNode\n}\n\nexport const ActionRow: FC<ActionRowProps> = ({\n message,\n startAdornment,\n endAdornment,\n}) => {\n return (\n <ActionRowContainer>\n {startAdornment}\n <ActionRowLabel>{message}</ActionRowLabel>\n {endAdornment}\n </ActionRowContainer>\n )\n}\n"],"mappings":";;;AASA,MAAa,aAAiC,EAC5C,SACA,gBACA,mBACI;
|
|
1
|
+
{"version":3,"file":"ActionRow.js","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/ActionRow.tsx"],"sourcesContent":["import type { FC, ReactNode } from 'react'\nimport { ActionRowContainer, ActionRowLabel } from './ActionRow.style.js'\n\ninterface ActionRowProps {\n message: string\n startAdornment: ReactNode\n endAdornment?: ReactNode\n}\n\nexport const ActionRow: FC<ActionRowProps> = ({\n message,\n startAdornment,\n endAdornment,\n}) => {\n return (\n <ActionRowContainer>\n {startAdornment}\n <ActionRowLabel>{message}</ActionRowLabel>\n {endAdornment}\n </ActionRowContainer>\n )\n}\n"],"mappings":";;;AASA,MAAa,aAAiC,EAC5C,SACA,gBACA,mBACI;CACJ,OACE,qBAAC,oBAAD,EAAA,UAAA;EACG;EACD,oBAAC,gBAAD,EAAA,UAAiB,SAAyB,CAAA;EACzC;EACkB,EAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContactSupportButton.js","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/ContactSupportButton.tsx"],"sourcesContent":["import type { JSX } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useContactSupport } from '../../hooks/useContactSupport.js'\nimport { ButtonChip } from './ContactSupportButton.style.js'\n\ninterface ContactSupportButtonProps {\n supportId?: string\n}\n\nexport const ContactSupportButton = ({\n supportId,\n}: ContactSupportButtonProps): JSX.Element => {\n const { t } = useTranslation()\n const handleContactSupport = useContactSupport(supportId)\n\n return (\n <ButtonChip onClick={handleContactSupport}>\n {t('button.contactSupport')}\n </ButtonChip>\n )\n}\n"],"mappings":";;;;;AASA,MAAa,wBAAwB,EACnC,gBAC4C;CAC5C,MAAM,EAAE,MAAM,gBAAgB;
|
|
1
|
+
{"version":3,"file":"ContactSupportButton.js","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/ContactSupportButton.tsx"],"sourcesContent":["import type { JSX } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useContactSupport } from '../../hooks/useContactSupport.js'\nimport { ButtonChip } from './ContactSupportButton.style.js'\n\ninterface ContactSupportButtonProps {\n supportId?: string\n}\n\nexport const ContactSupportButton = ({\n supportId,\n}: ContactSupportButtonProps): JSX.Element => {\n const { t } = useTranslation()\n const handleContactSupport = useContactSupport(supportId)\n\n return (\n <ButtonChip onClick={handleContactSupport}>\n {t('button.contactSupport')}\n </ButtonChip>\n )\n}\n"],"mappings":";;;;;AASA,MAAa,wBAAwB,EACnC,gBAC4C;CAC5C,MAAM,EAAE,MAAM,gBAAgB;CAG9B,OACE,oBAAC,YAAD;EAAY,SAHe,kBAAkB,UAGJ;YACtC,EAAE,wBAAwB;EAChB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReceiptsCard.js","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/ReceiptsCard.tsx"],"sourcesContent":["import type { RouteExtended } from '@lifi/sdk'\nimport type { JSX } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Card } from '../../components/Card/Card.js'\nimport { CardTitle } from '../../components/Card/CardTitle.js'\nimport { StepActionsList } from './StepActionsList.js'\n\ninterface ReceiptsCardProps {\n route: RouteExtended\n}\n\nexport const ReceiptsCard = ({ route }: ReceiptsCardProps): JSX.Element => {\n const { t } = useTranslation()\n const toAddress = route.toAddress\n\n return (\n <Card type=\"default\" indented>\n <CardTitle sx={{ padding: 0, mb: 2 }}>{t('main.receipts')}</CardTitle>\n <StepActionsList route={route} toAddress={toAddress} />\n </Card>\n )\n}\n"],"mappings":";;;;;;AAWA,MAAa,gBAAgB,EAAE,YAA4C;CACzE,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,YAAY,MAAM;
|
|
1
|
+
{"version":3,"file":"ReceiptsCard.js","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/ReceiptsCard.tsx"],"sourcesContent":["import type { RouteExtended } from '@lifi/sdk'\nimport type { JSX } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Card } from '../../components/Card/Card.js'\nimport { CardTitle } from '../../components/Card/CardTitle.js'\nimport { StepActionsList } from './StepActionsList.js'\n\ninterface ReceiptsCardProps {\n route: RouteExtended\n}\n\nexport const ReceiptsCard = ({ route }: ReceiptsCardProps): JSX.Element => {\n const { t } = useTranslation()\n const toAddress = route.toAddress\n\n return (\n <Card type=\"default\" indented>\n <CardTitle sx={{ padding: 0, mb: 2 }}>{t('main.receipts')}</CardTitle>\n <StepActionsList route={route} toAddress={toAddress} />\n </Card>\n )\n}\n"],"mappings":";;;;;;AAWA,MAAa,gBAAgB,EAAE,YAA4C;CACzE,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,YAAY,MAAM;CAExB,OACE,qBAAC,MAAD;EAAM,MAAK;EAAU,UAAA;YAArB,CACE,oBAAC,WAAD;GAAW,IAAI;IAAE,SAAS;IAAG,IAAI;IAAG;aAAG,EAAE,gBAAgB;GAAa,CAAA,EACtE,oBAAC,iBAAD;GAAwB;GAAkB;GAAa,CAAA,CAClD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SentToWalletRow.js","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/SentToWalletRow.tsx"],"sourcesContent":["import ContentCopyRounded from '@mui/icons-material/ContentCopyRounded'\nimport OpenInNew from '@mui/icons-material/OpenInNew'\nimport Wallet from '@mui/icons-material/Wallet'\nimport { Box, IconButton } from '@mui/material'\nimport type { MouseEvent } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useExplorer } from '../../hooks/useExplorer.js'\nimport { shortenAddress } from '../../utils/wallet.js'\nimport { ActionRow } from './ActionRow.js'\nimport { ActionIconCircle } from './ActionRow.style.js'\nimport { ExternalLink } from './ReceiptsCard.style.js'\n\ninterface SentToWalletRowProps {\n toAddress: string\n toChainId: number\n}\n\nexport const SentToWalletRow: React.FC<SentToWalletRowProps> = ({\n toAddress,\n toChainId,\n}) => {\n const { t } = useTranslation()\n const { getAddressLink } = useExplorer()\n const addressLink = getAddressLink(toAddress, toChainId)\n\n const handleCopy = (e: MouseEvent) => {\n e.stopPropagation()\n navigator.clipboard.writeText(toAddress)\n }\n\n return (\n <ActionRow\n startAdornment={\n <ActionIconCircle>\n <Wallet color=\"success\" sx={{ fontSize: 16 }} />\n </ActionIconCircle>\n }\n message={`${t('main.sentToWallet')}: ${shortenAddress(toAddress)}`}\n endAdornment={\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <IconButton size=\"small\" onClick={handleCopy} sx={{ p: 0.5 }}>\n <ContentCopyRounded sx={{ fontSize: 16 }} />\n </IconButton>\n {addressLink ? (\n <ExternalLink\n href={addressLink}\n target=\"_blank\"\n rel=\"nofollow noreferrer\"\n >\n <OpenInNew sx={{ fontSize: 16 }} />\n </ExternalLink>\n ) : undefined}\n </Box>\n }\n />\n )\n}\n"],"mappings":";;;;;;;;;;;;AAiBA,MAAa,mBAAmD,EAC9D,WACA,gBACI;CACJ,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,EAAE,mBAAmB,aAAa;CACxC,MAAM,cAAc,eAAe,WAAW,UAAU;CAExD,MAAM,cAAc,MAAkB;
|
|
1
|
+
{"version":3,"file":"SentToWalletRow.js","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/SentToWalletRow.tsx"],"sourcesContent":["import ContentCopyRounded from '@mui/icons-material/ContentCopyRounded'\nimport OpenInNew from '@mui/icons-material/OpenInNew'\nimport Wallet from '@mui/icons-material/Wallet'\nimport { Box, IconButton } from '@mui/material'\nimport type { MouseEvent } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useExplorer } from '../../hooks/useExplorer.js'\nimport { shortenAddress } from '../../utils/wallet.js'\nimport { ActionRow } from './ActionRow.js'\nimport { ActionIconCircle } from './ActionRow.style.js'\nimport { ExternalLink } from './ReceiptsCard.style.js'\n\ninterface SentToWalletRowProps {\n toAddress: string\n toChainId: number\n}\n\nexport const SentToWalletRow: React.FC<SentToWalletRowProps> = ({\n toAddress,\n toChainId,\n}) => {\n const { t } = useTranslation()\n const { getAddressLink } = useExplorer()\n const addressLink = getAddressLink(toAddress, toChainId)\n\n const handleCopy = (e: MouseEvent) => {\n e.stopPropagation()\n navigator.clipboard.writeText(toAddress)\n }\n\n return (\n <ActionRow\n startAdornment={\n <ActionIconCircle>\n <Wallet color=\"success\" sx={{ fontSize: 16 }} />\n </ActionIconCircle>\n }\n message={`${t('main.sentToWallet')}: ${shortenAddress(toAddress)}`}\n endAdornment={\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <IconButton size=\"small\" onClick={handleCopy} sx={{ p: 0.5 }}>\n <ContentCopyRounded sx={{ fontSize: 16 }} />\n </IconButton>\n {addressLink ? (\n <ExternalLink\n href={addressLink}\n target=\"_blank\"\n rel=\"nofollow noreferrer\"\n >\n <OpenInNew sx={{ fontSize: 16 }} />\n </ExternalLink>\n ) : undefined}\n </Box>\n }\n />\n )\n}\n"],"mappings":";;;;;;;;;;;;AAiBA,MAAa,mBAAmD,EAC9D,WACA,gBACI;CACJ,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,EAAE,mBAAmB,aAAa;CACxC,MAAM,cAAc,eAAe,WAAW,UAAU;CAExD,MAAM,cAAc,MAAkB;EACpC,EAAE,iBAAiB;EACnB,UAAU,UAAU,UAAU,UAAU;;CAG1C,OACE,oBAAC,WAAD;EACE,gBACE,oBAAC,kBAAD,EAAA,UACE,oBAAC,QAAD;GAAQ,OAAM;GAAU,IAAI,EAAE,UAAU,IAAI;GAAI,CAAA,EAC/B,CAAA;EAErB,SAAS,GAAG,EAAE,oBAAoB,CAAC,IAAI,eAAe,UAAU;EAChE,cACE,qBAAC,KAAD;GAAK,IAAI;IAAE,SAAS;IAAQ,YAAY;IAAU,KAAK;IAAK;aAA5D,CACE,oBAAC,YAAD;IAAY,MAAK;IAAQ,SAAS;IAAY,IAAI,EAAE,GAAG,IAAK;cAC1D,oBAAC,oBAAD,EAAoB,IAAI,EAAE,UAAU,IAAI,EAAI,CAAA;IACjC,CAAA,EACZ,cACC,oBAAC,cAAD;IACE,MAAM;IACN,QAAO;IACP,KAAI;cAEJ,oBAAC,WAAD,EAAW,IAAI,EAAE,UAAU,IAAI,EAAI,CAAA;IACtB,CAAA,GACb,KAAA,EACA;;EAER,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepActionRow.js","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/StepActionRow.tsx"],"sourcesContent":["import type { ExecutionAction, LiFiStepExtended } from '@lifi/sdk'\nimport OpenInNew from '@mui/icons-material/OpenInNew'\nimport type React from 'react'\nimport { IconCircle } from '../../components/IconCircle/IconCircle.js'\nimport { useActionMessage } from '../../hooks/useActionMessage.js'\nimport { ActionRow } from './ActionRow.js'\nimport { ExternalLink } from './ReceiptsCard.style.js'\n\nexport const StepActionRow: React.FC<{\n step: LiFiStepExtended\n action: ExecutionAction\n href: string\n defaultLabelsOnly?: boolean\n}> = ({ step, action, href, defaultLabelsOnly }) => {\n const { title } = useActionMessage(step, action, defaultLabelsOnly)\n const isFailed = action?.status === 'FAILED'\n return (\n <ActionRow\n startAdornment={\n <IconCircle status={isFailed ? 'error' : 'success'} size={24} />\n }\n message={title ?? ''}\n endAdornment={\n <ExternalLink href={href} target=\"_blank\" rel=\"nofollow noreferrer\">\n <OpenInNew sx={{ fontSize: 16 }} />\n </ExternalLink>\n }\n />\n )\n}\n"],"mappings":";;;;;;;AAQA,MAAa,iBAKP,EAAE,MAAM,QAAQ,MAAM,wBAAwB;CAClD,MAAM,EAAE,UAAU,iBAAiB,MAAM,QAAQ,kBAAkB;
|
|
1
|
+
{"version":3,"file":"StepActionRow.js","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/StepActionRow.tsx"],"sourcesContent":["import type { ExecutionAction, LiFiStepExtended } from '@lifi/sdk'\nimport OpenInNew from '@mui/icons-material/OpenInNew'\nimport type React from 'react'\nimport { IconCircle } from '../../components/IconCircle/IconCircle.js'\nimport { useActionMessage } from '../../hooks/useActionMessage.js'\nimport { ActionRow } from './ActionRow.js'\nimport { ExternalLink } from './ReceiptsCard.style.js'\n\nexport const StepActionRow: React.FC<{\n step: LiFiStepExtended\n action: ExecutionAction\n href: string\n defaultLabelsOnly?: boolean\n}> = ({ step, action, href, defaultLabelsOnly }) => {\n const { title } = useActionMessage(step, action, defaultLabelsOnly)\n const isFailed = action?.status === 'FAILED'\n return (\n <ActionRow\n startAdornment={\n <IconCircle status={isFailed ? 'error' : 'success'} size={24} />\n }\n message={title ?? ''}\n endAdornment={\n <ExternalLink href={href} target=\"_blank\" rel=\"nofollow noreferrer\">\n <OpenInNew sx={{ fontSize: 16 }} />\n </ExternalLink>\n }\n />\n )\n}\n"],"mappings":";;;;;;;AAQA,MAAa,iBAKP,EAAE,MAAM,QAAQ,MAAM,wBAAwB;CAClD,MAAM,EAAE,UAAU,iBAAiB,MAAM,QAAQ,kBAAkB;CAEnE,OACE,oBAAC,WAAD;EACE,gBACE,oBAAC,YAAD;GAAY,QAJD,QAAQ,WAAW,WAIC,UAAU;GAAW,MAAM;GAAM,CAAA;EAElE,SAAS,SAAS;EAClB,cACE,oBAAC,cAAD;GAAoB;GAAM,QAAO;GAAS,KAAI;aAC5C,oBAAC,WAAD,EAAW,IAAI,EAAE,UAAU,IAAI,EAAI,CAAA;GACtB,CAAA;EAEjB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepActionsList.js","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/StepActionsList.tsx"],"sourcesContent":["import type { RouteExtended } from '@lifi/sdk'\nimport { useExplorer } from '../../hooks/useExplorer.js'\nimport { prepareActions } from '../../utils/prepareActions.js'\nimport { TransactionList } from './ReceiptsCard.style.js'\nimport { SentToWalletRow } from './SentToWalletRow.js'\nimport { StepActionRow } from './StepActionRow.js'\n\ninterface StepActionsListProps {\n route: RouteExtended\n toAddress?: string\n}\n\nexport const StepActionsList: React.FC<StepActionsListProps> = ({\n route,\n toAddress,\n}) => {\n const { getTransactionLink } = useExplorer()\n const stepRows = route.steps\n .map((step) => {\n const rows = prepareActions(step.execution?.actions ?? [])\n .map((actionsGroup) => {\n const action = actionsGroup.at(-1)\n const href = action?.txHash\n ? getTransactionLink({\n txHash: action.txHash,\n chain: action.chainId,\n })\n : action?.txLink\n ? getTransactionLink({\n txLink: action.txLink,\n chain: action.chainId,\n })\n : undefined\n return { action, href }\n })\n .filter(({ action, href }) => {\n const doneOrFailed =\n action?.status === 'DONE' || action?.status === 'FAILED'\n return Boolean(href && doneOrFailed)\n })\n return { step, rows }\n })\n .filter(({ rows }) => rows.length > 0)\n\n if (!stepRows?.length) {\n return null\n }\n\n const lastStepIndex = stepRows.length - 1\n\n return (\n <TransactionList>\n {stepRows.map(({ step, rows }, stepIndex) => {\n const lastRowIndex = rows.length - 1\n const isLastStep = stepIndex === lastStepIndex\n return (\n <TransactionList key={step.id}>\n {rows.map(({ action, href }, rowIndex) => (\n <StepActionRow\n key={rowIndex}\n step={step}\n action={action!}\n href={href!}\n defaultLabelsOnly={!(isLastStep && rowIndex === lastRowIndex)}\n />\n ))}\n </TransactionList>\n )\n })}\n {toAddress ? (\n <SentToWalletRow toAddress={toAddress} toChainId={route.toChainId} />\n ) : null}\n </TransactionList>\n )\n}\n"],"mappings":";;;;;;;AAYA,MAAa,mBAAmD,EAC9D,OACA,gBACI;CACJ,MAAM,EAAE,uBAAuB,aAAa;CAC5C,MAAM,WAAW,MAAM,MACpB,KAAK,SAAS;
|
|
1
|
+
{"version":3,"file":"StepActionsList.js","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/StepActionsList.tsx"],"sourcesContent":["import type { RouteExtended } from '@lifi/sdk'\nimport { useExplorer } from '../../hooks/useExplorer.js'\nimport { prepareActions } from '../../utils/prepareActions.js'\nimport { TransactionList } from './ReceiptsCard.style.js'\nimport { SentToWalletRow } from './SentToWalletRow.js'\nimport { StepActionRow } from './StepActionRow.js'\n\ninterface StepActionsListProps {\n route: RouteExtended\n toAddress?: string\n}\n\nexport const StepActionsList: React.FC<StepActionsListProps> = ({\n route,\n toAddress,\n}) => {\n const { getTransactionLink } = useExplorer()\n const stepRows = route.steps\n .map((step) => {\n const rows = prepareActions(step.execution?.actions ?? [])\n .map((actionsGroup) => {\n const action = actionsGroup.at(-1)\n const href = action?.txHash\n ? getTransactionLink({\n txHash: action.txHash,\n chain: action.chainId,\n })\n : action?.txLink\n ? getTransactionLink({\n txLink: action.txLink,\n chain: action.chainId,\n })\n : undefined\n return { action, href }\n })\n .filter(({ action, href }) => {\n const doneOrFailed =\n action?.status === 'DONE' || action?.status === 'FAILED'\n return Boolean(href && doneOrFailed)\n })\n return { step, rows }\n })\n .filter(({ rows }) => rows.length > 0)\n\n if (!stepRows?.length) {\n return null\n }\n\n const lastStepIndex = stepRows.length - 1\n\n return (\n <TransactionList>\n {stepRows.map(({ step, rows }, stepIndex) => {\n const lastRowIndex = rows.length - 1\n const isLastStep = stepIndex === lastStepIndex\n return (\n <TransactionList key={step.id}>\n {rows.map(({ action, href }, rowIndex) => (\n <StepActionRow\n key={rowIndex}\n step={step}\n action={action!}\n href={href!}\n defaultLabelsOnly={!(isLastStep && rowIndex === lastRowIndex)}\n />\n ))}\n </TransactionList>\n )\n })}\n {toAddress ? (\n <SentToWalletRow toAddress={toAddress} toChainId={route.toChainId} />\n ) : null}\n </TransactionList>\n )\n}\n"],"mappings":";;;;;;;AAYA,MAAa,mBAAmD,EAC9D,OACA,gBACI;CACJ,MAAM,EAAE,uBAAuB,aAAa;CAC5C,MAAM,WAAW,MAAM,MACpB,KAAK,SAAS;EAsBb,OAAO;GAAE;GAAM,MArBF,eAAe,KAAK,WAAW,WAAW,EAAE,CAAC,CACvD,KAAK,iBAAiB;IACrB,MAAM,SAAS,aAAa,GAAG,GAAG;IAYlC,OAAO;KAAE;KAAQ,MAXJ,QAAQ,SACjB,mBAAmB;MACjB,QAAQ,OAAO;MACf,OAAO,OAAO;MACf,CAAC,GACF,QAAQ,SACN,mBAAmB;MACjB,QAAQ,OAAO;MACf,OAAO,OAAO;MACf,CAAC,GACF,KAAA;KACiB;KACvB,CACD,QAAQ,EAAE,QAAQ,WAAW;IAC5B,MAAM,eACJ,QAAQ,WAAW,UAAU,QAAQ,WAAW;IAClD,OAAO,QAAQ,QAAQ,aAAa;KAErB;GAAE;GACrB,CACD,QAAQ,EAAE,WAAW,KAAK,SAAS,EAAE;CAExC,IAAI,CAAC,UAAU,QACb,OAAO;CAGT,MAAM,gBAAgB,SAAS,SAAS;CAExC,OACE,qBAAC,iBAAD,EAAA,UAAA,CACG,SAAS,KAAK,EAAE,MAAM,QAAQ,cAAc;EAC3C,MAAM,eAAe,KAAK,SAAS;EACnC,MAAM,aAAa,cAAc;EACjC,OACE,oBAAC,iBAAD,EAAA,UACG,KAAK,KAAK,EAAE,QAAQ,QAAQ,aAC3B,oBAAC,eAAD;GAEQ;GACE;GACF;GACN,mBAAmB,EAAE,cAAc,aAAa;GAChD,EALK,SAKL,CACF,EACc,EAVI,KAAK,GAUT;GAEpB,EACD,YACC,oBAAC,iBAAD;EAA4B;EAAW,WAAW,MAAM;EAAa,CAAA,GACnE,KACY,EAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionDetailsPage.js","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/TransactionDetailsPage.tsx"],"sourcesContent":["import type { FullStatusData } from '@lifi/sdk'\nimport { useLocation, useNavigate } from '@tanstack/react-router'\nimport { useEffect, useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { ContractComponent } from '../../components/ContractComponent/ContractComponent.js'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { TransactionCard } from '../../components/TransactionCard/TransactionCard.js'\nimport { internalExplorerUrl } from '../../config/constants.js'\nimport { useExplorer } from '../../hooks/useExplorer.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useTools } from '../../hooks/useTools.js'\nimport { useTransactionDetails } from '../../hooks/useTransactionDetails.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { useRouteExecutionStore } from '../../stores/routes/RouteExecutionStore.js'\nimport { getSourceTxHash } from '../../stores/routes/utils.js'\nimport { buildRouteFromTxHistory } from '../../utils/converters.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { ReceiptsCard } from './ReceiptsCard.js'\nimport { TransactionDetailsSkeleton } from './TransactionDetailsSkeleton.js'\nimport { TransferIdCard } from './TransferIdCard.js'\n\nexport const TransactionDetailsPage: React.FC = () => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const {\n subvariant,\n subvariantOptions,\n contractSecondaryComponent,\n explorerUrls,\n } = useWidgetConfig()\n const { search }: any = useLocation()\n const { tools } = useTools()\n const { getTransactionLink } = useExplorer()\n const storedRouteExecution = useRouteExecutionStore((store) =>\n search?.routeId ? store.routes[search.routeId] : undefined\n )\n const { transaction, isLoading } = useTransactionDetails(\n !storedRouteExecution && search?.transactionHash\n )\n\n const title =\n subvariant === 'custom'\n ? t(`header.${subvariantOptions?.custom ?? 'checkout'}Details`)\n : t('header.transactionDetails')\n useHeader(title)\n\n const routeExecution = useMemo(() => {\n if (storedRouteExecution) {\n return storedRouteExecution\n }\n if (isLoading) {\n return\n }\n if (transaction) {\n const routeExecution = buildRouteFromTxHistory(\n transaction as FullStatusData,\n tools\n )\n return routeExecution\n }\n }, [isLoading, storedRouteExecution, tools, transaction])\n\n useEffect(() => {\n if (!isLoading && !routeExecution) {\n navigate({ to: navigationRoutes.home })\n }\n }, [isLoading, navigate, routeExecution])\n\n const explorerUrl = explorerUrls?.internal?.[0]\n const url = typeof explorerUrl === 'string' ? explorerUrl : explorerUrl?.url\n\n const sourceTxHash = getSourceTxHash(routeExecution?.route)\n let supportId = sourceTxHash ?? routeExecution?.route.id ?? ''\n\n const internalTxLink =\n routeExecution?.route?.steps?.at(-1)?.execution?.internalTxLink\n const externalTxLink =\n routeExecution?.route?.steps?.at(-1)?.execution?.externalTxLink\n\n const txLink =\n (url\n ? internalTxLink?.replace(internalExplorerUrl, url)\n : internalTxLink) ||\n externalTxLink ||\n getTransactionLink({ txHash: supportId })\n\n if (process.env.NODE_ENV === 'development') {\n supportId += `_${routeExecution?.route.id}`\n }\n\n const startedAt = new Date(\n routeExecution?.route.steps[0].execution?.startedAt ?? 0\n )\n\n if (isLoading && !storedRouteExecution) {\n return <TransactionDetailsSkeleton />\n }\n\n if (!routeExecution?.route) {\n return null\n }\n\n return (\n <PageContainer\n bottomGutters\n sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}\n >\n <TransactionCard route={routeExecution.route} date={startedAt} />\n {subvariant === 'custom' && contractSecondaryComponent ? (\n <ContractComponent>{contractSecondaryComponent}</ContractComponent>\n ) : null}\n <ReceiptsCard route={routeExecution.route} />\n {supportId ? (\n <TransferIdCard transferId={supportId} txLink={txLink} />\n ) : null}\n </PageContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAqBA,MAAa,+BAAyC;CACpD,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,WAAW,aAAa;CAC9B,MAAM,EACJ,YACA,mBACA,4BACA,iBACE,iBAAiB;CACrB,MAAM,EAAE,WAAgB,aAAa;CACrC,MAAM,EAAE,UAAU,UAAU;CAC5B,MAAM,EAAE,uBAAuB,aAAa;CAC5C,MAAM,uBAAuB,wBAAwB,UACnD,QAAQ,UAAU,MAAM,OAAO,OAAO,WAAW,KAAA,EAClD;CACD,MAAM,EAAE,aAAa,cAAc,sBACjC,CAAC,wBAAwB,QAAQ,gBAClC;
|
|
1
|
+
{"version":3,"file":"TransactionDetailsPage.js","names":[],"sources":["../../../../src/pages/TransactionDetailsPage/TransactionDetailsPage.tsx"],"sourcesContent":["import type { FullStatusData } from '@lifi/sdk'\nimport { useLocation, useNavigate } from '@tanstack/react-router'\nimport { useEffect, useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { ContractComponent } from '../../components/ContractComponent/ContractComponent.js'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { TransactionCard } from '../../components/TransactionCard/TransactionCard.js'\nimport { internalExplorerUrl } from '../../config/constants.js'\nimport { useExplorer } from '../../hooks/useExplorer.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useTools } from '../../hooks/useTools.js'\nimport { useTransactionDetails } from '../../hooks/useTransactionDetails.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { useRouteExecutionStore } from '../../stores/routes/RouteExecutionStore.js'\nimport { getSourceTxHash } from '../../stores/routes/utils.js'\nimport { buildRouteFromTxHistory } from '../../utils/converters.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { ReceiptsCard } from './ReceiptsCard.js'\nimport { TransactionDetailsSkeleton } from './TransactionDetailsSkeleton.js'\nimport { TransferIdCard } from './TransferIdCard.js'\n\nexport const TransactionDetailsPage: React.FC = () => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const {\n subvariant,\n subvariantOptions,\n contractSecondaryComponent,\n explorerUrls,\n } = useWidgetConfig()\n const { search }: any = useLocation()\n const { tools } = useTools()\n const { getTransactionLink } = useExplorer()\n const storedRouteExecution = useRouteExecutionStore((store) =>\n search?.routeId ? store.routes[search.routeId] : undefined\n )\n const { transaction, isLoading } = useTransactionDetails(\n !storedRouteExecution && search?.transactionHash\n )\n\n const title =\n subvariant === 'custom'\n ? t(`header.${subvariantOptions?.custom ?? 'checkout'}Details`)\n : t('header.transactionDetails')\n useHeader(title)\n\n const routeExecution = useMemo(() => {\n if (storedRouteExecution) {\n return storedRouteExecution\n }\n if (isLoading) {\n return\n }\n if (transaction) {\n const routeExecution = buildRouteFromTxHistory(\n transaction as FullStatusData,\n tools\n )\n return routeExecution\n }\n }, [isLoading, storedRouteExecution, tools, transaction])\n\n useEffect(() => {\n if (!isLoading && !routeExecution) {\n navigate({ to: navigationRoutes.home })\n }\n }, [isLoading, navigate, routeExecution])\n\n const explorerUrl = explorerUrls?.internal?.[0]\n const url = typeof explorerUrl === 'string' ? explorerUrl : explorerUrl?.url\n\n const sourceTxHash = getSourceTxHash(routeExecution?.route)\n let supportId = sourceTxHash ?? routeExecution?.route.id ?? ''\n\n const internalTxLink =\n routeExecution?.route?.steps?.at(-1)?.execution?.internalTxLink\n const externalTxLink =\n routeExecution?.route?.steps?.at(-1)?.execution?.externalTxLink\n\n const txLink =\n (url\n ? internalTxLink?.replace(internalExplorerUrl, url)\n : internalTxLink) ||\n externalTxLink ||\n getTransactionLink({ txHash: supportId })\n\n if (process.env.NODE_ENV === 'development') {\n supportId += `_${routeExecution?.route.id}`\n }\n\n const startedAt = new Date(\n routeExecution?.route.steps[0].execution?.startedAt ?? 0\n )\n\n if (isLoading && !storedRouteExecution) {\n return <TransactionDetailsSkeleton />\n }\n\n if (!routeExecution?.route) {\n return null\n }\n\n return (\n <PageContainer\n bottomGutters\n sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}\n >\n <TransactionCard route={routeExecution.route} date={startedAt} />\n {subvariant === 'custom' && contractSecondaryComponent ? (\n <ContractComponent>{contractSecondaryComponent}</ContractComponent>\n ) : null}\n <ReceiptsCard route={routeExecution.route} />\n {supportId ? (\n <TransferIdCard transferId={supportId} txLink={txLink} />\n ) : null}\n </PageContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAqBA,MAAa,+BAAyC;CACpD,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,WAAW,aAAa;CAC9B,MAAM,EACJ,YACA,mBACA,4BACA,iBACE,iBAAiB;CACrB,MAAM,EAAE,WAAgB,aAAa;CACrC,MAAM,EAAE,UAAU,UAAU;CAC5B,MAAM,EAAE,uBAAuB,aAAa;CAC5C,MAAM,uBAAuB,wBAAwB,UACnD,QAAQ,UAAU,MAAM,OAAO,OAAO,WAAW,KAAA,EAClD;CACD,MAAM,EAAE,aAAa,cAAc,sBACjC,CAAC,wBAAwB,QAAQ,gBAClC;CAMD,UAHE,eAAe,WACX,EAAE,UAAU,mBAAmB,UAAU,WAAW,SAAS,GAC7D,EAAE,4BAA4B,CACpB;CAEhB,MAAM,iBAAiB,cAAc;EACnC,IAAI,sBACF,OAAO;EAET,IAAI,WACF;EAEF,IAAI,aAKF,OAJuB,wBACrB,aACA,MAEmB;IAEtB;EAAC;EAAW;EAAsB;EAAO;EAAY,CAAC;CAEzD,gBAAgB;EACd,IAAI,CAAC,aAAa,CAAC,gBACjB,SAAS,EAAE,IAAI,iBAAiB,MAAM,CAAC;IAExC;EAAC;EAAW;EAAU;EAAe,CAAC;CAEzC,MAAM,cAAc,cAAc,WAAW;CAC7C,MAAM,MAAM,OAAO,gBAAgB,WAAW,cAAc,aAAa;CAGzE,IAAI,YADiB,gBAAgB,gBAAgB,MACzB,IAAI,gBAAgB,MAAM,MAAM;CAE5D,MAAM,iBACJ,gBAAgB,OAAO,OAAO,GAAG,GAAG,EAAE,WAAW;CACnD,MAAM,iBACJ,gBAAgB,OAAO,OAAO,GAAG,GAAG,EAAE,WAAW;CAEnD,MAAM,UACH,MACG,gBAAgB,QAAA,sBAA6B,IAAI,GACjD,mBACJ,kBACA,mBAAmB,EAAE,QAAQ,WAAW,CAAC;CAE3C,IAAI,QAAQ,IAAI,aAAa,eAC3B,aAAa,IAAI,gBAAgB,MAAM;CAGzC,MAAM,YAAY,IAAI,KACpB,gBAAgB,MAAM,MAAM,GAAG,WAAW,aAAa,EACxD;CAED,IAAI,aAAa,CAAC,sBAChB,OAAO,oBAAC,4BAAD,EAA8B,CAAA;CAGvC,IAAI,CAAC,gBAAgB,OACnB,OAAO;CAGT,OACE,qBAAC,eAAD;EACE,eAAA;EACA,IAAI;GAAE,SAAS;GAAQ,eAAe;GAAU,KAAK;GAAG;YAF1D;GAIE,oBAAC,iBAAD;IAAiB,OAAO,eAAe;IAAO,MAAM;IAAa,CAAA;GAChE,eAAe,YAAY,6BAC1B,oBAAC,mBAAD,EAAA,UAAoB,4BAA+C,CAAA,GACjE;GACJ,oBAAC,cAAD,EAAc,OAAO,eAAe,OAAS,CAAA;GAC5C,YACC,oBAAC,gBAAD;IAAgB,YAAY;IAAmB;IAAU,CAAA,GACvD;GACU"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionDetailsSkeleton.js","names":["Card"],"sources":["../../../../src/pages/TransactionDetailsPage/TransactionDetailsSkeleton.tsx"],"sourcesContent":["import { Box, Skeleton } from '@mui/material'\nimport type { JSX } from 'react'\nimport { Card } from '../../components/Card/Card.js'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { TokenSkeleton } from '../../components/Token/Token.js'\n\nexport const TransactionDetailsSkeleton = (): JSX.Element => {\n return (\n <PageContainer>\n <Box\n sx={{\n pb: 1,\n pt: 0.75,\n display: 'flex',\n flex: 1,\n justifyContent: 'space-between',\n }}\n >\n <Skeleton width={96} height={20} variant=\"text\" />\n <Skeleton width={40} height={20} variant=\"text\" />\n </Box>\n <Card sx={{ paddingX: 2, marginBottom: 3 }}>\n <Box\n sx={{\n pt: 2.5,\n }}\n >\n <Skeleton width={64} height={12} variant=\"rounded\" />\n </Box>\n <Box\n sx={{\n py: 1,\n }}\n >\n {/* Token skeleton */}\n <Box\n sx={{\n py: 1,\n }}\n >\n <TokenSkeleton />\n </Box>\n {/* Bridge skeleton */}\n <Box\n sx={{\n py: 1,\n }}\n >\n <TokenSkeleton disableDescription />\n </Box>\n {/* Steps skeleton */}\n {Array.from({ length: 3 }).map((_, key) => (\n <Box\n key={key}\n sx={{\n py: 1,\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <Skeleton\n variant=\"rounded\"\n width={40}\n height={40}\n sx={{\n borderRadius: '100%',\n }}\n />\n <Skeleton\n sx={{\n ml: 2,\n }}\n width={96}\n height={24}\n variant=\"text\"\n />\n </Box>\n ))}\n {/* Receiving Token skeleton */}\n <Box\n sx={{\n py: 1,\n }}\n >\n <TokenSkeleton />\n </Box>\n </Box>\n </Card>\n </PageContainer>\n )\n}\n"],"mappings":";;;;;;AAMA,MAAa,mCAAgD;
|
|
1
|
+
{"version":3,"file":"TransactionDetailsSkeleton.js","names":["Card"],"sources":["../../../../src/pages/TransactionDetailsPage/TransactionDetailsSkeleton.tsx"],"sourcesContent":["import { Box, Skeleton } from '@mui/material'\nimport type { JSX } from 'react'\nimport { Card } from '../../components/Card/Card.js'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { TokenSkeleton } from '../../components/Token/Token.js'\n\nexport const TransactionDetailsSkeleton = (): JSX.Element => {\n return (\n <PageContainer>\n <Box\n sx={{\n pb: 1,\n pt: 0.75,\n display: 'flex',\n flex: 1,\n justifyContent: 'space-between',\n }}\n >\n <Skeleton width={96} height={20} variant=\"text\" />\n <Skeleton width={40} height={20} variant=\"text\" />\n </Box>\n <Card sx={{ paddingX: 2, marginBottom: 3 }}>\n <Box\n sx={{\n pt: 2.5,\n }}\n >\n <Skeleton width={64} height={12} variant=\"rounded\" />\n </Box>\n <Box\n sx={{\n py: 1,\n }}\n >\n {/* Token skeleton */}\n <Box\n sx={{\n py: 1,\n }}\n >\n <TokenSkeleton />\n </Box>\n {/* Bridge skeleton */}\n <Box\n sx={{\n py: 1,\n }}\n >\n <TokenSkeleton disableDescription />\n </Box>\n {/* Steps skeleton */}\n {Array.from({ length: 3 }).map((_, key) => (\n <Box\n key={key}\n sx={{\n py: 1,\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <Skeleton\n variant=\"rounded\"\n width={40}\n height={40}\n sx={{\n borderRadius: '100%',\n }}\n />\n <Skeleton\n sx={{\n ml: 2,\n }}\n width={96}\n height={24}\n variant=\"text\"\n />\n </Box>\n ))}\n {/* Receiving Token skeleton */}\n <Box\n sx={{\n py: 1,\n }}\n >\n <TokenSkeleton />\n </Box>\n </Box>\n </Card>\n </PageContainer>\n )\n}\n"],"mappings":";;;;;;AAMA,MAAa,mCAAgD;CAC3D,OACE,qBAAC,eAAD,EAAA,UAAA,CACE,qBAAC,KAAD;EACE,IAAI;GACF,IAAI;GACJ,IAAI;GACJ,SAAS;GACT,MAAM;GACN,gBAAgB;GACjB;YAPH,CASE,oBAAC,UAAD;GAAU,OAAO;GAAI,QAAQ;GAAI,SAAQ;GAAS,CAAA,EAClD,oBAAC,UAAD;GAAU,OAAO;GAAI,QAAQ;GAAI,SAAQ;GAAS,CAAA,CAC9C;KACN,qBAACA,QAAD;EAAM,IAAI;GAAE,UAAU;GAAG,cAAc;GAAG;YAA1C,CACE,oBAAC,KAAD;GACE,IAAI,EACF,IAAI,KACL;aAED,oBAAC,UAAD;IAAU,OAAO;IAAI,QAAQ;IAAI,SAAQ;IAAY,CAAA;GACjD,CAAA,EACN,qBAAC,KAAD;GACE,IAAI,EACF,IAAI,GACL;aAHH;IAME,oBAAC,KAAD;KACE,IAAI,EACF,IAAI,GACL;eAED,oBAAC,eAAD,EAAiB,CAAA;KACb,CAAA;IAEN,oBAAC,KAAD;KACE,IAAI,EACF,IAAI,GACL;eAED,oBAAC,eAAD,EAAe,oBAAA,MAAqB,CAAA;KAChC,CAAA;IAEL,MAAM,KAAK,EAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,QACjC,qBAAC,KAAD;KAEE,IAAI;MACF,IAAI;MACJ,SAAS;MACT,YAAY;MACb;eANH,CAQE,oBAAC,UAAD;MACE,SAAQ;MACR,OAAO;MACP,QAAQ;MACR,IAAI,EACF,cAAc,QACf;MACD,CAAA,EACF,oBAAC,UAAD;MACE,IAAI,EACF,IAAI,GACL;MACD,OAAO;MACP,QAAQ;MACR,SAAQ;MACR,CAAA,CACE;OAvBC,IAuBD,CACN;IAEF,oBAAC,KAAD;KACE,IAAI,EACF,IAAI,GACL;eAED,oBAAC,eAAD,EAAiB,CAAA;KACb,CAAA;IACF;KACD;IACO,EAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransferIdCard.js","names":["Card"],"sources":["../../../../src/pages/TransactionDetailsPage/TransferIdCard.tsx"],"sourcesContent":["import ContentCopyRounded from '@mui/icons-material/ContentCopyRounded'\nimport OpenInNew from '@mui/icons-material/OpenInNew'\nimport { Box, Typography } from '@mui/material'\nimport type { JSX } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Card } from '../../components/Card/Card.js'\nimport { CardIconButton } from '../../components/Card/CardIconButton.js'\nimport { CardTitle } from '../../components/Card/CardTitle.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { HiddenUI } from '../../types/widget.js'\nimport { ContactSupportButton } from './ContactSupportButton.js'\n\ninterface TransferIdCardProps {\n transferId: string\n txLink?: string\n}\n\nexport const TransferIdCard = ({\n transferId,\n txLink,\n}: TransferIdCardProps): JSX.Element => {\n const { t } = useTranslation()\n const { hiddenUI } = useWidgetConfig()\n\n const copyTransferId = async () => {\n await navigator.clipboard.writeText(transferId)\n }\n\n const openTransferIdInExplorer = () => {\n window.open(txLink, '_blank')\n }\n\n return (\n <Card type=\"default\" indented>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <CardTitle sx={{ p: 0 }}>{t('main.transferId')}</CardTitle>\n <Box\n sx={{\n gap: 1,\n display: 'flex',\n }}\n >\n <CardIconButton size=\"small\" onClick={copyTransferId}>\n <ContentCopyRounded fontSize=\"inherit\" />\n </CardIconButton>\n {txLink ? (\n <CardIconButton size=\"small\" onClick={openTransferIdInExplorer}>\n <OpenInNew fontSize=\"inherit\" />\n </CardIconButton>\n ) : null}\n {!hiddenUI?.includes(HiddenUI.ContactSupport) ? (\n <ContactSupportButton supportId={transferId} />\n ) : null}\n </Box>\n </Box>\n <Typography\n variant=\"body2\"\n sx={{\n pt: 2,\n wordBreak: 'break-all',\n }}\n >\n {transferId}\n </Typography>\n </Card>\n )\n}\n"],"mappings":";;;;;;;;;;;;AAiBA,MAAa,kBAAkB,EAC7B,YACA,aACsC;CACtC,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,EAAE,aAAa,iBAAiB;CAEtC,MAAM,iBAAiB,YAAY;
|
|
1
|
+
{"version":3,"file":"TransferIdCard.js","names":["Card"],"sources":["../../../../src/pages/TransactionDetailsPage/TransferIdCard.tsx"],"sourcesContent":["import ContentCopyRounded from '@mui/icons-material/ContentCopyRounded'\nimport OpenInNew from '@mui/icons-material/OpenInNew'\nimport { Box, Typography } from '@mui/material'\nimport type { JSX } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Card } from '../../components/Card/Card.js'\nimport { CardIconButton } from '../../components/Card/CardIconButton.js'\nimport { CardTitle } from '../../components/Card/CardTitle.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { HiddenUI } from '../../types/widget.js'\nimport { ContactSupportButton } from './ContactSupportButton.js'\n\ninterface TransferIdCardProps {\n transferId: string\n txLink?: string\n}\n\nexport const TransferIdCard = ({\n transferId,\n txLink,\n}: TransferIdCardProps): JSX.Element => {\n const { t } = useTranslation()\n const { hiddenUI } = useWidgetConfig()\n\n const copyTransferId = async () => {\n await navigator.clipboard.writeText(transferId)\n }\n\n const openTransferIdInExplorer = () => {\n window.open(txLink, '_blank')\n }\n\n return (\n <Card type=\"default\" indented>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <CardTitle sx={{ p: 0 }}>{t('main.transferId')}</CardTitle>\n <Box\n sx={{\n gap: 1,\n display: 'flex',\n }}\n >\n <CardIconButton size=\"small\" onClick={copyTransferId}>\n <ContentCopyRounded fontSize=\"inherit\" />\n </CardIconButton>\n {txLink ? (\n <CardIconButton size=\"small\" onClick={openTransferIdInExplorer}>\n <OpenInNew fontSize=\"inherit\" />\n </CardIconButton>\n ) : null}\n {!hiddenUI?.includes(HiddenUI.ContactSupport) ? (\n <ContactSupportButton supportId={transferId} />\n ) : null}\n </Box>\n </Box>\n <Typography\n variant=\"body2\"\n sx={{\n pt: 2,\n wordBreak: 'break-all',\n }}\n >\n {transferId}\n </Typography>\n </Card>\n )\n}\n"],"mappings":";;;;;;;;;;;;AAiBA,MAAa,kBAAkB,EAC7B,YACA,aACsC;CACtC,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,EAAE,aAAa,iBAAiB;CAEtC,MAAM,iBAAiB,YAAY;EACjC,MAAM,UAAU,UAAU,UAAU,WAAW;;CAGjD,MAAM,iCAAiC;EACrC,OAAO,KAAK,QAAQ,SAAS;;CAG/B,OACE,qBAACA,QAAD;EAAM,MAAK;EAAU,UAAA;YAArB,CACE,qBAAC,KAAD;GACE,IAAI;IACF,SAAS;IACT,YAAY;IACZ,gBAAgB;IACjB;aALH,CAOE,oBAAC,WAAD;IAAW,IAAI,EAAE,GAAG,GAAG;cAAG,EAAE,kBAAkB;IAAa,CAAA,EAC3D,qBAAC,KAAD;IACE,IAAI;KACF,KAAK;KACL,SAAS;KACV;cAJH;KAME,oBAAC,gBAAD;MAAgB,MAAK;MAAQ,SAAS;gBACpC,oBAAC,oBAAD,EAAoB,UAAS,WAAY,CAAA;MAC1B,CAAA;KAChB,SACC,oBAAC,gBAAD;MAAgB,MAAK;MAAQ,SAAS;gBACpC,oBAAC,WAAD,EAAW,UAAS,WAAY,CAAA;MACjB,CAAA,GACf;KACH,CAAC,UAAU,SAAA,iBAAiC,GAC3C,oBAAC,sBAAD,EAAsB,WAAW,YAAc,CAAA,GAC7C;KACA;MACF;MACN,oBAAC,YAAD;GACE,SAAQ;GACR,IAAI;IACF,IAAI;IACJ,WAAW;IACZ;aAEA;GACU,CAAA,CACR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfirmToAddressSheet.js","names":[],"sources":["../../../../src/pages/TransactionPage/ConfirmToAddressSheet.tsx"],"sourcesContent":["import Wallet from '@mui/icons-material/Wallet'\nimport WarningRounded from '@mui/icons-material/WarningRounded'\nimport { Button, Typography } from '@mui/material'\nimport type { ForwardRefExoticComponent, RefAttributes, RefObject } from 'react'\nimport { forwardRef, useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { BottomSheet } from '../../components/BottomSheet/BottomSheet.js'\nimport type { BottomSheetBase } from '../../components/BottomSheet/types.js'\nimport { AlertMessage } from '../../components/Messages/AlertMessage.js'\nimport { useChain } from '../../hooks/useChain.js'\nimport { useSetContentHeight } from '../../hooks/useSetContentHeight.js'\nimport { useWidgetEvents } from '../../hooks/useWidgetEvents.js'\nimport { WidgetEvent } from '../../types/events.js'\nimport {\n IconContainer,\n SendToWalletButtonRow,\n SendToWalletSheetContainer,\n SheetAddressContainer,\n} from '../SendToWallet/SendToWalletPage.style.js'\n\ninterface ConfirmToAddressSheetProps {\n onContinue: () => void\n toAddress: string\n toChainId: number\n}\n\ninterface ConfirmToAddressSheetContentProps extends ConfirmToAddressSheetProps {\n onClose: () => void\n}\n\nexport const ConfirmToAddressSheet: ForwardRefExoticComponent<\n ConfirmToAddressSheetProps & RefAttributes<BottomSheetBase>\n> = forwardRef<BottomSheetBase, ConfirmToAddressSheetProps>((props, ref) => {\n const handleClose = () => {\n ;(ref as RefObject<BottomSheetBase>).current?.close()\n }\n\n return (\n <BottomSheet ref={ref}>\n <ConfirmToAddressSheetContent {...props} onClose={handleClose} />\n </BottomSheet>\n )\n})\n\nconst ConfirmToAddressSheetContent: React.FC<\n ConfirmToAddressSheetContentProps\n> = ({ onContinue, onClose, toAddress, toChainId }) => {\n const { t } = useTranslation()\n const { chain } = useChain(toChainId)\n const emitter = useWidgetEvents()\n const ref = useRef<HTMLElement>(null)\n useSetContentHeight(ref)\n\n const handleContinue = () => {\n emitter.emit(WidgetEvent.LowAddressActivityConfirmed, {\n address: toAddress,\n chainId: toChainId,\n })\n onClose()\n onContinue()\n }\n\n return (\n <SendToWalletSheetContainer ref={ref}>\n <IconContainer>\n <Wallet sx={{ fontSize: 40 }} />\n </IconContainer>\n <Typography variant=\"h6\" sx={{ textAlign: 'center', mb: 2 }}>\n {t('warning.title.lowAddressActivity')}\n </Typography>\n <SheetAddressContainer>\n <Typography>{toAddress}</Typography>\n </SheetAddressContainer>\n <AlertMessage\n severity=\"warning\"\n title={\n <Typography variant=\"body2\" sx={{ color: 'text.primary' }}>\n {t('warning.message.lowAddressActivity', {\n chainName: chain?.name,\n })}\n </Typography>\n }\n icon={<WarningRounded />}\n multiline\n />\n <SendToWalletButtonRow>\n <Button variant=\"text\" onClick={onClose} fullWidth>\n {t('button.cancel')}\n </Button>\n <Button variant=\"contained\" onClick={handleContinue} fullWidth>\n {t('button.continue')}\n </Button>\n </SendToWalletButtonRow>\n </SendToWalletSheetContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;AA8BA,MAAa,wBAET,YAAyD,OAAO,QAAQ;CAC1E,MAAM,oBAAoB;
|
|
1
|
+
{"version":3,"file":"ConfirmToAddressSheet.js","names":[],"sources":["../../../../src/pages/TransactionPage/ConfirmToAddressSheet.tsx"],"sourcesContent":["import Wallet from '@mui/icons-material/Wallet'\nimport WarningRounded from '@mui/icons-material/WarningRounded'\nimport { Button, Typography } from '@mui/material'\nimport type { ForwardRefExoticComponent, RefAttributes, RefObject } from 'react'\nimport { forwardRef, useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { BottomSheet } from '../../components/BottomSheet/BottomSheet.js'\nimport type { BottomSheetBase } from '../../components/BottomSheet/types.js'\nimport { AlertMessage } from '../../components/Messages/AlertMessage.js'\nimport { useChain } from '../../hooks/useChain.js'\nimport { useSetContentHeight } from '../../hooks/useSetContentHeight.js'\nimport { useWidgetEvents } from '../../hooks/useWidgetEvents.js'\nimport { WidgetEvent } from '../../types/events.js'\nimport {\n IconContainer,\n SendToWalletButtonRow,\n SendToWalletSheetContainer,\n SheetAddressContainer,\n} from '../SendToWallet/SendToWalletPage.style.js'\n\ninterface ConfirmToAddressSheetProps {\n onContinue: () => void\n toAddress: string\n toChainId: number\n}\n\ninterface ConfirmToAddressSheetContentProps extends ConfirmToAddressSheetProps {\n onClose: () => void\n}\n\nexport const ConfirmToAddressSheet: ForwardRefExoticComponent<\n ConfirmToAddressSheetProps & RefAttributes<BottomSheetBase>\n> = forwardRef<BottomSheetBase, ConfirmToAddressSheetProps>((props, ref) => {\n const handleClose = () => {\n ;(ref as RefObject<BottomSheetBase>).current?.close()\n }\n\n return (\n <BottomSheet ref={ref}>\n <ConfirmToAddressSheetContent {...props} onClose={handleClose} />\n </BottomSheet>\n )\n})\n\nconst ConfirmToAddressSheetContent: React.FC<\n ConfirmToAddressSheetContentProps\n> = ({ onContinue, onClose, toAddress, toChainId }) => {\n const { t } = useTranslation()\n const { chain } = useChain(toChainId)\n const emitter = useWidgetEvents()\n const ref = useRef<HTMLElement>(null)\n useSetContentHeight(ref)\n\n const handleContinue = () => {\n emitter.emit(WidgetEvent.LowAddressActivityConfirmed, {\n address: toAddress,\n chainId: toChainId,\n })\n onClose()\n onContinue()\n }\n\n return (\n <SendToWalletSheetContainer ref={ref}>\n <IconContainer>\n <Wallet sx={{ fontSize: 40 }} />\n </IconContainer>\n <Typography variant=\"h6\" sx={{ textAlign: 'center', mb: 2 }}>\n {t('warning.title.lowAddressActivity')}\n </Typography>\n <SheetAddressContainer>\n <Typography>{toAddress}</Typography>\n </SheetAddressContainer>\n <AlertMessage\n severity=\"warning\"\n title={\n <Typography variant=\"body2\" sx={{ color: 'text.primary' }}>\n {t('warning.message.lowAddressActivity', {\n chainName: chain?.name,\n })}\n </Typography>\n }\n icon={<WarningRounded />}\n multiline\n />\n <SendToWalletButtonRow>\n <Button variant=\"text\" onClick={onClose} fullWidth>\n {t('button.cancel')}\n </Button>\n <Button variant=\"contained\" onClick={handleContinue} fullWidth>\n {t('button.continue')}\n </Button>\n </SendToWalletButtonRow>\n </SendToWalletSheetContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;AA8BA,MAAa,wBAET,YAAyD,OAAO,QAAQ;CAC1E,MAAM,oBAAoB;EACvB,IAAoC,SAAS,OAAO;;CAGvD,OACE,oBAAC,aAAD;EAAkB;YAChB,oBAAC,8BAAD;GAA8B,GAAI;GAAO,SAAS;GAAe,CAAA;EACrD,CAAA;EAEhB;AAEF,MAAM,gCAED,EAAE,YAAY,SAAS,WAAW,gBAAgB;CACrD,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,EAAE,UAAU,SAAS,UAAU;CACrC,MAAM,UAAU,iBAAiB;CACjC,MAAM,MAAM,OAAoB,KAAK;CACrC,oBAAoB,IAAI;CAExB,MAAM,uBAAuB;EAC3B,QAAQ,KAAA,+BAA8C;GACpD,SAAS;GACT,SAAS;GACV,CAAC;EACF,SAAS;EACT,YAAY;;CAGd,OACE,qBAAC,4BAAD;EAAiC;YAAjC;GACE,oBAAC,eAAD,EAAA,UACE,oBAAC,QAAD,EAAQ,IAAI,EAAE,UAAU,IAAI,EAAI,CAAA,EAClB,CAAA;GAChB,oBAAC,YAAD;IAAY,SAAQ;IAAK,IAAI;KAAE,WAAW;KAAU,IAAI;KAAG;cACxD,EAAE,mCAAmC;IAC3B,CAAA;GACb,oBAAC,uBAAD,EAAA,UACE,oBAAC,YAAD,EAAA,UAAa,WAAuB,CAAA,EACd,CAAA;GACxB,oBAAC,cAAD;IACE,UAAS;IACT,OACE,oBAAC,YAAD;KAAY,SAAQ;KAAQ,IAAI,EAAE,OAAO,gBAAgB;eACtD,EAAE,sCAAsC,EACvC,WAAW,OAAO,MACnB,CAAC;KACS,CAAA;IAEf,MAAM,oBAAC,gBAAD,EAAkB,CAAA;IACxB,WAAA;IACA,CAAA;GACF,qBAAC,uBAAD,EAAA,UAAA,CACE,oBAAC,QAAD;IAAQ,SAAQ;IAAO,SAAS;IAAS,WAAA;cACtC,EAAE,gBAAgB;IACZ,CAAA,EACT,oBAAC,QAAD;IAAQ,SAAQ;IAAY,SAAS;IAAgB,WAAA;cAClD,EAAE,kBAAkB;IACd,CAAA,CACa,EAAA,CAAA;GACG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExchangeRateBottomSheet.js","names":[],"sources":["../../../../src/pages/TransactionPage/ExchangeRateBottomSheet.tsx"],"sourcesContent":["import type { ExchangeRateUpdateParams } from '@lifi/sdk'\nimport WarningRounded from '@mui/icons-material/WarningRounded'\nimport { Box, Button, Typography } from '@mui/material'\nimport type { ForwardRefExoticComponent, RefAttributes, RefObject } from 'react'\nimport {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { BottomSheet } from '../../components/BottomSheet/BottomSheet.js'\nimport type { BottomSheetBase } from '../../components/BottomSheet/types.js'\nimport { useSetContentHeight } from '../../hooks/useSetContentHeight.js'\nimport { formatTokenAmount } from '../../utils/format.js'\nimport { CenterContainer, IconCircle } from './StatusBottomSheet.style.js'\n\nexport interface ExchangeRateBottomSheetBase {\n isOpen(): void\n open(resolver: (value: boolean) => void, data: ExchangeRateUpdateParams): void\n close(value?: boolean, bottomSheetClose?: boolean): void\n}\n\ninterface ExchangeRateBottomSheetProps {\n data?: ExchangeRateUpdateParams\n onContinue?(): void\n onCancel?(): void\n}\n\nexport const ExchangeRateBottomSheet: ForwardRefExoticComponent<\n ExchangeRateBottomSheetProps & RefAttributes<ExchangeRateBottomSheetBase>\n> = forwardRef<ExchangeRateBottomSheetBase, ExchangeRateBottomSheetProps>(\n ({ onContinue, onCancel }, ref) => {\n const [data, setData] = useState<ExchangeRateUpdateParams>()\n const bottomSheetRef = useRef<BottomSheetBase>(null)\n const resolverRef = useRef<(value: boolean) => void>(null)\n\n const handleContinue = () => {\n ;(ref as RefObject<ExchangeRateBottomSheetBase>).current?.close(true)\n onContinue?.()\n }\n\n const handleCancel = useCallback(() => {\n ;(ref as RefObject<ExchangeRateBottomSheetBase>).current?.close(false)\n onCancel?.()\n }, [onCancel, ref])\n\n const handleClose = useCallback(() => {\n ;(ref as RefObject<ExchangeRateBottomSheetBase>).current?.close(\n false,\n false\n )\n onCancel?.()\n }, [onCancel, ref])\n\n useImperativeHandle(\n ref,\n () => ({\n isOpen: () => bottomSheetRef.current?.isOpen(),\n open: (resolver, data) => {\n setData(data)\n resolverRef.current = resolver\n bottomSheetRef.current?.open()\n },\n close: (value = false, bottomSheetClose = true) => {\n resolverRef.current?.(value)\n if (bottomSheetClose) {\n bottomSheetRef.current?.close()\n }\n },\n }),\n []\n )\n\n return (\n <BottomSheet ref={bottomSheetRef} onClose={handleClose}>\n <ExchangeRateBottomSheetContent\n data={data}\n onContinue={handleContinue}\n onCancel={handleCancel}\n />\n </BottomSheet>\n )\n }\n)\n\nconst ExchangeRateBottomSheetContent: React.FC<\n ExchangeRateBottomSheetProps\n> = ({ data, onCancel, onContinue }) => {\n const { t } = useTranslation()\n const ref = useRef<HTMLElement>(null)\n useSetContentHeight(ref)\n\n if (!data) {\n return\n }\n\n const oldAmount = BigInt(data.oldToAmount || 1)\n const rateChange = (\n (Number((BigInt(data.newToAmount || 0) * 1_000_000n) / oldAmount) /\n 1_000_000) *\n 100 -\n 100\n ).toFixed(2)\n\n return (\n <Box\n ref={ref}\n sx={{\n p: 3,\n }}\n >\n <CenterContainer>\n <IconCircle status=\"warning\" sx={{ mb: 1 }}>\n <WarningRounded color=\"warning\" />\n </IconCircle>\n <Typography\n sx={{\n py: 1,\n fontSize: 18,\n fontWeight: 700,\n }}\n >\n {t('warning.title.rateChanged')}\n </Typography>\n </CenterContainer>\n <Typography\n sx={{\n py: 1,\n }}\n >\n {t('warning.message.rateChanged')}\n </Typography>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mt: 1,\n }}\n >\n <Typography>{t('main.quotedAmount')}</Typography>\n <Typography\n sx={{\n fontWeight: 600,\n }}\n >\n {t('format.tokenAmount', {\n value: formatTokenAmount(\n BigInt(data.oldToAmount),\n data.toToken.decimals\n ),\n })}{' '}\n {data?.toToken.symbol}\n </Typography>\n </Box>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mt: 0.25,\n }}\n >\n <Typography>{t('main.currentAmount')}</Typography>\n <Typography\n sx={{\n fontWeight: 600,\n }}\n >\n {t('format.tokenAmount', {\n value: formatTokenAmount(\n BigInt(data?.newToAmount),\n data?.toToken.decimals\n ),\n })}{' '}\n {data?.toToken.symbol}\n </Typography>\n </Box>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mt: 0.25,\n }}\n >\n <Typography>{t('main.rateChange')}</Typography>\n <Typography\n sx={{\n fontWeight: 600,\n }}\n >\n {rateChange}%\n </Typography>\n </Box>\n <Box\n sx={{\n display: 'flex',\n mt: 3,\n }}\n >\n <Button variant=\"text\" onClick={onCancel} fullWidth>\n {t('button.cancel')}\n </Button>\n <Box\n sx={{\n display: 'flex',\n p: 1,\n }}\n />\n <Button variant=\"contained\" onClick={onContinue} fullWidth>\n {t('button.continue')}\n </Button>\n </Box>\n </Box>\n )\n}\n"],"mappings":";;;;;;;;;;AA8BA,MAAa,0BAET,YACD,EAAE,YAAY,YAAY,QAAQ;CACjC,MAAM,CAAC,MAAM,WAAW,UAAoC;CAC5D,MAAM,iBAAiB,OAAwB,KAAK;CACpD,MAAM,cAAc,OAAiC,KAAK;CAE1D,MAAM,uBAAuB;
|
|
1
|
+
{"version":3,"file":"ExchangeRateBottomSheet.js","names":[],"sources":["../../../../src/pages/TransactionPage/ExchangeRateBottomSheet.tsx"],"sourcesContent":["import type { ExchangeRateUpdateParams } from '@lifi/sdk'\nimport WarningRounded from '@mui/icons-material/WarningRounded'\nimport { Box, Button, Typography } from '@mui/material'\nimport type { ForwardRefExoticComponent, RefAttributes, RefObject } from 'react'\nimport {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { BottomSheet } from '../../components/BottomSheet/BottomSheet.js'\nimport type { BottomSheetBase } from '../../components/BottomSheet/types.js'\nimport { useSetContentHeight } from '../../hooks/useSetContentHeight.js'\nimport { formatTokenAmount } from '../../utils/format.js'\nimport { CenterContainer, IconCircle } from './StatusBottomSheet.style.js'\n\nexport interface ExchangeRateBottomSheetBase {\n isOpen(): void\n open(resolver: (value: boolean) => void, data: ExchangeRateUpdateParams): void\n close(value?: boolean, bottomSheetClose?: boolean): void\n}\n\ninterface ExchangeRateBottomSheetProps {\n data?: ExchangeRateUpdateParams\n onContinue?(): void\n onCancel?(): void\n}\n\nexport const ExchangeRateBottomSheet: ForwardRefExoticComponent<\n ExchangeRateBottomSheetProps & RefAttributes<ExchangeRateBottomSheetBase>\n> = forwardRef<ExchangeRateBottomSheetBase, ExchangeRateBottomSheetProps>(\n ({ onContinue, onCancel }, ref) => {\n const [data, setData] = useState<ExchangeRateUpdateParams>()\n const bottomSheetRef = useRef<BottomSheetBase>(null)\n const resolverRef = useRef<(value: boolean) => void>(null)\n\n const handleContinue = () => {\n ;(ref as RefObject<ExchangeRateBottomSheetBase>).current?.close(true)\n onContinue?.()\n }\n\n const handleCancel = useCallback(() => {\n ;(ref as RefObject<ExchangeRateBottomSheetBase>).current?.close(false)\n onCancel?.()\n }, [onCancel, ref])\n\n const handleClose = useCallback(() => {\n ;(ref as RefObject<ExchangeRateBottomSheetBase>).current?.close(\n false,\n false\n )\n onCancel?.()\n }, [onCancel, ref])\n\n useImperativeHandle(\n ref,\n () => ({\n isOpen: () => bottomSheetRef.current?.isOpen(),\n open: (resolver, data) => {\n setData(data)\n resolverRef.current = resolver\n bottomSheetRef.current?.open()\n },\n close: (value = false, bottomSheetClose = true) => {\n resolverRef.current?.(value)\n if (bottomSheetClose) {\n bottomSheetRef.current?.close()\n }\n },\n }),\n []\n )\n\n return (\n <BottomSheet ref={bottomSheetRef} onClose={handleClose}>\n <ExchangeRateBottomSheetContent\n data={data}\n onContinue={handleContinue}\n onCancel={handleCancel}\n />\n </BottomSheet>\n )\n }\n)\n\nconst ExchangeRateBottomSheetContent: React.FC<\n ExchangeRateBottomSheetProps\n> = ({ data, onCancel, onContinue }) => {\n const { t } = useTranslation()\n const ref = useRef<HTMLElement>(null)\n useSetContentHeight(ref)\n\n if (!data) {\n return\n }\n\n const oldAmount = BigInt(data.oldToAmount || 1)\n const rateChange = (\n (Number((BigInt(data.newToAmount || 0) * 1_000_000n) / oldAmount) /\n 1_000_000) *\n 100 -\n 100\n ).toFixed(2)\n\n return (\n <Box\n ref={ref}\n sx={{\n p: 3,\n }}\n >\n <CenterContainer>\n <IconCircle status=\"warning\" sx={{ mb: 1 }}>\n <WarningRounded color=\"warning\" />\n </IconCircle>\n <Typography\n sx={{\n py: 1,\n fontSize: 18,\n fontWeight: 700,\n }}\n >\n {t('warning.title.rateChanged')}\n </Typography>\n </CenterContainer>\n <Typography\n sx={{\n py: 1,\n }}\n >\n {t('warning.message.rateChanged')}\n </Typography>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mt: 1,\n }}\n >\n <Typography>{t('main.quotedAmount')}</Typography>\n <Typography\n sx={{\n fontWeight: 600,\n }}\n >\n {t('format.tokenAmount', {\n value: formatTokenAmount(\n BigInt(data.oldToAmount),\n data.toToken.decimals\n ),\n })}{' '}\n {data?.toToken.symbol}\n </Typography>\n </Box>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mt: 0.25,\n }}\n >\n <Typography>{t('main.currentAmount')}</Typography>\n <Typography\n sx={{\n fontWeight: 600,\n }}\n >\n {t('format.tokenAmount', {\n value: formatTokenAmount(\n BigInt(data?.newToAmount),\n data?.toToken.decimals\n ),\n })}{' '}\n {data?.toToken.symbol}\n </Typography>\n </Box>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mt: 0.25,\n }}\n >\n <Typography>{t('main.rateChange')}</Typography>\n <Typography\n sx={{\n fontWeight: 600,\n }}\n >\n {rateChange}%\n </Typography>\n </Box>\n <Box\n sx={{\n display: 'flex',\n mt: 3,\n }}\n >\n <Button variant=\"text\" onClick={onCancel} fullWidth>\n {t('button.cancel')}\n </Button>\n <Box\n sx={{\n display: 'flex',\n p: 1,\n }}\n />\n <Button variant=\"contained\" onClick={onContinue} fullWidth>\n {t('button.continue')}\n </Button>\n </Box>\n </Box>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteTracker.js","names":[],"sources":["../../../../src/pages/TransactionPage/RouteTracker.tsx"],"sourcesContent":["import type { Dispatch, JSX, SetStateAction } from 'react'\nimport { useEffect, useRef, useState } from 'react'\nimport { ProgressToNextUpdate } from '../../components/ProgressToNextUpdate.js'\nimport { useRoutes } from '../../hooks/useRoutes.js'\nimport { useRouteExecutionStoreContext } from '../../stores/routes/RouteExecutionStore.js'\nimport { useSetExecutableRoute } from '../../stores/routes/useSetExecutableRoute.js'\n\ninterface RouteTrackerProps {\n observableRouteId: string\n onChange: Dispatch<SetStateAction<string>>\n onFetching: Dispatch<SetStateAction<boolean>>\n}\n\nexport const RouteTracker = ({\n observableRouteId,\n onChange,\n onFetching,\n}: RouteTrackerProps): JSX.Element => {\n const routeExecutionStore = useRouteExecutionStoreContext()\n const setExecutableRoute = useSetExecutableRoute()\n const [observableRoute] = useState(\n () => routeExecutionStore.getState().routes[observableRouteId]?.route\n )\n const observableRouteIdRef = useRef(observableRoute?.id)\n const { routes, isFetching, dataUpdatedAt, refetchTime, refetch } = useRoutes(\n { observableRoute }\n )\n const currentRoute = routes?.[0]\n\n /**\n * The reviewable route is the route that the user currently sees on the review page.\n * The observable route is the route for which we track bridges and exchanges.\n * This allows us to query the route using the same tool each time we refresh.\n * The observable and reviewable routes can be the same when we first enter the review page.\n */\n // biome-ignore lint/correctness/useExhaustiveDependencies: run only when currentRoute changes\n useEffect(() => {\n if (\n observableRouteIdRef.current &&\n currentRoute &&\n observableRouteIdRef.current !== currentRoute.id\n ) {\n const reviewableRouteId = observableRouteIdRef.current\n observableRouteIdRef.current = currentRoute.id\n setExecutableRoute(currentRoute, [observableRouteId, reviewableRouteId])\n onChange(currentRoute.id)\n }\n }, [currentRoute?.id, observableRouteId])\n\n useEffect(() => {\n onFetching(isFetching)\n }, [isFetching, onFetching])\n\n const handleRefetch = () => {\n refetch()\n }\n\n return (\n <ProgressToNextUpdate\n updatedAt={dataUpdatedAt || Date.now()}\n timeToUpdate={refetchTime}\n isLoading={isFetching}\n onClick={handleRefetch}\n sx={{ marginRight: -1 }}\n size=\"medium\"\n />\n )\n}\n"],"mappings":";;;;;;;AAaA,MAAa,gBAAgB,EAC3B,mBACA,UACA,iBACoC;CACpC,MAAM,sBAAsB,+BAA+B;CAC3D,MAAM,qBAAqB,uBAAuB;CAClD,MAAM,CAAC,mBAAmB,eAClB,oBAAoB,UAAU,CAAC,OAAO,oBAAoB,MACjE;CACD,MAAM,uBAAuB,OAAO,iBAAiB,GAAG;CACxD,MAAM,EAAE,QAAQ,YAAY,eAAe,aAAa,YAAY,UAClE,EAAE,iBAAiB,CACpB;CACD,MAAM,eAAe,SAAS;;;;;;;
|
|
1
|
+
{"version":3,"file":"RouteTracker.js","names":[],"sources":["../../../../src/pages/TransactionPage/RouteTracker.tsx"],"sourcesContent":["import type { Dispatch, JSX, SetStateAction } from 'react'\nimport { useEffect, useRef, useState } from 'react'\nimport { ProgressToNextUpdate } from '../../components/ProgressToNextUpdate.js'\nimport { useRoutes } from '../../hooks/useRoutes.js'\nimport { useRouteExecutionStoreContext } from '../../stores/routes/RouteExecutionStore.js'\nimport { useSetExecutableRoute } from '../../stores/routes/useSetExecutableRoute.js'\n\ninterface RouteTrackerProps {\n observableRouteId: string\n onChange: Dispatch<SetStateAction<string>>\n onFetching: Dispatch<SetStateAction<boolean>>\n}\n\nexport const RouteTracker = ({\n observableRouteId,\n onChange,\n onFetching,\n}: RouteTrackerProps): JSX.Element => {\n const routeExecutionStore = useRouteExecutionStoreContext()\n const setExecutableRoute = useSetExecutableRoute()\n const [observableRoute] = useState(\n () => routeExecutionStore.getState().routes[observableRouteId]?.route\n )\n const observableRouteIdRef = useRef(observableRoute?.id)\n const { routes, isFetching, dataUpdatedAt, refetchTime, refetch } = useRoutes(\n { observableRoute }\n )\n const currentRoute = routes?.[0]\n\n /**\n * The reviewable route is the route that the user currently sees on the review page.\n * The observable route is the route for which we track bridges and exchanges.\n * This allows us to query the route using the same tool each time we refresh.\n * The observable and reviewable routes can be the same when we first enter the review page.\n */\n // biome-ignore lint/correctness/useExhaustiveDependencies: run only when currentRoute changes\n useEffect(() => {\n if (\n observableRouteIdRef.current &&\n currentRoute &&\n observableRouteIdRef.current !== currentRoute.id\n ) {\n const reviewableRouteId = observableRouteIdRef.current\n observableRouteIdRef.current = currentRoute.id\n setExecutableRoute(currentRoute, [observableRouteId, reviewableRouteId])\n onChange(currentRoute.id)\n }\n }, [currentRoute?.id, observableRouteId])\n\n useEffect(() => {\n onFetching(isFetching)\n }, [isFetching, onFetching])\n\n const handleRefetch = () => {\n refetch()\n }\n\n return (\n <ProgressToNextUpdate\n updatedAt={dataUpdatedAt || Date.now()}\n timeToUpdate={refetchTime}\n isLoading={isFetching}\n onClick={handleRefetch}\n sx={{ marginRight: -1 }}\n size=\"medium\"\n />\n )\n}\n"],"mappings":";;;;;;;AAaA,MAAa,gBAAgB,EAC3B,mBACA,UACA,iBACoC;CACpC,MAAM,sBAAsB,+BAA+B;CAC3D,MAAM,qBAAqB,uBAAuB;CAClD,MAAM,CAAC,mBAAmB,eAClB,oBAAoB,UAAU,CAAC,OAAO,oBAAoB,MACjE;CACD,MAAM,uBAAuB,OAAO,iBAAiB,GAAG;CACxD,MAAM,EAAE,QAAQ,YAAY,eAAe,aAAa,YAAY,UAClE,EAAE,iBAAiB,CACpB;CACD,MAAM,eAAe,SAAS;;;;;;;CAS9B,gBAAgB;EACd,IACE,qBAAqB,WACrB,gBACA,qBAAqB,YAAY,aAAa,IAC9C;GACA,MAAM,oBAAoB,qBAAqB;GAC/C,qBAAqB,UAAU,aAAa;GAC5C,mBAAmB,cAAc,CAAC,mBAAmB,kBAAkB,CAAC;GACxE,SAAS,aAAa,GAAG;;IAE1B,CAAC,cAAc,IAAI,kBAAkB,CAAC;CAEzC,gBAAgB;EACd,WAAW,WAAW;IACrB,CAAC,YAAY,WAAW,CAAC;CAE5B,MAAM,sBAAsB;EAC1B,SAAS;;CAGX,OACE,oBAAC,sBAAD;EACE,WAAW,iBAAiB,KAAK,KAAK;EACtC,cAAc;EACd,WAAW;EACX,SAAS;EACT,IAAI,EAAE,aAAa,IAAI;EACvB,MAAK;EACL,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StartTransactionButton.js","names":[],"sources":["../../../../src/pages/TransactionPage/StartTransactionButton.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { BaseTransactionButton } from '../../components/BaseTransactionButton/BaseTransactionButton.js'\nimport { useMessageQueue } from '../../components/Messages/useMessageQueue.js'\nimport type { StartTransactionButtonProps } from './types.js'\n\nexport const StartTransactionButton: React.FC<StartTransactionButtonProps> = ({\n onClick,\n route,\n text,\n loading,\n}) => {\n const { messages, isLoading } = useMessageQueue(route, true)\n\n const hasNonGasMessages = useMemo(() => {\n return messages.some((message) => message.id !== 'INSUFFICIENT_GAS')\n }, [messages])\n\n return (\n <BaseTransactionButton\n onClick={onClick}\n text={text}\n disabled={hasNonGasMessages}\n loading={isLoading || loading}\n route={route}\n />\n )\n}\n"],"mappings":";;;;;AAKA,MAAa,0BAAiE,EAC5E,SACA,OACA,MACA,cACI;CACJ,MAAM,EAAE,UAAU,cAAc,gBAAgB,OAAO,KAAK;
|
|
1
|
+
{"version":3,"file":"StartTransactionButton.js","names":[],"sources":["../../../../src/pages/TransactionPage/StartTransactionButton.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { BaseTransactionButton } from '../../components/BaseTransactionButton/BaseTransactionButton.js'\nimport { useMessageQueue } from '../../components/Messages/useMessageQueue.js'\nimport type { StartTransactionButtonProps } from './types.js'\n\nexport const StartTransactionButton: React.FC<StartTransactionButtonProps> = ({\n onClick,\n route,\n text,\n loading,\n}) => {\n const { messages, isLoading } = useMessageQueue(route, true)\n\n const hasNonGasMessages = useMemo(() => {\n return messages.some((message) => message.id !== 'INSUFFICIENT_GAS')\n }, [messages])\n\n return (\n <BaseTransactionButton\n onClick={onClick}\n text={text}\n disabled={hasNonGasMessages}\n loading={isLoading || loading}\n route={route}\n />\n )\n}\n"],"mappings":";;;;;AAKA,MAAa,0BAAiE,EAC5E,SACA,OACA,MACA,cACI;CACJ,MAAM,EAAE,UAAU,cAAc,gBAAgB,OAAO,KAAK;CAM5D,OACE,oBAAC,uBAAD;EACW;EACH;EACN,UARsB,cAAc;GACtC,OAAO,SAAS,MAAM,YAAY,QAAQ,OAAO,mBAAmB;KACnE,CAAC,SAAS,CAMkB;EAC3B,SAAS,aAAa;EACf;EACP,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBottomSheet.js","names":["Card"],"sources":["../../../../src/pages/TransactionPage/StatusBottomSheet.tsx"],"sourcesContent":["import type { ExecutionActionType } from '@lifi/sdk'\nimport Done from '@mui/icons-material/Done'\nimport ErrorRounded from '@mui/icons-material/ErrorRounded'\nimport InfoRounded from '@mui/icons-material/InfoRounded'\nimport WarningRounded from '@mui/icons-material/WarningRounded'\nimport { Box, Button, Typography } from '@mui/material'\nimport { useNavigate } from '@tanstack/react-router'\nimport { useCallback, useEffect, useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { BottomSheet } from '../../components/BottomSheet/BottomSheet.js'\nimport type { BottomSheetBase } from '../../components/BottomSheet/types.js'\nimport { Card } from '../../components/Card/Card.js'\nimport { CardTitle } from '../../components/Card/CardTitle.js'\nimport { Token } from '../../components/Token/Token.js'\nimport { useAvailableChains } from '../../hooks/useAvailableChains.js'\nimport { useSetContentHeight } from '../../hooks/useSetContentHeight.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { useFieldActions } from '../../stores/form/useFieldActions.js'\nimport {\n type RouteExecution,\n RouteExecutionStatus,\n} from '../../stores/routes/types.js'\nimport { getSourceTxHash } from '../../stores/routes/utils.js'\nimport { hasEnumFlag } from '../../utils/enum.js'\nimport { formatTokenAmount } from '../../utils/format.js'\nimport { getErrorMessage } from '../../utils/getErrorMessage.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { CenterContainer, IconCircle } from './StatusBottomSheet.style.js'\n\ninterface StatusBottomSheetContentProps extends RouteExecution {\n onClose(): void\n}\n\nexport const StatusBottomSheet: React.FC<RouteExecution> = ({\n status,\n route,\n}) => {\n const ref = useRef<BottomSheetBase>(null)\n\n const onClose = useCallback(() => {\n ref.current?.close()\n }, [])\n\n useEffect(() => {\n const hasSuccessFlag = hasEnumFlag(status, RouteExecutionStatus.Done)\n const hasFailedFlag = hasEnumFlag(status, RouteExecutionStatus.Failed)\n if ((hasSuccessFlag || hasFailedFlag) && !ref.current?.isOpen()) {\n ref.current?.open()\n }\n }, [status])\n\n return (\n <BottomSheet ref={ref}>\n <StatusBottomSheetContent\n status={status}\n route={route}\n onClose={onClose}\n />\n </BottomSheet>\n )\n}\n\nconst StatusBottomSheetContent: React.FC<StatusBottomSheetContentProps> = ({\n status,\n route,\n onClose,\n}) => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const { setFieldValue } = useFieldActions()\n const {\n subvariant,\n subvariantOptions,\n contractSecondaryComponent,\n contractCompactComponent,\n feeConfig,\n } = useWidgetConfig()\n const { getChainById } = useAvailableChains()\n\n const ref = useRef<HTMLElement>(null)\n useSetContentHeight(ref)\n\n const toToken = {\n ...(route.steps.at(-1)?.execution?.toToken ?? route.toToken),\n amount: BigInt(\n route.steps.at(-1)?.execution?.toAmount ??\n route.steps.at(-1)?.estimate.toAmount ??\n route.toAmount\n ),\n }\n\n const cleanFields = () => {\n setFieldValue('fromAmount', '')\n setFieldValue('toAmount', '')\n }\n\n const handleDone = () => {\n cleanFields()\n navigate({ to: navigationRoutes.home, replace: true })\n }\n\n const handlePartialDone = () => {\n if (\n toToken.chainId !== route.toToken.chainId &&\n toToken.address !== route.toToken.address\n ) {\n setFieldValue(\n 'fromAmount',\n formatTokenAmount(toToken.amount, toToken.decimals),\n { isTouched: true }\n )\n setFieldValue('fromChain', toToken.chainId, { isTouched: true })\n setFieldValue('fromToken', toToken.address, { isTouched: true })\n setFieldValue('toChain', route.toToken.chainId, {\n isTouched: true,\n })\n setFieldValue('toToken', route.toToken.address, {\n isTouched: true,\n })\n } else {\n cleanFields()\n }\n navigate({ to: navigationRoutes.home, replace: true })\n }\n\n const handleClose = () => {\n cleanFields()\n onClose()\n }\n\n const handleSeeDetails = () => {\n handleClose()\n\n const transactionHash = getSourceTxHash(route)\n\n navigate({\n to: navigationRoutes.transactionDetails,\n search: {\n routeId: route.id,\n transactionHash,\n },\n replace: true,\n })\n }\n\n const transactionType =\n route.fromChainId === route.toChainId ? 'swap' : 'bridge'\n\n let title: string | undefined\n let primaryMessage: string | undefined\n let failedMessage: string | undefined\n let handlePrimaryButton = handleDone\n switch (status) {\n case RouteExecutionStatus.Done: {\n title =\n subvariant === 'custom'\n ? t(\n `success.title.${subvariantOptions?.custom ?? 'checkout'}Successful`\n )\n : t(`success.title.${transactionType}Successful`)\n handlePrimaryButton = handleDone\n break\n }\n case RouteExecutionStatus.Done | RouteExecutionStatus.Partial: {\n title = t(`success.title.${transactionType}PartiallySuccessful`)\n primaryMessage = t('success.message.exchangePartiallySuccessful', {\n tool: route.steps.at(-1)?.toolDetails.name,\n tokenSymbol: route.steps.at(-1)?.action.toToken.symbol,\n })\n handlePrimaryButton = handlePartialDone\n break\n }\n case RouteExecutionStatus.Done | RouteExecutionStatus.Refunded: {\n title = t('success.title.refundIssued')\n primaryMessage = t('success.message.exchangePartiallySuccessful', {\n tool: route.steps.at(-1)?.toolDetails.name,\n tokenSymbol: route.steps.at(-1)?.action.toToken.symbol,\n })\n break\n }\n case RouteExecutionStatus.Failed: {\n const step = route.steps.find(\n (step) => step.execution?.status === 'FAILED'\n )\n if (!step) {\n break\n }\n const action = step.execution?.actions?.find(\n (action) => action.status === 'FAILED'\n ) || {\n status: 'FAILED',\n type: 'EXECUTION' as ExecutionActionType,\n error: step.execution?.error,\n } // synthetic action to represent a failed execution with no actions\n const actionMessage = getErrorMessage(t, getChainById, step, action)\n title = actionMessage.title\n failedMessage = actionMessage.message\n handlePrimaryButton = handleClose\n break\n }\n default:\n break\n }\n\n const showContractComponent =\n subvariant === 'custom' &&\n hasEnumFlag(status, RouteExecutionStatus.Done) &&\n (contractCompactComponent || contractSecondaryComponent)\n\n const VcComponent =\n status === RouteExecutionStatus.Done ? feeConfig?._vcComponent : undefined\n\n return (\n <Box\n ref={ref}\n sx={{\n p: 3,\n }}\n >\n {!showContractComponent ? (\n <CenterContainer>\n <IconCircle status={status} sx={{ mb: 1 }}>\n {status === RouteExecutionStatus.Idle ? (\n <InfoRounded color=\"primary\" />\n ) : null}\n {status === RouteExecutionStatus.Done ? (\n <Done color=\"success\" />\n ) : null}\n {hasEnumFlag(status, RouteExecutionStatus.Partial) ||\n hasEnumFlag(status, RouteExecutionStatus.Refunded) ? (\n <WarningRounded color=\"warning\" />\n ) : null}\n {hasEnumFlag(status, RouteExecutionStatus.Failed) ? (\n <ErrorRounded color=\"error\" />\n ) : null}\n </IconCircle>\n </CenterContainer>\n ) : null}\n <CenterContainer>\n <Typography\n sx={{\n py: 1,\n fontSize: 18,\n fontWeight: 700,\n }}\n >\n {title}\n </Typography>\n </CenterContainer>\n {showContractComponent ? (\n contractCompactComponent || contractSecondaryComponent\n ) : hasEnumFlag(status, RouteExecutionStatus.Failed) && failedMessage ? (\n <Typography\n sx={{\n py: 1,\n }}\n >\n {failedMessage}\n </Typography>\n ) : hasEnumFlag(status, RouteExecutionStatus.Done) ? (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n marginTop: 2,\n marginBottom: VcComponent ? 2 : 3,\n }}\n >\n <Card\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n padding: 2,\n }}\n >\n <CardTitle sx={{ padding: 0 }}>\n {hasEnumFlag(status, RouteExecutionStatus.Refunded)\n ? t('header.refunded')\n : t('header.received')}\n </CardTitle>\n <Token token={toToken} disableDescription={false} />\n {primaryMessage && (\n <Typography\n sx={{\n color: 'text.secondary',\n fontSize: '12px',\n lineHeight: '16px',\n fontWeight: 500,\n }}\n >\n {primaryMessage}\n </Typography>\n )}\n </Card>\n {VcComponent ? <VcComponent route={route} /> : null}\n </Box>\n ) : null}\n <Box sx={{ display: 'flex', marginTop: 2, gap: 1.5 }}>\n {hasEnumFlag(status, RouteExecutionStatus.Done) ? (\n <Button variant=\"text\" onClick={handleSeeDetails} fullWidth>\n {t('button.seeDetails')}\n </Button>\n ) : null}\n <Button variant=\"contained\" fullWidth onClick={handlePrimaryButton}>\n {status === RouteExecutionStatus.Idle ? t('button.ok') : null}\n {hasEnumFlag(status, RouteExecutionStatus.Done)\n ? t('button.done')\n : null}\n {status === RouteExecutionStatus.Failed\n ? t('button.seeDetails')\n : null}\n </Button>\n </Box>\n </Box>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StatusBottomSheet.js","names":["Card"],"sources":["../../../../src/pages/TransactionPage/StatusBottomSheet.tsx"],"sourcesContent":["import type { ExecutionActionType } from '@lifi/sdk'\nimport Done from '@mui/icons-material/Done'\nimport ErrorRounded from '@mui/icons-material/ErrorRounded'\nimport InfoRounded from '@mui/icons-material/InfoRounded'\nimport WarningRounded from '@mui/icons-material/WarningRounded'\nimport { Box, Button, Typography } from '@mui/material'\nimport { useNavigate } from '@tanstack/react-router'\nimport { useCallback, useEffect, useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { BottomSheet } from '../../components/BottomSheet/BottomSheet.js'\nimport type { BottomSheetBase } from '../../components/BottomSheet/types.js'\nimport { Card } from '../../components/Card/Card.js'\nimport { CardTitle } from '../../components/Card/CardTitle.js'\nimport { Token } from '../../components/Token/Token.js'\nimport { useAvailableChains } from '../../hooks/useAvailableChains.js'\nimport { useSetContentHeight } from '../../hooks/useSetContentHeight.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { useFieldActions } from '../../stores/form/useFieldActions.js'\nimport {\n type RouteExecution,\n RouteExecutionStatus,\n} from '../../stores/routes/types.js'\nimport { getSourceTxHash } from '../../stores/routes/utils.js'\nimport { hasEnumFlag } from '../../utils/enum.js'\nimport { formatTokenAmount } from '../../utils/format.js'\nimport { getErrorMessage } from '../../utils/getErrorMessage.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { CenterContainer, IconCircle } from './StatusBottomSheet.style.js'\n\ninterface StatusBottomSheetContentProps extends RouteExecution {\n onClose(): void\n}\n\nexport const StatusBottomSheet: React.FC<RouteExecution> = ({\n status,\n route,\n}) => {\n const ref = useRef<BottomSheetBase>(null)\n\n const onClose = useCallback(() => {\n ref.current?.close()\n }, [])\n\n useEffect(() => {\n const hasSuccessFlag = hasEnumFlag(status, RouteExecutionStatus.Done)\n const hasFailedFlag = hasEnumFlag(status, RouteExecutionStatus.Failed)\n if ((hasSuccessFlag || hasFailedFlag) && !ref.current?.isOpen()) {\n ref.current?.open()\n }\n }, [status])\n\n return (\n <BottomSheet ref={ref}>\n <StatusBottomSheetContent\n status={status}\n route={route}\n onClose={onClose}\n />\n </BottomSheet>\n )\n}\n\nconst StatusBottomSheetContent: React.FC<StatusBottomSheetContentProps> = ({\n status,\n route,\n onClose,\n}) => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const { setFieldValue } = useFieldActions()\n const {\n subvariant,\n subvariantOptions,\n contractSecondaryComponent,\n contractCompactComponent,\n feeConfig,\n } = useWidgetConfig()\n const { getChainById } = useAvailableChains()\n\n const ref = useRef<HTMLElement>(null)\n useSetContentHeight(ref)\n\n const toToken = {\n ...(route.steps.at(-1)?.execution?.toToken ?? route.toToken),\n amount: BigInt(\n route.steps.at(-1)?.execution?.toAmount ??\n route.steps.at(-1)?.estimate.toAmount ??\n route.toAmount\n ),\n }\n\n const cleanFields = () => {\n setFieldValue('fromAmount', '')\n setFieldValue('toAmount', '')\n }\n\n const handleDone = () => {\n cleanFields()\n navigate({ to: navigationRoutes.home, replace: true })\n }\n\n const handlePartialDone = () => {\n if (\n toToken.chainId !== route.toToken.chainId &&\n toToken.address !== route.toToken.address\n ) {\n setFieldValue(\n 'fromAmount',\n formatTokenAmount(toToken.amount, toToken.decimals),\n { isTouched: true }\n )\n setFieldValue('fromChain', toToken.chainId, { isTouched: true })\n setFieldValue('fromToken', toToken.address, { isTouched: true })\n setFieldValue('toChain', route.toToken.chainId, {\n isTouched: true,\n })\n setFieldValue('toToken', route.toToken.address, {\n isTouched: true,\n })\n } else {\n cleanFields()\n }\n navigate({ to: navigationRoutes.home, replace: true })\n }\n\n const handleClose = () => {\n cleanFields()\n onClose()\n }\n\n const handleSeeDetails = () => {\n handleClose()\n\n const transactionHash = getSourceTxHash(route)\n\n navigate({\n to: navigationRoutes.transactionDetails,\n search: {\n routeId: route.id,\n transactionHash,\n },\n replace: true,\n })\n }\n\n const transactionType =\n route.fromChainId === route.toChainId ? 'swap' : 'bridge'\n\n let title: string | undefined\n let primaryMessage: string | undefined\n let failedMessage: string | undefined\n let handlePrimaryButton = handleDone\n switch (status) {\n case RouteExecutionStatus.Done: {\n title =\n subvariant === 'custom'\n ? t(\n `success.title.${subvariantOptions?.custom ?? 'checkout'}Successful`\n )\n : t(`success.title.${transactionType}Successful`)\n handlePrimaryButton = handleDone\n break\n }\n case RouteExecutionStatus.Done | RouteExecutionStatus.Partial: {\n title = t(`success.title.${transactionType}PartiallySuccessful`)\n primaryMessage = t('success.message.exchangePartiallySuccessful', {\n tool: route.steps.at(-1)?.toolDetails.name,\n tokenSymbol: route.steps.at(-1)?.action.toToken.symbol,\n })\n handlePrimaryButton = handlePartialDone\n break\n }\n case RouteExecutionStatus.Done | RouteExecutionStatus.Refunded: {\n title = t('success.title.refundIssued')\n primaryMessage = t('success.message.exchangePartiallySuccessful', {\n tool: route.steps.at(-1)?.toolDetails.name,\n tokenSymbol: route.steps.at(-1)?.action.toToken.symbol,\n })\n break\n }\n case RouteExecutionStatus.Failed: {\n const step = route.steps.find(\n (step) => step.execution?.status === 'FAILED'\n )\n if (!step) {\n break\n }\n const action = step.execution?.actions?.find(\n (action) => action.status === 'FAILED'\n ) || {\n status: 'FAILED',\n type: 'EXECUTION' as ExecutionActionType,\n error: step.execution?.error,\n } // synthetic action to represent a failed execution with no actions\n const actionMessage = getErrorMessage(t, getChainById, step, action)\n title = actionMessage.title\n failedMessage = actionMessage.message\n handlePrimaryButton = handleClose\n break\n }\n default:\n break\n }\n\n const showContractComponent =\n subvariant === 'custom' &&\n hasEnumFlag(status, RouteExecutionStatus.Done) &&\n (contractCompactComponent || contractSecondaryComponent)\n\n const VcComponent =\n status === RouteExecutionStatus.Done ? feeConfig?._vcComponent : undefined\n\n return (\n <Box\n ref={ref}\n sx={{\n p: 3,\n }}\n >\n {!showContractComponent ? (\n <CenterContainer>\n <IconCircle status={status} sx={{ mb: 1 }}>\n {status === RouteExecutionStatus.Idle ? (\n <InfoRounded color=\"primary\" />\n ) : null}\n {status === RouteExecutionStatus.Done ? (\n <Done color=\"success\" />\n ) : null}\n {hasEnumFlag(status, RouteExecutionStatus.Partial) ||\n hasEnumFlag(status, RouteExecutionStatus.Refunded) ? (\n <WarningRounded color=\"warning\" />\n ) : null}\n {hasEnumFlag(status, RouteExecutionStatus.Failed) ? (\n <ErrorRounded color=\"error\" />\n ) : null}\n </IconCircle>\n </CenterContainer>\n ) : null}\n <CenterContainer>\n <Typography\n sx={{\n py: 1,\n fontSize: 18,\n fontWeight: 700,\n }}\n >\n {title}\n </Typography>\n </CenterContainer>\n {showContractComponent ? (\n contractCompactComponent || contractSecondaryComponent\n ) : hasEnumFlag(status, RouteExecutionStatus.Failed) && failedMessage ? (\n <Typography\n sx={{\n py: 1,\n }}\n >\n {failedMessage}\n </Typography>\n ) : hasEnumFlag(status, RouteExecutionStatus.Done) ? (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n marginTop: 2,\n marginBottom: VcComponent ? 2 : 3,\n }}\n >\n <Card\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n padding: 2,\n }}\n >\n <CardTitle sx={{ padding: 0 }}>\n {hasEnumFlag(status, RouteExecutionStatus.Refunded)\n ? t('header.refunded')\n : t('header.received')}\n </CardTitle>\n <Token token={toToken} disableDescription={false} />\n {primaryMessage && (\n <Typography\n sx={{\n color: 'text.secondary',\n fontSize: '12px',\n lineHeight: '16px',\n fontWeight: 500,\n }}\n >\n {primaryMessage}\n </Typography>\n )}\n </Card>\n {VcComponent ? <VcComponent route={route} /> : null}\n </Box>\n ) : null}\n <Box sx={{ display: 'flex', marginTop: 2, gap: 1.5 }}>\n {hasEnumFlag(status, RouteExecutionStatus.Done) ? (\n <Button variant=\"text\" onClick={handleSeeDetails} fullWidth>\n {t('button.seeDetails')}\n </Button>\n ) : null}\n <Button variant=\"contained\" fullWidth onClick={handlePrimaryButton}>\n {status === RouteExecutionStatus.Idle ? t('button.ok') : null}\n {hasEnumFlag(status, RouteExecutionStatus.Done)\n ? t('button.done')\n : null}\n {status === RouteExecutionStatus.Failed\n ? t('button.seeDetails')\n : null}\n </Button>\n </Box>\n </Box>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBottomSheet.style.js","names":[],"sources":["../../../../src/pages/TransactionPage/StatusBottomSheet.style.tsx"],"sourcesContent":["import type { Theme } from '@mui/material'\nimport { Box, styled } from '@mui/material'\nimport type React from 'react'\nimport { RouteExecutionStatus } from '../../stores/routes/types.js'\n\ntype StatusColor = RouteExecutionStatus | 'warning'\n\nconst getStatusColor = (status: StatusColor, theme: Theme) => {\n switch (status) {\n case RouteExecutionStatus.Done:\n return {\n color: theme.vars.palette.success.main,\n alpha: 0.12,\n lightDarken: 0,\n darkDarken: 0,\n }\n case RouteExecutionStatus.Failed:\n return {\n color: theme.vars.palette.error.main,\n alpha: 0.12,\n lightDarken: 0,\n darkDarken: 0,\n }\n case RouteExecutionStatus.Done | RouteExecutionStatus.Partial:\n case RouteExecutionStatus.Done | RouteExecutionStatus.Refunded:\n case 'warning':\n return {\n color: theme.vars.palette.warning.main,\n alpha: 0.48,\n lightDarken: 0.32,\n darkDarken: 0,\n }\n default:\n return {\n color: theme.vars.palette.primary.main,\n alpha: 0.12,\n lightDarken: 0,\n darkDarken: 0,\n }\n }\n}\n\nexport const CenterContainer: React.FC<\n React.ComponentProps<typeof Box> & { status?: StatusColor }\n> = styled(Box)(() => ({\n display: 'grid',\n placeItems: 'center',\n position: 'relative',\n}))\n\nexport const IconCircle: React.FC<\n React.ComponentProps<typeof Box> & { status?: StatusColor }\n> = styled(Box, {\n shouldForwardProp: (prop) => prop !== 'status',\n})<{ status?: StatusColor }>(\n ({ theme, status = RouteExecutionStatus.Idle }) => {\n const statusConfig = getStatusColor(status, theme)\n\n return {\n backgroundColor: `color-mix(in srgb, ${statusConfig.color} ${statusConfig.alpha * 100}%, transparent)`,\n borderRadius: '50%',\n width: 72,\n height: 72,\n display: 'grid',\n position: 'relative',\n placeItems: 'center',\n '& > svg': {\n color: `color-mix(in srgb, ${statusConfig.color} ${(1 - statusConfig.lightDarken) * 100}%, black)`,\n width: 36,\n height: 36,\n },\n ...theme.applyStyles('dark', {\n '& > svg': {\n color: `color-mix(in srgb, ${statusConfig.color} ${(1 - statusConfig.darkDarken) * 100}%, black)`,\n width: 36,\n height: 36,\n },\n }),\n }\n }\n)\n"],"mappings":";;AAOA,MAAM,kBAAkB,QAAqB,UAAiB;
|
|
1
|
+
{"version":3,"file":"StatusBottomSheet.style.js","names":[],"sources":["../../../../src/pages/TransactionPage/StatusBottomSheet.style.tsx"],"sourcesContent":["import type { Theme } from '@mui/material'\nimport { Box, styled } from '@mui/material'\nimport type React from 'react'\nimport { RouteExecutionStatus } from '../../stores/routes/types.js'\n\ntype StatusColor = RouteExecutionStatus | 'warning'\n\nconst getStatusColor = (status: StatusColor, theme: Theme) => {\n switch (status) {\n case RouteExecutionStatus.Done:\n return {\n color: theme.vars.palette.success.main,\n alpha: 0.12,\n lightDarken: 0,\n darkDarken: 0,\n }\n case RouteExecutionStatus.Failed:\n return {\n color: theme.vars.palette.error.main,\n alpha: 0.12,\n lightDarken: 0,\n darkDarken: 0,\n }\n case RouteExecutionStatus.Done | RouteExecutionStatus.Partial:\n case RouteExecutionStatus.Done | RouteExecutionStatus.Refunded:\n case 'warning':\n return {\n color: theme.vars.palette.warning.main,\n alpha: 0.48,\n lightDarken: 0.32,\n darkDarken: 0,\n }\n default:\n return {\n color: theme.vars.palette.primary.main,\n alpha: 0.12,\n lightDarken: 0,\n darkDarken: 0,\n }\n }\n}\n\nexport const CenterContainer: React.FC<\n React.ComponentProps<typeof Box> & { status?: StatusColor }\n> = styled(Box)(() => ({\n display: 'grid',\n placeItems: 'center',\n position: 'relative',\n}))\n\nexport const IconCircle: React.FC<\n React.ComponentProps<typeof Box> & { status?: StatusColor }\n> = styled(Box, {\n shouldForwardProp: (prop) => prop !== 'status',\n})<{ status?: StatusColor }>(\n ({ theme, status = RouteExecutionStatus.Idle }) => {\n const statusConfig = getStatusColor(status, theme)\n\n return {\n backgroundColor: `color-mix(in srgb, ${statusConfig.color} ${statusConfig.alpha * 100}%, transparent)`,\n borderRadius: '50%',\n width: 72,\n height: 72,\n display: 'grid',\n position: 'relative',\n placeItems: 'center',\n '& > svg': {\n color: `color-mix(in srgb, ${statusConfig.color} ${(1 - statusConfig.lightDarken) * 100}%, black)`,\n width: 36,\n height: 36,\n },\n ...theme.applyStyles('dark', {\n '& > svg': {\n color: `color-mix(in srgb, ${statusConfig.color} ${(1 - statusConfig.darkDarken) * 100}%, black)`,\n width: 36,\n height: 36,\n },\n }),\n }\n }\n)\n"],"mappings":";;AAOA,MAAM,kBAAkB,QAAqB,UAAiB;CAC5D,QAAQ,QAAR;EACE,KAAA,GACE,OAAO;GACL,OAAO,MAAM,KAAK,QAAQ,QAAQ;GAClC,OAAO;GACP,aAAa;GACb,YAAY;GACb;EACH,KAAA,GACE,OAAO;GACL,OAAO,MAAM,KAAK,QAAQ,MAAM;GAChC,OAAO;GACP,aAAa;GACb,YAAY;GACb;EACH,KAAA;EACA,KAAA;EACA,KAAK,WACH,OAAO;GACL,OAAO,MAAM,KAAK,QAAQ,QAAQ;GAClC,OAAO;GACP,aAAa;GACb,YAAY;GACb;EACH,SACE,OAAO;GACL,OAAO,MAAM,KAAK,QAAQ,QAAQ;GAClC,OAAO;GACP,aAAa;GACb,YAAY;GACb;;;AAIP,MAAa,kBAET,OAAO,IAAI,QAAQ;CACrB,SAAS;CACT,YAAY;CACZ,UAAU;CACX,EAAE;AAEH,MAAa,aAET,OAAO,KAAK,EACd,oBAAoB,SAAS,SAAS,UACvC,CAAC,EACC,EAAE,OAAO,SAAA,QAAyC;CACjD,MAAM,eAAe,eAAe,QAAQ,MAAM;CAElD,OAAO;EACL,iBAAiB,sBAAsB,aAAa,MAAM,GAAG,aAAa,QAAQ,IAAI;EACtF,cAAc;EACd,OAAO;EACP,QAAQ;EACR,SAAS;EACT,UAAU;EACV,YAAY;EACZ,WAAW;GACT,OAAO,sBAAsB,aAAa,MAAM,IAAI,IAAI,aAAa,eAAe,IAAI;GACxF,OAAO;GACP,QAAQ;GACT;EACD,GAAG,MAAM,YAAY,QAAQ,EAC3B,WAAW;GACT,OAAO,sBAAsB,aAAa,MAAM,IAAI,IAAI,aAAa,cAAc,IAAI;GACvF,OAAO;GACP,QAAQ;GACT,EACF,CAAC;EACH;EAEJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenValueBottomSheet.js","names":[],"sources":["../../../../src/pages/TransactionPage/TokenValueBottomSheet.tsx"],"sourcesContent":["import type { Route } from '@lifi/sdk'\nimport WarningRounded from '@mui/icons-material/WarningRounded'\nimport {\n Box,\n Button,\n Checkbox,\n FormControlLabel,\n Typography,\n} from '@mui/material'\nimport type { ForwardRefExoticComponent, RefAttributes, RefObject } from 'react'\nimport { forwardRef, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { BottomSheet } from '../../components/BottomSheet/BottomSheet.js'\nimport type { BottomSheetBase } from '../../components/BottomSheet/types.js'\nimport { FeeBreakdownTooltip } from '../../components/FeeBreakdownTooltip.js'\nimport { useSetContentHeight } from '../../hooks/useSetContentHeight.js'\nimport { getAccumulatedFeeCostsBreakdown } from '../../utils/fees.js'\nimport { CenterContainer, IconCircle } from './StatusBottomSheet.style.js'\nimport { calculateValueLossPercentage } from './utils.js'\n\ninterface TokenValueBottomSheetProps {\n route: Route\n onContinue(): void\n onCancel?(): void\n}\n\nexport const TokenValueBottomSheet: ForwardRefExoticComponent<\n TokenValueBottomSheetProps & RefAttributes<BottomSheetBase>\n> = forwardRef<BottomSheetBase, TokenValueBottomSheetProps>(\n ({ route, onContinue, onCancel }, ref) => {\n const handleCancel = () => {\n ;(ref as RefObject<BottomSheetBase>).current?.close()\n onCancel?.()\n }\n\n return (\n <BottomSheet ref={ref} onClose={onCancel}>\n <TokenValueBottomSheetContent\n route={route}\n onContinue={onContinue}\n onCancel={handleCancel}\n />\n </BottomSheet>\n )\n }\n)\n\nconst TokenValueBottomSheetContent: React.FC<TokenValueBottomSheetProps> = ({\n route,\n onCancel,\n onContinue,\n}) => {\n const [accepted, setAccepted] = useState(false)\n const { t } = useTranslation()\n const ref = useRef<HTMLElement>(null)\n useSetContentHeight(ref)\n const { gasCosts, feeCosts, gasCostUSD, feeCostUSD } =\n getAccumulatedFeeCostsBreakdown(route)\n const fromAmountUSD = Number.parseFloat(route.fromAmountUSD)\n const toAmountUSD = Number.parseFloat(route.toAmountUSD)\n return (\n <Box\n ref={ref}\n sx={{\n p: 3,\n }}\n >\n <CenterContainer>\n <IconCircle status=\"warning\" sx={{ mb: 1 }}>\n <WarningRounded color=\"warning\" />\n </IconCircle>\n <Typography\n sx={{\n py: 1,\n fontSize: 18,\n fontWeight: 700,\n }}\n >\n {t('warning.title.highValueLoss')}\n </Typography>\n </CenterContainer>\n <Typography\n sx={{\n py: 1,\n }}\n >\n {t('warning.message.highValueLoss')}\n </Typography>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mt: 1,\n }}\n >\n <Typography>{t('main.sending')}</Typography>\n <Typography\n sx={{\n fontWeight: 600,\n }}\n >\n {t('format.currency', { value: route.fromAmountUSD })}\n </Typography>\n </Box>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mt: 0.25,\n }}\n >\n <Typography>{t('main.fees.network')}</Typography>\n <FeeBreakdownTooltip gasCosts={gasCosts} gasless={!gasCostUSD}>\n <Typography\n sx={{\n fontWeight: 600,\n }}\n >\n {!gasCostUSD\n ? t('main.fees.free')\n : t('format.currency', { value: gasCostUSD })}\n </Typography>\n </FeeBreakdownTooltip>\n </Box>\n {feeCostUSD ? (\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mt: 0.25,\n }}\n >\n <Typography>{t('main.fees.provider')}</Typography>\n <FeeBreakdownTooltip feeCosts={feeCosts}>\n <Typography\n sx={{\n fontWeight: 600,\n }}\n >\n {t('format.currency', { value: feeCostUSD })}\n </Typography>\n </FeeBreakdownTooltip>\n </Box>\n ) : null}\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mt: 0.25,\n }}\n >\n <Typography>{t('main.receiving')}</Typography>\n <Typography\n sx={{\n fontWeight: 600,\n }}\n >\n {t('format.currency', { value: route.toAmountUSD })}\n </Typography>\n </Box>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mt: 0.25,\n }}\n >\n <Typography>{t('main.valueLoss')}</Typography>\n <Typography\n sx={{\n fontWeight: 600,\n }}\n >\n {calculateValueLossPercentage(\n fromAmountUSD,\n toAmountUSD,\n gasCostUSD,\n feeCostUSD\n )}\n %\n </Typography>\n </Box>\n <FormControlLabel\n control={\n <Checkbox\n checked={accepted}\n onChange={(_, checked) => setAccepted(checked)}\n />\n }\n label={t('warning.checkbox.highValueLoss')}\n sx={{ mt: 1 }}\n />\n <Box\n sx={{\n display: 'flex',\n mt: 1,\n }}\n >\n <Button variant=\"text\" onClick={onCancel} fullWidth>\n {t('button.cancel')}\n </Button>\n <Box\n sx={{\n display: 'flex',\n p: 1,\n }}\n />\n <Button\n variant=\"contained\"\n onClick={onContinue}\n disabled={!accepted}\n fullWidth\n >\n {t('button.continue')}\n </Button>\n </Box>\n </Box>\n )\n}\n"],"mappings":";;;;;;;;;;;;AA0BA,MAAa,wBAET,YACD,EAAE,OAAO,YAAY,YAAY,QAAQ;CACxC,MAAM,qBAAqB;
|
|
1
|
+
{"version":3,"file":"TokenValueBottomSheet.js","names":[],"sources":["../../../../src/pages/TransactionPage/TokenValueBottomSheet.tsx"],"sourcesContent":["import type { Route } from '@lifi/sdk'\nimport WarningRounded from '@mui/icons-material/WarningRounded'\nimport {\n Box,\n Button,\n Checkbox,\n FormControlLabel,\n Typography,\n} from '@mui/material'\nimport type { ForwardRefExoticComponent, RefAttributes, RefObject } from 'react'\nimport { forwardRef, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { BottomSheet } from '../../components/BottomSheet/BottomSheet.js'\nimport type { BottomSheetBase } from '../../components/BottomSheet/types.js'\nimport { FeeBreakdownTooltip } from '../../components/FeeBreakdownTooltip.js'\nimport { useSetContentHeight } from '../../hooks/useSetContentHeight.js'\nimport { getAccumulatedFeeCostsBreakdown } from '../../utils/fees.js'\nimport { CenterContainer, IconCircle } from './StatusBottomSheet.style.js'\nimport { calculateValueLossPercentage } from './utils.js'\n\ninterface TokenValueBottomSheetProps {\n route: Route\n onContinue(): void\n onCancel?(): void\n}\n\nexport const TokenValueBottomSheet: ForwardRefExoticComponent<\n TokenValueBottomSheetProps & RefAttributes<BottomSheetBase>\n> = forwardRef<BottomSheetBase, TokenValueBottomSheetProps>(\n ({ route, onContinue, onCancel }, ref) => {\n const handleCancel = () => {\n ;(ref as RefObject<BottomSheetBase>).current?.close()\n onCancel?.()\n }\n\n return (\n <BottomSheet ref={ref} onClose={onCancel}>\n <TokenValueBottomSheetContent\n route={route}\n onContinue={onContinue}\n onCancel={handleCancel}\n />\n </BottomSheet>\n )\n }\n)\n\nconst TokenValueBottomSheetContent: React.FC<TokenValueBottomSheetProps> = ({\n route,\n onCancel,\n onContinue,\n}) => {\n const [accepted, setAccepted] = useState(false)\n const { t } = useTranslation()\n const ref = useRef<HTMLElement>(null)\n useSetContentHeight(ref)\n const { gasCosts, feeCosts, gasCostUSD, feeCostUSD } =\n getAccumulatedFeeCostsBreakdown(route)\n const fromAmountUSD = Number.parseFloat(route.fromAmountUSD)\n const toAmountUSD = Number.parseFloat(route.toAmountUSD)\n return (\n <Box\n ref={ref}\n sx={{\n p: 3,\n }}\n >\n <CenterContainer>\n <IconCircle status=\"warning\" sx={{ mb: 1 }}>\n <WarningRounded color=\"warning\" />\n </IconCircle>\n <Typography\n sx={{\n py: 1,\n fontSize: 18,\n fontWeight: 700,\n }}\n >\n {t('warning.title.highValueLoss')}\n </Typography>\n </CenterContainer>\n <Typography\n sx={{\n py: 1,\n }}\n >\n {t('warning.message.highValueLoss')}\n </Typography>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mt: 1,\n }}\n >\n <Typography>{t('main.sending')}</Typography>\n <Typography\n sx={{\n fontWeight: 600,\n }}\n >\n {t('format.currency', { value: route.fromAmountUSD })}\n </Typography>\n </Box>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mt: 0.25,\n }}\n >\n <Typography>{t('main.fees.network')}</Typography>\n <FeeBreakdownTooltip gasCosts={gasCosts} gasless={!gasCostUSD}>\n <Typography\n sx={{\n fontWeight: 600,\n }}\n >\n {!gasCostUSD\n ? t('main.fees.free')\n : t('format.currency', { value: gasCostUSD })}\n </Typography>\n </FeeBreakdownTooltip>\n </Box>\n {feeCostUSD ? (\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mt: 0.25,\n }}\n >\n <Typography>{t('main.fees.provider')}</Typography>\n <FeeBreakdownTooltip feeCosts={feeCosts}>\n <Typography\n sx={{\n fontWeight: 600,\n }}\n >\n {t('format.currency', { value: feeCostUSD })}\n </Typography>\n </FeeBreakdownTooltip>\n </Box>\n ) : null}\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mt: 0.25,\n }}\n >\n <Typography>{t('main.receiving')}</Typography>\n <Typography\n sx={{\n fontWeight: 600,\n }}\n >\n {t('format.currency', { value: route.toAmountUSD })}\n </Typography>\n </Box>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n mt: 0.25,\n }}\n >\n <Typography>{t('main.valueLoss')}</Typography>\n <Typography\n sx={{\n fontWeight: 600,\n }}\n >\n {calculateValueLossPercentage(\n fromAmountUSD,\n toAmountUSD,\n gasCostUSD,\n feeCostUSD\n )}\n %\n </Typography>\n </Box>\n <FormControlLabel\n control={\n <Checkbox\n checked={accepted}\n onChange={(_, checked) => setAccepted(checked)}\n />\n }\n label={t('warning.checkbox.highValueLoss')}\n sx={{ mt: 1 }}\n />\n <Box\n sx={{\n display: 'flex',\n mt: 1,\n }}\n >\n <Button variant=\"text\" onClick={onCancel} fullWidth>\n {t('button.cancel')}\n </Button>\n <Box\n sx={{\n display: 'flex',\n p: 1,\n }}\n />\n <Button\n variant=\"contained\"\n onClick={onContinue}\n disabled={!accepted}\n fullWidth\n >\n {t('button.continue')}\n </Button>\n </Box>\n </Box>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionPage.js","names":[],"sources":["../../../../src/pages/TransactionPage/TransactionPage.tsx"],"sourcesContent":["import type { ExchangeRateUpdateParams } from '@lifi/sdk'\nimport Delete from '@mui/icons-material/Delete'\nimport { Box, Button, Tooltip } from '@mui/material'\nimport { useLocation, useNavigate } from '@tanstack/react-router'\nimport { type JSX, useMemo, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport type { BottomSheetBase } from '../../components/BottomSheet/types.js'\nimport { ContractComponent } from '../../components/ContractComponent/ContractComponent.js'\nimport { WarningMessages } from '../../components/Messages/WarningMessages.js'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { getStepList } from '../../components/Step/StepList.js'\nimport { TransactionDetails } from '../../components/TransactionDetails.js'\nimport { useAddressActivity } from '../../hooks/useAddressActivity.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useNavigateBack } from '../../hooks/useNavigateBack.js'\nimport { useRouteExecution } from '../../hooks/useRouteExecution.js'\nimport { useWidgetEvents } from '../../hooks/useWidgetEvents.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { useFieldActions } from '../../stores/form/useFieldActions.js'\nimport { useHeaderStore } from '../../stores/header/useHeaderStore.js'\nimport { RouteExecutionStatus } from '../../stores/routes/types.js'\nimport { WidgetEvent } from '../../types/events.js'\nimport { HiddenUI } from '../../types/widget.js'\nimport { getAccumulatedFeeCostsBreakdown } from '../../utils/fees.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { ConfirmToAddressSheet } from './ConfirmToAddressSheet.js'\nimport type { ExchangeRateBottomSheetBase } from './ExchangeRateBottomSheet.js'\nimport { ExchangeRateBottomSheet } from './ExchangeRateBottomSheet.js'\nimport { RouteTracker } from './RouteTracker.js'\nimport { StartTransactionButton } from './StartTransactionButton.js'\nimport { StatusBottomSheet } from './StatusBottomSheet.js'\nimport { TokenValueBottomSheet } from './TokenValueBottomSheet.js'\nimport {\n calculateValueLossPercentage,\n getTokenValueLossThreshold,\n} from './utils.js'\n\nexport const TransactionPage = (): JSX.Element | null => {\n const { t } = useTranslation()\n const { setFieldValue } = useFieldActions()\n const emitter = useWidgetEvents()\n const setBackAction = useHeaderStore((state) => state.setBackAction)\n const navigate = useNavigate()\n const navigateBack = useNavigateBack()\n const {\n subvariant,\n subvariantOptions,\n contractSecondaryComponent,\n hiddenUI,\n } = useWidgetConfig()\n const { search }: any = useLocation()\n const stateRouteId = search?.routeId\n const [routeId, setRouteId] = useState<string>(stateRouteId)\n const [routeRefreshing, setRouteRefreshing] = useState(false)\n\n const tokenValueBottomSheetRef = useRef<BottomSheetBase>(null)\n const exchangeRateBottomSheetRef = useRef<ExchangeRateBottomSheetBase>(null)\n const confirmToAddressSheetRef = useRef<BottomSheetBase>(null)\n\n const onAcceptExchangeRateUpdate = (\n resolver: (value: boolean) => void,\n data: ExchangeRateUpdateParams\n ) => {\n exchangeRateBottomSheetRef.current?.open(resolver, data)\n }\n\n const { route, status, executeRoute, restartRoute, deleteRoute } =\n useRouteExecution({\n routeId: routeId,\n onAcceptExchangeRateUpdate,\n })\n\n const {\n toAddress,\n hasActivity,\n isLoading: isLoadingAddressActivity,\n isFetched: isActivityAddressFetched,\n } = useAddressActivity(route?.toChainId)\n\n const getHeaderTitle = () => {\n if (subvariant === 'custom') {\n return t(`header.${subvariantOptions?.custom ?? 'checkout'}`)\n }\n if (route) {\n const transactionType =\n route.fromChainId === route.toChainId ? 'swap' : 'bridge'\n return status === RouteExecutionStatus.Idle\n ? t(`button.${transactionType}Review`)\n : t(`header.${transactionType}`)\n }\n\n return t('header.exchange')\n }\n\n const headerAction = useMemo(\n () =>\n status === RouteExecutionStatus.Idle ? (\n <RouteTracker\n observableRouteId={stateRouteId}\n onChange={setRouteId}\n onFetching={setRouteRefreshing}\n />\n ) : undefined,\n [stateRouteId, status]\n )\n\n useHeader(getHeaderTitle(), headerAction)\n\n if (!route) {\n return null\n }\n\n const handleExecuteRoute = () => {\n if (tokenValueBottomSheetRef.current?.isOpen()) {\n const { gasCostUSD, feeCostUSD } = getAccumulatedFeeCostsBreakdown(route)\n const fromAmountUSD = Number.parseFloat(route.fromAmountUSD)\n const toAmountUSD = Number.parseFloat(route.toAmountUSD)\n emitter.emit(WidgetEvent.RouteHighValueLoss, {\n fromAmountUSD,\n toAmountUSD,\n gasCostUSD,\n feeCostUSD,\n valueLoss: calculateValueLossPercentage(\n fromAmountUSD,\n toAmountUSD,\n gasCostUSD,\n feeCostUSD\n ),\n })\n }\n tokenValueBottomSheetRef.current?.close()\n executeRoute()\n setFieldValue('fromAmount', '')\n if (subvariant === 'custom') {\n setFieldValue('fromToken', '')\n setFieldValue('toToken', '')\n }\n // Once transaction is started, set the back action to navigate to the home page\n setBackAction(() => {\n navigate({ to: navigationRoutes.home, replace: true })\n })\n }\n\n const handleStartClick = async () => {\n if (status === RouteExecutionStatus.Idle) {\n if (\n toAddress &&\n !hasActivity &&\n !isLoadingAddressActivity &&\n isActivityAddressFetched &&\n !hiddenUI?.includes(HiddenUI.LowAddressActivityConfirmation)\n ) {\n confirmToAddressSheetRef.current?.open()\n return\n }\n\n const { gasCostUSD, feeCostUSD } = getAccumulatedFeeCostsBreakdown(route)\n const fromAmountUSD = Number.parseFloat(route.fromAmountUSD)\n const toAmountUSD = Number.parseFloat(route.toAmountUSD)\n const tokenValueLossThresholdExceeded = getTokenValueLossThreshold(\n fromAmountUSD,\n toAmountUSD,\n gasCostUSD,\n feeCostUSD\n )\n if (tokenValueLossThresholdExceeded && subvariant !== 'custom') {\n tokenValueBottomSheetRef.current?.open()\n } else {\n handleExecuteRoute()\n }\n }\n if (status === RouteExecutionStatus.Failed) {\n restartRoute()\n }\n }\n\n const handleRemoveRoute = () => {\n navigateBack()\n deleteRoute()\n }\n\n const getButtonText = (): string => {\n switch (status) {\n case RouteExecutionStatus.Idle:\n switch (subvariant) {\n case 'custom':\n return subvariantOptions?.custom === 'deposit'\n ? t('button.deposit')\n : t('button.buy')\n case 'refuel':\n return t('button.startBridging')\n default: {\n const transactionType =\n route.fromChainId === route.toChainId ? 'Swapping' : 'Bridging'\n return t(`button.start${transactionType}`)\n }\n }\n case RouteExecutionStatus.Failed:\n return t('button.tryAgain')\n default:\n return ''\n }\n }\n\n return (\n <PageContainer bottomGutters>\n {getStepList(route, subvariant)}\n {subvariant === 'custom' && contractSecondaryComponent ? (\n <ContractComponent sx={{ marginTop: 2 }}>\n {contractSecondaryComponent}\n </ContractComponent>\n ) : null}\n <TransactionDetails route={route} sx={{ marginTop: 2 }} />\n {status === RouteExecutionStatus.Idle ||\n status === RouteExecutionStatus.Failed ? (\n <>\n <WarningMessages sx={{ mt: 2 }} route={route} allowInteraction />\n <Box\n sx={{\n mt: 2,\n display: 'flex',\n }}\n >\n <StartTransactionButton\n text={getButtonText()}\n onClick={handleStartClick}\n route={route}\n loading={routeRefreshing || isLoadingAddressActivity}\n />\n {status === RouteExecutionStatus.Failed ? (\n <Tooltip\n title={t('button.clearTransaction')}\n placement=\"bottom-end\"\n >\n <Button\n onClick={handleRemoveRoute}\n sx={{\n minWidth: 48,\n marginLeft: 1,\n }}\n >\n <Delete />\n </Button>\n </Tooltip>\n ) : null}\n </Box>\n </>\n ) : null}\n {status ? <StatusBottomSheet status={status} route={route} /> : null}\n {subvariant !== 'custom' ? (\n <TokenValueBottomSheet\n route={route}\n ref={tokenValueBottomSheetRef}\n onContinue={handleExecuteRoute}\n />\n ) : null}\n <ExchangeRateBottomSheet ref={exchangeRateBottomSheetRef} />\n {!hiddenUI?.includes(HiddenUI.LowAddressActivityConfirmation) ? (\n <ConfirmToAddressSheet\n ref={confirmToAddressSheetRef}\n onContinue={handleExecuteRoute}\n toAddress={toAddress!}\n toChainId={route.toChainId!}\n />\n ) : null}\n </PageContainer>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TransactionPage.js","names":[],"sources":["../../../../src/pages/TransactionPage/TransactionPage.tsx"],"sourcesContent":["import type { ExchangeRateUpdateParams } from '@lifi/sdk'\nimport Delete from '@mui/icons-material/Delete'\nimport { Box, Button, Tooltip } from '@mui/material'\nimport { useLocation, useNavigate } from '@tanstack/react-router'\nimport { type JSX, useMemo, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport type { BottomSheetBase } from '../../components/BottomSheet/types.js'\nimport { ContractComponent } from '../../components/ContractComponent/ContractComponent.js'\nimport { WarningMessages } from '../../components/Messages/WarningMessages.js'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { getStepList } from '../../components/Step/StepList.js'\nimport { TransactionDetails } from '../../components/TransactionDetails.js'\nimport { useAddressActivity } from '../../hooks/useAddressActivity.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useNavigateBack } from '../../hooks/useNavigateBack.js'\nimport { useRouteExecution } from '../../hooks/useRouteExecution.js'\nimport { useWidgetEvents } from '../../hooks/useWidgetEvents.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { useFieldActions } from '../../stores/form/useFieldActions.js'\nimport { useHeaderStore } from '../../stores/header/useHeaderStore.js'\nimport { RouteExecutionStatus } from '../../stores/routes/types.js'\nimport { WidgetEvent } from '../../types/events.js'\nimport { HiddenUI } from '../../types/widget.js'\nimport { getAccumulatedFeeCostsBreakdown } from '../../utils/fees.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { ConfirmToAddressSheet } from './ConfirmToAddressSheet.js'\nimport type { ExchangeRateBottomSheetBase } from './ExchangeRateBottomSheet.js'\nimport { ExchangeRateBottomSheet } from './ExchangeRateBottomSheet.js'\nimport { RouteTracker } from './RouteTracker.js'\nimport { StartTransactionButton } from './StartTransactionButton.js'\nimport { StatusBottomSheet } from './StatusBottomSheet.js'\nimport { TokenValueBottomSheet } from './TokenValueBottomSheet.js'\nimport {\n calculateValueLossPercentage,\n getTokenValueLossThreshold,\n} from './utils.js'\n\nexport const TransactionPage = (): JSX.Element | null => {\n const { t } = useTranslation()\n const { setFieldValue } = useFieldActions()\n const emitter = useWidgetEvents()\n const setBackAction = useHeaderStore((state) => state.setBackAction)\n const navigate = useNavigate()\n const navigateBack = useNavigateBack()\n const {\n subvariant,\n subvariantOptions,\n contractSecondaryComponent,\n hiddenUI,\n } = useWidgetConfig()\n const { search }: any = useLocation()\n const stateRouteId = search?.routeId\n const [routeId, setRouteId] = useState<string>(stateRouteId)\n const [routeRefreshing, setRouteRefreshing] = useState(false)\n\n const tokenValueBottomSheetRef = useRef<BottomSheetBase>(null)\n const exchangeRateBottomSheetRef = useRef<ExchangeRateBottomSheetBase>(null)\n const confirmToAddressSheetRef = useRef<BottomSheetBase>(null)\n\n const onAcceptExchangeRateUpdate = (\n resolver: (value: boolean) => void,\n data: ExchangeRateUpdateParams\n ) => {\n exchangeRateBottomSheetRef.current?.open(resolver, data)\n }\n\n const { route, status, executeRoute, restartRoute, deleteRoute } =\n useRouteExecution({\n routeId: routeId,\n onAcceptExchangeRateUpdate,\n })\n\n const {\n toAddress,\n hasActivity,\n isLoading: isLoadingAddressActivity,\n isFetched: isActivityAddressFetched,\n } = useAddressActivity(route?.toChainId)\n\n const getHeaderTitle = () => {\n if (subvariant === 'custom') {\n return t(`header.${subvariantOptions?.custom ?? 'checkout'}`)\n }\n if (route) {\n const transactionType =\n route.fromChainId === route.toChainId ? 'swap' : 'bridge'\n return status === RouteExecutionStatus.Idle\n ? t(`button.${transactionType}Review`)\n : t(`header.${transactionType}`)\n }\n\n return t('header.exchange')\n }\n\n const headerAction = useMemo(\n () =>\n status === RouteExecutionStatus.Idle ? (\n <RouteTracker\n observableRouteId={stateRouteId}\n onChange={setRouteId}\n onFetching={setRouteRefreshing}\n />\n ) : undefined,\n [stateRouteId, status]\n )\n\n useHeader(getHeaderTitle(), headerAction)\n\n if (!route) {\n return null\n }\n\n const handleExecuteRoute = () => {\n if (tokenValueBottomSheetRef.current?.isOpen()) {\n const { gasCostUSD, feeCostUSD } = getAccumulatedFeeCostsBreakdown(route)\n const fromAmountUSD = Number.parseFloat(route.fromAmountUSD)\n const toAmountUSD = Number.parseFloat(route.toAmountUSD)\n emitter.emit(WidgetEvent.RouteHighValueLoss, {\n fromAmountUSD,\n toAmountUSD,\n gasCostUSD,\n feeCostUSD,\n valueLoss: calculateValueLossPercentage(\n fromAmountUSD,\n toAmountUSD,\n gasCostUSD,\n feeCostUSD\n ),\n })\n }\n tokenValueBottomSheetRef.current?.close()\n executeRoute()\n setFieldValue('fromAmount', '')\n if (subvariant === 'custom') {\n setFieldValue('fromToken', '')\n setFieldValue('toToken', '')\n }\n // Once transaction is started, set the back action to navigate to the home page\n setBackAction(() => {\n navigate({ to: navigationRoutes.home, replace: true })\n })\n }\n\n const handleStartClick = async () => {\n if (status === RouteExecutionStatus.Idle) {\n if (\n toAddress &&\n !hasActivity &&\n !isLoadingAddressActivity &&\n isActivityAddressFetched &&\n !hiddenUI?.includes(HiddenUI.LowAddressActivityConfirmation)\n ) {\n confirmToAddressSheetRef.current?.open()\n return\n }\n\n const { gasCostUSD, feeCostUSD } = getAccumulatedFeeCostsBreakdown(route)\n const fromAmountUSD = Number.parseFloat(route.fromAmountUSD)\n const toAmountUSD = Number.parseFloat(route.toAmountUSD)\n const tokenValueLossThresholdExceeded = getTokenValueLossThreshold(\n fromAmountUSD,\n toAmountUSD,\n gasCostUSD,\n feeCostUSD\n )\n if (tokenValueLossThresholdExceeded && subvariant !== 'custom') {\n tokenValueBottomSheetRef.current?.open()\n } else {\n handleExecuteRoute()\n }\n }\n if (status === RouteExecutionStatus.Failed) {\n restartRoute()\n }\n }\n\n const handleRemoveRoute = () => {\n navigateBack()\n deleteRoute()\n }\n\n const getButtonText = (): string => {\n switch (status) {\n case RouteExecutionStatus.Idle:\n switch (subvariant) {\n case 'custom':\n return subvariantOptions?.custom === 'deposit'\n ? t('button.deposit')\n : t('button.buy')\n case 'refuel':\n return t('button.startBridging')\n default: {\n const transactionType =\n route.fromChainId === route.toChainId ? 'Swapping' : 'Bridging'\n return t(`button.start${transactionType}`)\n }\n }\n case RouteExecutionStatus.Failed:\n return t('button.tryAgain')\n default:\n return ''\n }\n }\n\n return (\n <PageContainer bottomGutters>\n {getStepList(route, subvariant)}\n {subvariant === 'custom' && contractSecondaryComponent ? (\n <ContractComponent sx={{ marginTop: 2 }}>\n {contractSecondaryComponent}\n </ContractComponent>\n ) : null}\n <TransactionDetails route={route} sx={{ marginTop: 2 }} />\n {status === RouteExecutionStatus.Idle ||\n status === RouteExecutionStatus.Failed ? (\n <>\n <WarningMessages sx={{ mt: 2 }} route={route} allowInteraction />\n <Box\n sx={{\n mt: 2,\n display: 'flex',\n }}\n >\n <StartTransactionButton\n text={getButtonText()}\n onClick={handleStartClick}\n route={route}\n loading={routeRefreshing || isLoadingAddressActivity}\n />\n {status === RouteExecutionStatus.Failed ? (\n <Tooltip\n title={t('button.clearTransaction')}\n placement=\"bottom-end\"\n >\n <Button\n onClick={handleRemoveRoute}\n sx={{\n minWidth: 48,\n marginLeft: 1,\n }}\n >\n <Delete />\n </Button>\n </Tooltip>\n ) : null}\n </Box>\n </>\n ) : null}\n {status ? <StatusBottomSheet status={status} route={route} /> : null}\n {subvariant !== 'custom' ? (\n <TokenValueBottomSheet\n route={route}\n ref={tokenValueBottomSheetRef}\n onContinue={handleExecuteRoute}\n />\n ) : null}\n <ExchangeRateBottomSheet ref={exchangeRateBottomSheetRef} />\n {!hiddenUI?.includes(HiddenUI.LowAddressActivityConfirmation) ? (\n <ConfirmToAddressSheet\n ref={confirmToAddressSheetRef}\n onContinue={handleExecuteRoute}\n toAddress={toAddress!}\n toChainId={route.toChainId!}\n />\n ) : null}\n </PageContainer>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":[],"sources":["../../../../src/pages/TransactionPage/utils.ts"],"sourcesContent":["export const calculateValueLossPercentage = (\n fromAmountUSD: number,\n toAmountUSD: number,\n gasCostUSD: number,\n feeCostUSD: number\n): number => {\n return Number.parseFloat(\n (\n (toAmountUSD / (fromAmountUSD + gasCostUSD + feeCostUSD) - 1) *\n 100\n ).toFixed(2)\n )\n}\n\nexport const getTokenValueLossThreshold = (\n fromAmountUSD: number,\n toAmountUSD: number,\n gasCostUSD: number,\n feeCostUSD: number\n): boolean => {\n if (!fromAmountUSD || !toAmountUSD) {\n return false\n }\n return toAmountUSD / (fromAmountUSD + gasCostUSD + feeCostUSD) < 0.9\n}\n"],"mappings":";AAAA,MAAa,gCACX,eACA,aACA,YACA,eACW;
|
|
1
|
+
{"version":3,"file":"utils.js","names":[],"sources":["../../../../src/pages/TransactionPage/utils.ts"],"sourcesContent":["export const calculateValueLossPercentage = (\n fromAmountUSD: number,\n toAmountUSD: number,\n gasCostUSD: number,\n feeCostUSD: number\n): number => {\n return Number.parseFloat(\n (\n (toAmountUSD / (fromAmountUSD + gasCostUSD + feeCostUSD) - 1) *\n 100\n ).toFixed(2)\n )\n}\n\nexport const getTokenValueLossThreshold = (\n fromAmountUSD: number,\n toAmountUSD: number,\n gasCostUSD: number,\n feeCostUSD: number\n): boolean => {\n if (!fromAmountUSD || !toAmountUSD) {\n return false\n }\n return toAmountUSD / (fromAmountUSD + gasCostUSD + feeCostUSD) < 0.9\n}\n"],"mappings":";AAAA,MAAa,gCACX,eACA,aACA,YACA,eACW;CACX,OAAO,OAAO,aAET,eAAe,gBAAgB,aAAa,cAAc,KAC3D,KACA,QAAQ,EAAE,CACb;;AAGH,MAAa,8BACX,eACA,aACA,YACA,eACY;CACZ,IAAI,CAAC,iBAAiB,CAAC,aACrB,OAAO;CAET,OAAO,eAAe,gBAAgB,aAAa,cAAc"}
|