refactor(plugin-workflow): add property to determine workflow type triggerable on ui (#2890)
This commit is contained in:
		
							parent
							
								
									cde25ed871
								
							
						
					
					
						commit
						5fad821eab
					
				| @ -1,5 +1,5 @@ | ||||
| import { ArrayTable } from '@formily/antd-v5'; | ||||
| import { onFieldValueChange, onFieldInputValueChange } from '@formily/core'; | ||||
| import { onFieldValueChange, onFieldInputValueChange, onFieldInit } from '@formily/core'; | ||||
| import { connect, ISchema, mapProps, useField, useFieldSchema, useForm, useFormEffects } from '@formily/react'; | ||||
| import { isValid, uid } from '@formily/shared'; | ||||
| import { Alert, Tree as AntdTree, ModalProps } from 'antd'; | ||||
| @ -17,6 +17,7 @@ import { useSyncFromForm } from '../../../schema-settings/DataTemplates/utils'; | ||||
| import { DefaultValueProvider } from '../../../schema-settings/hooks/useIsAllowToSetDefaultValue'; | ||||
| import { useLinkageAction } from './hooks'; | ||||
| import { requestSettingsSchema } from './utils'; | ||||
| import { usePlugin } from '../../../application/hooks'; | ||||
| 
 | ||||
| const Tree = connect( | ||||
|   AntdTree, | ||||
| @ -713,7 +714,7 @@ function RemoveButton( | ||||
|   ); | ||||
| } | ||||
| 
 | ||||
| function FormWorkflowSelect(props) { | ||||
| function WorkflowSelect({ types, ...props }) { | ||||
|   const index = ArrayTable.useIndex(); | ||||
|   const { setValuesIn } = useForm(); | ||||
|   const baseCollection = useCollection(); | ||||
| @ -745,7 +746,7 @@ function FormWorkflowSelect(props) { | ||||
|         action: 'list', | ||||
|         params: { | ||||
|           filter: { | ||||
|             type: 'form', | ||||
|             type: types, | ||||
|             enabled: true, | ||||
|             'config.collection': workflowCollection, | ||||
|           }, | ||||
| @ -760,6 +761,8 @@ function WorkflowConfig() { | ||||
|   const { t } = useTranslation(); | ||||
|   const fieldSchema = useFieldSchema(); | ||||
|   const { name: collection } = useCollection(); | ||||
|   const workflowPlugin = usePlugin('workflow') as any; | ||||
|   const workflowTypes = workflowPlugin.getTriggersOptions().filter((item) => item.options.actionTriggerable); | ||||
|   const description = { | ||||
|     submit: t('Workflow will be triggered after submitting succeeded.', { ns: 'workflow' }), | ||||
|     'customize:save': t('Workflow will be triggered after saving succeeded.', { ns: 'workflow' }), | ||||
| @ -777,7 +780,7 @@ function WorkflowConfig() { | ||||
|       components={{ | ||||
|         Alert, | ||||
|         ArrayTable, | ||||
|         FormWorkflowSelect, | ||||
|         WorkflowSelect, | ||||
|       }} | ||||
|       schema={ | ||||
|         { | ||||
| @ -838,13 +841,14 @@ function WorkflowConfig() { | ||||
|                       workflowKey: { | ||||
|                         type: 'number', | ||||
|                         'x-decorator': 'FormItem', | ||||
|                         'x-component': 'FormWorkflowSelect', | ||||
|                         'x-component': 'WorkflowSelect', | ||||
|                         'x-component-props': { | ||||
|                           placeholder: t('Select workflow', { ns: 'workflow' }), | ||||
|                           fieldNames: { | ||||
|                             label: 'title', | ||||
|                             value: 'key', | ||||
|                           }, | ||||
|                           types: workflowTypes.map((item) => item.value), | ||||
|                         }, | ||||
|                         required: true, | ||||
|                       }, | ||||
| @ -859,7 +863,6 @@ function WorkflowConfig() { | ||||
|                     properties: { | ||||
|                       remove: { | ||||
|                         type: 'void', | ||||
|                         'x-decorator': 'FormItem', | ||||
|                         'x-component': 'ArrayTable.Remove', | ||||
|                       }, | ||||
|                     }, | ||||
|  | ||||
| @ -11,11 +11,17 @@ import { ExecutionPage } from './ExecutionPage'; | ||||
| import { WorkflowPage } from './WorkflowPage'; | ||||
| import { WorkflowProvider } from './WorkflowProvider'; | ||||
| import { DynamicExpression } from './components/DynamicExpression'; | ||||
| import { triggers, useTrigger, getTriggersOptions } from './triggers'; | ||||
| import { instructions } from './nodes'; | ||||
| import { WorkflowTodo } from './nodes/manual/WorkflowTodo'; | ||||
| import { WorkflowTodoBlockInitializer } from './nodes/manual/WorkflowTodoBlockInitializer'; | ||||
| import { useTriggerWorkflowsActionProps } from './triggers/form'; | ||||
| 
 | ||||
| export class WorkflowPlugin extends Plugin { | ||||
|   triggers = triggers; | ||||
|   getTriggersOptions = getTriggersOptions; | ||||
|   instructions = instructions; | ||||
| 
 | ||||
|   async load() { | ||||
|     this.addRoutes(); | ||||
|     this.addScopes(); | ||||
|  | ||||
| @ -101,6 +101,7 @@ export default { | ||||
|     }; | ||||
|   }, | ||||
|   initializers: {}, | ||||
|   actionTriggerable: true, | ||||
| }; | ||||
| 
 | ||||
| function getFormValues({ | ||||
|  | ||||
| @ -61,6 +61,7 @@ export interface Trigger { | ||||
|   components?: { [key: string]: any }; | ||||
|   useInitializers?(config): SchemaInitializerItemOptions | null; | ||||
|   initializers?: any; | ||||
|   actionTriggerable?: boolean; | ||||
| } | ||||
| 
 | ||||
| export const triggers = new Registry<Trigger>(); | ||||
| @ -311,9 +312,10 @@ export function useTrigger() { | ||||
| } | ||||
| 
 | ||||
| export function getTriggersOptions() { | ||||
|   return Array.from(triggers.getEntities()).map(([value, { title }]) => ({ | ||||
|   return Array.from(triggers.getEntities()).map(([value, { title, ...options }]) => ({ | ||||
|     value, | ||||
|     label: title, | ||||
|     color: 'gold', | ||||
|     options, | ||||
|   })); | ||||
| } | ||||
|  | ||||
| @ -196,3 +196,7 @@ export async function sync(context: Context, next) { | ||||
| 
 | ||||
|   await next(); | ||||
| } | ||||
| 
 | ||||
| export async function trigger(context: Context, next) { | ||||
|   return next(); | ||||
| } | ||||
|  | ||||
| @ -1,3 +1,4 @@ | ||||
| export * from './utils'; | ||||
| export * from './constants'; | ||||
| export type * from './instructions'; | ||||
| export { Trigger } from './triggers'; | ||||
|  | ||||
| @ -12,12 +12,9 @@ export default class FormTrigger extends Trigger { | ||||
|     super(plugin); | ||||
| 
 | ||||
|     plugin.app.resourcer.use(this.middleware); | ||||
|     plugin.app.actions({ | ||||
|       ['workflows:trigger']: this.triggerAction, | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   triggerAction = async (context, next) => { | ||||
|   async triggerAction(context, next) { | ||||
|     const { triggerWorkflows } = context.action.params; | ||||
| 
 | ||||
|     if (!triggerWorkflows) { | ||||
| @ -28,21 +25,26 @@ export default class FormTrigger extends Trigger { | ||||
|     await next(); | ||||
| 
 | ||||
|     this.trigger(context); | ||||
|   }; | ||||
|   } | ||||
| 
 | ||||
|   middleware = async (context, next) => { | ||||
|     await next(); | ||||
| 
 | ||||
|     const { | ||||
|       resourceName, | ||||
|       actionName, | ||||
|       params: { triggerWorkflows }, | ||||
|     } = context.action; | ||||
| 
 | ||||
|     if (resourceName === 'workflows' && actionName === 'trigger') { | ||||
|       return this.triggerAction(context, next); | ||||
|     } | ||||
| 
 | ||||
|     await next(); | ||||
| 
 | ||||
|     if (!triggerWorkflows) { | ||||
|       return; | ||||
|     } | ||||
| 
 | ||||
|     if ((resourceName === 'workflows' && actionName === 'trigger') || !['create', 'update'].includes(actionName)) { | ||||
|     if (!['create', 'update'].includes(actionName)) { | ||||
|       return; | ||||
|     } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user