refs #850 Replace Followers in SideBar with typescript
This commit is contained in:
parent
864da847c7
commit
c29c538eb2
|
@ -1,7 +1,7 @@
|
||||||
import Mastodon, { Account, Relationship, Response, Results } from 'megalodon'
|
import Mastodon, { Account, Relationship, Response, Results } from 'megalodon'
|
||||||
import Timeline from './AccountProfile/Timeline'
|
import Timeline from './AccountProfile/Timeline'
|
||||||
import Follows from './AccountProfile/Follows'
|
import Follows from './AccountProfile/Follows'
|
||||||
import Followers from './AccountProfile/Followers'
|
import Followers, { FollowersState } from './AccountProfile/Followers'
|
||||||
import { Module, MutationTree, ActionTree } from 'vuex'
|
import { Module, MutationTree, ActionTree } from 'vuex'
|
||||||
import { RootState } from '@/store'
|
import { RootState } from '@/store'
|
||||||
|
|
||||||
|
@ -11,7 +11,9 @@ export interface AccountProfileState {
|
||||||
loading: boolean
|
loading: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface AccountProfileModuleState extends AccountProfileState {}
|
export interface AccountProfileModuleState extends AccountProfileState {
|
||||||
|
Followers: FollowersState
|
||||||
|
}
|
||||||
|
|
||||||
const state = (): AccountProfileState => ({
|
const state = (): AccountProfileState => ({
|
||||||
account: null,
|
account: null,
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
import Mastodon from 'megalodon'
|
|
||||||
|
|
||||||
const Followers = {
|
|
||||||
namespaced: true,
|
|
||||||
state: {
|
|
||||||
followers: [],
|
|
||||||
relationships: []
|
|
||||||
},
|
|
||||||
mutations: {
|
|
||||||
updateFollowers (state, users) {
|
|
||||||
state.followers = users
|
|
||||||
},
|
|
||||||
updateRelationships (state, relations) {
|
|
||||||
state.relationships = relations
|
|
||||||
}
|
|
||||||
},
|
|
||||||
actions: {
|
|
||||||
fetchFollowers ({ commit, rootState }, account) {
|
|
||||||
const client = new Mastodon(
|
|
||||||
rootState.TimelineSpace.account.accessToken,
|
|
||||||
rootState.TimelineSpace.account.baseURL + '/api/v1'
|
|
||||||
)
|
|
||||||
return client.get(`/accounts/${account.id}/followers`, { limit: 80 })
|
|
||||||
.then(res => {
|
|
||||||
commit('updateFollowers', res.data)
|
|
||||||
return res.data
|
|
||||||
})
|
|
||||||
},
|
|
||||||
fetchRelationships ({ commit, rootState }, accounts) {
|
|
||||||
const ids = accounts.map(a => a.id)
|
|
||||||
const client = new Mastodon(
|
|
||||||
rootState.TimelineSpace.account.accessToken,
|
|
||||||
rootState.TimelineSpace.account.baseURL + '/api/v1'
|
|
||||||
)
|
|
||||||
return client.get(`/accounts/relationships`, {
|
|
||||||
id: ids
|
|
||||||
})
|
|
||||||
.then(res => {
|
|
||||||
commit('updateRelationships', res.data)
|
|
||||||
return res.data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default Followers
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
import Mastodon, { Account, Relationship, Response } from 'megalodon'
|
||||||
|
import { Module, MutationTree, ActionTree } from 'vuex'
|
||||||
|
import { RootState } from '@/store'
|
||||||
|
|
||||||
|
export interface FollowersState {
|
||||||
|
followers: Array<Account>,
|
||||||
|
relationships: Array<Relationship>
|
||||||
|
}
|
||||||
|
|
||||||
|
const state = (): FollowersState => ({
|
||||||
|
followers: [],
|
||||||
|
relationships: []
|
||||||
|
})
|
||||||
|
|
||||||
|
export const MUTATION_TYPES = {
|
||||||
|
UPDATE_FOLLOWERS: 'updateFollowers',
|
||||||
|
UPDATE_RELATIONSHIPS: 'updateRelationships'
|
||||||
|
}
|
||||||
|
|
||||||
|
const mutations: MutationTree<FollowersState> = {
|
||||||
|
[MUTATION_TYPES.UPDATE_FOLLOWERS]: (state, users: Array<Account>) => {
|
||||||
|
state.followers = users
|
||||||
|
},
|
||||||
|
[MUTATION_TYPES.UPDATE_RELATIONSHIPS]: (state, relations: Array<Relationship>) => {
|
||||||
|
state.relationships = relations
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const actions: ActionTree<FollowersState, RootState> = {
|
||||||
|
fetchFollowers: async ({ commit, rootState }, account: Account) => {
|
||||||
|
const client = new Mastodon(
|
||||||
|
rootState.TimelineSpace.account.accessToken!,
|
||||||
|
rootState.TimelineSpace.account.baseURL + '/api/v1'
|
||||||
|
)
|
||||||
|
const res: Response<Array<Account>> = await client.get<Array<Account>>(`/accounts/${account.id}/followers`, { limit: 80 })
|
||||||
|
commit(MUTATION_TYPES.UPDATE_FOLLOWERS, res.data)
|
||||||
|
return res.data
|
||||||
|
},
|
||||||
|
fetchRelationships: async ({ commit, rootState }, accounts: Array<Account>) => {
|
||||||
|
const ids = accounts.map(a => a.id)
|
||||||
|
const client = new Mastodon(
|
||||||
|
rootState.TimelineSpace.account.accessToken!,
|
||||||
|
rootState.TimelineSpace.account.baseURL + '/api/v1'
|
||||||
|
)
|
||||||
|
const res: Response<Array<Relationship>> = await client.get<Array<Relationship>>(`/accounts/relationships`, {
|
||||||
|
id: ids
|
||||||
|
})
|
||||||
|
commit(MUTATION_TYPES.UPDATE_RELATIONSHIPS, res.data)
|
||||||
|
return res.data
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const Followers: Module<FollowersState, RootState> = {
|
||||||
|
namespaced: true,
|
||||||
|
state: state,
|
||||||
|
mutations: mutations,
|
||||||
|
actions: actions
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Followers
|
Loading…
Reference in New Issue