mirror of https://github.com/abpframework/abp
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
216 lines
20 KiB
216 lines
20 KiB
/**
|
|
* @fileoverview added by tsickle
|
|
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
*/
|
|
import * as tslib_1 from "tslib";
|
|
import { ConfirmationService } from '@abp/ng.theme.shared';
|
|
import { Component, TemplateRef, ViewChild } from '@angular/core';
|
|
import { FormBuilder, Validators, FormControl } from '@angular/forms';
|
|
import { Select, Store } from '@ngxs/store';
|
|
import { Observable } from 'rxjs';
|
|
import { finalize, pluck } from 'rxjs/operators';
|
|
import { CreateRole, DeleteRole, GetRoleById, GetRoles, UpdateRole } from '../../actions/identity.actions';
|
|
import { IdentityState } from '../../states/identity.state';
|
|
export class RolesComponent {
|
|
/**
|
|
* @param {?} confirmationService
|
|
* @param {?} fb
|
|
* @param {?} store
|
|
*/
|
|
constructor(confirmationService, fb, store) {
|
|
this.confirmationService = confirmationService;
|
|
this.fb = fb;
|
|
this.store = store;
|
|
this.visiblePermissions = false;
|
|
this.pageQuery = {
|
|
sorting: 'name',
|
|
};
|
|
this.loading = false;
|
|
this.modalBusy = false;
|
|
this.sortOrder = 'asc';
|
|
}
|
|
/**
|
|
* @param {?} value
|
|
* @return {?}
|
|
*/
|
|
onSearch(value) {
|
|
this.pageQuery.filter = value;
|
|
this.get();
|
|
}
|
|
/**
|
|
* @return {?}
|
|
*/
|
|
createForm() {
|
|
this.form = this.fb.group({
|
|
name: new FormControl({ value: this.selected.name || '', disabled: this.selected.isStatic }, [
|
|
Validators.required,
|
|
Validators.maxLength(256),
|
|
]),
|
|
isDefault: [this.selected.isDefault || false],
|
|
isPublic: [this.selected.isPublic || false],
|
|
});
|
|
}
|
|
/**
|
|
* @return {?}
|
|
*/
|
|
openModal() {
|
|
this.createForm();
|
|
this.isModalVisible = true;
|
|
}
|
|
/**
|
|
* @return {?}
|
|
*/
|
|
onAdd() {
|
|
this.selected = (/** @type {?} */ ({}));
|
|
this.openModal();
|
|
}
|
|
/**
|
|
* @param {?} id
|
|
* @return {?}
|
|
*/
|
|
onEdit(id) {
|
|
this.store
|
|
.dispatch(new GetRoleById(id))
|
|
.pipe(pluck('IdentityState', 'selectedRole'))
|
|
.subscribe((/**
|
|
* @param {?} selectedRole
|
|
* @return {?}
|
|
*/
|
|
selectedRole => {
|
|
this.selected = selectedRole;
|
|
this.openModal();
|
|
}));
|
|
}
|
|
/**
|
|
* @return {?}
|
|
*/
|
|
save() {
|
|
if (!this.form.valid)
|
|
return;
|
|
this.modalBusy = true;
|
|
this.store
|
|
.dispatch(this.selected.id
|
|
? new UpdateRole(Object.assign({}, this.form.value, { id: this.selected.id }))
|
|
: new CreateRole(this.form.value))
|
|
.subscribe((/**
|
|
* @return {?}
|
|
*/
|
|
() => {
|
|
this.modalBusy = false;
|
|
this.isModalVisible = false;
|
|
}));
|
|
}
|
|
/**
|
|
* @param {?} id
|
|
* @param {?} name
|
|
* @return {?}
|
|
*/
|
|
delete(id, name) {
|
|
this.confirmationService
|
|
.warn('AbpIdentity::RoleDeletionConfirmationMessage', 'AbpIdentity::AreYouSure', {
|
|
messageLocalizationParams: [name],
|
|
})
|
|
.subscribe((/**
|
|
* @param {?} status
|
|
* @return {?}
|
|
*/
|
|
(status) => {
|
|
if (status === "confirm" /* confirm */) {
|
|
this.store.dispatch(new DeleteRole(id));
|
|
}
|
|
}));
|
|
}
|
|
/**
|
|
* @param {?} data
|
|
* @return {?}
|
|
*/
|
|
onPageChange(data) {
|
|
this.pageQuery.skipCount = data.first;
|
|
this.pageQuery.maxResultCount = data.rows;
|
|
this.get();
|
|
}
|
|
/**
|
|
* @return {?}
|
|
*/
|
|
get() {
|
|
this.loading = true;
|
|
this.store
|
|
.dispatch(new GetRoles(this.pageQuery))
|
|
.pipe(finalize((/**
|
|
* @return {?}
|
|
*/
|
|
() => (this.loading = false))))
|
|
.subscribe();
|
|
}
|
|
/**
|
|
* @return {?}
|
|
*/
|
|
changeSortOrder() {
|
|
this.sortOrder = this.sortOrder.toLowerCase() === 'asc' ? 'desc' : 'asc';
|
|
}
|
|
}
|
|
RolesComponent.decorators = [
|
|
{ type: Component, args: [{
|
|
selector: 'abp-roles',
|
|
template: "<div class=\"row entry-row\">\n <div class=\"col-auto\">\n <h1 class=\"content-header-title\">{{ 'AbpIdentity::Roles' | abpLocalization }}</h1>\n </div>\n <div class=\"col\">\n <div class=\"text-lg-right pt-2\" id=\"AbpContentToolbar\">\n <button id=\"create-role\" class=\"btn btn-primary\" type=\"button\" (click)=\"onAdd()\">\n <i class=\"fa fa-plus mr-1\"></i> <span>{{ 'AbpIdentity::NewRole' | abpLocalization }}</span>\n </button>\n </div>\n </div>\n</div>\n\n<div id=\"identity-roles-wrapper\" class=\"card\">\n <div class=\"card-body\">\n <div id=\"data-tables-table-filter\" class=\"data-tables-filter\">\n <label\n ><input\n type=\"search\"\n class=\"form-control form-control-sm\"\n [placeholder]=\"'AbpUi::PagerSearch' | abpLocalization\"\n (input.debounce)=\"onSearch($event.target.value)\"\n /></label>\n </div>\n <p-table\n *ngIf=\"[130, 200] as columnWidths\"\n [value]=\"data$ | async\"\n [lazy]=\"true\"\n [lazyLoadOnInit]=\"false\"\n [paginator]=\"true\"\n [rows]=\"10\"\n [totalRecords]=\"totalCount$ | async\"\n [loading]=\"loading\"\n [resizableColumns]=\"true\"\n [scrollable]=\"true\"\n (onLazyLoad)=\"onPageChange($event)\"\n >\n <ng-template pTemplate=\"colgroup\">\n <colgroup>\n <col *ngFor=\"let width of columnWidths\" [ngStyle]=\"{ 'width.px': width }\" />\n </colgroup>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\" let-columns>\n <tr\n abp-table-empty-message\n [attr.colspan]=\"columnWidths.length\"\n localizationResource=\"AbpIdentityServer\"\n localizationProp=\"NoDataAvailableInDatatable\"\n ></tr>\n </ng-template>\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th>{{ 'AbpIdentity::Actions' | abpLocalization }}</th>\n <th pResizableColumn (click)=\"changeSortOrder()\">\n {{ 'AbpIdentity::RoleName' | abpLocalization }}\n <span class=\"float-right\"\n ><i [ngClass]=\"['fa', sortOrder === 'desc' ? 'fa-sort-desc' : 'fa-sort-asc']\"></i\n ></span>\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-data>\n <tr>\n <td>\n <div ngbDropdown container=\"body\" class=\"d-inline-block\">\n <button\n class=\"btn btn-primary btn-sm dropdown-toggle\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n ngbDropdownToggle\n >\n <i class=\"fa fa-cog mr-1\"></i>{{ 'AbpIdentity::Actions' | abpLocalization }}\n </button>\n <div ngbDropdownMenu>\n <button ngbDropdownItem (click)=\"onEdit(data.id)\">{{ 'AbpIdentity::Edit' | abpLocalization }}</button>\n <button ngbDropdownItem (click)=\"providerKey = data.name; visiblePermissions = true\">\n {{ 'AbpIdentity::Permissions' | abpLocalization }}\n </button>\n <button ngbDropdownItem (click)=\"delete(data.id, data.name)\">\n {{ 'AbpIdentity::Delete' | abpLocalization }}\n </button>\n </div>\n </div>\n </td>\n <td>{{ data.name }}</td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n</div>\n\n<abp-modal size=\"md\" [(visible)]=\"isModalVisible\" [busy]=\"modalBusy\">\n <ng-template #abpHeader>\n <h3>{{ (selected?.id ? 'AbpIdentity::Edit' : 'AbpIdentity::NewRole') | abpLocalization }}</h3>\n </ng-template>\n\n <ng-template #abpBody>\n <form [formGroup]=\"form\" (ngSubmit)=\"save()\">\n <div class=\"form-group\">\n <label for=\"role-name\">{{ 'AbpIdentity::RoleName' | abpLocalization }}</label\n ><span> * </span>\n <input autofocus type=\"text\" id=\"role-name\" class=\"form-control\" formControlName=\"name\" />\n </div>\n\n <div class=\"custom-checkbox custom-control mb-2\">\n <input type=\"checkbox\" id=\"role-is-default\" class=\"custom-control-input\" formControlName=\"isDefault\" />\n <label class=\"custom-control-label\" for=\"role-is-default\">{{\n 'AbpIdentity::DisplayName:IsDefault' | abpLocalization\n }}</label>\n </div>\n\n <div class=\"custom-checkbox custom-control mb-2\">\n <input type=\"checkbox\" id=\"role-is-public\" class=\"custom-control-input\" formControlName=\"isPublic\" />\n <label class=\"custom-control-label\" for=\"role-is-public\">{{\n 'AbpIdentity::DisplayName:IsPublic' | abpLocalization\n }}</label>\n </div>\n </form>\n </ng-template>\n\n <ng-template #abpFooter>\n <button type=\"button\" class=\"btn btn-secondary\" #abpClose>\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\n </button>\n <abp-button iconClass=\"fa fa-check\" (click)=\"save()\">{{ 'AbpIdentity::Save' | abpLocalization }}</abp-button>\n </ng-template>\n</abp-modal>\n\n<abp-permission-management\n [(visible)]=\"visiblePermissions\"\n providerName=\"Role\"\n [providerKey]=\"providerKey\"\n></abp-permission-management>\n"
|
|
}] }
|
|
];
|
|
/** @nocollapse */
|
|
RolesComponent.ctorParameters = () => [
|
|
{ type: ConfirmationService },
|
|
{ type: FormBuilder },
|
|
{ type: Store }
|
|
];
|
|
RolesComponent.propDecorators = {
|
|
modalContent: [{ type: ViewChild, args: ['modalContent', { static: false },] }]
|
|
};
|
|
tslib_1.__decorate([
|
|
Select(IdentityState.getRoles),
|
|
tslib_1.__metadata("design:type", Observable)
|
|
], RolesComponent.prototype, "data$", void 0);
|
|
tslib_1.__decorate([
|
|
Select(IdentityState.getRolesTotalCount),
|
|
tslib_1.__metadata("design:type", Observable)
|
|
], RolesComponent.prototype, "totalCount$", void 0);
|
|
if (false) {
|
|
/** @type {?} */
|
|
RolesComponent.prototype.data$;
|
|
/** @type {?} */
|
|
RolesComponent.prototype.totalCount$;
|
|
/** @type {?} */
|
|
RolesComponent.prototype.form;
|
|
/** @type {?} */
|
|
RolesComponent.prototype.selected;
|
|
/** @type {?} */
|
|
RolesComponent.prototype.isModalVisible;
|
|
/** @type {?} */
|
|
RolesComponent.prototype.visiblePermissions;
|
|
/** @type {?} */
|
|
RolesComponent.prototype.providerKey;
|
|
/** @type {?} */
|
|
RolesComponent.prototype.pageQuery;
|
|
/** @type {?} */
|
|
RolesComponent.prototype.loading;
|
|
/** @type {?} */
|
|
RolesComponent.prototype.modalBusy;
|
|
/** @type {?} */
|
|
RolesComponent.prototype.sortOrder;
|
|
/** @type {?} */
|
|
RolesComponent.prototype.modalContent;
|
|
/**
|
|
* @type {?}
|
|
* @private
|
|
*/
|
|
RolesComponent.prototype.confirmationService;
|
|
/**
|
|
* @type {?}
|
|
* @private
|
|
*/
|
|
RolesComponent.prototype.fb;
|
|
/**
|
|
* @type {?}
|
|
* @private
|
|
*/
|
|
RolesComponent.prototype.store;
|
|
}
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFicC9uZy5pZGVudGl0eS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3JvbGVzL3JvbGVzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLE9BQU8sRUFBRSxtQkFBbUIsRUFBVyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFhLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUzRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFNNUQsTUFBTSxPQUFPLGNBQWM7Ozs7OztJQThCekIsWUFBb0IsbUJBQXdDLEVBQVUsRUFBZSxFQUFVLEtBQVk7UUFBdkYsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUFVLE9BQUUsR0FBRixFQUFFLENBQWE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFPO1FBakIzRyx1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFJcEMsY0FBUyxHQUF3QjtZQUMvQixPQUFPLEVBQUUsTUFBTTtTQUNoQixDQUFDO1FBRUYsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUV6QixjQUFTLEdBQVksS0FBSyxDQUFDO1FBRTNCLGNBQVMsR0FBVyxLQUFLLENB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Q0FBb0I7O0lBRXBCLG1DQUVFOztJQUVGLGlDQUF5Qjs7SUFFekIsbUNBQTJCOztJQUUzQixtQ0FBMEI7O0lBRTFCLHNDQUMrQjs7Ozs7SUFFbkIsNkNBQWdEOzs7OztJQUFFLDRCQUF1Qjs7Ozs7SUFBRSwrQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBQlAgfSBmcm9tICdAYWJwL25nLmNvcmUnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgVG9hc3RlciB9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkJztcbmltcG9ydCB7IENvbXBvbmVudCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTZWxlY3QsIFN0b3JlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmluYWxpemUsIHBsdWNrIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ3JlYXRlUm9sZSwgRGVsZXRlUm9sZSwgR2V0Um9sZUJ5SWQsIEdldFJvbGVzLCBVcGRhdGVSb2xlIH0gZnJvbSAnLi4vLi4vYWN0aW9ucy9pZGVudGl0eS5hY3Rpb25zJztcbmltcG9ydCB7IElkZW50aXR5IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2lkZW50aXR5JztcbmltcG9ydCB7IElkZW50aXR5U3RhdGUgfSBmcm9tICcuLi8uLi9zdGF0ZXMvaWRlbnRpdHkuc3RhdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhYnAtcm9sZXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vcm9sZXMuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBSb2xlc0NvbXBvbmVudCB7XG4gIEBTZWxlY3QoSWRlbnRpdHlTdGF0ZS5nZXRSb2xlcylcbiAgZGF0YSQ6IE9ic2VydmFibGU8SWRlbnRpdHkuUm9sZUl0ZW1bXT47XG5cbiAgQFNlbGVjdChJZGVudGl0eVN0YXRlLmdldFJvbGVzVG90YWxDb3VudClcbiAgdG90YWxDb3VudCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcblxuICBmb3JtOiBGb3JtR3JvdXA7XG5cbiAgc2VsZWN0ZWQ6IElkZW50aXR5LlJvbGVJdGVtO1xuXG4gIGlzTW9kYWxWaXNpYmxlOiBib29sZWFuO1xuXG4gIHZpc2libGVQZXJtaXNzaW9uczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByb3ZpZGVyS2V5OiBzdHJpbmc7XG5cbiAgcGFnZVF1ZXJ5OiBBQlAuUGFnZVF1ZXJ5UGFyYW1zID0ge1xuICAgIHNvcnRpbmc6ICduYW1lJyxcbiAgfTtcblxuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgbW9kYWxCdXN5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgc29ydE9yZGVyOiBzdHJpbmcgPSAnYXNjJztcblxuICBAVmlld0NoaWxkKCdtb2RhbENvbnRlbnQnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgbW9kYWxDb250ZW50OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSwgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgc3RvcmU6IFN0b3JlKSB7fVxuXG4gIG9uU2VhcmNoKHZhbHVlKSB7XG4gICAgdGhpcy5wYWdlUXVlcnkuZmlsdGVyID0gdmFsdWU7XG4gICAgdGhpcy5nZXQoKTtcbiAgfVxuXG4gIGNyZWF0ZUZvcm0oKSB7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBuYW1lOiBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogdGhpcy5zZWxlY3RlZC5uYW1lIHx8ICcnLCBkaXNhYmxlZDogdGhpcy5zZWxlY3RlZC5pc1N0YXRpYyB9LCBbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NiksXG4gICAgICBdKSxcbiAgICAgIGlzRGVmYXVsdDogW3RoaXMuc2VsZWN0ZWQuaXNEZWZhdWx0IHx8IGZhbHNlXSxcbiAgICAgIGlzUHVibGljOiBbdGhpcy5zZWxlY3RlZC5pc1B1YmxpYyB8fCBmYWxzZV0sXG4gICAgfSk7XG4gIH1cblxuICBvcGVuTW9kYWwoKSB7XG4gICAgdGhpcy5jcmVhdGVGb3JtKCk7XG4gICAgdGhpcy5pc01vZGFsVmlzaWJsZSA9IHRydWU7XG4gIH1cblxuICBvbkFkZCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkID0ge30gYXMgSWRlbnRpdHkuUm9sZUl0ZW07XG4gICAgdGhpcy5vcGVuTW9kYWwoKTtcbiAgfVxuXG4gIG9uRWRpdChpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5zdG9yZVxuICAgICAgLmRpc3BhdGNoKG5ldyBHZXRSb2xlQnlJZChpZCkpXG4gICAgICAucGlwZShwbHVjaygnSWRlbnRpdHlTdGF0ZScsICdzZWxlY3RlZFJvbGUnKSlcbiAgICAgIC5zdWJzY3JpYmUoc2VsZWN0ZWRSb2xlID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdGVkUm9sZTtcbiAgICAgICAgdGhpcy5vcGVuTW9kYWwoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc2F2ZSgpIHtcbiAgICBpZiAoIXRoaXMuZm9ybS52YWxpZCkgcmV0dXJuO1xuICAgIHRoaXMubW9kYWxCdXN5ID0gdHJ1ZTtcblxuICAgIHRoaXMuc3RvcmVcbiAgICAgIC5kaXNwYXRjaChcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5pZFxuICAgICAgICAgID8gbmV3IFVwZGF0ZVJvbGUoeyAuLi50aGlzLmZvcm0udmFsdWUsIGlkOiB0aGlzLnNlbGVjdGVkLmlkIH0pXG4gICAgICAgICAgOiBuZXcgQ3JlYXRlUm9sZSh0aGlzLmZvcm0udmFsdWUpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubW9kYWxCdXN5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNNb2RhbFZpc2libGUgPSBmYWxzZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlKGlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZVxuICAgICAgLndhcm4oJ0FicElkZW50aXR5OjpSb2xlRGVsZXRpb25Db25maXJtYXRpb25NZXNzYWdlJywgJ0FicElkZW50aXR5OjpBcmVZb3VTdXJlJywge1xuICAgICAgICBtZXNzYWdlTG9jYWxpemF0aW9uUGFyYW1zOiBbbmFtZV0sXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSgoc3RhdHVzOiBUb2FzdGVyLlN0YXR1cykgPT4ge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBUb2FzdGVyLlN0YXR1cy5jb25maXJtKSB7XG4gICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgRGVsZXRlUm9sZShpZCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIG9uUGFnZUNoYW5nZShkYXRhKSB7XG4gICAgdGhpcy5wYWdlUXVlcnkuc2tpcENvdW50ID0gZGF0YS5maXJzdDtcbiAgICB0aGlzLnBhZ2VRdWVyeS5tYXhSZXN1bHRDb3VudCA9IGRhdGEucm93cztcblxuICAgIHRoaXMuZ2V0KCk7XG4gIH1cblxuICBnZXQoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnN0b3JlXG4gICAgICAuZGlzcGF0Y2gobmV3IEdldFJvbGVzKHRoaXMucGFnZVF1ZXJ5KSlcbiAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgY2hhbmdlU29ydE9yZGVyKCkge1xuICAgIHRoaXMuc29ydE9yZGVyID0gdGhpcy5zb3J0T3JkZXIudG9Mb3dlckNhc2UoKSA9PT0gJ2FzYycgPyAnZGVzYycgOiAnYXNjJztcbiAgfVxufVxuIl19
|