import {Component, HostListener, Input, OnDestroy, OnInit} from "@angular/core"; import {Annotation, AnnotationService} from "./annotation.service"; import {ResultLandingInfo} from "../../utils/entities/resultLandingInfo"; import {EnvProperties} from "../../utils/properties/env-properties"; import {properties} from "../../../../environments/environment"; @Component({ selector: 'b2note', template: `
Annotations
`, styleUrls: ['annotation.css'] }) export class AnnotationComponent implements OnInit, OnDestroy { @Input() public landingInfo: ResultLandingInfo = null; @Input() public id: string = null; public properties: EnvProperties = properties; public url: string = null; public pid: string = null; public keywords: string[] = []; public visible: boolean = false; public annotations: Annotation[] = []; public annotationSize: number = 3; public visibleAnnotations: number; constructor(private annotationService: AnnotationService) { } @HostListener('window:message', ['$event']) public onChange(event) { if(this.properties.b2noteAPIURL.includes(event.origin)) { this.getAnnotations(); } } ngOnInit(): void { this.visibleAnnotations = this.annotationSize; if (typeof window !== "undefined") { let id = this.id; this.url = window.location.href; if (this.landingInfo.deletedByInferenceIds) { id = this.landingInfo.deletedByInferenceIds[0]; this.url = this.url.replace(this.id, id); } if (this.landingInfo.identifiers && this.landingInfo.identifiers.size > 0) { if (this.landingInfo.identifiers.get('doi')) { this.pid = this.landingInfo.identifiers.get('doi')[0]; } else { const key: string = this.landingInfo.identifiers.keys().next().value; if (key) { this.pid = this.landingInfo.identifiers.get(key)[0]; } } } if(this.pid) { this.getAnnotations(); } } } private getAnnotations() { this.annotationService.getAllAnnotations(this.properties, this.pid).subscribe(annotations => { this.annotations = annotations; this.annotations.forEach(annotation => { annotation.urlSize = 3; }); }); } ngOnDestroy(): void { } public toggleAnnotation(event) { if (this.visible) { event.preventDefault(); } this.visible = !this.visible; } }