mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-02 06:07:06 +01:00
bf61322ee1
* Updating import paths * Updating snapshots * Fixing lint issues * Updating snapshots
198 lines
5.6 KiB
JavaScript
198 lines
5.6 KiB
JavaScript
import React, { useContext, useState } from 'react';
|
|
import PropTypes from 'prop-types';
|
|
import { useSelector, useDispatch } from 'react-redux';
|
|
import withModalProps from '../../../../helpers/higher-order-components/with-modal-props';
|
|
import Box from '../../../ui/box';
|
|
import {
|
|
BannerAlert,
|
|
ButtonIcon,
|
|
ButtonLink,
|
|
ButtonPrimary,
|
|
ButtonSecondary,
|
|
FormTextField,
|
|
Icon,
|
|
IconName,
|
|
IconSize,
|
|
Label,
|
|
Text,
|
|
} from '../../../component-library';
|
|
import {
|
|
AlignItems,
|
|
Display,
|
|
FlexDirection,
|
|
IconColor,
|
|
JustifyContent,
|
|
Severity,
|
|
Size,
|
|
TextAlign,
|
|
TextVariant,
|
|
} from '../../../../helpers/constants/design-system';
|
|
import { useI18nContext } from '../../../../hooks/useI18nContext';
|
|
import CheckBox from '../../../ui/check-box';
|
|
import { setDisabledRpcMethodPreference } from '../../../../store/actions';
|
|
import { getDisabledRpcMethodPreferences } from '../../../../selectors';
|
|
import {
|
|
MetaMetricsEventCategory,
|
|
MetaMetricsEventName,
|
|
} from '../../../../../shared/constants/metametrics';
|
|
import { MetaMetricsContext } from '../../../../contexts/metametrics';
|
|
|
|
const EthSignModal = ({ hideModal }) => {
|
|
const [isEthSignChecked, setIsEthSignChecked] = useState(false);
|
|
const [showTextField, setShowTextField] = useState(false);
|
|
const [inputKeyword, setInputKeyword] = useState('');
|
|
const disabledRpcMethodPreferences = useSelector(
|
|
getDisabledRpcMethodPreferences,
|
|
);
|
|
|
|
const t = useI18nContext();
|
|
const dispatch = useDispatch();
|
|
const trackEvent = useContext(MetaMetricsContext);
|
|
|
|
const handleSubmit = () => {
|
|
dispatch(
|
|
setDisabledRpcMethodPreference(
|
|
'eth_sign',
|
|
!disabledRpcMethodPreferences.eth_sign,
|
|
),
|
|
);
|
|
hideModal();
|
|
};
|
|
|
|
const isValid = inputKeyword === t('toggleEthSignModalFormValidation');
|
|
return (
|
|
<Box
|
|
className="eth-sign-modal"
|
|
display={Display.Flex}
|
|
flexDirection={FlexDirection.Column}
|
|
justifyContent={JustifyContent.flexStart}
|
|
padding={4}
|
|
>
|
|
<Box
|
|
display={Display.Flex}
|
|
flexDirection={FlexDirection.Row}
|
|
marginBottom={4}
|
|
justifyContent={JustifyContent.center}
|
|
>
|
|
<Icon
|
|
className="eth-sign-modal__warning-icon"
|
|
name={IconName.Danger}
|
|
color={IconColor.errorDefault}
|
|
size={IconSize.Lg}
|
|
/>
|
|
<ButtonIcon
|
|
className="eth-sign-modal__close"
|
|
iconName={IconName.Close}
|
|
size={Size.SM}
|
|
onClick={() => hideModal()}
|
|
ariaLabel={t('close')}
|
|
/>
|
|
</Box>
|
|
|
|
<Text
|
|
variant={TextVariant.headingMd}
|
|
textAlign={TextAlign.Center}
|
|
marginBottom={6}
|
|
>
|
|
{t('toggleEthSignModalTitle')}
|
|
</Text>
|
|
<Text variant={TextVariant.bodyMd}>
|
|
{t('toggleEthSignModalDescription')}
|
|
<ButtonLink
|
|
href="https://support.metamask.io/hc/en-us/articles/14764161421467"
|
|
externalLink
|
|
>
|
|
{t('learnMoreUpperCase')}
|
|
</ButtonLink>
|
|
</Text>
|
|
<BannerAlert severity={Severity.Danger} marginTop={6} marginBottom={6}>
|
|
{t('toggleEthSignModalBannerText')}
|
|
{t('toggleEthSignModalBannerBoldText')}
|
|
</BannerAlert>
|
|
{showTextField ? (
|
|
<FormTextField
|
|
id="enter-eth-sign-text"
|
|
label={t('toggleEthSignModalFormLabel')}
|
|
error={inputKeyword.length > 0 && !isValid}
|
|
helpText={
|
|
inputKeyword.length > 0 &&
|
|
!isValid &&
|
|
t('toggleEthSignModalFormError')
|
|
}
|
|
onChange={(event) => setInputKeyword(event.target.value)}
|
|
value={inputKeyword}
|
|
onPaste={(event) => event.preventDefault()}
|
|
/>
|
|
) : (
|
|
<Box
|
|
flexDirection={FlexDirection.Row}
|
|
alignItems={AlignItems.flexStart}
|
|
gap={2}
|
|
>
|
|
<CheckBox
|
|
id="eth-sign__checkbox"
|
|
className="eth-sign__checkbox"
|
|
dataTestId="eth-sign__checkbox"
|
|
checked={isEthSignChecked}
|
|
onClick={() => {
|
|
setIsEthSignChecked(!isEthSignChecked);
|
|
}}
|
|
/>
|
|
<Label htmlFor="eth-sign__checkbox">
|
|
<Text variant={TextVariant.bodyMd} as="span">
|
|
{t('toggleEthSignModalCheckBox')}
|
|
</Text>
|
|
</Label>
|
|
</Box>
|
|
)}
|
|
<Box
|
|
display={Display.Flex}
|
|
flexDirection={FlexDirection.Row}
|
|
justifyContent={JustifyContent.spaceBetween}
|
|
gap={4}
|
|
marginTop={6}
|
|
>
|
|
<ButtonSecondary onClick={() => hideModal()} size={Size.LG} block>
|
|
{t('cancel')}
|
|
</ButtonSecondary>
|
|
{showTextField ? (
|
|
<ButtonPrimary
|
|
danger
|
|
block
|
|
disabled={!isValid}
|
|
onClick={handleSubmit}
|
|
size={Size.LG}
|
|
>
|
|
{t('enableSnap')}
|
|
</ButtonPrimary>
|
|
) : (
|
|
<ButtonPrimary
|
|
block
|
|
disabled={!isEthSignChecked}
|
|
size={Size.LG}
|
|
onClick={() => {
|
|
setShowTextField(true);
|
|
trackEvent({
|
|
category: MetaMetricsEventCategory.Settings,
|
|
event: MetaMetricsEventName.OnboardingWalletAdvancedSettings,
|
|
properties: {
|
|
location: 'Settings',
|
|
enable_eth_sign: true,
|
|
},
|
|
});
|
|
}}
|
|
>
|
|
{t('continue')}
|
|
</ButtonPrimary>
|
|
)}
|
|
</Box>
|
|
</Box>
|
|
);
|
|
};
|
|
|
|
EthSignModal.propTypes = {
|
|
// The function to close the Modal
|
|
hideModal: PropTypes.func,
|
|
};
|
|
export default withModalProps(EthSignModal);
|