mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Snap removal confirmation (#13619)
* Add Snap removal confirmation * Add styling for Snap removal confirmation * Update styling * Update button margin * Re-use styling code * Address comments * Update Popover props * Lint * Lint Co-authored-by: Erik Marks <25517051+rekmarks@users.noreply.github.com> Co-authored-by: Erik Marks <rekmarks@protonmail.com>
This commit is contained in:
parent
e795c29b3f
commit
0461bbcded
7
app/_locales/en/messages.json
generated
7
app/_locales/en/messages.json
generated
@ -2299,6 +2299,9 @@
|
||||
"personalAddressDetected": {
|
||||
"message": "Personal address detected. Input the token contract address."
|
||||
},
|
||||
"pleaseConfirm": {
|
||||
"message": "Please confirm"
|
||||
},
|
||||
"plusXMore": {
|
||||
"message": "+ $1 more",
|
||||
"description": "$1 is a number of additional but unshown items in a list- this message will be shown in place of those items"
|
||||
@ -2434,6 +2437,10 @@
|
||||
"removeSnap": {
|
||||
"message": "Remove Snap"
|
||||
},
|
||||
"removeSnapConfirmation": {
|
||||
"message": "Are you sure you want to remove $1?",
|
||||
"description": "$1 represents the name of the snap"
|
||||
},
|
||||
"removeSnapDescription": {
|
||||
"message": "This action will delete the snap, its data and revoke your given permissions."
|
||||
},
|
||||
|
@ -30,6 +30,7 @@
|
||||
@import 'edit-gas-fee-popover/edit-gas-tooltip/index';
|
||||
@import 'flask/experimental-area/index';
|
||||
@import 'flask/snap-install-warning/index';
|
||||
@import 'flask/snap-remove-warning/index';
|
||||
@import 'flask/snap-settings-card/index';
|
||||
@import 'flask/snaps-authorship-pill/index';
|
||||
@import 'gas-customization/gas-modal-page-container/index';
|
||||
|
1
ui/components/app/flask/snap-remove-warning/index.js
Normal file
1
ui/components/app/flask/snap-remove-warning/index.js
Normal file
@ -0,0 +1 @@
|
||||
export { default } from './snap-remove-warning';
|
12
ui/components/app/flask/snap-remove-warning/index.scss
Normal file
12
ui/components/app/flask/snap-remove-warning/index.scss
Normal file
@ -0,0 +1,12 @@
|
||||
.snap-remove-warning {
|
||||
color: var(--black);
|
||||
|
||||
&__footer-button {
|
||||
height: 40px;
|
||||
margin-inline-end: 24px;
|
||||
|
||||
&:last-of-type {
|
||||
margin-inline-end: 0;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,64 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { useI18nContext } from '../../../../hooks/useI18nContext';
|
||||
import Typography from '../../../ui/typography/typography';
|
||||
import { TYPOGRAPHY } from '../../../../helpers/constants/design-system';
|
||||
import Box from '../../../ui/box/box';
|
||||
import Popover from '../../../ui/popover';
|
||||
import Button from '../../../ui/button';
|
||||
|
||||
export default function SnapRemoveWarning({ onCancel, onSubmit, snapName }) {
|
||||
const t = useI18nContext();
|
||||
|
||||
const SnapRemoveWarningFooter = () => {
|
||||
return (
|
||||
<>
|
||||
<Button
|
||||
className="snap-remove-warning__footer-button"
|
||||
type="default"
|
||||
onClick={onCancel}
|
||||
>
|
||||
{t('nevermind')}
|
||||
</Button>
|
||||
<Button
|
||||
className="snap-remove-warning__footer-button"
|
||||
type="danger-primary"
|
||||
onClick={onSubmit}
|
||||
>
|
||||
{t('removeSnap')}
|
||||
</Button>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
return (
|
||||
<Popover
|
||||
className="snap-remove-warning"
|
||||
title={t('pleaseConfirm')}
|
||||
footer={<SnapRemoveWarningFooter />}
|
||||
onClose={onCancel}
|
||||
headerProps={{ padding: [6, 4, 0, 6] }}
|
||||
>
|
||||
<Box paddingRight={4} paddingBottom={4} paddingLeft={6}>
|
||||
<Typography variant={TYPOGRAPHY.H4}>
|
||||
{t('removeSnapConfirmation', [snapName])}
|
||||
</Typography>
|
||||
</Box>
|
||||
</Popover>
|
||||
);
|
||||
}
|
||||
|
||||
SnapRemoveWarning.propTypes = {
|
||||
/**
|
||||
* onCancel handler
|
||||
*/
|
||||
onCancel: PropTypes.func,
|
||||
/**
|
||||
* onSubmit handler
|
||||
*/
|
||||
onSubmit: PropTypes.func,
|
||||
/**
|
||||
* Name of snap
|
||||
*/
|
||||
snapName: PropTypes.string,
|
||||
};
|
@ -1,4 +1,4 @@
|
||||
import React, { useEffect } from 'react';
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { useHistory, useLocation } from 'react-router-dom';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import Button from '../../../../components/ui/button';
|
||||
@ -12,6 +12,7 @@ import {
|
||||
} from '../../../../helpers/constants/design-system';
|
||||
import SnapsAuthorshipPill from '../../../../components/app/flask/snaps-authorship-pill';
|
||||
import Box from '../../../../components/ui/box';
|
||||
import SnapRemoveWarning from '../../../../components/app/flask/snap-remove-warning';
|
||||
import ToggleButton from '../../../../components/ui/toggle-button';
|
||||
import PermissionsConnectPermissionList from '../../../../components/app/permissions-connect-permission-list/permissions-connect-permission-list';
|
||||
import ConnectedSitesList from '../../../../components/app/connected-sites-list';
|
||||
@ -39,6 +40,8 @@ function ViewSnap() {
|
||||
return snapState.id === decoded;
|
||||
});
|
||||
|
||||
const [isShowingRemoveWarning, setIsShowingRemoveWarning] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
if (!snap) {
|
||||
history.push(SNAPS_LIST_ROUTE);
|
||||
@ -152,12 +155,19 @@ function ViewSnap() {
|
||||
css={{
|
||||
maxWidth: '175px',
|
||||
}}
|
||||
onClick={() => {
|
||||
dispatch(removeSnap(snap));
|
||||
}}
|
||||
onClick={() => setIsShowingRemoveWarning(true)}
|
||||
>
|
||||
{t('removeSnap')}
|
||||
</Button>
|
||||
{isShowingRemoveWarning && (
|
||||
<SnapRemoveWarning
|
||||
onCancel={() => setIsShowingRemoveWarning(false)}
|
||||
onSubmit={async () => {
|
||||
await dispatch(removeSnap(snap));
|
||||
}}
|
||||
snapName={snap.manifest.proposedName}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
</Box>
|
||||
</div>
|
||||
|
Loading…
Reference in New Issue
Block a user