import { Action, getModule, Module, Mutation, MutationAction, VuexModule } from 'vuex-module-decorators'; import { LoginSubmit, User } from '@/models'; import api from '@/services/pm-api-client'; import store from '@/store'; import { logService } from '@/services/logging'; @Module({ namespaced: true, name: 'user', store, dynamic: true }) class UserStoreModule extends VuexModule { public user: User | null = null; public users: User[] = []; private log = logService.getLogger('/store-modules/user'); @MutationAction({ mutate: ['user']}) public async fetchUser() { return { user: await api.getUser() }; } @MutationAction({ mutate: ['users'] }) public async fetchAllUsers() { return { users: await api.getAllUsers() }; } @MutationAction({ mutate: ['users'] }) public async createUser(user: User) { const newUser = await api.createUser(user); return { users: this.users.concat([user]) }; } @MutationAction({ mutate: ['users'] }) public async deleteUser(userId: string) { await api.deleteUser(userId); return { users: this.users.filter((u) => u.id !== userId) }; } } export const userStore = getModule(UserStoreModule); export default userStore;