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' ? (