From 05078faf1a40e0bd49003edfe5f7da99e2e02678 Mon Sep 17 00:00:00 2001 From: Junyi Date: Sat, 6 Jan 2024 11:17:28 +0800 Subject: [PATCH] refactor(plugin-workflow): add trigger title for workflow which is different with title (#3333) --- .../src/client/components/DrawerForm.tsx | 47 +++++++++++++++++++ .../plugin-workflow/src/client/index.tsx | 2 +- .../src/client/triggers/index.tsx | 19 ++++---- .../plugin-workflow/src/server/Plugin.ts | 2 +- .../src/server/actions/workflows.ts | 2 +- .../src/server/collections/workflows.ts | 6 ++- 6 files changed, 64 insertions(+), 14 deletions(-) create mode 100644 packages/plugins/@nocobase/plugin-workflow/src/client/components/DrawerForm.tsx 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 000000000..a48c6f76f --- /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 4cfc061e0..227fb0134 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 f8be59584..e22f85b3c 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 2b1bd099b..91d338bb9 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 c8a45f831..e5edb1029 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 ab743448a..5c9aff72b 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: {},