Replace react-confirm-alert with custom component with consistent UI

This commit is contained in:
Ján Mikláš
2018-12-06 20:59:06 +01:00
parent 6429f7a689
commit dc8a74e190
5 changed files with 81 additions and 9 deletions

View File

@@ -77,6 +77,9 @@ body.mailpoet_modal_opened
padding: 10px 10px 10px 10px padding: 10px 10px 10px 10px
height: 92% height: 92%
.button + .button
margin-left: 10px
// modal panel // modal panel
.mailpoet_modal_overlay.mailpoet_panel_overlay .mailpoet_modal_overlay.mailpoet_panel_overlay
top: 32px top: 32px
@@ -128,6 +131,8 @@ body.mailpoet_modal_opened
// modal button // modal button
.mailpoet_modal_close .mailpoet_modal_close
background: url(../img/modal_close_button.png) 7px 7px no-repeat background: url(../img/modal_close_button.png) 7px 7px no-repeat
border: 0
cursor: pointer
height: 30px height: 30px
overflow: hidden overflow: hidden
padding: 0 padding: 0

View File

@@ -0,0 +1,72 @@
import MailPoet from 'mailpoet';
import PropTypes from 'prop-types';
import React from 'react';
import ReactDOM from 'react-dom';
class ConfirmAlert extends React.Component {
static propTypes = {
title: PropTypes.string,
message: PropTypes.string.isRequired,
cancelLabel: PropTypes.string,
confirmLabel: PropTypes.string,
onConfirm: PropTypes.func.isRequired,
}
static defaultProps = {
title: MailPoet.I18n.t('confirmTitle'),
cancelLabel: MailPoet.I18n.t('cancelLabel'),
confirmLabel: MailPoet.I18n.t('confirmLabel'),
}
constructor(props) {
super(props);
this.state = { show: true };
}
componentWillUpdate = () => {
if (!this.state.show) {
this.setState({ show: true });
}
}
onClose = () => {
this.setState({ show: false });
}
onConfirm = () => {
this.onClose();
this.props.onConfirm();
}
render() {
const { title, message, confirmLabel, cancelLabel } = this.props;
return (this.state.show &&
<div className="mailpoet_modal_overlay">
<div className="mailpoet_popup" tabIndex="-1">
<div className="mailpoet_popup_wrapper">
<button className="mailpoet_modal_close" onClick={this.onClose} />
{title &&
<div className="mailpoet_popup_title">
<h2>{title}</h2>
</div>
}
<div className="mailpoet_popup_body clearfix">
<p className="mailpoet_hp_email_label">{message}</p>
<button className="button button-secondary" onClick={this.onClose}>
{cancelLabel}
</button>
<button className="button button-primary" onClick={this.onConfirm}>
{confirmLabel}
</button>
</div>
</div>
</div>
</div>
);
}
}
export default function confirmAlert(props) {
ReactDOM.render(<ConfirmAlert {...props} />, document.getElementById('mailpoet_confirm_alert_holder'));
}

View File

@@ -1,11 +1,11 @@
import React from 'react'; import React from 'react';
import createReactClass from 'create-react-class'; import createReactClass from 'create-react-class';
import { confirmAlert } from 'react-confirm-alert';
import classNames from 'classnames'; import classNames from 'classnames';
import MailPoet from 'mailpoet'; import MailPoet from 'mailpoet';
import Hooks from 'wp-js-hooks'; import Hooks from 'wp-js-hooks';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import confirmAlert from 'common/confirm_alert.jsx';
import Listing from 'listing/listing.jsx'; import Listing from 'listing/listing.jsx';
import ListingTabs from 'newsletters/listings/tabs.jsx'; import ListingTabs from 'newsletters/listings/tabs.jsx';
import ListingHeading from 'newsletters/listings/heading.jsx'; import ListingHeading from 'newsletters/listings/heading.jsx';
@@ -113,10 +113,7 @@ const confirmEdit = (newsletter) => {
redirectToEditing(); redirectToEditing();
} else { } else {
confirmAlert({ confirmAlert({
title: MailPoet.I18n.t('confirmTitle'),
message: MailPoet.I18n.t('confirmEdit'), message: MailPoet.I18n.t('confirmEdit'),
confirmLabel: MailPoet.I18n.t('confirmLabel'),
cancelLabel: MailPoet.I18n.t('cancelLabel'),
onConfirm: redirectToEditing, onConfirm: redirectToEditing,
}); });
} }

View File

@@ -1,8 +1,9 @@
import React from 'react'; import React from 'react';
import MailPoet from 'mailpoet'; import MailPoet from 'mailpoet';
import { confirmAlert } from 'react-confirm-alert';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import confirmAlert from 'common/confirm_alert.jsx';
/** /**
* props = { * props = {
* index, id, newsletterId, name, description, thumbnail, readonly, * index, id, newsletterId, name, description, thumbnail, readonly,
@@ -40,12 +41,8 @@ class TemplateBox extends React.Component {
}); });
}; };
confirmAlert({ confirmAlert({
title: MailPoet.I18n.t('confirmTitle'),
message: MailPoet.I18n.t('confirmTemplateDeletion').replace('%$1s', name), message: MailPoet.I18n.t('confirmTemplateDeletion').replace('%$1s', name),
confirmLabel: MailPoet.I18n.t('confirmLabel'),
cancelLabel: MailPoet.I18n.t('cancelLabel'),
onConfirm, onConfirm,
onCancel: () => {},
}); });
} }

View File

@@ -11,6 +11,7 @@ jQuery('.toplevel_page_mailpoet-newsletters.menu-top-last')
<!-- system notices --> <!-- system notices -->
<div id="mailpoet_notice_system" class="mailpoet_notice" style="display:none;"></div> <div id="mailpoet_notice_system" class="mailpoet_notice" style="display:none;"></div>
<div id="mailpoet_confirm_alert_holder"></div>
<!-- handlebars templates --> <!-- handlebars templates -->
<% block templates %><% endblock %> <% block templates %><% endblock %>