Whalebird-desktop-client-ma.../src/renderer/store/TimelineSpace/HeaderMenu.ts

67 lines
1.7 KiB
TypeScript

import generator, { Entity } from 'megalodon'
import { Module, MutationTree, ActionTree } from 'vuex'
import { RootState } from '@/store'
import AxiosLoading from '@/utils/axiosLoading'
export type HeaderMenuState = {
title: string
reload: boolean
loading: boolean
}
const state = (): HeaderMenuState => ({
title: 'Home',
reload: false,
loading: false
})
export const MUTATION_TYPES = {
UPDATE_TITLE: 'updateTitle',
CHANGE_RELOAD: 'changeReload',
CHANGE_LOADING: 'changeLoading'
}
const mutations: MutationTree<HeaderMenuState> = {
[MUTATION_TYPES.UPDATE_TITLE]: (state, title: string) => {
state.title = title
},
[MUTATION_TYPES.CHANGE_RELOAD]: (state, value: boolean) => {
state.reload = value
},
[MUTATION_TYPES.CHANGE_LOADING]: (state, value: boolean) => {
state.loading = value
}
}
const actions: ActionTree<HeaderMenuState, RootState> = {
fetchList: async ({ commit, rootState }, listID: string): Promise<Entity.List> => {
const client = generator(
rootState.TimelineSpace.sns,
rootState.TimelineSpace.account.baseURL,
rootState.TimelineSpace.account.accessToken,
rootState.App.userAgent
)
const res = await client.getList(listID)
commit(MUTATION_TYPES.UPDATE_TITLE, `#${res.data.title}`)
return res.data
},
setupLoading: ({ commit }) => {
const axiosLoading = new AxiosLoading()
axiosLoading.on('start', (_: number) => {
commit(MUTATION_TYPES.CHANGE_LOADING, true)
})
axiosLoading.on('done', () => {
commit(MUTATION_TYPES.CHANGE_LOADING, false)
})
}
}
const HeaderMenu: Module<HeaderMenuState, RootState> = {
namespaced: true,
state: state,
mutations: mutations,
actions: actions
}
export default HeaderMenu