Merge pull request 'feat: 添加自定义组件文本类型' (#432) from fix_filterCustom into @hera/dev
Reviewed-on: daoyoucloud/tachycode#432 Reviewed-by: sealday <zhanglin@daoyoucloud.com>
This commit is contained in:
commit
486b51f2aa
@ -34,15 +34,22 @@ export const SchemaSettingsRemove: FC<SchemaSettingsRemoveProps> = (props) => {
|
|||||||
removeParentsIfNoChildren,
|
removeParentsIfNoChildren,
|
||||||
breakRemoveOn,
|
breakRemoveOn,
|
||||||
};
|
};
|
||||||
|
const name = fieldSchema.name as string;
|
||||||
|
const fieldName = name.split('.')[1];
|
||||||
|
const title = fieldSchema.title;
|
||||||
if (field?.required) {
|
if (field?.required) {
|
||||||
field.required = false;
|
field.required = false;
|
||||||
fieldSchema['required'] = false;
|
fieldSchema['required'] = false;
|
||||||
}
|
}
|
||||||
await dn.remove(null, options);
|
await dn.remove(null, options);
|
||||||
await confirm?.onOk?.();
|
await confirm?.onOk?.();
|
||||||
delete form.values['custom'][fieldSchema['collectionName']];
|
if (fieldSchema['x-component'] === 'Select' || fieldSchema['x-component'] === 'AutoComplete') {
|
||||||
const name = fieldSchema.name as string;
|
delete form.values['custom'][fieldSchema['collectionName']];
|
||||||
const title = fieldSchema.title;
|
} else {
|
||||||
|
if (form.values['custom']?.[fieldName]) {
|
||||||
|
delete form.values['custom'][fieldName];
|
||||||
|
}
|
||||||
|
}
|
||||||
for (const key in form.fields) {
|
for (const key in form.fields) {
|
||||||
if (key.includes(name) && form.fields[key].title === title) {
|
if (key.includes(name) && form.fields[key].title === title) {
|
||||||
delete form.fields[key];
|
delete form.fields[key];
|
||||||
|
@ -29,7 +29,7 @@ import React, { memo, useCallback, useContext, useMemo } from 'react';
|
|||||||
import { Schema, SchemaOptionsContext, observer, useField, useFieldSchema } from '@formily/react';
|
import { Schema, SchemaOptionsContext, observer, useField, useFieldSchema } from '@formily/react';
|
||||||
import { FormLayout } from '@formily/antd-v5';
|
import { FormLayout } from '@formily/antd-v5';
|
||||||
import { uid } from '@formily/shared';
|
import { uid } from '@formily/shared';
|
||||||
import { Field } from '@formily/core';
|
import { Field, onFieldValueChange } from '@formily/core';
|
||||||
import {
|
import {
|
||||||
EditFormulaTitleField,
|
EditFormulaTitleField,
|
||||||
EditTitle,
|
EditTitle,
|
||||||
@ -65,9 +65,11 @@ export const FilterCustomItemInitializer: React.FC<{
|
|||||||
const itemConfig = useSchemaInitializerItem();
|
const itemConfig = useSchemaInitializerItem();
|
||||||
const { getInterface } = useCollectionManager_deprecated();
|
const { getInterface } = useCollectionManager_deprecated();
|
||||||
const { collections } = useCollectionManager_deprecated();
|
const { collections } = useCollectionManager_deprecated();
|
||||||
collections.forEach((value) => {
|
const allCollection = collections.map((value) => {
|
||||||
value['label'] = value.name;
|
return {
|
||||||
value['value'] = value.name;
|
label: value.title,
|
||||||
|
value: value.name,
|
||||||
|
};
|
||||||
});
|
});
|
||||||
const { options: fieldComponents, values: fieldComponentValues } = useFieldComponents();
|
const { options: fieldComponents, values: fieldComponentValues } = useFieldComponents();
|
||||||
const api = useAPIClient();
|
const api = useAPIClient();
|
||||||
@ -105,9 +107,9 @@ export const FilterCustomItemInitializer: React.FC<{
|
|||||||
title: t('Field collection'),
|
title: t('Field collection'),
|
||||||
'x-decorator': 'FormItem',
|
'x-decorator': 'FormItem',
|
||||||
'x-component': 'Select',
|
'x-component': 'Select',
|
||||||
enum: collections,
|
enum: allCollection,
|
||||||
description: t('Select a collection field to use metadata of the field'),
|
description: t('Select a collection field to use metadata of the field'),
|
||||||
required: true,
|
'x-visible': false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}}
|
}}
|
||||||
@ -121,16 +123,35 @@ export const FilterCustomItemInitializer: React.FC<{
|
|||||||
values: {
|
values: {
|
||||||
name: `f_${uid()}`,
|
name: `f_${uid()}`,
|
||||||
},
|
},
|
||||||
|
effects() {
|
||||||
|
onFieldValueChange('component', (field) => {
|
||||||
|
const name = field.value;
|
||||||
|
const component = field.query('.collection').take() as Field;
|
||||||
|
if (name === 'Select' || name === 'AutoComplete') {
|
||||||
|
component.setDisplay('visible');
|
||||||
|
component.setRequired(true);
|
||||||
|
} else {
|
||||||
|
component.setDisplay('none');
|
||||||
|
component.setRequired(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
});
|
});
|
||||||
const { name, title, component, collection } = values;
|
const { title, component, collection } = values;
|
||||||
const defaultSchema = getInterface(component)?.default?.uiSchema || {};
|
const defaultSchema = getInterface(component)?.default?.uiSchema || {};
|
||||||
|
let name;
|
||||||
|
if (component === 'Select' || component === 'AutoComplete') {
|
||||||
|
name = collection;
|
||||||
|
} else {
|
||||||
|
name = component + uid();
|
||||||
|
}
|
||||||
insert(
|
insert(
|
||||||
gridRowColWrap({
|
gridRowColWrap({
|
||||||
'x-component': component,
|
'x-component': component,
|
||||||
...defaultSchema,
|
...defaultSchema,
|
||||||
type: 'string',
|
type: 'string',
|
||||||
title: title,
|
title: title,
|
||||||
name: 'custom.' + collection,
|
name: 'custom.' + name,
|
||||||
required: false,
|
required: false,
|
||||||
'x-designer': 'FilterItemCustomDesigner',
|
'x-designer': 'FilterItemCustomDesigner',
|
||||||
'x-decorator': 'FilterFormItem',
|
'x-decorator': 'FilterFormItem',
|
||||||
@ -165,33 +186,36 @@ export const FilterItemCustomDesigner: React.FC = () => {
|
|||||||
const { form } = useFormBlockContext();
|
const { form } = useFormBlockContext();
|
||||||
const field = useField();
|
const field = useField();
|
||||||
const { dn } = useDesignable();
|
const { dn } = useDesignable();
|
||||||
|
const component = fieldSchema['x-component'];
|
||||||
return (
|
return (
|
||||||
<GeneralSchemaDesigner>
|
<GeneralSchemaDesigner>
|
||||||
<EditTitle />
|
<EditTitle />
|
||||||
<EditDescription />
|
<EditDescription />
|
||||||
<EditDefaultValue />
|
<EditDefaultValue />
|
||||||
<SchemaSettingsDataScope
|
{component !== 'Input' ? (
|
||||||
collectionName={name}
|
<SchemaSettingsDataScope
|
||||||
defaultFilter={fieldSchema?.['x-component-props']?.params?.filter || {}}
|
collectionName={name}
|
||||||
form={form}
|
defaultFilter={fieldSchema?.['x-component-props']?.params?.filter || {}}
|
||||||
onSubmit={({ filter }) => {
|
form={form}
|
||||||
_.set(field.componentProps, 'params', {
|
onSubmit={({ filter }) => {
|
||||||
...field.componentProps?.params,
|
_.set(field.componentProps, 'params', {
|
||||||
filter,
|
...field.componentProps?.params,
|
||||||
});
|
filter,
|
||||||
fieldSchema['x-component-props']['params'] = field.componentProps.params;
|
});
|
||||||
dn.emit('patch', {
|
fieldSchema['x-component-props']['params'] = field.componentProps.params;
|
||||||
schema: {
|
dn.emit('patch', {
|
||||||
['x-uid']: fieldSchema['x-uid'],
|
schema: {
|
||||||
'x-component-props': fieldSchema['x-component-props'],
|
['x-uid']: fieldSchema['x-uid'],
|
||||||
},
|
'x-component-props': fieldSchema['x-component-props'],
|
||||||
});
|
},
|
||||||
}}
|
});
|
||||||
/>
|
}}
|
||||||
<SchemaSettingCollection />
|
/>
|
||||||
<SchemaSettingComponent />
|
) : null}
|
||||||
<EditTitleField />
|
{component !== 'Input' ? <SchemaSettingCollection /> : null}
|
||||||
<EditFormulaTitleField />
|
{component !== 'Input' ? <SchemaSettingComponent /> : null}
|
||||||
|
{component !== 'Input' ? <EditTitleField /> : null}
|
||||||
|
{component !== 'Input' ? <EditFormulaTitleField /> : null}
|
||||||
<SchemaSettingsDivider />
|
<SchemaSettingsDivider />
|
||||||
<SchemaSettingsRemove
|
<SchemaSettingsRemove
|
||||||
key="remove"
|
key="remove"
|
||||||
|
@ -530,7 +530,7 @@ export const SchemaSettingCollection = () => {
|
|||||||
const collections = useCollectionManager();
|
const collections = useCollectionManager();
|
||||||
const options = collections?.dataSource['options']?.collections.map((value) => {
|
const options = collections?.dataSource['options']?.collections.map((value) => {
|
||||||
return {
|
return {
|
||||||
label: value.name,
|
label: value.title,
|
||||||
value: value.name,
|
value: value.name,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user