import { Component, ElementRef, EventEmitter, Injector, Output, ViewChild } from '@angular/core'; import { AppComponentBase } from '@shared/common/app-component-base'; import { CreateOrUpdateRoleInput, RoleEditDto, RoleServiceProxy } from '@shared/service-proxies/service-proxies'; import { ModalDirective } from 'ngx-bootstrap'; import { PermissionTreeComponent } from '../shared/permission-tree.component'; import { finalize } from 'rxjs/operators'; @Component({ selector: 'createOrEditRoleModal', templateUrl: './create-or-edit-role-modal.component.html' }) export class CreateOrEditRoleModalComponent extends AppComponentBase { @ViewChild('createOrEditModal', {static: true}) modal: ModalDirective; @ViewChild('permissionTree', {static: false}) permissionTree: PermissionTreeComponent; @Output() modalSave: EventEmitter = new EventEmitter(); active = false; saving = false; role: RoleEditDto = new RoleEditDto(); constructor( injector: Injector, private _roleService: RoleServiceProxy ) { super(injector); } show(roleId?: number): void { const self = this; self.active = true; self._roleService.getRoleForEdit(roleId).subscribe(result => { self.role = result.role; this.permissionTree.editData = result; self.modal.show(); }); } onShown(): void { document.getElementById('RoleDisplayName').focus(); } save(): void { const self = this; const input = new CreateOrUpdateRoleInput(); input.role = self.role; input.grantedPermissionNames = self.permissionTree.getGrantedPermissionNames(); this.saving = true; this._roleService.createOrUpdateRole(input) .pipe(finalize(() => this.saving = false)) .subscribe(() => { this.notify.info(this.l('SavedSuccessfully')); this.close(); this.modalSave.emit(null); }); } close(): void { this.active = false; this.modal.hide(); } }