MeikanClient/src/store/module/userAnime.ts

44 lines
1.1 KiB
TypeScript
Raw Normal View History

2018-12-13 21:21:22 +01:00
import { GetUserAnime } from '@/domain'
2018-12-03 20:27:07 +01:00
import { RootState } from '@/store'
import { BareActionContext, getStoreBuilder } from 'vuex-typex'
export interface UserAnimeState {
userAnime: Meikan.UserAnime[]
2018-12-03 20:27:07 +01:00
}
const initialState: UserAnimeState = {
userAnime: [],
2018-12-03 20:27:07 +01:00
}
const builder = getStoreBuilder<RootState>().module('userAnime', initialState)
// Getters
const getterUserAnime = builder.read(function anime(state: UserAnimeState) {
return state.userAnime
2018-12-03 20:27:07 +01:00
})
// Mutations
2018-12-13 21:19:31 +01:00
function setAnime(state: UserAnimeState, animeList: Meikan.UserAnime[]) {
state.userAnime = animeList
2018-12-03 20:27:07 +01:00
}
// Action
2018-12-13 21:19:31 +01:00
async function fetchUserAnime(context: BareActionContext<UserAnimeState, RootState>, user: Meikan.User) {
2018-12-13 21:21:22 +01:00
const list = await GetUserAnime(user.id)
2018-12-03 20:27:07 +01:00
userAnimeState.setAnime(list)
2018-12-03 20:27:07 +01:00
}
function resetUserAnime(context: BareActionContext<UserAnimeState, RootState>) {
userAnimeState.setAnime([])
2018-12-03 20:27:07 +01:00
}
export const userAnimeState = {
2018-12-13 21:19:31 +01:00
get anime(): Meikan.UserAnime[] {
2018-12-03 20:27:07 +01:00
return getterUserAnime()
},
setAnime: builder.commit(setAnime),
fetchUserAnime: builder.dispatch(fetchUserAnime),
resetUserAnime: builder.dispatch(resetUserAnime),
}