85 lines
1.8 KiB
TypeScript
85 lines
1.8 KiB
TypeScript
import { ReactNode } from 'react';
|
|
import { useMutation } from './api';
|
|
import { Step, Workflow } from './editor/components/workflow/types';
|
|
|
|
export const createRootStep = (): Step => ({
|
|
id: 'root',
|
|
type: 'root',
|
|
key: 'core:root',
|
|
args: {},
|
|
next_steps: [],
|
|
});
|
|
|
|
const createWorkflow = (): Partial<Workflow> => ({
|
|
name: 'Empty workflow',
|
|
steps: {
|
|
root: createRootStep(),
|
|
},
|
|
});
|
|
|
|
export function CreateEmptyWorkflowButton(): JSX.Element {
|
|
const [createSchema, { loading, error }] = useMutation('workflows', {
|
|
method: 'POST',
|
|
});
|
|
|
|
return (
|
|
<div>
|
|
<button
|
|
className="button"
|
|
type="button"
|
|
onClick={async () => {
|
|
await createSchema({
|
|
body: JSON.stringify(createWorkflow()),
|
|
});
|
|
window.location.reload();
|
|
}}
|
|
disabled={loading}
|
|
>
|
|
Create empty workflow (premium required)
|
|
</button>
|
|
{error && (
|
|
<div>{error?.data?.message ?? 'An unknown error occurred'}</div>
|
|
)}
|
|
</div>
|
|
);
|
|
}
|
|
|
|
type TemplateButtonProps = {
|
|
slug: string;
|
|
children?: ReactNode;
|
|
};
|
|
|
|
export function CreateWorkflowFromTemplateButton({
|
|
slug,
|
|
children,
|
|
}: TemplateButtonProps): JSX.Element {
|
|
const [createWorkflowFromTemplate, { loading, error }] = useMutation(
|
|
'workflows/create-from-template',
|
|
{
|
|
method: 'POST',
|
|
body: JSON.stringify({
|
|
slug,
|
|
}),
|
|
},
|
|
);
|
|
|
|
return (
|
|
<div>
|
|
<button
|
|
className="button button-primary"
|
|
type="button"
|
|
onClick={async () => {
|
|
await createWorkflowFromTemplate();
|
|
window.location.reload();
|
|
}}
|
|
disabled={loading}
|
|
>
|
|
{children}
|
|
</button>
|
|
{error && (
|
|
<div>{error?.data?.message ?? 'An unknown error occurred'}</div>
|
|
)}
|
|
</div>
|
|
);
|
|
}
|