Commit 486c87a0 authored by Bryce Johnson's avatar Bryce Johnson

Properly show and hide loading state.

parent 669e6717
...@@ -4,12 +4,7 @@ ...@@ -4,12 +4,7 @@
(() => { (() => {
Vue.component('approvals-body', { Vue.component('approvals-body', {
name: 'approvals-body', name: 'approvals-body',
props: ['approvedBy', 'approvalsLeft', 'userCanApprove', 'userHasApproved', 'suggestedApprovers'], props: ['approvedBy', 'approvalsLeft', 'userCanApprove', 'userHasApproved', 'suggestedApprovers', 'widgetLoading'],
data() {
return {
loaded: false,
};
},
computed: { computed: {
approvalsRequiredStringified() { approvalsRequiredStringified() {
return this.approvalsLeft === 1 ? 'one more approval' : return this.approvalsLeft === 1 ? 'one more approval' :
...@@ -31,6 +26,9 @@ ...@@ -31,6 +26,9 @@
showApproveButton() { showApproveButton() {
return this.userCanApprove && !this.userHasApproved; return this.userCanApprove && !this.userHasApproved;
}, },
showApprovalsBody() {
return !this.widgetLoading && this.approvalsLeft;
}
}, },
methods: { methods: {
approveMergeRequest() { approveMergeRequest() {
...@@ -38,12 +36,10 @@ ...@@ -38,12 +36,10 @@
}, },
}, },
beforeCreate() { beforeCreate() {
gl.ApprovalsStore.initStoreOnce().then(() => { gl.ApprovalsStore.initStoreOnce();
this.loaded = true;
});
}, },
template: ` template: `
<div v-if='loaded && approvalsLeft'> <div v-if='showApprovalsBody'>
<h4> Requires {{ approvalsRequiredStringified }} (from {{ approverNamesStringified }})</h4> <h4> Requires {{ approvalsRequiredStringified }} (from {{ approverNamesStringified }})</h4>
<div v-if='showApproveButton' class='append-bottom-10'> <div v-if='showApproveButton' class='append-bottom-10'>
<button <button
......
...@@ -20,8 +20,8 @@ ...@@ -20,8 +20,8 @@
}; };
} }
assignToRootStore(data) { assignToRootStore(data, key = 'approvals') {
return this.rootStore.assignToData('approvals', data); return this.rootStore.assignToData(key, data);
} }
initStoreOnce() { initStoreOnce() {
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
return this.fetch() return this.fetch()
.then(() => { .then(() => {
state.loading = false; state.loading = false;
this.assignToRootStore(false, 'loading');
}) })
.catch((err) => { .catch((err) => {
console.error(`Failed to initialize approvals store: ${err}`); console.error(`Failed to initialize approvals store: ${err}`);
......
...@@ -18,9 +18,14 @@ ...@@ -18,9 +18,14 @@
this.data = {}; this.data = {};
// init other widget stores here // init other widget stores here
this.initState();
this.initApprovals(); this.initApprovals();
} }
initState() {
this.assignToData('loading', true);
}
initApprovals() { initApprovals() {
gl.ApprovalsStore = new gl.ApprovalsStore(this); gl.ApprovalsStore = new gl.ApprovalsStore(this);
this.assignToData('approvals', {}); this.assignToData('approvals', {});
......
%approvals-body{':user-can-approve' => 'approvals.user_can_approve', ':user-has-approved' => 'approvals.user_has_approved', ':approved-by' => 'approvals.approved_by', ':approvals-left':'approvals.approvals_left', ':suggested-approvers' => 'approvals.suggested_approvers'} .loading{ 'v-show' => 'loading' }
= icon('spinner spin')
%approvals-body{':user-can-approve' => 'approvals.user_can_approve', ':user-has-approved' => 'approvals.user_has_approved', ':approved-by' => 'approvals.approved_by', ':approvals-left':'approvals.approvals_left', ':suggested-approvers' => 'approvals.suggested_approvers', ':widget-loading' => 'loading'}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment