@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.
- package/README.md +26 -3
- package/dist/esm/components/AmountInputCard/AmountInputCardPair.js +5 -2
- package/dist/esm/components/AmountInputCard/AmountInputCardPair.js.map +1 -1
- package/dist/esm/components/SelectChainAndToken.js +5 -2
- package/dist/esm/components/SelectChainAndToken.js.map +1 -1
- package/dist/esm/components/SendToWallet/SendToWalletButton.js +5 -4
- package/dist/esm/components/SendToWallet/SendToWalletButton.js.map +1 -1
- package/dist/esm/components/TokenList/TokenDetailsSheet.js +5 -8
- package/dist/esm/components/TokenList/TokenDetailsSheet.js.map +1 -1
- package/dist/esm/components/TokenList/TokenDetailsSheetContent.js +30 -2
- package/dist/esm/components/TokenList/TokenDetailsSheetContent.js.map +1 -1
- package/dist/esm/components/TokenList/TokenListItem.js +36 -47
- package/dist/esm/components/TokenList/TokenListItem.js.map +1 -1
- package/dist/esm/components/TokenList/VirtualizedTokenList.d.ts.map +1 -1
- package/dist/esm/components/TokenList/VirtualizedTokenList.js +2 -2
- package/dist/esm/components/TokenList/VirtualizedTokenList.js.map +1 -1
- package/dist/esm/components/TokenList/tokenVerificationIcons.js +29 -0
- package/dist/esm/components/TokenList/tokenVerificationIcons.js.map +1 -0
- package/dist/esm/components/TokenList/useTokenSelect.d.ts.map +1 -1
- package/dist/esm/components/TokenList/useTokenSelect.js +10 -0
- package/dist/esm/components/TokenList/useTokenSelect.js.map +1 -1
- package/dist/esm/config/constants.js.map +1 -1
- package/dist/esm/config/version.d.ts +1 -1
- package/dist/esm/config/version.js +1 -1
- package/dist/esm/config/version.js.map +1 -1
- package/dist/esm/hooks/useAccountsBalancesData.js +5 -2
- package/dist/esm/hooks/useAccountsBalancesData.js.map +1 -1
- package/dist/esm/hooks/useAddressValidation.d.ts +3 -2
- package/dist/esm/hooks/useAddressValidation.d.ts.map +1 -1
- package/dist/esm/hooks/useAddressValidation.js +48 -21
- package/dist/esm/hooks/useAddressValidation.js.map +1 -1
- package/dist/esm/hooks/useGasRefuel.js +4 -1
- package/dist/esm/hooks/useGasRefuel.js.map +1 -1
- package/dist/esm/hooks/useRoutes.d.ts.map +1 -1
- package/dist/esm/hooks/useRoutes.js +11 -6
- package/dist/esm/hooks/useRoutes.js.map +1 -1
- package/dist/esm/hooks/useToAddressAutoPopulate.js +6 -8
- package/dist/esm/hooks/useToAddressAutoPopulate.js.map +1 -1
- package/dist/esm/hooks/useToAddressRequirements.d.ts +3 -2
- package/dist/esm/hooks/useToAddressRequirements.d.ts.map +1 -1
- package/dist/esm/hooks/useToAddressRequirements.js +8 -7
- package/dist/esm/hooks/useToAddressRequirements.js.map +1 -1
- package/dist/esm/hooks/useToAddressReset.js +6 -3
- package/dist/esm/hooks/useToAddressReset.js.map +1 -1
- package/dist/esm/hooks/useTokenBalance.js +2 -1
- package/dist/esm/hooks/useTokenBalance.js.map +1 -1
- package/dist/esm/hooks/useTokens.js +1 -1
- package/dist/esm/i18n/bn.json +7 -2
- package/dist/esm/i18n/de.json +7 -2
- package/dist/esm/i18n/en.json +7 -2
- package/dist/esm/i18n/es.json +7 -2
- package/dist/esm/i18n/fr.json +7 -2
- package/dist/esm/i18n/hi.json +7 -2
- package/dist/esm/i18n/id.json +7 -2
- package/dist/esm/i18n/it.json +7 -2
- package/dist/esm/i18n/ja.json +7 -2
- package/dist/esm/i18n/ko.json +7 -2
- package/dist/esm/i18n/pl.json +7 -2
- package/dist/esm/i18n/pt.json +7 -2
- package/dist/esm/i18n/th.json +7 -2
- package/dist/esm/i18n/tr.json +7 -2
- package/dist/esm/i18n/uk.json +7 -2
- package/dist/esm/i18n/vi.json +7 -2
- package/dist/esm/i18n/zh.json +7 -2
- package/dist/esm/pages/SendToWallet/BookmarkAddressSheet.js +7 -4
- package/dist/esm/pages/SendToWallet/BookmarkAddressSheet.js.map +1 -1
- package/dist/esm/pages/SendToWallet/BookmarksPage.js +35 -31
- package/dist/esm/pages/SendToWallet/BookmarksPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/ConnectedWalletsPage.js +4 -3
- package/dist/esm/pages/SendToWallet/ConnectedWalletsPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/RecentWalletsPage.js +43 -39
- package/dist/esm/pages/SendToWallet/RecentWalletsPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/SendToConfiguredWalletPage.js +32 -26
- package/dist/esm/pages/SendToWallet/SendToConfiguredWalletPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/SendToWalletPage.js +5 -10
- package/dist/esm/pages/SendToWallet/SendToWalletPage.js.map +1 -1
- package/dist/esm/providers/WalletProvider/WalletProvider.d.ts.map +1 -1
- package/dist/esm/providers/WalletProvider/WalletProvider.js +14 -2
- package/dist/esm/providers/WalletProvider/WalletProvider.js.map +1 -1
- package/dist/esm/providers/WidgetProvider/WidgetProvider.d.ts.map +1 -1
- package/dist/esm/providers/WidgetProvider/WidgetProvider.js +10 -14
- package/dist/esm/providers/WidgetProvider/WidgetProvider.js.map +1 -1
- package/dist/esm/stores/bookmarks/types.d.ts +3 -0
- package/dist/esm/stores/bookmarks/types.d.ts.map +1 -1
- package/dist/esm/stores/chains/ChainOrderStore.d.ts.map +1 -1
- package/dist/esm/stores/chains/ChainOrderStore.js +4 -1
- package/dist/esm/stores/chains/ChainOrderStore.js.map +1 -1
- package/dist/esm/stores/form/FormStore.js +3 -2
- package/dist/esm/stores/form/FormStore.js.map +1 -1
- package/dist/esm/stores/form/URLSearchParamsBuilder.js +7 -3
- package/dist/esm/stores/form/URLSearchParamsBuilder.js.map +1 -1
- package/dist/esm/stores/form/getDefaultValuesFromQueryString.js +4 -1
- package/dist/esm/stores/form/getDefaultValuesFromQueryString.js.map +1 -1
- package/dist/esm/utils/chainType.js +32 -1
- package/dist/esm/utils/chainType.js.map +1 -1
- package/dist/esm/utils/customReceiver.js +6 -1
- package/dist/esm/utils/customReceiver.js.map +1 -1
- package/dist/esm/utils/token.js +13 -1
- package/dist/esm/utils/token.js.map +1 -1
- package/package.json +7 -7
- package/src/components/AmountInputCard/AmountInputCardPair.tsx +6 -2
- package/src/components/SelectChainAndToken.tsx +5 -1
- package/src/components/SendToWallet/SendToWalletButton.tsx +13 -8
- package/src/components/TokenList/TokenDetailsSheet.tsx +5 -9
- package/src/components/TokenList/TokenDetailsSheetContent.tsx +46 -4
- package/src/components/TokenList/TokenListItem.tsx +44 -68
- package/src/components/TokenList/VirtualizedTokenList.tsx +3 -6
- package/src/components/TokenList/tokenVerificationIcons.ts +15 -0
- package/src/components/TokenList/types.ts +3 -11
- package/src/components/TokenList/useTokenSelect.ts +15 -0
- package/src/config/constants.ts +3 -0
- package/src/config/version.ts +1 -1
- package/src/hooks/useAccountsBalancesData.ts +6 -2
- package/src/hooks/useAddressValidation.ts +87 -32
- package/src/hooks/useGasRefuel.ts +11 -1
- package/src/hooks/useRoutes.ts +23 -18
- package/src/hooks/useToAddressAutoPopulate.ts +13 -17
- package/src/hooks/useToAddressRequirements.ts +19 -4
- package/src/hooks/useToAddressReset.ts +13 -4
- package/src/hooks/useTokenBalance.ts +6 -1
- package/src/pages/SendToWallet/BookmarkAddressSheet.tsx +5 -1
- package/src/pages/SendToWallet/BookmarksPage.tsx +42 -52
- package/src/pages/SendToWallet/ConnectedWalletsPage.tsx +4 -14
- package/src/pages/SendToWallet/RecentWalletsPage.tsx +59 -66
- package/src/pages/SendToWallet/SendToConfiguredWalletPage.tsx +45 -50
- package/src/pages/SendToWallet/SendToWalletPage.tsx +4 -16
- package/src/providers/WalletProvider/WalletProvider.tsx +28 -3
- package/src/providers/WidgetProvider/WidgetProvider.tsx +20 -19
- package/src/stores/bookmarks/types.ts +3 -0
- package/src/stores/chains/ChainOrderStore.tsx +4 -1
- package/src/stores/form/FormStore.tsx +2 -0
- package/src/stores/form/URLSearchParamsBuilder.tsx +4 -2
- package/src/stores/form/getDefaultValuesFromQueryString.ts +19 -0
- package/src/utils/chainType.ts +73 -1
- package/src/utils/customReceiver.ts +36 -0
- package/src/utils/token.ts +48 -0
package/dist/esm/i18n/id.json
CHANGED
|
@@ -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
|
}
|
package/dist/esm/i18n/it.json
CHANGED
|
@@ -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
|
}
|
package/dist/esm/i18n/ja.json
CHANGED
|
@@ -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
|
}
|
package/dist/esm/i18n/ko.json
CHANGED
|
@@ -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
|
}
|
package/dist/esm/i18n/pl.json
CHANGED
|
@@ -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
|
}
|
package/dist/esm/i18n/pt.json
CHANGED
|
@@ -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
|
}
|
package/dist/esm/i18n/th.json
CHANGED
|
@@ -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
|
}
|
package/dist/esm/i18n/tr.json
CHANGED
|
@@ -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
|
}
|
package/dist/esm/i18n/uk.json
CHANGED
|
@@ -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
|
}
|
package/dist/esm/i18n/vi.json
CHANGED
|
@@ -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
|
}
|
package/dist/esm/i18n/zh.json
CHANGED
|
@@ -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:
|
|
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":"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"}
|
|
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":"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"}
|
|
@@ -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 {
|
|
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) =>
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
children: [/* @__PURE__ */
|
|
78
|
-
|
|
79
|
-
|
|
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
|
-
}
|
|
82
|
-
|
|
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 {
|
|
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 {
|
|
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
|
|
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
|
|
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 {
|
|
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"}
|