@lifi/widget 3.16.0 → 3.16.1

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 (66) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/esm/components/Messages/WarningMessages.d.ts +7 -0
  3. package/dist/esm/components/Messages/{MainMessages.js → WarningMessages.js} +3 -6
  4. package/dist/esm/components/Messages/WarningMessages.js.map +1 -0
  5. package/dist/esm/components/Messages/useMessageQueue.d.ts +1 -0
  6. package/dist/esm/components/Messages/useMessageQueue.js +10 -5
  7. package/dist/esm/components/Messages/useMessageQueue.js.map +1 -1
  8. package/dist/esm/components/Routes/RoutesExpanded.js +4 -1
  9. package/dist/esm/components/Routes/RoutesExpanded.js.map +1 -1
  10. package/dist/esm/components/StepActions/StepActions.js +1 -1
  11. package/dist/esm/components/StepActions/StepActions.js.map +1 -1
  12. package/dist/esm/config/version.d.ts +1 -1
  13. package/dist/esm/config/version.js +1 -1
  14. package/dist/esm/hooks/useGasSufficiency.js +1 -1
  15. package/dist/esm/hooks/useGasSufficiency.js.map +1 -1
  16. package/dist/esm/hooks/useIsCompatibleDestinationAccount.d.ts +8 -0
  17. package/dist/esm/hooks/useIsCompatibleDestinationAccount.js +37 -0
  18. package/dist/esm/hooks/useIsCompatibleDestinationAccount.js.map +1 -0
  19. package/dist/esm/hooks/useIsContractAddress.d.ts +2 -0
  20. package/dist/esm/hooks/useIsContractAddress.js +7 -2
  21. package/dist/esm/hooks/useIsContractAddress.js.map +1 -1
  22. package/dist/esm/hooks/useRoutes.js +6 -1
  23. package/dist/esm/hooks/useRoutes.js.map +1 -1
  24. package/dist/esm/hooks/useToAddressRequirements.d.ts +2 -2
  25. package/dist/esm/hooks/useToAddressRequirements.js +10 -12
  26. package/dist/esm/hooks/useToAddressRequirements.js.map +1 -1
  27. package/dist/esm/i18n/en.json +1 -1
  28. package/dist/esm/pages/MainPage/MainPage.js +2 -2
  29. package/dist/esm/pages/MainPage/MainPage.js.map +1 -1
  30. package/dist/esm/pages/MainPage/MainWarningMessages.d.ts +7 -0
  31. package/dist/esm/pages/MainPage/MainWarningMessages.js +9 -0
  32. package/dist/esm/pages/MainPage/MainWarningMessages.js.map +1 -0
  33. package/dist/esm/pages/MainPage/ReviewButton.js +4 -2
  34. package/dist/esm/pages/MainPage/ReviewButton.js.map +1 -1
  35. package/dist/esm/pages/RoutesPage/RoutesPage.js +5 -2
  36. package/dist/esm/pages/RoutesPage/RoutesPage.js.map +1 -1
  37. package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.js +5 -2
  38. package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.js.map +1 -1
  39. package/dist/esm/pages/TransactionPage/StartTransactionButton.js +3 -6
  40. package/dist/esm/pages/TransactionPage/StartTransactionButton.js.map +1 -1
  41. package/dist/esm/pages/TransactionPage/TransactionPage.js +2 -2
  42. package/dist/esm/pages/TransactionPage/TransactionPage.js.map +1 -1
  43. package/dist/esm/stores/form/URLSearchParamsBuilder.js +4 -1
  44. package/dist/esm/stores/form/URLSearchParamsBuilder.js.map +1 -1
  45. package/package.json +1 -1
  46. package/src/components/Messages/{MainMessages.tsx → WarningMessages.tsx} +10 -5
  47. package/src/components/Messages/useMessageQueue.ts +16 -6
  48. package/src/components/Routes/RoutesExpanded.tsx +5 -1
  49. package/src/components/StepActions/StepActions.tsx +1 -1
  50. package/src/config/version.ts +1 -1
  51. package/src/hooks/useGasSufficiency.ts +1 -1
  52. package/src/hooks/useIsCompatibleDestinationAccount.ts +58 -0
  53. package/src/hooks/useIsContractAddress.ts +11 -2
  54. package/src/hooks/useRoutes.ts +7 -1
  55. package/src/hooks/useToAddressRequirements.ts +16 -20
  56. package/src/i18n/en.json +1 -1
  57. package/src/pages/MainPage/MainPage.tsx +2 -2
  58. package/src/pages/MainPage/MainWarningMessages.tsx +17 -0
  59. package/src/pages/MainPage/ReviewButton.tsx +4 -3
  60. package/src/pages/RoutesPage/RoutesPage.tsx +6 -3
  61. package/src/pages/TransactionPage/ConfirmToAddressSheet.tsx +5 -2
  62. package/src/pages/TransactionPage/StartTransactionButton.tsx +4 -12
  63. package/src/pages/TransactionPage/TransactionPage.tsx +2 -2
  64. package/src/stores/form/URLSearchParamsBuilder.tsx +4 -1
  65. package/dist/esm/components/Messages/MainMessages.d.ts +0 -2
  66. package/dist/esm/components/Messages/MainMessages.js.map +0 -1
@@ -4,7 +4,6 @@ import { ActiveTransactions } from '../../components/ActiveTransactions/ActiveTr
4
4
  import { AmountInput } from '../../components/AmountInput/AmountInput.js'
5
5
  import { ContractComponent } from '../../components/ContractComponent/ContractComponent.js'
6
6
  import { GasRefuelMessage } from '../../components/Messages/GasRefuelMessage.js'
7
- import { MainMessages } from '../../components/Messages/MainMessages.js'
8
7
  import { PageContainer } from '../../components/PageContainer.js'
9
8
  import { PoweredBy } from '../../components/PoweredBy/PoweredBy.js'
10
9
  import { Routes } from '../../components/Routes/Routes.js'
@@ -15,6 +14,7 @@ import { useHeader } from '../../hooks/useHeader.js'
15
14
  import { useWideVariant } from '../../hooks/useWideVariant.js'
16
15
  import { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'
17
16
  import { HiddenUI } from '../../types/widget.js'
17
+ import { MainWarningMessages } from './MainWarningMessages.js'
18
18
  import { ReviewButton } from './ReviewButton.js'
19
19
 
20
20
  export const MainPage: React.FC = () => {
@@ -49,7 +49,7 @@ export const MainPage: React.FC = () => {
49
49
  {!wideVariant ? <Routes sx={marginSx} /> : null}
50
50
  <SendToWalletButton sx={marginSx} />
51
51
  <GasRefuelMessage mb={2} />
52
- <MainMessages mb={2} />
52
+ <MainWarningMessages mb={2} />
53
53
  <Box
54
54
  sx={{
55
55
  display: 'flex',
@@ -0,0 +1,17 @@
1
+ import type { Route } from '@lifi/sdk'
2
+ import type { BoxProps } from '@mui/material'
3
+ import { WarningMessages } from '../../components/Messages/WarningMessages.js'
4
+ import { useRoutes } from '../../hooks/useRoutes.js'
5
+
6
+ interface MainWarningMessagesProps extends BoxProps {
7
+ route?: Route
8
+ }
9
+
10
+ export const MainWarningMessages: React.FC<MainWarningMessagesProps> = (
11
+ props
12
+ ) => {
13
+ const { routes } = useRoutes()
14
+ const currentRoute = routes?.[0]
15
+
16
+ return <WarningMessages route={currentRoute} {...props} />
17
+ }
@@ -1,6 +1,7 @@
1
1
  import { useTranslation } from 'react-i18next'
2
2
  import { useNavigate } from 'react-router-dom'
3
3
  import { BaseTransactionButton } from '../../components/BaseTransactionButton/BaseTransactionButton.js'
4
+ import { useIsCompatibleDestinationAccount } from '../../hooks/useIsCompatibleDestinationAccount.js'
4
5
  import { useRoutes } from '../../hooks/useRoutes.js'
5
6
  import { useToAddressRequirements } from '../../hooks/useToAddressRequirements.js'
6
7
  import { useWidgetEvents } from '../../hooks/useWidgetEvents.js'
@@ -15,8 +16,8 @@ export const ReviewButton: React.FC = () => {
15
16
  const emitter = useWidgetEvents()
16
17
  const { subvariant, subvariantOptions } = useWidgetConfig()
17
18
  const splitState = useSplitSubvariantStore((state) => state.state)
18
- const { toAddress, requiredToAddress, accountNotDeployedAtDestination } =
19
- useToAddressRequirements()
19
+ const { toAddress, requiredToAddress } = useToAddressRequirements()
20
+ const { isCompatibleDestinationAccount } = useIsCompatibleDestinationAccount()
20
21
  const { routes, setReviewableRoute } = useRoutes()
21
22
 
22
23
  const currentRoute = routes?.[0]
@@ -75,7 +76,7 @@ export const ReviewButton: React.FC = () => {
75
76
  onClick={handleClick}
76
77
  disabled={
77
78
  (currentRoute && requiredToAddress && !toAddress) ||
78
- accountNotDeployedAtDestination
79
+ !isCompatibleDestinationAccount
79
80
  }
80
81
  />
81
82
  )
@@ -8,6 +8,7 @@ import { RouteCard } from '../../components/RouteCard/RouteCard.js'
8
8
  import { RouteCardSkeleton } from '../../components/RouteCard/RouteCardSkeleton.js'
9
9
  import { RouteNotFoundCard } from '../../components/RouteCard/RouteNotFoundCard.js'
10
10
  import { useHeader } from '../../hooks/useHeader.js'
11
+ import { useIsCompatibleDestinationAccount } from '../../hooks/useIsCompatibleDestinationAccount.js'
11
12
  import { useNavigateBack } from '../../hooks/useNavigateBack.js'
12
13
  import { useRoutes } from '../../hooks/useRoutes.js'
13
14
  import { useToAddressRequirements } from '../../hooks/useToAddressRequirements.js'
@@ -18,6 +19,7 @@ import { navigationRoutes } from '../../utils/navigationRoutes.js'
18
19
  import { Stack } from './RoutesPage.style.js'
19
20
 
20
21
  export const RoutesPage: React.FC<BoxProps> = () => {
22
+ const { t } = useTranslation()
21
23
  const { navigate } = useNavigateBack()
22
24
  const emitter = useWidgetEvents()
23
25
  const {
@@ -33,8 +35,7 @@ export const RoutesPage: React.FC<BoxProps> = () => {
33
35
  const { account } = useAccount({ chainType: fromChain?.chainType })
34
36
  const [toAddress] = useFieldValues('toAddress')
35
37
  const { requiredToAddress } = useToAddressRequirements()
36
-
37
- const { t } = useTranslation()
38
+ const { isCompatibleDestinationAccount } = useIsCompatibleDestinationAccount()
38
39
 
39
40
  const headerAction = useMemo(
40
41
  () => (
@@ -65,7 +66,9 @@ export const RoutesPage: React.FC<BoxProps> = () => {
65
66
 
66
67
  const routeNotFound = !routes?.length && !isLoading && !isFetching
67
68
 
68
- const toAddressUnsatisfied = routes?.[0] && requiredToAddress && !toAddress
69
+ const toAddressUnsatisfied =
70
+ (routes?.[0] && requiredToAddress && !toAddress) ||
71
+ !isCompatibleDestinationAccount
69
72
  const allowInteraction = account.isConnected && !toAddressUnsatisfied
70
73
 
71
74
  return (
@@ -1,12 +1,13 @@
1
1
  import { Wallet, WarningRounded } from '@mui/icons-material'
2
2
  import { Button, Typography } from '@mui/material'
3
3
  import type { MutableRefObject } from 'react'
4
- import { forwardRef } from 'react'
4
+ import { forwardRef, useRef } from 'react'
5
5
  import { useTranslation } from 'react-i18next'
6
6
  import { BottomSheet } from '../../components/BottomSheet/BottomSheet.js'
7
7
  import type { BottomSheetBase } from '../../components/BottomSheet/types.js'
8
8
  import { AlertMessage } from '../../components/Messages/AlertMessage.js'
9
9
  import { useChain } from '../../hooks/useChain.js'
10
+ import { useSetContentHeight } from '../../hooks/useSetContentHeight.js'
10
11
  import { useWidgetEvents } from '../../hooks/useWidgetEvents.js'
11
12
  import { WidgetEvent } from '../../types/events.js'
12
13
  import {
@@ -47,6 +48,8 @@ const ConfirmToAddressSheetContent: React.FC<
47
48
  const { t } = useTranslation()
48
49
  const { chain } = useChain(toChainId)
49
50
  const emitter = useWidgetEvents()
51
+ const ref = useRef<HTMLElement>(null)
52
+ useSetContentHeight(ref)
50
53
 
51
54
  const handleContinue = () => {
52
55
  emitter.emit(WidgetEvent.LowAddressActivityConfirmed, {
@@ -58,7 +61,7 @@ const ConfirmToAddressSheetContent: React.FC<
58
61
  }
59
62
 
60
63
  return (
61
- <SendToWalletSheetContainer>
64
+ <SendToWalletSheetContainer ref={ref}>
62
65
  <IconContainer>
63
66
  <Wallet sx={{ fontSize: 40 }} />
64
67
  </IconContainer>
@@ -1,6 +1,5 @@
1
1
  import { BaseTransactionButton } from '../../components/BaseTransactionButton/BaseTransactionButton.js'
2
- import { useFromTokenSufficiency } from '../../hooks/useFromTokenSufficiency.js'
3
- import { useGasSufficiency } from '../../hooks/useGasSufficiency.js'
2
+ import { useMessageQueue } from '../../components/Messages/useMessageQueue.js'
4
3
  import type { StartTransactionButtonProps } from './types.js'
5
4
 
6
5
  export const StartTransactionButton: React.FC<StartTransactionButtonProps> = ({
@@ -9,21 +8,14 @@ export const StartTransactionButton: React.FC<StartTransactionButtonProps> = ({
9
8
  text,
10
9
  loading,
11
10
  }) => {
12
- const { insufficientGas, isLoading: isGasSufficiencyLoading } =
13
- useGasSufficiency(route)
14
- const { insufficientFromToken, isLoading: isFromTokenSufficiencyLoading } =
15
- useFromTokenSufficiency(route)
16
-
17
- const shouldDisableButton = insufficientFromToken || !!insufficientGas?.length
11
+ const { hasMessages, isLoading } = useMessageQueue(route)
18
12
 
19
13
  return (
20
14
  <BaseTransactionButton
21
15
  onClick={onClick}
22
16
  text={text}
23
- disabled={shouldDisableButton}
24
- loading={
25
- isFromTokenSufficiencyLoading || isGasSufficiencyLoading || loading
26
- }
17
+ disabled={hasMessages}
18
+ loading={isLoading || loading}
27
19
  />
28
20
  )
29
21
  }
@@ -6,7 +6,7 @@ import { useTranslation } from 'react-i18next'
6
6
  import { useLocation } from 'react-router-dom'
7
7
  import type { BottomSheetBase } from '../../components/BottomSheet/types.js'
8
8
  import { ContractComponent } from '../../components/ContractComponent/ContractComponent.js'
9
- import { GasMessage } from '../../components/Messages/GasMessage.js'
9
+ import { WarningMessages } from '../../components/Messages/WarningMessages.js'
10
10
  import { PageContainer } from '../../components/PageContainer.js'
11
11
  import { getStepList } from '../../components/Step/StepList.js'
12
12
  import { TransactionDetails } from '../../components/TransactionDetails.js'
@@ -207,7 +207,7 @@ export const TransactionPage: React.FC = () => {
207
207
  {status === RouteExecutionStatus.Idle ||
208
208
  status === RouteExecutionStatus.Failed ? (
209
209
  <>
210
- <GasMessage mt={2} route={route} />
210
+ <WarningMessages mt={2} route={route} />
211
211
  <Box
212
212
  sx={{
213
213
  mt: 2,
@@ -76,7 +76,10 @@ export const URLSearchParamsBuilder = () => {
76
76
  const validationResult = await validateAddress({
77
77
  value: formValues.toAddress,
78
78
  })
79
- if (validationResult.isValid) {
79
+ // Check if the toAddress is still in the query string
80
+ // Could be modified by the user before the validation is done
81
+ const { toAddress } = getDefaultValuesFromQueryString()
82
+ if (validationResult.isValid && toAddress) {
80
83
  const bookmark = {
81
84
  address: validationResult.address,
82
85
  chainType: validationResult.chainType,
@@ -1,2 +0,0 @@
1
- import type { BoxProps } from '@mui/material';
2
- export declare const MainMessages: React.FC<BoxProps>;
@@ -1 +0,0 @@
1
- {"version":3,"file":"MainMessages.js","sourceRoot":"","sources":["../../../../src/components/Messages/MainMessages.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,MAAM,CAAC,MAAM,YAAY,GAAuB,CAAC,KAAK,EAAE,EAAE;IACxD,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAA;IAC9B,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;IAChC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,eAAe,CAAC,YAAY,CAAC,CAAA;IAErE,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,QAAQ,cAAc,EAAE,EAAE,EAAE,CAAC;YAC3B,KAAK,oBAAoB;gBACvB,OAAO,KAAC,uBAAuB,OAAK,KAAK,GAAI,CAAA;YAC/C,KAAK,kBAAkB;gBACrB,OAAO,CACL,KAAC,qBAAqB,IACpB,eAAe,EAAE,cAAc,CAAC,KAAK,EAAE,eAAe,KAClD,KAAK,GACT,CACH,CAAA;YACH,KAAK,sBAAsB;gBACzB,OAAO,KAAC,yBAAyB,OAAK,KAAK,GAAI,CAAA;YACjD,KAAK,qBAAqB;gBACxB,OAAO,KAAC,wBAAwB,OAAK,KAAK,GAAI,CAAA;YAChD;gBACE,OAAO,IAAI,CAAA;QACf,CAAC;IACH,CAAC,CAAA;IAED,OAAO,CACL,KAAC,QAAQ,IAAC,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,QAAC,YAAY,kBAChE,UAAU,EAAE,GACJ,CACZ,CAAA;AACH,CAAC,CAAA"}