Skip to content

Commit 976573f

Browse files
committed
fix(suite): hide malfunctioning cancel button in ConfirmActionModal component; workaround fix #15000
1 parent 5285872 commit 976573f

File tree

3 files changed

+32
-34
lines changed

3 files changed

+32
-34
lines changed

Diff for: packages/suite-web/e2e/tests/suite/passphrase-cancel.test.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ describe('Passphrase cancel', () => {
1818
mnemonic: 'mnemonic_all',
1919
passphrase_protection: true,
2020
});
21-
cy.task('startBridge');
21+
22+
// using specific bridge version - older versions don't support 'cancel' button
23+
cy.task('startBridge', '2.0.33');
2224
cy.prefixedVisit('/');
2325
cy.passThroughInitialRun();
2426
cy.discoveryShouldFinish();
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
1-
import { useIntl } from 'react-intl';
2-
31
import styled from 'styled-components';
42

5-
import TrezorConnect from '@trezor/connect';
63
import { H2, NewModal } from '@trezor/components';
74
import { ConfirmOnDevice } from '@trezor/product-components';
85
import { spacings } from '@trezor/theme';
96

107
import { Translation } from 'src/components/suite/Translation';
118
import { DeviceConfirmImage } from 'src/components/suite';
129
import { TrezorDevice } from 'src/types/suite';
13-
import messages from 'src/support/messages';
1410

1511
const ImageWrapper = styled.div`
1612
display: flex;
@@ -19,31 +15,27 @@ const ImageWrapper = styled.div`
1915

2016
interface ConfirmActionProps {
2117
device: TrezorDevice;
18+
onCancel?: () => void;
2219
}
2320

24-
export const ConfirmActionModal = ({ device }: ConfirmActionProps) => {
25-
const intl = useIntl();
26-
const onCancel = () => TrezorConnect.cancel(intl.formatMessage(messages.TR_CANCELLED));
27-
28-
return (
29-
<NewModal.Backdrop onClick={onCancel} data-testid="@suite/modal/confirm-action-on-device">
30-
<ConfirmOnDevice
31-
title={<Translation id="TR_CONFIRM_ON_TREZOR" />}
32-
deviceModelInternal={device?.features?.internal_model}
33-
deviceUnitColor={device?.features?.unit_color}
34-
onCancel={onCancel}
35-
/>
36-
<NewModal.ModalBase size="tiny">
37-
<ImageWrapper>
38-
<DeviceConfirmImage device={device} />
39-
</ImageWrapper>
40-
<H2
41-
align="center"
42-
margin={{ left: spacings.md, right: spacings.md, bottom: spacings.md }}
43-
>
44-
<Translation id="TR_CONFIRM_ACTION_ON_YOUR" />
45-
</H2>
46-
</NewModal.ModalBase>
47-
</NewModal.Backdrop>
48-
);
49-
};
21+
export const ConfirmActionModal = ({ device, onCancel }: ConfirmActionProps) => (
22+
<NewModal.Backdrop onClick={onCancel} data-testid="@suite/modal/confirm-action-on-device">
23+
<ConfirmOnDevice
24+
title={<Translation id="TR_CONFIRM_ON_TREZOR" />}
25+
deviceModelInternal={device?.features?.internal_model}
26+
deviceUnitColor={device?.features?.unit_color}
27+
onCancel={onCancel}
28+
/>
29+
<NewModal.ModalBase size="tiny">
30+
<ImageWrapper>
31+
<DeviceConfirmImage device={device} />
32+
</ImageWrapper>
33+
<H2
34+
align="center"
35+
margin={{ left: spacings.md, right: spacings.md, bottom: spacings.md }}
36+
>
37+
<Translation id="TR_CONFIRM_ACTION_ON_YOUR" />
38+
</H2>
39+
</NewModal.ModalBase>
40+
</NewModal.Backdrop>
41+
);

Diff for: packages/suite/src/components/suite/modals/ReduxModal/DeviceContextModal/DeviceContextModal.tsx

+7-3
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,12 @@ export const DeviceContextModal = ({
2929
data,
3030
}: ReduxModalProps<typeof MODAL.CONTEXT_DEVICE>) => {
3131
const device = useSelector(selectSelectedDevice);
32+
const transport = useSelector(state => state.suite.transport)?.transports[0];
3233
const intl = useIntl();
3334

3435
if (!device) return null;
3536

37+
const isBridge27 = transport?.type === 'BridgeTransport' && transport.version === '2.0.27';
3638
const abort = () => TrezorConnect.cancel(intl.formatMessage(messages.TR_CANCELLED));
3739

3840
switch (windowType) {
@@ -63,7 +65,7 @@ export const DeviceContextModal = ({
6365
return <TransactionReviewModal type="sign-transaction" />;
6466
}
6567
case 'ButtonRequest_Other': {
66-
return <ConfirmActionModal device={device} />;
68+
return <ConfirmActionModal device={device} onCancel={abort} />;
6769
}
6870
case 'ButtonRequest_FirmwareCheck':
6971
return <ConfirmFingerprintModal device={device} renderer={renderer} />;
@@ -74,14 +76,16 @@ export const DeviceContextModal = ({
7476
case 'ButtonRequest_RecoveryHomepage':
7577
case 'ButtonRequest_MnemonicWordCount':
7678
case 'ButtonRequest_MnemonicInput':
77-
case 'ButtonRequest_ProtectCall':
7879
case 'ButtonRequest_ResetDevice': // dispatched on BackupDevice call for T2T1, weird but true
7980
case 'ButtonRequest_ConfirmWord': // dispatched on BackupDevice call for T1B1
8081
case 'ButtonRequest_WipeDevice':
8182
case 'ButtonRequest_UnknownDerivationPath':
8283
case 'ButtonRequest_FirmwareUpdate':
8384
case 'ButtonRequest_PinEntry':
84-
return <ConfirmActionModal device={device} />;
85+
return <ConfirmActionModal device={device} onCancel={abort} />;
86+
// it appears that cancelling ButtonRequest_ProtectCall doesn't work using bridge 2.0.27.
87+
case 'ButtonRequest_ProtectCall':
88+
return <ConfirmActionModal device={device} onCancel={isBridge27 ? undefined : abort} />;
8589
case 'ButtonRequest_Address':
8690
return data ? (
8791
<ConfirmAddressModal

0 commit comments

Comments
 (0)