@lifi/widget 4.0.0-beta.14 → 4.0.0-beta.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/dist/esm/AppDefault.js +31 -29
  2. package/dist/esm/AppDefault.js.map +1 -1
  3. package/dist/esm/AppLayout.js +2 -2
  4. package/dist/esm/AppLayout.js.map +1 -1
  5. package/dist/esm/components/AmountInput/AmountInput.js +2 -2
  6. package/dist/esm/components/AmountInput/AmountInput.js.map +1 -1
  7. package/dist/esm/components/AppContainer.js +3 -3
  8. package/dist/esm/components/AppContainer.js.map +1 -1
  9. package/dist/esm/components/Chains/AllChainsAvatar.js +6 -0
  10. package/dist/esm/components/Chains/AllChainsAvatar.js.map +1 -1
  11. package/dist/esm/components/ContractComponent/ItemPrice.js +1 -1
  12. package/dist/esm/components/ContractComponent/ItemPrice.js.map +1 -1
  13. package/dist/esm/components/ContractComponent/NFT/NFTBase.js +1 -1
  14. package/dist/esm/components/ContractComponent/NFT/NFTBase.js.map +1 -1
  15. package/dist/esm/components/Expansion/Expansion.js +4 -4
  16. package/dist/esm/components/Expansion/Expansion.js.map +1 -1
  17. package/dist/esm/components/Header/ActivitiesButton.js +1 -1
  18. package/dist/esm/components/Header/ActivitiesButton.js.map +1 -1
  19. package/dist/esm/components/Header/Header.js +2 -2
  20. package/dist/esm/components/Header/Header.js.map +1 -1
  21. package/dist/esm/components/Header/NavigationHeader.js +3 -3
  22. package/dist/esm/components/Header/NavigationHeader.js.map +1 -1
  23. package/dist/esm/components/Header/WalletHeader.js +3 -3
  24. package/dist/esm/components/Header/WalletHeader.js.map +1 -1
  25. package/dist/esm/components/IconTypography.js.map +1 -1
  26. package/dist/esm/components/Messages/AlertMessage.js +1 -1
  27. package/dist/esm/components/Messages/AlertMessage.js.map +1 -1
  28. package/dist/esm/components/PageEntered.js +2 -2
  29. package/dist/esm/components/PageEntered.js.map +1 -1
  30. package/dist/esm/components/RouteCard/RouteCard.js +2 -2
  31. package/dist/esm/components/RouteCard/RouteCard.js.map +1 -1
  32. package/dist/esm/components/RouteCard/RouteCardEssentials.js +10 -4
  33. package/dist/esm/components/RouteCard/RouteCardEssentials.js.map +1 -1
  34. package/dist/esm/components/RouteCard/RouteToken.js +2 -2
  35. package/dist/esm/components/RouteCard/RouteToken.js.map +1 -1
  36. package/dist/esm/components/Routes/RoutesExpanded.js +3 -3
  37. package/dist/esm/components/Routes/RoutesExpanded.js.map +1 -1
  38. package/dist/esm/components/SelectChainAndToken.js +8 -5
  39. package/dist/esm/components/SelectChainAndToken.js.map +1 -1
  40. package/dist/esm/components/SelectTokenButton/SelectTokenButton.style.js +1 -2
  41. package/dist/esm/components/SelectTokenButton/SelectTokenButton.style.js.map +1 -1
  42. package/dist/esm/components/SendToWallet/SendToWalletButton.js +3 -3
  43. package/dist/esm/components/SendToWallet/SendToWalletButton.js.map +1 -1
  44. package/dist/esm/components/SendToWallet/SendToWalletExpandButton.js +3 -3
  45. package/dist/esm/components/SendToWallet/SendToWalletExpandButton.js.map +1 -1
  46. package/dist/esm/components/Step/Step.js +20 -9
  47. package/dist/esm/components/Step/Step.js.map +1 -1
  48. package/dist/esm/components/Step/StepActions.js +2 -2
  49. package/dist/esm/components/Step/StepActions.js.map +1 -1
  50. package/dist/esm/components/StepActions/StepActions.js +2 -2
  51. package/dist/esm/components/StepActions/StepActions.js.map +1 -1
  52. package/dist/esm/components/Timer/TimerContent.js +1 -0
  53. package/dist/esm/components/Timer/TimerContent.js.map +1 -1
  54. package/dist/esm/components/Token/Token.js +2 -2
  55. package/dist/esm/components/Token/Token.js.map +1 -1
  56. package/dist/esm/components/TokenList/TokenDetailsSheetContent.js +6 -4
  57. package/dist/esm/components/TokenList/TokenDetailsSheetContent.js.map +1 -1
  58. package/dist/esm/components/TokenList/TokenList.js +2 -2
  59. package/dist/esm/components/TokenList/TokenList.js.map +1 -1
  60. package/dist/esm/components/TokenList/useTokenSelect.js +2 -2
  61. package/dist/esm/components/TokenList/useTokenSelect.js.map +1 -1
  62. package/dist/esm/components/TransactionCard/ActiveTransactionCard.js +2 -3
  63. package/dist/esm/components/TransactionCard/ActiveTransactionCard.js.map +1 -1
  64. package/dist/esm/components/TransactionDetails.js +5 -2
  65. package/dist/esm/components/TransactionDetails.js.map +1 -1
  66. package/dist/esm/config/version.d.ts +1 -1
  67. package/dist/esm/config/version.js +1 -1
  68. package/dist/esm/config/version.js.map +1 -1
  69. package/dist/esm/hooks/useAddressValidation.js +3 -8
  70. package/dist/esm/hooks/useAddressValidation.js.map +1 -1
  71. package/dist/esm/hooks/useAvailableChains.js +2 -1
  72. package/dist/esm/hooks/useAvailableChains.js.map +1 -1
  73. package/dist/esm/hooks/useContactSupport.js +3 -3
  74. package/dist/esm/hooks/useContactSupport.js.map +1 -1
  75. package/dist/esm/hooks/useExplorer.js +15 -4
  76. package/dist/esm/hooks/useExplorer.js.map +1 -1
  77. package/dist/esm/hooks/useGasRecommendation.js +2 -2
  78. package/dist/esm/hooks/useGasRecommendation.js.map +1 -1
  79. package/dist/esm/hooks/useGasRefuel.js +2 -2
  80. package/dist/esm/hooks/useGasRefuel.js.map +1 -1
  81. package/dist/esm/hooks/useGasSufficiency.js +2 -2
  82. package/dist/esm/hooks/useGasSufficiency.js.map +1 -1
  83. package/dist/esm/hooks/useHasChainExpansion.js +3 -3
  84. package/dist/esm/hooks/useHasChainExpansion.js.map +1 -1
  85. package/dist/esm/hooks/useListHeight.js +2 -2
  86. package/dist/esm/hooks/useListHeight.js.map +1 -1
  87. package/dist/esm/hooks/useRouteExecution.js +5 -5
  88. package/dist/esm/hooks/useRouteExecution.js.map +1 -1
  89. package/dist/esm/hooks/useRoutes.js +4 -4
  90. package/dist/esm/hooks/useRoutes.js.map +1 -1
  91. package/dist/esm/hooks/useToAddressRequirements.js +2 -2
  92. package/dist/esm/hooks/useToAddressRequirements.js.map +1 -1
  93. package/dist/esm/hooks/useToAddressReset.js +2 -2
  94. package/dist/esm/hooks/useToAddressReset.js.map +1 -1
  95. package/dist/esm/hooks/useTokenBalances.js +2 -2
  96. package/dist/esm/hooks/useTokenBalances.js.map +1 -1
  97. package/dist/esm/hooks/useTokens.js +4 -2
  98. package/dist/esm/hooks/useTokens.js.map +1 -1
  99. package/dist/esm/hooks/useTransactionList.js +2 -3
  100. package/dist/esm/hooks/useTransactionList.js.map +1 -1
  101. package/dist/esm/i18n/en.json +3 -0
  102. package/dist/esm/pages/ActivitiesPage/ActivitiesPage.js +1 -2
  103. package/dist/esm/pages/ActivitiesPage/ActivitiesPage.js.map +1 -1
  104. package/dist/esm/pages/ActivitiesPage/ActivitiesPageMenuButton.js +1 -1
  105. package/dist/esm/pages/ActivitiesPage/ActivitiesPageMenuButton.js.map +1 -1
  106. package/dist/esm/pages/MainPage/MainPage.js +6 -6
  107. package/dist/esm/pages/MainPage/MainPage.js.map +1 -1
  108. package/dist/esm/pages/MainPage/ReviewButton.js +2 -2
  109. package/dist/esm/pages/MainPage/ReviewButton.js.map +1 -1
  110. package/dist/esm/pages/RoutesPage/RoutesPage.js +3 -3
  111. package/dist/esm/pages/RoutesPage/RoutesPage.js.map +1 -1
  112. package/dist/esm/pages/SelectTokenPage/SelectTokenPage.js +3 -3
  113. package/dist/esm/pages/SelectTokenPage/SelectTokenPage.js.map +1 -1
  114. package/dist/esm/pages/SendToWallet/BookmarksPage.js +1 -1
  115. package/dist/esm/pages/SendToWallet/BookmarksPage.js.map +1 -1
  116. package/dist/esm/pages/SendToWallet/RecentWalletsPage.js +1 -1
  117. package/dist/esm/pages/SendToWallet/RecentWalletsPage.js.map +1 -1
  118. package/dist/esm/pages/SendToWallet/SendToWalletPage.js +6 -6
  119. package/dist/esm/pages/SendToWallet/SendToWalletPage.js.map +1 -1
  120. package/dist/esm/pages/SettingsPage/BridgeAndExchangeSettings.js +2 -2
  121. package/dist/esm/pages/SettingsPage/BridgeAndExchangeSettings.js.map +1 -1
  122. package/dist/esm/pages/SettingsPage/LanguageSetting.js +2 -2
  123. package/dist/esm/pages/SettingsPage/LanguageSetting.js.map +1 -1
  124. package/dist/esm/pages/SettingsPage/SettingsPage.js +2 -2
  125. package/dist/esm/pages/SettingsPage/SettingsPage.js.map +1 -1
  126. package/dist/esm/pages/SettingsPage/ThemeSettings.js +2 -2
  127. package/dist/esm/pages/SettingsPage/ThemeSettings.js.map +1 -1
  128. package/dist/esm/pages/TransactionDetailsPage/TransferIdCard.js +2 -2
  129. package/dist/esm/pages/TransactionDetailsPage/TransferIdCard.js.map +1 -1
  130. package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.js +2 -2
  131. package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.js.map +1 -1
  132. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.js +1 -1
  133. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.js.map +1 -1
  134. package/dist/esm/pages/TransactionPage/StatusBottomSheet.js +20 -21
  135. package/dist/esm/pages/TransactionPage/StatusBottomSheet.js.map +1 -1
  136. package/dist/esm/pages/TransactionPage/StatusBottomSheet.style.js +5 -6
  137. package/dist/esm/pages/TransactionPage/StatusBottomSheet.style.js.map +1 -1
  138. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js +14 -4
  139. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js.map +1 -1
  140. package/dist/esm/pages/TransactionPage/TransactionPage.js +15 -19
  141. package/dist/esm/pages/TransactionPage/TransactionPage.js.map +1 -1
  142. package/dist/esm/providers/WalletProvider/useExternalWalletProvider.js +7 -3
  143. package/dist/esm/providers/WalletProvider/useExternalWalletProvider.js.map +1 -1
  144. package/dist/esm/stores/chains/ChainOrderStore.js +2 -2
  145. package/dist/esm/stores/chains/ChainOrderStore.js.map +1 -1
  146. package/dist/esm/stores/chains/createChainOrderStore.js +2 -2
  147. package/dist/esm/stores/chains/createChainOrderStore.js.map +1 -1
  148. package/dist/esm/stores/form/useFieldActions.js +3 -3
  149. package/dist/esm/stores/form/useFieldActions.js.map +1 -1
  150. package/dist/esm/stores/form/useFormRef.js +2 -2
  151. package/dist/esm/stores/form/useFormRef.js.map +1 -1
  152. package/dist/esm/stores/routes/createRouteExecutionStore.js +8 -9
  153. package/dist/esm/stores/routes/createRouteExecutionStore.js.map +1 -1
  154. package/dist/esm/stores/routes/useRouteExecutionIndicator.js +2 -3
  155. package/dist/esm/stores/routes/useRouteExecutionIndicator.js.map +1 -1
  156. package/dist/esm/stores/settings/createSettingsStore.js +1 -5
  157. package/dist/esm/stores/settings/createSettingsStore.js.map +1 -1
  158. package/dist/esm/stores/settings/useSettingsActions.js +2 -2
  159. package/dist/esm/stores/settings/useSettingsActions.js.map +1 -1
  160. package/dist/esm/themes/createTheme.js +4 -4
  161. package/dist/esm/themes/createTheme.js.map +1 -1
  162. package/dist/esm/types/events.d.ts +0 -5
  163. package/dist/esm/types/events.d.ts.map +1 -1
  164. package/dist/esm/types/events.js +0 -4
  165. package/dist/esm/types/events.js.map +1 -1
  166. package/dist/esm/types/widget.d.ts +1 -5
  167. package/dist/esm/types/widget.d.ts.map +1 -1
  168. package/dist/esm/types/widget.js.map +1 -1
  169. package/dist/esm/utils/elements.js +5 -12
  170. package/dist/esm/utils/elements.js.map +1 -1
  171. package/package.json +7 -7
  172. package/src/AppDefault.tsx +9 -11
  173. package/src/components/Chains/AllChainsAvatar.tsx +6 -0
  174. package/src/components/ContractComponent/ItemPrice.tsx +1 -1
  175. package/src/components/ContractComponent/NFT/NFTBase.tsx +1 -1
  176. package/src/components/Header/ActivitiesButton.tsx +1 -1
  177. package/src/components/IconTypography.ts +8 -8
  178. package/src/components/Messages/AlertMessage.tsx +1 -1
  179. package/src/components/RouteCard/RouteCardEssentials.tsx +2 -2
  180. package/src/components/SelectChainAndToken.tsx +1 -1
  181. package/src/components/Step/Step.tsx +6 -7
  182. package/src/components/Timer/TimerContent.tsx +1 -0
  183. package/src/components/Token/Token.tsx +2 -2
  184. package/src/components/TokenList/TokenDetailsSheetContent.tsx +6 -4
  185. package/src/components/TransactionCard/ActiveTransactionCard.tsx +1 -1
  186. package/src/components/TransactionDetails.tsx +1 -1
  187. package/src/config/version.ts +1 -1
  188. package/src/hooks/useAvailableChains.ts +1 -0
  189. package/src/hooks/useExplorer.ts +16 -5
  190. package/src/hooks/useTokens.ts +2 -0
  191. package/src/pages/ActivitiesPage/ActivitiesPageMenuButton.tsx +1 -1
  192. package/src/pages/MainPage/MainPage.tsx +3 -3
  193. package/src/pages/RoutesPage/RoutesPage.tsx +6 -1
  194. package/src/pages/SendToWallet/BookmarksPage.tsx +1 -1
  195. package/src/pages/SendToWallet/RecentWalletsPage.tsx +1 -1
  196. package/src/pages/TransactionPage/ExchangeRateBottomSheet.tsx +1 -1
  197. package/src/pages/TransactionPage/StatusBottomSheet.tsx +1 -1
  198. package/src/pages/TransactionPage/TokenValueBottomSheet.tsx +27 -5
  199. package/src/pages/TransactionPage/TransactionPage.tsx +2 -9
  200. package/src/providers/WalletProvider/useExternalWalletProvider.ts +9 -1
  201. package/src/stores/settings/createSettingsStore.ts +1 -9
  202. package/src/themes/createTheme.ts +4 -6
  203. package/src/types/events.ts +0 -5
  204. package/src/types/widget.ts +1 -4
  205. package/dist/esm/stores/routes/types.js +0 -14
  206. package/dist/esm/stores/routes/types.js.map +0 -1
@@ -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\" 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
+ {"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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"}
@@ -5,7 +5,6 @@ import { useFieldActions } from "../../stores/form/useFieldActions.js";
5
5
  import { formatTokenAmount } from "../../utils/format.js";
6
6
  import { Card as Card$1 } from "../../components/Card/Card.js";
7
7
  import { hasEnumFlag } from "../../utils/enum.js";
8
- import { RouteExecutionStatus } from "../../stores/routes/types.js";
9
8
  import { getSourceTxHash } from "../../stores/routes/utils.js";
10
9
  import { Token } from "../../components/Token/Token.js";
11
10
  import { getErrorMessage } from "../../utils/getErrorMessage.js";
@@ -29,8 +28,8 @@ const StatusBottomSheet = ({ status, route }) => {
29
28
  ref.current?.close();
30
29
  }, []);
31
30
  useEffect(() => {
32
- const hasSuccessFlag = hasEnumFlag(status, RouteExecutionStatus.Done);
33
- const hasFailedFlag = hasEnumFlag(status, RouteExecutionStatus.Failed);
31
+ const hasSuccessFlag = hasEnumFlag(status, 4);
32
+ const hasFailedFlag = hasEnumFlag(status, 8);
34
33
  if ((hasSuccessFlag || hasFailedFlag) && !ref.current?.isOpen()) ref.current?.open();
35
34
  }, [status]);
36
35
  return /* @__PURE__ */ jsx(BottomSheet, {
@@ -100,11 +99,11 @@ const StatusBottomSheetContent = ({ status, route, onClose }) => {
100
99
  let failedMessage;
101
100
  let handlePrimaryButton = handleDone;
102
101
  switch (status) {
103
- case RouteExecutionStatus.Done:
102
+ case 4:
104
103
  title = subvariant === "custom" ? t(`success.title.${subvariantOptions?.custom ?? "checkout"}Successful`) : t(`success.title.${transactionType}Successful`);
105
104
  handlePrimaryButton = handleDone;
106
105
  break;
107
- case RouteExecutionStatus.Done | RouteExecutionStatus.Partial:
106
+ case 20:
108
107
  title = t(`success.title.${transactionType}PartiallySuccessful`);
109
108
  primaryMessage = t("success.message.exchangePartiallySuccessful", {
110
109
  tool: route.steps.at(-1)?.toolDetails.name,
@@ -112,14 +111,14 @@ const StatusBottomSheetContent = ({ status, route, onClose }) => {
112
111
  });
113
112
  handlePrimaryButton = handlePartialDone;
114
113
  break;
115
- case RouteExecutionStatus.Done | RouteExecutionStatus.Refunded:
114
+ case 36:
116
115
  title = t("success.title.refundIssued");
117
116
  primaryMessage = t("success.message.exchangePartiallySuccessful", {
118
117
  tool: route.steps.at(-1)?.toolDetails.name,
119
118
  tokenSymbol: route.steps.at(-1)?.action.toToken.symbol
120
119
  });
121
120
  break;
122
- case RouteExecutionStatus.Failed: {
121
+ case 8: {
123
122
  const step = route.steps.find((step) => step.execution?.status === "FAILED");
124
123
  if (!step) break;
125
124
  const actionMessage = getErrorMessage(t, getChainById, step, step.execution?.actions?.find((action) => action.status === "FAILED") || {
@@ -134,20 +133,20 @@ const StatusBottomSheetContent = ({ status, route, onClose }) => {
134
133
  }
135
134
  default: break;
136
135
  }
137
- const showContractComponent = subvariant === "custom" && hasEnumFlag(status, RouteExecutionStatus.Done) && (contractCompactComponent || contractSecondaryComponent);
138
- const VcComponent = status === RouteExecutionStatus.Done ? feeConfig?._vcComponent : void 0;
136
+ const showContractComponent = subvariant === "custom" && hasEnumFlag(status, 4) && (contractCompactComponent || contractSecondaryComponent);
137
+ const VcComponent = status === 4 ? feeConfig?._vcComponent : void 0;
139
138
  return /* @__PURE__ */ jsxs(Box, {
140
139
  ref,
141
140
  sx: { p: 3 },
142
141
  children: [
143
142
  !showContractComponent ? /* @__PURE__ */ jsx(CenterContainer, { children: /* @__PURE__ */ jsxs(IconCircle, {
144
143
  status,
145
- mb: 1,
144
+ sx: { mb: 1 },
146
145
  children: [
147
- status === RouteExecutionStatus.Idle ? /* @__PURE__ */ jsx(InfoRounded, { color: "primary" }) : null,
148
- status === RouteExecutionStatus.Done ? /* @__PURE__ */ jsx(Done, { color: "success" }) : null,
149
- hasEnumFlag(status, RouteExecutionStatus.Partial) || hasEnumFlag(status, RouteExecutionStatus.Refunded) ? /* @__PURE__ */ jsx(WarningRounded, { color: "warning" }) : null,
150
- hasEnumFlag(status, RouteExecutionStatus.Failed) ? /* @__PURE__ */ jsx(ErrorRounded, { color: "error" }) : null
146
+ status === 1 ? /* @__PURE__ */ jsx(InfoRounded, { color: "primary" }) : null,
147
+ status === 4 ? /* @__PURE__ */ jsx(Done, { color: "success" }) : null,
148
+ hasEnumFlag(status, 16) || hasEnumFlag(status, 32) ? /* @__PURE__ */ jsx(WarningRounded, { color: "warning" }) : null,
149
+ hasEnumFlag(status, 8) ? /* @__PURE__ */ jsx(ErrorRounded, { color: "error" }) : null
151
150
  ]
152
151
  }) }) : null,
153
152
  /* @__PURE__ */ jsx(CenterContainer, { children: /* @__PURE__ */ jsx(Typography, {
@@ -158,10 +157,10 @@ const StatusBottomSheetContent = ({ status, route, onClose }) => {
158
157
  },
159
158
  children: title
160
159
  }) }),
161
- showContractComponent ? contractCompactComponent || contractSecondaryComponent : hasEnumFlag(status, RouteExecutionStatus.Failed) && failedMessage ? /* @__PURE__ */ jsx(Typography, {
160
+ showContractComponent ? contractCompactComponent || contractSecondaryComponent : hasEnumFlag(status, 8) && failedMessage ? /* @__PURE__ */ jsx(Typography, {
162
161
  sx: { py: 1 },
163
162
  children: failedMessage
164
- }) : hasEnumFlag(status, RouteExecutionStatus.Done) ? /* @__PURE__ */ jsxs(Box, {
163
+ }) : hasEnumFlag(status, 4) ? /* @__PURE__ */ jsxs(Box, {
165
164
  sx: {
166
165
  display: "flex",
167
166
  flexDirection: "column",
@@ -179,7 +178,7 @@ const StatusBottomSheetContent = ({ status, route, onClose }) => {
179
178
  children: [
180
179
  /* @__PURE__ */ jsx(CardTitle, {
181
180
  sx: { padding: 0 },
182
- children: hasEnumFlag(status, RouteExecutionStatus.Refunded) ? t("header.refunded") : t("header.received")
181
+ children: hasEnumFlag(status, 32) ? t("header.refunded") : t("header.received")
183
182
  }),
184
183
  /* @__PURE__ */ jsx(Token, {
185
184
  token: toToken,
@@ -203,7 +202,7 @@ const StatusBottomSheetContent = ({ status, route, onClose }) => {
203
202
  marginTop: 2,
204
203
  gap: 1.5
205
204
  },
206
- children: [hasEnumFlag(status, RouteExecutionStatus.Done) ? /* @__PURE__ */ jsx(Button, {
205
+ children: [hasEnumFlag(status, 4) ? /* @__PURE__ */ jsx(Button, {
207
206
  variant: "text",
208
207
  onClick: handleSeeDetails,
209
208
  fullWidth: true,
@@ -213,9 +212,9 @@ const StatusBottomSheetContent = ({ status, route, onClose }) => {
213
212
  fullWidth: true,
214
213
  onClick: handlePrimaryButton,
215
214
  children: [
216
- status === RouteExecutionStatus.Idle ? t("button.ok") : null,
217
- hasEnumFlag(status, RouteExecutionStatus.Done) ? t("button.done") : null,
218
- status === RouteExecutionStatus.Failed ? t("button.seeDetails") : null
215
+ status === 1 ? t("button.ok") : null,
216
+ hasEnumFlag(status, 4) ? t("button.done") : null,
217
+ status === 8 ? t("button.seeDetails") : null
219
218
  ]
220
219
  })]
221
220
  })
@@ -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} 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,22 +1,21 @@
1
- import { RouteExecutionStatus } from "../../stores/routes/types.js";
2
1
  import { Box, styled } from "@mui/material";
3
2
  //#region src/pages/TransactionPage/StatusBottomSheet.style.tsx
4
3
  const getStatusColor = (status, theme) => {
5
4
  switch (status) {
6
- case RouteExecutionStatus.Done: return {
5
+ case 4: return {
7
6
  color: theme.vars.palette.success.main,
8
7
  alpha: .12,
9
8
  lightDarken: 0,
10
9
  darkDarken: 0
11
10
  };
12
- case RouteExecutionStatus.Failed: return {
11
+ case 8: return {
13
12
  color: theme.vars.palette.error.main,
14
13
  alpha: .12,
15
14
  lightDarken: 0,
16
15
  darkDarken: 0
17
16
  };
18
- case RouteExecutionStatus.Done | RouteExecutionStatus.Partial:
19
- case RouteExecutionStatus.Done | RouteExecutionStatus.Refunded:
17
+ case 20:
18
+ case 36:
20
19
  case "warning": return {
21
20
  color: theme.vars.palette.warning.main,
22
21
  alpha: .48,
@@ -36,7 +35,7 @@ const CenterContainer = styled(Box)(() => ({
36
35
  placeItems: "center",
37
36
  position: "relative"
38
37
  }));
39
- const IconCircle = styled(Box, { shouldForwardProp: (prop) => prop !== "status" })(({ theme, status = RouteExecutionStatus.Idle }) => {
38
+ const IconCircle = styled(Box, { shouldForwardProp: (prop) => prop !== "status" })(({ theme, status = 1 }) => {
40
39
  const statusConfig = getStatusColor(status, theme);
41
40
  return {
42
41
  backgroundColor: `color-mix(in srgb, ${statusConfig.color} ${statusConfig.alpha * 100}%, transparent)`,
@@ -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;AAC5D,SAAQ,QAAR;EACE,KAAK,qBAAqB,KACxB,QAAO;GACL,OAAO,MAAM,KAAK,QAAQ,QAAQ;GAClC,OAAO;GACP,aAAa;GACb,YAAY;GACb;EACH,KAAK,qBAAqB,OACxB,QAAO;GACL,OAAO,MAAM,KAAK,QAAQ,MAAM;GAChC,OAAO;GACP,aAAa;GACb,YAAY;GACb;EACH,KAAK,qBAAqB,OAAO,qBAAqB;EACtD,KAAK,qBAAqB,OAAO,qBAAqB;EACtD,KAAK,UACH,QAAO;GACL,OAAO,MAAM,KAAK,QAAQ,QAAQ;GAClC,OAAO;GACP,aAAa;GACb,YAAY;GACb;EACH,QACE,QAAO;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,SAAS,qBAAqB,WAAW;CACjD,MAAM,eAAe,eAAe,QAAQ,MAAM;AAElD,QAAO;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
+ {"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;AAC5D,SAAQ,QAAR;EACE,KAAA,EACE,QAAO;GACL,OAAO,MAAM,KAAK,QAAQ,QAAQ;GAClC,OAAO;GACP,aAAa;GACb,YAAY;GACb;EACH,KAAA,EACE,QAAO;GACL,OAAO,MAAM,KAAK,QAAQ,MAAM;GAChC,OAAO;GACP,aAAa;GACb,YAAY;GACb;EACH,KAAA;EACA,KAAA;EACA,KAAK,UACH,QAAO;GACL,OAAO,MAAM,KAAK,QAAQ,QAAQ;GAClC,OAAO;GACP,aAAa;GACb,YAAY;GACb;EACH,QACE,QAAO;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;AAElD,QAAO;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"}
@@ -4,8 +4,8 @@ import { BottomSheet } from "../../components/BottomSheet/BottomSheet.js";
4
4
  import { useSetContentHeight } from "../../hooks/useSetContentHeight.js";
5
5
  import { CenterContainer, IconCircle } from "./StatusBottomSheet.style.js";
6
6
  import { calculateValueLossPercentage } from "./utils.js";
7
- import { forwardRef, useRef } from "react";
8
- import { Box, Button, Typography } from "@mui/material";
7
+ import { forwardRef, useRef, useState } from "react";
8
+ import { Box, Button, Checkbox, FormControlLabel, Typography } from "@mui/material";
9
9
  import { jsx, jsxs } from "react/jsx-runtime";
10
10
  import { useTranslation } from "react-i18next";
11
11
  import WarningRounded from "@mui/icons-material/WarningRounded";
@@ -26,6 +26,7 @@ const TokenValueBottomSheet = forwardRef(({ route, onContinue, onCancel }, ref)
26
26
  });
27
27
  });
28
28
  const TokenValueBottomSheetContent = ({ route, onCancel, onContinue }) => {
29
+ const [accepted, setAccepted] = useState(false);
29
30
  const { t } = useTranslation();
30
31
  const ref = useRef(null);
31
32
  useSetContentHeight(ref);
@@ -38,7 +39,7 @@ const TokenValueBottomSheetContent = ({ route, onCancel, onContinue }) => {
38
39
  children: [
39
40
  /* @__PURE__ */ jsxs(CenterContainer, { children: [/* @__PURE__ */ jsx(IconCircle, {
40
41
  status: "warning",
41
- mb: 1,
42
+ sx: { mb: 1 },
42
43
  children: /* @__PURE__ */ jsx(WarningRounded, { color: "warning" })
43
44
  }), /* @__PURE__ */ jsx(Typography, {
44
45
  sx: {
@@ -114,10 +115,18 @@ const TokenValueBottomSheetContent = ({ route, onCancel, onContinue }) => {
114
115
  children: [calculateValueLossPercentage(fromAmountUSD, toAmountUSD, gasCostUSD, feeCostUSD), "%"]
115
116
  })]
116
117
  }),
118
+ /* @__PURE__ */ jsx(FormControlLabel, {
119
+ control: /* @__PURE__ */ jsx(Checkbox, {
120
+ checked: accepted,
121
+ onChange: (_, checked) => setAccepted(checked)
122
+ }),
123
+ label: t("warning.checkbox.highValueLoss"),
124
+ sx: { mt: 1 }
125
+ }),
117
126
  /* @__PURE__ */ jsxs(Box, {
118
127
  sx: {
119
128
  display: "flex",
120
- mt: 3
129
+ mt: 1
121
130
  },
122
131
  children: [
123
132
  /* @__PURE__ */ jsx(Button, {
@@ -133,6 +142,7 @@ const TokenValueBottomSheetContent = ({ route, onCancel, onContinue }) => {
133
142
  /* @__PURE__ */ jsx(Button, {
134
143
  variant: "contained",
135
144
  onClick: onContinue,
145
+ disabled: !accepted,
136
146
  fullWidth: true,
137
147
  children: t("button.continue")
138
148
  })
@@ -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 { Box, 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 { 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 { 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\" 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 <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
+ {"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,12 +1,11 @@
1
1
  import { useWidgetEvents } from "../../hooks/useWidgetEvents.js";
2
- import { WidgetEvent } from "../../types/events.js";
2
+ import "../../types/events.js";
3
3
  import { useWidgetConfig } from "../../providers/WidgetProvider/WidgetProvider.js";
4
4
  import { useHeaderStore } from "../../stores/header/useHeaderStore.js";
5
- import { HiddenUI } from "../../types/widget.js";
5
+ import "../../types/widget.js";
6
6
  import { navigationRoutes } from "../../utils/navigationRoutes.js";
7
7
  import { useFieldActions } from "../../stores/form/useFieldActions.js";
8
8
  import { PageContainer } from "../../components/PageContainer.js";
9
- import { RouteExecutionStatus } from "../../stores/routes/types.js";
10
9
  import { getAccumulatedFeeCostsBreakdown } from "../../utils/fees.js";
11
10
  import { useNavigateBack } from "../../hooks/useNavigateBack.js";
12
11
  import { useHeader } from "../../hooks/useHeader.js";
@@ -23,7 +22,7 @@ import { StartTransactionButton } from "./StartTransactionButton.js";
23
22
  import { StatusBottomSheet } from "./StatusBottomSheet.js";
24
23
  import { calculateValueLossPercentage, getTokenValueLossThreshold } from "./utils.js";
25
24
  import { TokenValueBottomSheet } from "./TokenValueBottomSheet.js";
26
- import { useEffect, useMemo, useRef, useState } from "react";
25
+ import { useMemo, useRef, useState } from "react";
27
26
  import { useLocation, useNavigate } from "@tanstack/react-router";
28
27
  import { Box, Button, Tooltip } from "@mui/material";
29
28
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -57,26 +56,23 @@ const TransactionPage = () => {
57
56
  if (subvariant === "custom") return t(`header.${subvariantOptions?.custom ?? "checkout"}`);
58
57
  if (route) {
59
58
  const transactionType = route.fromChainId === route.toChainId ? "swap" : "bridge";
60
- return status === RouteExecutionStatus.Idle ? t(`button.${transactionType}Review`) : t(`header.${transactionType}`);
59
+ return status === 1 ? t(`button.${transactionType}Review`) : t(`header.${transactionType}`);
61
60
  }
62
61
  return t("header.exchange");
63
62
  };
64
- const headerAction = useMemo(() => status === RouteExecutionStatus.Idle ? /* @__PURE__ */ jsx(RouteTracker, {
63
+ const headerAction = useMemo(() => status === 1 ? /* @__PURE__ */ jsx(RouteTracker, {
65
64
  observableRouteId: stateRouteId,
66
65
  onChange: setRouteId,
67
66
  onFetching: setRouteRefreshing
68
67
  }) : void 0, [stateRouteId, status]);
69
68
  useHeader(getHeaderTitle(), headerAction);
70
- useEffect(() => {
71
- if (status === RouteExecutionStatus.Idle) emitter.emit(WidgetEvent.ReviewTransactionPageEntered, route);
72
- }, []);
73
69
  if (!route) return null;
74
70
  const handleExecuteRoute = () => {
75
71
  if (tokenValueBottomSheetRef.current?.isOpen()) {
76
72
  const { gasCostUSD, feeCostUSD } = getAccumulatedFeeCostsBreakdown(route);
77
73
  const fromAmountUSD = Number.parseFloat(route.fromAmountUSD);
78
74
  const toAmountUSD = Number.parseFloat(route.toAmountUSD);
79
- emitter.emit(WidgetEvent.RouteHighValueLoss, {
75
+ emitter.emit("routeHighValueLoss", {
80
76
  fromAmountUSD,
81
77
  toAmountUSD,
82
78
  gasCostUSD,
@@ -99,8 +95,8 @@ const TransactionPage = () => {
99
95
  });
100
96
  };
101
97
  const handleStartClick = async () => {
102
- if (status === RouteExecutionStatus.Idle) {
103
- if (toAddress && !hasActivity && !isLoadingAddressActivity && isActivityAddressFetched && !hiddenUI?.includes(HiddenUI.LowAddressActivityConfirmation)) {
98
+ if (status === 1) {
99
+ if (toAddress && !hasActivity && !isLoadingAddressActivity && isActivityAddressFetched && !hiddenUI?.includes("lowAddressActivityConfirmation")) {
104
100
  confirmToAddressSheetRef.current?.open();
105
101
  return;
106
102
  }
@@ -108,7 +104,7 @@ const TransactionPage = () => {
108
104
  if (getTokenValueLossThreshold(Number.parseFloat(route.fromAmountUSD), Number.parseFloat(route.toAmountUSD), gasCostUSD, feeCostUSD) && subvariant !== "custom") tokenValueBottomSheetRef.current?.open();
109
105
  else handleExecuteRoute();
110
106
  }
111
- if (status === RouteExecutionStatus.Failed) restartRoute();
107
+ if (status === 8) restartRoute();
112
108
  };
113
109
  const handleRemoveRoute = () => {
114
110
  navigateBack();
@@ -116,12 +112,12 @@ const TransactionPage = () => {
116
112
  };
117
113
  const getButtonText = () => {
118
114
  switch (status) {
119
- case RouteExecutionStatus.Idle: switch (subvariant) {
115
+ case 1: switch (subvariant) {
120
116
  case "custom": return subvariantOptions?.custom === "deposit" ? t("button.deposit") : t("button.buy");
121
117
  case "refuel": return t("button.startBridging");
122
118
  default: return t(`button.start${route.fromChainId === route.toChainId ? "Swapping" : "Bridging"}`);
123
119
  }
124
- case RouteExecutionStatus.Failed: return t("button.tryAgain");
120
+ case 8: return t("button.tryAgain");
125
121
  default: return "";
126
122
  }
127
123
  };
@@ -137,8 +133,8 @@ const TransactionPage = () => {
137
133
  route,
138
134
  sx: { marginTop: 2 }
139
135
  }),
140
- status === RouteExecutionStatus.Idle || status === RouteExecutionStatus.Failed ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(WarningMessages, {
141
- mt: 2,
136
+ status === 1 || status === 8 ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(WarningMessages, {
137
+ sx: { mt: 2 },
142
138
  route,
143
139
  allowInteraction: true
144
140
  }), /* @__PURE__ */ jsxs(Box, {
@@ -151,7 +147,7 @@ const TransactionPage = () => {
151
147
  onClick: handleStartClick,
152
148
  route,
153
149
  loading: routeRefreshing || isLoadingAddressActivity
154
- }), status === RouteExecutionStatus.Failed ? /* @__PURE__ */ jsx(Tooltip, {
150
+ }), status === 8 ? /* @__PURE__ */ jsx(Tooltip, {
155
151
  title: t("button.clearTransaction"),
156
152
  placement: "bottom-end",
157
153
  children: /* @__PURE__ */ jsx(Button, {
@@ -174,7 +170,7 @@ const TransactionPage = () => {
174
170
  onContinue: handleExecuteRoute
175
171
  }) : null,
176
172
  /* @__PURE__ */ jsx(ExchangeRateBottomSheet, { ref: exchangeRateBottomSheetRef }),
177
- !hiddenUI?.includes(HiddenUI.LowAddressActivityConfirmation) ? /* @__PURE__ */ jsx(ConfirmToAddressSheet, {
173
+ !hiddenUI?.includes("lowAddressActivityConfirmation") ? /* @__PURE__ */ jsx(ConfirmToAddressSheet, {
178
174
  ref: confirmToAddressSheetRef,
179
175
  onContinue: handleExecuteRoute,
180
176
  toAddress,
@@ -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, useEffect, 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 // biome-ignore lint/correctness/useExhaustiveDependencies: We want to emit event only when the page is mounted\n useEffect(() => {\n if (status === RouteExecutionStatus.Idle) {\n emitter.emit(WidgetEvent.ReviewTransactionPageEntered, route)\n }\n }, [])\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 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,MAAa,wBAA4C;CACvD,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,EAAE,kBAAkB,iBAAiB;CAC3C,MAAM,UAAU,iBAAiB;CACjC,MAAM,gBAAgB,gBAAgB,UAAU,MAAM,cAAc;CACpE,MAAM,WAAW,aAAa;CAC9B,MAAM,eAAe,iBAAiB;CACtC,MAAM,EACJ,YACA,mBACA,4BACA,aACE,iBAAiB;CACrB,MAAM,EAAE,WAAgB,aAAa;CACrC,MAAM,eAAe,QAAQ;CAC7B,MAAM,CAAC,SAAS,cAAc,SAAiB,aAAa;CAC5D,MAAM,CAAC,iBAAiB,sBAAsB,SAAS,MAAM;CAE7D,MAAM,2BAA2B,OAAwB,KAAK;CAC9D,MAAM,6BAA6B,OAAoC,KAAK;CAC5E,MAAM,2BAA2B,OAAwB,KAAK;CAE9D,MAAM,8BACJ,UACA,SACG;AACH,6BAA2B,SAAS,KAAK,UAAU,KAAK;;CAG1D,MAAM,EAAE,OAAO,QAAQ,cAAc,cAAc,gBACjD,kBAAkB;EACP;EACT;EACD,CAAC;CAEJ,MAAM,EACJ,WACA,aACA,WAAW,0BACX,WAAW,6BACT,mBAAmB,OAAO,UAAU;CAExC,MAAM,uBAAuB;AAC3B,MAAI,eAAe,SACjB,QAAO,EAAE,UAAU,mBAAmB,UAAU,aAAa;AAE/D,MAAI,OAAO;GACT,MAAM,kBACJ,MAAM,gBAAgB,MAAM,YAAY,SAAS;AACnD,UAAO,WAAA,IACH,EAAE,UAAU,gBAAgB,QAAQ,GACpC,EAAE,UAAU,kBAAkB;;AAGpC,SAAO,EAAE,kBAAkB;;CAG7B,MAAM,eAAe,cAEjB,WAAA,IACE,oBAAC,cAAD;EACE,mBAAmB;EACnB,UAAU;EACV,YAAY;EACZ,CAAA,GACA,KAAA,GACN,CAAC,cAAc,OAAO,CACvB;AAED,WAAU,gBAAgB,EAAE,aAAa;AAEzC,KAAI,CAAC,MACH,QAAO;CAGT,MAAM,2BAA2B;AAC/B,MAAI,yBAAyB,SAAS,QAAQ,EAAE;GAC9C,MAAM,EAAE,YAAY,eAAe,gCAAgC,MAAM;GACzE,MAAM,gBAAgB,OAAO,WAAW,MAAM,cAAc;GAC5D,MAAM,cAAc,OAAO,WAAW,MAAM,YAAY;AACxD,WAAQ,KAAA,sBAAqC;IAC3C;IACA;IACA;IACA;IACA,WAAW,6BACT,eACA,aACA,YACA,WACD;IACF,CAAC;;AAEJ,2BAAyB,SAAS,OAAO;AACzC,gBAAc;AACd,gBAAc,cAAc,GAAG;AAC/B,MAAI,eAAe,UAAU;AAC3B,iBAAc,aAAa,GAAG;AAC9B,iBAAc,WAAW,GAAG;;AAG9B,sBAAoB;AAClB,YAAS;IAAE,IAAI,iBAAiB;IAAM,SAAS;IAAM,CAAC;IACtD;;CAGJ,MAAM,mBAAmB,YAAY;AACnC,MAAI,WAAA,GAAsC;AACxC,OACE,aACA,CAAC,eACD,CAAC,4BACD,4BACA,CAAC,UAAU,SAAA,iCAAiD,EAC5D;AACA,6BAAyB,SAAS,MAAM;AACxC;;GAGF,MAAM,EAAE,YAAY,eAAe,gCAAgC,MAAM;AASzE,OANwC,2BAFlB,OAAO,WAAW,MAAM,cAAc,EACxC,OAAO,WAAW,MAAM,YAAY,EAItD,YACA,WACD,IACsC,eAAe,SACpD,0BAAyB,SAAS,MAAM;OAExC,qBAAoB;;AAGxB,MAAI,WAAA,EACF,eAAc;;CAIlB,MAAM,0BAA0B;AAC9B,gBAAc;AACd,eAAa;;CAGf,MAAM,sBAA8B;AAClC,UAAQ,QAAR;GACE,KAAA,EACE,SAAQ,YAAR;IACE,KAAK,SACH,QAAO,mBAAmB,WAAW,YACjC,EAAE,iBAAiB,GACnB,EAAE,aAAa;IACrB,KAAK,SACH,QAAO,EAAE,uBAAuB;IAClC,QAGE,QAAO,EAAE,eADP,MAAM,gBAAgB,MAAM,YAAY,aAAa,aACb;;GAGhD,KAAA,EACE,QAAO,EAAE,kBAAkB;GAC7B,QACE,QAAO;;;AAIb,QACE,qBAAC,eAAD;EAAe,eAAA;YAAf;GACG,YAAY,OAAO,WAAW;GAC9B,eAAe,YAAY,6BAC1B,oBAAC,mBAAD;IAAmB,IAAI,EAAE,WAAW,GAAG;cACpC;IACiB,CAAA,GAClB;GACJ,oBAAC,oBAAD;IAA2B;IAAO,IAAI,EAAE,WAAW,GAAG;IAAI,CAAA;GACzD,WAAA,KACD,WAAA,IACE,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,iBAAD;IAAiB,IAAI,EAAE,IAAI,GAAG;IAAS;IAAO,kBAAA;IAAmB,CAAA,EACjE,qBAAC,KAAD;IACE,IAAI;KACF,IAAI;KACJ,SAAS;KACV;cAJH,CAME,oBAAC,wBAAD;KACE,MAAM,eAAe;KACrB,SAAS;KACF;KACP,SAAS,mBAAmB;KAC5B,CAAA,EACD,WAAA,IACC,oBAAC,SAAD;KACE,OAAO,EAAE,0BAA0B;KACnC,WAAU;eAEV,oBAAC,QAAD;MACE,SAAS;MACT,IAAI;OACF,UAAU;OACV,YAAY;OACb;gBAED,oBAAC,QAAD,EAAU,CAAA;MACH,CAAA;KACD,CAAA,GACR,KACA;MACL,EAAA,CAAA,GACD;GACH,SAAS,oBAAC,mBAAD;IAA2B;IAAe;IAAS,CAAA,GAAG;GAC/D,eAAe,WACd,oBAAC,uBAAD;IACS;IACP,KAAK;IACL,YAAY;IACZ,CAAA,GACA;GACJ,oBAAC,yBAAD,EAAyB,KAAK,4BAA8B,CAAA;GAC3D,CAAC,UAAU,SAAA,iCAAiD,GAC3D,oBAAC,uBAAD;IACE,KAAK;IACL,YAAY;IACD;IACX,WAAW,MAAM;IACjB,CAAA,GACA;GACU"}