From a823a79f12dde467a48b0366821a505ed66ecd66 Mon Sep 17 00:00:00 2001
From: Vincent Petry <pvince81@owncloud.com>
Date: Mon, 28 Sep 2015 15:57:57 +0200
Subject: [PATCH] Show loading spinner for first fetch of shares

Whenever the sidebar first loads shares, show a spinner instead of an
empty content
---
 core/js/sharedialogview.js | 31 ++++++++++++++++++++++++++-----
 core/js/shareitemmodel.js  |  2 ++
 2 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/core/js/sharedialogview.js b/core/js/sharedialogview.js
index 57743118f28..ee31ed33132 100644
--- a/core/js/sharedialogview.js
+++ b/core/js/sharedialogview.js
@@ -14,7 +14,7 @@
 	}
 
 	var TEMPLATE_BASE =
-		'<div class="resharerInfoView"></div>' +
+		'<div class="resharerInfoView subView"></div>' +
 		'{{#if isSharingAllowed}}' +
 		'<label for="shareWith" class="hidden-visually">{{shareLabel}}</label>' +
 		'<div class="oneline">' +
@@ -23,10 +23,10 @@
 		'{{{remoteShareInfo}}}' +
 		'</div>' +
 		'{{/if}}' +
-		'<div class="shareeListView"></div>' +
-		'<div class="linkShareView"></div>' +
-		'<div class="expirationView"></div>'
-		;
+		'<div class="shareeListView subView"></div>' +
+		'<div class="linkShareView subView"></div>' +
+		'<div class="expirationView subView"></div>' +
+		'<div class="loading hidden" style="height: 50px"></div>';
 
 	var TEMPLATE_REMOTE_SHARE_INFO =
 		'<a target="_blank" class="icon-info svg shareWithRemoteInfo hasTooltip" href="{{docLink}}" ' +
@@ -87,6 +87,9 @@
 				view.render();
 			});
 
+			this.model.on('request', this._onRequest, this);
+			this.model.on('sync', this._onEndRequest, this);
+
 			var subViewOptions = {
 				model: this.model,
 				configModel: this.configModel
@@ -161,6 +164,24 @@
 			this.model.addShare(s.item.value);
 		},
 
+		_toggleLoading: function(state) {
+			this._loading = state;
+			this.$el.find('.subView').toggleClass('hidden', state);
+			this.$el.find('.loading').toggleClass('hidden', !state);
+		},
+
+		_onRequest: function() {
+			// only show the loading spinner for the first request (for now)
+			if (!this._loadingOnce) {
+				this._toggleLoading(true);
+				this._loadingOnce = true;
+			}
+		},
+
+		_onEndRequest: function() {
+			this._toggleLoading(false);
+		},
+
 		render: function() {
 			var baseTemplate = this._getTemplate('base', TEMPLATE_BASE);
 
diff --git a/core/js/shareitemmodel.js b/core/js/shareitemmodel.js
index 13396670aae..328d291b778 100644
--- a/core/js/shareitemmodel.js
+++ b/core/js/shareitemmodel.js
@@ -624,7 +624,9 @@
 
 		fetch: function() {
 			var model = this;
+			this.trigger('request', this);
 			OC.Share.loadItem(this.get('itemType'), this.get('itemSource'), function(data) {
+				model.trigger('sync', 'GET', this);
 				model.set(model.parse(data));
 			});
 		},
-- 
GitLab