MeikanClient/src/store/module/userAnime.ts

44 lines
1.1 KiB
TypeScript
Raw Normal View History

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