diff --git a/claims/claim-utils/service/searchCrossref.service.ts b/claims/claim-utils/service/searchCrossref.service.ts index 16372b61..9448013c 100644 --- a/claims/claim-utils/service/searchCrossref.service.ts +++ b/claims/claim-utils/service/searchCrossref.service.ts @@ -2,8 +2,10 @@ import {throwError as observableThrowError} from 'rxjs'; import {Injectable} from '@angular/core'; import {HttpClient} from '@angular/common/http'; import {ClaimEntity, ClaimResult} from '../claimHelper.class'; -import {map} from "rxjs/operators"; +import {map, timeout} from "rxjs/operators"; import {EnvProperties} from "../../../utils/properties/env-properties"; +import {properties} from "../../../../../environments/environment"; +import {StringUtils} from "../../../utils/string-utils.class"; @Injectable() export class SearchCrossrefService { @@ -20,7 +22,9 @@ export class SearchCrossrefService { } - searchCrossrefByDOIs(DOIs: string[], properties: EnvProperties, parse: boolean = false): any { + searchCrossrefByDOIs(DOIs: string[], properties: EnvProperties, parse: boolean = false, file: boolean = false): any { + let timeoutTime: number = properties.environment == "production" ? 6000 : 12000; + // let timeoutTimeForFile: number = 60000; var doisParams = ""; for (var i = 0; i < DOIs.length; i++) { @@ -28,11 +32,21 @@ export class SearchCrossrefService { } let url = properties.searchCrossrefAPIURL + '?filter=' + doisParams; return this.http.get(url) - //.map(request => request.json().message) - .pipe(map(request => request['message'])) - .pipe(map(request => [request["total-results"], parse ? this.parse(request['items']) : request])) - //.catch(this.handleError); + // .pipe(timeout(file ? timeoutTimeForFile : (timeoutTime))) + .pipe(timeout(timeoutTime)) + .pipe(map(request => request['message'])) + .pipe(map(request => [request["total-results"], parse ? this.parse(request['items']) : request])) } + + searchCrossrefByDOI(DOI: string): any { + let timeoutTimeForFile: number = 20000; + + let url = properties.searchCrossrefAPIURL + '/' + StringUtils.URIEncode(DOI); + return this.http.get(url) + .pipe(timeout(timeoutTimeForFile)) + .pipe(map(request => request['message'])) + .pipe(map(request => this.parse(request))) + } searchCrossrefByMultipleDOIs(dois: string[], properties: EnvProperties, parse: boolean = false): any { let url = properties.searchCrossrefAPIURL + '?filter=doi:'; for (var i = 0; i < dois.length; i++) { @@ -56,8 +70,11 @@ export class SearchCrossrefService { parse(response): ClaimEntity[] { const results: ClaimEntity[] = []; - for (let i = 0; i < response.length; i++) { - const item = response[i]; + let length = Array.isArray(response) ? response.length : 1; + + for (let i = 0; i < length; i++) { + const item = Array.isArray(response) ? response[i] : response; + const entity: ClaimEntity = new ClaimEntity(); entity.result = new ClaimResult(); entity.result.publisher = null; diff --git a/claims/claim-utils/service/searchDatacite.service.ts b/claims/claim-utils/service/searchDatacite.service.ts index fa8dfbae..52854ed5 100644 --- a/claims/claim-utils/service/searchDatacite.service.ts +++ b/claims/claim-utils/service/searchDatacite.service.ts @@ -3,7 +3,7 @@ import {Injectable} from '@angular/core'; import {HttpClient} from '@angular/common/http'; import {EnvProperties} from '../../../utils/properties/env-properties'; import {ClaimEntity, ClaimResult} from '../claimHelper.class'; -import {catchError, map} from 'rxjs/operators'; +import {catchError, map, timeout} from 'rxjs/operators'; import {properties} from "../../../../../environments/environment"; @@ -21,10 +21,14 @@ export class SearchDataciteService { //.catch(this.handleError); } - getDataciteResultByDOI(doi: string, properties: EnvProperties, parse: boolean = false): any { + getDataciteResultByDOI(doi: string, properties: EnvProperties, parse: boolean = false, file: boolean = false): any { + let timeoutTime: number = properties.environment == "production" ? 6000 : 12000; + let timeoutTimeForFile: number = 20000; + let url = properties.searchDataciteAPIURL + '/' + doi; let key = url; return this.http.get((properties.useCache) ? (properties.cacheUrl + encodeURIComponent(url)) : url) + .pipe(timeout(file ? timeoutTimeForFile : (timeoutTime))) .pipe(map(request => (parse ? SearchDataciteService.parse([request["data"]])[0] : request)), catchError(err => of(null))); } diff --git a/claims/linking/bulkClaim/bulkClaim.component.ts b/claims/linking/bulkClaim/bulkClaim.component.ts index 29f20728..fac882b3 100644 --- a/claims/linking/bulkClaim/bulkClaim.component.ts +++ b/claims/linking/bulkClaim/bulkClaim.component.ts @@ -21,14 +21,16 @@ declare var UIkit: any;
-
- - Upload a DOI's CSV file +
+ + + Upload a DOI's CSV file + -   +  
@@ -107,17 +109,16 @@ export class BulkClaimComponent { exceedsLimit = false; @Input() basketLimit ; tooltip = ` -
-
-
CSV format:
"DOI","ACCESS_MODE","DATE"
-
-
-
- DOI is required
-
- Access mode:
OPEN, CLOSED, EMBARGO
-
- Embargo end date:
YYYY-MM-DD
-
-
-
`; +
+
Up to 100 DOIs
+
CSV format:
"DOI","ACCESS_MODE","DATE"
+
+
+
- DOI is required
+
- Access mode:
OPEN, CLOSED, EMBARGO
+
- Embargo end date:
YYYY-MM-DD
+
+
`; constructor(private _searchCrossrefService: SearchCrossrefService, private _searchDataciteService: SearchDataciteService) { this.filesToUpload = []; } @@ -247,11 +248,12 @@ export class BulkClaimComponent { } fetchResult(id: string, accessMode: string, date: string, row: number) { - this.subscriptions.push(this._searchCrossrefService.searchCrossrefByDOIs([id], this.properties, true).subscribe( + // this.subscriptions.push(this._searchCrossrefService.searchCrossrefByDOIs([id], this.properties, true, true).subscribe( + this.subscriptions.push(this._searchCrossrefService.searchCrossrefByDOI(id).subscribe( data => { - const result:ClaimEntity = data[1][0]; - if (data[1].length > 0) { + if (data.length > 0) { + const result:ClaimEntity = data[0]; this.foundIds.push(id); result.result.accessRights = accessMode; result.result.embargoEndDate = date; diff --git a/sdg/sdg.component.html b/sdg/sdg.component.html index 2bad4bed..1acb5d08 100644 --- a/sdg/sdg.component.html +++ b/sdg/sdg.component.html @@ -18,6 +18,10 @@
We have developed a classification scheme for UN Sustainable Development Goals, to view contributions of research towards complex challenges for humanity such as climate change, biodiversity loss, pollution and poverty reduction. + +
diff --git a/timeout-interceptor.service.ts b/timeout-interceptor.service.ts index 4737ab60..d796a751 100644 --- a/timeout-interceptor.service.ts +++ b/timeout-interceptor.service.ts @@ -9,7 +9,9 @@ export const DEFAULT_TIMEOUT = new InjectionToken('defaultTimeout'); @Injectable() export class TimeoutInterceptor implements HttpInterceptor { - private static TIMEOUT_WHITELIST = [properties.csvAPIURL, properties.registryUrl, properties.claimsAPIURL]; + // timeout inside services for: properties.searchCrossrefAPIURL, properties.searchDataciteAPIURL + private static TIMEOUT_WHITELIST = [properties.csvAPIURL, properties.registryUrl, properties.claimsAPIURL, + properties.searchCrossrefAPIURL, properties.searchDataciteAPIURL]; constructor(@Inject(DEFAULT_TIMEOUT) protected defaultTimeout: number, @Inject(PLATFORM_ID) private platformId: any) { } diff --git a/utils/modal/loading.component.ts b/utils/modal/loading.component.ts index 81c84c23..aafa6789 100644 --- a/utils/modal/loading.component.ts +++ b/utils/modal/loading.component.ts @@ -1,10 +1,21 @@ -import {Component, ViewEncapsulation, ComponentRef, ElementRef, Input, EventEmitter, Output} from '@angular/core'; +import { + Component, + ViewEncapsulation, + ComponentRef, + ElementRef, + Input, + EventEmitter, + Output, + ViewChild +} from '@angular/core'; +declare var UIkit: any; @Component({ selector: 'modal-loading', template: ` - -
+ + +
@@ -23,6 +34,23 @@ import {Component, ViewEncapsulation, ComponentRef, ElementRef, Input, EventEmit
+ + + + + + + + + + + + + + + + +