refactor: enable child collection support current object (#2188)
* refactor: enable child collection support current object * refactor: locale improve
This commit is contained in:
parent
c9b726916c
commit
566668daa1
@ -706,5 +706,5 @@ export default {
|
||||
"Create":"Create",
|
||||
"Current form": "Current form",
|
||||
"Current object":"Current object",
|
||||
"Linkage form form data":"Linkage form form data",
|
||||
"Linkage with form fields":"Linkage with form fields",
|
||||
};
|
||||
|
@ -617,5 +617,5 @@ export default {
|
||||
"Create":"新規のみ" ,
|
||||
"Current form":"現在のフォーム",
|
||||
"Current object":"現在のオブジェクト",
|
||||
"Linkage form form data":"フォームデータから連動",
|
||||
"Linkage with form fields":"フォームデータから連動",
|
||||
}
|
||||
|
@ -790,5 +790,5 @@ export default {
|
||||
"File manager": "文件管理器",
|
||||
"Direct duplicate": "直接复制",
|
||||
"Copy into the form and continue to fill in": "复制到表单并继续填写",
|
||||
"Linkage form form data":"从表单数据里联动",
|
||||
"Linkage with form fields":"从表单字段联动",
|
||||
}
|
||||
|
@ -121,9 +121,18 @@ export const CreateRecordAction = observer(
|
||||
{ displayName: 'CreateRecordAction' },
|
||||
);
|
||||
|
||||
function getLinkageCollection(str, form) {
|
||||
const data = parseVariables(str, { $form: form.values });
|
||||
return data;
|
||||
function getLinkageCollection(str, form, field) {
|
||||
const variablesCtx = { $form: form.values, $iteration: form.values };
|
||||
if (str.includes('$iteration')) {
|
||||
const path = field.path.segments.concat([]);
|
||||
path.splice(-2);
|
||||
str = str.replace('$iteration.', `$iteration.${path.join('.')}.`);
|
||||
const data = parseVariables(str, variablesCtx);
|
||||
return data;
|
||||
} else {
|
||||
const data = parseVariables(str, { $form: form.values });
|
||||
return data;
|
||||
}
|
||||
}
|
||||
export const CreateAction = observer(
|
||||
(props: any) => {
|
||||
@ -222,7 +231,7 @@ export const CreateAction = observer(
|
||||
danger={componentType === 'danger'}
|
||||
icon={icon}
|
||||
onClick={(info) => {
|
||||
const collectionName = getLinkageCollection(linkageFromForm, form);
|
||||
const collectionName = getLinkageCollection(linkageFromForm, form, field);
|
||||
const targetCollection = inheritsCollections.find((v) => v.name === collectionName)
|
||||
? collectionName
|
||||
: collection.name;
|
||||
|
@ -4,15 +4,22 @@ import React, { useEffect, useMemo } from 'react';
|
||||
import { useCompile } from '../../schema-component';
|
||||
import { Variable } from '.././../schema-component';
|
||||
import { useFormVariable } from '../VariableInput/hooks/useFormVariable';
|
||||
import { useIterationVariable } from '../VariableInput/hooks/useIterationVariable';
|
||||
|
||||
export const ChildDynamicComponent = observer(
|
||||
(props: { collectionName: string; form: any; onChange; value; default }) => {
|
||||
const { form, collectionName, onChange, value } = props;
|
||||
const formVariabele = useFormVariable({ blockForm: form, rootCollection: collectionName });
|
||||
const compile = useCompile();
|
||||
const result = useMemo(() => [formVariabele].filter(Boolean), [formVariabele]);
|
||||
const scope = compile(result);
|
||||
(props: { rootCollection: string; form: any; onChange; value; default; collectionField }) => {
|
||||
const { form, rootCollection, onChange, value, collectionField } = props;
|
||||
const fieldSchema = useFieldSchema();
|
||||
const formVariabele = useFormVariable({ blockForm: form, rootCollection });
|
||||
const iterationVariabele = useIterationVariable({
|
||||
blockForm: form,
|
||||
collectionField,
|
||||
rootCollection,
|
||||
});
|
||||
|
||||
const compile = useCompile();
|
||||
const result = useMemo(() => [formVariabele, iterationVariabele].filter(Boolean), [formVariabele]);
|
||||
const scope = compile(result);
|
||||
useEffect(() => {
|
||||
onChange(fieldSchema.default);
|
||||
}, []);
|
||||
|
@ -47,6 +47,7 @@ import {
|
||||
SchemaComponentContext,
|
||||
SchemaComponentOptions,
|
||||
useAPIClient,
|
||||
useBlockRequestContext,
|
||||
useCollection,
|
||||
useCollectionManager,
|
||||
useCompile,
|
||||
@ -1180,6 +1181,7 @@ SchemaSettings.EnableChildCollections = function EnableChildCollectionsItem(prop
|
||||
const allowAddToCurrent = fieldSchema?.['x-allow-add-to-current'];
|
||||
const form = useForm();
|
||||
const { getCollectionJoinField } = useCollectionManager();
|
||||
const ctx = useBlockRequestContext();
|
||||
const collectionField = getCollectionJoinField(fieldSchema?.parent?.['x-collection-field']) || {};
|
||||
const isAssocationAdd = fieldSchema?.parent?.['x-component'] === 'CollectionField';
|
||||
return (
|
||||
@ -1212,13 +1214,14 @@ SchemaSettings.EnableChildCollections = function EnableChildCollectionsItem(prop
|
||||
},
|
||||
linkageFromForm: {
|
||||
type: 'string',
|
||||
title: "{{t('Linkage form form')}}",
|
||||
title: "{{t('Linkage with form fields')}}",
|
||||
'x-visible': '{{isAssocationAdd}}',
|
||||
'x-decorator': 'FormItem',
|
||||
'x-component': ChildDynamicComponent,
|
||||
'x-component-props': {
|
||||
collectionName: collectionField?.collectionName || collectionName,
|
||||
rootCollection: ctx.props.collection || ctx.props.resource,
|
||||
form,
|
||||
collectionField,
|
||||
},
|
||||
default: fieldSchema?.['x-component-props']?.['linkageFromForm'],
|
||||
},
|
||||
|
@ -59,7 +59,7 @@ export const useIterationVariable = ({
|
||||
blockForm?: any;
|
||||
collectionField: any;
|
||||
operator?: any;
|
||||
schema: any;
|
||||
schema?: any;
|
||||
level?: number;
|
||||
rootCollection?: string;
|
||||
}) => {
|
||||
|
Loading…
Reference in New Issue
Block a user