From 87a89c92d3694c4d885ecbaee179bbf4f21497b7 Mon Sep 17 00:00:00 2001 From: Mykyta Maliarchuk <84377976+nikita-web-ua@users.noreply.github.com> Date: Fri, 31 Oct 2025 08:46:05 +0100 Subject: [PATCH] [MNT-25409] fix Cannot switch between saved searches correctly (#4876) --- .../search-results.component.spec.ts | 24 +++++++++++++++++-- .../search-results.component.ts | 7 +++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/projects/aca-content/src/lib/components/search/search-results/search-results.component.spec.ts b/projects/aca-content/src/lib/components/search/search-results/search-results.component.spec.ts index 64059c288..127714504 100644 --- a/projects/aca-content/src/lib/components/search/search-results/search-results.component.spec.ts +++ b/projects/aca-content/src/lib/components/search/search-results/search-results.component.spec.ts @@ -339,8 +339,13 @@ describe('SearchComponent', () => { expect(queryBuilder.execute).toHaveBeenCalledTimes(1); })); - it('should NOT call execute on navigation to search page', fakeAsync(() => { - spyOn(queryBuilder, 'execute'); + it('should NOT call execute on navigation to search page with unchanged query', fakeAsync(() => { + const executeSpy = spyOn(queryBuilder, 'execute'); + queryParams.next({ q: encodeQuery({ userQuery: 'cm:name:"test*"' }) }); + tick(); + + executeSpy.calls.reset(); + routerEvents.next(new NavigationStart(1, '/mock-search-url', 'imperative')); queryParams.next({ q: encodeQuery({ userQuery: 'cm:name:"test*"' }) }); @@ -349,5 +354,20 @@ describe('SearchComponent', () => { expect(queryBuilder.execute).not.toHaveBeenCalled(); })); + it('should call execute on navigation to search page with changed query', fakeAsync(() => { + const executeSpy = spyOn(queryBuilder, 'execute'); + queryParams.next({ q: encodeQuery({ userQuery: 'cm:name:"different*"' }) }); + tick(); + + executeSpy.calls.reset(); + + routerEvents.next(new NavigationStart(1, '/mock-search-url', 'imperative')); + queryParams.next({ q: encodeQuery({ userQuery: 'cm:name:"test*"' }) }); + + tick(); + + expect(executeSpy).toHaveBeenCalledTimes(1); + })); + testHeader(SearchResultsComponent, false); }); diff --git a/projects/aca-content/src/lib/components/search/search-results/search-results.component.ts b/projects/aca-content/src/lib/components/search/search-results/search-results.component.ts index 8074401db..828ecbfcb 100644 --- a/projects/aca-content/src/lib/components/search/search-results/search-results.component.ts +++ b/projects/aca-content/src/lib/components/search/search-results/search-results.component.ts @@ -147,6 +147,8 @@ export class SearchResultsComponent extends PageComponent implements OnInit { encodedQuery: string; searchConfig: SearchConfiguration; + private previousEncodedQuery: string; + constructor( tagsService: TagService, private readonly queryBuilder: SearchQueryBuilderService, @@ -351,10 +353,13 @@ export class SearchResultsComponent extends PageComponent implements OnInit { } private shouldExecuteQuery(navigationStartEvent: NavigationStart | null, query: string | undefined): boolean { + const hasQueryChanged = query !== this.previousEncodedQuery; + this.previousEncodedQuery = query; + if (!navigationStartEvent || navigationStartEvent.navigationTrigger === 'popstate' || navigationStartEvent.navigationTrigger === 'hashchange') { return true; } else if (navigationStartEvent.navigationTrigger === 'imperative') { - return false; + return hasQueryChanged; } else { return !!query; }