From 3c9b99d812358b9d909c6b9bf36bf23b7c188d50 Mon Sep 17 00:00:00 2001 From: Zeke Zhang <958414905@qq.com> Date: Mon, 14 Apr 2025 18:38:55 +0800 Subject: [PATCH] fix: no prompt popup should be displayed after modifying the filter form (#6657) --- .../block-provider/FilterFormBlockProvider.tsx | 6 +++--- .../src/schema-component/antd/form-v2/Form.tsx | 16 +++++++++++----- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/packages/core/client/src/block-provider/FilterFormBlockProvider.tsx b/packages/core/client/src/block-provider/FilterFormBlockProvider.tsx index f6eacc4ede..1a46420a4b 100644 --- a/packages/core/client/src/block-provider/FilterFormBlockProvider.tsx +++ b/packages/core/client/src/block-provider/FilterFormBlockProvider.tsx @@ -10,11 +10,11 @@ import { useFieldSchema } from '@formily/react'; import React from 'react'; import { withDynamicSchemaProps } from '../hoc/withDynamicSchemaProps'; -import { DatePickerProvider, ActionBarProvider, SchemaComponentOptions } from '../schema-component'; +import { FilterCollectionField } from '../modules/blocks/filter-blocks/FilterCollectionField'; +import { ActionBarProvider, DatePickerProvider, SchemaComponentOptions } from '../schema-component'; import { DefaultValueProvider } from '../schema-settings'; import { CollectOperators } from './CollectOperators'; import { FormBlockProvider } from './FormBlockProvider'; -import { FilterCollectionField } from '../modules/blocks/filter-blocks/FilterCollectionField'; export const FilterFormBlockProvider = withDynamicSchemaProps((props) => { const filedSchema = useFieldSchema(); @@ -35,7 +35,7 @@ export const FilterFormBlockProvider = withDynamicSchemaProps((props) => { }} > false}> - + diff --git a/packages/core/client/src/schema-component/antd/form-v2/Form.tsx b/packages/core/client/src/schema-component/antd/form-v2/Form.tsx index f099766a90..4721db9aae 100644 --- a/packages/core/client/src/schema-component/antd/form-v2/Form.tsx +++ b/packages/core/client/src/schema-component/antd/form-v2/Form.tsx @@ -16,8 +16,10 @@ import { ConfigProvider, theme } from 'antd'; import React, { useEffect, useMemo } from 'react'; import { useActionContext } from '..'; import { useAttach, useComponent } from '../..'; +import { useApp } from '../../../application'; import { getCardItemSchema } from '../../../block-provider'; import { useTemplateBlockContext } from '../../../block-provider/TemplateBlockProvider'; +import { useDataBlockProps } from '../../../data-source'; import { useDataBlockRequest } from '../../../data-source/data-block/DataBlockRequestProvider'; import { NocoBaseRecursionField } from '../../../formily/NocoBaseRecursionField'; import { withDynamicSchemaProps } from '../../../hoc/withDynamicSchemaProps'; @@ -27,7 +29,6 @@ import { useToken } from '../../../style'; import { useLocalVariables, useVariables } from '../../../variables'; import { useProps } from '../../hooks/useProps'; import { useFormBlockHeight } from './hook'; -import { useApp } from '../../../application'; export interface FormProps extends IFormLayoutProps { form?: FormilyForm; @@ -141,12 +142,15 @@ const WithForm = (props: WithFormProps) => { const linkageRules: any[] = (getLinkageRules(fieldSchema) || fieldSchema.parent?.['x-linkage-rules'])?.filter((k) => !k.disabled) || []; + // 关闭弹窗之前,如果有未保存的数据,是否要二次确认 + const { confirmBeforeClose = true } = useDataBlockProps() || ({} as any); + useEffect(() => { const id = uid(); form.addEffects(id, () => { onFormInputChange(() => { - setFormValueChanged?.(true); + setFormValueChanged?.(confirmBeforeClose); }); }); @@ -157,7 +161,7 @@ const WithForm = (props: WithFormProps) => { return () => { form.removeEffects(id); }; - }, [form, props.disabled, setFormValueChanged]); + }, [form, props.disabled, setFormValueChanged, confirmBeforeClose]); useEffect(() => { if (loading) { @@ -210,17 +214,19 @@ const WithForm = (props: WithFormProps) => { const WithoutForm = (props) => { const fieldSchema = useFieldSchema(); const { setFormValueChanged } = useActionContext(); + // 关闭弹窗之前,如果有未保存的数据,是否要二次确认 + const { confirmBeforeClose = true } = useDataBlockProps() || ({} as any); const form = useMemo( () => createForm({ disabled: props.disabled, effects() { onFormInputChange((form) => { - setFormValueChanged?.(true); + setFormValueChanged?.(confirmBeforeClose); }); }, }), - [], + [confirmBeforeClose], ); return fieldSchema['x-decorator'] === 'FormV2' ? (