2020-06-07 02:03:55 +08:00
|
|
|
import Vue from 'vue';
|
|
|
|
import Vuex from 'vuex';
|
|
|
|
import { models } from '../constants';
|
|
|
|
|
|
|
|
Vue.use(Vuex);
|
|
|
|
|
|
|
|
export default new Vuex.Store({
|
|
|
|
state: {
|
|
|
|
// Data from API responses for different models, eg: lists, campaigns.
|
|
|
|
// The API responses are stored in this map as-is. This is invoked by
|
|
|
|
// API requests in `http`. This initialises lists: {}, campaigns: {}
|
|
|
|
// etc. on state.
|
|
|
|
...Object.keys(models).reduce((obj, cur) => ({ ...obj, [cur]: [] }), {}),
|
|
|
|
|
|
|
|
// Map of loading status (true, false) indicators for different model keys
|
|
|
|
// like lists, campaigns etc. loading: {lists: true, campaigns: true ...}.
|
|
|
|
// The Axios API global request interceptor marks a model as loading=true
|
|
|
|
// and the response interceptor marks it as false. The model keys are being
|
|
|
|
// pre-initialised here to fix "reactivity" issues on first loads.
|
|
|
|
loading: Object.keys(models).reduce((obj, cur) => ({ ...obj, [cur]: false }), {}),
|
|
|
|
},
|
|
|
|
|
|
|
|
mutations: {
|
|
|
|
// Set data from API responses. `model` is 'lists', 'campaigns' etc.
|
|
|
|
setModelResponse(state, { model, data }) {
|
|
|
|
state[model] = data;
|
|
|
|
},
|
|
|
|
|
|
|
|
// Set the loading status for a model globally. When a request starts,
|
|
|
|
// status is set to true which is used by the UI to show loaders and block
|
|
|
|
// forms. When a response is received, the status is set to false. This is
|
|
|
|
// invoked by API requests in `http`.
|
|
|
|
setLoading(state, { model, status }) {
|
|
|
|
state.loading[model] = status;
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
getters: {
|
|
|
|
[models.lists]: (state) => state[models.lists],
|
|
|
|
[models.subscribers]: (state) => state[models.subscribers],
|
|
|
|
[models.campaigns]: (state) => state[models.campaigns],
|
|
|
|
[models.media]: (state) => state[models.media],
|
|
|
|
[models.templates]: (state) => state[models.templates],
|
2020-07-08 19:00:14 +08:00
|
|
|
[models.settings]: (state) => state[models.settings],
|
|
|
|
[models.serverConfig]: (state) => state[models.serverConfig],
|
2020-06-07 02:03:55 +08:00
|
|
|
},
|
|
|
|
|
|
|
|
modules: {
|
|
|
|
},
|
|
|
|
});
|