Stackedit/src/store/modules/queue.js
2017-08-15 11:43:26 +01:00

43 lines
999 B
JavaScript

const setter = propertyName => (state, value) => {
state[propertyName] = value;
};
let queue = Promise.resolve();
export default {
namespaced: true,
state: {
isEmpty: true,
isSyncRequested: false,
},
mutations: {
setIsEmpty: setter('isEmpty'),
setIsSyncRequested: setter('isSyncRequested'),
},
actions: {
enqueue({ state, commit }, cb) {
if (state.isEmpty) {
commit('setIsEmpty', false);
}
const newQueue = queue
.then(cb)
.catch((err) => {
console.error(err);
})
.then(() => {
if (newQueue === queue) {
commit('setIsEmpty', true);
}
});
queue = newQueue;
},
enqueueSyncRequest({ state, commit, dispatch }, cb) {
if (!state.isSyncRequested) {
commit('setIsSyncRequested', true);
const unset = () => commit('setIsSyncRequested', false);
dispatch('enqueue', () => cb().then(unset, unset));
}
},
},
};