Use enum types

[MAILPOET-2681]
This commit is contained in:
Amine Ben hammou
2020-04-03 06:36:18 +02:00
committed by Veljko V
parent 9b5afa5733
commit fd3a1738d2
8 changed files with 79 additions and 63 deletions

View File

@@ -36,7 +36,7 @@ export default function KeyActivation() {
MailPoet.Modal.loading(false); MailPoet.Modal.loading(false);
if (isTrusted) { if (isTrusted) {
const authorizedAddressNeeded = !senderAddress || unauthorizedAddresses; const authorizedAddressNeeded = !senderAddress || unauthorizedAddresses;
if (mssStatus === 'valid_mss_active' && authorizedAddressNeeded) { if (mssStatus === MssStatus.VALID_MSS_ACTIVE && authorizedAddressNeeded) {
setState({ showFromAddressModal: true }); setState({ showFromAddressModal: true });
} }
} }

View File

@@ -1,6 +1,7 @@
import React from 'react'; import React from 'react';
import MailPoet from 'mailpoet'; import MailPoet from 'mailpoet';
import { useSelector } from 'settings/store/hooks'; import { useSelector } from 'settings/store/hooks';
import { MssStatus } from 'settings/store/types';
const ActiveMessage = () => ( const ActiveMessage = () => (
<div className="mailpoet_success mailpoet_mss_key_valid"> <div className="mailpoet_success mailpoet_mss_key_valid">
@@ -34,11 +35,11 @@ type Props = {
export default function MssMessages(props: Props) { export default function MssMessages(props: Props) {
const { mssStatus } = useSelector('getKeyActivationState')(); const { mssStatus } = useSelector('getKeyActivationState')();
switch (mssStatus) { switch (mssStatus) {
case 'valid_mss_active': case MssStatus.VALID_MSS_ACTIVE:
return <ActiveMessage />; return <ActiveMessage />;
case 'valid_mss_not_active': case MssStatus.VALID_MSS_NOT_ACTIVE:
return <MssNotActiveMessage activationCallback={props.activationCallback} />; return <MssNotActiveMessage activationCallback={props.activationCallback} />;
case 'invalid': case MssStatus.INVALID:
return <NotValidMessage message={props.keyMessage} />; return <NotValidMessage message={props.keyMessage} />;
default: default:
return null; return null;

View File

@@ -52,16 +52,16 @@ type Props = {
} }
export default function PremiumInstallationMessages(props: Props) { export default function PremiumInstallationMessages(props: Props) {
switch (props.installationStatus) { switch (props.installationStatus) {
case 'install_installing': case PremiumInstallationStatus.INSTALL_INSTALLING:
return <InstallingMessage />; return <InstallingMessage />;
case 'install_activating': case PremiumInstallationStatus.INSTALL_ACTIVATING:
return ( return (
<> <>
<InstallingMessage /> <InstallingMessage />
<ActivatingMessage /> <ActivatingMessage />
</> </>
); );
case 'install_done': case PremiumInstallationStatus.INSTALL_DONE:
return ( return (
<> <>
<InstallingMessage /> <InstallingMessage />
@@ -69,14 +69,14 @@ export default function PremiumInstallationMessages(props: Props) {
<DoneMessage /> <DoneMessage />
</> </>
); );
case 'install_installing_error': case PremiumInstallationStatus.INSTALL_INSTALLING_ERROR:
return ( return (
<> <>
<InstallingMessage /> <InstallingMessage />
<ErrorMessage /> <ErrorMessage />
</> </>
); );
case 'install_activating_error': case PremiumInstallationStatus.INSTALL_ACTIVATING_ERROR:
return ( return (
<> <>
<InstallingMessage /> <InstallingMessage />
@@ -84,16 +84,16 @@ export default function PremiumInstallationMessages(props: Props) {
<ErrorMessage /> <ErrorMessage />
</> </>
); );
case 'activate_activating': case PremiumInstallationStatus.ACTIVATE_ACTIVATING:
return <ActivatingMessage />; return <ActivatingMessage />;
case 'activate_done': case PremiumInstallationStatus.ACTIVATE_DONE:
return ( return (
<> <>
<ActivatingMessage /> <ActivatingMessage />
<DoneMessage /> <DoneMessage />
</> </>
); );
case 'activate_error': case PremiumInstallationStatus.ACTIVATE_ERROR:
return ( return (
<> <>
<ActivatingMessage /> <ActivatingMessage />

View File

@@ -1,7 +1,7 @@
import React from 'react'; import React from 'react';
import MailPoet from 'mailpoet'; import MailPoet from 'mailpoet';
import { useSelector } from 'settings/store/hooks/index'; import { useSelector } from 'settings/store/hooks/index';
import { PremiumInstallationStatus } from 'settings/store/types'; import { PremiumInstallationStatus, PremiumStatus } from 'settings/store/types';
import PremiumInstallationMessages from './premium_installation_messages'; import PremiumInstallationMessages from './premium_installation_messages';
const ActiveMessage = () => ( const ActiveMessage = () => (
@@ -61,16 +61,16 @@ export default function PremiumMessages(props: Props) {
const { premiumStatus: status } = useSelector('getKeyActivationState')(); const { premiumStatus: status } = useSelector('getKeyActivationState')();
return ( return (
<> <>
{status === 'valid_premium_plugin_active' && <ActiveMessage />} {status === PremiumStatus.VALID_PREMIUM_PLUGIN_ACTIVE && <ActiveMessage />}
{status === 'valid_premium_plugin_not_active' && ( {status === PremiumStatus.VALID_PREMIUM_PLUGIN_NOT_ACTIVE && (
<PremiumNotActiveMessage callback={props.activationCallback} /> <PremiumNotActiveMessage callback={props.activationCallback} />
)} )}
{status === 'valid_premium_plugin_not_installed' && ( {status === PremiumStatus.VALID_PREMIUM_PLUGIN_NOT_INSTALLED && (
<PremiumNotInstalledMessage callback={props.installationCallback} /> <PremiumNotInstalledMessage callback={props.installationCallback} />
)} )}
{status === 'valid_premium_plugin_being_installed' && <InstallingMessage />} {status === PremiumStatus.VALID_PREMIUM_PLUGIN_BEING_INSTALLED && <InstallingMessage />}
{status === 'valid_premium_plugin_being_activated' && <ActivatingMessage />} {status === PremiumStatus.VALID_PREMIUM_PLUGIN_BEING_ACTIVATED && <ActivatingMessage />}
{status === 'invalid' && <NotValidMessage message={props.keyMessage} />} {status === PremiumStatus.INVALID && <NotValidMessage message={props.keyMessage} />}
<PremiumInstallationMessages installationStatus={props.installationStatus} /> <PremiumInstallationMessages installationStatus={props.installationStatus} />
</> </>
); );

View File

@@ -1,7 +1,9 @@
import { select } from '@wordpress/data'; import { select } from '@wordpress/data';
import MailPoet from 'mailpoet'; import MailPoet from 'mailpoet';
import { STORE_NAME } from '.'; import { STORE_NAME } from '.';
import { Action, KeyActivationState, MssStatus } from './types'; import {
Action, KeyActivationState, MssStatus, PremiumStatus, PremiumInstallationStatus,
} from './types';
export function setSetting(path: string[], value: any): Action { export function setSetting(path: string[], value: any): Action {
return { type: 'SET_SETTING', path, value }; return { type: 'SET_SETTING', path, value };
@@ -58,7 +60,7 @@ export function* verifyMssKey(key: string, activateMssIfKeyValid: boolean) {
}; };
if (!success) { if (!success) {
return updateKeyActivationState({ return updateKeyActivationState({
mssStatus: 'invalid', mssStatus: MssStatus.INVALID,
mssMessage: error.join(' ') || null, mssMessage: error.join(' ') || null,
}); });
} }
@@ -77,16 +79,16 @@ export function* verifyMssKey(key: string, activateMssIfKeyValid: boolean) {
}, },
}; };
if (!call.success) { if (!call.success) {
fields.mssStatus = 'valid_mss_not_active'; fields.mssStatus = MssStatus.VALID_MSS_NOT_ACTIVE;
} else { } else {
yield setSetting(['mta_group'], 'mailpoet'); yield setSetting(['mta_group'], 'mailpoet');
yield setSetting(['mta', 'method'], 'MailPoet'); yield setSetting(['mta', 'method'], 'MailPoet');
yield setSetting(['mta', 'mailpoet_api_key'], key); yield setSetting(['mta', 'mailpoet_api_key'], key);
yield setSetting(['signup_confirmation', 'enabled'], '1'); yield setSetting(['signup_confirmation', 'enabled'], '1');
fields.mssStatus = 'valid_mss_active'; fields.mssStatus = MssStatus.VALID_MSS_ACTIVE;
} }
} else { } else {
fields.mssStatus = 'valid_mss_not_active'; fields.mssStatus = MssStatus.VALID_MSS_NOT_ACTIVE;
} }
yield updateKeyActivationState(fields); yield updateKeyActivationState(fields);
return fields.mssStatus; return fields.mssStatus;
@@ -108,7 +110,7 @@ export function* verifyPremiumKey(key: string) {
} }
); );
return updateKeyActivationState({ return updateKeyActivationState({
premiumStatus: 'invalid', premiumStatus: PremiumStatus.INVALID,
premiumMessage: error.join(' ') || null, premiumMessage: error.join(' ') || null,
}); });
} }
@@ -133,7 +135,7 @@ export function* verifyPremiumKey(key: string) {
} }
if (pluginInstalled && pluginActive) { if (pluginInstalled && pluginActive) {
yield updateKeyActivationState({ premiumStatus: 'valid_premium_plugin_active' }); yield updateKeyActivationState({ premiumStatus: PremiumStatus.VALID_PREMIUM_PLUGIN_ACTIVE });
} }
MailPoet.trackEvent( MailPoet.trackEvent(
@@ -148,11 +150,17 @@ export function* verifyPremiumKey(key: string) {
} }
export function* activatePremiumPlugin(isAfterInstall) { export function* activatePremiumPlugin(isAfterInstall) {
const doneStatus = isAfterInstall ? 'install_done' : 'activate_done'; const doneStatus = isAfterInstall
const errorStatus = isAfterInstall ? 'install_activating_error' : 'activate_error'; ? PremiumInstallationStatus.INSTALL_DONE
: PremiumInstallationStatus.ACTIVATE_DONE;
const errorStatus = isAfterInstall
? PremiumInstallationStatus.INSTALL_ACTIVATING_ERROR
: PremiumInstallationStatus.ACTIVATE_ERROR;
yield updateKeyActivationState({ yield updateKeyActivationState({
premiumStatus: 'valid_premium_plugin_being_activated', premiumStatus: PremiumStatus.VALID_PREMIUM_PLUGIN_BEING_ACTIVATED,
premiumInstallationStatus: isAfterInstall ? 'install_activating' : 'activate_activating', premiumInstallationStatus: isAfterInstall
? PremiumInstallationStatus.INSTALL_ACTIVATING
: PremiumInstallationStatus.ACTIVATE_ACTIVATING,
}); });
const call = yield { const call = yield {
type: 'CALL_API', type: 'CALL_API',
@@ -169,8 +177,8 @@ export function* activatePremiumPlugin(isAfterInstall) {
export function* installPremiumPlugin() { export function* installPremiumPlugin() {
yield updateKeyActivationState({ yield updateKeyActivationState({
premiumStatus: 'valid_premium_plugin_being_installed', premiumStatus: PremiumStatus.VALID_PREMIUM_PLUGIN_BEING_INSTALLED,
premiumInstallationStatus: 'install_installing', premiumInstallationStatus: PremiumInstallationStatus.INSTALL_INSTALLING,
}); });
const call = yield { const call = yield {
type: 'CALL_API', type: 'CALL_API',
@@ -178,7 +186,9 @@ export function* installPremiumPlugin() {
action: 'installPlugin', action: 'installPlugin',
}; };
if (call && !call.success) { if (call && !call.success) {
yield updateKeyActivationState({ premiumInstallationStatus: 'install_installing_error' }); yield updateKeyActivationState({
premiumInstallationStatus: PremiumInstallationStatus.INSTALL_INSTALLING_ERROR,
});
return false; return false;
} }
return yield* activatePremiumPlugin(true); return yield* activatePremiumPlugin(true);

View File

@@ -1,5 +1,7 @@
import _ from 'lodash'; import _ from 'lodash';
import { State, Action, KeyActivationState } from './types'; import {
State, Action, KeyActivationState, MssStatus, PremiumStatus,
} from './types';
export default function createReducer(defaultValue: State) { export default function createReducer(defaultValue: State) {
let keyActivation: KeyActivationState; let keyActivation: KeyActivationState;
@@ -20,8 +22,8 @@ export default function createReducer(defaultValue: State) {
keyActivation.isKeyValid = null; keyActivation.isKeyValid = null;
if (keyActivation.mssStatus !== null && keyActivation.premiumStatus !== null) { if (keyActivation.mssStatus !== null && keyActivation.premiumStatus !== null) {
keyActivation.isKeyValid = ( keyActivation.isKeyValid = (
keyActivation.mssStatus !== 'invalid' keyActivation.mssStatus !== MssStatus.INVALID
|| keyActivation.premiumStatus !== 'invalid' || keyActivation.premiumStatus !== PremiumStatus.INVALID
); );
} }
return { ...state, keyActivation }; return { ...state, keyActivation };

View File

@@ -19,7 +19,7 @@ export default function makeDefaultState(window: any): State {
const mssStatus = getMssStatus(flags, data); const mssStatus = getMssStatus(flags, data);
let isKeyValid = null; let isKeyValid = null;
if (mssStatus !== null || premiumStatus !== null) { if (mssStatus !== null || premiumStatus !== null) {
isKeyValid = mssStatus !== 'invalid' || premiumStatus !== 'invalid'; isKeyValid = mssStatus !== MssStatus.INVALID || premiumStatus !== PremiumStatus.INVALID;
} }
const keyActivation = { const keyActivation = {
mssStatus, mssStatus,
@@ -41,19 +41,19 @@ function getPremiumStatus(flags): PremiumStatus {
const pluginInstalled = flags.premiumPluginInstalled; const pluginInstalled = flags.premiumPluginInstalled;
const pluginActive = !!MailPoet.premiumVersion; const pluginActive = !!MailPoet.premiumVersion;
if (!keyValid) { if (!keyValid) {
return 'invalid'; return PremiumStatus.INVALID;
} }
if (pluginActive) { if (pluginActive) {
return 'valid_premium_plugin_active'; return PremiumStatus.VALID_PREMIUM_PLUGIN_ACTIVE;
} }
return pluginInstalled return pluginInstalled
? 'valid_premium_plugin_not_active' ? PremiumStatus.VALID_PREMIUM_PLUGIN_NOT_ACTIVE
: 'valid_premium_plugin_not_installed'; : PremiumStatus.VALID_PREMIUM_PLUGIN_NOT_INSTALLED;
} }
function getMssStatus(flags, data): MssStatus { function getMssStatus(flags, data): MssStatus {
const keyValid = flags.mssKeyValid; const keyValid = flags.mssKeyValid;
if (!keyValid) return 'invalid'; if (!keyValid) return MssStatus.INVALID;
const mssActive = data.mta.method === 'MailPoet'; const mssActive = data.mta.method === 'MailPoet';
return mssActive ? 'valid_mss_active' : 'valid_mss_not_active'; return mssActive ? MssStatus.VALID_MSS_ACTIVE : MssStatus.VALID_MSS_NOT_ACTIVE;
} }

View File

@@ -186,28 +186,31 @@ type Page = {
} }
} }
export type PremiumStatus = export enum PremiumStatus {
| 'invalid' INVALID,
| 'valid_premium_plugin_not_installed' VALID_PREMIUM_PLUGIN_NOT_INSTALLED,
| 'valid_premium_plugin_not_active' VALID_PREMIUM_PLUGIN_NOT_ACTIVE,
| 'valid_premium_plugin_active' VALID_PREMIUM_PLUGIN_ACTIVE,
| 'valid_premium_plugin_being_installed' VALID_PREMIUM_PLUGIN_BEING_INSTALLED,
| 'valid_premium_plugin_being_activated' VALID_PREMIUM_PLUGIN_BEING_ACTIVATED,
}
export type MssStatus = export enum MssStatus {
| 'invalid' INVALID,
| 'valid_mss_not_active' VALID_MSS_NOT_ACTIVE,
| 'valid_mss_active' VALID_MSS_ACTIVE,
}
export type PremiumInstallationStatus = export enum PremiumInstallationStatus {
| 'install_installing' INSTALL_INSTALLING,
| 'install_activating' INSTALL_ACTIVATING,
| 'install_done' INSTALL_DONE,
| 'install_installing_error' INSTALL_INSTALLING_ERROR,
| 'install_activating_error' INSTALL_ACTIVATING_ERROR,
| 'activate_activating' ACTIVATE_ACTIVATING,
| 'activate_done' ACTIVATE_DONE,
| 'activate_error' ACTIVATE_ERROR,
}
export type KeyActivationState = { export type KeyActivationState = {
key: string key: string