UNPKG

@alfresco/adf-content-services

Version:
124 lines 17.5 kB
/*! * @license * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { TranslationService } from '@alfresco/adf-core'; import { UploadService } from '../../common/services/upload.service'; import { FileUploadStatus } from '../../common/models/file.model'; import { Component, ContentChild, Input, Output, TemplateRef, EventEmitter } from '@angular/core'; import { CommonModule } from '@angular/common'; import * as i0 from "@angular/core"; import * as i1 from "../../common/services/upload.service"; import * as i2 from "@alfresco/adf-core"; import * as i3 from "@angular/common"; export class FileUploadingListComponent { constructor(uploadService, translateService) { this.uploadService = uploadService; this.translateService = translateService; this.files = []; /** Emitted when a file in the list has an error. */ this.error = new EventEmitter(); } /** * Cancel file upload * * @param file File model to cancel upload for. */ cancelFile(file) { if (file.status === FileUploadStatus.Pending) { file.status = FileUploadStatus.Cancelled; } else { this.uploadService.cancelUpload(file); } } /** * Remove uploaded file * * @param file File model to remove upload for. */ removeFile(file) { if (file.status === FileUploadStatus.Error) { this.notifyError(file); } if (this.isUploadingFile(file)) { this.cancelNodeVersionInstances(file); this.uploadService.cancelUpload(file); } this.files = this.files.filter((entry) => entry !== file); } /** * Calls the appropriate methods for each file, depending on state */ cancelAllFiles() { const filesToCancel = this.files.filter((file) => this.isUploadingFile(file)); if (filesToCancel.length > 0) { this.uploadService.cancelUpload(...filesToCancel); } } /** * Checks if all the files are uploaded false if there is at least one file in Progress | Starting | Pending * * @returns `true` if upload is complete, otherwise `false` */ isUploadCompleted() { return (!this.isUploadCancelled() && Boolean(this.files.length) && !this.files.some(({ status }) => status === FileUploadStatus.Starting || status === FileUploadStatus.Progress || status === FileUploadStatus.Pending)); } /** * Check if all the files are Cancelled | Aborted | Error. false if there is at least one file in uploading states * * @returns `true` if upload is cancelled, otherwise `false` */ isUploadCancelled() { return (!!this.files.length && this.files.every(({ status }) => status === FileUploadStatus.Aborted || status === FileUploadStatus.Cancelled || status === FileUploadStatus.Deleted)); } cancelNodeVersionInstances(file) { this.files .filter((item) => item.options.newVersion && item.data.entry.id === file.data.entry.id) .map((item) => { item.status = FileUploadStatus.Deleted; }); } notifyError(...files) { let messageError = null; if (files.length === 1) { messageError = this.translateService.instant('FILE_UPLOAD.MESSAGES.REMOVE_FILE_ERROR', { fileName: files[0].name }); } else { messageError = this.translateService.instant('FILE_UPLOAD.MESSAGES.REMOVE_FILES_ERROR', { total: files.length }); } this.error.emit(messageError); } isUploadingFile(file) { return file.status === FileUploadStatus.Pending || file.status === FileUploadStatus.Starting || file.status === FileUploadStatus.Progress; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: FileUploadingListComponent, deps: [{ token: i1.UploadService }, { token: i2.TranslationService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: FileUploadingListComponent, isStandalone: true, selector: "adf-file-uploading-list", inputs: { files: "files" }, outputs: { error: "error" }, queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: "<div class=\"upload-list\">\n <ng-template\n ngFor\n [ngForOf]=\"files\"\n [ngForTemplate]=\"template\" />\n</div>\n", styles: [":host{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: FileUploadingListComponent, decorators: [{ type: Component, args: [{ selector: 'adf-file-uploading-list', standalone: true, imports: [CommonModule], template: "<div class=\"upload-list\">\n <ng-template\n ngFor\n [ngForOf]=\"files\"\n [ngForTemplate]=\"template\" />\n</div>\n", styles: [":host{display:flex;flex-direction:column}\n"] }] }], ctorParameters: () => [{ type: i1.UploadService }, { type: i2.TranslationService }], propDecorators: { template: [{ type: ContentChild, args: [TemplateRef] }], files: [{ type: Input }], error: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWRpbmctbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL3VwbG9hZC9jb21wb25lbnRzL2ZpbGUtdXBsb2FkaW5nLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi91cGxvYWQvY29tcG9uZW50cy9maWxlLXVwbG9hZGluZy1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU3RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7OztBQVMvQyxNQUFNLE9BQU8sMEJBQTBCO0lBV25DLFlBQW9CLGFBQTRCLEVBQVUsZ0JBQW9DO1FBQTFFLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFvQjtRQU45RixVQUFLLEdBQWdCLEVBQUUsQ0FBQztRQUV4QixvREFBb0Q7UUFFcEQsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFFaUUsQ0FBQztJQUVsRzs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLElBQWU7UUFDdEIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO1lB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LEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyx3Q0FBd0MsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4SCxDQUFDO2FBQU0sQ0FBQztZQUNKLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLHlDQUF5QyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3JILENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU8sZUFBZSxDQUFDLElBQWU7UUFDbkMsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLGdCQUFnQixDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLGdCQUFnQixDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztJQUM5SSxDQUFDOzhHQTFHUSwwQkFBMEI7a0dBQTFCLDBCQUEwQixrTEFDckIsV0FBVyxnRENoQzdCLDhJQU1BLG9HRHFCYyxZQUFZOzsyRkFJYiwwQkFBMEI7a0JBUHRDLFNBQVM7K0JBQ0kseUJBQXlCLGNBQ3ZCLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQzttSEFNdkIsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLFdBQVc7Z0JBSXpCLEtBQUs7c0JBREosS0FBSztnQkFLTixLQUFLO3NCQURKLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBVcGxvYWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tbW9uL3NlcnZpY2VzL3VwbG9hZC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVNb2RlbCwgRmlsZVVwbG9hZFN0YXR1cyB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvZmlsZS5tb2RlbCc7XG5cbmltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkLCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi1maWxlLXVwbG9hZGluZy1saXN0JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9maWxlLXVwbG9hZGluZy1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9maWxlLXVwbG9hZGluZy1saXN0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRmlsZVVwbG9hZGluZ0xpc3RDb21wb25lbnQge1xuICAgIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpXG4gICAgdGVtcGxhdGU6IGFueTtcblxuICAgIEBJbnB1dCgpXG4gICAgZmlsZXM6IEZpbGVNb2RlbFtdID0gW107XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGEgZmlsZSBpbiB0aGUgbGlzdCBoYXMgYW4gZXJyb3IuICovXG4gICAgQE91dHB1dCgpXG4gICAgZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdXBsb2FkU2VydmljZTogVXBsb2FkU2VydmljZSwgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UpIHt9XG5cbiAgICAvKipcbiAgICAgKiBDYW5jZWwgZmlsZSB1cGxvYWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBmaWxlIEZpbGUgbW9kZWwgdG8gY2FuY2VsIHVwbG9hZCBmb3IuXG4gICAgICovXG4gICAgY2FuY2VsRmlsZShmaWxlOiBGaWxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZpbGUuc3RhdHVzID09PSBGaWxlVXBsb2FkU3RhdHVzLlBlbmRpbmcpIHtcbiAgICAgICAgICAgIGZpbGUuc3RhdHVzID0gRmlsZVVwbG9hZFN0YXR1cy5DYW5jZWxsZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZFNlcnZpY2UuY2FuY2VsVXBsb2FkKGZpbGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIHVwbG9hZGVkIGZpbGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBmaWxlIEZpbGUgbW9kZWwgdG8gcmVtb3ZlIHVwbG9hZCBmb3IuXG4gICAgICovXG4gICAgcmVtb3ZlRmlsZShmaWxlOiBGaWxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZpbGUuc3RhdHVzID09PSBGaWxlVXBsb2FkU3RhdHVzLkVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeUVycm9yKGZpbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNVcGxvYWRpbmdGaWxlKGZpbGUpKSB7XG4gICAgICAgICAgICB0aGlzLmNhbmNlbE5vZGVWZXJzaW9uSW5zdGFuY2VzKGZpbGUpO1xuICAgICAgICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlLmNhbmNlbFVwbG9hZChmaWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlsZXMgPSB0aGlzLmZpbGVzLmZpbHRlcigoZW50cnkpID0+IGVudHJ5ICE9PSBmaWxlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxscyB0aGUgYXBwcm9wcmlhdGUgbWV0aG9kcyBmb3IgZWFjaCBmaWxlLCBkZXBlbmRpbmcgb24gc3RhdGVcbiAgICAgKi9cbiAgICBjYW5jZWxBbGxGaWxlcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmlsZXNUb0NhbmNlbCA9IHRoaXMuZmlsZXMuZmlsdGVyKChmaWxlKSA9PiB0aGlzLmlzVXBsb2FkaW5nRmlsZShmaWxlKSk7XG5cbiAgICAgICAgaWYgKGZpbGVzVG9DYW5jZWwubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlLmNhbmNlbFVwbG9hZCguLi5maWxlc1RvQ2FuY2VsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhbGwgdGhlIGZpbGVzIGFyZSB1cGxvYWRlZCBmYWxzZSBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgZmlsZSBpbiBQcm9ncmVzcyB8IFN0YXJ0aW5nIHwgUGVuZGluZ1xuICAgICAqXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHVwbG9hZCBpcyBjb21wbGV0ZSwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAgICAgKi9cbiAgICBpc1VwbG9hZENvbXBsZXRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICF0aGlzLmlzVXBsb2FkQ2FuY2VsbGVkKCkgJiZcbiAgICAgICAgICAgIEJvb2xlYW4odGhpcy5maWxlcy5sZW5ndGgpICYmXG4gICAgICAgICAgICAhdGhpcy5maWxlcy5zb21lKFxuICAgICAgICAgICAgICAgICh7IHN0YXR1cyB9KSA9PiBzdGF0dXMgPT09IEZpbGVVcGxvYWRTdGF0dXMuU3RhcnRpbmcgfHwgc3RhdHVzID09PSBGaWxlVXBsb2FkU3RhdHVzLlByb2dyZXNzIHx8IHN0YXR1cyA9PT0gRmlsZVVwbG9hZFN0YXR1cy5QZW5kaW5nXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYWxsIHRoZSBmaWxlcyBhcmUgQ2FuY2VsbGVkIHwgQWJvcnRlZCB8IEVycm9yLiBmYWxzZSBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgZmlsZSBpbiB1cGxvYWRpbmcgc3RhdGVzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdXBsb2FkIGlzIGNhbmNlbGxlZCwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAgICAgKi9cbiAgICBpc1VwbG9hZENhbmNlbGxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICEhdGhpcy5maWxlcy5sZW5ndGggJiZcbiAgICAgICAgICAgIHRoaXMuZmlsZXMuZXZlcnkoXG4gICAgICAgICAgICAgICAgKHsgc3RhdHVzIH0pID0+IHN0YXR1cyA9PT0gRmlsZVVwbG9hZFN0YXR1cy5BYm9ydGVkIHx8IHN0YXR1cyA9PT0gRmlsZVVwbG9hZFN0YXR1cy5DYW5jZWxsZWQgfHwgc3RhdHVzID09PSBGaWxlVXBsb2FkU3RhdHVzLkRlbGV0ZWRcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbmNlbE5vZGVWZXJzaW9uSW5zdGFuY2VzKGZpbGU6IEZpbGVNb2RlbCkge1xuICAgICAgICB0aGlzLmZpbGVzXG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiBpdGVtLm9wdGlvbnMubmV3VmVyc2lvbiAmJiBpdGVtLmRhdGEuZW50cnkuaWQgPT09IGZpbGUuZGF0YS5lbnRyeS5pZClcbiAgICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtLnN0YXR1cyA9IEZpbGVVcGxvYWRTdGF0dXMuRGVsZXRlZDtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm90aWZ5RXJyb3IoLi4uZmlsZXM6IEZpbGVNb2RlbFtdKSB7XG4gICAgICAgIGxldCBtZXNzYWdlRXJyb3I6IHN0cmluZyA9IG51bGw7XG5cbiAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgbWVzc2FnZUVycm9yID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0ZJTEVfVVBMT0FELk1FU1NBR0VTLlJFTU9WRV9GSUxFX0VSUk9SJywgeyBmaWxlTmFtZTogZmlsZXNbMF0ubmFtZSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1lc3NhZ2VFcnJvciA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdGSUxFX1VQTE9BRC5NRVNTQUdFUy5SRU1PVkVfRklMRVNfRVJST1InLCB7IHRvdGFsOiBmaWxlcy5sZW5ndGggfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVycm9yLmVtaXQobWVzc2FnZUVycm9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVXBsb2FkaW5nRmlsZShmaWxlOiBGaWxlTW9kZWwpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZpbGUuc3RhdHVzID09PSBGaWxlVXBsb2FkU3RhdHVzLlBlbmRpbmcgfHwgZmlsZS5zdGF0dXMgPT09IEZpbGVVcGxvYWRTdGF0dXMuU3RhcnRpbmcgfHwgZmlsZS5zdGF0dXMgPT09IEZpbGVVcGxvYWRTdGF0dXMuUHJvZ3Jlc3M7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInVwbG9hZC1saXN0XCI+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIG5nRm9yXG4gICAgICAgIFtuZ0Zvck9mXT1cImZpbGVzXCJcbiAgICAgICAgW25nRm9yVGVtcGxhdGVdPVwidGVtcGxhdGVcIiAvPlxuPC9kaXY+XG4iXX0=