Merge "Assets tab hidden by default" into v1.1
diff --git a/skyquake/plugins/composer/api/composer.js b/skyquake/plugins/composer/api/composer.js
index 13fd0dd..801873a 100644
--- a/skyquake/plugins/composer/api/composer.js
+++ b/skyquake/plugins/composer/api/composer.js
@@ -612,6 +612,9 @@
                                 data: data.body
                             });
                         }
+                    }).catch(function(err) {
+                        console.log('Failed to retrieve FileManager.list')
+                        resolve(err);
                     })
                 }
             })
diff --git a/skyquake/plugins/composer/src/src/components/CanvasPanel.js b/skyquake/plugins/composer/src/src/components/CanvasPanel.js
index 96904ea..cb212cb 100644
--- a/skyquake/plugins/composer/src/src/components/CanvasPanel.js
+++ b/skyquake/plugins/composer/src/src/components/CanvasPanel.js
@@ -81,9 +81,13 @@
 						<button className={isDescriptorView ? '-selected' : ''} onClick={ComposerAppActions.showDescriptor}>
 							Descriptor
 						</button>
-						<button className={!isDescriptorView ? '-selected' : ''}  onClick={ComposerAppActions.showAssets}>
-							Assets
-						</button>
+						{
+							this.props.files ?
+								<button className={!isDescriptorView ? '-selected' : ''}  onClick={ComposerAppActions.showAssets}>
+									Assets
+								</button>
+							: null
+						}
 					</div>
 				</div>
        		)
diff --git a/skyquake/plugins/composer/src/src/stores/ComposerAppStore.js b/skyquake/plugins/composer/src/src/stores/ComposerAppStore.js
index 854864b..3671890 100644
--- a/skyquake/plugins/composer/src/src/stores/ComposerAppStore.js
+++ b/skyquake/plugins/composer/src/src/stores/ComposerAppStore.js
@@ -122,7 +122,7 @@
 		this.fullScreenMode = false;
 		this.panelTabShown = 'descriptor';
 		//File manager values
-		this.files = [];
+		this.files = false;
 		this.filesState = {};
 		this.downloadJobs = {};
 		//End File  manager values
@@ -457,18 +457,27 @@
 		let self = this;
 		let filesState = null;
         if (self.fileMonitoringSocketID) {
-			filesState = addInputState( _.cloneDeep(this.filesState),data);
-			// filesState = _.merge(self.filesState, addInputState({},data));
-			let normalizedData = normalizeTree(data);
-			this.setState({
-				files: {
-					data: _.mergeWith(normalizedData.data, self.files.data, function(obj, src) {
-						return _.uniqBy(obj? obj.concat(src) : src, 'name');
-					}),
-					id: self.files.id || normalizedData.id
-				},
-				filesState: filesState
-			});
+        	let newState = {};
+        	if(data.hasOwnProperty('contents')) {
+        		filesState = addInputState( _.cloneDeep(this.filesState),data);
+				// filesState = _.merge(self.filesState, addInputState({},data));
+				let normalizedData = normalizeTree(data);
+				newState = {
+					files: {
+						data: _.mergeWith(normalizedData.data, self.files.data, function(obj, src) {
+							return _.uniqBy(obj? obj.concat(src) : src, 'name');
+						}),
+						id: self.files.id || normalizedData.id
+					},
+					filesState: filesState
+				}
+        	} else {
+        		newState = {
+        			files: false
+        		}
+        	}
+
+			this.setState(newState);
         }
 		function normalizeTree(data) {
 			let f = {
@@ -540,7 +549,7 @@
 		let self = this;
 		let ws = window.multiplexer.channel(id);
 		let downloadJobs = _.cloneDeep(self.downloadJobs);
-		let newFiles = {};
+		let newFiles = false;
 		ws.onmessage = (socket) => {
             if (self.files && self.files.length > 0) {
                 let jobs = [];
@@ -616,7 +625,6 @@
 	openFileManagerSockets(i) {
 		let self = this;
 		let item = i || self.item;
-		this.files = {data:[]};
         // this.closeFileManagerSockets();
 		this.getInstance().openFileMonitoringSocket(item.id, item.uiState.type).then(function() {
         // 	// self.getInstance().openDownloadMonitoringSocket(item.id);