diff --git a/src/components/Transactions/TransactionSimulationCard.tsx b/src/components/Transactions/TransactionSimulationCard.tsx index 7d0d40a498d..0bd3060a965 100644 --- a/src/components/Transactions/TransactionSimulationCard.tsx +++ b/src/components/Transactions/TransactionSimulationCard.tsx @@ -37,6 +37,7 @@ interface TransactionSimulationCardProps { isLoading: boolean; txSimulationApiError: unknown; isPersonalSignRequest: boolean; + isTypedDataRequest: boolean; noChanges: boolean; simulation: TransactionSimulationResult | undefined; simulationError: TransactionErrorType | undefined; @@ -51,6 +52,7 @@ export const TransactionSimulationCard = ({ isLoading, txSimulationApiError, isPersonalSignRequest, + isTypedDataRequest, noChanges, simulation, simulationError, @@ -60,6 +62,7 @@ export const TransactionSimulationCard = ({ const cardHeight = useSharedValue(COLLAPSED_CARD_HEIGHT); const contentHeight = useSharedValue(COLLAPSED_CARD_HEIGHT - CARD_BORDER_WIDTH * 2); const spinnerRotation = useSharedValue(0); + const isSimulationUnavailable = isPersonalSignRequest || isTypedDataRequest; const listStyle = useAnimatedStyle(() => ({ opacity: noChanges @@ -81,18 +84,18 @@ export const TransactionSimulationCard = ({ }); useAnimatedReaction( - () => ({ isLoading, isPersonalSignRequest }), - ({ isLoading, isPersonalSignRequest }, previous = { isLoading: false, isPersonalSignRequest: false }) => { + () => ({ isLoading, isSimulationUnavailable }), + ({ isLoading, isSimulationUnavailable }, previous = { isLoading: false, isSimulationUnavailable: false }) => { if (isLoading && !previous?.isLoading) { spinnerRotation.value = withRepeat(withTiming(360, rotationConfig), -1, false); } else if ( (!isLoading && previous?.isLoading) || - (isPersonalSignRequest && !previous?.isPersonalSignRequest && previous?.isLoading) + (isSimulationUnavailable && !previous?.isSimulationUnavailable && previous?.isLoading) ) { spinnerRotation.value = withTiming(360, timingConfig); } }, - [isLoading, isPersonalSignRequest] + [isLoading, isSimulationUnavailable] ); const renderSimulationEventRows = useMemo(() => { if (isBalanceEnough === false) return null; @@ -142,7 +145,7 @@ export const TransactionSimulationCard = ({ if (isBalanceEnough === false) { return 'blue'; } - if (noChanges || isPersonalSignRequest || txSimulationApiError) { + if (noChanges || isSimulationUnavailable || txSimulationApiError) { return 'labelQuaternary'; } if (simulationScanResult === TransactionScanResultType.Warning) { @@ -152,7 +155,7 @@ export const TransactionSimulationCard = ({ return 'red'; } return 'label'; - }, [isBalanceEnough, isLoading, noChanges, simulationError, simulationScanResult, isPersonalSignRequest, txSimulationApiError]); + }, [isBalanceEnough, isLoading, noChanges, simulationError, simulationScanResult, isSimulationUnavailable, txSimulationApiError]); const titleText = useMemo(() => { if (isLoading) { @@ -161,7 +164,7 @@ export const TransactionSimulationCard = ({ if (isBalanceEnough === false) { return i18n.t(i18n.l.walletconnect.simulation.simulation_card.titles.not_enough_native_balance, { symbol: nativeAsset.symbol }); } - if (txSimulationApiError || isPersonalSignRequest) { + if (txSimulationApiError || isSimulationUnavailable) { return i18n.t(i18n.l.walletconnect.simulation.simulation_card.titles.simulation_unavailable); } if (simulationScanResult === TransactionScanResultType.Warning) { @@ -181,7 +184,7 @@ export const TransactionSimulationCard = ({ isLoading, isBalanceEnough, txSimulationApiError, - isPersonalSignRequest, + isSimulationUnavailable, simulationScanResult, noChanges, simulationError, @@ -189,12 +192,12 @@ export const TransactionSimulationCard = ({ ]); const isExpanded = useMemo(() => { - if (isLoading || isPersonalSignRequest) { + if (isLoading || isSimulationUnavailable) { return false; } const shouldExpandOnLoad = isBalanceEnough === false || (!isEmpty(simulation) && !noChanges) || !!simulationError; return shouldExpandOnLoad; - }, [isBalanceEnough, isLoading, isPersonalSignRequest, noChanges, simulation, simulationError]); + }, [isBalanceEnough, isLoading, isSimulationUnavailable, noChanges, simulation, simulationError]); return ( ) : ( - {!isLoading && noChanges && !isPersonalSignRequest ? ( + {!isLoading && noChanges && !isSimulationUnavailable ? ( {/* The extra space avoids icon clipping */} {'􀻾 '} @@ -228,7 +231,7 @@ export const TransactionSimulationCard = ({ @@ -278,6 +281,13 @@ export const TransactionSimulationCard = ({ )} + {isTypedDataRequest && ( + + + {i18n.t(i18n.l.walletconnect.simulation.simulation_card.messages.unavailable_typed_data)} + + + )} {txSimulationApiError && ( {i18n.t(i18n.l.walletconnect.simulation.simulation_card.messages.tx_api_error)} diff --git a/src/languages/en_US.json b/src/languages/en_US.json index 7c81c21ea08..fa17bd8028b 100644 --- a/src/languages/en_US.json +++ b/src/languages/en_US.json @@ -3320,6 +3320,7 @@ "no_changes": "No Changes Detected", "need_more_native": "You’ll need more %{symbol} on %{network} to pay for this transaction. Get some %{symbol} below to continue with this request.", "unavailable_personal_sign": "Simulation for personal signs is not yet supported", + "unavailable_typed_data": "Simulation for typed data signing is not yet supported", "unavailable_zora_network": "Simulation on Zora is not yet supported", "failed_to_simulate": "The simulation failed, which suggests your transaction is likely to fail. This may be an issue with the app you’re using.", "tx_api_error": "We are unable to determine whether or not your transaction will succeed or fail. Proceed with caution.", diff --git a/src/languages/zh_CN.json b/src/languages/zh_CN.json index ee2ee3e056b..74d5b5992e5 100644 --- a/src/languages/zh_CN.json +++ b/src/languages/zh_CN.json @@ -3338,6 +3338,7 @@ "no_changes": "未检测到任何更改", "need_more_native": "你需要更多的 %{symbol} 在 %{network} 上支付这笔交易。获得下面的 %{symbol} 继续进行这个请求。", "unavailable_personal_sign": "尚不支持个人签名的模拟", + "unavailable_typed_data": "尚不支持类型数据签名的模拟", "unavailable_zora_network": "尚不支持Zora的模拟", "failed_to_simulate": "模拟失败,您的交易可能会失败。这可能与您正在使用的应用有关。", "tx_api_error": "我们无法确定您的交易是否会成功或失败。请谨慎进行。", diff --git a/src/screens/SignTransactionSheet.tsx b/src/screens/SignTransactionSheet.tsx index 9f7f78d9977..6be751d4175 100644 --- a/src/screens/SignTransactionSheet.tsx +++ b/src/screens/SignTransactionSheet.tsx @@ -23,6 +23,7 @@ import { SIGN_TYPED_DATA_V4, isMessageDisplayType, isPersonalSign, + isSignTypedData, } from '@/utils/signingMethods'; import { Transaction } from '@ethersproject/transactions'; import { RouteProp, useRoute } from '@react-navigation/native'; @@ -160,6 +161,8 @@ export const SignTransactionSheet = () => { const isMessageRequest = isMessageDisplayType(transactionDetails.payload.method); const isPersonalSignRequest = isPersonalSign(transactionDetails.payload.method); + const isTypedDataRequest = isSignTypedData(transactionDetails.payload.method); + const isSimulationUnavailable = isPersonalSignRequest || isTypedDataRequest; const label = useForegroundColor('label'); const surfacePrimary = useBackgroundColor('surfacePrimary'); @@ -235,7 +238,7 @@ export const SignTransactionSheet = () => { transactionDetails, }, { - enabled: !isPersonalSignRequest, + enabled: !isSimulationUnavailable, } );