import { Component, OnInit, ViewChild, Optional, Input, OnChanges } from '@angular/core'; import { DynamicDialogRef, DynamicDialogConfig } from 'primeng/api'; import { IRole } from '../shared/core/IRole'; import { RoleService } from '../shared/service/role.service'; import { StaffPermissionComponent } from '../staff-permission/staff-permission.component'; import { OverlayPanel } from 'primeng/primeng'; import { PermissionService } from '../shared/service/permission.service'; import { IPermission } from '../shared/core/IPermission'; import { IStaff } from '../shared/core/IStaff'; import { StaffService } from '../shared/service/staff.service'; @Component({ selector: 'app-permissions', templateUrl: './permissions.component.html', styleUrls: ['./permissions.component.css'] }) export class PermissionsComponent implements OnInit, OnChanges { @ViewChild(StaffPermissionComponent) staffPermissionComponent: StaffPermissionComponent; //this is used when the component is not using with a dialog @Input() roleTypeInput : IRole; //this is used when the component is not using with a dialog @Input() organisationIdInput: number; @Input() permissionType:string = ""; @Input() staffId:number; role:IRole; hasAccesstoAll:boolean; roleList: IRole[]=[]; staffList:IStaff[]=[]; organisationId:number = 0; importedRole: IRole; importedStaff: IStaff; permission:IPermission; constructor(@Optional() public ref: DynamicDialogRef, @Optional() public config: DynamicDialogConfig,private roleService:RoleService, private permissionService:PermissionService, private staffService:StaffService) { } ngOnInit() { //this component will always get role type and organisation id as inputs. if(this.config){ this.role = this.config.data.role; this.organisationId = this.config.data.organisationId; }if(this.roleTypeInput) { this.role = this.roleTypeInput; this.organisationId = this.organisationIdInput; } // initialize object this.permission = {Id:0} if(this.permissionType == 'STAFF'){ //get permission this.permissionService.getPermissions(this.organisationId,this.staffId.toString(),"STAFF").subscribe(permission=>{ permission.IsSimpleMode = !permission.IsAdvanceMode; this.permission = permission; }) // get staff list this.getStaffList(); } else{ //get permission if(this.role){ this.permissionService.getPermissions(this.organisationId,this.role.Id.toString(),"ROLE").subscribe(permission=>{ permission.IsSimpleMode = !permission.IsAdvanceMode; this.permission = permission; }) } // get role list this.getRoleList(); } } ngOnChanges(){ //get permission if(this.permissionType != 'STAFF'){ if(this.role){ this.permissionService.getPermissions(this.organisationId,this.role.Id.toString(),"ROLE").subscribe(permission=>{ permission.IsSimpleMode = !permission.IsAdvanceMode; this.permission = permission; }) } // get role list this.getRoleList(); } } // get organisation roles getRoleList(){ this.roleService.getRoleList(this.organisationId).subscribe(roles=>{ this.roleList = roles; // remove the selected role from the role list this.roleList = this.roleList.filter(x=>x.Id!=this.role.Id) }) } // get staff getStaffList(){ this.staffService.getStaffList('0', null).subscribe(staffs=>{ this.staffList = staffs; }) } // import selected role importRole(event,role:IRole,overlayPanel:OverlayPanel){ this.importedRole=role; overlayPanel.hide(); console.log(role.RoleName); //get imported permission this.permissionService.getPermissions(this.organisationId,role.Id.toString(),"ROLE").subscribe(permission=>{ permission.IsSimpleMode = !permission.IsAdvanceMode; var permissionId = this.permission.Id; this.permission = permission; this.permission.Id = permissionId; // show success message this.staffPermissionComponent.importRole(); }) } // import selected staff importStaff(event,staff:IStaff,overlayPanel:OverlayPanel){ this.importedStaff=staff; overlayPanel.hide(); console.log(staff.FirstName); //get imported permission this.permissionService.getPermissions(this.organisationId,staff.Id.toString(),"STAFF").subscribe(permission=>{ permission.IsSimpleMode = !permission.IsAdvanceMode; var permissionId = this.permission.Id; this.permission = permission; this.permission.Id = permissionId; // show success message this.staffPermissionComponent.importRole(); }) } // cancel role permission popup bindClosePopup(event:boolean){ if(this.ref){ this.ref.close(); } } clickSavePermission(){ this.staffPermissionComponent.savePermission(); } }