@hmcts/ccd-case-ui-toolkit 7.2.57 → 7.2.58-update-all-error-message-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,6 @@
1
1
  import { Component, ElementRef } from '@angular/core';
2
2
  import { ActivatedRoute } from '@angular/router';
3
+ import { HttpErrorResponse, HttpStatusCode } from '@angular/common/http';
3
4
  import { fromEvent, of } from 'rxjs';
4
5
  import { catchError, finalize, map, switchMap, takeUntil } from 'rxjs/operators';
5
6
  import { CaseFileViewService, DocumentManagementService, LoadingService, SessionStorageService } from '../../../services';
@@ -153,8 +154,8 @@ export class CaseFileViewFieldComponent {
153
154
  this.caseFileViewService.updateDocumentCategory(cid, this.caseVersion, data.document.attribute_path, data.newCategory)
154
155
  .pipe(finalize(() => {
155
156
  this.loadingService.unregister(loadingToken);
156
- }), catchError(() => {
157
- this.errorMessages = ['You do not have permission to move this document to the selected folder.'];
157
+ }), catchError((err) => {
158
+ this.errorMessages = [this.moveDocumentError(err)];
158
159
  return of(null);
159
160
  }))
160
161
  .subscribe(res => {
@@ -178,6 +179,31 @@ export class CaseFileViewFieldComponent {
178
179
  isIcpEnabled() {
179
180
  return this.icpEnabled && ((this.icp_jurisdictions?.length < 1) || this.icp_jurisdictions.includes(this.caseNotifier?.cachedCaseView?.case_type?.jurisdiction.id));
180
181
  }
182
+ moveDocumentError(err) {
183
+ const defaultMsg = 'We couldn\'t move the document. Please try again.';
184
+ if (!(err instanceof HttpErrorResponse)) {
185
+ return defaultMsg;
186
+ }
187
+ switch (err.status) {
188
+ case HttpStatusCode.BadRequest:
189
+ // e.g. malformed PUT, invalid attribute_path, invalid target category
190
+ return 'The request was invalid. Check the document path and destination folder.';
191
+ case HttpStatusCode.Conflict:
192
+ // optimistic concurrency / stale case version
193
+ return 'This case changed since you opened it. Refresh and try again.';
194
+ case HttpStatusCode.NotFound:
195
+ return 'The document or destination folder could not be found.';
196
+ case HttpStatusCode.Forbidden:
197
+ case HttpStatusCode.Unauthorized:
198
+ return 'You do not have permission to move this document to the selected folder.';
199
+ case HttpStatusCode.ServiceUnavailable:
200
+ case HttpStatusCode.GatewayTimeout:
201
+ return 'The service is temporarily unavailable. Please try again in a moment.';
202
+ default:
203
+ // Any other status (including 500)
204
+ return defaultMsg;
205
+ }
206
+ }
181
207
  static ɵfac = function CaseFileViewFieldComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CaseFileViewFieldComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.ActivatedRoute), i0.ɵɵdirectiveInject(i2.CaseFileViewService), i0.ɵɵdirectiveInject(i2.DocumentManagementService), i0.ɵɵdirectiveInject(i2.LoadingService), i0.ɵɵdirectiveInject(i2.SessionStorageService), i0.ɵɵdirectiveInject(i3.CaseNotifier), i0.ɵɵdirectiveInject(i4.AbstractAppConfig)); };
182
208
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CaseFileViewFieldComponent, selectors: [["ccd-case-file-view-field"]], decls: 3, vars: 3, consts: [[4, "ngIf"], ["class", "govuk-grid-column-two-thirds", 4, "ngIf"], ["id", "case-file-view-field-errors", "data-module", "govuk-error-summary", 1, "govuk-error-summary", "govuk-!-margin-bottom-4"], ["role", "alert"], [1, "govuk-error-summary__title"], [1, "govuk-error-summary__body"], [1, "govuk-list", "govuk-error-summary__list"], [4, "ngFor", "ngForOf"], ["type", "button", 1, "govuk-js-link"], [1, "govuk-grid-column-two-thirds"], [1, "govuk-heading-xl"], [1, "govuk-body"], [1, "govuk-heading-l"], ["id", "case-file-view", 1, "govuk-form-group"], [1, "document-tree-container"], [1, "document-tree-container__tree", 3, "clickedDocument", "moveDocument", "categoriesAndDocuments", "allowMoving"], [1, "slider"], [1, "media-viewer-container"], [3, "url", "downloadFileName", "showToolbar", "contentType", "enableAnnotations", "enableRedactions", "height", "caseId", "multimediaPlayerEnabled", "enableICP"]], template: function CaseFileViewFieldComponent_Template(rf, ctx) { if (rf & 1) {
183
209
  i0.ɵɵtemplate(0, CaseFileViewFieldComponent_ng_container_0_Template, 8, 1, "ng-container", 0)(1, CaseFileViewFieldComponent_div_1_Template, 5, 0, "div", 1)(2, CaseFileViewFieldComponent_div_2_Template, 9, 3, "div", 0);
@@ -193,5 +219,5 @@ export class CaseFileViewFieldComponent {
193
219
  type: Component,
194
220
  args: [{ selector: 'ccd-case-file-view-field', template: "<ng-container *ngIf=\"errorMessages?.length\">\n <div\n id=\"case-file-view-field-errors\"\n class=\"govuk-error-summary govuk-!-margin-bottom-4\"\n data-module=\"govuk-error-summary\"\n >\n <div role=\"alert\">\n <h2 class=\"govuk-error-summary__title\">There is a problem</h2>\n <div class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li *ngFor=\"let errorMessage of errorMessages\">\n <button type=\"button\" class=\"govuk-js-link\">{{ errorMessage }}</button>\n </li>\n </ul>\n </div>\n </div>\n </div>\n</ng-container>\n\n<div\n *ngIf=\"getCategoriesAndDocumentsError\"\n class=\"govuk-grid-column-two-thirds\"\n>\n <h1 class=\"govuk-heading-xl\">Sorry, there is a problem with the service</h1>\n <p class=\"govuk-body\">Try again later.</p>\n</div>\n<div *ngIf=\"!getCategoriesAndDocumentsError\">\n <h2 class=\"govuk-heading-l\">Case file</h2>\n <div class=\"govuk-form-group\" id=\"case-file-view\">\n <!-- Document tree -->\n <div class=\"document-tree-container\">\n <ccd-case-file-view-folder \n class=\"document-tree-container__tree\"\n [categoriesAndDocuments]=\"categoriesAndDocuments$\"\n (clickedDocument)=\"setMediaViewerFile($event); resetErrorMessages()\" \n (moveDocument)=\"moveDocument($event)\"\n [allowMoving]=\"allowMoving\">\n </ccd-case-file-view-folder>\n </div>\n <!-- Slider -->\n <div class=\"slider\"></div>\n <!-- Media viewer -->\n <div class=\"media-viewer-container\">\n <ng-container *ngIf=\"currentDocument\">\n <mv-media-viewer\n [url]=\"currentDocument.document_binary_url\"\n [downloadFileName]=\"currentDocument.document_filename\"\n [showToolbar]=\"true\"\n [contentType]=\"currentDocument.content_type\"\n [enableAnnotations]=\"true\"\n [enableRedactions]=\"true\"\n [height]=\"'94.5vh'\"\n [caseId]=\"caseId\"\n [multimediaPlayerEnabled]=\"true\"\n [enableICP]=\"isIcpEnabled()\"\n >\n </mv-media-viewer>\n </ng-container>\n </div>\n </div>\n</div>\n", styles: ["#case-file-view{display:flex;border:2px solid #C9C9C9;height:100vh;position:relative}#case-file-view .document-tree-container{background-color:#faf8f8;width:30%;min-height:400px;min-width:10%}#case-file-view .slider{width:.2%;background-color:#6b6b6b}#case-file-view .slider:hover,#case-file-view .slider:focus{cursor:col-resize}#case-file-view .media-viewer-container{background-color:#dee0e2;flex:1 1 0;overflow:hidden}\n"] }]
195
221
  }], () => [{ type: i0.ElementRef }, { type: i1.ActivatedRoute }, { type: i2.CaseFileViewService }, { type: i2.DocumentManagementService }, { type: i2.LoadingService }, { type: i2.SessionStorageService }, { type: i3.CaseNotifier }, { type: i4.AbstractAppConfig }], null); })();
196
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseFileViewFieldComponent, { className: "CaseFileViewFieldComponent", filePath: "lib/shared/components/palette/case-file-view/case-file-view-field.component.ts", lineNumber: 17 }); })();
197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1maWxlLXZpZXctZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1maWxlLXZpZXcvY2FzZS1maWxlLXZpZXctZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1maWxlLXZpZXcvY2FzZS1maWxlLXZpZXctZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLFNBQVMsRUFBYyxFQUFFLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7OztJQ0U5QyxBQURGLDBCQUErQyxnQkFDRDtJQUFBLFlBQWtCO0lBQ2hFLEFBRGdFLGlCQUFTLEVBQ3BFOzs7SUFEeUMsZUFBa0I7SUFBbEIscUNBQWtCOzs7SUFYMUUsNkJBQTRDO0lBT3RDLEFBREYs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akIsT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQ2hHLElBQUksQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO29IQXhIVSwwQkFBMEI7NkRBQTFCLDBCQUEwQjtZQ1V2QyxBQVBBLEFBbkJBLDZGQUE0Qyw4REFzQjNDLDhEQUk0Qzs7WUExQjlCLGtGQUEyQjtZQW9CdkMsY0FBb0M7WUFBcEMseURBQW9DO1lBTWpDLGNBQXFDO1lBQXJDLDBEQUFxQzs7O2lGRFY5QiwwQkFBMEI7Y0FMdEMsU0FBUzsyQkFDRSwwQkFBMEI7O2tGQUl6QiwwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbmFsaXplLCBtYXAsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2FzZUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IENhc2VGaWxlVmlld0RvY3VtZW50LCBDYXRlZ29yaWVzQW5kRG9jdW1lbnRzLCBEb2N1bWVudFRyZWVOb2RlIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL2Nhc2UtZmlsZS12aWV3JztcbmltcG9ydCB7IFVzZXJJbmZvIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL3VzZXIvdXNlci1pbmZvLm1vZGVsJztcbmltcG9ydCB7IENhc2VGaWxlVmlld1NlcnZpY2UsIERvY3VtZW50TWFuYWdlbWVudFNlcnZpY2UsIExvYWRpbmdTZXJ2aWNlLCBTZXNzaW9uU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBBYnN0cmFjdEFwcENvbmZpZyB9IGZyb20gJy4uLy4uLy4uLy4uL2FwcC5jb25maWcnO1xuaW1wb3J0IHsgQ2FzZU5vdGlmaWVyIH0gZnJvbSAnLi4vLi4vY2FzZS1lZGl0b3Ivc2VydmljZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY2QtY2FzZS1maWxlLXZpZXctZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FzZS1maWxlLXZpZXctZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYXNlLWZpbGUtdmlldy1maWVsZC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDYXNlRmlsZVZpZXdGaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQQVJBTV9DQVNFX0lEID0gJ2NpZCc7XG4gIHB1YmxpYyBhbGxvd01vdmluZyA9IHRydWU7XG4gIHB1YmxpYyBjYXRlZ29yaWVzQW5kRG9jdW1lbnRzJDogT2JzZXJ2YWJsZTxDYXRlZ29yaWVzQW5kRG9jdW1lbnRzPjtcbiAgcHVibGljIGNhdGVnb3JpZXNBbmREb2N1bWVudHNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGdldENhdGVnb3JpZXNBbmREb2N1bWVudHNFcnJvciA9IGZhbHNlO1xuICBwdWJsaWMgY3VycmVudERvY3VtZW50OiBDYXNlRmlsZVZpZXdEb2N1bWVudCB8IHVuZGVmaW5lZDtcbiAgcHVibGljIGVycm9yTWVzc2FnZXMgPSBbXSBhcyBzdHJpbmdbXTtcbiAgcHJpdmF0ZSBjYXNlVmVyc2lvbjogbnVtYmVyO1xuICBwdWJsaWMgY2FzZUZpZWxkOiBDYXNlRmllbGQ7XG4gIHB1YmxpYyBpY3BfanVyaXNkaWN0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGljcEVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGNhc2VJZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGNhc2VGaWxlVmlld1NlcnZpY2U6IENhc2VGaWxlVmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBkb2N1bWVudE1hbmFnZW1lbnRTZXJ2aWNlOiBEb2N1bWVudE1hbmFnZW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9hZGluZ1NlcnZpY2U6IExvYWRpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlTm90aWZpZXI6IENhc2VOb3RpZmllcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFic3RyYWN0Q29uZmlnOiBBYnN0cmFjdEFwcENvbmZpZyxcbiAgKSB7IH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jYXNlSWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChDYXNlRmlsZVZpZXdGaWVsZENvbXBvbmVudC5QQVJBTV9DQVNFX0lEKTtcbiAgICB0aGlzLmNhdGVnb3JpZXNBbmREb2N1bWVudHMkID0gdGhpcy5jYXNlRmlsZVZpZXdTZXJ2aWNlLmdldENhdGVnb3JpZXNBbmREb2N1bWVudHModGhpcy5jYXNlSWQpO1xuICAgIHRoaXMuY2F0ZWdvcmllc0FuZERvY3VtZW50c1N1YnNjcmlwdGlvbiA9IHRoaXMuY2F0ZWdvcmllc0FuZERvY3VtZW50cyQuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGRhdGEgPT4ge1xuICAgICAgICB0aGlzLmNhc2VWZXJzaW9uID0gZGF0YS5jYXNlX3ZlcnNpb247XG4gICAgICB9LFxuICAgICAgZXJyb3I6IF8gPT4gdGhpcy5nZXRDYXRlZ29yaWVzQW5kRG9jdW1lbnRzRXJyb3IgPSB0cnVlXG4gICAgfSk7XG5cbiAgICAvLyBFWFVJLTgwMDBcbiAgICBjb25zdCB1c2VySW5mbzogVXNlckluZm8gPSBKU09OLnBhcnNlKHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ3VzZXJEZXRhaWxzJykpO1xuICAgIC8vIEdldCBhY2xzIHRoYXQgaW50ZXJzZWN0cyBmcm9tIGFjbCByb2xlcyBhbmQgdXNlciByb2xlc1xuICAgIGNvbnN0IGFjbHMgPSB0aGlzLmNhc2VGaWVsZC5hY2xzLmZpbHRlcihhY2wgPT4gdXNlckluZm8ucm9sZXMuaW5jbHVkZXMoYWNsLnJvbGUpKTtcbiAgICAvLyBBcyB0aGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBpbnRlcnNlY3Rpbmcgcm9sZSwgaWYgYW55IGFjbHMgYXJlIHVwZGF0ZTogdHJ1ZVxuICAgIHRoaXMuYWxsb3dNb3ZpbmcgPSBhY2xzLnNvbWUoYWNsID0+IGFjbC51cGRhdGUpO1xuICAgIHRoaXMuaWNwX2p1cmlzZGljdGlvbnMgPSB0aGlzLmFic3RyYWN0Q29uZmlnLmdldEljcEp1cmlzZGljdGlvbnMoKTtcbiAgICB0aGlzLmljcEVuYWJsZWQgPSB0aGlzLmFic3RyYWN0Q29uZmlnLmdldEljcEVuYWJsZSgpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBzbGlkZXIgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc2xpZGVyJyk7XG4gICAgY29uc3QgZG9jdW1lbnRUcmVlQ29udGFpbmVyID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmRvY3VtZW50LXRyZWUtY29udGFpbmVyJyk7XG5cbiAgICBjb25zdCBtb3VzZWRvd24kID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHNsaWRlciwgJ21vdXNlZG93bicpO1xuICAgIGNvbnN0IG1vdXNlbW92ZSQgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZW1vdmUnKTtcbiAgICBjb25zdCBtb3VzZXVwJCA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNldXAnKTtcbiAgICBjb25zdCBkcmFnJCA9IG1vdXNlZG93biQucGlwZShcbiAgICAgIHN3aXRjaE1hcChcbiAgICAgICAgKHN0YXJ0KSA9PiB7XG4gICAgICAgICAgY29uc3QgeCA9IHN0YXJ0LmNsaWVudFg7XG4gICAgICAgICAgY29uc3QgZG9jdW1lbnRUcmVlQ29udGFpbmVyV2lkdGggPSBkb2N1bWVudFRyZWVDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgICAgcmV0dXJuIG1vdXNlbW92ZSQucGlwZShtYXAobW92ZSA9PiB7XG4gICAgICAgICAgICBtb3ZlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkeDogbW92ZS5jbGllbnRYIC0geCxcbiAgICAgICAgICAgICAgZG9jdW1lbnRUcmVlQ29udGFpbmVyV2lkdGhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSksXG4gICAgICAgICAgICB0YWtlVW50aWwobW91c2V1cCQpKTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG5cbiAgICBkcmFnJC5zdWJzY3JpYmUocG9zID0+IHtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRXaWR0aCA9ICgocG9zLmRvY3VtZW50VHJlZUNvbnRhaW5lcldpZHRoICsgcG9zLmR4KSAqIDEwMCkgLyBzbGlkZXIucGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgIGRvY3VtZW50VHJlZUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYHdpZHRoOiAke2NhbGN1bGF0ZWRXaWR0aH0lYCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0TWVkaWFWaWV3ZXJGaWxlKGRvY3VtZW50OiBEb2N1bWVudFRyZWVOb2RlKTogdm9pZCB7XG4gICAgY29uc3QgbWVkaWFWaWV3ZXJJbmZvID0gdGhpcy5kb2N1bWVudE1hbmFnZW1lbnRTZXJ2aWNlLmdldE1lZGlhVmlld2VySW5mbyh7XG4gICAgICBkb2N1bWVudF9iaW5hcnlfdXJsOiBkb2N1bWVudC5kb2N1bWVudF9iaW5hcnlfdXJsLFxuICAgICAgZG9jdW1lbnRfZmlsZW5hbWU6IGRvY3VtZW50LmRvY3VtZW50X2ZpbGVuYW1lXG4gICAgfSk7XG4gICAgdGhpcy5jdXJyZW50RG9jdW1lbnQgPSBKU09OLnBhcnNlKG1lZGlhVmlld2VySW5mbyk7XG4gIH1cblxuICBwdWJsaWMgbW92ZURvY3VtZW50KGRhdGE6IHsgZG9jdW1lbnQ6IERvY3VtZW50VHJlZU5vZGUsIG5ld0NhdGVnb3J5OiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIGNvbnN0IGNpZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KENhc2VGaWxlVmlld0ZpZWxkQ29tcG9uZW50LlBBUkFNX0NBU0VfSUQpO1xuICAgIGNvbnN0IGxvYWRpbmdUb2tlbiA9IHRoaXMubG9hZGluZ1NlcnZpY2UucmVnaXN0ZXIoKTtcbiAgICB0aGlzLmNhc2VGaWxlVmlld1NlcnZpY2UudXBkYXRlRG9jdW1lbnRDYXRlZ29yeShjaWQsIHRoaXMuY2FzZVZlcnNpb24sIGRhdGEuZG9jdW1lbnQuYXR0cmlidXRlX3BhdGgsIGRhdGEubmV3Q2F0ZWdvcnkpXG4gICAgICAucGlwZShcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZ1NlcnZpY2UudW5yZWdpc3Rlcihsb2FkaW5nVG9rZW4pO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2VzID0gWydZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byBtb3ZlIHRoaXMgZG9jdW1lbnQgdG8gdGhlIHNlbGVjdGVkIGZvbGRlci4nXTtcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEVycm9yTWVzc2FnZXMoKTtcbiAgICAgICAgICB0aGlzLnJlbG9hZFBhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkUGFnZSgpOiB2b2lkIHtcbiAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldEVycm9yTWVzc2FnZXMoKTogdm9pZCB7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2VzID0gW107XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2F0ZWdvcmllc0FuZERvY3VtZW50c1N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5jYXRlZ29yaWVzQW5kRG9jdW1lbnRzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzSWNwRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pY3BFbmFibGVkICYmICgodGhpcy5pY3BfanVyaXNkaWN0aW9ucz8ubGVuZ3RoIDwgMSkgfHwgdGhpcy5pY3BfanVyaXNkaWN0aW9ucy5pbmNsdWRlcyhcbiAgICAgIHRoaXMuY2FzZU5vdGlmaWVyPy5jYWNoZWRDYXNlVmlldz8uY2FzZV90eXBlPy5qdXJpc2RpY3Rpb24uaWQpKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImVycm9yTWVzc2FnZXM/Lmxlbmd0aFwiPlxuICA8ZGl2XG4gICAgaWQ9XCJjYXNlLWZpbGUtdmlldy1maWVsZC1lcnJvcnNcIlxuICAgIGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeSBnb3Z1ay0hLW1hcmdpbi1ib3R0b20tNFwiXG4gICAgZGF0YS1tb2R1bGU9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5XCJcbiAgPlxuICAgIDxkaXYgcm9sZT1cImFsZXJ0XCI+XG4gICAgICA8aDIgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X190aXRsZVwiPlRoZXJlIGlzIGEgcHJvYmxlbTwvaDI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fYm9keVwiPlxuICAgICAgICA8dWwgY2xhc3M9XCJnb3Z1ay1saXN0IGdvdnVrLWVycm9yLXN1bW1hcnlfX2xpc3RcIj5cbiAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGVycm9yTWVzc2FnZSBvZiBlcnJvck1lc3NhZ2VzXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImdvdnVrLWpzLWxpbmtcIj57eyBlcnJvck1lc3NhZ2UgfX08L2J1dHRvbj5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxkaXZcbiAgKm5nSWY9XCJnZXRDYXRlZ29yaWVzQW5kRG9jdW1lbnRzRXJyb3JcIlxuICBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLXR3by10aGlyZHNcIlxuPlxuICA8aDEgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLXhsXCI+U29ycnksIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSBzZXJ2aWNlPC9oMT5cbiAgPHAgY2xhc3M9XCJnb3Z1ay1ib2R5XCI+VHJ5IGFnYWluIGxhdGVyLjwvcD5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cIiFnZXRDYXRlZ29yaWVzQW5kRG9jdW1lbnRzRXJyb3JcIj5cbiAgPGgyIGNsYXNzPVwiZ292dWstaGVhZGluZy1sXCI+Q2FzZSBmaWxlPC9oMj5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXBcIiBpZD1cImNhc2UtZmlsZS12aWV3XCI+XG4gICAgPCEtLSBEb2N1bWVudCB0cmVlIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkb2N1bWVudC10cmVlLWNvbnRhaW5lclwiPlxuICAgICAgPGNjZC1jYXNlLWZpbGUtdmlldy1mb2xkZXIgXG4gICAgICAgICAgY2xhc3M9XCJkb2N1bWVudC10cmVlLWNvbnRhaW5lcl9fdHJlZVwiXG4gICAgICAgICAgW2NhdGVnb3JpZXNBbmREb2N1bWVudHNdPVwiY2F0ZWdvcmllc0FuZERvY3VtZW50cyRcIlxuICAgICAgICAgIChjbGlja2VkRG9jdW1lbnQpPVwic2V0TWVkaWFWaWV3ZXJGaWxlKCRldmVudCk7IHJlc2V0RXJyb3JNZXNzYWdlcygpXCIgXG4gICAgICAgICAgKG1vdmVEb2N1bWVudCk9XCJtb3ZlRG9jdW1lbnQoJGV2ZW50KVwiXG4gICAgICAgICAgW2FsbG93TW92aW5nXT1cImFsbG93TW92aW5nXCI+XG4gICAgICA8L2NjZC1jYXNlLWZpbGUtdmlldy1mb2xkZXI+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBTbGlkZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cInNsaWRlclwiPjwvZGl2PlxuICAgIDwhLS0gTWVkaWEgdmlld2VyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJtZWRpYS12aWV3ZXItY29udGFpbmVyXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudERvY3VtZW50XCI+XG4gICAgICAgIDxtdi1tZWRpYS12aWV3ZXJcbiAgICAgICAgICBbdXJsXT1cImN1cnJlbnREb2N1bWVudC5kb2N1bWVudF9iaW5hcnlfdXJsXCJcbiAgICAgICAgICBbZG93bmxvYWRGaWxlTmFtZV09XCJjdXJyZW50RG9jdW1lbnQuZG9jdW1lbnRfZmlsZW5hbWVcIlxuICAgICAgICAgIFtzaG93VG9vbGJhcl09XCJ0cnVlXCJcbiAgICAgICAgICBbY29udGVudFR5cGVdPVwiY3VycmVudERvY3VtZW50LmNvbnRlbnRfdHlwZVwiXG4gICAgICAgICAgW2VuYWJsZUFubm90YXRpb25zXT1cInRydWVcIlxuICAgICAgICAgIFtlbmFibGVSZWRhY3Rpb25zXT1cInRydWVcIlxuICAgICAgICAgIFtoZWlnaHRdPVwiJzk0LjV2aCdcIlxuICAgICAgICAgIFtjYXNlSWRdPVwiY2FzZUlkXCJcbiAgICAgICAgICBbbXVsdGltZWRpYVBsYXllckVuYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgW2VuYWJsZUlDUF09XCJpc0ljcEVuYWJsZWQoKVwiXG4gICAgICAgID5cbiAgICAgICAgPC9tdi1tZWRpYS12aWV3ZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
222
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseFileViewFieldComponent, { className: "CaseFileViewFieldComponent", filePath: "lib/shared/components/palette/case-file-view/case-file-view-field.component.ts", lineNumber: 18 }); })();
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1maWxlLXZpZXctZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1maWxlLXZpZXcvY2FzZS1maWxlLXZpZXctZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3BhbGV0dGUvY2FzZS1maWxlLXZpZXcvY2FzZS1maWxlLXZpZXctZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQWMsRUFBRSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSWpGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSx5QkFBeUIsRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7SUNDOUMsQUFERiwwQkFBK0MsZ0JBQ0Q7SUFBQSxZQUFrQjtJQUNoRSxBQURnRSxpQkFBUyxFQUNw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dkMsQUFQQSxBQW5CQSw2RkFBNEMsOERBc0IzQyw4REFJNEM7O1lBMUI5QixrRkFBMkI7WUFvQnZDLGNBQW9DO1lBQXBDLHlEQUFvQztZQU1qQyxjQUFxQztZQUFyQywwREFBcUM7OztpRkRUOUIsMEJBQTBCO2NBTHRDLFNBQVM7MkJBQ0UsMEJBQTBCOztrRkFJekIsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBTdGF0dXNDb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENhc2VGaWVsZCB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbic7XG5pbXBvcnQgeyBDYXNlRmlsZVZpZXdEb2N1bWVudCwgQ2F0ZWdvcmllc0FuZERvY3VtZW50cywgRG9jdW1lbnRUcmVlTm9kZSB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi9jYXNlLWZpbGUtdmlldyc7XG5pbXBvcnQgeyBVc2VySW5mbyB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi91c2VyL3VzZXItaW5mby5tb2RlbCc7XG5pbXBvcnQgeyBDYXNlRmlsZVZpZXdTZXJ2aWNlLCBEb2N1bWVudE1hbmFnZW1lbnRTZXJ2aWNlLCBMb2FkaW5nU2VydmljZSwgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RBcHBDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9hcHAuY29uZmlnJztcbmltcG9ydCB7IENhc2VOb3RpZmllciB9IGZyb20gJy4uLy4uL2Nhc2UtZWRpdG9yL3NlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLWNhc2UtZmlsZS12aWV3LWZpZWxkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Nhc2UtZmlsZS12aWV3LWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FzZS1maWxlLXZpZXctZmllbGQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2FzZUZpbGVWaWV3RmllbGRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUEFSQU1fQ0FTRV9JRCA9ICdjaWQnO1xuICBwdWJsaWMgYWxsb3dNb3ZpbmcgPSB0cnVlO1xuICBwdWJsaWMgY2F0ZWdvcmllc0FuZERvY3VtZW50cyQ6IE9ic2VydmFibGU8Q2F0ZWdvcmllc0FuZERvY3VtZW50cz47XG4gIHB1YmxpYyBjYXRlZ29yaWVzQW5kRG9jdW1lbnRzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBnZXRDYXRlZ29yaWVzQW5kRG9jdW1lbnRzRXJyb3IgPSBmYWxzZTtcbiAgcHVibGljIGN1cnJlbnREb2N1bWVudDogQ2FzZUZpbGVWaWV3RG9jdW1lbnQgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBlcnJvck1lc3NhZ2VzID0gW10gYXMgc3RyaW5nW107XG4gIHByaXZhdGUgY2FzZVZlcnNpb246IG51bWJlcjtcbiAgcHVibGljIGNhc2VGaWVsZDogQ2FzZUZpZWxkO1xuICBwdWJsaWMgaWNwX2p1cmlzZGljdGlvbnM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBpY3BFbmFibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBjYXNlSWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBjYXNlRmlsZVZpZXdTZXJ2aWNlOiBDYXNlRmlsZVZpZXdTZXJ2aWNlLFxuICAgIHByaXZhdGUgZG9jdW1lbnRNYW5hZ2VtZW50U2VydmljZTogRG9jdW1lbnRNYW5hZ2VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvYWRpbmdTZXJ2aWNlOiBMb2FkaW5nU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZU5vdGlmaWVyOiBDYXNlTm90aWZpZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhYnN0cmFjdENvbmZpZzogQWJzdHJhY3RBcHBDb25maWcsXG4gICkgeyB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2FzZUlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoQ2FzZUZpbGVWaWV3RmllbGRDb21wb25lbnQuUEFSQU1fQ0FTRV9JRCk7XG4gICAgdGhpcy5jYXRlZ29yaWVzQW5kRG9jdW1lbnRzJCA9IHRoaXMuY2FzZUZpbGVWaWV3U2VydmljZS5nZXRDYXRlZ29yaWVzQW5kRG9jdW1lbnRzKHRoaXMuY2FzZUlkKTtcbiAgICB0aGlzLmNhdGVnb3JpZXNBbmREb2N1bWVudHNTdWJzY3JpcHRpb24gPSB0aGlzLmNhdGVnb3JpZXNBbmREb2N1bWVudHMkLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBkYXRhID0+IHtcbiAgICAgICAgdGhpcy5jYXNlVmVyc2lvbiA9IGRhdGEuY2FzZV92ZXJzaW9uO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBfID0+IHRoaXMuZ2V0Q2F0ZWdvcmllc0FuZERvY3VtZW50c0Vycm9yID0gdHJ1ZVxuICAgIH0pO1xuXG4gICAgLy8gRVhVSS04MDAwXG4gICAgY29uc3QgdXNlckluZm86IFVzZXJJbmZvID0gSlNPTi5wYXJzZSh0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRJdGVtKCd1c2VyRGV0YWlscycpKTtcbiAgICAvLyBHZXQgYWNscyB0aGF0IGludGVyc2VjdHMgZnJvbSBhY2wgcm9sZXMgYW5kIHVzZXIgcm9sZXNcbiAgICBjb25zdCBhY2xzID0gdGhpcy5jYXNlRmllbGQuYWNscy5maWx0ZXIoYWNsID0+IHVzZXJJbmZvLnJvbGVzLmluY2x1ZGVzKGFjbC5yb2xlKSk7XG4gICAgLy8gQXMgdGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgaW50ZXJzZWN0aW5nIHJvbGUsIGlmIGFueSBhY2xzIGFyZSB1cGRhdGU6IHRydWVcbiAgICB0aGlzLmFsbG93TW92aW5nID0gYWNscy5zb21lKGFjbCA9PiBhY2wudXBkYXRlKTtcbiAgICB0aGlzLmljcF9qdXJpc2RpY3Rpb25zID0gdGhpcy5hYnN0cmFjdENvbmZpZy5nZXRJY3BKdXJpc2RpY3Rpb25zKCk7XG4gICAgdGhpcy5pY3BFbmFibGVkID0gdGhpcy5hYnN0cmFjdENvbmZpZy5nZXRJY3BFbmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29uc3Qgc2xpZGVyID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnNsaWRlcicpO1xuICAgIGNvbnN0IGRvY3VtZW50VHJlZUNvbnRhaW5lciA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kb2N1bWVudC10cmVlLWNvbnRhaW5lcicpO1xuXG4gICAgY29uc3QgbW91c2Vkb3duJCA9IGZyb21FdmVudDxNb3VzZUV2ZW50PihzbGlkZXIsICdtb3VzZWRvd24nKTtcbiAgICBjb25zdCBtb3VzZW1vdmUkID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2Vtb3ZlJyk7XG4gICAgY29uc3QgbW91c2V1cCQgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZXVwJyk7XG4gICAgY29uc3QgZHJhZyQgPSBtb3VzZWRvd24kLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoXG4gICAgICAgIChzdGFydCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHggPSBzdGFydC5jbGllbnRYO1xuICAgICAgICAgIGNvbnN0IGRvY3VtZW50VHJlZUNvbnRhaW5lcldpZHRoID0gZG9jdW1lbnRUcmVlQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgIHJldHVybiBtb3VzZW1vdmUkLnBpcGUobWFwKG1vdmUgPT4ge1xuICAgICAgICAgICAgbW92ZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZHg6IG1vdmUuY2xpZW50WCAtIHgsXG4gICAgICAgICAgICAgIGRvY3VtZW50VHJlZUNvbnRhaW5lcldpZHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbChtb3VzZXVwJCkpO1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcblxuICAgIGRyYWckLnN1YnNjcmliZShwb3MgPT4ge1xuICAgICAgY29uc3QgY2FsY3VsYXRlZFdpZHRoID0gKChwb3MuZG9jdW1lbnRUcmVlQ29udGFpbmVyV2lkdGggKyBwb3MuZHgpICogMTAwKSAvIHNsaWRlci5wYXJlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgZG9jdW1lbnRUcmVlQ29udGFpbmVyLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBgd2lkdGg6ICR7Y2FsY3VsYXRlZFdpZHRofSVgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRNZWRpYVZpZXdlckZpbGUoZG9jdW1lbnQ6IERvY3VtZW50VHJlZU5vZGUpOiB2b2lkIHtcbiAgICBjb25zdCBtZWRpYVZpZXdlckluZm8gPSB0aGlzLmRvY3VtZW50TWFuYWdlbWVudFNlcnZpY2UuZ2V0TWVkaWFWaWV3ZXJJbmZvKHtcbiAgICAgIGRvY3VtZW50X2JpbmFyeV91cmw6IGRvY3VtZW50LmRvY3VtZW50X2JpbmFyeV91cmwsXG4gICAgICBkb2N1bWVudF9maWxlbmFtZTogZG9jdW1lbnQuZG9jdW1lbnRfZmlsZW5hbWVcbiAgICB9KTtcbiAgICB0aGlzLmN1cnJlbnREb2N1bWVudCA9IEpTT04ucGFyc2UobWVkaWFWaWV3ZXJJbmZvKTtcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlRG9jdW1lbnQoZGF0YTogeyBkb2N1bWVudDogRG9jdW1lbnRUcmVlTm9kZSwgbmV3Q2F0ZWdvcnk6IHN0cmluZyB9KTogdm9pZCB7XG4gICAgY29uc3QgY2lkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoQ2FzZUZpbGVWaWV3RmllbGRDb21wb25lbnQuUEFSQU1fQ0FTRV9JRCk7XG4gICAgY29uc3QgbG9hZGluZ1Rva2VuID0gdGhpcy5sb2FkaW5nU2VydmljZS5yZWdpc3RlcigpO1xuICAgIHRoaXMuY2FzZUZpbGVWaWV3U2VydmljZS51cGRhdGVEb2N1bWVudENhdGVnb3J5KGNpZCwgdGhpcy5jYXNlVmVyc2lvbiwgZGF0YS5kb2N1bWVudC5hdHRyaWJ1dGVfcGF0aCwgZGF0YS5uZXdDYXRlZ29yeSlcbiAgICAgIC5waXBlKFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nU2VydmljZS51bnJlZ2lzdGVyKGxvYWRpbmdUb2tlbik7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZXMgPSBbdGhpcy5tb3ZlRG9jdW1lbnRFcnJvcihlcnIpXTtcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEVycm9yTWVzc2FnZXMoKTtcbiAgICAgICAgICB0aGlzLnJlbG9hZFBhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkUGFnZSgpOiB2b2lkIHtcbiAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldEVycm9yTWVzc2FnZXMoKTogdm9pZCB7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2VzID0gW107XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2F0ZWdvcmllc0FuZERvY3VtZW50c1N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5jYXRlZ29yaWVzQW5kRG9jdW1lbnRzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzSWNwRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pY3BFbmFibGVkICYmICgodGhpcy5pY3BfanVyaXNkaWN0aW9ucz8ubGVuZ3RoIDwgMSkgfHwgdGhpcy5pY3BfanVyaXNkaWN0aW9ucy5pbmNsdWRlcyhcbiAgICAgIHRoaXMuY2FzZU5vdGlmaWVyPy5jYWNoZWRDYXNlVmlldz8uY2FzZV90eXBlPy5qdXJpc2RpY3Rpb24uaWQpKTtcbiAgfVxuXG4gIHByaXZhdGUgbW92ZURvY3VtZW50RXJyb3IoZXJyKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZWZhdWx0TXNnID0gJ1dlIGNvdWxkblxcJ3QgbW92ZSB0aGUgZG9jdW1lbnQuIFBsZWFzZSB0cnkgYWdhaW4uJztcblxuICAgIGlmICghKGVyciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRNc2c7XG4gICAgfVxuXG4gICAgc3dpdGNoIChlcnIuc3RhdHVzKSB7XG4gICAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLkJhZFJlcXVlc3Q6XG4gICAgICAvLyBlLmcuIG1hbGZvcm1lZCBQVVQsIGludmFsaWQgYXR0cmlidXRlX3BhdGgsIGludmFsaWQgdGFyZ2V0IGNhdGVnb3J5XG4gICAgICAgIHJldHVybiAnVGhlIHJlcXVlc3Qgd2FzIGludmFsaWQuIENoZWNrIHRoZSBkb2N1bWVudCBwYXRoIGFuZCBkZXN0aW5hdGlvbiBmb2xkZXIuJztcbiAgICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuQ29uZmxpY3Q6XG4gICAgICAvLyBvcHRpbWlzdGljIGNvbmN1cnJlbmN5IC8gc3RhbGUgY2FzZSB2ZXJzaW9uXG4gICAgICAgIHJldHVybiAnVGhpcyBjYXNlIGNoYW5nZWQgc2luY2UgeW91IG9wZW5lZCBpdC4gUmVmcmVzaCBhbmQgdHJ5IGFnYWluLic7XG4gICAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLk5vdEZvdW5kOlxuICAgICAgICByZXR1cm4gJ1RoZSBkb2N1bWVudCBvciBkZXN0aW5hdGlvbiBmb2xkZXIgY291bGQgbm90IGJlIGZvdW5kLic7XG4gICAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLkZvcmJpZGRlbjpcbiAgICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuVW5hdXRob3JpemVkOlxuICAgICAgICByZXR1cm4gJ1lvdSBkbyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG1vdmUgdGhpcyBkb2N1bWVudCB0byB0aGUgc2VsZWN0ZWQgZm9sZGVyLic7XG4gICAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlNlcnZpY2VVbmF2YWlsYWJsZTpcbiAgICAgIGNhc2UgSHR0cFN0YXR1c0NvZGUuR2F0ZXdheVRpbWVvdXQ6XG4gICAgICAgIHJldHVybiAnVGhlIHNlcnZpY2UgaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUuIFBsZWFzZSB0cnkgYWdhaW4gaW4gYSBtb21lbnQuJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAvLyBBbnkgb3RoZXIgc3RhdHVzIChpbmNsdWRpbmcgNTAwKVxuICAgICAgICByZXR1cm4gZGVmYXVsdE1zZztcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJlcnJvck1lc3NhZ2VzPy5sZW5ndGhcIj5cbiAgPGRpdlxuICAgIGlkPVwiY2FzZS1maWxlLXZpZXctZmllbGQtZXJyb3JzXCJcbiAgICBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnkgZ292dWstIS1tYXJnaW4tYm90dG9tLTRcIlxuICAgIGRhdGEtbW9kdWxlPVwiZ292dWstZXJyb3Itc3VtbWFyeVwiXG4gID5cbiAgICA8ZGl2IHJvbGU9XCJhbGVydFwiPlxuICAgICAgPGgyIGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fdGl0bGVcIj5UaGVyZSBpcyBhIHByb2JsZW08L2gyPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlfX2JvZHlcIj5cbiAgICAgICAgPHVsIGNsYXNzPVwiZ292dWstbGlzdCBnb3Z1ay1lcnJvci1zdW1tYXJ5X19saXN0XCI+XG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBlcnJvck1lc3NhZ2Ugb2YgZXJyb3JNZXNzYWdlc1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJnb3Z1ay1qcy1saW5rXCI+e3sgZXJyb3JNZXNzYWdlIH19PC9idXR0b24+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48ZGl2XG4gICpuZ0lmPVwiZ2V0Q2F0ZWdvcmllc0FuZERvY3VtZW50c0Vycm9yXCJcbiAgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi10d28tdGhpcmRzXCJcbj5cbiAgPGgxIGNsYXNzPVwiZ292dWstaGVhZGluZy14bFwiPlNvcnJ5LCB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgc2VydmljZTwvaDE+XG4gIDxwIGNsYXNzPVwiZ292dWstYm9keVwiPlRyeSBhZ2FpbiBsYXRlci48L3A+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCIhZ2V0Q2F0ZWdvcmllc0FuZERvY3VtZW50c0Vycm9yXCI+XG4gIDxoMiBjbGFzcz1cImdvdnVrLWhlYWRpbmctbFwiPkNhc2UgZmlsZTwvaDI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCIgaWQ9XCJjYXNlLWZpbGUtdmlld1wiPlxuICAgIDwhLS0gRG9jdW1lbnQgdHJlZSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnQtdHJlZS1jb250YWluZXJcIj5cbiAgICAgIDxjY2QtY2FzZS1maWxlLXZpZXctZm9sZGVyIFxuICAgICAgICAgIGNsYXNzPVwiZG9jdW1lbnQtdHJlZS1jb250YWluZXJfX3RyZWVcIlxuICAgICAgICAgIFtjYXRlZ29yaWVzQW5kRG9jdW1lbnRzXT1cImNhdGVnb3JpZXNBbmREb2N1bWVudHMkXCJcbiAgICAgICAgICAoY2xpY2tlZERvY3VtZW50KT1cInNldE1lZGlhVmlld2VyRmlsZSgkZXZlbnQpOyByZXNldEVycm9yTWVzc2FnZXMoKVwiIFxuICAgICAgICAgIChtb3ZlRG9jdW1lbnQpPVwibW92ZURvY3VtZW50KCRldmVudClcIlxuICAgICAgICAgIFthbGxvd01vdmluZ109XCJhbGxvd01vdmluZ1wiPlxuICAgICAgPC9jY2QtY2FzZS1maWxlLXZpZXctZm9sZGVyPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gU2xpZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzbGlkZXJcIj48L2Rpdj5cbiAgICA8IS0tIE1lZGlhIHZpZXdlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibWVkaWEtdmlld2VyLWNvbnRhaW5lclwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnREb2N1bWVudFwiPlxuICAgICAgICA8bXYtbWVkaWEtdmlld2VyXG4gICAgICAgICAgW3VybF09XCJjdXJyZW50RG9jdW1lbnQuZG9jdW1lbnRfYmluYXJ5X3VybFwiXG4gICAgICAgICAgW2Rvd25sb2FkRmlsZU5hbWVdPVwiY3VycmVudERvY3VtZW50LmRvY3VtZW50X2ZpbGVuYW1lXCJcbiAgICAgICAgICBbc2hvd1Rvb2xiYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgW2NvbnRlbnRUeXBlXT1cImN1cnJlbnREb2N1bWVudC5jb250ZW50X3R5cGVcIlxuICAgICAgICAgIFtlbmFibGVBbm5vdGF0aW9uc109XCJ0cnVlXCJcbiAgICAgICAgICBbZW5hYmxlUmVkYWN0aW9uc109XCJ0cnVlXCJcbiAgICAgICAgICBbaGVpZ2h0XT1cIic5NC41dmgnXCJcbiAgICAgICAgICBbY2FzZUlkXT1cImNhc2VJZFwiXG4gICAgICAgICAgW211bHRpbWVkaWFQbGF5ZXJFbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgIFtlbmFibGVJQ1BdPVwiaXNJY3BFbmFibGVkKClcIlxuICAgICAgICA+XG4gICAgICAgIDwvbXYtbWVkaWEtdmlld2VyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -10,7 +10,7 @@ import * as i4 from '@angular/forms';
10
10
  import { NG_VALUE_ACCESSOR, NG_VALIDATORS, FormArray, FormGroup, FormControl, Validators, ReactiveFormsModule, FormsModule } from '@angular/forms';
11
11
  import { BehaviorSubject, throwError, Subject, EMPTY, Observable, of, combineLatest, timer, forkJoin, fromEvent, Subscription } from 'rxjs';
12
12
  import * as i1$2 from '@angular/common/http';
13
- import { HttpErrorResponse, HttpHeaders, HttpParams } from '@angular/common/http';
13
+ import { HttpErrorResponse, HttpHeaders, HttpParams, HttpStatusCode } from '@angular/common/http';
14
14
  import { distinctUntilChanged, catchError, map, publish, refCount, switchMap, debounceTime, take, delay, finalize, timeout, mergeMap, retryWhen, tap, delayWhen, publishReplay, first, takeUntil, filter } from 'rxjs/operators';
15
15
  import { polling } from 'rx-polling-hmcts';
16
16
  import { Type, Exclude, Expose, plainToClassFromExist, plainToClass } from 'class-transformer';
@@ -13079,8 +13079,8 @@ class CaseFileViewFieldComponent {
13079
13079
  this.caseFileViewService.updateDocumentCategory(cid, this.caseVersion, data.document.attribute_path, data.newCategory)
13080
13080
  .pipe(finalize(() => {
13081
13081
  this.loadingService.unregister(loadingToken);
13082
- }), catchError(() => {
13083
- this.errorMessages = ['You do not have permission to move this document to the selected folder.'];
13082
+ }), catchError((err) => {
13083
+ this.errorMessages = [this.moveDocumentError(err)];
13084
13084
  return of(null);
13085
13085
  }))
13086
13086
  .subscribe(res => {
@@ -13104,6 +13104,31 @@ class CaseFileViewFieldComponent {
13104
13104
  isIcpEnabled() {
13105
13105
  return this.icpEnabled && ((this.icp_jurisdictions?.length < 1) || this.icp_jurisdictions.includes(this.caseNotifier?.cachedCaseView?.case_type?.jurisdiction.id));
13106
13106
  }
13107
+ moveDocumentError(err) {
13108
+ const defaultMsg = 'We couldn\'t move the document. Please try again.';
13109
+ if (!(err instanceof HttpErrorResponse)) {
13110
+ return defaultMsg;
13111
+ }
13112
+ switch (err.status) {
13113
+ case HttpStatusCode.BadRequest:
13114
+ // e.g. malformed PUT, invalid attribute_path, invalid target category
13115
+ return 'The request was invalid. Check the document path and destination folder.';
13116
+ case HttpStatusCode.Conflict:
13117
+ // optimistic concurrency / stale case version
13118
+ return 'This case changed since you opened it. Refresh and try again.';
13119
+ case HttpStatusCode.NotFound:
13120
+ return 'The document or destination folder could not be found.';
13121
+ case HttpStatusCode.Forbidden:
13122
+ case HttpStatusCode.Unauthorized:
13123
+ return 'You do not have permission to move this document to the selected folder.';
13124
+ case HttpStatusCode.ServiceUnavailable:
13125
+ case HttpStatusCode.GatewayTimeout:
13126
+ return 'The service is temporarily unavailable. Please try again in a moment.';
13127
+ default:
13128
+ // Any other status (including 500)
13129
+ return defaultMsg;
13130
+ }
13131
+ }
13107
13132
  static ɵfac = function CaseFileViewFieldComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CaseFileViewFieldComponent)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1$1.ActivatedRoute), i0.ɵɵdirectiveInject(CaseFileViewService), i0.ɵɵdirectiveInject(DocumentManagementService), i0.ɵɵdirectiveInject(LoadingService), i0.ɵɵdirectiveInject(SessionStorageService), i0.ɵɵdirectiveInject(CaseNotifier), i0.ɵɵdirectiveInject(AbstractAppConfig)); };
13108
13133
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CaseFileViewFieldComponent, selectors: [["ccd-case-file-view-field"]], decls: 3, vars: 3, consts: [[4, "ngIf"], ["class", "govuk-grid-column-two-thirds", 4, "ngIf"], ["id", "case-file-view-field-errors", "data-module", "govuk-error-summary", 1, "govuk-error-summary", "govuk-!-margin-bottom-4"], ["role", "alert"], [1, "govuk-error-summary__title"], [1, "govuk-error-summary__body"], [1, "govuk-list", "govuk-error-summary__list"], [4, "ngFor", "ngForOf"], ["type", "button", 1, "govuk-js-link"], [1, "govuk-grid-column-two-thirds"], [1, "govuk-heading-xl"], [1, "govuk-body"], [1, "govuk-heading-l"], ["id", "case-file-view", 1, "govuk-form-group"], [1, "document-tree-container"], [1, "document-tree-container__tree", 3, "clickedDocument", "moveDocument", "categoriesAndDocuments", "allowMoving"], [1, "slider"], [1, "media-viewer-container"], [3, "url", "downloadFileName", "showToolbar", "contentType", "enableAnnotations", "enableRedactions", "height", "caseId", "multimediaPlayerEnabled", "enableICP"]], template: function CaseFileViewFieldComponent_Template(rf, ctx) { if (rf & 1) {
13109
13134
  i0.ɵɵtemplate(0, CaseFileViewFieldComponent_ng_container_0_Template, 8, 1, "ng-container", 0)(1, CaseFileViewFieldComponent_div_1_Template, 5, 0, "div", 1)(2, CaseFileViewFieldComponent_div_2_Template, 9, 3, "div", 0);
@@ -13119,7 +13144,7 @@ class CaseFileViewFieldComponent {
13119
13144
  type: Component,
13120
13145
  args: [{ selector: 'ccd-case-file-view-field', template: "<ng-container *ngIf=\"errorMessages?.length\">\n <div\n id=\"case-file-view-field-errors\"\n class=\"govuk-error-summary govuk-!-margin-bottom-4\"\n data-module=\"govuk-error-summary\"\n >\n <div role=\"alert\">\n <h2 class=\"govuk-error-summary__title\">There is a problem</h2>\n <div class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li *ngFor=\"let errorMessage of errorMessages\">\n <button type=\"button\" class=\"govuk-js-link\">{{ errorMessage }}</button>\n </li>\n </ul>\n </div>\n </div>\n </div>\n</ng-container>\n\n<div\n *ngIf=\"getCategoriesAndDocumentsError\"\n class=\"govuk-grid-column-two-thirds\"\n>\n <h1 class=\"govuk-heading-xl\">Sorry, there is a problem with the service</h1>\n <p class=\"govuk-body\">Try again later.</p>\n</div>\n<div *ngIf=\"!getCategoriesAndDocumentsError\">\n <h2 class=\"govuk-heading-l\">Case file</h2>\n <div class=\"govuk-form-group\" id=\"case-file-view\">\n <!-- Document tree -->\n <div class=\"document-tree-container\">\n <ccd-case-file-view-folder \n class=\"document-tree-container__tree\"\n [categoriesAndDocuments]=\"categoriesAndDocuments$\"\n (clickedDocument)=\"setMediaViewerFile($event); resetErrorMessages()\" \n (moveDocument)=\"moveDocument($event)\"\n [allowMoving]=\"allowMoving\">\n </ccd-case-file-view-folder>\n </div>\n <!-- Slider -->\n <div class=\"slider\"></div>\n <!-- Media viewer -->\n <div class=\"media-viewer-container\">\n <ng-container *ngIf=\"currentDocument\">\n <mv-media-viewer\n [url]=\"currentDocument.document_binary_url\"\n [downloadFileName]=\"currentDocument.document_filename\"\n [showToolbar]=\"true\"\n [contentType]=\"currentDocument.content_type\"\n [enableAnnotations]=\"true\"\n [enableRedactions]=\"true\"\n [height]=\"'94.5vh'\"\n [caseId]=\"caseId\"\n [multimediaPlayerEnabled]=\"true\"\n [enableICP]=\"isIcpEnabled()\"\n >\n </mv-media-viewer>\n </ng-container>\n </div>\n </div>\n</div>\n", styles: ["#case-file-view{display:flex;border:2px solid #C9C9C9;height:100vh;position:relative}#case-file-view .document-tree-container{background-color:#faf8f8;width:30%;min-height:400px;min-width:10%}#case-file-view .slider{width:.2%;background-color:#6b6b6b}#case-file-view .slider:hover,#case-file-view .slider:focus{cursor:col-resize}#case-file-view .media-viewer-container{background-color:#dee0e2;flex:1 1 0;overflow:hidden}\n"] }]
13121
13146
  }], () => [{ type: i0.ElementRef }, { type: i1$1.ActivatedRoute }, { type: CaseFileViewService }, { type: DocumentManagementService }, { type: LoadingService }, { type: SessionStorageService }, { type: CaseNotifier }, { type: AbstractAppConfig }], null); })();
13122
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseFileViewFieldComponent, { className: "CaseFileViewFieldComponent", filePath: "lib/shared/components/palette/case-file-view/case-file-view-field.component.ts", lineNumber: 17 }); })();
13147
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseFileViewFieldComponent, { className: "CaseFileViewFieldComponent", filePath: "lib/shared/components/palette/case-file-view/case-file-view-field.component.ts", lineNumber: 18 }); })();
13123
13148
 
13124
13149
  function ReadCaseFlagFieldComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {
13125
13150
  const _r1 = i0.ɵɵgetCurrentView();