[MNT-25409] fix Cannot switch between saved searches correctly (#4876)

This commit is contained in:
Mykyta Maliarchuk
2025-10-31 08:46:05 +01:00
committed by GitHub
parent 03bda7cca7
commit 87a89c92d3
2 changed files with 28 additions and 3 deletions
@@ -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);
});
@@ -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;
}