58 lines
1.4 KiB
TypeScript
58 lines
1.4 KiB
TypeScript
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<RootState>().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<UserState, RootState>, name: string) {
|
|
const list = await FindUsers(name)
|
|
|
|
user.setUserList(list || [])
|
|
}
|
|
|
|
function resetFoundUsers(context: BareActionContext<UserState, RootState>) {
|
|
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),
|
|
}
|