From d550a628d8514b47b0894cf10e05b00083a3dd36 Mon Sep 17 00:00:00 2001 From: Katherine Date: Fri, 18 Apr 2025 17:29:07 +0800 Subject: [PATCH] fix(linkage-rule): variable conversion in sub-table/sub-form linkage rule conditions (#6702) * fix: variable conversion in sub-table/sub-form linkage rule conditions * fix: bug * fix: style in sub-table * fix: bug --- .../antd/linkageFilter/useValues.ts | 2 +- .../src/schema-settings/LinkageRules/index.tsx | 17 ++++++++++------- .../src/schema-settings/SchemaSettings.tsx | 14 ++++++++++++-- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/packages/core/client/src/schema-component/antd/linkageFilter/useValues.ts b/packages/core/client/src/schema-component/antd/linkageFilter/useValues.ts index 6f2c5463ed..54b87eb91d 100644 --- a/packages/core/client/src/schema-component/antd/linkageFilter/useValues.ts +++ b/packages/core/client/src/schema-component/antd/linkageFilter/useValues.ts @@ -93,7 +93,7 @@ export const useValues = (): UseValuesReturn => { }, 100); }; - useEffect(value2data, [field.value, scopes]); + useEffect(value2data, [field.value.leftVar, scopes]); const setLeftValue = useCallback( (leftVar, paths) => { diff --git a/packages/core/client/src/schema-settings/LinkageRules/index.tsx b/packages/core/client/src/schema-settings/LinkageRules/index.tsx index 5fbc3b7bf4..5988ff898e 100644 --- a/packages/core/client/src/schema-settings/LinkageRules/index.tsx +++ b/packages/core/client/src/schema-settings/LinkageRules/index.tsx @@ -24,6 +24,7 @@ import { useCurrentFormContext } from '../VariableInput/hooks/useFormVariable'; import { LinkageRuleActionGroup } from './LinkageRuleActionGroup'; import { EnableLinkage } from './components/EnableLinkage'; import { ArrayCollapse } from './components/LinkageHeader'; +import { useFlag } from '../../flag-provider'; export interface Props { dynamicComponent: any; @@ -65,11 +66,12 @@ function transformConditionData(condition: Condition, variableKey: '$nForm' | '$ rightVar: value, }; } -function getActiveContextName(contextList: { name: string; ctx: any }[]): string | null { - const priority = ['$nForm', '$nRecord']; - for (const name of priority) { - const item = contextList.find((ctx) => ctx.name === name && ctx.ctx); - if (item) return name; +function getActiveContextName(underNester, shouldDisplayCurrentForm): string | null { + if (underNester) { + return '$iteration'; + } + if (shouldDisplayCurrentForm) { + return '$nForm'; } return '$nRecord'; } @@ -97,15 +99,16 @@ export const FormLinkageRules = withDynamicSchemaProps( const { getAllCollectionsInheritChain } = useCollectionManager_deprecated(); const parentRecordData = useCollectionParentRecordData(); const { shouldDisplayCurrentForm } = useCurrentFormContext(); - const variableKey = getActiveContextName(localVariables); const components = useMemo(() => ({ ArrayCollapse }), []); + const { isInSubTable, isInSubForm } = useFlag(); + const variableKey = getActiveContextName(isInSubTable || isInSubForm, shouldDisplayCurrentForm); const schema = useMemo( () => ({ type: 'object', properties: { rules: { type: 'array', - default: transformDefaultValue(defaultValues, shouldDisplayCurrentForm ? variableKey : '$nRecord'), + default: transformDefaultValue(defaultValues, variableKey), 'x-component': 'ArrayCollapse', 'x-decorator': 'FormItem', 'x-component-props': { diff --git a/packages/core/client/src/schema-settings/SchemaSettings.tsx b/packages/core/client/src/schema-settings/SchemaSettings.tsx index bf44536334..c277f087b7 100644 --- a/packages/core/client/src/schema-settings/SchemaSettings.tsx +++ b/packages/core/client/src/schema-settings/SchemaSettings.tsx @@ -84,7 +84,7 @@ import { AssociationOrCollectionProvider, useDataBlockProps } from '../data-sour import { useDataSourceManager } from '../data-source/data-source/DataSourceManagerProvider'; import { useDataSourceKey } from '../data-source/data-source/DataSourceProvider'; import { useFilterBlock } from '../filter-provider/FilterProvider'; -import { FlagProvider } from '../flag-provider'; +import { FlagProvider, useFlag } from '../flag-provider'; import { useGlobalTheme } from '../global-theme'; import { useCollectMenuItem, useCollectMenuItems, useMenuItem } from '../hooks/useMenuItem'; import { @@ -1129,6 +1129,7 @@ export const SchemaSettingsLinkageRules = function LinkageRules(props) { return gridSchema?.[dataKey] || fieldSchema?.[dataKey] || []; }, [gridSchema, fieldSchema, dataKey]); const title = titleMap[category] || t('Linkage rules'); + const flagVales = useFlag(); const schema = useMemo( () => ({ type: 'object', @@ -1180,7 +1181,16 @@ export const SchemaSettingsLinkageRules = function LinkageRules(props) { ); return ( - + { + return {props.children}; + }} + /> ); };