Add another Network to the new view/edit screen 17/105117/2
authorAlexey Sandler <alexey.sandler@intl.att.com>
Sun, 5 Apr 2020 06:59:35 +0000 (09:59 +0300)
committerAlexey Sandler <alexey.sandler@intl.att.com>
Sun, 5 Apr 2020 09:32:21 +0000 (12:32 +0300)
Issue-ID: VID-802
Signed-off-by: Alexey Sandler <alexey.sandler@intl.att.com>
Change-Id: Ie0e1dcd28f78307ec526c375c1bf4c655ec09ffe
Signed-off-by: Alexey Sandler <alexey.sandler@intl.att.com>
vid-app-common/src/test/resources/payload_jsons/Network/one_network_exists_add_another_network_expected_bulk.json [new file with mode: 0644]
vid-app-common/src/test/resources/payload_jsons/vfmodule/upgrade_vfmodule_e2e__fe_input_cypress.json
vid-app-common/src/test/resources/payload_jsons/vfmodule/upgrade_vfmodule_not_related_to_current_model_e2e__fe_input_cypress.json
vid-webpack-master/cypress/integration/iFrames/viewEditNetwork.e2e.ts [new file with mode: 0644]
vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/add_Network/add_network_instance.json [new file with mode: 0644]
vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/add_Network/add_network_model.json [new file with mode: 0644]
vid-webpack-master/src/app/drawingBoard/service-planning/available-models-tree/available-models-tree.component.ts
vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-tree/drawing-board-tree.component.ts
vid-webpack-master/src/app/drawingBoard/service-planning/drawing-board-tree/drawing-board-tree.service.ts
vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.ts

diff --git a/vid-app-common/src/test/resources/payload_jsons/Network/one_network_exists_add_another_network_expected_bulk.json b/vid-app-common/src/test/resources/payload_jsons/Network/one_network_exists_add_another_network_expected_bulk.json
new file mode 100644 (file)
index 0000000..4eb7b66
--- /dev/null
@@ -0,0 +1,111 @@
+{
+  "action": "None",
+  "isDirty": true,
+  "vnfs": {},
+  "vrfs": {},
+  "instanceParams": [],
+  "validationCounter": 0,
+  "existingNames": {
+    "oam_protected_net_svc1": ""
+  },
+  "existingVNFCounterMap": {},
+  "existingVRFCounterMap": {},
+  "existingVnfGroupCounterMap": {},
+  "existingNetworksCounterMap": {
+    "23c382c9-9405-4780-8794-e57eb015883d": 2
+  },
+  "networks": {
+    "ca61e4c9-982b-4d5f-b9eb-eaaf1cf23b9e": {
+      "action": "None",
+      "instanceName": "GRP-29576-T-E2E-16-SDN_oam_protected_net_2",
+      "instanceId": "ca61e4c9-982b-4d5f-b9eb-eaaf1cf23b9e",
+      "orchStatus": "Active",
+      "lcpCloudRegionId": "olson59a",
+      "tenantId": "11981b4f7fc4426d905edb1487b53bff",
+      "cloudOwner": "irma-aic",
+      "modelInfo": {
+        "modelCustomizationName": "OVS Provider",
+        "modelCustomizationId": "23c382c9-9405-4780-8794-e57eb015883d",
+        "modelInvariantId": "ffb9e45c-e674-4289-aad3-00040ad746e4",
+        "modelVersionId": "01f4c475-3f89-4f00-a2f4-39a873dba0ae",
+        "modelName": "NETWORK_CLOUD_PROVIDER_NETWORK",
+        "modelType": "network",
+        "modelVersion": "1.0"
+      },
+      "instanceType": "NEUTRON-PROVIDER",
+      "inMaint": false,
+      "uuid": "01f4c475-3f89-4f00-a2f4-39a873dba0ae",
+      "originalName": "OVS Provider",
+      "trackById": "ca61e4c9-982b-4d5f-b9eb-eaaf1cf23b9e",
+      "role": "oam_protected_net_2",
+      "physicalName": "oam",
+      "serviceName": "oam_protected_net_svc1",
+      "serviceUUID": "ce2821fc-3b28-4759-9613-1e514d7563c0",
+      "tenantName": "GRP-29576-T-E2E-16-SDN",
+      "boundToVpn": false
+    },
+    "OVS Provider": {
+      "action": "Create",
+      "inMaint": false,
+      "rollbackOnFailure": "true",
+      "originalName": "OVS Provider",
+      "isMissingData": false,
+      "trackById": "2x6cwn1aml8",
+      "networkStoreKey": "OVS Provider",
+      "instanceName": "NETWORK_CLOUD_PROVIDER_NETWORK",
+      "productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+      "lcpCloudRegionId": "hvf6",
+      "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+      "platformName": "xxx1",
+      "lineOfBusiness": "zzz1",
+      "instanceParams": [
+        {}
+      ],
+      "modelInfo": {
+        "modelInvariantId": "ffb9e45c-e674-4289-aad3-00040ad746e4",
+        "modelVersionId": "01f4c475-3f89-4f00-a2f4-39a873dba0ae",
+        "modelName": "NETWORK_CLOUD_PROVIDER_NETWORK",
+        "modelVersion": "1.0",
+        "modelCustomizationId": "23c382c9-9405-4780-8794-e57eb015883d",
+        "modelCustomizationName": "OVS Provider",
+        "uuid": "01f4c475-3f89-4f00-a2f4-39a873dba0ae",
+        "modelUniqueId": "23c382c9-9405-4780-8794-e57eb015883d"
+      },
+      "uuid": "01f4c475-3f89-4f00-a2f4-39a873dba0ae"
+    }
+  },
+  "vnfGroups": {},
+  "bulkSize": 1,
+  "instanceName": "oam_protected_net_svc1",
+  "instanceId": "ce2821fc-3b28-4759-9613-1e514d7563c0",
+  "orchStatus": "Active",
+  "productFamilyId": null,
+  "lcpCloudRegionId": null,
+  "tenantId": null,
+  "cloudOwner": null,
+  "modelInfo": {
+    "modelInvariantId": "8c364754-4c76-4abc-b8f3-88da5f67d588",
+    "modelVersionId": "f93e72e1-77fc-4f54-b207-298d766d0886",
+    "modelName": "oam_protected_net NC OVS network 1",
+    "modelType": "service",
+    "modelVersion": "2.0"
+  },
+  "globalSubscriberId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+  "subscriptionServiceType": "Emanuel",
+  "owningEntityId": null,
+  "owningEntityName": null,
+  "tenantName": null,
+  "aicZoneId": null,
+  "aicZoneName": null,
+  "projectName": null,
+  "rollbackOnFailure": false,
+  "isALaCarte": true,
+  "collectionResources": {},
+  "testApi": "GR_API",
+  "vidNotions": {
+    "instantiationUI": "anyAlacarteWhichNotExcluded",
+    "modelCategory": "5G Provider Network",
+    "viewEditUI": "legacy",
+    "instantiationType": "ALaCarte"
+  }
+}
\ No newline at end of file
diff --git a/vid-webpack-master/cypress/integration/iFrames/viewEditNetwork.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/viewEditNetwork.e2e.ts
new file mode 100644 (file)
index 0000000..084680a
--- /dev/null
@@ -0,0 +1,83 @@
+///<reference path="../../../node_modules/cypress/types/index.d.ts"/> / <reference types="Cypress" />
+
+
+import {JsonBuilder} from "../../support/jsonBuilders/jsonBuilder";
+import {ServiceModel} from "../../support/jsonBuilders/models/service.model";
+import {AaiServiceInstancesModel} from "../../support/jsonBuilders/models/serviceInstances.model";
+import {AAISubViewEditModel} from "../../support/jsonBuilders/models/aaiSubViewEdit.model";
+
+const jsonBuilderAndMock: JsonBuilder<ServiceModel> = new JsonBuilder<ServiceModel>();
+let jsonBuilderAAIService: JsonBuilder<ServiceModel> = new JsonBuilder<ServiceModel>();
+let jsonBuilderAaiServiceInstances: JsonBuilder<AaiServiceInstancesModel> = new JsonBuilder<AaiServiceInstancesModel>();
+let jsonBuilderAAISubViewEditModel: JsonBuilder<AAISubViewEditModel> = new JsonBuilder<AAISubViewEditModel>();
+
+
+describe('View Edit page: Add network', () =>{
+  beforeEach(() => {
+    cy.clearSessionStorage();
+    cy.initGetAAISubDetails();
+    cy.initAAIServices();
+    cy.initTenants();
+    cy.setTestApiParamToGR();
+    cy.initVidMock();
+    cy.login();
+
+  });
+
+  afterEach(() => {
+    cy.screenshot();
+  });
+
+  it(`Add new network to service with one existing network `, () =>{
+    const serviceType = 'Emanuel';
+    const subscriberId = 'a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb';
+    const serviceModelId = 'f93e72e1-77fc-4f54-b207-298d766d0886';
+    const serviceInstanceId = 'ce2821fc-3b28-4759-9613-1e514d7563c0';
+    const serviceInvariantUuid = "8c364754-4c76-4abc-b8f3-88da5f67d588";
+
+    cy.initDrawingBoardUserPermission();
+    cy.route(`**/rest/models/services/${serviceModelId}`,
+      'fixture:../support/jsonBuilders/mocks/jsons/add_Network/add_network_model.json')
+    .as('serviceModelAddNetwork');
+
+    cy.route(`**/aai_get_service_instance_topology/${subscriberId}/${serviceType}/${serviceInstanceId}`,
+      'fixture:../support/jsonBuilders/mocks/jsons/add_Network/add_network_instance.json')
+    .as('serviceInstanceAddNetwork');
+
+    cy.openIframe(`app/ui/#/servicePlanning/EDIT?serviceModelId=${serviceModelId}&subscriberId=${subscriberId}&serviceType=${serviceType}&serviceInstanceId=${serviceInstanceId}`);
+
+    cy.getElementByDataTestsId('node-OVS Provider-add-btn').click({force: true}).then(() => {
+
+      cy.fillNetworkPopup();
+    });
+
+    mockAsyncBulkResponse();
+    //click update
+    cy.getElementByDataTestsId('deployBtn').should('have.text', 'UPDATE').click();
+
+    cy.getReduxState().then((state) => {
+
+      const networks = state.service.serviceInstance['f93e72e1-77fc-4f54-b207-298d766d0886'].networks;
+      cy.wait('@expectedPostAsyncInstantiation').then(xhr => {
+        cy.readFile('../vid-app-common/src/test/resources/payload_jsons/Network/one_network_exists_add_another_network_expected_bulk.json').then((expectedResult) => {
+
+          //set randomized trackById into bulk expected file
+          expectedResult.networks['OVS Provider'].trackById = networks['OVS Provider'].trackById;
+
+          cy.deepCompare(xhr.request.body, expectedResult);
+        });
+      });
+    });
+
+  });
+
+  function mockAsyncBulkResponse() {
+    cy.server().route({
+      url: Cypress.config('baseUrl') + '/asyncInstantiation/bulk',
+      method: 'POST',
+      status: 200,
+      response: "[]",
+    }).as("expectedPostAsyncInstantiation");
+  }
+
+});
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/add_Network/add_network_instance.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/add_Network/add_network_instance.json
new file mode 100644 (file)
index 0000000..d21ac10
--- /dev/null
@@ -0,0 +1,69 @@
+{
+  "action": "None",
+  "instanceName": "oam_protected_net_svc1",
+  "instanceId": "ce2821fc-3b28-4759-9613-1e514d7563c0",
+  "orchStatus": "Active",
+  "productFamilyId": null,
+  "lcpCloudRegionId": null,
+  "tenantId": null,
+  "cloudOwner": null,
+  "modelInfo": {
+    "modelInvariantId": "8c364754-4c76-4abc-b8f3-88da5f67d588",
+    "modelVersionId": "f93e72e1-77fc-4f54-b207-298d766d0886",
+    "modelName": "oam_protected_net NC OVS network 1",
+    "modelType": "service",
+    "modelVersion": "2.0"
+  },
+  "globalSubscriberId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+  "subscriptionServiceType": "Emanuel",
+  "owningEntityId": null,
+  "owningEntityName": null,
+  "tenantName": null,
+  "aicZoneId": null,
+  "aicZoneName": null,
+  "projectName": null,
+  "rollbackOnFailure": null,
+  "isALaCarte": true,
+  "vnfs": {},
+  "networks": {
+    "ca61e4c9-982b-4d5f-b9eb-eaaf1cf23b9e": {
+      "action": "None",
+      "instanceName": "GRP-29576-T-E2E-16-SDN_oam_protected_net_2",
+      "instanceId": "ca61e4c9-982b-4d5f-b9eb-eaaf1cf23b9e",
+      "orchStatus": "Active",
+      "lcpCloudRegionId": "olson59a",
+      "tenantId": "11981b4f7fc4426d905edb1487b53bff",
+      "cloudOwner": "irma-aic",
+      "modelInfo": {
+        "modelCustomizationName": "OVS Provider",
+        "modelCustomizationId": "23c382c9-9405-4780-8794-e57eb015883d",
+        "modelInvariantId": "ffb9e45c-e674-4289-aad3-00040ad746e4",
+        "modelVersionId": "01f4c475-3f89-4f00-a2f4-39a873dba0ae",
+        "modelName": "NETWORK_CLOUD_PROVIDER_NETWORK",
+        "modelType": "network",
+        "modelVersion": "1.0"
+      },
+      "instanceType": "NEUTRON-PROVIDER",
+      "inMaint": false,
+      "uuid": "01f4c475-3f89-4f00-a2f4-39a873dba0ae",
+      "originalName": "OVS Provider",
+      "trackById": "ca61e4c9-982b-4d5f-b9eb-eaaf1cf23b9e",
+      "role": "oam_protected_net_2",
+      "physicalName": "oam",
+      "serviceName": "oam_protected_net_svc1",
+      "serviceUUID": "ce2821fc-3b28-4759-9613-1e514d7563c0",
+      "tenantName": "GRP-29576-T-E2E-16-SDN",
+      "boundToVpn": false
+    }
+  },
+  "vrfs": {},
+  "vnfGroups": {},
+  "collectionResources": {},
+  "validationCounter": 0,
+  "existingVNFCounterMap": {},
+  "existingNetworksCounterMap": {
+    "23c382c9-9405-4780-8794-e57eb015883d": 1
+  },
+  "existingVnfGroupCounterMap": {},
+  "existingVRFCounterMap": {}
+}
diff --git a/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/add_Network/add_network_model.json b/vid-webpack-master/cypress/support/jsonBuilders/mocks/jsons/add_Network/add_network_model.json
new file mode 100644 (file)
index 0000000..576202a
--- /dev/null
@@ -0,0 +1,58 @@
+{
+  "service": {
+    "uuid": "f93e72e1-77fc-4f54-b207-298d766d0886",
+    "invariantUuid": "8c364754-4c76-4abc-b8f3-88da5f67d588",
+    "name": "oam_protected_net NC OVS network 1",
+    "version": "2.0",
+    "toscaModelURL": null,
+    "category": "Network Service",
+    "serviceType": "INFRASTRUCTURE",
+    "serviceRole": "PROVIDER-NETWORK",
+    "description": "OVS Provider Network service model for NC for oam_protected_net_2",
+    "serviceEcompNaming": "false",
+    "instantiationType": "A-La-Carte",
+    "inputs": {},
+    "vidNotions": {
+      "instantiationUI": "anyAlacarteWhichNotExcluded",
+      "modelCategory": "5G Provider Network",
+      "viewEditUI": "legacy",
+      "instantiationType": "ALaCarte"
+    }
+  },
+  "vnfs": {},
+  "networks": {
+    "OVS Provider": {
+      "uuid": "01f4c475-3f89-4f00-a2f4-39a873dba0ae",
+      "invariantUuid": "ffb9e45c-e674-4289-aad3-00040ad746e4",
+      "description": "NETWORK_CLOUD_PROVIDER_NETWORK",
+      "name": "NETWORK_CLOUD_PROVIDER_NETWORK",
+      "version": "1.0",
+      "customizationUuid": "23c382c9-9405-4780-8794-e57eb015883d",
+      "inputs": {},
+      "commands": {},
+      "properties": {
+        "network_role": "oam_protected_net_2",
+        "network_assignments": "{is_external_network=false, is_shared_network=true, is_trunked=false, ipv4_subnet_default_assignment={dhcp_enabled=false, ip_version=4, min_subnets_count=1, use_ipv4=true}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={dhcp_enabled=false, use_ipv6=true, ip_version=6, min_subnets_count=1}, related_networks=[{related_network_role=oam_protected_net_2_tenant}]}",
+        "exVL_naming": "{ecomp_generated_naming=false}",
+        "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}",
+        "network_scope": "GLOBAL",
+        "ecomp_generated_naming": "false",
+        "network_type": "NEUTRON-PROVIDER",
+        "provider_network": "{physical_network_name=oam, is_provider_network=true}",
+        "network_technology": "OVS",
+        "network_homing": "{ecomp_selected_instance_node_target=false}"
+      },
+      "type": "VL",
+      "modelCustomizationName": "OVS Provider"
+    }
+  },
+  "collectionResources": {},
+  "configurations": {},
+  "fabricConfigurations": {},
+  "serviceProxies": {},
+  "vfModules": {},
+  "volumeGroups": {},
+  "pnfs": {},
+  "vnfGroups": {},
+  "vrfs": {}
+}
index 2e04f53..2014be9 100644 (file)
@@ -24,7 +24,6 @@ import {createVnfGroupInstance} from "../../../shared/storeUtil/utils/vnfGroup/v
 import {VnfGroupControlGenerator} from "../../../shared/components/genericForm/formControlsServices/vnfGroupGenerator/vnfGroup.control.generator";
 import {HighlightPipe} from "../../../shared/pipes/highlight/highlight-filter.pipe";
 import * as _ from 'lodash';
-import {DrawingBoardTreeComponent} from "../drawing-board-tree/drawing-board-tree.component";
 import {ComponentInfoModel} from "../component-info/component-info-model";
 import {ComponentInfoService} from "../component-info/component-info.service";
 import {FeatureFlagsService, Features} from "../../../shared/services/featureFlag/feature-flags.service";
@@ -166,12 +165,12 @@ export class AvailableModelsTreeComponent {
         let vnfGroup = this._defaultDataGeneratorService.generateVnfGroupInstance(this.serviceHierarchy.vnfGroups[node.data.name], isEcompGeneratedNaming, isAlaCarte, instanceName);
         this._store.dispatch(changeInstanceCounter(node.data.modelUniqueId, serviceId, 1 , <any> {data: {type: 'VnfGroup'}}));
         this._store.dispatch(createVnfGroupInstance(vnfGroup, node.data.name, serviceId, node.data.name));
-        DrawingBoardTreeComponent.triggerreCalculateIsDirty.next(this.serviceModelId);
+        DrawingBoardTreeService.triggerCheckIsDirty.next(this.serviceModelId);
       } else {
         let vfModule = this._defaultDataGeneratorService.generateVFModule(this.serviceHierarchy.vnfs[node.parent.data.name].vfModules[node.data.name], dynamicInputs, isEcompGeneratedNaming, isAlaCarte);
         if (this._sharedTreeService.selectedVNF) {
           this.store.dispatch(createVFModuleInstance(vfModule, node.data.name, this.serviceModelId, null, this._sharedTreeService.selectedVNF));
-          DrawingBoardTreeComponent.triggerreCalculateIsDirty.next(this.serviceModelId);
+          DrawingBoardTreeService.triggerCheckIsDirty.next(this.serviceModelId);
         } else if (this._availableModelsTreeService.getOptionalVNFs(this.serviceModelId, node.parent.data.modelUniqueId).length === 1) {
           let existVnf = this._store.getState().service.serviceInstance[this.serviceModelId].vnfs;
           if(!_.isNil(existVnf)){
@@ -179,7 +178,7 @@ export class AvailableModelsTreeComponent {
               const modelUniqueId = this._sharedTreeService.modelUniqueId(existVnf[vnfKey]);
               if(modelUniqueId === node.parent.data.id){
                 this.store.dispatch(createVFModuleInstance(vfModule, node.data.name, this.serviceModelId, null, vnfKey));
-                DrawingBoardTreeComponent.triggerreCalculateIsDirty.next(this.serviceModelId);
+                DrawingBoardTreeService.triggerCheckIsDirty.next(this.serviceModelId);
               }
             }
           }
index 1a42db4..18c3f72 100644 (file)
@@ -51,7 +51,6 @@ export class DrawingBoardTreeComponent implements OnInit, AfterViewInit {
   @Input() pageMode : DrawingBoardModes;
   static triggerDeleteActionService: Subject<string> = new Subject<string>();
   static triggerUndoDeleteActionService: Subject<string> = new Subject<string>();
-  static triggerreCalculateIsDirty: Subject<string> = new Subject<string>();
   @ViewChild(ContextMenuComponent, {static: false}) public contextMenu: ContextMenuComponent;
 
   constructor(private _contextMenuService: ContextMenuService,
@@ -87,12 +86,12 @@ export class DrawingBoardTreeComponent implements OnInit, AfterViewInit {
       });
     });
 
-    DrawingBoardTreeComponent.triggerUndoDeleteActionService.subscribe((serviceModelId) => {
-      this.drawingBoardTreeService.undoDeleteActionService(this.nodes, serviceModelId);
+    DrawingBoardTreeService.triggerCheckIsDirty.subscribe((serviceModelId)=>{
       this.store.dispatch(changeServiceIsDirty(this.nodes, serviceModelId));
-    });
+    })
 
-    DrawingBoardTreeComponent.triggerreCalculateIsDirty.subscribe((serviceModelId) => {
+    DrawingBoardTreeComponent.triggerUndoDeleteActionService.subscribe((serviceModelId) => {
+      this.drawingBoardTreeService.undoDeleteActionService(this.nodes, serviceModelId);
       this.store.dispatch(changeServiceIsDirty(this.nodes, serviceModelId));
     });
 
index 28b6e51..dfd89ca 100644 (file)
@@ -5,9 +5,13 @@ import {NgRedux} from "@angular-redux/store";
 import {AppState} from "../../../shared/store/reducers";
 import {FeatureFlagsService, Features} from "../../../shared/services/featureFlag/feature-flags.service";
 import {ServiceInstanceActions} from "../../../shared/models/serviceInstanceActions";
+import {Subject} from "rxjs";
 
 @Injectable()
 export class  DrawingBoardTreeService {
+
+  static triggerCheckIsDirty : Subject<string> = new Subject<string>();
+
   constructor(private store: NgRedux<AppState>){}
   isVFModuleMissingData(node: ITreeNode, serviceModelId : string): boolean {
     if(node.data.type === 'VFmodule' &&!_.isNil(this.store.getState().service.serviceInstance[serviceModelId].vnfs) &&  !_.isNil(this.store.getState().service.serviceInstance[serviceModelId].vnfs[node.parent.data.vnfStoreKey])){
index 7368dd6..1d8d827 100644 (file)
@@ -13,9 +13,8 @@ import {AaiService} from "../../services/aaiService/aai.service";
 import {GenericFormPopupService} from "./generic-form-popup.service";
 import {FormControlModel} from "../../models/formControlModels/formControl.model";
 import {FormGeneralErrorsService} from "../formGeneralErrors/formGeneralErrors.service";
-import {FeatureFlagsService, Features} from "../../services/featureFlag/feature-flags.service";
-import {InstantiationTemplatesModalComponent} from "./instantiationTemplatesModal/instantiation.templates.modal.component";
 import {updateCurrentModalModeAction} from "../../storeUtil/utils/global/global.actions";
+import {DrawingBoardTreeService} from "../../../drawingBoard/service-planning/drawing-board-tree/drawing-board-tree.service";
 
 
 export interface PopupModel {
@@ -98,6 +97,7 @@ export class GenericFormPopupComponent extends DialogComponent<PopupModel, boole
 
     if (!_.isNil(this.uuidData)) {
       this.uuidData.popupService.closeDialogEvent.subscribe((that) => {
+        DrawingBoardTreeService.triggerCheckIsDirty.next(that.uuidData.serviceId);
         this.closeDialog(that);
       });