feat(plugin-workflow): add modal to edit title when duplicating workflow (#2399)
This commit is contained in:
parent
8615804b6f
commit
d693aad89b
@ -59,10 +59,6 @@ export const ActionModal: ComposedActionDrawer<ModalProps> = observer(
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
width: 100%;
|
||||
|
||||
.ant-btn {
|
||||
margin-right: 8px;
|
||||
}
|
||||
`}
|
||||
>
|
||||
<RecursionField
|
||||
|
@ -3,9 +3,8 @@ import {
|
||||
PluginManagerContext,
|
||||
SchemaComponent,
|
||||
SettingsCenterProvider,
|
||||
useResourceContext,
|
||||
} from '@nocobase/client';
|
||||
import { Card, message } from 'antd';
|
||||
import { Card } from 'antd';
|
||||
import React, { useContext } from 'react';
|
||||
import { ExecutionLink } from './ExecutionLink';
|
||||
import { ExecutionResourceProvider } from './ExecutionResourceProvider';
|
||||
@ -16,7 +15,6 @@ import { lang } from './locale';
|
||||
import { instructions } from './nodes';
|
||||
import { workflowSchema } from './schemas/workflows';
|
||||
import { triggers } from './triggers';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
// registerField(expressionField.group, 'expression', expressionField);
|
||||
|
||||
@ -26,25 +24,11 @@ export function useWorkflowContext() {
|
||||
return useContext(WorkflowContext);
|
||||
}
|
||||
|
||||
function useWorkflowReloadAction() {
|
||||
const { t } = useTranslation();
|
||||
const { resource } = useResourceContext();
|
||||
return {
|
||||
async run() {
|
||||
await resource.reload();
|
||||
message.success(t('Operation succeeded'));
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
function WorkflowPane() {
|
||||
return (
|
||||
<Card bordered={false}>
|
||||
<SchemaComponent
|
||||
schema={workflowSchema}
|
||||
scope={{
|
||||
useWorkflowReloadAction,
|
||||
}}
|
||||
components={{
|
||||
WorkflowLink,
|
||||
ExecutionResourceProvider,
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { ISchema } from '@formily/react';
|
||||
import { ISchema, useForm } from '@formily/react';
|
||||
import { message } from 'antd';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { useRecord, useResourceActionContext, useResourceContext } from '@nocobase/client';
|
||||
import { useActionContext, useRecord, useResourceActionContext, useResourceContext } from '@nocobase/client';
|
||||
import { NAMESPACE } from '../locale';
|
||||
import { triggers } from '../triggers';
|
||||
import { executionSchema } from './executions';
|
||||
@ -174,7 +174,16 @@ export const workflowSchema: ISchema = {
|
||||
title: `{{t("Reload", { ns: "${NAMESPACE}" })}}`,
|
||||
'x-component': 'Action',
|
||||
'x-component-props': {
|
||||
useAction: '{{ useWorkflowReloadAction }}',
|
||||
useAction() {
|
||||
const { t } = useTranslation();
|
||||
const { resource } = useResourceContext();
|
||||
return {
|
||||
async run() {
|
||||
await resource.reload();
|
||||
message.success(t('Operation succeeded'));
|
||||
},
|
||||
};
|
||||
},
|
||||
},
|
||||
},
|
||||
delete: {
|
||||
@ -333,18 +342,60 @@ export const workflowSchema: ISchema = {
|
||||
title: `{{t("Duplicate", { ns: "${NAMESPACE}" })}}`,
|
||||
'x-component': 'Action.Link',
|
||||
'x-component-props': {
|
||||
useAction() {
|
||||
const { t } = useTranslation();
|
||||
const { refresh } = useResourceActionContext();
|
||||
const { resource, targetKey } = useResourceContext();
|
||||
const { [targetKey]: filterByTk } = useRecord();
|
||||
return {
|
||||
async run() {
|
||||
await resource.revision({ filterByTk });
|
||||
message.success(t('Operation succeeded'));
|
||||
refresh();
|
||||
openSize: 'small',
|
||||
},
|
||||
properties: {
|
||||
modal: {
|
||||
type: 'void',
|
||||
title: `{{t("Duplicate to new workflow", { ns: "${NAMESPACE}" })}}`,
|
||||
'x-decorator': 'FormV2',
|
||||
'x-component': 'Action.Modal',
|
||||
properties: {
|
||||
title: {
|
||||
type: 'string',
|
||||
title: '{{t("Title")}}',
|
||||
'x-decorator': 'FormItem',
|
||||
'x-component': 'Input',
|
||||
},
|
||||
};
|
||||
footer: {
|
||||
type: 'void',
|
||||
'x-component': 'Action.Modal.Footer',
|
||||
properties: {
|
||||
submit: {
|
||||
type: 'void',
|
||||
title: '{{t("Submit")}}',
|
||||
'x-component': 'Action',
|
||||
'x-component-props': {
|
||||
type: 'primary',
|
||||
useAction() {
|
||||
const { t } = useTranslation();
|
||||
const { refresh } = useResourceActionContext();
|
||||
const { resource, targetKey } = useResourceContext();
|
||||
const { setVisible } = useActionContext();
|
||||
const { [targetKey]: filterByTk } = useRecord();
|
||||
const { values } = useForm();
|
||||
return {
|
||||
async run() {
|
||||
await resource.revision({ filterByTk, values });
|
||||
message.success(t('Operation succeeded'));
|
||||
refresh();
|
||||
setVisible(false);
|
||||
},
|
||||
};
|
||||
},
|
||||
},
|
||||
},
|
||||
cancel: {
|
||||
type: 'void',
|
||||
title: '{{t("Cancel")}}',
|
||||
'x-component': 'Action',
|
||||
'x-component-props': {
|
||||
useAction: '{{ cm.useCancelAction }}',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -10,6 +10,7 @@ export default {
|
||||
Version: '版本',
|
||||
'Copy to new version': '复制到新版本',
|
||||
Duplicate: '复制',
|
||||
'Duplicate to new workflow': '复制为新工作流',
|
||||
'Delete a main version will cause all other revisions to be deleted too.': '删除主版本将导致其他版本一并被删除。',
|
||||
Loading: '加载中',
|
||||
'Load failed': '加载失败',
|
||||
|
@ -98,7 +98,7 @@ function migrateConfig(config, oldToNew) {
|
||||
export async function revision(context: Context, next) {
|
||||
const { db } = context;
|
||||
const repository = utils.getRepositoryFromParams(context);
|
||||
const { filterByTk, filter = {} } = context.action.params;
|
||||
const { filterByTk, filter = {}, values = {} } = context.action.params;
|
||||
|
||||
context.body = await db.sequelize.transaction(async (transaction) => {
|
||||
const origin = await repository.findOne({
|
||||
@ -115,7 +115,7 @@ export async function revision(context: Context, next) {
|
||||
title: origin.title,
|
||||
allExecuted: origin.allExecuted,
|
||||
}
|
||||
: {};
|
||||
: values;
|
||||
|
||||
const instance = await repository.create({
|
||||
values: {
|
||||
|
Loading…
Reference in New Issue
Block a user