Refactor getPremiumStatus and getMssStatus as selectors

[MAILPOET-2681]
Use Typescript enums instead of JS constants.
This commit is contained in:
Amine Ben hammou
2020-03-29 19:34:05 +02:00
committed by Veljko V
parent c1de6a8db7
commit b03945234c
5 changed files with 63 additions and 37 deletions

View File

@@ -1,11 +1,10 @@
import PropTypes from 'prop-types';
import React, { useMemo, useState } from 'react';
import MailPoet from 'mailpoet';
import KeyMessages from 'settings/pages/key_activation/messages/key_messages.jsx';
import { MssStatus, MssMessages } from 'settings/pages/key_activation/messages/mss_messages.jsx';
import { PremiumStatus, PremiumMessages } from 'settings/pages/key_activation/messages/premium_messages.jsx';
import { MssMessages } from 'settings/pages/key_activation/messages/mss_messages.jsx';
import { PremiumMessages } from 'settings/pages/key_activation/messages/premium_messages.jsx';
import { PremiumInstallationStatus } from 'settings/pages/key_activation/messages/premium_installation_messages.jsx';
import { useSetting } from 'settings/store/hooks';
import { useSetting, useSelector } from 'settings/store/hooks';
const getSettings = async () => MailPoet.Ajax.post({
api_version: window.mailpoet_api_version,
@@ -46,6 +45,8 @@ const PremiumTab = () => {
const [premiumKey] = useSetting('premium', 'premium_key');
const [mssKey] = useSetting('mta', 'mailpoet_api_key');
const [key, setKey] = useState(premiumKey || mssKey);
const getMssStatus = useSelector('getMssStatus');
const getPremiumStatus = useSelector('getPremiumStatus');
const [premiumStatus, setPremiumStatus] = useState(key ? getPremiumStatus() : null);
const [premiumMessage, setPremiumMessage] = useState(null);
const [premiumInstallationStatus, setPremiumInstallationStatus] = useState(null);
@@ -55,7 +56,7 @@ const PremiumTab = () => {
// key is considered valid if either Premium or MSS check passes
const keyValid = useMemo(() => {
if (premiumStatus > PremiumStatus.KEY_INVALID || mssStatus > MssStatus.KEY_INVALID) {
if (premiumStatus !== 'invalid' || mssStatus !== 'invalid') {
return true;
}
return (premiumStatus === null || mssStatus === null) ? null : false;
@@ -97,13 +98,13 @@ const PremiumTab = () => {
// install/activate Premium plugin
let pluginActive = response.meta.premium_plugin_active;
if (!response.meta.premium_plugin_installed) {
setPremiumStatus(PremiumStatus.KEY_VALID_PREMIUM_PLUGIN_BEING_INSTALLED);
setPremiumStatus('valid_premium_plugin_being_installed');
pluginActive = await installPremiumPlugin();
} else if (!response.meta.premium_plugin_active) {
setPremiumStatus(PremiumStatus.KEY_VALID_PREMIUM_PLUGIN_BEING_ACTIVATED);
setPremiumStatus('valid_premium_plugin_being_activated');
pluginActive = await activatePremiumPlugin();
} else {
setPremiumStatus(PremiumStatus.KEY_VALID_PREMIUM_PLUGIN_ACTIVE);
setPremiumStatus('valid_premium_plugin_active');
}
MailPoet.trackEvent(
@@ -114,7 +115,7 @@ const PremiumTab = () => {
}
);
} catch (error) {
setPremiumStatus(PremiumStatus.KEY_INVALID);
setPremiumStatus('invalid');
setPremiumMessage(error.errors.map((e) => e.message).join(' ') || null);
MailPoet.trackEvent(
'User has failed to validate a Premium key',
@@ -132,12 +133,12 @@ const PremiumTab = () => {
setMssKeyMessage(response.data.message || null);
if (activateMssIfKeyValid) {
await activateMss(key);
setMssStatus(MssStatus.KEY_VALID_MSS_ACTIVE);
setMssStatus('valid_mss_active');
} else {
setMssStatus(MssStatus.KEY_VALID_MSS_NOT_ACTIVE);
setMssStatus('valid_mss_not_active');
}
} catch (error) {
setMssStatus(MssStatus.KEY_INVALID);
setMssStatus('invalid');
setMssKeyMessage(error.errors.map((e) => e.message).join(' ') || null);
}
window.updateMSSActivationUI();
@@ -243,27 +244,3 @@ const PremiumTab = () => {
</>
);
};
const getPremiumStatus = () => {
const keyValid = window.mailpoet_premium_key_valid;
const pluginInstalled = window.mailpoet_premium_plugin_installed;
const pluginActive = !!MailPoet.premiumVersion;
if (!keyValid) {
return PremiumStatus.KEY_INVALID;
}
if (pluginActive) {
return PremiumStatus.KEY_VALID_PREMIUM_PLUGIN_ACTIVE;
}
return pluginInstalled
? PremiumStatus.KEY_VALID_PREMIUM_PLUGIN_NOT_ACTIVE
: PremiumStatus.KEY_VALID_PREMIUM_PLUGIN_NOT_INSTALLED;
};
const getMssStatus = () => {
const keyValid = window.mailpoet_mss_key_valid;
const mssActive = window.mailpoet_mss_active;
if (!keyValid) {
return MssStatus.KEY_INVALID;
}
return mssActive ? MssStatus.KEY_VALID_MSS_ACTIVE : MssStatus.KEY_VALID_MSS_NOT_ACTIVE;
};

View File

@@ -11,6 +11,9 @@ export default function makeDefaultState(window: any): State {
error: false,
woocommerce: !!window.mailpoet_woocommerce_active,
newUser: !!window.mailpoet_is_new_user,
mssKeyValid: window.mailpoet_mss_key_valid,
premiumKeyValid: window.mailpoet_premium_key_valid,
premiumPluginInstalled: window.mailpoet_premium_plugin_installed,
},
data: normalizeSettings(window.mailpoet_settings),
segments: window.mailpoet_segments,

View File

@@ -1,5 +1,8 @@
import _ from 'lodash';
import { State, Settings } from './types';
import MailPoet from 'mailpoet';
import {
State, Settings, PremiumStatus, MssStatus,
} from './types';
export function getSetting(state: State, path: string[]): any {
return _.get(state.data, path);
@@ -44,3 +47,27 @@ export function getSegments(state: State) {
export function getPages(state: State) {
return state.pages;
}
export function getPremiumStatus(state: State): PremiumStatus {
const keyValid = state.flags.premiumKeyValid;
const pluginInstalled = state.flags.premiumPluginInstalled;
const pluginActive = !!MailPoet.premiumVersion;
if (!keyValid) {
return 'invalid';
}
if (pluginActive) {
return 'valid_premium_plugin_active';
}
return pluginInstalled
? 'valid_premium_plugin_not_active'
: 'valid_premium_plugin_not_installed';
}
export function getMssStatus(state: State): MssStatus {
const keyValid = state.flags.mssKeyValid;
const mssActive = isMssActive(state);
if (!keyValid) {
return 'invalid';
}
return mssActive ? 'valid_mss_active' : 'valid_mss_not_active';
}

View File

@@ -185,6 +185,9 @@ export type State = {
woocommerce: boolean
newUser: boolean
error: boolean
mssKeyValid: boolean
premiumKeyValid: boolean
premiumPluginInstalled: boolean
}
save: {
inProgress: boolean
@@ -198,3 +201,16 @@ export type Action =
| { type: 'SAVE_STARTED' }
| { type: 'SAVE_DONE' }
| { type: 'SAVE_FAILED'; error: any }
export type PremiumStatus =
| 'invalid'
| 'valid_premium_plugin_not_installed'
| 'valid_premium_plugin_not_active'
| 'valid_premium_plugin_active'
| 'valid_premium_plugin_being_installed'
| 'valid_premium_plugin_being_activated'
export type MssStatus =
| 'invalid'
| 'valid_mss_not_active'
| 'valid_mss_active'

View File

@@ -14,6 +14,9 @@
var mailpoet_settings = <%= json_encode(settings) %>;
var mailpoet_segments = <%= json_encode(segments) %>;
var mailpoet_pages = <%= json_encode(pages) %>;
var mailpoet_mss_key_valid = <%= json_encode(mss_key_valid) %>;
var mailpoet_premium_key_valid = <%= json_encode(premium_key_valid) %>;
var mailpoet_premium_plugin_installed = <%= json_encode(premium_plugin_installed) %>;
<% endautoescape %>
var mailpoet_beacon_articles = [
'57f71d49c697911f2d323486',