1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00
metamask-extension/ui/pages/settings/experimental-tab/experimental-tab.component.js
Danica Shen a85a4cf97e
feat(878): add new incomingTxn component and change styles of settings (#20374)
* feat(878): add new incomingTxn component and change styles of settings

* feat(878): relocate openSea tab from rebase regression

* feat(878): make UI and test modifications

* feat(878): transfer to ts

* feat(878): rename network-toggle.tsx
2023-08-04 12:33:47 +01:00

286 lines
8.5 KiB
JavaScript

import React, { PureComponent } from 'react';
import PropTypes from 'prop-types';
import ToggleButton from '../../../components/ui/toggle-button';
import {
getNumberOfSettingsInSection,
handleSettingsRefs,
} from '../../../helpers/utils/settings-search';
import { MetaMetricsEventCategory } from '../../../../shared/constants/metametrics';
import { Text, Box } from '../../../components/component-library';
import {
TextColor,
TextVariant,
FontWeight,
///: BEGIN:ONLY_INCLUDE_IN(desktop)
Display,
FlexDirection,
JustifyContent,
///: END:ONLY_INCLUDE_IN
} from '../../../helpers/constants/design-system';
///: BEGIN:ONLY_INCLUDE_IN(desktop)
import DesktopEnableButton from '../../../components/app/desktop-enable-button';
///: END:ONLY_INCLUDE_IN
export default class ExperimentalTab extends PureComponent {
static contextTypes = {
t: PropTypes.func,
trackEvent: PropTypes.func,
};
static propTypes = {
transactionSecurityCheckEnabled: PropTypes.bool,
setTransactionSecurityCheckEnabled: PropTypes.func,
///: BEGIN:ONLY_INCLUDE_IN(blockaid)
securityAlertsEnabled: PropTypes.bool,
setSecurityAlertsEnabled: PropTypes.func,
///: END:ONLY_INCLUDE_IN
};
settingsRefs = Array(
getNumberOfSettingsInSection(
this.context.t,
this.context.t('experimental'),
),
)
.fill(undefined)
.map(() => {
return React.createRef();
});
componentDidUpdate() {
const { t } = this.context;
handleSettingsRefs(t, t('experimental'), this.settingsRefs);
}
componentDidMount() {
const { t } = this.context;
handleSettingsRefs(t, t('experimental'), this.settingsRefs);
}
///: BEGIN:ONLY_INCLUDE_IN(blockaid)
renderSecurityAlertsToggle() {
const { t } = this.context;
const { securityAlertsEnabled, setSecurityAlertsEnabled } = this.props;
return (
<>
<Text
variant={TextVariant.headingSm}
color={TextColor.textAlternative}
marginBottom={2}
>
{t('security')}
</Text>
<div
ref={this.settingsRefs[1]}
className="settings-page__content-row settings-page__content-row-experimental"
>
<div className="settings-page__content-item">
<span>{t('securityAlerts')}</span>
<div className="settings-page__content-description">
<Text
variant={TextVariant.bodySm}
color={TextColor.textAlternative}
>
{t('securityAlertsDescription1')}
</Text>
<Text
variant={TextVariant.bodySm}
color={TextColor.textAlternative}
>
{t('securityAlertsDescription2')}
</Text>
<Text
variant={TextVariant.bodySm}
color={TextColor.textAlternative}
marginTop={3}
marginBottom={1}
>
{t('selectProvider')}
</Text>
<div className="settings-page__content-item-col settings-page__content-item-col-open-sea">
<Text
variant={TextVariant.bodyMd}
color={TextColor.textDefault}
marginBottom={0}
>
{t('blockaid')}
</Text>
<ToggleButton
value={securityAlertsEnabled}
onToggle={(value) => {
this.context.trackEvent({
category: MetaMetricsEventCategory.Settings,
event: 'Enabled/Disable security_alerts_enabled',
properties: {
action: 'Enabled/Disable security_alerts_enabled',
legacy_event: true,
},
});
setSecurityAlertsEnabled(!value || false);
}}
/>
</div>
<Text
variant={TextVariant.bodyMd}
color={TextColor.textMuted}
marginTop={2}
>
{t('moreComingSoon')}
</Text>
</div>
</div>
</div>
</>
);
}
///: END:ONLY_INCLUDE_IN
renderTransactionSecurityCheckToggle() {
const { t } = this.context;
const {
transactionSecurityCheckEnabled,
setTransactionSecurityCheckEnabled,
} = this.props;
return (
<>
<Text
variant={TextVariant.headingSm}
as="h4"
color={TextColor.textAlternative}
marginBottom={2}
fontWeight={FontWeight.Bold}
>
{t('privacy')}
</Text>
<Box
ref={this.settingsRefs[1]}
className="settings-page__content-row settings-page__content-row-experimental"
marginBottom={3}
>
<div className="settings-page__content-item">
<span>{t('transactionSecurityCheck')}</span>
<div className="settings-page__content-description">
<Text
variant={TextVariant.bodySm}
as="h6"
color={TextColor.textAlternative}
>
{t('transactionSecurityCheckDescription')}
</Text>
<Text
marginTop={3}
marginBottom={1}
variant={TextVariant.bodySm}
as="h6"
color={TextColor.textAlternative}
>
{t('selectProvider')}
</Text>
<div className="settings-page__content-item-col settings-page__content-item-col-open-sea">
<Text
variant={TextVariant.bodyMd}
as="h5"
color={TextColor.textDefault}
fontWeight={FontWeight.Medium}
marginBottom={0}
>
{t('openSea')}
</Text>
<ToggleButton
value={transactionSecurityCheckEnabled}
onToggle={(value) => {
this.context.trackEvent({
category: MetaMetricsEventCategory.Settings,
event: 'Enabled/Disable TransactionSecurityCheck',
properties: {
action: 'Enabled/Disable TransactionSecurityCheck',
legacy_event: true,
},
});
setTransactionSecurityCheckEnabled(!value);
}}
/>
</div>
<Text
variant={TextVariant.bodySm}
as="h6"
color={TextColor.textAlternative}
marginTop={0}
>
{t('thisServiceIsExperimental', [
<a
href="http://opensea.io/securityproviderterms"
key="termsOfUse"
rel="noopener noreferrer"
target="_blank"
>
{t('termsOfUse')}
</a>,
])}
</Text>
<Text
variant={TextVariant.bodyMd}
as="h5"
fontWeight={FontWeight.Medium}
color={TextColor.textMuted}
marginTop={2}
>
{t('moreComingSoon')}
</Text>
</div>
</div>
</Box>
</>
);
}
///: BEGIN:ONLY_INCLUDE_IN(desktop)
renderDesktopEnableButton() {
const { t } = this.context;
return (
<Box
ref={this.settingsRefs[6]}
className="settings-page__content-row"
data-testid="advanced-setting-desktop-pairing"
display={Display.Flex}
flexDirection={FlexDirection.Row}
justifyContent={JustifyContent.spaceBetween}
>
<div className="settings-page__content-item">
<span>{t('desktopEnableButtonDescription')}</span>
</div>
<div className="settings-page__content-item-col">
<DesktopEnableButton />
</div>
</Box>
);
}
///: END:ONLY_INCLUDE_IN
render() {
return (
<div className="settings-page__body">
{
///: BEGIN:ONLY_INCLUDE_IN(blockaid)
this.renderSecurityAlertsToggle()
///: END:ONLY_INCLUDE_IN
}
{this.renderTransactionSecurityCheckToggle()}
{
///: BEGIN:ONLY_INCLUDE_IN(desktop)
this.renderDesktopEnableButton()
///: END:ONLY_INCLUDE_IN
}
</div>
);
}
}