@hmcts/annotation-ui-lib
Version:
PDF Viewer and ability to highlight text with and comment tracking
155 lines • 14.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Input, ViewChild } from '@angular/core';
import { ViewerAnchorDirective } from './viewer-anchor.directive';
import { DocumentViewerService } from './document-viewer.service';
import { ViewerFactoryService } from '../viewers/viewer-factory.service';
import { UrlFixerService } from '../data/url-fixer.service';
import { EmLoggerService } from '../logging/em-logger.service';
import { AnnotationStoreService } from '../data/annotation-store.service';
export class DocumentViewerComponent {
/**
* @param {?} log
* @param {?} viewerFactoryService
* @param {?} annotationStoreService
* @param {?} urlFixer
* @param {?} documentViewerService
*/
constructor(log, viewerFactoryService, annotationStoreService, urlFixer, documentViewerService) {
this.log = log;
this.viewerFactoryService = viewerFactoryService;
this.annotationStoreService = annotationStoreService;
this.urlFixer = urlFixer;
this.documentViewerService = documentViewerService;
this.url = '';
this.rotate = false;
log.setClass('DocumentViewerComponent');
}
/**
* @return {?}
*/
ngOnInit() {
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
if (changes.url || changes.annotate) {
this.buildViewer();
}
}
/**
* @return {?}
*/
buildViewer() {
if (!this.url) {
this.log.error('url is required argument');
throw new Error('url is required argument');
}
if (this.isDM) {
this.documentViewerService.getDocumentMetadata(`${this.urlFixer.fixDm(this.url, this.baseUrl)}`).subscribe(metadata => {
this.log.info(metadata);
if (metadata && metadata._links) {
/** @type {?} */
const url = this.urlFixer.fixDm(metadata._links.binary.href, this.baseUrl);
/** @type {?} */
const dmDocumentId = this.viewerFactoryService.getDocumentId(metadata);
if (this.annotate) {
this.annotationStoreService.getAnnotationSet(this.baseUrl, dmDocumentId).subscribe(annotationSet => {
this.buildComponent(metadata, url, annotationSet.body);
});
}
else {
this.buildComponent(metadata, url, null);
}
}
}, err => {
this.log.error('An error has occured while fetching document' + err);
this.error = err;
});
}
else {
this.viewerComponent = this.viewerFactoryService.buildComponent(this.viewerAnchor.viewContainerRef, this.contentType, this.url, this.baseUrl, this.url, this.annotate, null, this.rotate);
}
}
/**
* @param {?} metadata
* @param {?} url
* @param {?=} annotationSet
* @return {?}
*/
buildComponent(metadata, url, annotationSet) {
this.viewerFactoryService.buildComponent(this.viewerAnchor.viewContainerRef, metadata.mimeType, url, this.baseUrl, metadata._links.self.href, this.annotate, annotationSet, this.rotate);
}
}
DocumentViewerComponent.decorators = [
{ type: Component, args: [{
selector: 'app-document-viewer',
template: "\n<ng-template appViewerAnchor></ng-template>\n\n<div class=\"grid-row\">\n <div *ngIf=\"error\" class=\"error-summary\" role=\"alert\" aria-labelledby=\"error-summary-heading-example-1\" tabindex=\"-1\">\n <h2 class=\"heading-medium error-summary-heading\" id=\"error-summary-heading-example-1\">There was an error while loading your document.</h2>\n <p>Response status was {{error.status}}.</p>\n </div>\n</div>\n\n"
}] }
];
DocumentViewerComponent.ctorParameters = () => [
{ type: EmLoggerService },
{ type: ViewerFactoryService },
{ type: AnnotationStoreService },
{ type: UrlFixerService },
{ type: DocumentViewerService }
];
DocumentViewerComponent.propDecorators = {
viewerAnchor: [{ type: ViewChild, args: [ViewerAnchorDirective,] }],
url: [{ type: Input }],
annotate: [{ type: Input }],
baseUrl: [{ type: Input }],
isDM: [{ type: Input }],
contentType: [{ type: Input }],
rotate: [{ type: Input }]
};
if (false) {
/** @type {?} */
DocumentViewerComponent.prototype.viewerAnchor;
/** @type {?} */
DocumentViewerComponent.prototype.url;
/** @type {?} */
DocumentViewerComponent.prototype.annotate;
/** @type {?} */
DocumentViewerComponent.prototype.baseUrl;
/** @type {?} */
DocumentViewerComponent.prototype.isDM;
/** @type {?} */
DocumentViewerComponent.prototype.contentType;
/** @type {?} */
DocumentViewerComponent.prototype.rotate;
/** @type {?} */
DocumentViewerComponent.prototype.viewerComponent;
/** @type {?} */
DocumentViewerComponent.prototype.error;
/**
* @type {?}
* @private
*/
DocumentViewerComponent.prototype.log;
/**
* @type {?}
* @private
*/
DocumentViewerComponent.prototype.viewerFactoryService;
/**
* @type {?}
* @private
*/
DocumentViewerComponent.prototype.annotationStoreService;
/**
* @type {?}
* @private
*/
DocumentViewerComponent.prototype.urlFixer;
/**
* @type {?}
* @private
*/
DocumentViewerComponent.prototype.documentViewerService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtdmlld2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BobWN0cy9hbm5vdGF0aW9uLXVpLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9kb2N1bWVudC12aWV3ZXIvZG9jdW1lbnQtdmlld2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQW9DLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU1RixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBTXhFLE1BQU07Ozs7Ozs7O0lBYUYsWUFBb0IsR0FBb0IsRUFDcEIsb0JBQTBDLEVBQzFDLHNCQUE4QyxFQUM5QyxRQUF5QixFQUN6QixxQkFBNEM7UUFKNUMsUUFBRyxHQUFILEdBQUcsQ0FBaUI7UUFDcEIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFkdkQsUUFBRyxHQUFHLEVBQUUsQ0FBQztRQUtULFdBQU0sR0FBRyxLQUFLLENBQUM7UUFVcEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzVDLENBQUM7Ozs7SUFFRCxRQUFRO0lBQ1IsQ0FBQzs7Ozs7SUFFRCxXQUFXLENBQUMsT0FB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QUUsYUFBYSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoSCxDQUFDOzs7WUFuRUosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxxQkFBcUI7Z0JBQy9CLHNiQUErQzthQUNsRDs7O1lBTlEsZUFBZTtZQUZmLG9CQUFvQjtZQUdyQixzQkFBc0I7WUFGckIsZUFBZTtZQUZoQixxQkFBcUI7OzsyQkFZeEIsU0FBUyxTQUFDLHFCQUFxQjtrQkFDL0IsS0FBSzt1QkFDTCxLQUFLO3NCQUNMLEtBQUs7bUJBQ0wsS0FBSzswQkFDTCxLQUFLO3FCQUNMLEtBQUs7Ozs7SUFOTiwrQ0FBc0U7O0lBQ3RFLHNDQUFrQjs7SUFDbEIsMkNBQTJCOztJQUMzQiwwQ0FBeUI7O0lBQ3pCLHVDQUF1Qjs7SUFDdkIsOENBQTZCOztJQUM3Qix5Q0FBd0I7O0lBRXhCLGtEQUFxQjs7SUFDckIsd0NBQXlCOzs7OztJQUViLHNDQUE0Qjs7Ozs7SUFDNUIsdURBQWtEOzs7OztJQUNsRCx5REFBc0Q7Ozs7O0lBQ3RELDJDQUFpQzs7Ozs7SUFDakMsd0RBQW9EIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtWaWV3ZXJBbmNob3JEaXJlY3RpdmV9IGZyb20gJy4vdmlld2VyLWFuY2hvci5kaXJlY3RpdmUnO1xuaW1wb3J0IHtEb2N1bWVudFZpZXdlclNlcnZpY2V9IGZyb20gJy4vZG9jdW1lbnQtdmlld2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmlld2VyRmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuLi92aWV3ZXJzL3ZpZXdlci1mYWN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHsgVXJsRml4ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vZGF0YS91cmwtZml4ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBFbUxvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi9sb2dnaW5nL2VtLWxvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7QW5ub3RhdGlvblN0b3JlU2VydmljZX0gZnJvbSAnLi4vZGF0YS9hbm5vdGF0aW9uLXN0b3JlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1kb2N1bWVudC12aWV3ZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kb2N1bWVudC12aWV3ZXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERvY3VtZW50Vmlld2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xuXG4gICAgQFZpZXdDaGlsZChWaWV3ZXJBbmNob3JEaXJlY3RpdmUpIHZpZXdlckFuY2hvcjogVmlld2VyQW5jaG9yRGlyZWN0aXZlO1xuICAgIEBJbnB1dCgpIHVybCA9ICcnO1xuICAgIEBJbnB1dCgpIGFubm90YXRlOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGJhc2VVcmw6IHN0cmluZztcbiAgICBASW5wdXQoKSBpc0RNOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNvbnRlbnRUeXBlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcm90YXRlID0gZmFsc2U7XG5cbiAgICB2aWV3ZXJDb21wb25lbnQ6IGFueTtcbiAgICBlcnJvcjogSHR0cEVycm9yUmVzcG9uc2U7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvZzogRW1Mb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgdmlld2VyRmFjdG9yeVNlcnZpY2U6IFZpZXdlckZhY3RvcnlTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgYW5ub3RhdGlvblN0b3JlU2VydmljZTogQW5ub3RhdGlvblN0b3JlU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIHVybEZpeGVyOiBVcmxGaXhlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBkb2N1bWVudFZpZXdlclNlcnZpY2U6IERvY3VtZW50Vmlld2VyU2VydmljZSkge1xuICAgICAgICBsb2cuc2V0Q2xhc3MoJ0RvY3VtZW50Vmlld2VyQ29tcG9uZW50Jyk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlcy51cmwgfHwgY2hhbmdlcy5hbm5vdGF0ZSkge1xuICAgICAgICAgIHRoaXMuYnVpbGRWaWV3ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJ1aWxkVmlld2VyKCkge1xuICAgICAgICBpZiAoIXRoaXMudXJsKSB7XG4gICAgICAgICAgICB0aGlzLmxvZy5lcnJvcigndXJsIGlzIHJlcXVpcmVkIGFyZ3VtZW50Jyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VybCBpcyByZXF1aXJlZCBhcmd1bWVudCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzRE0pIHtcbiAgICAgICAgICB0aGlzLmRvY3VtZW50Vmlld2VyU2VydmljZS5nZXREb2N1bWVudE1ldGFkYXRhKGAke3RoaXMudXJsRml4ZXIuZml4RG0odGhpcy51cmwsIHRoaXMuYmFzZVVybCl9YCkuc3Vic2NyaWJlKG1ldGFkYXRhID0+IHtcblxuICAgICAgICAgICAgdGhpcy5sb2cuaW5mbyhtZXRhZGF0YSk7XG4gICAgICAgICAgICBpZiAobWV0YWRhdGEgJiYgbWV0YWRhdGEuX2xpbmtzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMudXJsRml4ZXIuZml4RG0obWV0YWRhdGEuX2xpbmtzLmJpbmFyeS5ocmVmLCB0aGlzLmJhc2VVcmwpO1xuICAgICAgICAgICAgICBjb25zdCBkbURvY3VtZW50SWQgPSB0aGlzLnZpZXdlckZhY3RvcnlTZXJ2aWNlLmdldERvY3VtZW50SWQobWV0YWRhdGEpO1xuICAgICAgICAgICAgICBpZiAodGhpcy5hbm5vdGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYW5ub3RhdGlvblN0b3JlU2VydmljZS5nZXRBbm5vdGF0aW9uU2V0KHRoaXMuYmFzZVVybCwgZG1Eb2N1bWVudElkKS5zdWJzY3JpYmUoYW5ub3RhdGlvblNldCA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50KG1ldGFkYXRhLCB1cmwsIGFubm90YXRpb25TZXQuYm9keSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudChtZXRhZGF0YSwgdXJsLCBudWxsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZy5lcnJvcignQW4gZXJyb3IgaGFzIG9jY3VyZWQgd2hpbGUgZmV0Y2hpbmcgZG9jdW1lbnQnICsgZXJyKTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBlcnI7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52aWV3ZXJDb21wb25lbnQgPSB0aGlzLnZpZXdlckZhY3RvcnlTZXJ2aWNlLmJ1aWxkQ29tcG9uZW50KHRoaXMudmlld2VyQW5jaG9yLnZpZXdDb250YWluZXJSZWYsXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRUeXBlLCB0aGlzLnVybCwgdGhpcy5iYXNlVXJsLCB0aGlzLnVybCwgdGhpcy5hbm5vdGF0ZSwgbnVsbCwgdGhpcy5yb3RhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYnVpbGRDb21wb25lbnQobWV0YWRhdGEsIHVybCwgYW5ub3RhdGlvblNldD8pIHtcbiAgICAgIHRoaXMudmlld2VyRmFjdG9yeVNlcnZpY2UuYnVpbGRDb21wb25lbnQodGhpcy52aWV3ZXJBbmNob3Iudmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgbWV0YWRhdGEubWltZVR5cGUsIHVybCwgdGhpcy5iYXNlVXJsLCBtZXRhZGF0YS5fbGlua3Muc2VsZi5ocmVmLCB0aGlzLmFubm90YXRlLCBhbm5vdGF0aW9uU2V0LCB0aGlzLnJvdGF0ZSk7XG4gICAgfVxuXG59XG4iXX0=