Skip to content

Instantly share code, notes, and snippets.

@storuky
Last active May 23, 2019 16:10
Show Gist options
  • Save storuky/d3e1b3aa6a7e2f634233056753f94723 to your computer and use it in GitHub Desktop.
Save storuky/d3e1b3aa6a7e2f634233056753f94723 to your computer and use it in GitHub Desktop.
Entities
const store = {
namespaced: true,
state: {
users: [],
posts: []
},
mutations: {
set(state, { name, data }) {
state[name] = data;
},
update(state, { name, data }) {
state[name] = state[name] || [];
if (state[name]) {
const idx = state[name].findIndex(e => e.id == data.id);
if (idx == -1) {
state[name].push({ ...data });
} else {
state[name].splice(idx, 1, { ...data });
}
}
},
create(state, { name, data }) {
if (state[name]) {
state[name].unshift(data);
}
},
delete(state, { name, id }) {
if (state[name]) {
state[name] = state[name].filter(v => v.id != id);
}
}
},
actions: {
async query({ commit }, { resource, name, params }) {
try {
const { data } = await resource(params);
commit("set", { name, data });
return data;
} catch (e) {
return null;
}
},
async update({ commit }, { resource, name, params }) {
const { data } = await resource(params);
commit("update", { name, data });
return data;
},
async create({ commit }, { resource, name, params }) {
const { data } = await resource(params);
commit("create", { name, data });
return data;
},
async delete({ commit }, { resource, name, id }) {
const { data } = await resource(id);
commit("delete", { name, id });
return data;
},
async syncItem({ commit }, { resource, name, id }) {
const { data } = await resource(id);
commit("update", { name, data });
return data;
}
}
};
export default store;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment