UNPKG

@alfresco/adf-content-services

Version:
196 lines 26.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. */ /* eslint-disable @angular-eslint/component-selector */ import { Component, EventEmitter, Input, Output } from '@angular/core'; import { DocumentActionsService } from '../../services/document-actions.service'; import { FolderActionsService } from '../../services/folder-actions.service'; import { ContentActionModel, ContentActionTarget } from './../../models/content-action.model'; import { ContentActionListComponent } from './content-action-list.component'; import * as i0 from "@angular/core"; import * as i1 from "./content-action-list.component"; import * as i2 from "../../services/document-actions.service"; import * as i3 from "../../services/folder-actions.service"; export class ContentActionComponent { constructor(list, documentActions, folderActions) { this.list = list; this.documentActions = documentActions; this.folderActions = folderActions; /** The title of the action as shown in the menu. */ this.title = 'Action'; /** Visibility state (see examples). */ this.visible = true; /** Type of item that the action applies to. Can be "document" or "folder" */ this.target = ContentActionTarget.All; /** Is the menu item disabled? */ this.disabled = false; /** Emitted when the user selects the action from the menu. */ this.execute = new EventEmitter(); /** Emitted when a permission error occurs */ this.permissionEvent = new EventEmitter(); /** * Emitted when an error occurs during the action. * Applies to copy and move actions. */ this.error = new EventEmitter(); /** * Emitted when the action succeeds with the success string message. * Applies to copy, move and delete actions. */ this.success = new EventEmitter(); this.subscriptions = []; } ngOnInit() { if (this.target === ContentActionTarget.All) { this.folderActionModel = this.generateAction(ContentActionTarget.Folder); this.documentActionModel = this.generateAction(ContentActionTarget.Document); } else { this.documentActionModel = this.generateAction(this.target); } } ngOnChanges(changes) { if (changes.visible && !changes.visible.firstChange) { if (this.documentActionModel) { this.documentActionModel.visible = changes.visible.currentValue; } if (this.folderActionModel) { this.folderActionModel.visible = changes.visible.currentValue; } } if (changes.disabled && !changes.disabled.firstChange) { if (this.documentActionModel) { this.documentActionModel.disabled = changes.disabled.currentValue; } if (this.folderActionModel) { this.folderActionModel.disabled = changes.disabled.currentValue; } } } ngOnDestroy() { this.subscriptions.forEach((subscription) => subscription.unsubscribe()); this.subscriptions = []; if (this.documentActionModel) { this.unregister(this.documentActionModel); this.documentActionModel = null; } if (this.folderActionModel) { this.unregister(this.folderActionModel); this.folderActionModel = null; } } register(model) { if (this.list) { return this.list.registerAction(model); } return false; } unregister(model) { if (this.list) { return this.list.unregisterAction(model); } return false; } generateAction(target) { const model = new ContentActionModel({ title: this.title, icon: this.icon, permission: this.permission, disableWithNoPermission: this.disableWithNoPermission, target, disabled: this.disabled, visible: this.visible }); if (this.handler) { model.handler = this.getSystemHandler(target, this.handler); } if (this.execute) { model.execute = (value) => { this.execute.emit({ value }); }; } this.register(model); return model; } getSystemHandler(target, name) { if (target) { target = target.toLowerCase(); if (target === ContentActionTarget.Document) { if (this.documentActions) { this.subscriptions.push(this.documentActions.permissionEvent.subscribe((permission) => { this.permissionEvent.emit(permission); }), this.documentActions.error.subscribe((errors) => { this.error.emit(errors); }), this.documentActions.success.subscribe((message) => { this.success.emit(message); })); return this.documentActions.getHandler(name); } return null; } if (target === ContentActionTarget.Folder) { if (this.folderActions) { this.subscriptions.push(this.folderActions.permissionEvent.subscribe((permission) => { this.permissionEvent.emit(permission); }), this.folderActions.error.subscribe((errors) => { this.error.emit(errors); }), this.folderActions.success.subscribe((message) => { this.success.emit(message); })); return this.folderActions.getHandler(name); } return null; } } return null; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ContentActionComponent, deps: [{ token: i1.ContentActionListComponent }, { token: i2.DocumentActionsService }, { token: i3.FolderActionsService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: ContentActionComponent, isStandalone: true, selector: "content-action", inputs: { title: "title", icon: "icon", visible: "visible", handler: "handler", target: "target", permission: "permission", disableWithNoPermission: "disableWithNoPermission", disabled: "disabled" }, outputs: { execute: "execute", permissionEvent: "permissionEvent", error: "error", success: "success" }, providers: [DocumentActionsService, FolderActionsService], usesOnChanges: true, ngImport: i0, template: '', isInline: true }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ContentActionComponent, decorators: [{ type: Component, args: [{ selector: 'content-action', standalone: true, template: '', providers: [DocumentActionsService, FolderActionsService] }] }], ctorParameters: () => [{ type: i1.ContentActionListComponent }, { type: i2.DocumentActionsService }, { type: i3.FolderActionsService }], propDecorators: { title: [{ type: Input }], icon: [{ type: Input }], visible: [{ type: Input }], handler: [{ type: Input }], target: [{ type: Input }], permission: [{ type: Input }], disableWithNoPermission: [{ type: Input }], disabled: [{ type: Input }], execute: [{ type: Output }], permissionEvent: [{ type: Output }], error: [{ type: Output }], success: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1hY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi9kb2N1bWVudC1saXN0L2NvbXBvbmVudHMvY29udGVudC1hY3Rpb24vY29udGVudC1hY3Rpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUF1QyxNQUFNLGVBQWUsQ0FBQztBQUdwSCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7QUFTN0UsTUFBTSxPQUFPLHNCQUFzQjtJQTREL0IsWUFDWSxJQUFnQyxFQUNoQyxlQUF1QyxFQUN2QyxhQUFtQztRQUZuQyxTQUFJLEdBQUosSUFBSSxDQUE0QjtRQUNoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7UUFDdkMsa0JBQWEsR0FBYixhQUFhLENBQXNCO1FBOUQvQyxvREFBb0Q7UUFFcEQsVUFBSyxHQUFXLFFBQVEsQ0FBQztRQU16Qix1Q0FBdUM7UUFFdkMsWUFBTyxHQUFxQyxJQUFJLENBQUM7UUFNakQsNkVBQTZFO1FBRTdFLFdBQU0sR0FBVyxtQkFBbUIsQ0FBQyxHQUFHLENBQUM7UUFVekMsaUNBQWlDO1FBRWpDLGFBQVEsR0FBcUMsS0FBSyxDQUFDO1FBRW5ELDhEQUE4RDtRQUU5RCxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUU3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LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvciAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDb250ZW50QWN0aW9uSGFuZGxlciB9IGZyb20gJy4uLy4uL21vZGVscy9jb250ZW50LWFjdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBEb2N1bWVudEFjdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZG9jdW1lbnQtYWN0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IEZvbGRlckFjdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9sZGVyLWFjdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBDb250ZW50QWN0aW9uTW9kZWwsIENvbnRlbnRBY3Rpb25UYXJnZXQgfSBmcm9tICcuLy4uLy4uL21vZGVscy9jb250ZW50LWFjdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBDb250ZW50QWN0aW9uTGlzdENvbXBvbmVudCB9IGZyb20gJy4vY29udGVudC1hY3Rpb24tbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnY29udGVudC1hY3Rpb24nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6ICcnLFxuICAgIHByb3ZpZGVyczogW0RvY3VtZW50QWN0aW9uc1NlcnZpY2UsIEZvbGRlckFjdGlvbnNTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBDb250ZW50QWN0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgLyoqIFRoZSB0aXRsZSBvZiB0aGUgYWN0aW9uIGFzIHNob3duIGluIHRoZSBtZW51LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGl0bGU6IHN0cmluZyA9ICdBY3Rpb24nO1xuXG4gICAgLyoqIFRoZSBuYW1lIG9mIHRoZSBpY29uIHRvIGRpc3BsYXkgbmV4dCB0byB0aGUgbWVudSBjb21tYW5kIChjYW4gYmUgbGVmdCBibGFuaykuICovXG4gICAgQElucHV0KClcbiAgICBpY29uOiBzdHJpbmc7XG5cbiAgICAvKiogVmlzaWJpbGl0eSBzdGF0ZSAoc2VlIGV4YW1wbGVzKS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHZpc2libGU6IGJvb2xlYW4gfCAoKC4uLmFyZ3MpID0+IGJvb2xlYW4pID0gdHJ1ZTtcblxuICAgIC8qKiBTeXN0ZW0gYWN0aW9ucy4gQ2FuIGJlIFwiZGVsZXRlXCIsIFwiZG93bmxvYWRcIiwgXCJjb3B5XCIgb3IgXCJtb3ZlXCIuICovXG4gICAgQElucHV0KClcbiAgICBoYW5kbGVyOiBzdHJpbmc7XG5cbiAgICAvKiogVHlwZSBvZiBpdGVtIHRoYXQgdGhlIGFjdGlvbiBhcHBsaWVzIHRvLiBDYW4gYmUgXCJkb2N1bWVudFwiIG9yIFwiZm9sZGVyXCIgKi9cbiAgICBASW5wdXQoKVxuICAgIHRhcmdldDogc3RyaW5nID0gQ29udGVudEFjdGlvblRhcmdldC5BbGw7XG5cbiAgICAvKiogVGhlIHBlcm1pc3Npb24gdHlwZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHBlcm1pc3Npb246IHN0cmluZztcblxuICAgIC8qKiBTaG91bGQgdGhpcyBhY3Rpb24gYmUgZGlzYWJsZWQgaW4gdGhlIG1lbnUgaWYgdGhlIHVzZXIgZG9lc24ndCBoYXZlIHBlcm1pc3Npb24gZm9yIGl0PyAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZVdpdGhOb1Blcm1pc3Npb246IGJvb2xlYW47XG5cbiAgICAvKiogSXMgdGhlIG1lbnUgaXRlbSBkaXNhYmxlZD8gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkOiBib29sZWFuIHwgKCguLi5hcmdzKSA9PiBib29sZWFuKSA9IGZhbHNlO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBzZWxlY3RzIHRoZSBhY3Rpb24gZnJvbSB0aGUgbWVudS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBleGVjdXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhIHBlcm1pc3Npb24gZXJyb3Igb2NjdXJzICovXG4gICAgQE91dHB1dCgpXG4gICAgcGVybWlzc2lvbkV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGFjdGlvbi5cbiAgICAgKiBBcHBsaWVzIHRvIGNvcHkgYW5kIG1vdmUgYWN0aW9ucy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBlcnJvciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgYWN0aW9uIHN1Y2NlZWRzIHdpdGggdGhlIHN1Y2Nlc3Mgc3RyaW5nIG1lc3NhZ2UuXG4gICAgICogQXBwbGllcyB0byBjb3B5LCBtb3ZlIGFuZCBkZWxldGUgYWN0aW9ucy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBzdWNjZXNzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgZG9jdW1lbnRBY3Rpb25Nb2RlbDogQ29udGVudEFjdGlvbk1vZGVsO1xuICAgIGZvbGRlckFjdGlvbk1vZGVsOiBDb250ZW50QWN0aW9uTW9kZWw7XG5cbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBsaXN0OiBDb250ZW50QWN0aW9uTGlzdENvbXBvbmVudCxcbiAgICAgICAgcHJpdmF0ZSBkb2N1bWVudEFjdGlvbnM6IERvY3VtZW50QWN0aW9uc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZm9sZGVyQWN0aW9uczogRm9sZGVyQWN0aW9uc1NlcnZpY2VcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0ID09PSBDb250ZW50QWN0aW9uVGFyZ2V0LkFsbCkge1xuICAgICAgICAgICAgdGhpcy5mb2xkZXJBY3Rpb25Nb2RlbCA9IHRoaXMuZ2VuZXJhdGVBY3Rpb24oQ29udGVudEFjdGlvblRhcmdldC5Gb2xkZXIpO1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudEFjdGlvbk1vZGVsID0gdGhpcy5nZW5lcmF0ZUFjdGlvbihDb250ZW50QWN0aW9uVGFyZ2V0LkRvY3VtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRBY3Rpb25Nb2RlbCA9IHRoaXMuZ2VuZXJhdGVBY3Rpb24odGhpcy50YXJnZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlcy52aXNpYmxlICYmICFjaGFuZ2VzLnZpc2libGUuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRvY3VtZW50QWN0aW9uTW9kZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50QWN0aW9uTW9kZWwudmlzaWJsZSA9IGNoYW5nZXMudmlzaWJsZS5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5mb2xkZXJBY3Rpb25Nb2RlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9sZGVyQWN0aW9uTW9kZWwudmlzaWJsZSA9IGNoYW5nZXMudmlzaWJsZS5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5kaXNhYmxlZCAmJiAhY2hhbmdlcy5kaXNhYmxlZC5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRBY3Rpb25Nb2RlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRBY3Rpb25Nb2RlbC5kaXNhYmxlZCA9IGNoYW5nZXMuZGlzYWJsZWQuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZm9sZGVyQWN0aW9uTW9kZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvbGRlckFjdGlvbk1vZGVsLmRpc2FibGVkID0gY2hhbmdlcy5kaXNhYmxlZC5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YnNjcmlwdGlvbikgPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy5kb2N1bWVudEFjdGlvbk1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnVucmVnaXN0ZXIodGhpcy5kb2N1bWVudEFjdGlvbk1vZGVsKTtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRBY3Rpb25Nb2RlbCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5mb2xkZXJBY3Rpb25Nb2RlbCkge1xuICAgICAgICAgICAgdGhpcy51bnJlZ2lzdGVyKHRoaXMuZm9sZGVyQWN0aW9uTW9kZWwpO1xuICAgICAgICAgICAgdGhpcy5mb2xkZXJBY3Rpb25Nb2RlbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3Rlcihtb2RlbDogQ29udGVudEFjdGlvbk1vZGVsKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3QucmVnaXN0ZXJBY3Rpb24obW9kZWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB1bnJlZ2lzdGVyKG1vZGVsOiBDb250ZW50QWN0aW9uTW9kZWwpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMubGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdC51bnJlZ2lzdGVyQWN0aW9uKG1vZGVsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUFjdGlvbih0YXJnZXQ6IHN0cmluZyk6IENvbnRlbnRBY3Rpb25Nb2RlbCB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gbmV3IENvbnRlbnRBY3Rpb25Nb2RlbCh7XG4gICAgICAgICAgICB0aXRsZTogdGhpcy50aXRsZSxcbiAgICAgICAgICAgIGljb246IHRoaXMuaWNvbixcbiAgICAgICAgICAgIHBlcm1pc3Npb246IHRoaXMucGVybWlzc2lvbixcbiAgICAgICAgICAgIGRpc2FibGVXaXRoTm9QZXJtaXNzaW9uOiB0aGlzLmRpc2FibGVXaXRoTm9QZXJtaXNzaW9uLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQsXG4gICAgICAgICAgICB2aXNpYmxlOiB0aGlzLnZpc2libGVcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmhhbmRsZXIpIHtcbiAgICAgICAgICAgIG1vZGVsLmhhbmRsZXIgPSB0aGlzLmdldFN5c3RlbUhhbmRsZXIodGFyZ2V0LCB0aGlzLmhhbmRsZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZXhlY3V0ZSkge1xuICAgICAgICAgICAgbW9kZWwuZXhlY3V0ZSA9ICh2YWx1ZTogYW55KTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlLmVtaXQoeyB2YWx1ZSB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlZ2lzdGVyKG1vZGVsKTtcbiAgICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH1cblxuICAgIGdldFN5c3RlbUhhbmRsZXIodGFyZ2V0OiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IENvbnRlbnRBY3Rpb25IYW5kbGVyIHtcbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIGlmICh0YXJnZXQgPT09IENvbnRlbnRBY3Rpb25UYXJnZXQuRG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kb2N1bWVudEFjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50QWN0aW9ucy5wZXJtaXNzaW9uRXZlbnQuc3Vic2NyaWJlKChwZXJtaXNzaW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uRXZlbnQuZW1pdChwZXJtaXNzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudEFjdGlvbnMuZXJyb3Iuc3Vic2NyaWJlKChlcnJvcnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yLmVtaXQoZXJyb3JzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudEFjdGlvbnMuc3VjY2Vzcy5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MuZW1pdChtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRBY3Rpb25zLmdldEhhbmRsZXIobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGFyZ2V0ID09PSBDb250ZW50QWN0aW9uVGFyZ2V0LkZvbGRlcikge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvbGRlckFjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbGRlckFjdGlvbnMucGVybWlzc2lvbkV2ZW50LnN1YnNjcmliZSgocGVybWlzc2lvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbkV2ZW50LmVtaXQocGVybWlzc2lvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9sZGVyQWN0aW9ucy5lcnJvci5zdWJzY3JpYmUoKGVycm9ycykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IuZW1pdChlcnJvcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbGRlckFjdGlvbnMuc3VjY2Vzcy5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MuZW1pdChtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9sZGVyQWN0aW9ucy5nZXRIYW5kbGVyKG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iXX0=