Implement add trigger placeholder & button
[PREMIUM-194] [MAILPOET-4585]
This commit is contained in:
@@ -0,0 +1,19 @@
|
|||||||
|
.mailpoet-automation-workflow-add-trigger {
|
||||||
|
align-items: center;
|
||||||
|
border: 1px dashed #c3c4c7;
|
||||||
|
border-radius: 4px;
|
||||||
|
color: #757575;
|
||||||
|
cursor: pointer;
|
||||||
|
display: flex;
|
||||||
|
fill: #757575;
|
||||||
|
height: 73px;
|
||||||
|
justify-content: center;
|
||||||
|
margin: 4px auto;
|
||||||
|
padding: 20px 32px;
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
box-shadow:
|
||||||
|
0 0 0 1px #fbfbfb, // space
|
||||||
|
0 0 0 calc(var(--wp-admin-border-width-focus) + 1px) var(--wp-admin-theme-color), // focus ring
|
||||||
|
}
|
||||||
|
}
|
@@ -4,6 +4,7 @@
|
|||||||
@import '../../../node_modules/@wordpress/block-editor/build-style/style'; // for inserter styles
|
@import '../../../node_modules/@wordpress/block-editor/build-style/style'; // for inserter styles
|
||||||
@import 'settings/colors';
|
@import 'settings/colors';
|
||||||
@import './components-automation-editor/add-step-button';
|
@import './components-automation-editor/add-step-button';
|
||||||
|
@import './components-automation-editor/add-trigger';
|
||||||
@import './components-automation-editor/block-icon';
|
@import './components-automation-editor/block-icon';
|
||||||
@import './components-automation-editor/dropdown';
|
@import './components-automation-editor/dropdown';
|
||||||
@import './components-automation-editor/empty-workflow';
|
@import './components-automation-editor/empty-workflow';
|
||||||
|
@@ -0,0 +1,30 @@
|
|||||||
|
import { useContext } from 'react';
|
||||||
|
import { __unstableCompositeItem as CompositeItem } from '@wordpress/components';
|
||||||
|
import { Icon, plus } from '@wordpress/icons';
|
||||||
|
import { __ } from '@wordpress/i18n';
|
||||||
|
import { useDispatch } from '@wordpress/data';
|
||||||
|
import { WorkflowCompositeContext } from './context';
|
||||||
|
import { store } from '../../store';
|
||||||
|
|
||||||
|
export function AddTrigger(): JSX.Element {
|
||||||
|
const compositeState = useContext(WorkflowCompositeContext);
|
||||||
|
const { setInserterPopoverAnchor } = useDispatch(store);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<CompositeItem
|
||||||
|
state={compositeState}
|
||||||
|
role="treeitem"
|
||||||
|
className="mailpoet-automation-workflow-add-trigger"
|
||||||
|
focusable
|
||||||
|
onClick={(event) => {
|
||||||
|
event.stopPropagation();
|
||||||
|
setInserterPopoverAnchor(
|
||||||
|
(event.target as HTMLElement).closest('button'),
|
||||||
|
);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Icon icon={plus} size={16} />
|
||||||
|
{__('Add trigger', 'mailpoet')}
|
||||||
|
</CompositeItem>
|
||||||
|
);
|
||||||
|
}
|
@@ -12,6 +12,7 @@ import { Separator } from './separator';
|
|||||||
import { Step } from './step';
|
import { Step } from './step';
|
||||||
import { InserterPopover } from '../inserter-popover';
|
import { InserterPopover } from '../inserter-popover';
|
||||||
import { store } from '../../store';
|
import { store } from '../../store';
|
||||||
|
import { AddTrigger } from './add-trigger';
|
||||||
|
|
||||||
export function Workflow(): JSX.Element {
|
export function Workflow(): JSX.Element {
|
||||||
const { workflowData, selectedStep } = useSelect(
|
const { workflowData, selectedStep } = useSelect(
|
||||||
@@ -75,10 +76,14 @@ export function Workflow(): JSX.Element {
|
|||||||
<div />
|
<div />
|
||||||
{steps.map((step) => (
|
{steps.map((step) => (
|
||||||
<Fragment key={step.id}>
|
<Fragment key={step.id}>
|
||||||
|
{step.type === 'trigger' && step.key === 'core:empty' ? (
|
||||||
|
<AddTrigger />
|
||||||
|
) : (
|
||||||
<Step
|
<Step
|
||||||
step={step}
|
step={step}
|
||||||
isSelected={selectedStep && step.id === selectedStep.id}
|
isSelected={selectedStep && step.id === selectedStep.id}
|
||||||
/>
|
/>
|
||||||
|
)}
|
||||||
<Separator />
|
<Separator />
|
||||||
</Fragment>
|
</Fragment>
|
||||||
))}
|
))}
|
||||||
|
@@ -1,10 +1,24 @@
|
|||||||
import { ReactNode } from 'react';
|
import { ReactNode } from 'react';
|
||||||
import { useMutation } from './api';
|
import { useMutation } from './api';
|
||||||
|
import { id } from './id';
|
||||||
|
|
||||||
const createWorkflow = () => ({
|
export const createEmptyTrigger = () =>
|
||||||
|
({
|
||||||
|
id: id(),
|
||||||
|
type: 'trigger',
|
||||||
|
key: 'core:empty',
|
||||||
|
args: {},
|
||||||
|
} as const);
|
||||||
|
|
||||||
|
const createWorkflow = () => {
|
||||||
|
const emptyTrigger = createEmptyTrigger();
|
||||||
|
return {
|
||||||
name: 'Empty workflow',
|
name: 'Empty workflow',
|
||||||
steps: {},
|
steps: {
|
||||||
});
|
[emptyTrigger.id]: emptyTrigger,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
export function CreateEmptyWorkflowButton(): JSX.Element {
|
export function CreateEmptyWorkflowButton(): JSX.Element {
|
||||||
const [createSchema, { loading, error }] = useMutation('workflows', {
|
const [createSchema, { loading, error }] = useMutation('workflows', {
|
||||||
|
Reference in New Issue
Block a user