Set isBusy state for FromScratch buttons
[MAILPOET-4918]
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import { Dispatch, SetStateAction, useCallback, useState } from 'react';
|
import { Dispatch, useCallback, useState } from 'react';
|
||||||
import { __ } from '@wordpress/i18n';
|
import { __ } from '@wordpress/i18n';
|
||||||
import { Button } from '@wordpress/components';
|
import { Button } from '@wordpress/components';
|
||||||
import { Hooks } from 'wp-js-hooks';
|
import { Hooks } from 'wp-js-hooks';
|
||||||
@@ -9,21 +9,19 @@ import { FromScratchHookType } from '../../types/filters';
|
|||||||
|
|
||||||
type FromScratchPremiumModalProps = {
|
type FromScratchPremiumModalProps = {
|
||||||
showModal: boolean;
|
showModal: boolean;
|
||||||
setShowModal: Dispatch<SetStateAction<boolean>>;
|
onClose: () => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
function FromScratchPremiumModal({
|
function FromScratchPremiumModal({
|
||||||
showModal,
|
showModal,
|
||||||
setShowModal,
|
onClose,
|
||||||
}: FromScratchPremiumModalProps): JSX.Element | null {
|
}: FromScratchPremiumModalProps): JSX.Element | null {
|
||||||
if (!showModal) {
|
if (!showModal) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<PremiumModal
|
<PremiumModal
|
||||||
onRequestClose={() => {
|
onRequestClose={onClose}
|
||||||
setShowModal(false);
|
|
||||||
}}
|
|
||||||
tracking={{
|
tracking={{
|
||||||
utm_medium: 'upsell_modal',
|
utm_medium: 'upsell_modal',
|
||||||
utm_campaign: 'create_automation_from_scratch',
|
utm_campaign: 'create_automation_from_scratch',
|
||||||
@@ -47,11 +45,17 @@ function fromScratchHook(callback: () => void, errorHandler: Dispatch<string>) {
|
|||||||
export function FromScratchButton(): JSX.Element {
|
export function FromScratchButton(): JSX.Element {
|
||||||
const [showModal, setShowModal] = useState(false);
|
const [showModal, setShowModal] = useState(false);
|
||||||
const [error, errorHandler] = useState(null);
|
const [error, errorHandler] = useState(null);
|
||||||
|
const [isBusy, setIsBusy] = useState(false);
|
||||||
const onClickScratchButton = useCallback(() => {
|
const onClickScratchButton = useCallback(() => {
|
||||||
fromScratchHook(() => {
|
fromScratchHook(() => {
|
||||||
setShowModal(true);
|
setShowModal(true);
|
||||||
}, errorHandler);
|
}, errorHandler);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
const premiumClose = () => {
|
||||||
|
setShowModal(false);
|
||||||
|
setIsBusy(false);
|
||||||
|
};
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{error && (
|
{error && (
|
||||||
@@ -59,25 +63,37 @@ export function FromScratchButton(): JSX.Element {
|
|||||||
<p>{error}</p>
|
<p>{error}</p>
|
||||||
</Notice>
|
</Notice>
|
||||||
)}
|
)}
|
||||||
<Button variant="secondary" onClick={() => onClickScratchButton()}>
|
<Button
|
||||||
|
variant="secondary"
|
||||||
|
isBusy={isBusy}
|
||||||
|
disabled={isBusy}
|
||||||
|
onClick={() => {
|
||||||
|
setIsBusy(true);
|
||||||
|
onClickScratchButton();
|
||||||
|
}}
|
||||||
|
>
|
||||||
{__('From scratch', 'mailpoet')}
|
{__('From scratch', 'mailpoet')}
|
||||||
</Button>
|
</Button>
|
||||||
<FromScratchPremiumModal
|
<FromScratchPremiumModal showModal={showModal} onClose={premiumClose} />
|
||||||
showModal={showModal}
|
|
||||||
setShowModal={setShowModal}
|
|
||||||
/>
|
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function FromScratchListItem(): JSX.Element {
|
export function FromScratchListItem(): JSX.Element {
|
||||||
const [showModal, setShowModal] = useState(false);
|
const [showModal, setShowModal] = useState(false);
|
||||||
|
const [isBusy, setIsBusy] = useState(false);
|
||||||
const [error, errorHandler] = useState(null);
|
const [error, errorHandler] = useState(null);
|
||||||
const onClickScratchButton = useCallback(() => {
|
const onClickScratchButton = useCallback(() => {
|
||||||
fromScratchHook(() => {
|
fromScratchHook(() => {
|
||||||
setShowModal(true);
|
setShowModal(true);
|
||||||
}, errorHandler);
|
}, errorHandler);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
const premiumClose = () => {
|
||||||
|
setShowModal(false);
|
||||||
|
setIsBusy(false);
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<li className="mailpoet-automation-template-list-item mailpoet-automation-from-scratch">
|
<li className="mailpoet-automation-template-list-item mailpoet-automation-from-scratch">
|
||||||
{error && (
|
{error && (
|
||||||
@@ -85,14 +101,18 @@ export function FromScratchListItem(): JSX.Element {
|
|||||||
<p>{error}</p>
|
<p>{error}</p>
|
||||||
</Notice>
|
</Notice>
|
||||||
)}
|
)}
|
||||||
<Button onClick={() => onClickScratchButton()}>
|
<Button
|
||||||
|
isBusy={isBusy}
|
||||||
|
disabled={isBusy}
|
||||||
|
onClick={() => {
|
||||||
|
setIsBusy(true);
|
||||||
|
onClickScratchButton();
|
||||||
|
}}
|
||||||
|
>
|
||||||
<Icon width="50px" height="50px" icon={plusCircleFilled} />
|
<Icon width="50px" height="50px" icon={plusCircleFilled} />
|
||||||
{__('Create from scratch', 'mailpoet')}
|
{__('Create from scratch', 'mailpoet')}
|
||||||
</Button>
|
</Button>
|
||||||
<FromScratchPremiumModal
|
<FromScratchPremiumModal showModal={showModal} onClose={premiumClose} />
|
||||||
showModal={showModal}
|
|
||||||
setShowModal={setShowModal}
|
|
||||||
/>
|
|
||||||
</li>
|
</li>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user