diff --git a/src/components/recovery/SkipRecoveryButton/index.tsx b/src/components/recovery/CancelRecoveryButton/index.tsx
similarity index 84%
rename from src/components/recovery/SkipRecoveryButton/index.tsx
rename to src/components/recovery/CancelRecoveryButton/index.tsx
index dfb01d92d6..b274dc9a8d 100644
--- a/src/components/recovery/SkipRecoveryButton/index.tsx
+++ b/src/components/recovery/CancelRecoveryButton/index.tsx
@@ -6,10 +6,10 @@ import ErrorIcon from '@/public/images/notifications/error.svg'
import IconButton from '@mui/material/IconButton'
import CheckWallet from '@/components/common/CheckWallet'
import { TxModalContext } from '@/components/tx-flow'
-import { SkipRecoveryFlow } from '@/components/tx-flow/flows/SkipRecovery'
+import { CancelRecoveryFlow } from '@/components/tx-flow/flows/CancelRecovery'
import type { RecoveryQueueItem } from '@/store/recoverySlice'
-export function SkipRecoveryButton({
+export function CancelRecoveryButton({
recovery,
compact = false,
}: {
@@ -22,7 +22,7 @@ export function SkipRecoveryButton({
e.stopPropagation()
e.preventDefault()
- setTxFlow()
+ setTxFlow()
}
return (
@@ -34,7 +34,7 @@ export function SkipRecoveryButton({
) : (
)
}
diff --git a/src/components/recovery/RecoveryDetails/index.tsx b/src/components/recovery/RecoveryDetails/index.tsx
index 46a2773e03..5e4b4d3ef8 100644
--- a/src/components/recovery/RecoveryDetails/index.tsx
+++ b/src/components/recovery/RecoveryDetails/index.tsx
@@ -61,7 +61,9 @@ export function RecoveryDetails({ item }: { item: RecoveryQueueItem }): ReactEle
) : (
- This transaction potentially calls malicious actions. We recommend skipping it.
+
+ This transaction potentially calls malicious actions. We recommend cancelling it.
+
)}
diff --git a/src/components/recovery/RecoverySigners/index.tsx b/src/components/recovery/RecoverySigners/index.tsx
index 1133ab7d45..2e9e517728 100644
--- a/src/components/recovery/RecoverySigners/index.tsx
+++ b/src/components/recovery/RecoverySigners/index.tsx
@@ -6,7 +6,7 @@ import CheckIcon from '@/public/images/common/circle-check.svg'
import EthHashInfo from '@/components/common/EthHashInfo'
import { Countdown } from '@/components/common/Countdown'
import { ExecuteRecoveryButton } from '../ExecuteRecoveryButton'
-import { SkipRecoveryButton } from '../SkipRecoveryButton'
+import { CancelRecoveryButton } from '../CancelRecoveryButton'
import { useRecoveryTxState } from '@/hooks/useRecoveryTxState'
import type { RecoveryQueueItem } from '@/store/recoverySlice'
@@ -69,7 +69,7 @@ export function RecoverySigners({ item }: { item: RecoveryQueueItem }): ReactEle
-
+
>
)
diff --git a/src/components/recovery/RecoverySummary/index.tsx b/src/components/recovery/RecoverySummary/index.tsx
index 4003b3b6a1..9992d76db3 100644
--- a/src/components/recovery/RecoverySummary/index.tsx
+++ b/src/components/recovery/RecoverySummary/index.tsx
@@ -6,7 +6,7 @@ import { RecoveryType } from '../RecoveryType'
import { RecoveryInfo } from '../RecoveryInfo'
import { RecoveryStatus } from '../RecoveryStatus'
import { ExecuteRecoveryButton } from '../ExecuteRecoveryButton'
-import { SkipRecoveryButton } from '../SkipRecoveryButton'
+import { CancelRecoveryButton } from '../CancelRecoveryButton'
import useWallet from '@/hooks/wallets/useWallet'
import type { RecoveryQueueItem } from '@/store/recoverySlice'
@@ -31,7 +31,7 @@ export function RecoverySummary({ item }: { item: RecoveryQueueItem }): ReactEle
{wallet && (
-
+
)}
diff --git a/src/components/tx-flow/common/OwnerList/index.tsx b/src/components/tx-flow/common/OwnerList/index.tsx
index f177b62e67..39c7eddecb 100644
--- a/src/components/tx-flow/common/OwnerList/index.tsx
+++ b/src/components/tx-flow/common/OwnerList/index.tsx
@@ -1,5 +1,5 @@
import { Paper, Typography, SvgIcon } from '@mui/material'
-import type { SxProps } from '@mui/material'
+import type { PaperProps } from '@mui/material'
import type { AddressEx } from '@safe-global/safe-gateway-typescript-sdk'
import type { ReactElement } from 'react'
@@ -15,7 +15,7 @@ export function OwnerList({
}: {
owners: Array
title?: string
- sx?: SxProps
+ sx?: PaperProps['sx']
}): ReactElement {
return (
diff --git a/src/components/tx-flow/flows/SkipRecovery/SkipRecoveryFlowReview.tsx b/src/components/tx-flow/flows/CancelRecovery/CancelRecoveryFlowReview.tsx
similarity index 62%
rename from src/components/tx-flow/flows/SkipRecovery/SkipRecoveryFlowReview.tsx
rename to src/components/tx-flow/flows/CancelRecovery/CancelRecoveryFlowReview.tsx
index 13f810983a..846df693aa 100644
--- a/src/components/tx-flow/flows/SkipRecovery/SkipRecoveryFlowReview.tsx
+++ b/src/components/tx-flow/flows/CancelRecovery/CancelRecoveryFlowReview.tsx
@@ -7,9 +7,10 @@ import SignOrExecuteForm from '@/components/tx/SignOrExecuteForm'
import { useWeb3ReadOnly } from '@/hooks/wallets/web3'
import { getRecoverySkipTransaction } from '@/services/recovery/transaction'
import { createTx } from '@/services/tx/tx-sender'
+import ErrorMessage from '@/components/tx/ErrorMessage'
import type { RecoveryQueueItem } from '@/store/recoverySlice'
-export function SkipRecoveryFlowReview({ recovery }: { recovery: RecoveryQueueItem }): ReactElement {
+export function CancelRecoveryFlowReview({ recovery }: { recovery: RecoveryQueueItem }): ReactElement {
const web3ReadOnly = useWeb3ReadOnly()
const { setSafeTx, setSafeTxError } = useContext(SafeTxContext)
@@ -23,16 +24,16 @@ export function SkipRecoveryFlowReview({ recovery }: { recovery: RecoveryQueueIt
return (
null} isBatchable={false}>
-
- To reject the recovery attempt, a separate transaction will be created to increase the nonce beyond the
- proposal.
+
+ This transaction will initiate the cancellation of the{' '}
+ {recovery.isMalicious ? 'malicious transaction' : 'recovery attempt'}. It requires other owner signatures in
+ order to be complete.
-
- Queue nonce: {recovery.args.queueNonce.toNumber()}
-
-
- You will need to confirm the transaction with your currently connected wallet.
+
+ All actions initiated by the guardian will be skipped. The current owners will remain the owners of the Safe
+ Account.
+
)
}
diff --git a/src/components/tx-flow/flows/CancelRecovery/CancelRecoveryOverview.tsx b/src/components/tx-flow/flows/CancelRecovery/CancelRecoveryOverview.tsx
new file mode 100644
index 0000000000..ca95fb326f
--- /dev/null
+++ b/src/components/tx-flow/flows/CancelRecovery/CancelRecoveryOverview.tsx
@@ -0,0 +1,43 @@
+import { Box, Button, Typography } from '@mui/material'
+import { useContext } from 'react'
+import type { ReactElement } from 'react'
+
+import ReplaceTxIcon from '@/public/images/transactions/replace-tx.svg'
+import { TxModalContext } from '../..'
+import TxCard from '../../common/TxCard'
+
+export function CancelRecoveryOverview({ onSubmit }: { onSubmit: () => void }): ReactElement {
+ const { setTxFlow } = useContext(TxModalContext)
+
+ const onClose = () => {
+ setTxFlow(undefined)
+ }
+
+ return (
+
+
+ {/* TODO: Replace with correct icon when provided */}
+
+
+
+ Do you want to cancel the Account recovery?
+
+
+
+ If it is was an unwanted recovery attempt or you've noticed something suspicious, you can cancel it by
+ increasing the nonce of the recovery module.
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/src/components/tx-flow/flows/CancelRecovery/index.tsx b/src/components/tx-flow/flows/CancelRecovery/index.tsx
new file mode 100644
index 0000000000..51e87d2ffd
--- /dev/null
+++ b/src/components/tx-flow/flows/CancelRecovery/index.tsx
@@ -0,0 +1,30 @@
+import type { ReactElement } from 'react'
+
+import TxLayout from '../../common/TxLayout'
+import { CancelRecoveryFlowReview } from './CancelRecoveryFlowReview'
+import { CancelRecoveryOverview } from './CancelRecoveryOverview'
+import useTxStepper from '../../useTxStepper'
+import type { RecoveryQueueItem } from '@/store/recoverySlice'
+
+export function CancelRecoveryFlow({ recovery }: { recovery: RecoveryQueueItem }): ReactElement {
+ const { step, nextStep, prevStep } = useTxStepper(undefined)
+
+ const steps = [
+ nextStep(undefined)} />,
+ ,
+ ]
+
+ const isIntro = step === 0
+
+ return (
+
+ {steps}
+
+ )
+}
diff --git a/src/components/tx-flow/flows/SkipRecovery/index.tsx b/src/components/tx-flow/flows/SkipRecovery/index.tsx
deleted file mode 100644
index 6da4a1f3ef..0000000000
--- a/src/components/tx-flow/flows/SkipRecovery/index.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import type { ReactElement } from 'react'
-
-import TxLayout from '../../common/TxLayout'
-import { SkipRecoveryFlowReview } from './SkipRecoveryFlowReview'
-import type { RecoveryQueueItem } from '@/store/recoverySlice'
-
-export function SkipRecoveryFlow({ recovery }: { recovery: RecoveryQueueItem }): ReactElement {
- return (
-
-
-
- )
-}
diff --git a/src/components/tx/ErrorMessage/index.tsx b/src/components/tx/ErrorMessage/index.tsx
index 5f6cc07932..bbae5fc712 100644
--- a/src/components/tx/ErrorMessage/index.tsx
+++ b/src/components/tx/ErrorMessage/index.tsx
@@ -26,7 +26,12 @@ const ErrorMessage = ({
return (
-
+
`${palette[level].main} !important` }}
+ />