Skip to content

Commit 3cf2742

Browse files
author
Ali Jaber
committed
Merge branch 'backport-5739-w2p-141627_search-instance-params-9.0' into w2p-141627_search-instance-params-main_contribute
# Conflicts: # src/app/search-navbar/search-navbar.component.spec.ts # src/app/search-navbar/search-navbar.component.ts # src/app/search-page/search-page.component.ts # src/app/shared/object-collection/object-collection.component.ts # src/app/shared/search-form/search-form.component.ts # src/app/shared/search/search-configuration.service.spec.ts # src/app/shared/search/search-configuration.service.ts # src/app/shared/search/search-results/search-results.component.ts
2 parents 3c21741 + 280bfec commit 3cf2742

36 files changed

Lines changed: 574 additions & 205 deletions

File tree

src/app/core/testing/pagination-service.stub.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,6 @@ export class PaginationServiceStub {
2424
updateRouteWithUrl = jasmine.createSpy('updateRouteWithUrl');
2525
clearPagination = jasmine.createSpy('clearPagination');
2626
getRouteParameterValue = jasmine.createSpy('getRouteParameterValue').and.returnValue(of(''));
27-
getPageParam = jasmine.createSpy('getPageParam').and.returnValue(`${this.pagination.id}.page`);
27+
getPageParam = jasmine.createSpy('getPageParam').and.callFake((paginationId: string) => `${paginationId}.page`);
2828

2929
}

src/app/core/testing/search-configuration-service.stub.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import {
1717
*/
1818
export class SearchConfigurationServiceStub {
1919

20-
public paginationID = 'test-id';
20+
public searchInstanceId = 'test-id';
2121

2222
public searchOptions: BehaviorSubject<SearchOptions> = new BehaviorSubject(new SearchOptions({}));
2323
public paginatedSearchOptions: BehaviorSubject<PaginatedSearchOptions> = new BehaviorSubject(new PaginatedSearchOptions({}));
@@ -30,6 +30,18 @@ export class SearchConfigurationServiceStub {
3030
return of([]);
3131
}
3232

33+
getCurrentSearchInstanceParam(param: string) {
34+
return `${this.searchInstanceId}.${param}`;
35+
}
36+
37+
getCurrentSearchInstanceFilterParam(param: string) {
38+
return `${this.searchInstanceId}.${param}`;
39+
}
40+
41+
getCurrentPageParam() {
42+
return `${this.searchInstanceId}.page`;
43+
}
44+
3345
getCurrentScope(a) {
3446
return of('test-id');
3547
}

src/app/home-page/recent-item-list/recent-item-list.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ export class RecentItemListComponent implements OnInit, OnDestroy {
127127
}
128128

129129
onLoadMore(): void {
130-
this.paginationService.updateRouteWithUrl(this.searchConfigurationService.paginationID, ['search'], {
130+
this.paginationService.updateRouteWithUrl(this.searchConfigurationService.searchInstanceId, ['search'], {
131131
sortField: environment.homePage.recentSubmissions.sortField,
132132
sortDirection: 'DESC' as SortDirection,
133133
page: 1,

src/app/my-dspace-page/my-dspace-configuration.service.spec.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ describe('MyDSpaceConfigurationService', () => {
151151

152152
describe('when subscribeToSearchOptions is called', () => {
153153
beforeEach(() => {
154-
(service as any).subscribeToSearchOptions(defaults);
154+
(service as any).subscribeToSearchOptions(defaults.pagination.id, defaults);
155155
});
156156
it('should call all getters it needs, but not call any others', () => {
157157
expect(service.getCurrentPagination).not.toHaveBeenCalled();
@@ -168,14 +168,14 @@ describe('MyDSpaceConfigurationService', () => {
168168
beforeEach(() => {
169169
(service as any).subscribeToPaginatedSearchOptions('id', defaults);
170170
});
171-
it('should call all getters it needs', () => {
171+
it('should call the pagination-specific getters it needs', () => {
172172
expect(service.getCurrentPagination).toHaveBeenCalled();
173173
expect(service.getCurrentSort).toHaveBeenCalled();
174-
expect(service.getCurrentScope).toHaveBeenCalled();
175-
expect(service.getCurrentConfiguration).toHaveBeenCalled();
176-
expect(service.getCurrentQuery).toHaveBeenCalled();
177-
expect(service.getCurrentDSOType).toHaveBeenCalled();
178-
expect(service.getCurrentFilters).toHaveBeenCalled();
174+
expect(service.getCurrentScope).not.toHaveBeenCalled();
175+
expect(service.getCurrentConfiguration).not.toHaveBeenCalled();
176+
expect(service.getCurrentQuery).not.toHaveBeenCalled();
177+
expect(service.getCurrentDSOType).not.toHaveBeenCalled();
178+
expect(service.getCurrentFilters).not.toHaveBeenCalled();
179179
});
180180
});
181181
});

src/app/my-dspace-page/my-dspace-configuration.service.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ export const SEARCH_CONFIG_SERVICE: InjectionToken<SearchConfigurationService> =
4747
*/
4848
@Injectable({ providedIn: 'root' })
4949
export class MyDSpaceConfigurationService extends SearchConfigurationService {
50+
/**
51+
* Search instance id used for the MyDSpace search component.
52+
*/
53+
public searchInstanceId = 'mydspace-page';
54+
5055
/**
5156
* Default pagination settings
5257
*/

src/app/my-dspace-page/my-dspace.guard.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,28 +26,34 @@ export const myDSpaceGuard: CanActivateFn = (
2626
configurationService: MyDSpaceConfigurationService = inject(MyDSpaceConfigurationService),
2727
router: Router = inject(Router),
2828
): Observable<boolean> => {
29+
const configurationParam = configurationService.getCurrentSearchInstanceParam('configuration');
30+
const configuration = route.queryParamMap.get(configurationParam) || route.queryParamMap.get('configuration');
2931
return configurationService.getAvailableConfigurationTypes().pipe(
3032
first(),
31-
map((configurationList) => validateConfigurationParam(router, route.queryParamMap.get('configuration'), configurationList)));
33+
map((configurationList) => validateConfigurationParam(router, configurationService, configuration, configurationList)));
3234
};
3335

3436
/**
3537
* Check if the given configuration is present in the list of those available
3638
*
3739
* @param router
3840
* the service router
41+
* @param configurationService
42+
* the MyDSpace configuration service
3943
* @param configuration
4044
* the configuration to validate
4145
* @param configurationList
4246
* the list of available configuration
4347
*
4448
*/
45-
function validateConfigurationParam(router: Router, configuration: string, configurationList: MyDSpaceConfigurationValueType[]): boolean {
49+
function validateConfigurationParam(router: Router, configurationService: MyDSpaceConfigurationService, configuration: string, configurationList: MyDSpaceConfigurationValueType[]): boolean {
4650
const configurationDefault: string = configurationList[0];
4751
if (isEmpty(configuration) || !configurationList.includes(configuration as MyDSpaceConfigurationValueType)) {
4852
// If configuration param is empty or is not included in available configurations redirect to a default configuration value
4953
const navigationExtras: NavigationExtras = {
50-
queryParams: { configuration: configurationDefault },
54+
queryParams: {
55+
[configurationService.getCurrentSearchInstanceParam('configuration')]: configurationDefault,
56+
},
5157
};
5258

5359
router.navigate([MYDSPACE_ROUTE], navigationExtras);

src/app/search-navbar/search-navbar.component.spec.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ import {
2222
TranslateModule,
2323
} from '@ngx-translate/core';
2424

25+
import { PaginationService } from '../core/pagination/pagination.service';
2526
import { SearchService } from '../shared/search/search.service';
27+
import { SearchConfigurationService } from '../shared/search/search-configuration.service';
2628
import { SearchNavbarComponent } from './search-navbar.component';
2729

2830
describe('SearchNavbarComponent', () => {
@@ -54,6 +56,14 @@ describe('SearchNavbarComponent', () => {
5456
],
5557
providers: [
5658
{ provide: SearchService, useValue: mockSearchService },
59+
{ provide: PaginationService, useValue: { getPageParam: (id: string) => `${id}.page` } },
60+
{
61+
provide: SearchConfigurationService,
62+
useValue: {
63+
searchInstanceId: 'spc',
64+
getCurrentSearchInstanceParam: (param: string) => `spc.${param}`,
65+
},
66+
},
5767
],
5868
})
5969
.compileComponents();
@@ -100,7 +110,7 @@ describe('SearchNavbarComponent', () => {
100110
fixture.detectChanges();
101111
}));
102112
it('to search page with empty query', () => {
103-
const extras: NavigationExtras = { queryParams: { query: '' } };
113+
const extras: NavigationExtras = { queryParams: { 'spc.query': '', 'spc.page': 1 } };
104114
expect(component.onSubmit).toHaveBeenCalledWith({ query: '' });
105115
expect(router.navigate).toHaveBeenCalledWith(['search'], extras);
106116
});
@@ -125,7 +135,7 @@ describe('SearchNavbarComponent', () => {
125135
fixture.detectChanges();
126136
}));
127137
it('to search page with query', async () => {
128-
const extras: NavigationExtras = { queryParams: { query: 'test' } };
138+
const extras: NavigationExtras = { queryParams: { 'spc.query': 'test', 'spc.page': 1 } };
129139
expect(component.onSubmit).toHaveBeenCalledWith({ query: 'test' });
130140

131141
expect(router.navigate).toHaveBeenCalledWith(['search'], extras);

src/app/search-navbar/search-navbar.component.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@ import {
1111
import { Router } from '@angular/router';
1212
import { TranslateModule } from '@ngx-translate/core';
1313

14+
import { PaginationService } from '../core/pagination/pagination.service';
1415
import { expandSearchInput } from '../shared/animations/slide';
1516
import { SearchService } from '../shared/search/search.service';
17+
import { SearchConfigurationService } from '../shared/search/search-configuration.service';
1618
import { BrowserOnlyPipe } from '../shared/utils/browser-only.pipe';
1719
import { ClickOutsideDirective } from '../shared/utils/click-outside.directive';
1820

@@ -43,7 +45,11 @@ export class SearchNavbarComponent {
4345
// Search input field
4446
@ViewChild('searchInput') searchField: ElementRef;
4547

46-
constructor(private formBuilder: UntypedFormBuilder, private router: Router, private searchService: SearchService) {
48+
constructor(private formBuilder: UntypedFormBuilder,
49+
private router: Router,
50+
private searchService: SearchService,
51+
private searchConfigurationService: SearchConfigurationService,
52+
private paginationService: PaginationService) {
4753
this.searchForm = this.formBuilder.group(({
4854
query: '',
4955
}));
@@ -80,7 +86,10 @@ export class SearchNavbarComponent {
8086
*/
8187
onSubmit(data: any) {
8288
this.collapse();
83-
const queryParams = Object.assign({}, data);
89+
const queryParams = {
90+
[this.searchConfigurationService.getCurrentSearchInstanceParam('query')]: data.query,
91+
[this.paginationService.getPageParam(this.searchConfigurationService.searchInstanceId)]: 1,
92+
};
8493
const linkToNavigateTo = [this.searchService.getSearchLink().replace('/', '')];
8594
this.searchForm.reset();
8695

src/app/search-page/configuration-search-page.component.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ describe('ConfigurationSearchPageComponent', () => {
6464
expect(comp.configuration).toBe(CONFIGURATION);
6565
expect(comp.fixedFilterQuery).toBe(QUERY);
6666

67-
expect(routeService.setParameter).toHaveBeenCalledWith('configuration', CONFIGURATION);
68-
expect(routeService.setParameter).toHaveBeenCalledWith('fixedFilterQuery', QUERY);
67+
expect(routeService.setParameter).toHaveBeenCalledWith('search-test-page-id.configuration', CONFIGURATION);
68+
expect(routeService.setParameter).toHaveBeenCalledWith('search-test-page-id.fixedFilterQuery', QUERY);
6969
});
7070

7171
});

src/app/search-page/configuration-search-page.component.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ import { ViewModeSwitchComponent } from '../shared/view-mode-switch/view-mode-sw
4545
provide: SEARCH_CONFIG_SERVICE,
4646
useClass: SearchConfigurationService,
4747
},
48+
{
49+
provide: SearchConfigurationService,
50+
useExisting: SEARCH_CONFIG_SERVICE,
51+
},
52+
SearchService,
4853
],
4954
imports: [
5055
AsyncPipe,

0 commit comments

Comments
 (0)