Add welcome email sequence template
[MAILPOET-4454]
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
import { ReactNode } from 'react';
|
||||||
import { useMutation } from './api';
|
import { useMutation } from './api';
|
||||||
import { id } from './id';
|
import { id } from './id';
|
||||||
|
|
||||||
@@ -68,7 +69,15 @@ export function CreateTestingWorkflowButton(): JSX.Element {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function CreateWorkflowFromTemplateButton(): JSX.Element {
|
type TemplateButtonProps = {
|
||||||
|
template: string;
|
||||||
|
children?: ReactNode;
|
||||||
|
};
|
||||||
|
|
||||||
|
export function CreateWorkflowFromTemplateButton({
|
||||||
|
template,
|
||||||
|
children,
|
||||||
|
}: TemplateButtonProps): JSX.Element {
|
||||||
const [createWorkflowFromTemplate, { loading, error }] = useMutation(
|
const [createWorkflowFromTemplate, { loading, error }] = useMutation(
|
||||||
'workflows/create-from-template',
|
'workflows/create-from-template',
|
||||||
{
|
{
|
||||||
@@ -85,14 +94,14 @@ export function CreateWorkflowFromTemplateButton(): JSX.Element {
|
|||||||
await createWorkflowFromTemplate({
|
await createWorkflowFromTemplate({
|
||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
name: `Test from template ${new Date().toISOString()}`,
|
name: `Test from template ${new Date().toISOString()}`,
|
||||||
template: 'delayed-email-after-signup',
|
template,
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
}}
|
}}
|
||||||
disabled={loading}
|
disabled={loading}
|
||||||
>
|
>
|
||||||
Create testing workflow from template
|
{children}
|
||||||
</button>
|
</button>
|
||||||
{error && (
|
{error && (
|
||||||
<div>{error?.data?.message ?? 'An unknown error occurred'}</div>
|
<div>{error?.data?.message ?? 'An unknown error occurred'}</div>
|
||||||
|
@@ -10,7 +10,7 @@ use MailPoet\UnexpectedValueException;
|
|||||||
class CreateWorkflowFromTemplateController {
|
class CreateWorkflowFromTemplateController {
|
||||||
/** @var WorkflowStorage */
|
/** @var WorkflowStorage */
|
||||||
private $storage;
|
private $storage;
|
||||||
|
|
||||||
/** @var WorkflowBuilder */
|
/** @var WorkflowBuilder */
|
||||||
private $templates;
|
private $templates;
|
||||||
|
|
||||||
@@ -30,6 +30,9 @@ class CreateWorkflowFromTemplateController {
|
|||||||
case 'delayed-email-after-signup':
|
case 'delayed-email-after-signup':
|
||||||
$workflow = $this->templates->delayedEmailAfterSignupWorkflow($name);
|
$workflow = $this->templates->delayedEmailAfterSignupWorkflow($name);
|
||||||
break;
|
break;
|
||||||
|
case 'welcome-email-sequence':
|
||||||
|
$workflow = $this->templates->welcomeEmailSequence($name);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
throw UnexpectedValueException::create()->withMessage('Template not found.');
|
throw UnexpectedValueException::create()->withMessage('Template not found.');
|
||||||
}
|
}
|
||||||
|
@@ -48,6 +48,32 @@ class WorkflowBuilder {
|
|||||||
return new Workflow($name, $steps);
|
return new Workflow($name, $steps);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function welcomeEmailSequence(string $name): Workflow {
|
||||||
|
$triggerStep = $this->segmentSubscribedTriggerStep();
|
||||||
|
|
||||||
|
$firstWaitStep = $this->waitStep(60 * 60);
|
||||||
|
$triggerStep->setNextStepId($firstWaitStep->getId());
|
||||||
|
|
||||||
|
$sendFirstEmailStep = $this->sendEmailActionStep(1);
|
||||||
|
$firstWaitStep->setNextStepId($sendFirstEmailStep->getId());
|
||||||
|
|
||||||
|
$secondWaitStep = $this->waitStep(3 * 60 * 60);
|
||||||
|
$sendFirstEmailStep->setNextStepId($secondWaitStep->getId());
|
||||||
|
|
||||||
|
$sendSecondEmailStep = $this->sendEmailActionStep(2);
|
||||||
|
$secondWaitStep->setNextStepId($sendSecondEmailStep->getId());
|
||||||
|
|
||||||
|
$steps = [
|
||||||
|
$triggerStep,
|
||||||
|
$firstWaitStep,
|
||||||
|
$sendFirstEmailStep,
|
||||||
|
$secondWaitStep,
|
||||||
|
$sendSecondEmailStep,
|
||||||
|
];
|
||||||
|
|
||||||
|
return new Workflow($name, $steps);
|
||||||
|
}
|
||||||
|
|
||||||
private function waitStep(int $seconds): Step {
|
private function waitStep(int $seconds): Step {
|
||||||
return new Step($this->uniqueId(), Step::TYPE_ACTION, $this->waitAction->getKey(), null, [
|
return new Step($this->uniqueId(), Step::TYPE_ACTION, $this->waitAction->getKey(), null, [
|
||||||
'seconds' => $seconds,
|
'seconds' => $seconds,
|
||||||
|
Reference in New Issue
Block a user