@hmcts/media-viewer
Version:
94 lines • 16.7 kB
JavaScript
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import { v4 as uuid } from 'uuid';
import moment from 'moment-timezone';
import * as fromActions from '../../../store/actions/annotation.actions';
import * as i0 from "@angular/core";
import * as i1 from "../../../toolbar/toolbar-event.service";
import * as i2 from "@ngrx/store";
import * as i3 from "@angular/common";
import * as i4 from "./rectangle/rectangle.component";
import * as i5 from "../ctx-toolbar/ctx-toolbar.component";
export class AnnotationViewComponent {
set annotation(value) {
this.anno = { ...value };
}
set selectedAnnoId(selectedId) {
if (selectedId) {
const id = this.anno.id || this.anno.redactionId; // todo make it unique
this.selected = selectedId.annotationId ? (selectedId.annotationId === id) : false;
}
}
constructor(toolbarEvents, store) {
this.toolbarEvents = toolbarEvents;
this.store = store;
this.update = new EventEmitter();
this.delete = new EventEmitter();
this.annotationClick = new EventEmitter();
}
onSelect() {
const annotationId = this.anno.id || this.anno.redactionId;
this.annotationClick.emit({ annotationId, editable: false, selected: true });
}
onRectangleUpdate(rectangle) {
const annotation = { ...this.anno };
annotation.rectangles = annotation.rectangles.filter(r => r.id !== rectangle.id);
annotation.rectangles.push(rectangle);
this.update.emit(annotation);
}
deleteHighlight() {
this.delete.emit(this.anno);
}
addOrEditComment() {
if (this.anno.comments.length === 0) {
const comment = {
annotationId: this.anno.id,
content: '',
createdBy: this.anno.createdBy,
createdByDetails: undefined,
createdDate: moment.utc().tz('Europe/London').toISOString(),
id: uuid(),
lastModifiedBy: '',
lastModifiedByDetails: undefined,
lastModifiedDate: '',
tags: [],
page: null,
pages: {},
pageHeight: null,
selected: false,
editable: false
};
this.store.dispatch(new fromActions.AddOrEditComment(comment));
}
this.selected = true;
this.annotationClick.emit({ annotationId: this.anno.id, editable: true, selected: true });
this.toolbarEvents.toggleCommentsPanel(true);
}
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AnnotationViewComponent, deps: [{ token: i1.ToolbarEventService }, { token: i2.Store }], target: i0.ɵɵFactoryTarget.Component }); }
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AnnotationViewComponent, selector: "mv-annotation", inputs: { annotation: "annotation", zoom: "zoom", rotate: "rotate", selectedAnnoId: "selectedAnnoId", pageHeight: "pageHeight", pageWidth: "pageWidth" }, outputs: { update: "update", delete: "delete", annotationClick: "annotationClick" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<div #container [tabindex]=\"anno.id\">\n <mv-ctx-toolbar *ngIf=\"selected\"\n [canDelete]=\"true\" [canComment]=\"true\"\n [rectangles]=\"anno.rectangles\"\n [zoom]=\"zoom\"\n [rotate]=\"rotate\"\n [pageHeight]=\"pageHeight\"\n [pageWidth]=\"pageWidth\"\n (deleteHighlightEvent)=\"deleteHighlight()\"\n (addOrEditCommentEvent)=\"addOrEditComment()\">\n </mv-ctx-toolbar>\n <ng-container *ngFor=\"let rectangle of anno.rectangles\">\n <mv-anno-rectangle\n (selectEvent)=\"onSelect()\"\n (updateEvent)=\"onRectangleUpdate($event)\"\n [selected]=\"selected\"\n [zoom]=\"zoom\"\n [rotate]=\"rotate\"\n [pageHeight]=\"pageHeight\"\n [pageWidth]=\"pageWidth\"\n [editable]=\"anno.rectangles.length <= 1\"\n [annoRect]=\"rectangle\"\n [color]=\"anno.color\">\n </mv-anno-rectangle>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.RectangleComponent, selector: "mv-anno-rectangle", inputs: ["color", "zoom", "rotate", "editable", "pageHeight", "pageWidth", "annoRect", "selected"], outputs: ["selectEvent", "updateEvent"] }, { kind: "component", type: i5.CtxToolbarComponent, selector: "mv-ctx-toolbar", inputs: ["zoom", "rotate", "pageHeight", "pageWidth", "canHighlight", "canBookmark", "canComment", "canDelete", "rectangles"], outputs: ["createHighlightEvent", "deleteHighlightEvent", "addOrEditCommentEvent", "createBookmarkEvent"] }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AnnotationViewComponent, decorators: [{
type: Component,
args: [{ selector: 'mv-annotation', template: "<div #container [tabindex]=\"anno.id\">\n <mv-ctx-toolbar *ngIf=\"selected\"\n [canDelete]=\"true\" [canComment]=\"true\"\n [rectangles]=\"anno.rectangles\"\n [zoom]=\"zoom\"\n [rotate]=\"rotate\"\n [pageHeight]=\"pageHeight\"\n [pageWidth]=\"pageWidth\"\n (deleteHighlightEvent)=\"deleteHighlight()\"\n (addOrEditCommentEvent)=\"addOrEditComment()\">\n </mv-ctx-toolbar>\n <ng-container *ngFor=\"let rectangle of anno.rectangles\">\n <mv-anno-rectangle\n (selectEvent)=\"onSelect()\"\n (updateEvent)=\"onRectangleUpdate($event)\"\n [selected]=\"selected\"\n [zoom]=\"zoom\"\n [rotate]=\"rotate\"\n [pageHeight]=\"pageHeight\"\n [pageWidth]=\"pageWidth\"\n [editable]=\"anno.rectangles.length <= 1\"\n [annoRect]=\"rectangle\"\n [color]=\"anno.color\">\n </mv-anno-rectangle>\n </ng-container>\n</div>\n" }]
}], ctorParameters: () => [{ type: i1.ToolbarEventService }, { type: i2.Store }], propDecorators: { annotation: [{
type: Input
}], zoom: [{
type: Input
}], rotate: [{
type: Input
}], selectedAnnoId: [{
type: Input
}], pageHeight: [{
type: Input
}], pageWidth: [{
type: Input
}], update: [{
type: Output
}], delete: [{
type: Output
}], annotationClick: [{
type: Output
}], container: [{
type: ViewChild,
args: ['container', { static: false }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ub3RhdGlvbi12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhLXZpZXdlci9zcmMvbGliL2Fubm90YXRpb25zL2Fubm90YXRpb24tc2V0L2Fubm90YXRpb24tdmlldy9hbm5vdGF0aW9uLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9saWIvYW5ub3RhdGlvbnMvYW5ub3RhdGlvbi1zZXQvYW5ub3RhdGlvbi12aWV3L2Fubm90YXRpb24tdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdsQyxPQUFPLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUdyQyxPQUFPLEtBQUssV0FBVyxNQUFNLDJDQUEyQyxDQUFDOzs7Ozs7O0FBU3pFLE1BQU0sT0FBTyx1QkFBdUI7SUFFbEMsSUFBYSxVQUFVLENBQUMsS0FBSztRQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBS0QsSUFBYSxjQUFjLENBQUMsVUFBb0M7UUFDOUQsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsc0JBQXNCO1lBQ3hFLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxLQUFLLEVB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NEdBS1osVUFBVTtzQkFBdEIsS0FBSztnQkFLRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNPLGNBQWM7c0JBQTFCLEtBQUs7Z0JBTUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFFb0MsU0FBUztzQkFBbkQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsgQW5ub3RhdGlvbiB9IGZyb20gJy4vYW5ub3RhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBSZWN0YW5nbGUgfSBmcm9tICcuL3JlY3RhbmdsZS9yZWN0YW5nbGUubW9kZWwnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgKiBhcyBmcm9tU3RvcmUgZnJvbSAnLi4vLi4vLi4vc3RvcmUvcmVkdWNlcnMvcmVkdWNlcnMnO1xuaW1wb3J0ICogYXMgZnJvbUFjdGlvbnMgZnJvbSAnLi4vLi4vLi4vc3RvcmUvYWN0aW9ucy9hbm5vdGF0aW9uLmFjdGlvbnMnO1xuaW1wb3J0IHsgU2VsZWN0aW9uQW5ub3RhdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9ldmVudC1zZWxlY3QubW9kZWwnO1xuaW1wb3J0IHsgVG9vbGJhckV2ZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3Rvb2xiYXIvdG9vbGJhci1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1lbnQgfSBmcm9tICcuLi8uLi9jb21tZW50LXNldC9jb21tZW50L2NvbW1lbnQubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdi1hbm5vdGF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Fubm90YXRpb24tdmlldy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQW5ub3RhdGlvblZpZXdDb21wb25lbnQgeyAgLy8gdG9kbyByZW5hbWUgdGhpcyB0byBzZWxlY3Rpb24gdmV3IGNcblxuICBASW5wdXQoKSBzZXQgYW5ub3RhdGlvbih2YWx1ZSkge1xuICAgIHRoaXMuYW5ubyA9IHsgLi4udmFsdWUgfTtcbiAgfVxuICBhbm5vOiBBbm5vdGF0aW9uO1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgem9vbTogbnVtYmVyO1xuICBASW5wdXQoKSByb3RhdGU6IG51bWJlcjtcbiAgQElucHV0KCkgc2V0IHNlbGVjdGVkQW5ub0lkKHNlbGVjdGVkSWQ6IHsgYW5ub3RhdGlvbklkOiBzdHJpbmcgfSkge1xuICAgIGlmIChzZWxlY3RlZElkKSB7XG4gICAgICBjb25zdCBpZCA9IHRoaXMuYW5uby5pZCB8fCB0aGlzLmFubm8ucmVkYWN0aW9uSWQ7IC8vIHRvZG8gbWFrZSBpdCB1bmlxdWVcbiAgICAgIHRoaXMuc2VsZWN0ZWQgPSBzZWxlY3RlZElkLmFubm90YXRpb25JZCA/IChzZWxlY3RlZElkLmFubm90YXRpb25JZCA9PT0gaWQpIDogZmFsc2U7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpIHBhZ2VIZWlnaHQ6IG51bWJlcjtcbiAgQElucHV0KCkgcGFnZVdpZHRoOiBudW1iZXI7XG4gIEBPdXRwdXQoKSB1cGRhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPEFubm90YXRpb24+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPEFubm90YXRpb24+KCk7XG4gIEBPdXRwdXQoKSBhbm5vdGF0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdGlvbkFubm90YXRpb24+KCk7XG5cbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGNvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRvb2xiYXJFdmVudHM6IFRvb2xiYXJFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8ZnJvbVN0b3JlLkFubm90YXRpb25TZXRTdGF0ZT5cbiAgKSB7IH1cblxuICBwdWJsaWMgb25TZWxlY3QoKSB7XG4gICAgY29uc3QgYW5ub3RhdGlvbklkID0gdGhpcy5hbm5vLmlkIHx8IHRoaXMuYW5uby5yZWRhY3Rpb25JZDtcbiAgICB0aGlzLmFubm90YXRpb25DbGljay5lbWl0KHsgYW5ub3RhdGlvbklkLCBlZGl0YWJsZTogZmFsc2UsIHNlbGVjdGVkOiB0cnVlIH0pO1xuICB9XG5cbiAgcHVibGljIG9uUmVjdGFuZ2xlVXBkYXRlKHJlY3RhbmdsZTogUmVjdGFuZ2xlKSB7XG4gICAgY29uc3QgYW5ub3RhdGlvbiA9IHsgLi4udGhpcy5hbm5vIH07XG4gICAgYW5ub3RhdGlvbi5yZWN0YW5nbGVzID0gYW5ub3RhdGlvbi5yZWN0YW5nbGVzLmZpbHRlcihyID0+IHIuaWQgIT09IHJlY3RhbmdsZS5pZCk7XG4gICAgYW5ub3RhdGlvbi5yZWN0YW5nbGVzLnB1c2gocmVjdGFuZ2xlKTtcbiAgICB0aGlzLnVwZGF0ZS5lbWl0KGFubm90YXRpb24pO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZUhpZ2hsaWdodCgpIHtcbiAgICB0aGlzLmRlbGV0ZS5lbWl0KHRoaXMuYW5ubyk7XG4gIH1cblxuICBwdWJsaWMgYWRkT3JFZGl0Q29tbWVudCgpIHtcbiAgICBpZiAodGhpcy5hbm5vLmNvbW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3QgY29tbWVudDogQ29tbWVudCA9IHtcbiAgICAgICAgYW5ub3RhdGlvbklkOiB0aGlzLmFubm8uaWQsXG4gICAgICAgIGNvbnRlbnQ6ICcnLFxuICAgICAgICBjcmVhdGVkQnk6IHRoaXMuYW5uby5jcmVhdGVkQnksXG4gICAgICAgIGNyZWF0ZWRCeURldGFpbHM6IHVuZGVmaW5lZCxcbiAgICAgICAgY3JlYXRlZERhdGU6IG1vbWVudC51dGMoKS50eignRXVyb3BlL0xvbmRvbicpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGlkOiB1dWlkKCksXG4gICAgICAgIGxhc3RNb2RpZmllZEJ5OiAnJyxcbiAgICAgICAgbGFzdE1vZGlmaWVkQnlEZXRhaWxzOiB1bmRlZmluZWQsXG4gICAgICAgIGxhc3RNb2RpZmllZERhdGU6ICcnLFxuICAgICAgICB0YWdzOiBbXSxcbiAgICAgICAgcGFnZTogbnVsbCxcbiAgICAgICAgcGFnZXM6IHt9LFxuICAgICAgICBwYWdlSGVpZ2h0OiBudWxsLFxuICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIGVkaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IGZyb21BY3Rpb25zLkFkZE9yRWRpdENvbW1lbnQoY29tbWVudCkpO1xuXG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWQgPSB0cnVlO1xuICAgIHRoaXMuYW5ub3RhdGlvbkNsaWNrLmVtaXQoeyBhbm5vdGF0aW9uSWQ6IHRoaXMuYW5uby5pZCwgZWRpdGFibGU6IHRydWUsIHNlbGVjdGVkOiB0cnVlIH0pO1xuICAgIHRoaXMudG9vbGJhckV2ZW50cy50b2dnbGVDb21tZW50c1BhbmVsKHRydWUpO1xuICB9XG59XG4iLCI8ZGl2ICNjb250YWluZXIgW3RhYmluZGV4XT1cImFubm8uaWRcIj5cbiAgPG12LWN0eC10b29sYmFyICpuZ0lmPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgW2NhbkRlbGV0ZV09XCJ0cnVlXCIgW2NhbkNvbW1lbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbcmVjdGFuZ2xlc109XCJhbm5vLnJlY3RhbmdsZXNcIlxuICAgICAgICAgICAgICAgICAgW3pvb21dPVwiem9vbVwiXG4gICAgICAgICAgICAgICAgICBbcm90YXRlXT1cInJvdGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbcGFnZUhlaWdodF09XCJwYWdlSGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIFtwYWdlV2lkdGhdPVwicGFnZVdpZHRoXCJcbiAgICAgICAgICAgICAgICAgIChkZWxldGVIaWdobGlnaHRFdmVudCk9XCJkZWxldGVIaWdobGlnaHQoKVwiXG4gICAgICAgICAgICAgICAgICAoYWRkT3JFZGl0Q29tbWVudEV2ZW50KT1cImFkZE9yRWRpdENvbW1lbnQoKVwiPlxuICA8L212LWN0eC10b29sYmFyPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByZWN0YW5nbGUgb2YgYW5uby5yZWN0YW5nbGVzXCI+XG4gICAgPG12LWFubm8tcmVjdGFuZ2xlXG4gICAgICAoc2VsZWN0RXZlbnQpPVwib25TZWxlY3QoKVwiXG4gICAgICAodXBkYXRlRXZlbnQpPVwib25SZWN0YW5nbGVVcGRhdGUoJGV2ZW50KVwiXG4gICAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRcIlxuICAgICAgW3pvb21dPVwiem9vbVwiXG4gICAgICBbcm90YXRlXT1cInJvdGF0ZVwiXG4gICAgICBbcGFnZUhlaWdodF09XCJwYWdlSGVpZ2h0XCJcbiAgICAgIFtwYWdlV2lkdGhdPVwicGFnZVdpZHRoXCJcbiAgICAgIFtlZGl0YWJsZV09XCJhbm5vLnJlY3RhbmdsZXMubGVuZ3RoIDw9IDFcIlxuICAgICAgW2Fubm9SZWN0XT1cInJlY3RhbmdsZVwiXG4gICAgICBbY29sb3JdPVwiYW5uby5jb2xvclwiPlxuICAgIDwvbXYtYW5uby1yZWN0YW5nbGU+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=