feat: detail block support linkage rule (#4221)

* feat: detail block support linkage rule

* fix: bug

* fix: bug

* test: e2e test
This commit is contained in:
katherinehhh 2024-05-07 09:45:28 +08:00 committed by GitHub
parent 0214bb915e
commit 2ec128c63f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 65 additions and 7 deletions

View File

@ -28,6 +28,7 @@ test.describe('multi data details block schema settings', () => {
},
supportedOptions: [
'Edit block title',
'Linkage rules',
'Set the data scope',
'Set default sorting rules',
'Save as template',

View File

@ -16,7 +16,11 @@ import { useFormBlockContext } from '../../../../block-provider';
import { useDetailsBlockContext } from '../../../../block-provider/DetailsBlockProvider';
import { useCollection_deprecated, useSortFields } from '../../../../collection-manager';
import { removeNullCondition, useDesignable } from '../../../../schema-component';
import { SchemaSettingsBlockTitleItem, SchemaSettingsTemplate } from '../../../../schema-settings';
import {
SchemaSettingsBlockTitleItem,
SchemaSettingsTemplate,
SchemaSettingsLinkageRules,
} from '../../../../schema-settings';
import { SchemaSettingsDataScope } from '../../../../schema-settings/SchemaSettingsDataScope';
import { setDataLoadingModeSettingsItem } from './setDataLoadingModeSettingsItem';
@ -25,6 +29,17 @@ const commonItems: SchemaSettingsItemType[] = [
name: 'title',
Component: SchemaSettingsBlockTitleItem,
},
{
name: 'linkageRules',
Component: SchemaSettingsLinkageRules,
useComponentProps() {
const { name } = useCollection_deprecated();
return {
collectionName: name,
readPretty: true,
};
},
},
{
name: 'dataScope',
Component: SchemaSettingsDataScope,

View File

@ -24,7 +24,7 @@ test.describe('single details block schema settings', () => {
await page.getByLabel('block-item-CardItem-general-form').hover();
await page.getByLabel('designer-schema-settings-CardItem-FormV2.ReadPrettyDesigner-general').hover();
},
supportedOptions: ['Edit block title', 'Save as block template', 'Delete'],
supportedOptions: ['Edit block title', 'Linkage rules', 'Save as block template', 'Delete'],
});
});
});

View File

@ -10,7 +10,11 @@
import { useFieldSchema } from '@formily/react';
import { SchemaSettings } from '../../../../application/schema-settings/SchemaSettings';
import { useCollection_deprecated } from '../../../../collection-manager';
import { SchemaSettingsBlockTitleItem, SchemaSettingsFormItemTemplate } from '../../../../schema-settings';
import {
SchemaSettingsBlockTitleItem,
SchemaSettingsFormItemTemplate,
SchemaSettingsLinkageRules,
} from '../../../../schema-settings';
import { SchemaSettingsItemType } from '../../../../application/schema-settings/types';
const commonItems: SchemaSettingsItemType[] = [
@ -18,6 +22,17 @@ const commonItems: SchemaSettingsItemType[] = [
name: 'title',
Component: SchemaSettingsBlockTitleItem,
},
{
name: 'linkageRules',
Component: SchemaSettingsLinkageRules,
useComponentProps() {
const { name } = useCollection_deprecated();
return {
collectionName: name,
readPretty: true,
};
},
},
{
name: 'formItemTemplate',
Component: SchemaSettingsFormItemTemplate,

View File

@ -107,6 +107,17 @@ export const readPrettyFormSettings = new SchemaSettings({
name: 'title',
Component: SchemaSettingsBlockTitleItem,
},
{
name: 'linkageRules',
Component: SchemaSettingsLinkageRules,
useComponentProps() {
const { name } = useCollection_deprecated();
return {
collectionName: name,
readPretty: true,
};
},
},
{
name: 'formItemTemplate',
Component: SchemaSettingsFormItemTemplate,
@ -150,6 +161,17 @@ export const formDetailsSettings = new SchemaSettings({
name: 'title',
Component: SchemaSettingsBlockTitleItem,
},
{
name: 'linkageRules',
Component: SchemaSettingsLinkageRules,
useComponentProps() {
const { name } = useCollection_deprecated();
return {
collectionName: name,
readPretty: true,
};
},
},
{
name: 'dataScope',
Component: SchemaSettingsDataScope,

View File

@ -11,7 +11,7 @@ import { useTranslation } from 'react-i18next';
import { useCollectionManager_deprecated } from '../../collection-manager';
import { ActionType } from './type';
export const useLinkageCollectionFieldOptions = (collectionName: string) => {
export const useLinkageCollectionFieldOptions = (collectionName: string, readPretty: boolean) => {
const { getCollectionFields, getInterface } = useCollectionManager_deprecated();
const fields = getCollectionFields(collectionName).filter((v) => {
return !['id', 'createdAt', 'createdBy', 'updatedAt', 'updatedBy'].includes(v.name);
@ -27,7 +27,12 @@ export const useLinkageCollectionFieldOptions = (collectionName: string) => {
{ label: t('Required'), value: ActionType.Required, selected: false, schema: {} },
{ label: t('Not required'), value: ActionType.InRequired, selected: false, schema: {} },
{ label: t('Value'), value: ActionType.Value, selected: false, schema: {} },
];
].filter((v) => {
if (readPretty) {
return [ActionType.Visible, ActionType.None].includes(v.value);
}
return v;
});
const field2option = (field, depth) => {
const fieldInterface = getInterface(field.interface);
if (!fieldInterface) {

View File

@ -1253,7 +1253,7 @@ export const SchemaSettingsDefaultSortingRules = function DefaultSortingRules(pr
};
export const SchemaSettingsLinkageRules = function LinkageRules(props) {
const { collectionName } = props;
const { collectionName, readPretty } = props;
const fieldSchema = useFieldSchema();
const { form } = useFormBlockContext();
const { dn } = useDesignable();
@ -1280,7 +1280,7 @@ export const SchemaSettingsLinkageRules = function LinkageRules(props) {
defaultValues: gridSchema?.['x-linkage-rules'] || fieldSchema?.['x-linkage-rules'],
type,
// eslint-disable-next-line react-hooks/rules-of-hooks
linkageOptions: useLinkageCollectionFieldOptions(collectionName),
linkageOptions: useLinkageCollectionFieldOptions(collectionName, readPretty),
collectionName,
form,
variables,