Commit c8cb7f8d authored by Bryce Johnson's avatar Bryce Johnson

Properly cloak loading states.

parent 4723b2ea
...@@ -5,6 +5,11 @@ ...@@ -5,6 +5,11 @@
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'],
data() {
return {
loaded: false,
};
},
computed: { computed: {
approvalsRequiredStringified() { approvalsRequiredStringified() {
return this.approvalsLeft === 1 ? 'one more approval' : return this.approvalsLeft === 1 ? 'one more approval' :
...@@ -33,11 +38,12 @@ ...@@ -33,11 +38,12 @@
}, },
}, },
beforeCreate() { beforeCreate() {
return gl.ApprovalsStore.initStoreOnce(); gl.ApprovalsStore.initStoreOnce().then(() => {
this.loaded = true;
});
}, },
template: ` template: `
<div> <div v-if='loaded'>
<div>
<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
...@@ -47,7 +53,6 @@ ...@@ -47,7 +53,6 @@
</button> </button>
</div> </div>
</div> </div>
</div>
`, `,
}); });
})(); })();
...@@ -2,10 +2,14 @@ ...@@ -2,10 +2,14 @@
//= require vue_common_component/link_to_member_avatar //= require vue_common_component/link_to_member_avatar
(() => { (() => {
Vue.component('approvals-footer', { Vue.component('approvals-footer', {
name: 'approvals-footer', name: 'approvals-footer',
props: ['userCanApprove', 'userHasApproved', 'approvedBy', 'approvalsLeft', 'pendingAvatarSvg', 'checkmarkSvg'], props: ['userCanApprove', 'userHasApproved', 'approvedBy', 'approvalsLeft', 'pendingAvatarSvg', 'checkmarkSvg'],
data() {
return {
loaded: false,
};
},
computed: { computed: {
hasApprovers() { hasApprovers() {
return this.approvedBy && this.approvedBy.length; return this.approvedBy && this.approvedBy.length;
...@@ -20,10 +24,12 @@ ...@@ -20,10 +24,12 @@
}, },
}, },
beforeCreate() { beforeCreate() {
return gl.ApprovalsStore.initStoreOnce(); gl.ApprovalsStore.initStoreOnce().then(() => {
this.loaded = true;
});
}, },
template: ` template: `
<div v-if='hasApprovers' class='mr-widget-footer approved-by-users approvals-footer clearfix'> <div v-if='hasApprovers && loaded' class='mr-widget-footer approved-by-users approvals-footer clearfix'>
<span class='approvers-prefix'> Approved by </span> <span class='approvers-prefix'> Approved by </span>
<span v-for='approver in approvedBy'> <span v-for='approver in approvedBy'>
<link-to-member-avatar <link-to-member-avatar
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
this.api = new gl.ApprovalsApi(rootStore.dataset.endpoint); this.api = new gl.ApprovalsApi(rootStore.dataset.endpoint);
this.state = { this.state = {
loading: false, loading: false,
loaded: false,
}; };
} }
...@@ -27,18 +26,17 @@ ...@@ -27,18 +26,17 @@
initStoreOnce() { initStoreOnce() {
const state = this.state; const state = this.state;
if (state.loading || state.loaded) { if (!state.loading) {
state.loading = true; state.loading = true;
this.fetch() return this.fetch()
.then(() => { .then(() => {
state.loading = false; state.loading = false;
state.loaded = true;
}) })
.catch((err) => { .catch((err) => {
console.error(`Failed to initialize approvals store: ${err}`); console.error(`Failed to initialize approvals store: ${err}`);
}); });
} }
return this.fetch(); return Promise.resolve();
} }
fetch() { fetch() {
......
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