Add detailed premium installation messages

[MAILPOET-2431]
This commit is contained in:
Jan Jakeš
2019-12-10 15:08:39 +01:00
committed by Jack Kitterhing
parent 233189a341
commit 84a17505c4
5 changed files with 108 additions and 1 deletions

View File

@@ -0,0 +1,88 @@
import PropTypes from 'prop-types';
import React from 'react';
import ReactStringReplace from 'react-string-replace';
import MailPoet from 'mailpoet';
const PremiumInstallationStatus = {
INSTALL_INSTALLING: 0,
INSTALL_ACTIVATING: 1,
INSTALL_DONE: 2,
INSTALL_INSTALLING_ERROR: 3,
INSTALL_ACTIVATING_ERROR: 4,
ACTIVATE_ACTIVATING: 5,
ACTIVATE_DONE: 6,
ACTIVATE_ERROR: 7,
};
const keyPrefix = 'premium-installation-message';
const installingMessage = (
<div className="mailpoet_subitem" key={`${keyPrefix}-installing`}>
{MailPoet.I18n.t('premiumTabPremiumInstallationInstallingMessage')}
</div>
);
const activatingMessage = (
<div className="mailpoet_subitem" key={`${keyPrefix}-activating`}>
{MailPoet.I18n.t('premiumTabPremiumInstallationActivatingMessage')}
</div>
);
const doneMessage = (
<div className="mailpoet_subitem" key={`${keyPrefix}-done`}>
<strong>{MailPoet.I18n.t('premiumTabPremiumInstallationActiveMessage')}</strong>
</div>
);
const errorMessage = () => {
const links = ['https://account.mailpoet.com', 'https://www.mailpoet.com/support/'];
const message = ReactStringReplace(
MailPoet.I18n.t('premiumTabPremiumInstallationErrorMessage'),
/\[link\](.*?)\[\/link\]/g,
(match, i) => (
<a
key={i}
href={links.shift()}
target="_blank"
rel="noopener noreferrer"
>
{match}
</a>
)
);
return (
<div className="mailpoet_subitem" key={`${keyPrefix}-error`}>
<strong>{message}</strong>
</div>
);
};
const PremiumInstallationMessages = (props) => {
switch (props.installationStatus) {
case PremiumInstallationStatus.INSTALL_INSTALLING:
return installingMessage;
case PremiumInstallationStatus.INSTALL_ACTIVATING:
return [installingMessage, activatingMessage];
case PremiumInstallationStatus.INSTALL_DONE:
return [installingMessage, activatingMessage, doneMessage];
case PremiumInstallationStatus.INSTALL_INSTALLING_ERROR:
return [installingMessage, errorMessage()];
case PremiumInstallationStatus.INSTALL_ACTIVATING_ERROR:
return [installingMessage, activatingMessage, errorMessage()];
case PremiumInstallationStatus.ACTIVATE_ACTIVATING:
return activatingMessage;
case PremiumInstallationStatus.ACTIVATE_DONE:
return [activatingMessage, doneMessage];
case PremiumInstallationStatus.ACTIVATE_ERROR:
return [activatingMessage, errorMessage()];
default:
return null;
}
};
PremiumInstallationMessages.propTypes = {
installationStatus: PropTypes.number,
};
export { PremiumInstallationStatus, PremiumInstallationMessages };

View File

@@ -1,6 +1,7 @@
import PropTypes from 'prop-types';
import React from 'react';
import MailPoet from 'mailpoet';
import { PremiumInstallationMessages } from 'settings/premium_tab/messages/premium_installation_messages.jsx';
const PremiumStatus = {
KEY_INVALID: 0,
@@ -86,18 +87,25 @@ const PremiumMessages = (props) => {
return null;
}
return <PremiumInstallationMessages installationStatus={props.installationStatus} />;
return (
<>
{message}
<PremiumInstallationMessages installationStatus={props.installationStatus} />
</>
);
};
PremiumMessages.propTypes = {
keyStatus: PropTypes.number.isRequired,
keyMessage: PropTypes.string,
installationStatus: PropTypes.number,
installationCallback: PropTypes.func.isRequired,
activationCallback: PropTypes.func.isRequired,
};
PremiumMessages.defaultProps = {
keyMessage: null,
installationStatus: null,
};
export { PremiumStatus, PremiumMessages };

View File

@@ -4,6 +4,7 @@ import ReactDOM from 'react-dom';
import MailPoet from 'mailpoet';
import MssMessages from 'settings/premium_tab/messages/mss_messages.jsx';
import { PremiumStatus, PremiumMessages } from 'settings/premium_tab/messages/premium_messages.jsx';
import { PremiumInstallationStatus } from 'settings/premium_tab/messages/premium_installation_messages.jsx';
const requestServicesApi = async (key, action) => MailPoet.Ajax.post({
api_version: window.mailpoet_api_version,
@@ -16,6 +17,7 @@ const PremiumTab = (props) => {
const [key, setKey] = useState(props.activationKey);
const [premiumStatus, setPremiumStatus] = useState(key ? props.premiumStatus : null);
const [premiumMessage, setPremiumMessage] = useState(null);
const [premiumInstallationStatus, setPremiumInstallationStatus] = useState(null);
const [mssKeyValid, setMssKeyValid] = useState(key ? props.mssKeyValid : null);
const [mssKeyMessage, setMssKeyMessage] = useState(null);
@@ -122,6 +124,7 @@ const PremiumTab = (props) => {
<PremiumMessages
keyStatus={premiumStatus}
keyMessage={premiumMessage}
installationStatus={premiumInstallationStatus}
installationCallback="" //TODO
activationCallback="" //TODO
/>