import { FindUsers } from '@/domain' import { RootState } from '@/store' import { BareActionContext, getStoreBuilder } from 'vuex-typex' export interface UserState { currentUser: User | null foundUsers: User[] } const initialState: UserState = { currentUser: null, foundUsers: [], } const builder = getStoreBuilder().module('user', initialState) // Getters const getterUserList = builder.read(function foundUsers(state: UserState) { return state.foundUsers }) const getterCurrentUser = builder.read(function currentUser(state: UserState) { return state.currentUser }) // Mutations function setUserList(state: UserState, foundUsers: User[]) { state.foundUsers = foundUsers } function setCurrentUser(state: UserState, currentUser: User) { state.currentUser = currentUser } // Action async function findUsers(context: BareActionContext, name: string) { const list = await FindUsers(name) user.setUserList(list || []) } function resetFoundUsers(context: BareActionContext) { user.setUserList([]) } export const user = { get foundUsers(): User[] { return getterUserList() }, getCurrentUser(): User | null { return getterCurrentUser() }, setCurrentUser: builder.commit(setCurrentUser), setUserList: builder.commit(setUserList), resetFoundUsers: builder.dispatch(resetFoundUsers), findUsers: builder.dispatch(findUsers), }