@lifi/widget 4.8.0 → 4.10.0

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 (136) hide show
  1. package/README.md +26 -3
  2. package/dist/esm/components/AmountInputCard/AmountInputCardPair.js +5 -2
  3. package/dist/esm/components/AmountInputCard/AmountInputCardPair.js.map +1 -1
  4. package/dist/esm/components/SelectChainAndToken.js +5 -2
  5. package/dist/esm/components/SelectChainAndToken.js.map +1 -1
  6. package/dist/esm/components/SendToWallet/SendToWalletButton.js +5 -4
  7. package/dist/esm/components/SendToWallet/SendToWalletButton.js.map +1 -1
  8. package/dist/esm/components/TokenList/TokenDetailsSheet.js +5 -8
  9. package/dist/esm/components/TokenList/TokenDetailsSheet.js.map +1 -1
  10. package/dist/esm/components/TokenList/TokenDetailsSheetContent.js +30 -2
  11. package/dist/esm/components/TokenList/TokenDetailsSheetContent.js.map +1 -1
  12. package/dist/esm/components/TokenList/TokenListItem.js +36 -47
  13. package/dist/esm/components/TokenList/TokenListItem.js.map +1 -1
  14. package/dist/esm/components/TokenList/VirtualizedTokenList.d.ts.map +1 -1
  15. package/dist/esm/components/TokenList/VirtualizedTokenList.js +2 -2
  16. package/dist/esm/components/TokenList/VirtualizedTokenList.js.map +1 -1
  17. package/dist/esm/components/TokenList/tokenVerificationIcons.js +29 -0
  18. package/dist/esm/components/TokenList/tokenVerificationIcons.js.map +1 -0
  19. package/dist/esm/components/TokenList/useTokenSelect.d.ts.map +1 -1
  20. package/dist/esm/components/TokenList/useTokenSelect.js +10 -0
  21. package/dist/esm/components/TokenList/useTokenSelect.js.map +1 -1
  22. package/dist/esm/config/constants.js.map +1 -1
  23. package/dist/esm/config/version.d.ts +1 -1
  24. package/dist/esm/config/version.js +1 -1
  25. package/dist/esm/config/version.js.map +1 -1
  26. package/dist/esm/hooks/useAccountsBalancesData.js +5 -2
  27. package/dist/esm/hooks/useAccountsBalancesData.js.map +1 -1
  28. package/dist/esm/hooks/useAddressValidation.d.ts +3 -2
  29. package/dist/esm/hooks/useAddressValidation.d.ts.map +1 -1
  30. package/dist/esm/hooks/useAddressValidation.js +48 -21
  31. package/dist/esm/hooks/useAddressValidation.js.map +1 -1
  32. package/dist/esm/hooks/useGasRefuel.js +4 -1
  33. package/dist/esm/hooks/useGasRefuel.js.map +1 -1
  34. package/dist/esm/hooks/useRoutes.d.ts.map +1 -1
  35. package/dist/esm/hooks/useRoutes.js +11 -6
  36. package/dist/esm/hooks/useRoutes.js.map +1 -1
  37. package/dist/esm/hooks/useToAddressAutoPopulate.js +6 -8
  38. package/dist/esm/hooks/useToAddressAutoPopulate.js.map +1 -1
  39. package/dist/esm/hooks/useToAddressRequirements.d.ts +3 -2
  40. package/dist/esm/hooks/useToAddressRequirements.d.ts.map +1 -1
  41. package/dist/esm/hooks/useToAddressRequirements.js +8 -7
  42. package/dist/esm/hooks/useToAddressRequirements.js.map +1 -1
  43. package/dist/esm/hooks/useToAddressReset.js +6 -3
  44. package/dist/esm/hooks/useToAddressReset.js.map +1 -1
  45. package/dist/esm/hooks/useTokenBalance.js +2 -1
  46. package/dist/esm/hooks/useTokenBalance.js.map +1 -1
  47. package/dist/esm/hooks/useTokens.js +1 -1
  48. package/dist/esm/i18n/bn.json +7 -2
  49. package/dist/esm/i18n/de.json +7 -2
  50. package/dist/esm/i18n/en.json +7 -2
  51. package/dist/esm/i18n/es.json +7 -2
  52. package/dist/esm/i18n/fr.json +7 -2
  53. package/dist/esm/i18n/hi.json +7 -2
  54. package/dist/esm/i18n/id.json +7 -2
  55. package/dist/esm/i18n/it.json +7 -2
  56. package/dist/esm/i18n/ja.json +7 -2
  57. package/dist/esm/i18n/ko.json +7 -2
  58. package/dist/esm/i18n/pl.json +7 -2
  59. package/dist/esm/i18n/pt.json +7 -2
  60. package/dist/esm/i18n/th.json +7 -2
  61. package/dist/esm/i18n/tr.json +7 -2
  62. package/dist/esm/i18n/uk.json +7 -2
  63. package/dist/esm/i18n/vi.json +7 -2
  64. package/dist/esm/i18n/zh.json +7 -2
  65. package/dist/esm/pages/SendToWallet/BookmarkAddressSheet.js +7 -4
  66. package/dist/esm/pages/SendToWallet/BookmarkAddressSheet.js.map +1 -1
  67. package/dist/esm/pages/SendToWallet/BookmarksPage.js +35 -31
  68. package/dist/esm/pages/SendToWallet/BookmarksPage.js.map +1 -1
  69. package/dist/esm/pages/SendToWallet/ConnectedWalletsPage.js +4 -3
  70. package/dist/esm/pages/SendToWallet/ConnectedWalletsPage.js.map +1 -1
  71. package/dist/esm/pages/SendToWallet/RecentWalletsPage.js +43 -39
  72. package/dist/esm/pages/SendToWallet/RecentWalletsPage.js.map +1 -1
  73. package/dist/esm/pages/SendToWallet/SendToConfiguredWalletPage.js +32 -26
  74. package/dist/esm/pages/SendToWallet/SendToConfiguredWalletPage.js.map +1 -1
  75. package/dist/esm/pages/SendToWallet/SendToWalletPage.js +5 -10
  76. package/dist/esm/pages/SendToWallet/SendToWalletPage.js.map +1 -1
  77. package/dist/esm/providers/WalletProvider/WalletProvider.d.ts.map +1 -1
  78. package/dist/esm/providers/WalletProvider/WalletProvider.js +14 -2
  79. package/dist/esm/providers/WalletProvider/WalletProvider.js.map +1 -1
  80. package/dist/esm/providers/WidgetProvider/WidgetProvider.d.ts.map +1 -1
  81. package/dist/esm/providers/WidgetProvider/WidgetProvider.js +10 -14
  82. package/dist/esm/providers/WidgetProvider/WidgetProvider.js.map +1 -1
  83. package/dist/esm/stores/bookmarks/types.d.ts +3 -0
  84. package/dist/esm/stores/bookmarks/types.d.ts.map +1 -1
  85. package/dist/esm/stores/chains/ChainOrderStore.d.ts.map +1 -1
  86. package/dist/esm/stores/chains/ChainOrderStore.js +4 -1
  87. package/dist/esm/stores/chains/ChainOrderStore.js.map +1 -1
  88. package/dist/esm/stores/form/FormStore.js +3 -2
  89. package/dist/esm/stores/form/FormStore.js.map +1 -1
  90. package/dist/esm/stores/form/URLSearchParamsBuilder.js +7 -3
  91. package/dist/esm/stores/form/URLSearchParamsBuilder.js.map +1 -1
  92. package/dist/esm/stores/form/getDefaultValuesFromQueryString.js +4 -1
  93. package/dist/esm/stores/form/getDefaultValuesFromQueryString.js.map +1 -1
  94. package/dist/esm/utils/chainType.js +32 -1
  95. package/dist/esm/utils/chainType.js.map +1 -1
  96. package/dist/esm/utils/customReceiver.js +6 -1
  97. package/dist/esm/utils/customReceiver.js.map +1 -1
  98. package/dist/esm/utils/token.js +13 -1
  99. package/dist/esm/utils/token.js.map +1 -1
  100. package/package.json +7 -7
  101. package/src/components/AmountInputCard/AmountInputCardPair.tsx +6 -2
  102. package/src/components/SelectChainAndToken.tsx +5 -1
  103. package/src/components/SendToWallet/SendToWalletButton.tsx +13 -8
  104. package/src/components/TokenList/TokenDetailsSheet.tsx +5 -9
  105. package/src/components/TokenList/TokenDetailsSheetContent.tsx +46 -4
  106. package/src/components/TokenList/TokenListItem.tsx +44 -68
  107. package/src/components/TokenList/VirtualizedTokenList.tsx +3 -6
  108. package/src/components/TokenList/tokenVerificationIcons.ts +15 -0
  109. package/src/components/TokenList/types.ts +3 -11
  110. package/src/components/TokenList/useTokenSelect.ts +15 -0
  111. package/src/config/constants.ts +3 -0
  112. package/src/config/version.ts +1 -1
  113. package/src/hooks/useAccountsBalancesData.ts +6 -2
  114. package/src/hooks/useAddressValidation.ts +87 -32
  115. package/src/hooks/useGasRefuel.ts +11 -1
  116. package/src/hooks/useRoutes.ts +23 -18
  117. package/src/hooks/useToAddressAutoPopulate.ts +13 -17
  118. package/src/hooks/useToAddressRequirements.ts +19 -4
  119. package/src/hooks/useToAddressReset.ts +13 -4
  120. package/src/hooks/useTokenBalance.ts +6 -1
  121. package/src/pages/SendToWallet/BookmarkAddressSheet.tsx +5 -1
  122. package/src/pages/SendToWallet/BookmarksPage.tsx +42 -52
  123. package/src/pages/SendToWallet/ConnectedWalletsPage.tsx +4 -14
  124. package/src/pages/SendToWallet/RecentWalletsPage.tsx +59 -66
  125. package/src/pages/SendToWallet/SendToConfiguredWalletPage.tsx +45 -50
  126. package/src/pages/SendToWallet/SendToWalletPage.tsx +4 -16
  127. package/src/providers/WalletProvider/WalletProvider.tsx +28 -3
  128. package/src/providers/WidgetProvider/WidgetProvider.tsx +20 -19
  129. package/src/stores/bookmarks/types.ts +3 -0
  130. package/src/stores/chains/ChainOrderStore.tsx +4 -1
  131. package/src/stores/form/FormStore.tsx +2 -0
  132. package/src/stores/form/URLSearchParamsBuilder.tsx +4 -2
  133. package/src/stores/form/getDefaultValuesFromQueryString.ts +19 -0
  134. package/src/utils/chainType.ts +73 -1
  135. package/src/utils/customReceiver.ts +36 -0
  136. package/src/utils/token.ts +48 -0
@@ -195,7 +195,8 @@
195
195
  "walletAddressInvalid_chain": "Alamat dompet atau nama domain tidak valid untuk jaringan tujuan yang dipilih {{chainName}}",
196
196
  "walletAddressRequired": "Alamat dompet diperlukan.",
197
197
  "walletChainTypeInvalid": "Alamat dompet tidak cocok dengan jaringan tujuan yang dipilih {{chainName}}",
198
- "walletMismatch": "Alamat dompet tidak cocok"
198
+ "walletMismatch": "Alamat dompet tidak cocok",
199
+ "zcashAddressInvalid": ""
199
200
  }
200
201
  },
201
202
  "tooltip": {
@@ -363,6 +364,10 @@
363
364
  "currentPrice": "",
364
365
  "contractAddress": "",
365
366
  "marketCap": "",
366
- "volume24h": ""
367
+ "volume24h": "",
368
+ "status": "",
369
+ "statusFlagged": "",
370
+ "statusUnverified": "",
371
+ "statusVerified": ""
367
372
  }
368
373
  }
@@ -195,7 +195,8 @@
195
195
  "walletAddressInvalid_chain": "",
196
196
  "walletAddressRequired": "L'indirizzo è un campo obbligatorio.",
197
197
  "walletChainTypeInvalid": "",
198
- "walletMismatch": ""
198
+ "walletMismatch": "",
199
+ "zcashAddressInvalid": ""
199
200
  }
200
201
  },
201
202
  "tooltip": {
@@ -363,6 +364,10 @@
363
364
  "currentPrice": "",
364
365
  "contractAddress": "",
365
366
  "marketCap": "",
366
- "volume24h": ""
367
+ "volume24h": "",
368
+ "status": "",
369
+ "statusFlagged": "",
370
+ "statusUnverified": "",
371
+ "statusVerified": ""
367
372
  }
368
373
  }
@@ -195,7 +195,8 @@
195
195
  "walletAddressInvalid_chain": "選択された宛先チェーン {{chainName}} のウォレットアドレスまたはドメイン名が無効です",
196
196
  "walletAddressRequired": "ウォレットアドレスは必須項目です。",
197
197
  "walletChainTypeInvalid": "選択された宛先チェーン {{chainName}} のウォレットアドレスが一致しません",
198
- "walletMismatch": "ウォレットアドレスが一致しません"
198
+ "walletMismatch": "ウォレットアドレスが一致しません",
199
+ "zcashAddressInvalid": ""
199
200
  }
200
201
  },
201
202
  "tooltip": {
@@ -363,6 +364,10 @@
363
364
  "currentPrice": "",
364
365
  "contractAddress": "",
365
366
  "marketCap": "",
366
- "volume24h": ""
367
+ "volume24h": "",
368
+ "status": "",
369
+ "statusFlagged": "",
370
+ "statusUnverified": "",
371
+ "statusVerified": ""
367
372
  }
368
373
  }
@@ -195,7 +195,8 @@
195
195
  "walletAddressInvalid_chain": "",
196
196
  "walletAddressRequired": "지갑 주소가 필요합니다.",
197
197
  "walletChainTypeInvalid": "",
198
- "walletMismatch": ""
198
+ "walletMismatch": "",
199
+ "zcashAddressInvalid": ""
199
200
  }
200
201
  },
201
202
  "tooltip": {
@@ -363,6 +364,10 @@
363
364
  "currentPrice": "",
364
365
  "contractAddress": "",
365
366
  "marketCap": "",
366
- "volume24h": ""
367
+ "volume24h": "",
368
+ "status": "",
369
+ "statusFlagged": "",
370
+ "statusUnverified": "",
371
+ "statusVerified": ""
367
372
  }
368
373
  }
@@ -195,7 +195,8 @@
195
195
  "walletAddressInvalid_chain": "",
196
196
  "walletAddressRequired": "",
197
197
  "walletChainTypeInvalid": "",
198
- "walletMismatch": ""
198
+ "walletMismatch": "",
199
+ "zcashAddressInvalid": ""
199
200
  }
200
201
  },
201
202
  "tooltip": {
@@ -363,6 +364,10 @@
363
364
  "currentPrice": "",
364
365
  "contractAddress": "",
365
366
  "marketCap": "",
366
- "volume24h": ""
367
+ "volume24h": "",
368
+ "status": "",
369
+ "statusFlagged": "",
370
+ "statusUnverified": "",
371
+ "statusVerified": ""
367
372
  }
368
373
  }
@@ -195,7 +195,8 @@
195
195
  "walletAddressInvalid_chain": "O endereço da carteira ou o nome de domínio é inválido para a rede de destino selecionada {{chainName}}",
196
196
  "walletAddressRequired": "Endereço da carteira é necessário.",
197
197
  "walletChainTypeInvalid": "O endereço da carteira não corresponde à rede de destino selecionada - {{chainName}}",
198
- "walletMismatch": "Incompatibilidade de endereço da carteira"
198
+ "walletMismatch": "Incompatibilidade de endereço da carteira",
199
+ "zcashAddressInvalid": ""
199
200
  }
200
201
  },
201
202
  "tooltip": {
@@ -363,6 +364,10 @@
363
364
  "currentPrice": "Preço atual",
364
365
  "contractAddress": "Endereço do Contrato",
365
366
  "marketCap": "Capitalização de mercado",
366
- "volume24h": "Volume 24h"
367
+ "volume24h": "Volume 24h",
368
+ "status": "",
369
+ "statusFlagged": "",
370
+ "statusUnverified": "",
371
+ "statusVerified": ""
367
372
  }
368
373
  }
@@ -195,7 +195,8 @@
195
195
  "walletAddressInvalid_chain": "ที่อยู่กระเป๋าเงินหรือชื่อโดเมนไม่ถูกต้องสำหรับเครือข่ายปลายทางที่เลือก {{chainName}}",
196
196
  "walletAddressRequired": "กรุณากรอกที่อยู่กระเป๋าเงิน.",
197
197
  "walletChainTypeInvalid": "ที่อยู่กระเป๋าเงินหรือชื่อโดเมนไม่ถูกต้องสำหรับเครือข่ายปลายทางที่เลือก {{chainName}}",
198
- "walletMismatch": "ที่อยู่ของกระเป๋าเงินไม่ตรงกัน"
198
+ "walletMismatch": "ที่อยู่ของกระเป๋าเงินไม่ตรงกัน",
199
+ "zcashAddressInvalid": ""
199
200
  }
200
201
  },
201
202
  "tooltip": {
@@ -363,6 +364,10 @@
363
364
  "currentPrice": "",
364
365
  "contractAddress": "",
365
366
  "marketCap": "",
366
- "volume24h": ""
367
+ "volume24h": "",
368
+ "status": "",
369
+ "statusFlagged": "",
370
+ "statusUnverified": "",
371
+ "statusVerified": ""
367
372
  }
368
373
  }
@@ -195,7 +195,8 @@
195
195
  "walletAddressInvalid_chain": "Cüzdan adresi ya da domain adı {{chainName}} hedef ağında geçerli değil",
196
196
  "walletAddressRequired": "Cüzdan adresi gereklidir.",
197
197
  "walletChainTypeInvalid": "Cüzdan adresi ile {{chainName}} hedef ağ eşleşmiyor",
198
- "walletMismatch": "Cüzdan adresi uyuşmazlığı"
198
+ "walletMismatch": "Cüzdan adresi uyuşmazlığı",
199
+ "zcashAddressInvalid": ""
199
200
  }
200
201
  },
201
202
  "tooltip": {
@@ -363,6 +364,10 @@
363
364
  "currentPrice": "",
364
365
  "contractAddress": "",
365
366
  "marketCap": "",
366
- "volume24h": ""
367
+ "volume24h": "",
368
+ "status": "",
369
+ "statusFlagged": "",
370
+ "statusUnverified": "",
371
+ "statusVerified": ""
367
372
  }
368
373
  }
@@ -195,7 +195,8 @@
195
195
  "walletAddressInvalid_chain": "Адреса гаманця не відповідає обраному чейну призначення - {{chainName}}",
196
196
  "walletAddressRequired": "Необхідно вказати адресу гаманця.",
197
197
  "walletChainTypeInvalid": "Адреса гаманця не відповідає обраному чейну призначення - {{chainName}}",
198
- "walletMismatch": "Невідповідність адреси гаманця"
198
+ "walletMismatch": "Невідповідність адреси гаманця",
199
+ "zcashAddressInvalid": ""
199
200
  }
200
201
  },
201
202
  "tooltip": {
@@ -363,6 +364,10 @@
363
364
  "currentPrice": "Поточна ціна",
364
365
  "contractAddress": "Адреса контракту",
365
366
  "marketCap": "Ринкова капіталізація",
366
- "volume24h": "Обсяг 24г"
367
+ "volume24h": "Обсяг 24г",
368
+ "status": "",
369
+ "statusFlagged": "",
370
+ "statusUnverified": "",
371
+ "statusVerified": ""
367
372
  }
368
373
  }
@@ -195,7 +195,8 @@
195
195
  "walletAddressInvalid_chain": "Địa chỉ ví hoặc tên miền không hợp lệ đối với chuỗi đích đã chọn {{chainName}}",
196
196
  "walletAddressRequired": "Yêu cầu địa chỉ ví.",
197
197
  "walletChainTypeInvalid": "Địa chỉ ví không khớp với chuỗi đích đã chọn {{chainName}}",
198
- "walletMismatch": "Địa chỉ ví không khớp"
198
+ "walletMismatch": "Địa chỉ ví không khớp",
199
+ "zcashAddressInvalid": ""
199
200
  }
200
201
  },
201
202
  "tooltip": {
@@ -363,6 +364,10 @@
363
364
  "currentPrice": "",
364
365
  "contractAddress": "",
365
366
  "marketCap": "",
366
- "volume24h": ""
367
+ "volume24h": "",
368
+ "status": "",
369
+ "statusFlagged": "",
370
+ "statusUnverified": "",
371
+ "statusVerified": ""
367
372
  }
368
373
  }
@@ -195,7 +195,8 @@
195
195
  "walletAddressInvalid_chain": "钱包地址或者域名在所选中的 {{chainName}} 链无效",
196
196
  "walletAddressRequired": "请输入钱包地址。",
197
197
  "walletChainTypeInvalid": "钱包地址与所选中目标的 {{chainName}} 链不匹配",
198
- "walletMismatch": "钱包地址不匹配"
198
+ "walletMismatch": "钱包地址不匹配",
199
+ "zcashAddressInvalid": ""
199
200
  }
200
201
  },
201
202
  "tooltip": {
@@ -363,6 +364,10 @@
363
364
  "currentPrice": "",
364
365
  "contractAddress": "",
365
366
  "marketCap": "",
366
- "volume24h": ""
367
+ "volume24h": "",
368
+ "status": "",
369
+ "statusFlagged": "",
370
+ "statusUnverified": "",
371
+ "statusVerified": ""
367
372
  }
368
373
  }
@@ -37,7 +37,8 @@ const BookmarkAddressSheet = ({ validatedWallet, onAddBookmark, ref }) => {
37
37
  return {
38
38
  name: nameValue,
39
39
  address: validationResult.address,
40
- chainType: validationResult.chainType
40
+ chainType: validationResult.chainType,
41
+ chainId: validationResult.chainId
41
42
  };
42
43
  };
43
44
  const validateWithValidatedWallet = (validatedWallet) => {
@@ -45,7 +46,8 @@ const BookmarkAddressSheet = ({ validatedWallet, onAddBookmark, ref }) => {
45
46
  return {
46
47
  name: nameValue,
47
48
  address: validatedWallet.address,
48
- chainType: validatedWallet.chainType
49
+ chainType: validatedWallet.chainType,
50
+ chainId: validatedWallet.chainId
49
51
  };
50
52
  };
51
53
  const handleBookmark = async () => {
@@ -78,7 +80,8 @@ const BookmarkAddressSheet = ({ validatedWallet, onAddBookmark, ref }) => {
78
80
  onAddBookmark({
79
81
  name: validatedBookmark.name,
80
82
  address: validatedBookmark.address,
81
- chainType: validatedBookmark.chainType
83
+ chainType: validatedBookmark.chainType,
84
+ chainId: validatedBookmark.chainId
82
85
  });
83
86
  }
84
87
  };
@@ -136,7 +139,7 @@ const BookmarkAddressSheet = ({ validatedWallet, onAddBookmark, ref }) => {
136
139
  placeholder: t("sendToWallet.enterAddress", { context: "long" }),
137
140
  "aria-label": t("sendToWallet.enterAddress", { context: "long" }),
138
141
  maxRows: 2,
139
- inputProps: { maxLength: 128 },
142
+ inputProps: { maxLength: 512 },
140
143
  multiline: true
141
144
  })
142
145
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"BookmarkAddressSheet.js","names":[],"sources":["../../../../src/pages/SendToWallet/BookmarkAddressSheet.tsx"],"sourcesContent":["import ErrorIcon from '@mui/icons-material/Error'\nimport TurnedIn from '@mui/icons-material/TurnedIn'\nimport WarningRounded from '@mui/icons-material/WarningRounded'\nimport { Button, Typography } from '@mui/material'\nimport type { ChangeEvent, JSX, Ref, RefObject } from 'react'\nimport { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { BottomSheet } from '../../components/BottomSheet/BottomSheet.js'\nimport type { BottomSheetBase } from '../../components/BottomSheet/types.js'\nimport { Input } from '../../components/Input.js'\nimport { AlertMessage } from '../../components/Messages/AlertMessage.js'\nimport { useAddressValidation } from '../../hooks/useAddressValidation.js'\nimport type { Bookmark } from '../../stores/bookmarks/types.js'\nimport { useBookmarkActions } from '../../stores/bookmarks/useBookmarkActions.js'\nimport {\n AddressInput,\n BookmarkInputFields,\n IconContainer,\n SendToWalletButtonRow,\n SendToWalletCard,\n SendToWalletSheetContainer,\n SheetAddressContainer,\n SheetTitle,\n ValidationAlert,\n} from './SendToWalletPage.style.js'\nimport type { BookmarkError } from './types.js'\n\ninterface BookmarkAddressProps {\n onAddBookmark: (bookmark: Bookmark) => void\n validatedWallet?: Bookmark\n}\n\nexport const BookmarkAddressSheet = ({\n validatedWallet,\n onAddBookmark,\n ref,\n}: BookmarkAddressProps & {\n ref?: Ref<BottomSheetBase>\n}): JSX.Element => {\n const { t } = useTranslation()\n const [name, setName] = useState('')\n const [address, setAddress] = useState('')\n const [error, setError] = useState<BookmarkError>()\n const { validateAddress, isValidating } = useAddressValidation()\n const { getBookmark } = useBookmarkActions()\n\n const nameValue = name.trim() || validatedWallet?.name || ''\n const addressValue = address || validatedWallet?.address || ''\n\n const handleCancel = () => {\n setError(undefined)\n ;(ref as RefObject<BottomSheetBase>).current?.close()\n }\n\n const validateWithAddressFromInput = async () => {\n const validationResult = await validateAddress({ value: address })\n if (!validationResult.isValid) {\n setError({ type: 'address', message: validationResult.error })\n return\n }\n\n return {\n name: nameValue,\n address: validationResult.address,\n chainType: validationResult.chainType,\n }\n }\n\n const validateWithValidatedWallet = (validatedWallet: Bookmark) => {\n if (error) {\n setError(undefined)\n }\n return {\n name: nameValue,\n address: validatedWallet.address,\n chainType: validatedWallet.chainType,\n }\n }\n\n const handleBookmark = async () => {\n if (isValidating) {\n return\n }\n if (!nameValue) {\n setError({\n type: 'name',\n message: t('error.title.bookmarkNameRequired'),\n })\n return\n }\n if (!addressValue) {\n setError({\n type: 'address',\n message: t('error.title.walletAddressRequired'),\n })\n return\n }\n\n // If the validatedWallet is supplied as a prop then we should assume\n // the address has already been validated\n const validatedBookmark = validatedWallet\n ? validateWithValidatedWallet(validatedWallet)\n : await validateWithAddressFromInput()\n\n if (validatedBookmark) {\n const existingBookmark = getBookmark(validatedBookmark.address)\n if (existingBookmark) {\n setError({\n type: 'address',\n message: t('error.title.bookmarkAlreadyExists', {\n name: existingBookmark.name,\n }),\n })\n return\n }\n ;(ref as RefObject<BottomSheetBase>).current?.close()\n\n onAddBookmark({\n name: validatedBookmark.name,\n address: validatedBookmark.address,\n chainType: validatedBookmark.chainType,\n })\n }\n }\n\n const handleAddressInputChange = (e: ChangeEvent) => {\n if (error) {\n setError(undefined)\n }\n setAddress((e.target as HTMLInputElement).value.trim())\n }\n\n const handleNameInputChange = (e: ChangeEvent) => {\n if (error) {\n setError(undefined)\n }\n setName((e.target as HTMLInputElement).value)\n }\n\n const resetValues = () => {\n setName('')\n setAddress('')\n }\n\n return (\n <BottomSheet ref={ref} onClose={resetValues}>\n <SendToWalletSheetContainer>\n <IconContainer>\n <TurnedIn sx={{ fontSize: 40 }} />\n </IconContainer>\n <SheetTitle>{t('sendToWallet.bookmarkWallet')}</SheetTitle>\n {validatedWallet ? (\n <SheetAddressContainer>\n {validatedWallet?.name ? (\n <Typography\n sx={{\n fontWeight: 600,\n mb: 0.5,\n }}\n >\n {validatedWallet?.name}\n </Typography>\n ) : null}\n <Typography>{validatedWallet?.address}</Typography>\n </SheetAddressContainer>\n ) : null}\n <BookmarkInputFields>\n <SendToWalletCard type={error?.type === 'name' ? 'error' : 'default'}>\n <Input\n size=\"small\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n onChange={handleNameInputChange}\n value={name}\n placeholder={validatedWallet?.name || t('sendToWallet.enterName')}\n aria-label={validatedWallet?.name || t('sendToWallet.enterName')}\n inputProps={{ maxLength: 128 }}\n />\n </SendToWalletCard>\n {!validatedWallet && (\n <SendToWalletCard\n type={error?.type === 'address' ? 'error' : 'default'}\n >\n <AddressInput\n size=\"small\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n onChange={handleAddressInputChange}\n value={address}\n placeholder={t('sendToWallet.enterAddress', {\n context: 'long',\n })}\n aria-label={t('sendToWallet.enterAddress', {\n context: 'long',\n })}\n maxRows={2}\n inputProps={{ maxLength: 128 }}\n multiline\n />\n </SendToWalletCard>\n )}\n {error ? (\n <ValidationAlert icon={<ErrorIcon />}>\n {error.message}\n </ValidationAlert>\n ) : null}\n </BookmarkInputFields>\n <AlertMessage\n title={\n <Typography variant=\"body2\" sx={{ color: 'text.primary' }}>\n {t('warning.message.fundsLossPrevention')}\n </Typography>\n }\n icon={<WarningRounded />}\n />\n <SendToWalletButtonRow>\n <Button variant=\"text\" onClick={handleCancel} fullWidth>\n {t('button.cancel')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={handleBookmark}\n loading={isValidating}\n loadingPosition=\"center\"\n fullWidth\n focusRipple\n >\n {t('button.bookmark')}\n </Button>\n </SendToWalletButtonRow>\n </SendToWalletSheetContainer>\n </BottomSheet>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;AAgCA,MAAa,wBAAwB,EACnC,iBACA,eACA,UAGiB;CACjB,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,CAAC,MAAM,WAAW,SAAS,EAAE;CACnC,MAAM,CAAC,SAAS,cAAc,SAAS,EAAE;CACzC,MAAM,CAAC,OAAO,YAAY,SAAwB;CAClD,MAAM,EAAE,iBAAiB,iBAAiB,qBAAqB;CAC/D,MAAM,EAAE,gBAAgB,mBAAmB;CAE3C,MAAM,YAAY,KAAK,KAAK,KAAK,iBAAiB,QAAQ;CAC1D,MAAM,eAAe,WAAW,iBAAiB,WAAW;CAE5D,MAAM,qBAAqB;EACzB,SAAS,KAAA,CAAS;EACjB,IAAoC,SAAS,MAAM;CACtD;CAEA,MAAM,+BAA+B,YAAY;EAC/C,MAAM,mBAAmB,MAAM,gBAAgB,EAAE,OAAO,QAAQ,CAAC;EACjE,IAAI,CAAC,iBAAiB,SAAS;GAC7B,SAAS;IAAE,MAAM;IAAW,SAAS,iBAAiB;GAAM,CAAC;GAC7D;EACF;EAEA,OAAO;GACL,MAAM;GACN,SAAS,iBAAiB;GAC1B,WAAW,iBAAiB;EAC9B;CACF;CAEA,MAAM,+BAA+B,oBAA8B;EACjE,IAAI,OACF,SAAS,KAAA,CAAS;EAEpB,OAAO;GACL,MAAM;GACN,SAAS,gBAAgB;GACzB,WAAW,gBAAgB;EAC7B;CACF;CAEA,MAAM,iBAAiB,YAAY;EACjC,IAAI,cACF;EAEF,IAAI,CAAC,WAAW;GACd,SAAS;IACP,MAAM;IACN,SAAS,EAAE,kCAAkC;GAC/C,CAAC;GACD;EACF;EACA,IAAI,CAAC,cAAc;GACjB,SAAS;IACP,MAAM;IACN,SAAS,EAAE,mCAAmC;GAChD,CAAC;GACD;EACF;EAIA,MAAM,oBAAoB,kBACtB,4BAA4B,eAAe,IAC3C,MAAM,6BAA6B;EAEvC,IAAI,mBAAmB;GACrB,MAAM,mBAAmB,YAAY,kBAAkB,OAAO;GAC9D,IAAI,kBAAkB;IACpB,SAAS;KACP,MAAM;KACN,SAAS,EAAE,qCAAqC,EAC9C,MAAM,iBAAiB,KACzB,CAAC;IACH,CAAC;IACD;GACF;GACC,IAAoC,SAAS,MAAM;GAEpD,cAAc;IACZ,MAAM,kBAAkB;IACxB,SAAS,kBAAkB;IAC3B,WAAW,kBAAkB;GAC/B,CAAC;EACH;CACF;CAEA,MAAM,4BAA4B,MAAmB;EACnD,IAAI,OACF,SAAS,KAAA,CAAS;EAEpB,WAAY,EAAE,OAA4B,MAAM,KAAK,CAAC;CACxD;CAEA,MAAM,yBAAyB,MAAmB;EAChD,IAAI,OACF,SAAS,KAAA,CAAS;EAEpB,QAAS,EAAE,OAA4B,KAAK;CAC9C;CAEA,MAAM,oBAAoB;EACxB,QAAQ,EAAE;EACV,WAAW,EAAE;CACf;CAEA,OACE,oBAAC,aAAD;EAAkB;EAAK,SAAS;EAC9B,UAAA,qBAAC,4BAAD,EAAA,UAAA;GACE,oBAAC,eAAD,EAAA,UACE,oBAAC,UAAD,EAAU,IAAI,EAAE,UAAU,GAAG,EAAI,CAAA,EACpB,CAAA;GACf,oBAAC,YAAD,EAAA,UAAa,EAAE,6BAA6B,EAAc,CAAA;GACzD,kBACC,qBAAC,uBAAD,EAAA,UAAA,CACG,iBAAiB,OAChB,oBAAC,YAAD;IACE,IAAI;KACF,YAAY;KACZ,IAAI;IACN;IAEC,UAAA,iBAAiB;GACR,CAAA,IACV,MACJ,oBAAC,YAAD,EAAA,UAAa,iBAAiB,QAAoB,CAAA,CAC7B,EAAA,CAAA,IACrB;GACJ,qBAAC,qBAAD,EAAA,UAAA;IACE,oBAAC,kBAAD;KAAkB,MAAM,OAAO,SAAS,SAAS,UAAU;KACzD,UAAA,oBAAC,OAAD;MACE,MAAK;MACL,cAAa;MACb,aAAY;MACZ,gBAAe;MACf,YAAW;MACX,UAAU;MACV,OAAO;MACP,aAAa,iBAAiB,QAAQ,EAAE,wBAAwB;MAChE,cAAY,iBAAiB,QAAQ,EAAE,wBAAwB;MAC/D,YAAY,EAAE,WAAW,IAAI;KAC9B,CAAA;IACe,CAAA;IACjB,CAAC,mBACA,oBAAC,kBAAD;KACE,MAAM,OAAO,SAAS,YAAY,UAAU;KAE5C,UAAA,oBAAC,cAAD;MACE,MAAK;MACL,cAAa;MACb,aAAY;MACZ,gBAAe;MACf,YAAW;MACX,UAAU;MACV,OAAO;MACP,aAAa,EAAE,6BAA6B,EAC1C,SAAS,OACX,CAAC;MACD,cAAY,EAAE,6BAA6B,EACzC,SAAS,OACX,CAAC;MACD,SAAS;MACT,YAAY,EAAE,WAAW,IAAI;MAC7B,WAAA;KACD,CAAA;IACe,CAAA;IAEnB,QACC,oBAAC,iBAAD;KAAiB,MAAM,oBAAC,WAAD,CAAY,CAAA;KAChC,UAAA,MAAM;IACQ,CAAA,IACf;GACe,EAAA,CAAA;GACrB,oBAAC,cAAD;IACE,OACE,oBAAC,YAAD;KAAY,SAAQ;KAAQ,IAAI,EAAE,OAAO,eAAe;KACrD,UAAA,EAAE,qCAAqC;IAC9B,CAAA;IAEd,MAAM,oBAAC,gBAAD,CAAiB,CAAA;GACxB,CAAA;GACD,qBAAC,uBAAD,EAAA,UAAA,CACE,oBAAC,QAAD;IAAQ,SAAQ;IAAO,SAAS;IAAc,WAAA;IAC3C,UAAA,EAAE,eAAe;GACZ,CAAA,GACR,oBAAC,QAAD;IACE,SAAQ;IACR,SAAS;IACT,SAAS;IACT,iBAAgB;IAChB,WAAA;IACA,aAAA;IAEC,UAAA,EAAE,iBAAiB;GACd,CAAA,CACa,EAAA,CAAA;EACG,EAAA,CAAA;CACjB,CAAA;AAEjB"}
1
+ {"version":3,"file":"BookmarkAddressSheet.js","names":[],"sources":["../../../../src/pages/SendToWallet/BookmarkAddressSheet.tsx"],"sourcesContent":["import ErrorIcon from '@mui/icons-material/Error'\nimport TurnedIn from '@mui/icons-material/TurnedIn'\nimport WarningRounded from '@mui/icons-material/WarningRounded'\nimport { Button, Typography } from '@mui/material'\nimport type { ChangeEvent, JSX, Ref, RefObject } from 'react'\nimport { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { BottomSheet } from '../../components/BottomSheet/BottomSheet.js'\nimport type { BottomSheetBase } from '../../components/BottomSheet/types.js'\nimport { Input } from '../../components/Input.js'\nimport { AlertMessage } from '../../components/Messages/AlertMessage.js'\nimport { addressInputMaxLength } from '../../config/constants.js'\nimport { useAddressValidation } from '../../hooks/useAddressValidation.js'\nimport type { Bookmark } from '../../stores/bookmarks/types.js'\nimport { useBookmarkActions } from '../../stores/bookmarks/useBookmarkActions.js'\nimport {\n AddressInput,\n BookmarkInputFields,\n IconContainer,\n SendToWalletButtonRow,\n SendToWalletCard,\n SendToWalletSheetContainer,\n SheetAddressContainer,\n SheetTitle,\n ValidationAlert,\n} from './SendToWalletPage.style.js'\nimport type { BookmarkError } from './types.js'\n\ninterface BookmarkAddressProps {\n onAddBookmark: (bookmark: Bookmark) => void\n validatedWallet?: Bookmark\n}\n\nexport const BookmarkAddressSheet = ({\n validatedWallet,\n onAddBookmark,\n ref,\n}: BookmarkAddressProps & {\n ref?: Ref<BottomSheetBase>\n}): JSX.Element => {\n const { t } = useTranslation()\n const [name, setName] = useState('')\n const [address, setAddress] = useState('')\n const [error, setError] = useState<BookmarkError>()\n const { validateAddress, isValidating } = useAddressValidation()\n const { getBookmark } = useBookmarkActions()\n\n const nameValue = name.trim() || validatedWallet?.name || ''\n const addressValue = address || validatedWallet?.address || ''\n\n const handleCancel = () => {\n setError(undefined)\n ;(ref as RefObject<BottomSheetBase>).current?.close()\n }\n\n const validateWithAddressFromInput = async () => {\n const validationResult = await validateAddress({ value: address })\n if (!validationResult.isValid) {\n setError({ type: 'address', message: validationResult.error })\n return\n }\n\n return {\n name: nameValue,\n address: validationResult.address,\n chainType: validationResult.chainType,\n chainId: validationResult.chainId,\n }\n }\n\n const validateWithValidatedWallet = (validatedWallet: Bookmark) => {\n if (error) {\n setError(undefined)\n }\n return {\n name: nameValue,\n address: validatedWallet.address,\n chainType: validatedWallet.chainType,\n chainId: validatedWallet.chainId,\n }\n }\n\n const handleBookmark = async () => {\n if (isValidating) {\n return\n }\n if (!nameValue) {\n setError({\n type: 'name',\n message: t('error.title.bookmarkNameRequired'),\n })\n return\n }\n if (!addressValue) {\n setError({\n type: 'address',\n message: t('error.title.walletAddressRequired'),\n })\n return\n }\n\n // If the validatedWallet is supplied as a prop then we should assume\n // the address has already been validated\n const validatedBookmark = validatedWallet\n ? validateWithValidatedWallet(validatedWallet)\n : await validateWithAddressFromInput()\n\n if (validatedBookmark) {\n const existingBookmark = getBookmark(validatedBookmark.address)\n if (existingBookmark) {\n setError({\n type: 'address',\n message: t('error.title.bookmarkAlreadyExists', {\n name: existingBookmark.name,\n }),\n })\n return\n }\n ;(ref as RefObject<BottomSheetBase>).current?.close()\n\n onAddBookmark({\n name: validatedBookmark.name,\n address: validatedBookmark.address,\n chainType: validatedBookmark.chainType,\n chainId: validatedBookmark.chainId,\n })\n }\n }\n\n const handleAddressInputChange = (e: ChangeEvent) => {\n if (error) {\n setError(undefined)\n }\n setAddress((e.target as HTMLInputElement).value.trim())\n }\n\n const handleNameInputChange = (e: ChangeEvent) => {\n if (error) {\n setError(undefined)\n }\n setName((e.target as HTMLInputElement).value)\n }\n\n const resetValues = () => {\n setName('')\n setAddress('')\n }\n\n return (\n <BottomSheet ref={ref} onClose={resetValues}>\n <SendToWalletSheetContainer>\n <IconContainer>\n <TurnedIn sx={{ fontSize: 40 }} />\n </IconContainer>\n <SheetTitle>{t('sendToWallet.bookmarkWallet')}</SheetTitle>\n {validatedWallet ? (\n <SheetAddressContainer>\n {validatedWallet?.name ? (\n <Typography\n sx={{\n fontWeight: 600,\n mb: 0.5,\n }}\n >\n {validatedWallet?.name}\n </Typography>\n ) : null}\n <Typography>{validatedWallet?.address}</Typography>\n </SheetAddressContainer>\n ) : null}\n <BookmarkInputFields>\n <SendToWalletCard type={error?.type === 'name' ? 'error' : 'default'}>\n <Input\n size=\"small\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n onChange={handleNameInputChange}\n value={name}\n placeholder={validatedWallet?.name || t('sendToWallet.enterName')}\n aria-label={validatedWallet?.name || t('sendToWallet.enterName')}\n inputProps={{ maxLength: 128 }}\n />\n </SendToWalletCard>\n {!validatedWallet && (\n <SendToWalletCard\n type={error?.type === 'address' ? 'error' : 'default'}\n >\n <AddressInput\n size=\"small\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n onChange={handleAddressInputChange}\n value={address}\n placeholder={t('sendToWallet.enterAddress', {\n context: 'long',\n })}\n aria-label={t('sendToWallet.enterAddress', {\n context: 'long',\n })}\n maxRows={2}\n inputProps={{ maxLength: addressInputMaxLength }}\n multiline\n />\n </SendToWalletCard>\n )}\n {error ? (\n <ValidationAlert icon={<ErrorIcon />}>\n {error.message}\n </ValidationAlert>\n ) : null}\n </BookmarkInputFields>\n <AlertMessage\n title={\n <Typography variant=\"body2\" sx={{ color: 'text.primary' }}>\n {t('warning.message.fundsLossPrevention')}\n </Typography>\n }\n icon={<WarningRounded />}\n />\n <SendToWalletButtonRow>\n <Button variant=\"text\" onClick={handleCancel} fullWidth>\n {t('button.cancel')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={handleBookmark}\n loading={isValidating}\n loadingPosition=\"center\"\n fullWidth\n focusRipple\n >\n {t('button.bookmark')}\n </Button>\n </SendToWalletButtonRow>\n </SendToWalletSheetContainer>\n </BottomSheet>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;AAiCA,MAAa,wBAAwB,EACnC,iBACA,eACA,UAGiB;CACjB,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,CAAC,MAAM,WAAW,SAAS,EAAE;CACnC,MAAM,CAAC,SAAS,cAAc,SAAS,EAAE;CACzC,MAAM,CAAC,OAAO,YAAY,SAAwB;CAClD,MAAM,EAAE,iBAAiB,iBAAiB,qBAAqB;CAC/D,MAAM,EAAE,gBAAgB,mBAAmB;CAE3C,MAAM,YAAY,KAAK,KAAK,KAAK,iBAAiB,QAAQ;CAC1D,MAAM,eAAe,WAAW,iBAAiB,WAAW;CAE5D,MAAM,qBAAqB;EACzB,SAAS,KAAA,CAAS;EACjB,IAAoC,SAAS,MAAM;CACtD;CAEA,MAAM,+BAA+B,YAAY;EAC/C,MAAM,mBAAmB,MAAM,gBAAgB,EAAE,OAAO,QAAQ,CAAC;EACjE,IAAI,CAAC,iBAAiB,SAAS;GAC7B,SAAS;IAAE,MAAM;IAAW,SAAS,iBAAiB;GAAM,CAAC;GAC7D;EACF;EAEA,OAAO;GACL,MAAM;GACN,SAAS,iBAAiB;GAC1B,WAAW,iBAAiB;GAC5B,SAAS,iBAAiB;EAC5B;CACF;CAEA,MAAM,+BAA+B,oBAA8B;EACjE,IAAI,OACF,SAAS,KAAA,CAAS;EAEpB,OAAO;GACL,MAAM;GACN,SAAS,gBAAgB;GACzB,WAAW,gBAAgB;GAC3B,SAAS,gBAAgB;EAC3B;CACF;CAEA,MAAM,iBAAiB,YAAY;EACjC,IAAI,cACF;EAEF,IAAI,CAAC,WAAW;GACd,SAAS;IACP,MAAM;IACN,SAAS,EAAE,kCAAkC;GAC/C,CAAC;GACD;EACF;EACA,IAAI,CAAC,cAAc;GACjB,SAAS;IACP,MAAM;IACN,SAAS,EAAE,mCAAmC;GAChD,CAAC;GACD;EACF;EAIA,MAAM,oBAAoB,kBACtB,4BAA4B,eAAe,IAC3C,MAAM,6BAA6B;EAEvC,IAAI,mBAAmB;GACrB,MAAM,mBAAmB,YAAY,kBAAkB,OAAO;GAC9D,IAAI,kBAAkB;IACpB,SAAS;KACP,MAAM;KACN,SAAS,EAAE,qCAAqC,EAC9C,MAAM,iBAAiB,KACzB,CAAC;IACH,CAAC;IACD;GACF;GACC,IAAoC,SAAS,MAAM;GAEpD,cAAc;IACZ,MAAM,kBAAkB;IACxB,SAAS,kBAAkB;IAC3B,WAAW,kBAAkB;IAC7B,SAAS,kBAAkB;GAC7B,CAAC;EACH;CACF;CAEA,MAAM,4BAA4B,MAAmB;EACnD,IAAI,OACF,SAAS,KAAA,CAAS;EAEpB,WAAY,EAAE,OAA4B,MAAM,KAAK,CAAC;CACxD;CAEA,MAAM,yBAAyB,MAAmB;EAChD,IAAI,OACF,SAAS,KAAA,CAAS;EAEpB,QAAS,EAAE,OAA4B,KAAK;CAC9C;CAEA,MAAM,oBAAoB;EACxB,QAAQ,EAAE;EACV,WAAW,EAAE;CACf;CAEA,OACE,oBAAC,aAAD;EAAkB;EAAK,SAAS;EAC9B,UAAA,qBAAC,4BAAD,EAAA,UAAA;GACE,oBAAC,eAAD,EAAA,UACE,oBAAC,UAAD,EAAU,IAAI,EAAE,UAAU,GAAG,EAAI,CAAA,EACpB,CAAA;GACf,oBAAC,YAAD,EAAA,UAAa,EAAE,6BAA6B,EAAc,CAAA;GACzD,kBACC,qBAAC,uBAAD,EAAA,UAAA,CACG,iBAAiB,OAChB,oBAAC,YAAD;IACE,IAAI;KACF,YAAY;KACZ,IAAI;IACN;IAEC,UAAA,iBAAiB;GACR,CAAA,IACV,MACJ,oBAAC,YAAD,EAAA,UAAa,iBAAiB,QAAoB,CAAA,CAC7B,EAAA,CAAA,IACrB;GACJ,qBAAC,qBAAD,EAAA,UAAA;IACE,oBAAC,kBAAD;KAAkB,MAAM,OAAO,SAAS,SAAS,UAAU;KACzD,UAAA,oBAAC,OAAD;MACE,MAAK;MACL,cAAa;MACb,aAAY;MACZ,gBAAe;MACf,YAAW;MACX,UAAU;MACV,OAAO;MACP,aAAa,iBAAiB,QAAQ,EAAE,wBAAwB;MAChE,cAAY,iBAAiB,QAAQ,EAAE,wBAAwB;MAC/D,YAAY,EAAE,WAAW,IAAI;KAC9B,CAAA;IACe,CAAA;IACjB,CAAC,mBACA,oBAAC,kBAAD;KACE,MAAM,OAAO,SAAS,YAAY,UAAU;KAE5C,UAAA,oBAAC,cAAD;MACE,MAAK;MACL,cAAa;MACb,aAAY;MACZ,gBAAe;MACf,YAAW;MACX,UAAU;MACV,OAAO;MACP,aAAa,EAAE,6BAA6B,EAC1C,SAAS,OACX,CAAC;MACD,cAAY,EAAE,6BAA6B,EACzC,SAAS,OACX,CAAC;MACD,SAAS;MACT,YAAY,EAAE,WAAA,IAAiC;MAC/C,WAAA;KACD,CAAA;IACe,CAAA;IAEnB,QACC,oBAAC,iBAAD;KAAiB,MAAM,oBAAC,WAAD,CAAY,CAAA;KAChC,UAAA,MAAM;IACQ,CAAA,IACf;GACe,EAAA,CAAA;GACrB,oBAAC,cAAD;IACE,OACE,oBAAC,YAAD;KAAY,SAAQ;KAAQ,IAAI,EAAE,OAAO,eAAe;KACrD,UAAA,EAAE,qCAAqC;IAC9B,CAAA;IAEd,MAAM,oBAAC,gBAAD,CAAiB,CAAA;GACxB,CAAA;GACD,qBAAC,uBAAD,EAAA,UAAA,CACE,oBAAC,QAAD;IAAQ,SAAQ;IAAO,SAAS;IAAc,WAAA;IAC3C,UAAA,EAAE,eAAe;GACZ,CAAA,GACR,oBAAC,QAAD;IACE,SAAQ;IACR,SAAS;IACT,SAAS;IACT,iBAAgB;IAChB,WAAA;IACA,aAAA;IAEC,UAAA,EAAE,iBAAiB;GACd,CAAA,CACa,EAAA,CAAA;EACG,EAAA,CAAA;CACjB,CAAA;AAEjB"}
@@ -1,9 +1,9 @@
1
+ import { defaultChainIdsByType } from "../../utils/chainType.js";
1
2
  import { navigationRoutes } from "../../utils/navigationRoutes.js";
2
3
  import { useBookmarkActions } from "../../stores/bookmarks/useBookmarkActions.js";
3
4
  import { useBookmarks } from "../../stores/bookmarks/useBookmarks.js";
4
5
  import { useFieldActions } from "../../stores/form/useFieldActions.js";
5
6
  import { PageContainer } from "../../components/PageContainer.js";
6
- import { defaultChainIdsByType } from "../../utils/chainType.js";
7
7
  import { useToAddressRequirements } from "../../hooks/useToAddressRequirements.js";
8
8
  import { shortenAddress } from "../../utils/wallet.js";
9
9
  import { openInNewTab } from "../../utils/url.js";
@@ -33,7 +33,7 @@ const BookmarksPage = () => {
33
33
  const listParentRef = useRef(null);
34
34
  const buttonRef = useRef(null);
35
35
  const { bookmarks } = useBookmarks();
36
- const { requiredToChainType } = useToAddressRequirements();
36
+ const { isValidReceiver } = useToAddressRequirements();
37
37
  const { addBookmark, removeBookmark, setSelectedBookmark } = useBookmarkActions();
38
38
  const navigate = useNavigate();
39
39
  const { setFieldValue } = useFieldActions();
@@ -69,36 +69,40 @@ const BookmarksPage = () => {
69
69
  },
70
70
  disablePadding: true,
71
71
  sx: { paddingTop: 1.5 },
72
- children: [bookmarks.map((bookmark) => /* @__PURE__ */ jsxs(ListItem$1, {
73
- sx: { position: "relative" },
74
- children: [/* @__PURE__ */ jsxs(ListItemButton$1, {
75
- onClick: () => handleBookmarkSelected(bookmark),
76
- disabled: requiredToChainType && requiredToChainType !== bookmark.chainType,
77
- children: [/* @__PURE__ */ jsx(ListItemAvatar, { children: /* @__PURE__ */ jsx(AccountAvatar, { chainId: defaultChainIdsByType[bookmark.chainType] }) }), /* @__PURE__ */ jsx(ListItemText, {
78
- primary: bookmark.name,
79
- secondary: shortenAddress(bookmark.address)
72
+ children: [bookmarks.map((bookmark) => {
73
+ const disabled = !isValidReceiver(bookmark.address);
74
+ const chainId = bookmark.chainId ?? defaultChainIdsByType[bookmark.chainType];
75
+ return /* @__PURE__ */ jsxs(ListItem$1, {
76
+ sx: { position: "relative" },
77
+ children: [/* @__PURE__ */ jsxs(ListItemButton$1, {
78
+ onClick: () => handleBookmarkSelected(bookmark),
79
+ disabled,
80
+ children: [/* @__PURE__ */ jsx(ListItemAvatar, { children: /* @__PURE__ */ jsx(AccountAvatar, { chainId }) }), /* @__PURE__ */ jsx(ListItemText, {
81
+ primary: bookmark.name,
82
+ secondary: shortenAddress(bookmark.address)
83
+ })]
84
+ }), /* @__PURE__ */ jsx(ContextMenu, {
85
+ disabled,
86
+ items: [
87
+ {
88
+ icon: /* @__PURE__ */ jsx(ContentCopyRounded, {}),
89
+ label: t("button.copyAddress"),
90
+ onClick: () => navigator.clipboard.writeText(bookmark.address)
91
+ },
92
+ {
93
+ icon: /* @__PURE__ */ jsx(OpenInNewRounded, {}),
94
+ label: t("button.viewOnExplorer"),
95
+ onClick: () => openInNewTab(getAddressLink(bookmark.address, chainId))
96
+ },
97
+ {
98
+ icon: /* @__PURE__ */ jsx(DeleteOutline, {}),
99
+ label: t("button.delete"),
100
+ onClick: () => removeBookmark(bookmark.address)
101
+ }
102
+ ]
80
103
  })]
81
- }), /* @__PURE__ */ jsx(ContextMenu, {
82
- disabled: !!(requiredToChainType && requiredToChainType !== bookmark.chainType),
83
- items: [
84
- {
85
- icon: /* @__PURE__ */ jsx(ContentCopyRounded, {}),
86
- label: t("button.copyAddress"),
87
- onClick: () => navigator.clipboard.writeText(bookmark.address)
88
- },
89
- {
90
- icon: /* @__PURE__ */ jsx(OpenInNewRounded, {}),
91
- label: t("button.viewOnExplorer"),
92
- onClick: () => openInNewTab(getAddressLink(bookmark.address, defaultChainIdsByType[bookmark.chainType]))
93
- },
94
- {
95
- icon: /* @__PURE__ */ jsx(DeleteOutline, {}),
96
- label: t("button.delete"),
97
- onClick: () => removeBookmark(bookmark.address)
98
- }
99
- ]
100
- })]
101
- }, bookmark.address)), !bookmarks.length && /* @__PURE__ */ jsx(EmptyListIndicator, {
104
+ }, bookmark.address);
105
+ }), !bookmarks.length && /* @__PURE__ */ jsx(EmptyListIndicator, {
102
106
  icon: /* @__PURE__ */ jsx(TurnedIn, {}),
103
107
  title: t("sendToWallet.noBookmarkedWallets"),
104
108
  message: t("sendToWallet.noBookmarkedWalletsMessage")
@@ -1 +1 @@
1
- {"version":3,"file":"BookmarksPage.js","names":["ListItem","ListItemButton"],"sources":["../../../../src/pages/SendToWallet/BookmarksPage.tsx"],"sourcesContent":["import ContentCopyRounded from '@mui/icons-material/ContentCopyRounded'\nimport DeleteOutline from '@mui/icons-material/DeleteOutlined'\nimport OpenInNewRounded from '@mui/icons-material/OpenInNewRounded'\nimport TurnedIn from '@mui/icons-material/TurnedIn'\nimport { Button, List, ListItemAvatar, ListItemText } from '@mui/material'\nimport { useNavigate } from '@tanstack/react-router'\nimport { type JSX, useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { AccountAvatar } from '../../components/Avatar/AccountAvatar.js'\nimport type { BottomSheetBase } from '../../components/BottomSheet/types.js'\nimport { ContextMenu } from '../../components/ContextMenu.js'\nimport { EmptyListIndicator } from '../../components/EmptyListIndicator/EmptyListIndicator.js'\nimport { ListItem } from '../../components/ListItem/ListItem.js'\nimport { ListItemButton } from '../../components/ListItem/ListItemButton.js'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { useExplorer } from '../../hooks/useExplorer.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useListHeight } from '../../hooks/useListHeight.js'\nimport { useToAddressRequirements } from '../../hooks/useToAddressRequirements.js'\nimport type { Bookmark } from '../../stores/bookmarks/types.js'\nimport { useBookmarkActions } from '../../stores/bookmarks/useBookmarkActions.js'\nimport { useBookmarks } from '../../stores/bookmarks/useBookmarks.js'\nimport { useFieldActions } from '../../stores/form/useFieldActions.js'\nimport { defaultChainIdsByType } from '../../utils/chainType.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { openInNewTab } from '../../utils/url.js'\nimport { shortenAddress } from '../../utils/wallet.js'\nimport { BookmarkAddressSheet } from './BookmarkAddressSheet.js'\nimport { BookmarkButtonContainer } from './SendToWalletPage.style.js'\n\nexport const BookmarksPage = (): JSX.Element => {\n const { t } = useTranslation()\n const bookmarkAddressSheetRef = useRef<BottomSheetBase>(null)\n const listParentRef = useRef<HTMLUListElement | null>(null)\n const buttonRef = useRef<HTMLDivElement | null>(null)\n const { bookmarks } = useBookmarks()\n const { requiredToChainType } = useToAddressRequirements()\n const { addBookmark, removeBookmark, setSelectedBookmark } =\n useBookmarkActions()\n const navigate = useNavigate()\n const { setFieldValue } = useFieldActions()\n const { getAddressLink } = useExplorer()\n\n useHeader(t('header.bookmarkedWallets'))\n\n const { listHeight } = useListHeight({\n listParentRef,\n headerRef: buttonRef,\n })\n\n const handleAddBookmark = () => {\n bookmarkAddressSheetRef.current?.open()\n }\n\n const handleBookmarkSelected = (bookmark: Bookmark) => {\n setFieldValue('toAddress', bookmark.address, {\n isTouched: true,\n isDirty: true,\n })\n setSelectedBookmark(bookmark)\n navigate({ to: navigationRoutes.home, replace: true })\n }\n\n return (\n <PageContainer disableGutters>\n <List\n className=\"long-list\"\n ref={listParentRef}\n style={{ height: listHeight, overflow: 'auto' }}\n disablePadding\n sx={{ paddingTop: 1.5 }}\n >\n {bookmarks.map((bookmark) => (\n <ListItem key={bookmark.address} sx={{ position: 'relative' }}>\n <ListItemButton\n onClick={() => handleBookmarkSelected(bookmark)}\n disabled={\n requiredToChainType &&\n requiredToChainType !== bookmark.chainType\n }\n >\n <ListItemAvatar>\n <AccountAvatar\n chainId={defaultChainIdsByType[bookmark.chainType]}\n />\n </ListItemAvatar>\n <ListItemText\n primary={bookmark.name}\n secondary={shortenAddress(bookmark.address)}\n />\n </ListItemButton>\n <ContextMenu\n disabled={\n !!(\n requiredToChainType &&\n requiredToChainType !== bookmark.chainType\n )\n }\n items={[\n {\n icon: <ContentCopyRounded />,\n label: t('button.copyAddress'),\n onClick: () =>\n navigator.clipboard.writeText(bookmark.address),\n },\n {\n icon: <OpenInNewRounded />,\n label: t('button.viewOnExplorer'),\n onClick: () =>\n openInNewTab(\n getAddressLink(\n bookmark.address,\n defaultChainIdsByType[bookmark.chainType]\n )\n ),\n },\n {\n icon: <DeleteOutline />,\n label: t('button.delete'),\n onClick: () => removeBookmark(bookmark.address),\n },\n ]}\n />\n </ListItem>\n ))}\n {!bookmarks.length && (\n <EmptyListIndicator\n icon={<TurnedIn />}\n title={t('sendToWallet.noBookmarkedWallets')}\n message={t('sendToWallet.noBookmarkedWalletsMessage')}\n />\n )}\n </List>\n <BookmarkButtonContainer ref={buttonRef}>\n <Button variant=\"contained\" onClick={handleAddBookmark}>\n {t('sendToWallet.addBookmark')}\n </Button>\n </BookmarkButtonContainer>\n <BookmarkAddressSheet\n ref={bookmarkAddressSheetRef}\n onAddBookmark={addBookmark}\n />\n </PageContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,MAAa,sBAAmC;CAC9C,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,0BAA0B,OAAwB,IAAI;CAC5D,MAAM,gBAAgB,OAAgC,IAAI;CAC1D,MAAM,YAAY,OAA8B,IAAI;CACpD,MAAM,EAAE,cAAc,aAAa;CACnC,MAAM,EAAE,wBAAwB,yBAAyB;CACzD,MAAM,EAAE,aAAa,gBAAgB,wBACnC,mBAAmB;CACrB,MAAM,WAAW,YAAY;CAC7B,MAAM,EAAE,kBAAkB,gBAAgB;CAC1C,MAAM,EAAE,mBAAmB,YAAY;CAEvC,UAAU,EAAE,0BAA0B,CAAC;CAEvC,MAAM,EAAE,eAAe,cAAc;EACnC;EACA,WAAW;CACb,CAAC;CAED,MAAM,0BAA0B;EAC9B,wBAAwB,SAAS,KAAK;CACxC;CAEA,MAAM,0BAA0B,aAAuB;EACrD,cAAc,aAAa,SAAS,SAAS;GAC3C,WAAW;GACX,SAAS;EACX,CAAC;EACD,oBAAoB,QAAQ;EAC5B,SAAS;GAAE,IAAI,iBAAiB;GAAM,SAAS;EAAK,CAAC;CACvD;CAEA,OACE,qBAAC,eAAD;EAAe,gBAAA;EAAf,UAAA;GACE,qBAAC,MAAD;IACE,WAAU;IACV,KAAK;IACL,OAAO;KAAE,QAAQ;KAAY,UAAU;IAAO;IAC9C,gBAAA;IACA,IAAI,EAAE,YAAY,IAAI;IALxB,UAAA,CAOG,UAAU,KAAK,aACd,qBAACA,YAAD;KAAiC,IAAI,EAAE,UAAU,WAAW;KAA5D,UAAA,CACE,qBAACC,kBAAD;MACE,eAAe,uBAAuB,QAAQ;MAC9C,UACE,uBACA,wBAAwB,SAAS;MAJrC,UAAA,CAOE,oBAAC,gBAAD,EAAA,UACE,oBAAC,eAAD,EACE,SAAS,sBAAsB,SAAS,WACzC,CAAA,EACa,CAAA,GAChB,oBAAC,cAAD;OACE,SAAS,SAAS;OAClB,WAAW,eAAe,SAAS,OAAO;MAC3C,CAAA,CACa;KAChB,CAAA,GAAA,oBAAC,aAAD;MACE,UACE,CAAC,EACC,uBACA,wBAAwB,SAAS;MAGrC,OAAO;OACL;QACE,MAAM,oBAAC,oBAAD,CAAqB,CAAA;QAC3B,OAAO,EAAE,oBAAoB;QAC7B,eACE,UAAU,UAAU,UAAU,SAAS,OAAO;OAClD;OACA;QACE,MAAM,oBAAC,kBAAD,CAAmB,CAAA;QACzB,OAAO,EAAE,uBAAuB;QAChC,eACE,aACE,eACE,SAAS,SACT,sBAAsB,SAAS,UACjC,CACF;OACJ;OACA;QACE,MAAM,oBAAC,eAAD,CAAgB,CAAA;QACtB,OAAO,EAAE,eAAe;QACxB,eAAe,eAAe,SAAS,OAAO;OAChD;MACF;KACD,CAAA,CACO;IAlDK,GAAA,SAAS,OAkDd,CACX,GACA,CAAC,UAAU,UACV,oBAAC,oBAAD;KACE,MAAM,oBAAC,UAAD,CAAW,CAAA;KACjB,OAAO,EAAE,kCAAkC;KAC3C,SAAS,EAAE,yCAAyC;IACrD,CAAA,CAEC;;GACN,oBAAC,yBAAD;IAAyB,KAAK;IAC5B,UAAA,oBAAC,QAAD;KAAQ,SAAQ;KAAY,SAAS;KAClC,UAAA,EAAE,0BAA0B;IACvB,CAAA;GACe,CAAA;GACzB,oBAAC,sBAAD;IACE,KAAK;IACL,eAAe;GAChB,CAAA;EACY;;AAEnB"}
1
+ {"version":3,"file":"BookmarksPage.js","names":["ListItem","ListItemButton"],"sources":["../../../../src/pages/SendToWallet/BookmarksPage.tsx"],"sourcesContent":["import ContentCopyRounded from '@mui/icons-material/ContentCopyRounded'\nimport DeleteOutline from '@mui/icons-material/DeleteOutlined'\nimport OpenInNewRounded from '@mui/icons-material/OpenInNewRounded'\nimport TurnedIn from '@mui/icons-material/TurnedIn'\nimport { Button, List, ListItemAvatar, ListItemText } from '@mui/material'\nimport { useNavigate } from '@tanstack/react-router'\nimport { type JSX, useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { AccountAvatar } from '../../components/Avatar/AccountAvatar.js'\nimport type { BottomSheetBase } from '../../components/BottomSheet/types.js'\nimport { ContextMenu } from '../../components/ContextMenu.js'\nimport { EmptyListIndicator } from '../../components/EmptyListIndicator/EmptyListIndicator.js'\nimport { ListItem } from '../../components/ListItem/ListItem.js'\nimport { ListItemButton } from '../../components/ListItem/ListItemButton.js'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { useExplorer } from '../../hooks/useExplorer.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useListHeight } from '../../hooks/useListHeight.js'\nimport { useToAddressRequirements } from '../../hooks/useToAddressRequirements.js'\nimport type { Bookmark } from '../../stores/bookmarks/types.js'\nimport { useBookmarkActions } from '../../stores/bookmarks/useBookmarkActions.js'\nimport { useBookmarks } from '../../stores/bookmarks/useBookmarks.js'\nimport { useFieldActions } from '../../stores/form/useFieldActions.js'\nimport { defaultChainIdsByType } from '../../utils/chainType.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { openInNewTab } from '../../utils/url.js'\nimport { shortenAddress } from '../../utils/wallet.js'\nimport { BookmarkAddressSheet } from './BookmarkAddressSheet.js'\nimport { BookmarkButtonContainer } from './SendToWalletPage.style.js'\n\nexport const BookmarksPage = (): JSX.Element => {\n const { t } = useTranslation()\n const bookmarkAddressSheetRef = useRef<BottomSheetBase>(null)\n const listParentRef = useRef<HTMLUListElement | null>(null)\n const buttonRef = useRef<HTMLDivElement | null>(null)\n const { bookmarks } = useBookmarks()\n const { isValidReceiver } = useToAddressRequirements()\n const { addBookmark, removeBookmark, setSelectedBookmark } =\n useBookmarkActions()\n const navigate = useNavigate()\n const { setFieldValue } = useFieldActions()\n const { getAddressLink } = useExplorer()\n\n useHeader(t('header.bookmarkedWallets'))\n\n const { listHeight } = useListHeight({\n listParentRef,\n headerRef: buttonRef,\n })\n\n const handleAddBookmark = () => {\n bookmarkAddressSheetRef.current?.open()\n }\n\n const handleBookmarkSelected = (bookmark: Bookmark) => {\n setFieldValue('toAddress', bookmark.address, {\n isTouched: true,\n isDirty: true,\n })\n setSelectedBookmark(bookmark)\n navigate({ to: navigationRoutes.home, replace: true })\n }\n\n return (\n <PageContainer disableGutters>\n <List\n className=\"long-list\"\n ref={listParentRef}\n style={{ height: listHeight, overflow: 'auto' }}\n disablePadding\n sx={{ paddingTop: 1.5 }}\n >\n {bookmarks.map((bookmark) => {\n const disabled = !isValidReceiver(bookmark.address)\n const chainId =\n bookmark.chainId ?? defaultChainIdsByType[bookmark.chainType]\n return (\n <ListItem key={bookmark.address} sx={{ position: 'relative' }}>\n <ListItemButton\n onClick={() => handleBookmarkSelected(bookmark)}\n disabled={disabled}\n >\n <ListItemAvatar>\n <AccountAvatar chainId={chainId} />\n </ListItemAvatar>\n <ListItemText\n primary={bookmark.name}\n secondary={shortenAddress(bookmark.address)}\n />\n </ListItemButton>\n <ContextMenu\n disabled={disabled}\n items={[\n {\n icon: <ContentCopyRounded />,\n label: t('button.copyAddress'),\n onClick: () =>\n navigator.clipboard.writeText(bookmark.address),\n },\n {\n icon: <OpenInNewRounded />,\n label: t('button.viewOnExplorer'),\n onClick: () =>\n openInNewTab(getAddressLink(bookmark.address, chainId)),\n },\n {\n icon: <DeleteOutline />,\n label: t('button.delete'),\n onClick: () => removeBookmark(bookmark.address),\n },\n ]}\n />\n </ListItem>\n )\n })}\n {!bookmarks.length && (\n <EmptyListIndicator\n icon={<TurnedIn />}\n title={t('sendToWallet.noBookmarkedWallets')}\n message={t('sendToWallet.noBookmarkedWalletsMessage')}\n />\n )}\n </List>\n <BookmarkButtonContainer ref={buttonRef}>\n <Button variant=\"contained\" onClick={handleAddBookmark}>\n {t('sendToWallet.addBookmark')}\n </Button>\n </BookmarkButtonContainer>\n <BookmarkAddressSheet\n ref={bookmarkAddressSheetRef}\n onAddBookmark={addBookmark}\n />\n </PageContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,MAAa,sBAAmC;CAC9C,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,0BAA0B,OAAwB,IAAI;CAC5D,MAAM,gBAAgB,OAAgC,IAAI;CAC1D,MAAM,YAAY,OAA8B,IAAI;CACpD,MAAM,EAAE,cAAc,aAAa;CACnC,MAAM,EAAE,oBAAoB,yBAAyB;CACrD,MAAM,EAAE,aAAa,gBAAgB,wBACnC,mBAAmB;CACrB,MAAM,WAAW,YAAY;CAC7B,MAAM,EAAE,kBAAkB,gBAAgB;CAC1C,MAAM,EAAE,mBAAmB,YAAY;CAEvC,UAAU,EAAE,0BAA0B,CAAC;CAEvC,MAAM,EAAE,eAAe,cAAc;EACnC;EACA,WAAW;CACb,CAAC;CAED,MAAM,0BAA0B;EAC9B,wBAAwB,SAAS,KAAK;CACxC;CAEA,MAAM,0BAA0B,aAAuB;EACrD,cAAc,aAAa,SAAS,SAAS;GAC3C,WAAW;GACX,SAAS;EACX,CAAC;EACD,oBAAoB,QAAQ;EAC5B,SAAS;GAAE,IAAI,iBAAiB;GAAM,SAAS;EAAK,CAAC;CACvD;CAEA,OACE,qBAAC,eAAD;EAAe,gBAAA;EAAf,UAAA;GACE,qBAAC,MAAD;IACE,WAAU;IACV,KAAK;IACL,OAAO;KAAE,QAAQ;KAAY,UAAU;IAAO;IAC9C,gBAAA;IACA,IAAI,EAAE,YAAY,IAAI;IALxB,UAAA,CAOG,UAAU,KAAK,aAAa;KAC3B,MAAM,WAAW,CAAC,gBAAgB,SAAS,OAAO;KAClD,MAAM,UACJ,SAAS,WAAW,sBAAsB,SAAS;KACrD,OACE,qBAACA,YAAD;MAAiC,IAAI,EAAE,UAAU,WAAW;MAA5D,UAAA,CACE,qBAACC,kBAAD;OACE,eAAe,uBAAuB,QAAQ;OACpC;OAFZ,UAAA,CAIE,oBAAC,gBAAD,EAAA,UACE,oBAAC,eAAD,EAAwB,QAAU,CAAA,EACpB,CAAA,GAChB,oBAAC,cAAD;QACE,SAAS,SAAS;QAClB,WAAW,eAAe,SAAS,OAAO;OAC3C,CAAA,CACa;MAChB,CAAA,GAAA,oBAAC,aAAD;OACY;OACV,OAAO;QACL;SACE,MAAM,oBAAC,oBAAD,CAAqB,CAAA;SAC3B,OAAO,EAAE,oBAAoB;SAC7B,eACE,UAAU,UAAU,UAAU,SAAS,OAAO;QAClD;QACA;SACE,MAAM,oBAAC,kBAAD,CAAmB,CAAA;SACzB,OAAO,EAAE,uBAAuB;SAChC,eACE,aAAa,eAAe,SAAS,SAAS,OAAO,CAAC;QAC1D;QACA;SACE,MAAM,oBAAC,eAAD,CAAgB,CAAA;SACtB,OAAO,EAAE,eAAe;SACxB,eAAe,eAAe,SAAS,OAAO;QAChD;OACF;MACD,CAAA,CACO;KAnCK,GAAA,SAAS,OAmCd;IAEd,CAAC,GACA,CAAC,UAAU,UACV,oBAAC,oBAAD;KACE,MAAM,oBAAC,UAAD,CAAW,CAAA;KACjB,OAAO,EAAE,kCAAkC;KAC3C,SAAS,EAAE,yCAAyC;IACrD,CAAA,CAEC;;GACN,oBAAC,yBAAD;IAAyB,KAAK;IAC5B,UAAA,oBAAC,QAAD;KAAQ,SAAQ;KAAY,SAAS;KAClC,UAAA,EAAE,0BAA0B;IACvB,CAAA;GACe,CAAA;GACzB,oBAAC,sBAAD;IACE,KAAK;IACL,eAAe;GAChB,CAAA;EACY;;AAEnB"}
@@ -27,7 +27,7 @@ const ConnectedWalletsPage = () => {
27
27
  const { t } = useTranslation();
28
28
  const { accounts } = useAccount();
29
29
  const { setSelectedBookmark } = useBookmarkActions();
30
- const { requiredToChainType } = useToAddressRequirements();
30
+ const { isValidReceiver } = useToAddressRequirements();
31
31
  const navigate = useNavigate();
32
32
  const { setFieldValue } = useFieldActions();
33
33
  const { getAddressLink } = useExplorer();
@@ -76,11 +76,12 @@ const ConnectedWalletsPage = () => {
76
76
  if (account.address) openInNewTab(getAddressLink(account.address, account.chainId));
77
77
  }
78
78
  }] : []];
79
+ const disabled = !isValidReceiver(account.address);
79
80
  return /* @__PURE__ */ jsxs(ListItem$1, {
80
81
  sx: { position: "relative" },
81
82
  children: [/* @__PURE__ */ jsxs(ListItemButton$1, {
82
83
  onClick: () => handleWalletSelected(account),
83
- disabled: requiredToChainType && requiredToChainType !== account.chainType,
84
+ disabled,
84
85
  children: [/* @__PURE__ */ jsx(ListItemAvatar, { children: /* @__PURE__ */ jsx(AccountAvatar, {
85
86
  chainId: account.chainId,
86
87
  account
@@ -90,7 +91,7 @@ const ConnectedWalletsPage = () => {
90
91
  })]
91
92
  }), /* @__PURE__ */ jsx(ContextMenu, {
92
93
  items: menuItems,
93
- disabled: !!(requiredToChainType && requiredToChainType !== account.chainType)
94
+ disabled
94
95
  })]
95
96
  }, account.address);
96
97
  }), !accounts.length && /* @__PURE__ */ jsx(EmptyListIndicator, {
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectedWalletsPage.js","names":["ListItem","ListItemButton"],"sources":["../../../../src/pages/SendToWallet/ConnectedWalletsPage.tsx"],"sourcesContent":["import { useAccount } from '@lifi/wallet-management'\nimport type { Account } from '@lifi/widget-provider'\nimport ContentCopyRounded from '@mui/icons-material/ContentCopyRounded'\nimport OpenInNewRounded from '@mui/icons-material/OpenInNewRounded'\nimport Wallet from '@mui/icons-material/Wallet'\nimport { List, ListItemAvatar, ListItemText } from '@mui/material'\nimport { useNavigate } from '@tanstack/react-router'\nimport { type JSX, useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { AccountAvatar } from '../../components/Avatar/AccountAvatar.js'\nimport { ContextMenu } from '../../components/ContextMenu.js'\nimport { EmptyListIndicator } from '../../components/EmptyListIndicator/EmptyListIndicator.js'\nimport { ListItem } from '../../components/ListItem/ListItem.js'\nimport { ListItemButton } from '../../components/ListItem/ListItemButton.js'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { useExplorer } from '../../hooks/useExplorer.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useListHeight } from '../../hooks/useListHeight.js'\nimport { useToAddressRequirements } from '../../hooks/useToAddressRequirements.js'\nimport { useBookmarkActions } from '../../stores/bookmarks/useBookmarkActions.js'\nimport { useFieldActions } from '../../stores/form/useFieldActions.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { openInNewTab } from '../../utils/url.js'\nimport { shortenAddress } from '../../utils/wallet.js'\n\nexport const ConnectedWalletsPage = (): JSX.Element => {\n const { t } = useTranslation()\n const { accounts } = useAccount()\n const { setSelectedBookmark } = useBookmarkActions()\n const { requiredToChainType } = useToAddressRequirements()\n const navigate = useNavigate()\n const { setFieldValue } = useFieldActions()\n const { getAddressLink } = useExplorer()\n const listParentRef = useRef<HTMLUListElement | null>(null)\n\n useHeader(t('sendToWallet.connectedWallets'))\n\n const { listHeight } = useListHeight({ listParentRef })\n\n const handleWalletSelected = (account: Account) => {\n setFieldValue('toAddress', account.address!, {\n isTouched: true,\n isDirty: true,\n })\n setSelectedBookmark({\n name: account.connector?.name,\n address: account.address!,\n chainType: account.chainType!,\n isConnectedAccount: true,\n })\n navigate({\n to: navigationRoutes.home,\n replace: true,\n })\n }\n\n return (\n <PageContainer disableGutters>\n <List\n className=\"long-list\"\n ref={listParentRef}\n style={{ height: listHeight, overflow: 'auto' }}\n disablePadding\n sx={{ paddingTop: 1.5 }}\n >\n {accounts.map((account) => {\n const walletAddress = shortenAddress(account.address)\n const menuItems = [\n {\n icon: <ContentCopyRounded />,\n label: t('button.copyAddress'),\n onClick: () => {\n if (account.address) {\n navigator.clipboard.writeText(account.address)\n }\n },\n },\n ...(account.chainId\n ? [\n {\n icon: <OpenInNewRounded />,\n label: t('button.viewOnExplorer'),\n onClick: () => {\n if (account.address) {\n openInNewTab(\n getAddressLink(account.address, account.chainId)\n )\n }\n },\n },\n ]\n : []),\n ]\n\n return (\n <ListItem key={account.address} sx={{ position: 'relative' }}>\n <ListItemButton\n onClick={() => handleWalletSelected(account)}\n disabled={\n requiredToChainType &&\n requiredToChainType !== account.chainType\n }\n >\n <ListItemAvatar>\n <AccountAvatar chainId={account.chainId} account={account} />\n </ListItemAvatar>\n <ListItemText\n primary={account.connector?.name}\n secondary={walletAddress}\n />\n </ListItemButton>\n <ContextMenu\n items={menuItems}\n disabled={\n !!(\n requiredToChainType &&\n requiredToChainType !== account.chainType\n )\n }\n />\n </ListItem>\n )\n })}\n {!accounts.length && (\n <EmptyListIndicator\n icon={<Wallet />}\n title={t('sendToWallet.noConnectedWallets')}\n message={t('sendToWallet.noConnectedWalletsMessage')}\n />\n )}\n </List>\n </PageContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,MAAa,6BAA0C;CACrD,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,EAAE,aAAa,WAAW;CAChC,MAAM,EAAE,wBAAwB,mBAAmB;CACnD,MAAM,EAAE,wBAAwB,yBAAyB;CACzD,MAAM,WAAW,YAAY;CAC7B,MAAM,EAAE,kBAAkB,gBAAgB;CAC1C,MAAM,EAAE,mBAAmB,YAAY;CACvC,MAAM,gBAAgB,OAAgC,IAAI;CAE1D,UAAU,EAAE,+BAA+B,CAAC;CAE5C,MAAM,EAAE,eAAe,cAAc,EAAE,cAAc,CAAC;CAEtD,MAAM,wBAAwB,YAAqB;EACjD,cAAc,aAAa,QAAQ,SAAU;GAC3C,WAAW;GACX,SAAS;EACX,CAAC;EACD,oBAAoB;GAClB,MAAM,QAAQ,WAAW;GACzB,SAAS,QAAQ;GACjB,WAAW,QAAQ;GACnB,oBAAoB;EACtB,CAAC;EACD,SAAS;GACP,IAAI,iBAAiB;GACrB,SAAS;EACX,CAAC;CACH;CAEA,OACE,oBAAC,eAAD;EAAe,gBAAA;EACb,UAAA,qBAAC,MAAD;GACE,WAAU;GACV,KAAK;GACL,OAAO;IAAE,QAAQ;IAAY,UAAU;GAAO;GAC9C,gBAAA;GACA,IAAI,EAAE,YAAY,IAAI;GALxB,UAAA,CAOG,SAAS,KAAK,YAAY;IACzB,MAAM,gBAAgB,eAAe,QAAQ,OAAO;IACpD,MAAM,YAAY,CAChB;KACE,MAAM,oBAAC,oBAAD,CAAqB,CAAA;KAC3B,OAAO,EAAE,oBAAoB;KAC7B,eAAe;MACb,IAAI,QAAQ,SACV,UAAU,UAAU,UAAU,QAAQ,OAAO;KAEjD;IACF,GACA,GAAI,QAAQ,UACR,CACE;KACE,MAAM,oBAAC,kBAAD,CAAmB,CAAA;KACzB,OAAO,EAAE,uBAAuB;KAChC,eAAe;MACb,IAAI,QAAQ,SACV,aACE,eAAe,QAAQ,SAAS,QAAQ,OAAO,CACjD;KAEJ;IACF,CACF,IACA,CAAC,CACP;IAEA,OACE,qBAACA,YAAD;KAAgC,IAAI,EAAE,UAAU,WAAW;KAA3D,UAAA,CACE,qBAACC,kBAAD;MACE,eAAe,qBAAqB,OAAO;MAC3C,UACE,uBACA,wBAAwB,QAAQ;MAJpC,UAAA,CAOE,oBAAC,gBAAD,EAAA,UACE,oBAAC,eAAD;OAAe,SAAS,QAAQ;OAAkB;MAAU,CAAA,EAC9C,CAAA,GAChB,oBAAC,cAAD;OACE,SAAS,QAAQ,WAAW;OAC5B,WAAW;MACZ,CAAA,CACa;KAChB,CAAA,GAAA,oBAAC,aAAD;MACE,OAAO;MACP,UACE,CAAC,EACC,uBACA,wBAAwB,QAAQ;KAGrC,CAAA,CACO;IAzBK,GAAA,QAAQ,OAyBb;GAEd,CAAC,GACA,CAAC,SAAS,UACT,oBAAC,oBAAD;IACE,MAAM,oBAAC,QAAD,CAAS,CAAA;IACf,OAAO,EAAE,iCAAiC;IAC1C,SAAS,EAAE,wCAAwC;GACpD,CAAA,CAEC;;CACO,CAAA;AAEnB"}
1
+ {"version":3,"file":"ConnectedWalletsPage.js","names":["ListItem","ListItemButton"],"sources":["../../../../src/pages/SendToWallet/ConnectedWalletsPage.tsx"],"sourcesContent":["import { useAccount } from '@lifi/wallet-management'\nimport type { Account } from '@lifi/widget-provider'\nimport ContentCopyRounded from '@mui/icons-material/ContentCopyRounded'\nimport OpenInNewRounded from '@mui/icons-material/OpenInNewRounded'\nimport Wallet from '@mui/icons-material/Wallet'\nimport { List, ListItemAvatar, ListItemText } from '@mui/material'\nimport { useNavigate } from '@tanstack/react-router'\nimport { type JSX, useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { AccountAvatar } from '../../components/Avatar/AccountAvatar.js'\nimport { ContextMenu } from '../../components/ContextMenu.js'\nimport { EmptyListIndicator } from '../../components/EmptyListIndicator/EmptyListIndicator.js'\nimport { ListItem } from '../../components/ListItem/ListItem.js'\nimport { ListItemButton } from '../../components/ListItem/ListItemButton.js'\nimport { PageContainer } from '../../components/PageContainer.js'\nimport { useExplorer } from '../../hooks/useExplorer.js'\nimport { useHeader } from '../../hooks/useHeader.js'\nimport { useListHeight } from '../../hooks/useListHeight.js'\nimport { useToAddressRequirements } from '../../hooks/useToAddressRequirements.js'\nimport { useBookmarkActions } from '../../stores/bookmarks/useBookmarkActions.js'\nimport { useFieldActions } from '../../stores/form/useFieldActions.js'\nimport { navigationRoutes } from '../../utils/navigationRoutes.js'\nimport { openInNewTab } from '../../utils/url.js'\nimport { shortenAddress } from '../../utils/wallet.js'\n\nexport const ConnectedWalletsPage = (): JSX.Element => {\n const { t } = useTranslation()\n const { accounts } = useAccount()\n const { setSelectedBookmark } = useBookmarkActions()\n const { isValidReceiver } = useToAddressRequirements()\n const navigate = useNavigate()\n const { setFieldValue } = useFieldActions()\n const { getAddressLink } = useExplorer()\n const listParentRef = useRef<HTMLUListElement | null>(null)\n\n useHeader(t('sendToWallet.connectedWallets'))\n\n const { listHeight } = useListHeight({ listParentRef })\n\n const handleWalletSelected = (account: Account) => {\n setFieldValue('toAddress', account.address!, {\n isTouched: true,\n isDirty: true,\n })\n setSelectedBookmark({\n name: account.connector?.name,\n address: account.address!,\n chainType: account.chainType!,\n isConnectedAccount: true,\n })\n navigate({\n to: navigationRoutes.home,\n replace: true,\n })\n }\n\n return (\n <PageContainer disableGutters>\n <List\n className=\"long-list\"\n ref={listParentRef}\n style={{ height: listHeight, overflow: 'auto' }}\n disablePadding\n sx={{ paddingTop: 1.5 }}\n >\n {accounts.map((account) => {\n const walletAddress = shortenAddress(account.address)\n const menuItems = [\n {\n icon: <ContentCopyRounded />,\n label: t('button.copyAddress'),\n onClick: () => {\n if (account.address) {\n navigator.clipboard.writeText(account.address)\n }\n },\n },\n ...(account.chainId\n ? [\n {\n icon: <OpenInNewRounded />,\n label: t('button.viewOnExplorer'),\n onClick: () => {\n if (account.address) {\n openInNewTab(\n getAddressLink(account.address, account.chainId)\n )\n }\n },\n },\n ]\n : []),\n ]\n const disabled = !isValidReceiver(account.address)\n\n return (\n <ListItem key={account.address} sx={{ position: 'relative' }}>\n <ListItemButton\n onClick={() => handleWalletSelected(account)}\n disabled={disabled}\n >\n <ListItemAvatar>\n <AccountAvatar chainId={account.chainId} account={account} />\n </ListItemAvatar>\n <ListItemText\n primary={account.connector?.name}\n secondary={walletAddress}\n />\n </ListItemButton>\n <ContextMenu items={menuItems} disabled={disabled} />\n </ListItem>\n )\n })}\n {!accounts.length && (\n <EmptyListIndicator\n icon={<Wallet />}\n title={t('sendToWallet.noConnectedWallets')}\n message={t('sendToWallet.noConnectedWalletsMessage')}\n />\n )}\n </List>\n </PageContainer>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,MAAa,6BAA0C;CACrD,MAAM,EAAE,MAAM,eAAe;CAC7B,MAAM,EAAE,aAAa,WAAW;CAChC,MAAM,EAAE,wBAAwB,mBAAmB;CACnD,MAAM,EAAE,oBAAoB,yBAAyB;CACrD,MAAM,WAAW,YAAY;CAC7B,MAAM,EAAE,kBAAkB,gBAAgB;CAC1C,MAAM,EAAE,mBAAmB,YAAY;CACvC,MAAM,gBAAgB,OAAgC,IAAI;CAE1D,UAAU,EAAE,+BAA+B,CAAC;CAE5C,MAAM,EAAE,eAAe,cAAc,EAAE,cAAc,CAAC;CAEtD,MAAM,wBAAwB,YAAqB;EACjD,cAAc,aAAa,QAAQ,SAAU;GAC3C,WAAW;GACX,SAAS;EACX,CAAC;EACD,oBAAoB;GAClB,MAAM,QAAQ,WAAW;GACzB,SAAS,QAAQ;GACjB,WAAW,QAAQ;GACnB,oBAAoB;EACtB,CAAC;EACD,SAAS;GACP,IAAI,iBAAiB;GACrB,SAAS;EACX,CAAC;CACH;CAEA,OACE,oBAAC,eAAD;EAAe,gBAAA;EACb,UAAA,qBAAC,MAAD;GACE,WAAU;GACV,KAAK;GACL,OAAO;IAAE,QAAQ;IAAY,UAAU;GAAO;GAC9C,gBAAA;GACA,IAAI,EAAE,YAAY,IAAI;GALxB,UAAA,CAOG,SAAS,KAAK,YAAY;IACzB,MAAM,gBAAgB,eAAe,QAAQ,OAAO;IACpD,MAAM,YAAY,CAChB;KACE,MAAM,oBAAC,oBAAD,CAAqB,CAAA;KAC3B,OAAO,EAAE,oBAAoB;KAC7B,eAAe;MACb,IAAI,QAAQ,SACV,UAAU,UAAU,UAAU,QAAQ,OAAO;KAEjD;IACF,GACA,GAAI,QAAQ,UACR,CACE;KACE,MAAM,oBAAC,kBAAD,CAAmB,CAAA;KACzB,OAAO,EAAE,uBAAuB;KAChC,eAAe;MACb,IAAI,QAAQ,SACV,aACE,eAAe,QAAQ,SAAS,QAAQ,OAAO,CACjD;KAEJ;IACF,CACF,IACA,CAAC,CACP;IACA,MAAM,WAAW,CAAC,gBAAgB,QAAQ,OAAO;IAEjD,OACE,qBAACA,YAAD;KAAgC,IAAI,EAAE,UAAU,WAAW;KAA3D,UAAA,CACE,qBAACC,kBAAD;MACE,eAAe,qBAAqB,OAAO;MACjC;MAFZ,UAAA,CAIE,oBAAC,gBAAD,EAAA,UACE,oBAAC,eAAD;OAAe,SAAS,QAAQ;OAAkB;MAAU,CAAA,EAC9C,CAAA,GAChB,oBAAC,cAAD;OACE,SAAS,QAAQ,WAAW;OAC5B,WAAW;MACZ,CAAA,CACa;KAChB,CAAA,GAAA,oBAAC,aAAD;MAAa,OAAO;MAAqB;KAAW,CAAA,CAC5C;IAdK,GAAA,QAAQ,OAcb;GAEd,CAAC,GACA,CAAC,SAAS,UACT,oBAAC,oBAAD;IACE,MAAM,oBAAC,QAAD,CAAS,CAAA;IACf,OAAO,EAAE,iCAAiC;IAC1C,SAAS,EAAE,wCAAwC;GACpD,CAAA,CAEC;;CACO,CAAA;AAEnB"}