import {Component, EventEmitter, Input, Output, SimpleChanges} from '@angular/core'; import {ActivatedRoute} from "@angular/router"; import {Subscriber} from "rxjs"; import {SearchResult} from "../../utils/entities/searchResult"; import {EnvProperties} from "../../utils/properties/env-properties"; import {RouterHelper} from "../../utils/routerHelper.class"; import {ErrorCodes} from "../../utils/properties/errorCodes"; import {ResultPreview} from "../../utils/result-preview/result-preview"; import {properties} from "../../../../environments/environment"; import {Session} from "../../login/utils/helper.class"; import {OrcidService} from "../orcid.service"; @Component({ selector: 'my-orcid-result', templateUrl:'searchMyOrcidResults.component.html' }) export class searcMyOrcidResultsComponent { @Input() results: SearchResult[]; @Input() status: number; @Input() type: string; @Input() properties:EnvProperties; @Input() previewResults:ResultPreview[]; public urlParam: string; public linkToAdvancedSearchPage: string; public errorCodes:ErrorCodes = new ErrorCodes(); public routerHelper:RouterHelper = new RouterHelper(); public errorMessage: string = "No results found"; @Output() pageChange = new EventEmitter(); @Input() currentPage: number = 0; @Input() totalResults: number; @Input() resultsPerPage: number = 5; sub; constructor (private route: ActivatedRoute, private orcidService: OrcidService) {} ngOnDestroy() { if (this.sub instanceof Subscriber) { this.sub.unsubscribe(); } } ngOnInit() { if(this.type == "publication") { this.linkToAdvancedSearchPage = this.properties.searchLinkToAdvancedPublications; this.urlParam = "articleId"; } else if(this.type == "dataset") { this.linkToAdvancedSearchPage = this.properties.searchLinkToAdvancedDatasets; this.urlParam = "datasetId"; } else if(this.type == "software") { this.linkToAdvancedSearchPage = this.properties.searchLinkToAdvancedSoftware; this.urlParam = "softwareId"; } else if(this.type == "other") { this.linkToAdvancedSearchPage = this.properties.searchLinkToAdvancedOrps; this.urlParam = "orpId"; } this.properties = properties; } // ngOnChanges(changes: SimpleChanges): void { // if (changes.results) { // this.initialize(); // } // } public quote(params: string):string { return '"'+params+'"'; } public getResultPreview(result: SearchResult): ResultPreview { return ResultPreview.searchResultConvert(result, (result.entityType)?result.entityType:this.type); } initialize() { this.previewResults = []; for (let result of this.results) { this.previewResults.push(this.getResultPreview(result)); } if (Session.isLoggedIn() && this.results && this.results.length > 0) { this.orcidService.getLocalWorksByPids(this.previewResults.map( previewResult => { if (previewResult.identifiers) { let pidsArray: string[] = []; for (let key of Array.from(previewResult.identifiers.keys())) { pidsArray = pidsArray.concat(previewResult.identifiers.get(key)); } return pidsArray;//.join(); } })).subscribe( works => { for (let i = 0; i < this.previewResults.length; i++) { if (this.previewResults[i].identifiers) { this.previewResults[i].orcidPutCodes = []; this.previewResults[i].orcidUpdateDates = []; works[i].forEach(work => { this.previewResults[i].orcidPutCodes.push(work['putCode']); this.previewResults[i].orcidUpdateDates.push(work['creationDate']); }); // this.previewResults[i].orcidPutCodes = works[i].map(work => work['putCode']); // this.previewResults[i].orcidUpdateDates = works[i] // console.debug(i, this.previewResults[i].orcidPutCodes); } } }, error => { } ); } } public pageChanged($event) { this.pageChange.emit($event); } public totalPages(totalResults: number): number { let totalPages:any = totalResults/this.resultsPerPage; if(!(Number.isInteger(totalPages))) { totalPages = (parseInt(totalPages, this.resultsPerPage) + 1); } return totalPages; } }