import {Store} from 'vuex/types'; import {computed} from '@vue/composition-api'; import {computedGetter, getAction, getMutation, getStoreFromInstance, useMapping, ExtractGetterTypes, ExtractTypes, KnownKeys, RefTypes, Namespace, Nullish} from './util'; function computedState(store: any, prop: string) { return computed(() => store.state[prop]); } function computedNamespacedState(store: any, namespace: string, prop: string) { let module = namespace.split('/').reduce((module, key) => module[key], store.state) return computed(() => module[prop]) } export function useStore() { return getStoreFromInstance() as Store } export function useState(map: KnownKeys[]): RefTypes; export function useState(storeOrNamespace: Store | Namespace, map?: KnownKeys[]): RefTypes; export function useState(store: Store | Nullish, namespace?: Namespace, map?: KnownKeys[]): RefTypes; export function useState(storeOrNamespace: KnownKeys[] | Store | Namespace, namespaceOrMap?: KnownKeys[] | Namespace, map?: KnownKeys[]): RefTypes { let realStore, realNamespace, realMap; if (arguments.length >= 3) { realStore = storeOrNamespace as Store || getStoreFromInstance(); realNamespace = namespaceOrMap as string || null; realMap = map as KnownKeys[] || null; } else if (arguments.length === 2) { if (typeof storeOrNamespace === 'string') { realStore = getStoreFromInstance(); realNamespace = storeOrNamespace as string || null; } else { realStore = storeOrNamespace as Store || getStoreFromInstance(); realNamespace = null } realMap = namespaceOrMap as KnownKeys[] || null; } else { realStore = getStoreFromInstance(); realNamespace = null; realMap = storeOrNamespace as KnownKeys[] || null; } return useMapping(realStore, realNamespace, realMap, !realNamespace ? computedState : computedNamespacedState); } export function useGetters(map: KnownKeys[]): ExtractGetterTypes; export function useGetters(storeOrNamespace: Store | Namespace, map?: KnownKeys[]): ExtractGetterTypes; export function useGetters(store: Store | Nullish, namespace?: Namespace, map?: KnownKeys[]): ExtractGetterTypes; export function useGetters(storeOrNamespace: KnownKeys[] | Store | Namespace, namespaceOrMap?: KnownKeys[] | Namespace, map?: KnownKeys[]): ExtractGetterTypes { let realStore, realNamespace, realMap; if (arguments.length >= 3) { realStore = storeOrNamespace as Store || getStoreFromInstance(); realNamespace = namespaceOrMap as string || null; realMap = map as KnownKeys[] || null; } else if (arguments.length === 2) { if (typeof storeOrNamespace === 'string') { realStore = getStoreFromInstance(); realNamespace = storeOrNamespace as string || null; } else { realStore = storeOrNamespace as Store || getStoreFromInstance(); realNamespace = null } realMap = namespaceOrMap as KnownKeys[] || null; } else { realStore = getStoreFromInstance(); realNamespace = null; realMap = storeOrNamespace as KnownKeys[] || null; } return useMapping(realStore, realNamespace, realMap, computedGetter); } export function useMutations(map: KnownKeys[]): ExtractTypes; export function useMutations(storeOrNamespace: Store | Namespace, map?: KnownKeys[]): ExtractTypes; export function useMutations(store: Store | Nullish, namespace?: Namespace, map?: KnownKeys[]): ExtractTypes; export function useMutations(storeOrNamespace: KnownKeys[] | Store | Namespace, namespaceOrMap?: KnownKeys[] | Namespace, map?: KnownKeys[]): ExtractTypes { let realStore, realNamespace, realMap; if (arguments.length >= 3) { realStore = storeOrNamespace as Store || getStoreFromInstance(); realNamespace = namespaceOrMap as string || null; realMap = map as KnownKeys[] || null; } else if (arguments.length === 2) { if (typeof storeOrNamespace === 'string') { realStore = getStoreFromInstance(); realNamespace = storeOrNamespace as string || null; } else { realStore = storeOrNamespace as Store || getStoreFromInstance(); realNamespace = null } realMap = namespaceOrMap as KnownKeys[] || null; } else { realStore = getStoreFromInstance(); realNamespace = null; realMap = storeOrNamespace as KnownKeys[] || null; } return useMapping(realStore, realNamespace, realMap, getMutation); } export function useActions(map: KnownKeys[]): ExtractTypes; export function useActions(storeOrNamespace: Store | Namespace, map?: KnownKeys[]): ExtractTypes; export function useActions(store: Store | Nullish, namespace?: Namespace, map?: KnownKeys[]): ExtractTypes; export function useActions(storeOrNamespace: KnownKeys[] | Store | Namespace, namespaceOrMap?: KnownKeys[] | Namespace, map?: KnownKeys[]): ExtractTypes { let realStore, realNamespace, realMap; if (arguments.length >= 3) { realStore = storeOrNamespace as Store || getStoreFromInstance(); realNamespace = namespaceOrMap as string || null; realMap = map as KnownKeys[] || null; } else if (arguments.length === 2) { if (typeof storeOrNamespace === 'string') { realStore = getStoreFromInstance(); realNamespace = storeOrNamespace as string || null; } else { realStore = storeOrNamespace as Store || getStoreFromInstance(); realNamespace = null } realMap = namespaceOrMap as KnownKeys[] || null; } else { realStore = getStoreFromInstance(); realNamespace = null; realMap = storeOrNamespace as KnownKeys[] || null; } return useMapping(realStore, realNamespace, realMap, getAction); }