From c91c0d0045cb2b3fa47ce9e274e7f35ce3402c95 Mon Sep 17 00:00:00 2001 From: gchust Date: Wed, 8 Jul 2026 08:21:44 +0800 Subject: [PATCH] fix: incorrect default value for filter form (#10022) --- .../filter-form/FilterFormBlockModel.tsx | 1 + .../__tests__/defaultValues.wiring.test.ts | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/packages/core/client-v2/src/flow/models/blocks/filter-form/FilterFormBlockModel.tsx b/packages/core/client-v2/src/flow/models/blocks/filter-form/FilterFormBlockModel.tsx index c4e8ef5e9f4..04758368728 100644 --- a/packages/core/client-v2/src/flow/models/blocks/filter-form/FilterFormBlockModel.tsx +++ b/packages/core/client-v2/src/flow/models/blocks/filter-form/FilterFormBlockModel.tsx @@ -432,6 +432,7 @@ export class FilterFormBlockModel extends FilterBlockModel<{ private canApplyFormDefaultValue(name: string, current: any, force?: boolean) { if (force) return true; + if (this.userEditedFieldNames.has(name)) return false; if (isEmptyValue(current)) return true; if (!this.lastDefaultValueByFieldName.has(name)) return false; return isEqual(current, this.lastDefaultValueByFieldName.get(name)); diff --git a/packages/core/client-v2/src/flow/models/blocks/filter-form/__tests__/defaultValues.wiring.test.ts b/packages/core/client-v2/src/flow/models/blocks/filter-form/__tests__/defaultValues.wiring.test.ts index d79d38d1f94..354d687ff85 100644 --- a/packages/core/client-v2/src/flow/models/blocks/filter-form/__tests__/defaultValues.wiring.test.ts +++ b/packages/core/client-v2/src/flow/models/blocks/filter-form/__tests__/defaultValues.wiring.test.ts @@ -301,6 +301,40 @@ describe('filter-form defaultValues wiring', () => { expect(values.username_user).toBe('Manual'); }); + it('does not reapply a filter form default value after user clears the field', async () => { + const { model, values } = createFilterFormDefaultValuesModel([ + { + key: 'username-default', + enable: true, + targetPath: 'username', + mode: 'default', + value: 'admin', + }, + ]); + + await FilterFormBlockModel.prototype.applyFormDefaultValues.call(model as any); + expect(values.username_user).toBe('admin'); + + values.username_user = undefined; + (model as any).handleFilterFormValuesChange({ username_user: undefined }, { username_user: undefined }); + + await waitFor(() => { + expect(model.dispatchEvent).toHaveBeenCalledWith( + 'formValuesChange', + { + changedValues: { + username_user: undefined, + }, + allValues: { + username_user: undefined, + }, + }, + { debounce: true }, + ); + }); + expect(values.username_user).toBeUndefined(); + }); + it('applies fixed values even when the target filter field already has a value', async () => { const { model, values } = createFilterFormDefaultValuesModel( [