From 2ec128c63fb20047c8eb6331e26196d1d3b57c0c Mon Sep 17 00:00:00 2001 From: katherinehhh Date: Tue, 7 May 2024 09:45:28 +0800 Subject: [PATCH] feat: detail block support linkage rule (#4221) * feat: detail block support linkage rule * fix: bug * fix: bug * test: e2e test --- .../__e2e__/schemaSettings.test.ts | 1 + .../detailsWithPaginationSettings.tsx | 17 +++++++++++++- .../__e2e__/schemaSettings.test.ts | 2 +- .../details-single/detailsBlockSettings.ts | 17 +++++++++++++- .../antd/form-v2/Form.Settings.tsx | 22 +++++++++++++++++++ .../LinkageRules/action-hooks.ts | 9 ++++++-- .../src/schema-settings/SchemaSettings.tsx | 4 ++-- 7 files changed, 65 insertions(+), 7 deletions(-) diff --git a/packages/core/client/src/modules/blocks/data-blocks/details-multi/__e2e__/schemaSettings.test.ts b/packages/core/client/src/modules/blocks/data-blocks/details-multi/__e2e__/schemaSettings.test.ts index aa4eb3b531..7db63d1ec5 100644 --- a/packages/core/client/src/modules/blocks/data-blocks/details-multi/__e2e__/schemaSettings.test.ts +++ b/packages/core/client/src/modules/blocks/data-blocks/details-multi/__e2e__/schemaSettings.test.ts @@ -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', diff --git a/packages/core/client/src/modules/blocks/data-blocks/details-multi/detailsWithPaginationSettings.tsx b/packages/core/client/src/modules/blocks/data-blocks/details-multi/detailsWithPaginationSettings.tsx index 2b7f2f666d..42b99ceed7 100644 --- a/packages/core/client/src/modules/blocks/data-blocks/details-multi/detailsWithPaginationSettings.tsx +++ b/packages/core/client/src/modules/blocks/data-blocks/details-multi/detailsWithPaginationSettings.tsx @@ -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, diff --git a/packages/core/client/src/modules/blocks/data-blocks/details-single/__e2e__/schemaSettings.test.ts b/packages/core/client/src/modules/blocks/data-blocks/details-single/__e2e__/schemaSettings.test.ts index 7d6a6cbec2..4a9cbda2ca 100644 --- a/packages/core/client/src/modules/blocks/data-blocks/details-single/__e2e__/schemaSettings.test.ts +++ b/packages/core/client/src/modules/blocks/data-blocks/details-single/__e2e__/schemaSettings.test.ts @@ -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'], }); }); }); diff --git a/packages/core/client/src/modules/blocks/data-blocks/details-single/detailsBlockSettings.ts b/packages/core/client/src/modules/blocks/data-blocks/details-single/detailsBlockSettings.ts index d00463d30b..42974fba61 100644 --- a/packages/core/client/src/modules/blocks/data-blocks/details-single/detailsBlockSettings.ts +++ b/packages/core/client/src/modules/blocks/data-blocks/details-single/detailsBlockSettings.ts @@ -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, diff --git a/packages/core/client/src/schema-component/antd/form-v2/Form.Settings.tsx b/packages/core/client/src/schema-component/antd/form-v2/Form.Settings.tsx index 05b11fee99..de1feb931d 100644 --- a/packages/core/client/src/schema-component/antd/form-v2/Form.Settings.tsx +++ b/packages/core/client/src/schema-component/antd/form-v2/Form.Settings.tsx @@ -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, diff --git a/packages/core/client/src/schema-settings/LinkageRules/action-hooks.ts b/packages/core/client/src/schema-settings/LinkageRules/action-hooks.ts index 6b72ae8eff..e01d14d360 100644 --- a/packages/core/client/src/schema-settings/LinkageRules/action-hooks.ts +++ b/packages/core/client/src/schema-settings/LinkageRules/action-hooks.ts @@ -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) { diff --git a/packages/core/client/src/schema-settings/SchemaSettings.tsx b/packages/core/client/src/schema-settings/SchemaSettings.tsx index 7911f774eb..c23a05de66 100644 --- a/packages/core/client/src/schema-settings/SchemaSettings.tsx +++ b/packages/core/client/src/schema-settings/SchemaSettings.tsx @@ -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,