import { ActionContext, ActionTree } from 'vuex' import { Mutations, MutationTypes } from './mutations' import { State } from './index' import { RootState } from '~/store/index' export enum ActionTypes { addData = 'addData', removeData = 'removeData', editData = 'editData' } type AppDataActionContext = { commit<K extends keyof Mutations>( key: K, payload: Parameters<Mutations[K]>[1] ): ReturnType<Mutations[K]> } & Omit<ActionContext<State, RootState>, 'commit'> export interface Actions { [ActionTypes.addData]( { commit }: AppDataActionContext, payload: any ): void [ActionTypes.removeData]( { commit }: AppDataActionContext, payload: any ): void [ActionTypes.editData]( { commit }: AppDataActionContext, payload: any ): void } export const actions: ActionTree<State, RootState> & Actions = { [ActionTypes.addData]({ commit }, payload) { commit(MutationTypes.addData, payload) }, [ActionTypes.removeData]({ commit }, payload) { commit(MutationTypes.removeData, payload) }, [ActionTypes.editData]({ commit }, payload) { commit(MutationTypes.editData, payload) }, }