vuex-local
Version:
Local state management within Vuex
50 lines (49 loc) • 1.62 kB
JavaScript
import { localKey } from './utils';
export function mapLocalModule(vm, modulePath, module) {
mapState(vm, module.state, modulePath);
var moduleName = modulePath[modulePath.length - 1];
if (module.getters) {
mapGetters(vm, module.getters, moduleName);
}
if (module.actions) {
mapActions(vm, module.actions, moduleName);
}
if (module.mutations) {
mapMutations(vm, module.mutations, moduleName);
}
}
function getSubState(state, path) {
return path.reduce(function (sub, key) { return sub[key]; }, state);
}
function mapState(vm, state, path) {
Object.keys(state).forEach(function (key) {
Object.defineProperty(vm, key, {
enumerable: true,
configurable: true,
get: function () { return getSubState(vm.$store.state, path)[key]; }
});
});
}
function mapGetters(vm, getters, moduleName) {
Object.keys(getters).forEach(function (key) {
Object.defineProperty(vm, key, {
enumerable: true,
configurable: true,
get: function () { return vm.$store.getters[localKey(key, moduleName)]; }
});
});
}
function mapActions(vm, actions, moduleName) {
Object.keys(actions).forEach(function (key) {
vm[key] = function (payload) {
return vm.$store.dispatch(localKey(key, moduleName), payload);
};
});
}
function mapMutations(vm, mutations, moduleName) {
Object.keys(mutations).forEach(function (key) {
vm[key] = function (payload) {
vm.$store.commit(localKey(key, moduleName), payload);
};
});
}