43 lines
999 B
JavaScript
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));
|
|
}
|
|
},
|
|
},
|
|
};
|