Compute state of address modal reactively (fix edge case on first input)

[MAILPOET-2806]
This commit is contained in:
Jan Jakeš
2020-04-07 10:30:53 +02:00
committed by Veljko V
parent c01d87bfac
commit 0e40b820e5
4 changed files with 12 additions and 13 deletions

View File

@@ -24,6 +24,10 @@ export default function KeyActivation() {
await setUnauthorizedAddresses(null); await setUnauthorizedAddresses(null);
}; };
const showFromAddressModal = state.fromAddressModalCanBeShown
&& state.mssStatus === MssStatus.VALID_MSS_ACTIVE
&& (!senderAddress || unauthorizedAddresses);
const verifyKey = async (event) => { const verifyKey = async (event) => {
if (!state.key) { if (!state.key) {
notices.error(<p>{t('premiumTabNoKeyNotice')}</p>, { scroll: true }); notices.error(<p>{t('premiumTabNoKeyNotice')}</p>, { scroll: true });
@@ -36,14 +40,11 @@ export default function KeyActivation() {
premiumInstallationStatus: null, premiumInstallationStatus: null,
}); });
MailPoet.Modal.loading(true); MailPoet.Modal.loading(true);
const mssStatus: MssStatus = (await verifyMssKey(state.key, isUserTriggered)) as any; await verifyMssKey(state.key, isUserTriggered);
await verifyPremiumKey(state.key); await verifyPremiumKey(state.key);
MailPoet.Modal.loading(false); MailPoet.Modal.loading(false);
if (isUserTriggered) { if (isUserTriggered) {
const authorizedAddressNeeded = !senderAddress || unauthorizedAddresses; setState({ fromAddressModalCanBeShown: true });
if (mssStatus === MssStatus.VALID_MSS_ACTIVE && authorizedAddressNeeded) {
setState({ showFromAddressModal: true });
}
} }
}; };
@@ -96,9 +97,9 @@ export default function KeyActivation() {
</div> </div>
)} )}
</Inputs> </Inputs>
{state.showFromAddressModal && ( {showFromAddressModal && (
<SetFromAddressModal <SetFromAddressModal
onRequestClose={() => setState({ showFromAddressModal: false })} onRequestClose={() => setState({ fromAddressModalCanBeShown: false })}
setAuthorizedAddress={setAuthorizedAddress} setAuthorizedAddress={setAuthorizedAddress}
/> />
)} )}

View File

@@ -63,11 +63,10 @@ export function* verifyMssKey(key: string, activateMssIfKeyValid: boolean) {
data: { key }, data: { key },
}; };
if (!success) { if (!success) {
yield updateKeyActivationState({ return updateKeyActivationState({
mssStatus: MssStatus.INVALID, mssStatus: MssStatus.INVALID,
mssMessage: error.join(' ') || null, mssMessage: error.join(' ') || null,
}); });
return MssStatus.INVALID;
} }
const fields: Partial<KeyActivationState> = { const fields: Partial<KeyActivationState> = {
mssMessage: res.data.message || null, mssMessage: res.data.message || null,
@@ -92,8 +91,7 @@ export function* verifyMssKey(key: string, activateMssIfKeyValid: boolean) {
} else { } else {
fields.mssStatus = MssStatus.VALID_MSS_NOT_ACTIVE; fields.mssStatus = MssStatus.VALID_MSS_NOT_ACTIVE;
} }
yield updateKeyActivationState(fields); return updateKeyActivationState(fields);
return fields.mssStatus;
} }
export function* verifyPremiumKey(key: string) { export function* verifyPremiumKey(key: string) {

View File

@@ -35,7 +35,7 @@ export default function makeDefaultState(window: any): State {
premiumStatus, premiumStatus,
mssMessage: null, mssMessage: null,
premiumMessage: null, premiumMessage: null,
showFromAddressModal: false, fromAddressModalCanBeShown: false,
premiumInstallationStatus: null, premiumInstallationStatus: null,
key: data.premium.premium_key || data.mta.mailpoet_api_key, key: data.premium.premium_key || data.mta.mailpoet_api_key,
}; };

View File

@@ -222,7 +222,7 @@ export type KeyActivationState = {
mssStatus: MssStatus mssStatus: MssStatus
mssMessage: string mssMessage: string
premiumInstallationStatus: PremiumInstallationStatus premiumInstallationStatus: PremiumInstallationStatus
showFromAddressModal: boolean fromAddressModalCanBeShown: boolean
} }
export type State = { export type State = {