2019-04-09 16:15:15 +02:00
|
|
|
import router from '@/router'
|
|
|
|
import i18n from '~/src/config/i18n'
|
|
|
|
import { Module, MutationTree, ActionTree } from 'vuex'
|
2020-03-15 09:47:56 +01:00
|
|
|
import { Entity } from 'megalodon'
|
2019-06-06 16:44:50 +02:00
|
|
|
import { LocalTag } from '~/src/types/localTag'
|
2019-04-14 16:11:24 +02:00
|
|
|
import { RootState } from '@/store'
|
2019-04-09 16:15:15 +02:00
|
|
|
|
2019-06-06 16:44:50 +02:00
|
|
|
export type Channel = {
|
|
|
|
name: string
|
2019-04-09 16:15:15 +02:00
|
|
|
path: string
|
|
|
|
}
|
|
|
|
|
2019-06-06 16:44:50 +02:00
|
|
|
export type JumpState = {
|
|
|
|
modalOpen: boolean
|
|
|
|
channel: string
|
|
|
|
defaultChannelList: Array<Channel>
|
|
|
|
listChannelList: Array<Channel>
|
|
|
|
tagChannelList: Array<Channel>
|
2019-04-09 16:15:15 +02:00
|
|
|
selectedChannel: Channel
|
|
|
|
}
|
|
|
|
|
|
|
|
const state = (): JumpState => ({
|
|
|
|
modalOpen: false,
|
|
|
|
channel: '',
|
|
|
|
defaultChannelList: [
|
|
|
|
{
|
|
|
|
name: i18n.t('side_menu.home'),
|
|
|
|
path: 'home'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: i18n.t('side_menu.notification'),
|
|
|
|
path: 'notifications'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: i18n.t('side_menu.mention'),
|
|
|
|
path: 'mentions'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: i18n.t('side_menu.favourite'),
|
|
|
|
path: 'favourites'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: i18n.t('side_menu.local'),
|
|
|
|
path: 'local'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: i18n.t('side_menu.public'),
|
|
|
|
path: 'public'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: i18n.t('side_menu.hashtag'),
|
|
|
|
path: 'hashtag'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: i18n.t('side_menu.search'),
|
|
|
|
path: 'search'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: i18n.t('side_menu.direct'),
|
|
|
|
path: 'direct-messages'
|
|
|
|
}
|
|
|
|
],
|
|
|
|
listChannelList: [],
|
|
|
|
tagChannelList: [],
|
|
|
|
selectedChannel: {
|
|
|
|
name: i18n.t('side_menu.home'),
|
|
|
|
path: 'home'
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
export const MUTATION_TYPES = {
|
|
|
|
CHANGE_MODAL: 'changeModal',
|
|
|
|
UPDATE_CHANNEL: 'updateChannel',
|
|
|
|
CHANGE_SELECTED: 'changeSelected',
|
|
|
|
UPDATE_LIST_CHANNEL: 'updateListChannel',
|
|
|
|
UPDATE_TAG_CHANNEL: 'updateTagChannel'
|
|
|
|
}
|
|
|
|
|
|
|
|
const mutations: MutationTree<JumpState> = {
|
|
|
|
[MUTATION_TYPES.CHANGE_MODAL]: (state, value: boolean) => {
|
|
|
|
state.modalOpen = value
|
|
|
|
},
|
|
|
|
[MUTATION_TYPES.UPDATE_CHANNEL]: (state, channel: string) => {
|
|
|
|
state.channel = channel
|
|
|
|
},
|
|
|
|
[MUTATION_TYPES.CHANGE_SELECTED]: (state, channel: Channel) => {
|
|
|
|
state.selectedChannel = channel
|
|
|
|
},
|
2020-03-15 09:47:56 +01:00
|
|
|
[MUTATION_TYPES.UPDATE_LIST_CHANNEL]: (state, lists: Array<Entity.List>) => {
|
2019-06-06 16:44:50 +02:00
|
|
|
state.listChannelList = lists.map(l => {
|
2019-04-09 16:15:15 +02:00
|
|
|
const channel: Channel = {
|
|
|
|
name: `#${l.title}`,
|
|
|
|
path: `lists/${l.id}`
|
|
|
|
}
|
|
|
|
return channel
|
|
|
|
})
|
|
|
|
},
|
2019-04-16 14:44:46 +02:00
|
|
|
[MUTATION_TYPES.UPDATE_TAG_CHANNEL]: (state, tags: Array<LocalTag>) => {
|
2019-04-09 16:15:15 +02:00
|
|
|
state.tagChannelList = tags.map(t => {
|
|
|
|
const channel: Channel = {
|
|
|
|
name: `#${t.tagName}`,
|
|
|
|
path: `hashtag/${t.tagName}`
|
|
|
|
}
|
|
|
|
return channel
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-04-14 16:11:24 +02:00
|
|
|
const actions: ActionTree<JumpState, RootState> = {
|
2019-04-09 16:15:15 +02:00
|
|
|
jumpCurrentSelected: ({ state, commit, rootState }) => {
|
|
|
|
commit(MUTATION_TYPES.CHANGE_MODAL, false)
|
|
|
|
router.push({ path: `/${rootState.TimelineSpace.account._id}/${state.selectedChannel.path}` })
|
|
|
|
},
|
|
|
|
jump: ({ commit, rootState }, channel: Channel) => {
|
|
|
|
commit(MUTATION_TYPES.CHANGE_MODAL, false)
|
|
|
|
router.push({ path: `/${rootState.TimelineSpace.account._id}/${channel.path}` })
|
|
|
|
},
|
|
|
|
syncListChannel: ({ commit, rootState }) => {
|
|
|
|
commit(MUTATION_TYPES.UPDATE_LIST_CHANNEL, rootState.TimelineSpace.SideMenu.lists)
|
|
|
|
},
|
|
|
|
syncTagChannel: ({ commit, rootState }) => {
|
|
|
|
commit(MUTATION_TYPES.UPDATE_TAG_CHANNEL, rootState.TimelineSpace.SideMenu.tags)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-04-14 16:11:24 +02:00
|
|
|
const Jump: Module<JumpState, RootState> = {
|
2019-04-09 16:15:15 +02:00
|
|
|
namespaced: true,
|
|
|
|
state: state,
|
|
|
|
mutations: mutations,
|
|
|
|
actions: actions
|
|
|
|
}
|
|
|
|
|
|
|
|
export default Jump
|