From 441a0e334f253b2b6c965682e54254e2ea98af19 Mon Sep 17 00:00:00 2001 From: deboraconstantino Date: Wed, 21 Oct 2026 14:58:30 +0000 Subject: [PATCH] fix(dynamic-search): corrige busca inicial com initValue assincrono --- .../po-page-dynamic-search.component.spec.ts | 71 +++++++++++++++++++ .../po-page-dynamic-search.component.ts | 6 ++ 2 files changed, 77 insertions(+) diff --git a/projects/templates/src/lib/components/po-page-dynamic-search/po-page-dynamic-search.component.spec.ts b/projects/templates/src/lib/components/po-page-dynamic-search/po-page-dynamic-search.component.spec.ts index b33cfadca3..af7649a3bd 100644 --- a/projects/templates/src/lib/components/po-page-dynamic-search/po-page-dynamic-search.component.spec.ts +++ b/projects/templates/src/lib/components/po-page-dynamic-search/po-page-dynamic-search.component.spec.ts @@ -1319,6 +1319,77 @@ describe('PoPageDynamicSearchComponent:', () => { expect(component.onChangeFilters).not.toHaveBeenCalled(); expect(component.previousFilters).toEqual([]); }); + + it('should call `onChangeFilters` and update `previousFilters` when `filters` change asynchronously and differ from `previousFilters`', () => { + const filters = [{ property: 'status', label: 'Status', initValue: 'active' }]; + const changes: SimpleChanges = { + filters: { + currentValue: filters, + previousValue: [], + firstChange: false, + isFirstChange: () => false + } + }; + + spyOn(component, 'onChangeFilters'); + + component.filters = filters; + component.previousFilters = []; + + component.ngOnChanges(changes); + + expect(component.onChangeFilters).toHaveBeenCalledWith(filters); + expect(component.previousFilters).toEqual(filters); + }); + + it('should not call `onChangeFilters` when `filters` change but are equal to `previousFilters`', () => { + const filters = [{ property: 'status', label: 'Status', initValue: 'active' }]; + const changes: SimpleChanges = { + filters: { + currentValue: filters, + previousValue: filters, + firstChange: false, + isFirstChange: () => false + } + }; + + spyOn(component, 'onChangeFilters'); + + component.filters = filters; + component.previousFilters = [...filters]; + + component.ngOnChanges(changes); + + expect(component.onChangeFilters).not.toHaveBeenCalled(); + }); + + it('should not evaluate the `filters` change when `visibleFixedFilters` change already handled it', () => { + const changes: SimpleChanges = { + visibleFixedFilters: { + currentValue: true, + previousValue: false, + firstChange: false, + isFirstChange: () => false + }, + filters: { + currentValue: [{ property: 'status', fixed: true }], + previousValue: [], + firstChange: false, + isFirstChange: () => false + } + }; + + spyOn(component, 'onChangeFilters'); + + component.filters = [{ property: 'status', fixed: true }]; + component.previousFilters = []; + + component.ngOnChanges(changes); + + expect(component.onChangeFilters).toHaveBeenCalledTimes(1); + expect(component.onChangeFilters).toHaveBeenCalledWith(component.filters); + expect(component.previousFilters).toEqual(component.filters); + }); }); describe('Integration:', () => { diff --git a/projects/templates/src/lib/components/po-page-dynamic-search/po-page-dynamic-search.component.ts b/projects/templates/src/lib/components/po-page-dynamic-search/po-page-dynamic-search.component.ts index 17ff9ab5aa..7c80adc747 100644 --- a/projects/templates/src/lib/components/po-page-dynamic-search/po-page-dynamic-search.component.ts +++ b/projects/templates/src/lib/components/po-page-dynamic-search/po-page-dynamic-search.component.ts @@ -147,6 +147,12 @@ export class PoPageDynamicSearchComponent ) { this.onChangeFilters(this.filters); this.previousFilters = [...this.filters]; + return; + } + + if (changes.filters && this.stringify(this.filters) !== this.stringify(this.previousFilters)) { + this.onChangeFilters(this.filters); + this.previousFilters = [...this.filters]; } }