Add welcome email sequence template

[MAILPOET-4454]
This commit is contained in:
Jan Jakes
2022-06-29 14:06:14 +02:00
committed by Jan Jakeš
parent 76e1ae9f89
commit 083bf93851
3 changed files with 42 additions and 4 deletions

View File

@@ -1,3 +1,4 @@
import { ReactNode } from 'react';
import { useMutation } from './api';
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(
'workflows/create-from-template',
{
@@ -85,14 +94,14 @@ export function CreateWorkflowFromTemplateButton(): JSX.Element {
await createWorkflowFromTemplate({
body: JSON.stringify({
name: `Test from template ${new Date().toISOString()}`,
template: 'delayed-email-after-signup',
template,
}),
});
window.location.reload();
}}
disabled={loading}
>
Create testing workflow from template
{children}
</button>
{error && (
<div>{error?.data?.message ?? 'An unknown error occurred'}</div>

View File

@@ -10,7 +10,7 @@ use MailPoet\UnexpectedValueException;
class CreateWorkflowFromTemplateController {
/** @var WorkflowStorage */
private $storage;
/** @var WorkflowBuilder */
private $templates;
@@ -30,6 +30,9 @@ class CreateWorkflowFromTemplateController {
case 'delayed-email-after-signup':
$workflow = $this->templates->delayedEmailAfterSignupWorkflow($name);
break;
case 'welcome-email-sequence':
$workflow = $this->templates->welcomeEmailSequence($name);
break;
default:
throw UnexpectedValueException::create()->withMessage('Template not found.');
}

View File

@@ -48,6 +48,32 @@ class WorkflowBuilder {
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 {
return new Step($this->uniqueId(), Step::TYPE_ACTION, $this->waitAction->getKey(), null, [
'seconds' => $seconds,