@hmcts/annotation-ui-lib
Version:
PDF Viewer and ability to highlight text with and comment tracking
165 lines • 16.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { ComponentFactoryResolver, Injectable } from '@angular/core';
import { UrlFixerService } from '../data/url-fixer.service';
import { AnnotationStoreService } from '../data/annotation-store.service';
import { ImageViewerComponent } from './image-viewer/image-viewer.component';
import { UnsupportedViewerComponent } from './unsupported-viewer/unsupported-viewer.component';
import { AnnotationPdfViewerComponent } from './annotation-pdf-viewer/annotation-pdf-viewer.component';
import { EmLoggerService } from '../logging/em-logger.service';
export class ViewerFactoryService {
/**
* @param {?} componentFactoryResolver
* @param {?} annotationStoreService
* @param {?} urlFixer
* @param {?} log
*/
constructor(componentFactoryResolver, annotationStoreService, urlFixer, log) {
this.componentFactoryResolver = componentFactoryResolver;
this.annotationStoreService = annotationStoreService;
this.urlFixer = urlFixer;
this.log = log;
this.log.setClass('ViewerFactoryService');
}
/**
* @private
* @param {?} mimeType
* @return {?}
*/
static determineComponent(mimeType) {
if (ViewerFactoryService.isImage(mimeType)) {
return ImageViewerComponent;
}
return UnsupportedViewerComponent;
}
/**
* @private
* @param {?} mimeType
* @return {?}
*/
static isImage(mimeType) {
return mimeType.startsWith('image/') || mimeType === 'image';
}
/**
* @private
* @param {?} mimeType
* @return {?}
*/
static isPdf(mimeType) {
return mimeType === 'application/pdf' || mimeType === 'pdf';
}
/**
* @param {?} documentMetaData
* @return {?}
*/
getDocumentId(documentMetaData) {
/** @type {?} */
const docArray = documentMetaData._links.self.href.split('/');
return docArray[docArray.length - 1];
}
/**
* @param {?} viewContainerRef
* @param {?} contentType
* @param {?} url
* @param {?} baseUrl
* @param {?} originalUrl
* @param {?} annotate
* @param {?} annotationSet
* @param {?} rotate
* @return {?}
*/
buildComponent(viewContainerRef, contentType, url, baseUrl, originalUrl, annotate, annotationSet, rotate) {
if (ViewerFactoryService.isPdf(contentType) && annotate) {
this.log.info('Selected pdf viewer with annotations enabled');
return this.buildAnnotateUi(url, viewContainerRef, baseUrl, annotate, annotationSet, rotate);
}
else if (ViewerFactoryService.isPdf(contentType) && !annotate) {
this.log.info('Selected pdf viewer with annotations disabled');
return this.buildAnnotateUi(url, viewContainerRef, baseUrl, annotate, null, rotate);
}
else if (ViewerFactoryService.isImage(contentType)) {
this.log.info('Selected image viewer');
return this.createComponent(ImageViewerComponent, viewContainerRef, originalUrl, url, rotate);
}
else {
this.log.info('Unsupported type for viewer');
return this.createComponent(UnsupportedViewerComponent, viewContainerRef, originalUrl, url);
}
}
/**
* @param {?} url
* @param {?} viewContainerRef
* @param {?} baseUrl
* @param {?} annotate
* @param {?} annotationSet
* @param {?} rotate
* @return {?}
*/
buildAnnotateUi(url, viewContainerRef, baseUrl, annotate, annotationSet, rotate) {
viewContainerRef.clear();
/** @type {?} */
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(AnnotationPdfViewerComponent);
/** @type {?} */
const componentRef = viewContainerRef.createComponent(componentFactory);
componentRef.instance.annotate = annotate;
componentRef.instance.annotationSet = annotationSet;
componentRef.instance.outputDmDocumentId = null; // '4fbdde23-e9a7-4843-b6c0-24d5bf2140ab';
componentRef.instance.baseUrl = baseUrl;
componentRef.instance.url = url;
componentRef.instance.rotate = rotate;
return componentRef.instance;
}
/**
* @param {?} component
* @param {?} viewContainerRef
* @param {?} originalUrl
* @param {?} url
* @param {?=} rotate
* @return {?}
*/
createComponent(component, viewContainerRef, originalUrl, url, rotate) {
/** @type {?} */
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(component);
viewContainerRef.clear();
/** @type {?} */
const componentRef = viewContainerRef.createComponent(componentFactory);
componentRef.instance.originalUrl = originalUrl;
componentRef.instance.url = url;
componentRef.instance.rotate = rotate;
return componentRef.instance;
}
}
ViewerFactoryService.decorators = [
{ type: Injectable }
];
ViewerFactoryService.ctorParameters = () => [
{ type: ComponentFactoryResolver },
{ type: AnnotationStoreService },
{ type: UrlFixerService },
{ type: EmLoggerService }
];
if (false) {
/**
* @type {?}
* @private
*/
ViewerFactoryService.prototype.componentFactoryResolver;
/**
* @type {?}
* @private
*/
ViewerFactoryService.prototype.annotationStoreService;
/**
* @type {?}
* @private
*/
ViewerFactoryService.prototype.urlFixer;
/**
* @type {?}
* @private
*/
ViewerFactoryService.prototype.log;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLWZhY3Rvcnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BobWN0cy9hbm5vdGF0aW9uLXVpLWxpYi8iLCJzb3VyY2VzIjpbImxpYi92aWV3ZXJzL3ZpZXdlci1mYWN0b3J5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyx3QkFBd0IsRUFBZ0IsVUFBVSxFQUFtQixNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDMUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFFL0YsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDdkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRy9ELE1BQU07Ozs7Ozs7SUFFRixZQUFvQix3QkFBa0QsRUFDbEQsc0JBQThDLEVBQzlDLFFBQXlCLEVBQ3pCLEdBQW9CO1FBSHBCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixRQUFHLEdBQUgsR0FBRyxDQUFpQjtRQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzlDLENBQUM7Ozs7OztJQUVPLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxRQUFnQjtRQUM5QyxFQUFFLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsTUFB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QVEsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsQ0FBQywwQ0FBMEM7UUFDM0YsWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3hDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNoQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFdEMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7SUFDL0IsQ0FBQzs7Ozs7Ozs7O0lBRUQsZUFBZSxDQUFDLFNBQWMsRUFBRSxnQkFBa0MsRUFBRSxXQUFtQixFQUFFLEdBQVcsRUFBRSxNQUFnQjs7Y0FDOUcsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQztRQUN6RixnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7Y0FFbkIsWUFBWSxHQUFzQixnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUM7UUFDMUYsWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQ2hELFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNoQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDdEMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7SUFDL0IsQ0FBQzs7O1lBM0VKLFVBQVU7OztZQVRILHdCQUF3QjtZQUV2QixzQkFBc0I7WUFEdEIsZUFBZTtZQU1mLGVBQWU7Ozs7Ozs7SUFLUix3REFBMEQ7Ozs7O0lBQzFELHNEQUFzRDs7Ozs7SUFDdEQsd0NBQWlDOzs7OztJQUNqQyxtQ0FBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgQ29tcG9uZW50UmVmLCBJbmplY3RhYmxlLCBWaWV3Q29udGFpbmVyUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVybEZpeGVyU2VydmljZSB9IGZyb20gJy4uL2RhdGEvdXJsLWZpeGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQW5ub3RhdGlvblN0b3JlU2VydmljZSB9IGZyb20gJy4uL2RhdGEvYW5ub3RhdGlvbi1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IEltYWdlVmlld2VyQ29tcG9uZW50IH0gZnJvbSAnLi9pbWFnZS12aWV3ZXIvaW1hZ2Utdmlld2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVbnN1cHBvcnRlZFZpZXdlckNvbXBvbmVudCB9IGZyb20gJy4vdW5zdXBwb3J0ZWQtdmlld2VyL3Vuc3VwcG9ydGVkLXZpZXdlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSUFubm90YXRpb25TZXQgfSBmcm9tICcuLi9kYXRhL2Fubm90YXRpb24tc2V0Lm1vZGVsJztcbmltcG9ydCB7IEFubm90YXRpb25QZGZWaWV3ZXJDb21wb25lbnQgfSBmcm9tICcuL2Fubm90YXRpb24tcGRmLXZpZXdlci9hbm5vdGF0aW9uLXBkZi12aWV3ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEVtTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uL2xvZ2dpbmcvZW0tbG9nZ2VyLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVmlld2VyRmFjdG9yeVNlcnZpY2Uge1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgICAgICAgICBwcml2YXRlIGFubm90YXRpb25TdG9yZVNlcnZpY2U6IEFubm90YXRpb25TdG9yZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSB1cmxGaXhlcjogVXJsRml4ZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgbG9nOiBFbUxvZ2dlclNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5sb2cuc2V0Q2xhc3MoJ1ZpZXdlckZhY3RvcnlTZXJ2aWNlJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZGV0ZXJtaW5lQ29tcG9uZW50KG1pbWVUeXBlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKFZpZXdlckZhY3RvcnlTZXJ2aWNlLmlzSW1hZ2UobWltZVR5cGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gSW1hZ2VWaWV3ZXJDb21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFVuc3VwcG9ydGVkVmlld2VyQ29tcG9uZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGlzSW1hZ2UobWltZVR5cGU6IFN0cmluZykge1xuICAgICAgICByZXR1cm4gbWltZVR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJykgfHwgbWltZVR5cGUgPT09ICdpbWFnZSc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgaXNQZGYobWltZVR5cGU6IFN0cmluZykge1xuICAgICAgICByZXR1cm4gbWltZVR5cGUgPT09ICdhcHBsaWNhdGlvbi9wZGYnIHx8IG1pbWVUeXBlID09PSAncGRmJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RG9jdW1lbnRJZChkb2N1bWVudE1ldGFEYXRhOiBhbnkpIHtcbiAgICAgICAgY29uc3QgZG9jQXJyYXkgPSBkb2N1bWVudE1ldGFEYXRhLl9saW5rcy5zZWxmLmhyZWYuc3BsaXQoJy8nKTtcbiAgICAgICAgcmV0dXJuIGRvY0FycmF5W2RvY0FycmF5Lmxlbmd0aCAtIDFdO1xuICAgIH1cblxuICAgIGJ1aWxkQ29tcG9uZW50KHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsIGNvbnRlbnRUeXBlOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICB1cmw6IHN0cmluZywgYmFzZVVybDogc3RyaW5nLCBvcmlnaW5hbFVybDogc3RyaW5nLCBhbm5vdGF0ZTogYm9vbGVhbiwgYW5ub3RhdGlvblNldDogYW55LCByb3RhdGU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKFZpZXdlckZhY3RvcnlTZXJ2aWNlLmlzUGRmKGNvbnRlbnRUeXBlKSAmJiBhbm5vdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5sb2cuaW5mbygnU2VsZWN0ZWQgcGRmIHZpZXdlciB3aXRoIGFubm90YXRpb25zIGVuYWJsZWQnKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1aWxkQW5ub3RhdGVVaSh1cmwsIHZpZXdDb250YWluZXJSZWYsIGJhc2VVcmwsIGFubm90YXRlLCBhbm5vdGF0aW9uU2V0LCByb3RhdGUpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoVmlld2VyRmFjdG9yeVNlcnZpY2UuaXNQZGYoY29udGVudFR5cGUpICYmICFhbm5vdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5sb2cuaW5mbygnU2VsZWN0ZWQgcGRmIHZpZXdlciB3aXRoIGFubm90YXRpb25zIGRpc2FibGVkJyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5idWlsZEFubm90YXRlVWkodXJsLCB2aWV3Q29udGFpbmVyUmVmLCBiYXNlVXJsLCBhbm5vdGF0ZSwgbnVsbCwgcm90YXRlKTtcbiAgICAgICAgfSBlbHNlIGlmIChWaWV3ZXJGYWN0b3J5U2VydmljZS5pc0ltYWdlKGNvbnRlbnRUeXBlKSkge1xuICAgICAgICAgICAgdGhpcy5sb2cuaW5mbygnU2VsZWN0ZWQgaW1hZ2Ugdmlld2VyJyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVDb21wb25lbnQoSW1hZ2VWaWV3ZXJDb21wb25lbnQsIHZpZXdDb250YWluZXJSZWYsIG9yaWdpbmFsVXJsLCB1cmwsIHJvdGF0ZSk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9nLmluZm8oJ1Vuc3VwcG9ydGVkIHR5cGUgZm9yIHZpZXdlcicpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQ29tcG9uZW50KFVuc3VwcG9ydGVkVmlld2VyQ29tcG9uZW50LCB2aWV3Q29udGFpbmVyUmVmLCBvcmlnaW5hbFVybCwgdXJsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJ1aWxkQW5ub3RhdGVVaSh1cmw6IGFueSwgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiwgYmFzZVVybDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0ZTogYm9vbGVhbiwgYW5ub3RhdGlvblNldDogSUFubm90YXRpb25TZXQsIHJvdGF0ZTogYm9vbGVhbik6IENvbXBvbmVudFJlZjxhbnk+WydpbnN0YW5jZSddIHtcblxuICAgICAgdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KEFubm90YXRpb25QZGZWaWV3ZXJDb21wb25lbnQpO1xuXG4gICAgICBjb25zdCBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+ID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuYW5ub3RhdGUgPSBhbm5vdGF0ZTtcbiAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5hbm5vdGF0aW9uU2V0ID0gYW5ub3RhdGlvblNldDtcbiAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5vdXRwdXREbURvY3VtZW50SWQgPSBudWxsOyAvLyAnNGZiZGRlMjMtZTlhNy00ODQzLWI2YzAtMjRkNWJmMjE0MGFiJztcbiAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5iYXNlVXJsID0gYmFzZVVybDtcbiAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS51cmwgPSB1cmw7XG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Uucm90YXRlID0gcm90YXRlO1xuXG4gICAgICByZXR1cm4gY29tcG9uZW50UmVmLmluc3RhbmNlO1xuICAgIH1cblxuICAgIGNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQ6IGFueSwgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiwgb3JpZ2luYWxVcmw6IHN0cmluZywgdXJsOiBzdHJpbmcsIHJvdGF0ZT86IGJvb2xlYW4pIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnQpO1xuICAgICAgdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuXG4gICAgICBjb25zdCBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+ID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Uub3JpZ2luYWxVcmwgPSBvcmlnaW5hbFVybDtcbiAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS51cmwgPSB1cmw7XG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Uucm90YXRlID0gcm90YXRlO1xuICAgICAgcmV0dXJuIGNvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgICB9XG5cbn1cbiJdfQ==