1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

Refactor home notification (#10046)

Co-authored-by: Brad Decker <git@braddecker.dev>
This commit is contained in:
Erik Marks 2020-12-10 12:02:21 -08:00 committed by GitHub
parent 07c5527b1e
commit db004d4486
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 69 additions and 131 deletions

View File

@ -1,101 +1,66 @@
import React, { PureComponent } from 'react' import React from 'react'
import classnames from 'classnames' import classnames from 'classnames'
import { Tooltip as ReactTippy } from 'react-tippy'
import PropTypes from 'prop-types' import PropTypes from 'prop-types'
import Button from '../../ui/button' import Button from '../../ui/button'
import Tooltip from '../../ui/tooltip'
export default class HomeNotification extends PureComponent { const HomeNotification = ({
static contextTypes = { acceptText,
metricsEvent: PropTypes.func, classNames = [],
} descriptionText,
ignoreText,
static defaultProps = { infoText,
onAccept: null, onAccept,
ignoreText: null, onIgnore,
onIgnore: null, }) => {
infoText: null, return (
} <div className={classnames('home-notification', ...classNames)}>
<div className="home-notification__content">
static propTypes = { <div className="home-notification__content-container">
acceptText: PropTypes.node.isRequired, <div className="home-notification__text">{descriptionText}</div>
onAccept: PropTypes.func,
ignoreText: PropTypes.node,
onIgnore: PropTypes.func,
descriptionText: PropTypes.node.isRequired,
infoText: PropTypes.node,
classNames: PropTypes.array,
}
handleAccept = () => {
this.props.onAccept()
}
handleIgnore = () => {
this.props.onIgnore()
}
render() {
const {
descriptionText,
acceptText,
onAccept,
ignoreText,
onIgnore,
infoText,
classNames = [],
} = this.props
return (
<div className={classnames('home-notification', ...classNames)}>
<div className="home-notification__header">
<div className="home-notification__header-container">
<img
className="home-notification__icon"
alt=""
src="images/icons/connect.svg"
/>
<div className="home-notification__text">{descriptionText}</div>
</div>
{infoText ? (
<ReactTippy
style={{
display: 'flex',
}}
html={
<p className="home-notification-tooltip__content">{infoText}</p>
}
offset={-36}
distance={36}
animation="none"
position="top"
arrow
theme="tippy-tooltip-home"
>
<img alt="" src="images/icons/info.svg" />
</ReactTippy>
) : null}
</div>
<div className="home-notification__buttons">
{onAccept && acceptText ? (
<Button
type="primary"
className="home-notification__accept-button"
onClick={this.handleAccept}
>
{acceptText}
</Button>
) : null}
{onIgnore && ignoreText ? (
<Button
type="secondary"
className="home-notification__ignore-button"
onClick={this.handleIgnore}
>
{ignoreText}
</Button>
) : null}
</div> </div>
{infoText ? (
<Tooltip
position="top"
title={infoText}
wrapperClassName="home-notification__tooltip-wrapper"
>
<i className="fa fa-info-circle" />
</Tooltip>
) : null}
</div> </div>
) <div className="home-notification__buttons">
} {onAccept && acceptText ? (
<Button
type="primary"
className="home-notification__accept-button"
onClick={onAccept}
>
{acceptText}
</Button>
) : null}
{onIgnore && ignoreText ? (
<Button
type="secondary"
className="home-notification__ignore-button"
onClick={onIgnore}
>
{ignoreText}
</Button>
) : null}
</div>
</div>
)
} }
HomeNotification.propTypes = {
acceptText: PropTypes.node,
classNames: PropTypes.array,
descriptionText: PropTypes.node.isRequired,
ignoreText: PropTypes.node,
infoText: PropTypes.node,
onAccept: PropTypes.func,
onIgnore: PropTypes.func,
}
export default HomeNotification

View File

@ -1,14 +1,7 @@
.tippy-tooltip {
// This looks weird, but its repeating the class name
// using interpolation for higher specificity.
&#{&}-home-theme {
background: rgba(36, 41, 46, 0.9);
color: $white;
border-radius: 8px;
}
}
.home-notification { .home-notification {
display: flex;
flex-flow: column;
justify-content: space-between;
background: rgba(36, 41, 46, 0.9); background: rgba(36, 41, 46, 0.9);
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.12); box-shadow: 0 2px 10px rgba(0, 0, 0, 0.12);
border-radius: 8px; border-radius: 8px;
@ -19,31 +12,20 @@
min-width: 472px; min-width: 472px;
} }
display: flex; &__content-container {
flex-flow: column;
justify-content: space-between;
&__header-container {
display: flex; display: flex;
} }
&__header { &__content {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
} }
&__icon {
height: 16px;
align-self: center;
}
&__text { &__text {
@include H7; @include H7;
color: $white; color: $white;
margin-left: 10px;
margin-right: 8px;
} }
.fa-info-circle { .fa-info-circle {
@ -102,23 +84,14 @@
&__buttons { &__buttons {
display: flex; display: flex;
width: 100%; width: 100%;
margin-top: 10px; padding-top: 10px;
justify-content: flex-start; align-items: center;
justify-content: space-between;
flex-direction: row-reverse; flex-direction: row-reverse;
} }
}
.home-notification-tooltip { &__tooltip-wrapper {
&__tooltip-container {
display: flex; display: flex;
} margin-left: 10px;
&__content {
@include H7;
color: $white;
text-align: left;
display: inline-block;
width: 200px;
} }
} }