Skip to content

Commit ba75051

Browse files
authored
Merge pull request #1845 from 4Science/CST-6876
Search/MyDSpace fixes
2 parents 8e5ef54 + c47405c commit ba75051

File tree

58 files changed

+747
-372
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+747
-372
lines changed

src/app/core/end-user-agreement/end-user-agreement-current-user.guard.spec.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ describe('EndUserAgreementGuard', () => {
5050
it('should return true', (done) => {
5151
environment.info.enableEndUserAgreement = false;
5252
guard.canActivate(undefined, Object.assign({ url: 'redirect' })).subscribe((result) => {
53-
console.log(result);
5453
expect(result).toEqual(true);
5554
done();
5655
});

src/app/core/orcid/orcid-auth.service.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,6 @@ export class OrcidAuthService {
111111
).pipe(
112112
map(([authorizeUrl, clientId, scopes]) => {
113113
const redirectUri = new URLCombiner(this._window.nativeWindow.origin, encodeURIComponent(this.router.url.split('?')[0]));
114-
console.log(redirectUri.toString());
115114
return authorizeUrl.values[0] + '?client_id=' + clientId.values[0] + '&redirect_uri=' + redirectUri + '&response_type=code&scope='
116115
+ scopes.values.join(' ');
117116
}));

src/app/core/shared/search/search-filter.service.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { combineLatest as observableCombineLatest, Observable } from 'rxjs';
1+
import { BehaviorSubject, combineLatest as observableCombineLatest, Observable } from 'rxjs';
22
import { distinctUntilChanged, map } from 'rxjs/operators';
33
import { Injectable, InjectionToken } from '@angular/core';
44
import {
@@ -26,6 +26,7 @@ const filterStateSelector = (state: SearchFiltersState) => state.searchFilter;
2626

2727
export const FILTER_CONFIG: InjectionToken<SearchFilterConfig> = new InjectionToken<SearchFilterConfig>('filterConfig');
2828
export const IN_PLACE_SEARCH: InjectionToken<boolean> = new InjectionToken<boolean>('inPlaceSearch');
29+
export const REFRESH_FILTER: InjectionToken<BehaviorSubject<any>> = new InjectionToken<boolean>('refreshFilters');
2930

3031
/**
3132
* Service that performs all actions that have to do with search filters and facets

src/app/core/shared/search/search.service.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import { GenericConstructor } from '../generic-constructor';
1313
import { HALEndpointService } from '../hal-endpoint.service';
1414
import { URLCombiner } from '../../url-combiner/url-combiner';
1515
import { hasValue, hasValueOperator, isNotEmpty } from '../../../shared/empty.util';
16-
import { SearchOptions } from '../../../shared/search/models/search-options.model';
1716
import { SearchFilterConfig } from '../../../shared/search/models/search-filter-config.model';
1817
import { SearchResponseParsingService } from '../../data/search-response-parsing.service';
1918
import { SearchObjects } from '../../../shared/search/models/search-objects.model';
@@ -264,17 +263,26 @@ export class SearchService implements OnDestroy {
264263
* @param {number} valuePage The page number of the filter values
265264
* @param {SearchOptions} searchOptions The search configuration for the current search
266265
* @param {string} filterQuery The optional query used to filter out filter values
266+
* @param useCachedVersionIfAvailable If this is true, the request will only be sent if there's
267+
* no valid cached version. Defaults to true
267268
* @returns {Observable<RemoteData<PaginatedList<FacetValue>>>} Emits the given page of facet values
268269
*/
269-
getFacetValuesFor(filterConfig: SearchFilterConfig, valuePage: number, searchOptions?: SearchOptions, filterQuery?: string): Observable<RemoteData<FacetValues>> {
270+
getFacetValuesFor(filterConfig: SearchFilterConfig, valuePage: number, searchOptions?: PaginatedSearchOptions, filterQuery?: string, useCachedVersionIfAvailable = true): Observable<RemoteData<FacetValues>> {
270271
let href;
271-
const args: string[] = [`page=${valuePage - 1}`, `size=${filterConfig.pageSize}`];
272+
let args: string[] = [];
272273
if (hasValue(filterQuery)) {
273274
args.push(`prefix=${filterQuery}`);
274275
}
275276
if (hasValue(searchOptions)) {
277+
searchOptions = Object.assign(new PaginatedSearchOptions({}), searchOptions, {
278+
pagination: Object.assign({}, searchOptions.pagination, {
279+
currentPage: valuePage,
280+
pageSize: filterConfig.pageSize
281+
})
282+
});
276283
href = searchOptions.toRestUrl(filterConfig._links.self.href, args);
277284
} else {
285+
args = [`page=${valuePage - 1}`, `size=${filterConfig.pageSize}`, ...args];
278286
href = new URLCombiner(filterConfig._links.self.href, `?${args.join('&')}`).toString();
279287
}
280288

@@ -284,7 +292,7 @@ export class SearchService implements OnDestroy {
284292
return FacetValueResponseParsingService;
285293
}
286294
});
287-
this.requestService.send(request, true);
295+
this.requestService.send(request, useCachedVersionIfAvailable);
288296

289297
return this.rdb.buildFromHref(href);
290298
}

src/app/item-page/edit-item-page/edit-item-page.component.spec.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ describe('ItemPageComponent', () => {
2222

2323
class AcceptNoneGuard implements CanActivate {
2424
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
25-
console.log('BLA');
2625
return observableOf(false);
2726
}
2827
}

src/app/shared/mydspace-actions/claimed-task/abstract/claimed-task-actions-abstract.component.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ import { RequestService } from '../../../../core/data/request.service';
1010
import { Observable } from 'rxjs';
1111
import { RemoteData } from '../../../../core/data/remote-data';
1212
import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model';
13-
import { switchMap, take } from 'rxjs/operators';
13+
import { take } from 'rxjs/operators';
1414
import { CLAIMED_TASK } from '../../../../core/tasks/models/claimed-task-object.resource-type';
15-
import { getFirstSucceededRemoteDataPayload } from '../../../../core/shared/operators';
1615
import { Item } from '../../../../core/shared/item.model';
1716
import { MyDSpaceReloadableActionsComponent } from '../../mydspace-reloadable-actions';
17+
import { isEmpty } from '../../../empty.util';
1818

1919
/**
2020
* Abstract component for rendering a claimed task's action
@@ -36,13 +36,23 @@ export abstract class ClaimedTaskActionsAbstractComponent extends MyDSpaceReload
3636

3737
object: ClaimedTask;
3838

39+
/**
40+
* The item object that belonging to the ClaimedTask object
41+
*/
42+
item: Item;
43+
3944
/**
4045
* Anchor used to reload the pool task.
4146
*/
4247
itemUuid: string;
4348

4449
subs = [];
4550

51+
/**
52+
* The workflowitem object that belonging to the ClaimedTask object
53+
*/
54+
workflowitem: WorkflowItem;
55+
4656
protected constructor(protected injector: Injector,
4757
protected router: Router,
4858
protected notificationsService: NotificationsService,
@@ -85,16 +95,10 @@ export abstract class ClaimedTaskActionsAbstractComponent extends MyDSpaceReload
8595
* Retrieve the itemUuid.
8696
*/
8797
initReloadAnchor() {
88-
if (!(this.object as any).workflowitem) {
98+
if (isEmpty(this.item)) {
8999
return;
90100
}
91-
this.subs.push(this.object.workflowitem.pipe(
92-
getFirstSucceededRemoteDataPayload(),
93-
switchMap((workflowItem: WorkflowItem) => workflowItem.item.pipe(getFirstSucceededRemoteDataPayload())
94-
))
95-
.subscribe((item: Item) => {
96-
this.itemUuid = item.uuid;
97-
}));
101+
this.itemUuid = this.item.uuid;
98102
}
99103

100104
ngOnDestroy() {
Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,23 @@
11
<ng-container *ngVar="(actionRD$ | async)?.payload as workflowAction">
22
<div class="mt-1 mb-3 space-children-mr">
3-
<ds-claimed-task-actions-loader *ngFor="let option of workflowAction?.options" [option]="option" [object]="object"
4-
(processCompleted)="this.processCompleted.emit($event)">
3+
<ds-claimed-task-actions-loader *ngFor="let option of workflowAction?.options"
4+
[item]="item"
5+
[option]="option"
6+
[object]="object"
7+
[workflowitem]="workflowitem"
8+
(processCompleted)="this.processCompleted.emit($event)">
59
</ds-claimed-task-actions-loader>
610

711
<button class="btn btn-primary workflow-view" ngbTooltip="{{'submission.workflow.generic.view-help' | translate}}"
8-
[routerLink]="[getWorkflowItemViewRoute((workflowitem$ | async))]">
12+
[routerLink]="[getWorkflowItemViewRoute(workflowitem)]">
913
<i class="fa fa-info-circle"></i> {{"submission.workflow.generic.view" | translate}}
1014
</button>
1115

12-
<ds-claimed-task-actions-loader [option]="returnToPoolOption" [object]="object"
13-
(processCompleted)="this.processCompleted.emit($event)">
16+
<ds-claimed-task-actions-loader [item]="item"
17+
[option]="returnToPoolOption"
18+
[object]="object"
19+
[workflowitem]="workflowitem"
20+
(processCompleted)="this.processCompleted.emit($event)">
1421
</ds-claimed-task-actions-loader>
1522
</div>
1623
</ng-container>

src/app/shared/mydspace-actions/claimed-task/claimed-task-actions.component.spec.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
33
import { Router } from '@angular/router';
44

55
import { of as observableOf } from 'rxjs';
6-
import { cold } from 'jasmine-marbles';
76
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
87

98
import { TranslateLoaderMock } from '../../mocks/translate-loader.mock';
@@ -123,7 +122,9 @@ describe('ClaimedTaskActionsComponent', () => {
123122
beforeEach(() => {
124123
fixture = TestBed.createComponent(ClaimedTaskActionsComponent);
125124
component = fixture.componentInstance;
125+
component.item = item;
126126
component.object = mockObject;
127+
component.workflowitem = workflowitem;
127128
notificationsServiceStub = TestBed.inject(NotificationsService as any);
128129
router = TestBed.inject(Router as any);
129130
fixture.detectChanges();
@@ -133,11 +134,11 @@ describe('ClaimedTaskActionsComponent', () => {
133134
component.object = null;
134135
component.initObjects(mockObject);
135136

137+
expect(component.item).toEqual(item);
138+
136139
expect(component.object).toEqual(mockObject);
137140

138-
expect(component.workflowitem$).toBeObservable(cold('(b|)', {
139-
b: rdWorkflowitem.payload
140-
}));
141+
expect(component.workflowitem).toEqual(workflowitem);
141142
});
142143

143144
it('should reload page on process completed', waitForAsync(() => {

src/app/shared/mydspace-actions/claimed-task/claimed-task-actions.component.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@ import { Component, Injector, Input, OnInit } from '@angular/core';
22
import { Router } from '@angular/router';
33

44
import { Observable } from 'rxjs';
5-
import { filter, map, take } from 'rxjs/operators';
65
import { TranslateService } from '@ngx-translate/core';
76

87
import { ClaimedTaskDataService } from '../../../core/tasks/claimed-task-data.service';
98
import { ClaimedTask } from '../../../core/tasks/models/claimed-task-object.model';
10-
import { isNotUndefined } from '../../empty.util';
119
import { WorkflowItem } from '../../../core/submission/models/workflowitem.model';
1210
import { RemoteData } from '../../../core/data/remote-data';
1311
import { MyDSpaceActionsComponent } from '../mydspace-actions';
@@ -18,6 +16,7 @@ import { WorkflowAction } from '../../../core/tasks/models/workflow-action-objec
1816
import { WorkflowActionDataService } from '../../../core/data/workflow-action-data.service';
1917
import { WORKFLOW_TASK_OPTION_RETURN_TO_POOL } from './return-to-pool/claimed-task-actions-return-to-pool.component';
2018
import { getWorkflowItemViewRoute } from '../../../workflowitems-edit-page/workflowitems-edit-page-routing-paths';
19+
import { Item } from '../../../core/shared/item.model';
2120

2221
/**
2322
* This component represents actions related to ClaimedTask object.
@@ -34,10 +33,15 @@ export class ClaimedTaskActionsComponent extends MyDSpaceActionsComponent<Claime
3433
*/
3534
@Input() object: ClaimedTask;
3635

36+
/**
37+
* The item object that belonging to the ClaimedTask object
38+
*/
39+
@Input() item: Item;
40+
3741
/**
3842
* The workflowitem object that belonging to the ClaimedTask object
3943
*/
40-
public workflowitem$: Observable<WorkflowItem>;
44+
@Input() workflowitem: WorkflowItem;
4145

4246
/**
4347
* The workflow action available for this task
@@ -87,11 +91,6 @@ export class ClaimedTaskActionsComponent extends MyDSpaceActionsComponent<Claime
8791
*/
8892
initObjects(object: ClaimedTask) {
8993
this.object = object;
90-
91-
this.workflowitem$ = (this.object.workflowitem as Observable<RemoteData<WorkflowItem>>).pipe(
92-
filter((rd: RemoteData<WorkflowItem>) => ((!rd.isRequestPending) && isNotUndefined(rd.payload))),
93-
map((rd: RemoteData<WorkflowItem>) => rd.payload),
94-
take(1));
9594
}
9695

9796
/**

src/app/shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-loader.component.spec.ts

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ClaimedTaskActionsLoaderComponent } from './claimed-task-actions-loader.component';
2-
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
2+
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
33
import { ChangeDetectionStrategy, Injector, NO_ERRORS_SCHEMA } from '@angular/core';
44
import { ClaimedTaskActionsDirective } from './claimed-task-actions.directive';
55
import { ClaimedTask } from '../../../../core/tasks/models/claimed-task-object.model';
@@ -15,6 +15,8 @@ import { RequestService } from '../../../../core/data/request.service';
1515
import { PoolTaskDataService } from '../../../../core/tasks/pool-task-data.service';
1616
import { getMockSearchService } from '../../../mocks/search-service.mock';
1717
import { getMockRequestService } from '../../../mocks/request.service.mock';
18+
import { Item } from '../../../../core/shared/item.model';
19+
import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model';
1820

1921
const searchService = getMockSearchService();
2022

@@ -27,6 +29,37 @@ describe('ClaimedTaskActionsLoaderComponent', () => {
2729
const option = 'test_option';
2830
const object = Object.assign(new ClaimedTask(), { id: 'claimed-task-1' });
2931

32+
const item = Object.assign(new Item(), {
33+
metadata: {
34+
'dc.title': [
35+
{
36+
language: 'en_US',
37+
value: 'This is just another title'
38+
}
39+
],
40+
'dc.type': [
41+
{
42+
language: null,
43+
value: 'Article'
44+
}
45+
],
46+
'dc.contributor.author': [
47+
{
48+
language: 'en_US',
49+
value: 'Smith, Donald'
50+
}
51+
],
52+
'dc.date.issued': [
53+
{
54+
language: null,
55+
value: '2015-06-26'
56+
}
57+
]
58+
}
59+
});
60+
61+
const workflowitem = Object.assign(new WorkflowItem(), { id: '333' });
62+
3063
beforeEach(waitForAsync(() => {
3164
TestBed.configureTestingModule({
3265
imports: [TranslateModule.forRoot()],
@@ -52,8 +85,10 @@ describe('ClaimedTaskActionsLoaderComponent', () => {
5285
beforeEach(waitForAsync(() => {
5386
fixture = TestBed.createComponent(ClaimedTaskActionsLoaderComponent);
5487
comp = fixture.componentInstance;
88+
comp.item = item;
5589
comp.object = object;
5690
comp.option = option;
91+
comp.workflowitem = workflowitem;
5792
spyOn(comp, 'getComponentByWorkflowTaskOption').and.returnValue(ClaimedTaskActionsEditMetadataComponent);
5893

5994
fixture.detectChanges();

0 commit comments

Comments
 (0)