From 304f87bee218b26542a37429fcb172f680bf1c84 Mon Sep 17 00:00:00 2001 From: Katherine Date: Mon, 20 May 2024 20:55:30 +0800 Subject: [PATCH] fix: useCurrentFormVariable (#4428) * refactor: useCurrentFormVariable support detail block * fix: useCurrentFormVariable * fix: bug --- .../src/schema-settings/SchemaSettings.tsx | 7 +++---- .../VariableInput/hooks/useFormVariable.ts | 21 ++++++++++++++----- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/packages/core/client/src/schema-settings/SchemaSettings.tsx b/packages/core/client/src/schema-settings/SchemaSettings.tsx index 16296446bc2..5c07b89f8ac 100644 --- a/packages/core/client/src/schema-settings/SchemaSettings.tsx +++ b/packages/core/client/src/schema-settings/SchemaSettings.tsx @@ -969,6 +969,8 @@ export const SchemaSettingsLinkageRules = function LinkageRules(props) { const { type: formBlockType } = useFormBlockType(); const type = props?.type || fieldSchema?.['x-action'] ? 'button' : 'field'; const gridSchema = findGridSchema(fieldSchema) || fieldSchema; + const options = useLinkageCollectionFilterOptions(collectionName); + const linkageOptions = useLinkageCollectionFieldOptions(collectionName, readPretty); const schema = useMemo( () => ({ type: 'object', @@ -977,14 +979,11 @@ export const SchemaSettingsLinkageRules = function LinkageRules(props) { fieldReaction: { 'x-component': FormLinkageRules, 'x-use-component-props': () => { - // eslint-disable-next-line react-hooks/rules-of-hooks - const options = useLinkageCollectionFilterOptions(collectionName); return { options, defaultValues: gridSchema?.['x-linkage-rules'] || fieldSchema?.['x-linkage-rules'], type, - // eslint-disable-next-line react-hooks/rules-of-hooks - linkageOptions: useLinkageCollectionFieldOptions(collectionName, readPretty), + linkageOptions, collectionName, form, variables, diff --git a/packages/core/client/src/schema-settings/VariableInput/hooks/useFormVariable.ts b/packages/core/client/src/schema-settings/VariableInput/hooks/useFormVariable.ts index 563af0df794..53b1562cd9c 100644 --- a/packages/core/client/src/schema-settings/VariableInput/hooks/useFormVariable.ts +++ b/packages/core/client/src/schema-settings/VariableInput/hooks/useFormVariable.ts @@ -10,8 +10,13 @@ import { Form } from '@formily/core'; import { Schema } from '@formily/json-schema'; import { useTranslation } from 'react-i18next'; -import { useFormBlockContext } from '../../../block-provider'; -import { CollectionFieldOptions_deprecated } from '../../../collection-manager'; +import { useBlockContext, useDetailsBlockContext, useFormBlockContext } from '../../../block-provider'; +import { + CollectionFieldOptions_deprecated, + useResourceActionContext, + useResourceContext, +} from '../../../collection-manager'; +import { useDataBlockRequest } from '../../../data-source'; import { useBaseVariable } from './useBaseVariable'; interface Props { @@ -60,6 +65,11 @@ export const useFormVariable = ({ collectionName, collectionField, schema, noDis return result; }; +const useCurrentFormData = () => { + const ctx = useDataBlockRequest(); + return ctx?.data?.data?.[0] || ctx?.data?.data; +}; + /** * 变量:`当前表单` * @param param0 @@ -74,7 +84,8 @@ export const useCurrentFormVariable = ({ }: Props = {}) => { // const { getActiveFieldsName } = useFormActiveFields() || {}; const { t } = useTranslation(); - const { form, collectionName, service } = useFormBlockContext(); + const { form, collectionName } = useFormBlockContext(); + const formData = useCurrentFormData(); const currentFormSettings = useBaseVariable({ collectionField, uiSchema: schema, @@ -103,9 +114,9 @@ export const useCurrentFormVariable = ({ currentFormSettings, /** 变量值 */ currentFormCtx: - formInstance?.values && Object.keys(formInstance?.values)?.length + formInstance?.readPretty === false && formInstance?.values && Object.keys(formInstance?.values)?.length ? formInstance?.values - : service?.data?.data || formInstance?.values, + : formData || formInstance?.values, /** 用来判断是否可以显示`当前表单`变量 */ shouldDisplayCurrentForm: formInstance && !formInstance.readPretty, };