UNPKG

@bye_past/vuex-helpers

Version:

vuex-helpers is a utility library for Vue 3 and Vuex 4, simplifying the use of Vuex's mapper functions. This library provides a set of hooks for Vuex, making it more concise to use Vuex in Vue components.

56 lines (53 loc) 1.88 kB
import { computed } from 'vue'; import { createNamespacedHelpers, useStore, mapState, mapGetters, mapMutations, mapActions } from 'vuex'; const useMapper = (mapper, mapFn, isFn = false) => { const store = useStore(); const storeStateFns = mapFn(mapper); const storeState = {}; Object.keys(storeStateFns).forEach(keyFn => { const fn = storeStateFns[keyFn].bind({ $store: store }); storeState[keyFn] = isFn ? fn : computed(fn); }); return storeState; }; const useState = (moduleName, mapper) => { let mapperFn = mapState; if (typeof moduleName === 'string' && moduleName.length > 0) { mapperFn = createNamespacedHelpers(moduleName).mapState; } else { mapper = moduleName; } return useMapper(mapper, mapperFn); // added assertion here }; const useGetters = (moduleName, mapper) => { let mapperFn = mapGetters; if (typeof moduleName === 'string' && moduleName.length > 0) { mapperFn = createNamespacedHelpers(moduleName).mapGetters; } else { mapper = moduleName; } return useMapper(mapper, mapperFn); // added assertion here }; const useMutations = (moduleName, mapper) => { let mapperFn = mapMutations; if (typeof moduleName === 'string' && moduleName.length > 0) { mapperFn = createNamespacedHelpers(moduleName).mapMutations; } else { mapper = moduleName; } return useMapper(mapper, mapperFn, true); // added assertion here }; const useActions = (moduleName, mapper) => { let mapperFn = mapActions; if (typeof moduleName === 'string' && moduleName.length > 0) { mapperFn = createNamespacedHelpers(moduleName).mapActions; } else { mapper = moduleName; } return useMapper(mapper, mapperFn, true); // added assertion here }; export { useActions, useGetters, useMutations, useState };