diff --git a/packages/plugins/@nocobase/plugin-workflow/src/client/components/DrawerForm.tsx b/packages/plugins/@nocobase/plugin-workflow/src/client/components/DrawerForm.tsx
new file mode 100644
index 0000000000..a48c6f76f1
--- /dev/null
+++ b/packages/plugins/@nocobase/plugin-workflow/src/client/components/DrawerForm.tsx
@@ -0,0 +1,47 @@
+import React, { useCallback, useMemo, useState } from 'react';
+import { cloneDeep } from 'lodash';
+import { createForm } from '@formily/core';
+import { useForm } from '@formily/react';
+
+import { ActionContextProvider, FormProvider } from '@nocobase/client';
+
+export function useFormProviderProps() {
+ return { form: useForm() };
+}
+
+export function DrawerFormProvider(props) {
+ const { values, disabled, visible, setVisible } = props;
+ const [formValueChanged, setFormValueChanged] = useState(false);
+
+ const form = useMemo(() => {
+ const v = cloneDeep(values);
+ return createForm({
+ values: v,
+ initialValues: v,
+ disabled: disabled,
+ });
+ }, [disabled, values]);
+
+ const resetForm = useCallback(
+ (editing) => {
+ setVisible(editing);
+ if (!editing) {
+ form.reset();
+ }
+ },
+ [form],
+ );
+
+ return (
+
+ {props.children}
+
+ );
+}
diff --git a/packages/plugins/@nocobase/plugin-workflow/src/client/index.tsx b/packages/plugins/@nocobase/plugin-workflow/src/client/index.tsx
index 4cfc061e09..227fb01344 100644
--- a/packages/plugins/@nocobase/plugin-workflow/src/client/index.tsx
+++ b/packages/plugins/@nocobase/plugin-workflow/src/client/index.tsx
@@ -33,7 +33,7 @@ import { useTriggerWorkflowsActionProps } from './hooks/useTriggerWorkflowAction
import { getWorkflowDetailPath, getWorkflowExecutionsPath } from './constant';
import { NAMESPACE } from './locale';
-export default class extends Plugin {
+export default class PluginWorkflowClient extends Plugin {
triggers = new Registry();
instructions = new Registry();
getTriggersOptions = () => {
diff --git a/packages/plugins/@nocobase/plugin-workflow/src/client/triggers/index.tsx b/packages/plugins/@nocobase/plugin-workflow/src/client/triggers/index.tsx
index f8be59584a..e22f85b3cc 100644
--- a/packages/plugins/@nocobase/plugin-workflow/src/client/triggers/index.tsx
+++ b/packages/plugins/@nocobase/plugin-workflow/src/client/triggers/index.tsx
@@ -40,7 +40,7 @@ function useUpdateConfigAction() {
return;
}
await form.submit();
- await api.resource('workflows').update?.({
+ await api.resource('workflows').update({
filterByTk: workflow.id,
values: {
config: form.values,
@@ -151,23 +151,22 @@ export const TriggerConfig = () => {
const compile = useCompile();
const trigger = useTrigger();
- const { title, executed } = workflow;
const typeTitle = compile(trigger.title);
const { fieldset, scope, components } = trigger;
- const detailText = executed ? '{{t("View")}}' : '{{t("Configure")}}';
+ const detailText = workflow.executed ? '{{t("View")}}' : '{{t("Configure")}}';
const titleText = lang('Trigger');
useEffect(() => {
if (workflow) {
- setEditingTitle(workflow.title ?? typeTitle);
+ setEditingTitle(workflow.triggerTitle ?? workflow.title ?? typeTitle);
}
}, [workflow]);
const form = useMemo(() => {
- const values = cloneDeep(workflow?.config);
+ const values = cloneDeep(workflow.config);
return createForm({
initialValues: values,
- disabled: workflow?.executed,
+ disabled: workflow.executed,
});
}, [workflow]);
@@ -185,13 +184,13 @@ export const TriggerConfig = () => {
async function (next) {
const t = next || typeTitle;
setEditingTitle(t);
- if (t === title) {
+ if (t === workflow.triggerTitle) {
return;
}
- await api.resource('workflows').update?.({
+ await api.resource('workflows').update({
filterByTk: workflow.id,
values: {
- title: t,
+ triggerTitle: t,
},
});
refresh();
@@ -298,7 +297,7 @@ export const TriggerConfig = () => {
properties: fieldset,
},
actions: {
- ...(executed
+ ...(workflow.executed
? {}
: {
type: 'void',
diff --git a/packages/plugins/@nocobase/plugin-workflow/src/server/Plugin.ts b/packages/plugins/@nocobase/plugin-workflow/src/server/Plugin.ts
index 2b1bd099bf..91d338bb94 100644
--- a/packages/plugins/@nocobase/plugin-workflow/src/server/Plugin.ts
+++ b/packages/plugins/@nocobase/plugin-workflow/src/server/Plugin.ts
@@ -30,7 +30,7 @@ type Pending = [ExecutionModel, JobModel?];
type CachedEvent = [WorkflowModel, any, { context?: any }];
-export default class WorkflowPlugin extends Plugin {
+export default class PluginWorkflowServer extends Plugin {
instructions: Registry = new Registry();
triggers: Registry = new Registry();
functions: Registry = new Registry();
diff --git a/packages/plugins/@nocobase/plugin-workflow/src/server/actions/workflows.ts b/packages/plugins/@nocobase/plugin-workflow/src/server/actions/workflows.ts
index c8a45f8312..e5edb10293 100644
--- a/packages/plugins/@nocobase/plugin-workflow/src/server/actions/workflows.ts
+++ b/packages/plugins/@nocobase/plugin-workflow/src/server/actions/workflows.ts
@@ -7,7 +7,7 @@ export async function update(context: Context, next) {
const repository = utils.getRepositoryFromParams(context) as Repository;
const { filterByTk, values } = context.action.params;
context.action.mergeParams({
- whitelist: ['title', 'description', 'enabled', 'config', 'options'],
+ whitelist: ['title', 'description', 'enabled', 'triggerTitle', 'config', 'options'],
});
// only enable/disable
if (Object.keys(values).includes('config')) {
diff --git a/packages/plugins/@nocobase/plugin-workflow/src/server/collections/workflows.ts b/packages/plugins/@nocobase/plugin-workflow/src/server/collections/workflows.ts
index ab743448a7..5c9aff72bb 100644
--- a/packages/plugins/@nocobase/plugin-workflow/src/server/collections/workflows.ts
+++ b/packages/plugins/@nocobase/plugin-workflow/src/server/collections/workflows.ts
@@ -30,7 +30,11 @@ export default function () {
required: true,
},
{
- type: 'json',
+ type: 'string',
+ name: 'triggerTitle',
+ },
+ {
+ type: 'jsonb',
name: 'config',
required: true,
defaultValue: {},