JSFiddle - React, Tailwind, and code Playground
by Phil Brown
HTML
<script src="https://unpkg.com/[email protected]/dist/vuex.js"></script>
JavaScript
const store = new Vuex.Store({
state: {
integration: {},
objects: ["user", "account"],
describeFields: { user: [], account: [] }
},
getters: {
getCurrentIntegration(state) {
return state.integration;
},
getCurrentDescribeFields: state => obj => {
return state.describeFields.hasOwnProperty(obj)
? state.describeFields[obj]
: [];
}
},
actions: {
setCurrentIntegration({ commit, dispatch, state }, payload) {
return new Promise(resolve => {
commit("updateCurrentIntegration", payload);
let promises = [];
state.objects.forEach(obj => {
promises.push(dispatch("retrieveLocalDescribeFields", { obj: obj }));
});
resolve(Promise.all(promises));
});
},
setCurrentDescribeFields({ commit }, payload) {
return new Promise(resolve => {
commit("updateCurrentDescribeFields", payload);
resolve(true);
});
},
setClearDescribeFields({ commit }) {
return new Promise(resolve => {
commit("updateClearDescribeFields");
resolve(true);
});
},
retrieveLocalDescribeFields({ commit, dispatch, state, getters }, payload) {
return new Promise(resolve => {
// go get data from indexeddb...
// dexis call omitted
let theFields = ['foo', 'bar']
if (theFields.length) {
resolve(
commit("updateCurrentDescribeFields", {
obj: payload.obj,
data: theFields
})
);
} else {
resolve(dispatch("retrieveRemoteDescribeFields", payload));
}
});
},
retrieveRemoteDescribeFields({ commit, state, getters }, payload) {
return new Promise(resolve => {
// go get data from remote api...
// axios call omitted
commit("updateCurrentDescribeFields", {
obj: payload.obj,
data: res.data.records
});
...