X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=src%2Fapp%2Froles%2Froles-create-edit%2FRolesCreateEditComponent.ts;h=59196eaf11466fe3c51005235a18cb2a962dcf60;hb=319d328d0bbb1e156ac767851c8c33acb518dc94;hp=0419c5f69da0cec84fdd1c81e93715c94692cddd;hpb=3b4814aa2d3dec621dadb52f058ba95a3dc3a86a;p=osm%2FNG-UI.git diff --git a/src/app/roles/roles-create-edit/RolesCreateEditComponent.ts b/src/app/roles/roles-create-edit/RolesCreateEditComponent.ts index 0419c5f..59196ea 100644 --- a/src/app/roles/roles-create-edit/RolesCreateEditComponent.ts +++ b/src/app/roles/roles-create-edit/RolesCreateEditComponent.ts @@ -18,6 +18,7 @@ /** * @file Roles Create and Edit Component */ +import { isNullOrUndefined } from 'util'; import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Component, Injector, Input, OnInit } from '@angular/core'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; @@ -30,7 +31,6 @@ import * as jsonpath from 'jsonpath'; import { RestService } from 'RestService'; import { Permission, PermissionGroup, RoleConfig, RoleData } from 'RolesModel'; import { SharedService } from 'SharedService'; -import { isNullOrUndefined } from 'util'; /** * Creating component @@ -70,6 +70,15 @@ export class RolesCreateEditComponent implements OnInit { /** Contains view selection value either text or preview @public */ public viewMode: string = 'text'; + /** Contains current permissions data @private */ + private currentPermissions: string; + + /** Contains current role name @private */ + private currentRoleName: string; + + /** Contains modified role name @private */ + private modifiedRoleName: string; + /** Contains role id value @private */ private roleRef: string; @@ -191,7 +200,9 @@ export class RolesCreateEditComponent implements OnInit { }; this.restService.postResource(apiURLHeader, postData).subscribe(() => { this.notifierService.notify('success', this.translateService.instant('PAGE.ROLES.CREATEDSUCCESSFULLY')); - this.router.navigate(['/roles/details']).catch(); + this.router.navigate(['/roles/details']).catch((): void => { + // Catch Navigation Error + }); }, (error: ERRORDATA) => { this.isLoadingResults = false; this.restService.handleError(error, 'post'); @@ -204,16 +215,15 @@ export class RolesCreateEditComponent implements OnInit { url: environment.ROLES_URL + '/' + this.roleRef, httpOptions: { headers: this.headers } }; + this.modifiedRoleName = this.roleForm.value.roleName; let permissionData: Object = {}; this.sharedService.cleanForm(this.roleForm); if (!this.roleForm.invalid) { if (this.viewMode === 'preview') { - this.isLoadingResults = true; permissionData = this.generatePermissions(); this.roleEditAPI(apiURLHeader, permissionData); } else { if (this.checkPermission()) { - this.isLoadingResults = true; permissionData = this.roleForm.value.permissions !== '' ? JSON.parse(this.roleForm.value.permissions) : {}; this.roleEditAPI(apiURLHeader, permissionData); } @@ -223,13 +233,20 @@ export class RolesCreateEditComponent implements OnInit { /** Method to handle role edit API call */ public roleEditAPI(apiURLHeader: APIURLHEADER, permissionData: {}): void { + if ((JSON.stringify(permissionData, null, '\t') === this.currentPermissions) && (this.modifiedRoleName === this.currentRoleName)) { + this.notifierService.notify('warning', this.translateService.instant('PAGE.TOPOLOGY.DATAEMPTY')); + return; + } + this.isLoadingResults = true; const postData: {} = { name: this.roleForm.value.roleName, permissions: !isNullOrUndefined(permissionData) ? permissionData : {} }; this.restService.patchResource(apiURLHeader, postData).subscribe(() => { this.notifierService.notify('success', this.translateService.instant('PAGE.ROLES.UPDATEDSUCCESSFULLY')); - this.router.navigate(['/roles/details']).catch(); + this.router.navigate(['/roles/details']).catch((): void => { + // Catch Navigation Error + }); }, (error: ERRORDATA) => { this.isLoadingResults = false; this.restService.handleError(error, 'patch'); @@ -254,7 +271,6 @@ export class RolesCreateEditComponent implements OnInit { } this.viewMode = 'text'; } - } /** Generate role permission post data @private */ @@ -282,6 +298,7 @@ export class RolesCreateEditComponent implements OnInit { this.roleForm.value.permissions = this.roleForm.value.permissions.replace(/'/g, '"'); const rolePermission: {} = JSON.parse(this.roleForm.value.permissions); for (const key of Object.keys(rolePermission)) { + // eslint-disable-next-line security/detect-object-injection if (typeof rolePermission[key] !== 'boolean') { this.notifierService.notify('error', this.translateService.instant('PAGE.ROLES.ROLEKEYERROR', { roleKey: key })); return false; @@ -294,15 +311,18 @@ export class RolesCreateEditComponent implements OnInit { /** Get role data from NBI based on ID and apply filter @private */ private getRoleData(): void { - // tslint:disable-next-line: no-backbone-get-set-outside-model this.roleRef = this.activatedRoute.snapshot.paramMap.get('id'); if (!isNullOrUndefined(this.roleRef)) { this.restService.getResource(environment.ROLES_URL + '/' + this.roleRef).subscribe((data: RoleData) => { this.roleForm.setValue({ roleName: data.name, permissions: JSON.stringify(data.permissions, null, '\t') }); this.filterRoleData(data.permissions); this.isLoadingResults = false; + this.currentRoleName = data.name; + this.currentPermissions = JSON.stringify(data.permissions, null, '\t'); }, (error: ERRORDATA) => { - this.router.navigate(['/roles/details']).catch(); + this.router.navigate(['/roles/details']).catch((): void => { + // Catch Navigation Error + }); this.restService.handleError(error, 'get'); }); } @@ -313,6 +333,7 @@ export class RolesCreateEditComponent implements OnInit { Object.keys(permissions).forEach((permission: string) => { jsonpath.apply(this.rolePermissions, '$..permissions[?(@.operation == "' + permission + '")]', (response: Permission) => { if (response.operation === permission) { + // eslint-disable-next-line security/detect-object-injection response.value = permissions[permission]; } return response; @@ -331,5 +352,4 @@ export class RolesCreateEditComponent implements OnInit { }); }); } - }