Merge "Composer rendering optimization" into v1.1
diff --git a/skyquake/plugins/composer/src/src/components/ComposerApp.js b/skyquake/plugins/composer/src/src/components/ComposerApp.js
index b5cfa75..6507b34 100644
--- a/skyquake/plugins/composer/src/src/components/ComposerApp.js
+++ b/skyquake/plugins/composer/src/src/components/ComposerApp.js
@@ -163,7 +163,7 @@
 				}
 			}
 
-			let cpNumber = 0;
+
 			let AppHeader = (<div className="AppHeader">
 								<RiftHeader />
 							</div>);
@@ -174,12 +174,7 @@
 			const isModified = self.state.item && self.state.item.uiState.modified;
 			const isEditingNSD = self.state.item && self.state.item.uiState && /nsd/.test(self.state.item.uiState.type);
 			const isEditingVNFD = self.state.item && self.state.item.uiState && /vnfd/.test(self.state.item.uiState.type);
-			const containers = [self.state.item].reduce(DescriptorModelFactory.buildCatalogItemFactory(CatalogDataStore.getState().catalogs), []);
-
-			containers.filter(d => DescriptorModelFactory.isConnectionPoint(d)).forEach(d => {
-				d.cpNumber = ++cpNumber;
-				containers.filter(d => DescriptorModelFactory.isVnfdConnectionPointRef(d)).filter(ref => ref.key === d.key).forEach(ref => ref.cpNumber = d.cpNumber);
-			});
+            const containers = self.state.containers;
 			const canvasTitle = containers.length ? containers[0].model.name : '';
 			const hasNoCatalogs = CatalogDataStore.getState().catalogs.length === 0;
 			const isLoading = self.state.isLoading;
diff --git a/skyquake/plugins/composer/src/src/stores/ComposerAppStore.js b/skyquake/plugins/composer/src/src/stores/ComposerAppStore.js
index 3671890..75276d2 100644
--- a/skyquake/plugins/composer/src/src/stores/ComposerAppStore.js
+++ b/skyquake/plugins/composer/src/src/stores/ComposerAppStore.js
@@ -125,6 +125,7 @@
 		this.files = false;
 		this.filesState = {};
 		this.downloadJobs = {};
+		this.containers = [];
 		//End File  manager values
 		this.bindListeners({
 			onResize: PanelResizeAction.RESIZE,
@@ -201,8 +202,17 @@
 	}
 
 	updateItem(item) {
+		const self = this;
+		let containers = [];
+		let cpNumber = 0;
 		if(!document.body.classList.contains('resizing')) {
-			this.setState({item: _.cloneDeep(item)});
+			containers = [item].reduce(DescriptorModelFactory.buildCatalogItemFactory(CatalogDataStore.getState().catalogs), []);
+
+			containers.filter(d => DescriptorModelFactory.isConnectionPoint(d)).forEach(d => {
+				d.cpNumber = ++cpNumber;
+				containers.filter(d => DescriptorModelFactory.isVnfdConnectionPointRef(d)).filter(ref => ref.key === d.key).forEach(ref => ref.cpNumber = d.cpNumber);
+			});
+			this.setState({containers: containers, item: _.cloneDeep(item)});
 		}
 		SelectionManager.refreshOutline();
 	}