vuex-xhr-state
Version:
Use Vuex to manage the state of you're ajax calls.
66 lines (65 loc) • 2.23 kB
JavaScript
var _a, _b, _c;
export var GLOBAL_NAMESPACE = 'globalXhrState';
var MUTATIONS = {
ADD_PENDING: 'ADD_PENDING',
REMOVE_PENDING: 'END_PENDING',
SET_ERROR: 'SET_ERROR',
RESET_ERROR: 'RESET_ERROR',
};
export var GLOBAL_ACTIONS = {
REQUEST: 'REQUEST',
RECEIVED: 'END_PENDING',
FAILED: 'SET_ERROR',
RESET_ERROR: 'RESET_ERROR',
};
export var GLOBAL_GETTERS = {
ANY_PENDING: 'ANY_PENDING',
ANY_ERROR: 'ANY_ERROR',
LAST_ERROR_RESPONSE: 'LAST_ERROR_RESPONSE',
};
var ACTIONS = GLOBAL_ACTIONS;
var unique = function (array) {
return array.filter(function (el, index, arr) { return index === arr.indexOf(el); });
};
export var globalStore = {
namespaced: true,
state: {
activeLoaders: [],
// inError: false,
last_error: {},
},
getters: (_a = {},
_a[GLOBAL_GETTERS.ANY_PENDING] = function (state) { return state.activeLoaders.length > 0; },
// [GLOBAL_GETTERS.ANY_ERROR]: state => state.inError,
_a[GLOBAL_GETTERS.LAST_ERROR_RESPONSE] = function (state) { return state.last_error; },
_a),
actions: (_b = {},
_b[ACTIONS.REQUEST] = function (_a, key) {
var commit = _a.commit;
return commit(MUTATIONS.ADD_PENDING, key);
},
_b[ACTIONS.RECEIVED] = function (_a, key) {
var commit = _a.commit;
return commit(MUTATIONS.REMOVE_PENDING, key);
},
_b[ACTIONS.FAILED] = function (_a, payload) {
var commit = _a.commit;
if (!payload.catched) {
commit(MUTATIONS.SET_ERROR, payload);
}
commit(MUTATIONS.REMOVE_PENDING, payload.key);
},
_b),
mutations: (_c = {},
_c[MUTATIONS.ADD_PENDING] = function (state, key) {
state.activeLoaders.push(key);
state.activeLoaders = unique(state.activeLoaders);
},
_c[MUTATIONS.REMOVE_PENDING] = function (state, key) {
state.activeLoaders = unique(state.activeLoaders).filter(function (p) { return p !== key; });
},
_c[MUTATIONS.SET_ERROR] = function (state, payload) {
state.last_error = payload.response;
},
_c),
};