import generator, { Entity } from 'megalodon' import { Module, MutationTree, ActionTree } from 'vuex' import { RootState } from '@/store' export type FollowRequestsState = { requests: Array } const state = (): FollowRequestsState => ({ requests: [] }) export const MUTATION_TYPES = { UPDATE_REQUESTS: 'updateRequests' } const mutations: MutationTree = { [MUTATION_TYPES.UPDATE_REQUESTS]: (state, accounts: Array) => { state.requests = accounts } } const actions: ActionTree = { fetchRequests: async ({ commit, rootState }): Promise> => { const client = generator( rootState.TimelineSpace.sns, rootState.TimelineSpace.account.baseURL, rootState.TimelineSpace.account.accessToken, rootState.App.userAgent ) const res = await client.getFollowRequests() commit(MUTATION_TYPES.UPDATE_REQUESTS, res.data) return res.data }, acceptRequest: async ({ dispatch, rootState }, user: Entity.Account) => { const client = generator( rootState.TimelineSpace.sns, rootState.TimelineSpace.account.baseURL, rootState.TimelineSpace.account.accessToken, rootState.App.userAgent ) const res = await client.acceptFollowRequest(user.id) await dispatch('fetchRequests') dispatch('TimelineSpace/SideMenu/fetchFollowRequests', rootState.TimelineSpace.account, { root: true }) return res.data }, rejectRequest: async ({ dispatch, rootState }, user: Entity.Account) => { const client = generator( rootState.TimelineSpace.sns, rootState.TimelineSpace.account.baseURL, rootState.TimelineSpace.account.accessToken, rootState.App.userAgent ) const res = await client.rejectFollowRequest(user.id) await dispatch('fetchRequests') dispatch('TimelineSpace/SideMenu/fetchFollowRequests', rootState.TimelineSpace.account, { root: true }) return res.data } } const FollowRequests: Module = { namespaced: true, state: state, mutations: mutations, actions: actions } export default FollowRequests