refactor(plugin-workflow): refactor nodes variable option api (#2192)
This commit is contained in:
parent
6e0471bd46
commit
dc91d44ce6
@ -30,7 +30,6 @@ function AssociatedConfig({ value, onChange, ...props }): JSX.Element {
|
|||||||
const { setValuesIn } = useForm();
|
const { setValuesIn } = useForm();
|
||||||
const compile = useCompile();
|
const compile = useCompile();
|
||||||
const { getCollection } = useCollectionManager();
|
const { getCollection } = useCollectionManager();
|
||||||
const current = useNodeContext();
|
|
||||||
const options = [nodesOptions, triggerOptions].map((item) => {
|
const options = [nodesOptions, triggerOptions].map((item) => {
|
||||||
const children = item.useOptions({ types: [matchToManyField] })?.filter(Boolean);
|
const children = item.useOptions({ types: [matchToManyField] })?.filter(Boolean);
|
||||||
return {
|
return {
|
||||||
@ -300,16 +299,17 @@ export default {
|
|||||||
ValueBlock,
|
ValueBlock,
|
||||||
AssociatedConfig,
|
AssociatedConfig,
|
||||||
},
|
},
|
||||||
useVariables(current, { types }) {
|
useVariables({ id, title }, { types }) {
|
||||||
if (
|
if (
|
||||||
types &&
|
types &&
|
||||||
!types.some((type) => type in BaseTypeSets || Object.values(BaseTypeSets).some((set) => set.has(type)))
|
!types.some((type) => type in BaseTypeSets || Object.values(BaseTypeSets).some((set) => set.has(type)))
|
||||||
) {
|
) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return [
|
return {
|
||||||
// { key: '', value: '', label: lang('Calculation result') }
|
value: `${id}`,
|
||||||
];
|
label: title,
|
||||||
|
};
|
||||||
},
|
},
|
||||||
useInitializers(node): SchemaInitializerItemOptions | null {
|
useInitializers(node): SchemaInitializerItemOptions | null {
|
||||||
if (!node.config.collection) {
|
if (!node.config.collection) {
|
||||||
|
@ -18,15 +18,19 @@ function useDynamicExpressionCollectionFieldMatcher(field): boolean {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.getCollection(field.collectionName)?.template === 'expression') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
const fields = this.getCollectionFields(field.target);
|
const fields = this.getCollectionFields(field.target);
|
||||||
return fields.some((f) => f.interface === 'expression');
|
return fields.some((f) => f.interface === 'expression');
|
||||||
}
|
}
|
||||||
|
|
||||||
const DynamicConfig = ({ value, onChange }) => {
|
const DynamicConfig = ({ value, onChange }) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { getCollectionFields } = useCollectionManager();
|
const { getCollectionFields, getCollection } = useCollectionManager();
|
||||||
const scope = useWorkflowVariableOptions({
|
const scope = useWorkflowVariableOptions({
|
||||||
types: [useDynamicExpressionCollectionFieldMatcher.bind({ getCollectionFields })],
|
types: [useDynamicExpressionCollectionFieldMatcher.bind({ getCollectionFields, getCollection })],
|
||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -189,7 +193,7 @@ export default {
|
|||||||
RadioWithTooltip,
|
RadioWithTooltip,
|
||||||
DynamicConfig,
|
DynamicConfig,
|
||||||
},
|
},
|
||||||
useVariables(current, options) {
|
useVariables({ id, title }, options) {
|
||||||
const { types } = options ?? {};
|
const { types } = options ?? {};
|
||||||
if (
|
if (
|
||||||
types &&
|
types &&
|
||||||
@ -197,9 +201,10 @@ export default {
|
|||||||
) {
|
) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return [
|
return {
|
||||||
// { key: '', value: '', label: lang('Calculation result') }
|
value: id,
|
||||||
];
|
label: title,
|
||||||
|
};
|
||||||
},
|
},
|
||||||
useInitializers(node): SchemaInitializerItemOptions {
|
useInitializers(node): SchemaInitializerItemOptions {
|
||||||
return {
|
return {
|
||||||
|
@ -40,22 +40,34 @@ export default {
|
|||||||
CollectionFieldset,
|
CollectionFieldset,
|
||||||
FieldsSelect,
|
FieldsSelect,
|
||||||
},
|
},
|
||||||
useVariables({ config }, options) {
|
useVariables({ id, title, config }, options) {
|
||||||
const compile = useCompile();
|
const compile = useCompile();
|
||||||
const { getCollectionFields } = useCollectionManager();
|
const { getCollectionFields } = useCollectionManager();
|
||||||
// const depth = config?.params?.appends?.length
|
// const depth = config?.params?.appends?.length
|
||||||
// ? config?.params?.appends.reduce((max, item) => Math.max(max, item.split('.').length), 1)
|
// ? config?.params?.appends.reduce((max, item) => Math.max(max, item.split('.').length), 1)
|
||||||
// : 0;
|
// : 0;
|
||||||
const result = getCollectionFieldOptions({
|
const name = `${id}`;
|
||||||
collection: config.collection,
|
const [result] = getCollectionFieldOptions({
|
||||||
|
// collection: config.collection,
|
||||||
...options,
|
...options,
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
collectionName: config.collection,
|
||||||
|
name,
|
||||||
|
type: 'hasOne',
|
||||||
|
target: config.collection,
|
||||||
|
uiSchema: {
|
||||||
|
title,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
// depth: options?.depth ?? depth,
|
// depth: options?.depth ?? depth,
|
||||||
appends: config.params?.appends,
|
appends: [name, ...(config.params?.appends?.map((item) => `${name}.${item}`) || [])],
|
||||||
compile,
|
compile,
|
||||||
getCollectionFields,
|
getCollectionFields,
|
||||||
});
|
});
|
||||||
|
|
||||||
return result?.length ? result : null;
|
return result;
|
||||||
},
|
},
|
||||||
useInitializers(node): SchemaInitializerItemOptions | null {
|
useInitializers(node): SchemaInitializerItemOptions | null {
|
||||||
if (!node.config.collection) {
|
if (!node.config.collection) {
|
||||||
|
@ -38,7 +38,7 @@ import aggregate from './aggregate';
|
|||||||
import { JobStatusOptionsMap } from '../constants';
|
import { JobStatusOptionsMap } from '../constants';
|
||||||
import { NAMESPACE, lang } from '../locale';
|
import { NAMESPACE, lang } from '../locale';
|
||||||
import request from './request';
|
import request from './request';
|
||||||
import { VariableOptions } from '../variable';
|
import { VariableOption, VariableOptions } from '../variable';
|
||||||
import { NodeDescription } from '../components/NodeDescription';
|
import { NodeDescription } from '../components/NodeDescription';
|
||||||
|
|
||||||
export interface Instruction {
|
export interface Instruction {
|
||||||
@ -53,7 +53,7 @@ export interface Instruction {
|
|||||||
components?: { [key: string]: any };
|
components?: { [key: string]: any };
|
||||||
component?(props): JSX.Element;
|
component?(props): JSX.Element;
|
||||||
endding?: boolean;
|
endding?: boolean;
|
||||||
useVariables?(node, options?): VariableOptions;
|
useVariables?(node, options?): VariableOption;
|
||||||
useScopeVariables?(node, options?): VariableOptions;
|
useScopeVariables?(node, options?): VariableOptions;
|
||||||
useInitializers?(node): SchemaInitializerItemOptions | null;
|
useInitializers?(node): SchemaInitializerItemOptions | null;
|
||||||
initializers?: { [key: string]: any };
|
initializers?: { [key: string]: any };
|
||||||
|
@ -85,7 +85,7 @@ export default {
|
|||||||
ModeConfig,
|
ModeConfig,
|
||||||
AssigneesSelect,
|
AssigneesSelect,
|
||||||
},
|
},
|
||||||
useVariables({ config }, { types }) {
|
useVariables({ id, title, config }, { types }) {
|
||||||
const compile = useCompile();
|
const compile = useCompile();
|
||||||
const { getCollectionFields } = useCollectionManager();
|
const { getCollectionFields } = useCollectionManager();
|
||||||
const formKeys = Object.keys(config.forms ?? {});
|
const formKeys = Object.keys(config.forms ?? {});
|
||||||
@ -97,27 +97,33 @@ export default {
|
|||||||
.map((formKey) => {
|
.map((formKey) => {
|
||||||
const form = config.forms[formKey];
|
const form = config.forms[formKey];
|
||||||
|
|
||||||
// eslint-disable-next-line react-hooks/rules-of-hooks
|
const fieldsOptions = getCollectionFieldOptions({
|
||||||
const options = getCollectionFieldOptions({
|
|
||||||
fields: form.collection?.fields,
|
fields: form.collection?.fields,
|
||||||
collection: form.collection,
|
collection: form.collection,
|
||||||
types,
|
types,
|
||||||
compile,
|
compile,
|
||||||
getCollectionFields,
|
getCollectionFields,
|
||||||
});
|
});
|
||||||
return options.length
|
const label = compile(form.title) || formKey;
|
||||||
|
return fieldsOptions.length
|
||||||
? {
|
? {
|
||||||
key: formKey,
|
key: formKey,
|
||||||
value: formKey,
|
value: formKey,
|
||||||
label: form.title || formKey,
|
label,
|
||||||
title: form.title || formKey,
|
title: label,
|
||||||
children: options,
|
children: fieldsOptions,
|
||||||
}
|
}
|
||||||
: null;
|
: null;
|
||||||
})
|
})
|
||||||
.filter(Boolean);
|
.filter(Boolean);
|
||||||
|
|
||||||
return options.length ? options : null;
|
return options.length
|
||||||
|
? {
|
||||||
|
value: `${id}`,
|
||||||
|
label: title,
|
||||||
|
children: options,
|
||||||
|
}
|
||||||
|
: null;
|
||||||
},
|
},
|
||||||
useInitializers(node): SchemaInitializerItemOptions | null {
|
useInitializers(node): SchemaInitializerItemOptions | null {
|
||||||
const { getCollection } = useCollectionManager();
|
const { getCollection } = useCollectionManager();
|
||||||
|
@ -43,22 +43,34 @@ export default {
|
|||||||
FilterDynamicComponent,
|
FilterDynamicComponent,
|
||||||
FieldsSelect,
|
FieldsSelect,
|
||||||
},
|
},
|
||||||
useVariables({ config }, options) {
|
useVariables({ id, title, config }, options) {
|
||||||
const compile = useCompile();
|
const compile = useCompile();
|
||||||
const { getCollectionFields } = useCollectionManager();
|
const { getCollectionFields } = useCollectionManager();
|
||||||
// const depth = config?.params?.appends?.length
|
// const depth = config?.params?.appends?.length
|
||||||
// ? config?.params?.appends.reduce((max, item) => Math.max(max, item.split('.').length), 1)
|
// ? config?.params?.appends.reduce((max, item) => Math.max(max, item.split('.').length), 1)
|
||||||
// : 0;
|
// : 0;
|
||||||
const result = getCollectionFieldOptions({
|
const name = `${id}`;
|
||||||
collection: config.collection,
|
const [result] = getCollectionFieldOptions({
|
||||||
|
// collection: config.collection,
|
||||||
...options,
|
...options,
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
collectionName: config.collection,
|
||||||
|
name,
|
||||||
|
type: 'hasOne',
|
||||||
|
target: config.collection,
|
||||||
|
uiSchema: {
|
||||||
|
title,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
// depth: options?.depth ?? depth,
|
// depth: options?.depth ?? depth,
|
||||||
appends: config.params?.appends,
|
appends: [name, ...(config.params?.appends?.map((item) => `${name}.${item}`) || [])],
|
||||||
compile,
|
compile,
|
||||||
getCollectionFields,
|
getCollectionFields,
|
||||||
});
|
});
|
||||||
|
|
||||||
return result?.length ? result : null;
|
return result;
|
||||||
},
|
},
|
||||||
useInitializers(node): SchemaInitializerItemOptions | null {
|
useInitializers(node): SchemaInitializerItemOptions | null {
|
||||||
if (!node.config.collection || node.config.multiple) {
|
if (!node.config.collection || node.config.multiple) {
|
||||||
|
@ -22,14 +22,9 @@ export const nodesOptions = {
|
|||||||
const result: VariableOption[] = [];
|
const result: VariableOption[] = [];
|
||||||
upstreams.forEach((node) => {
|
upstreams.forEach((node) => {
|
||||||
const instruction = instructions.get(node.type);
|
const instruction = instructions.get(node.type);
|
||||||
const subOptions = instruction.useVariables?.(node, options);
|
const subOption = instruction.useVariables?.(node, options);
|
||||||
if (subOptions) {
|
if (subOption) {
|
||||||
result.push({
|
result.push(subOption);
|
||||||
key: node.id.toString(),
|
|
||||||
value: node.id.toString(),
|
|
||||||
label: node.title ?? `#${node.id}`,
|
|
||||||
children: subOptions,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return result;
|
return result;
|
||||||
|
Loading…
Reference in New Issue
Block a user