Move poll state handling to its own module
This commit is contained in:
parent
eca533aab6
commit
e5e9bb27f3
6 changed files with 96 additions and 34 deletions
73
src/modules/polls.js
Normal file
73
src/modules/polls.js
Normal file
|
@ -0,0 +1,73 @@
|
|||
import { each, merge } from 'lodash'
|
||||
import { set } from 'vue'
|
||||
|
||||
const polls = {
|
||||
state: {
|
||||
// Contains key = id, value = number of trackers for this poll
|
||||
trackedPolls: {},
|
||||
pollsObject: {}
|
||||
},
|
||||
mutations: {
|
||||
addNewStatuses (state, { statuses }) {
|
||||
each(statuses, status => {
|
||||
if (status.poll) {
|
||||
set(state.pollsObject, status.poll.id, status.poll)
|
||||
}
|
||||
})
|
||||
},
|
||||
mergePoll (state, poll) {
|
||||
state.pollsObject[poll.id] = merge(state.pollsObject[poll.id], poll)
|
||||
},
|
||||
trackPoll (state, pollId) {
|
||||
const currentValue = state.trackedPolls[pollId]
|
||||
if (currentValue) {
|
||||
set(state.trackedPolls, pollId, currentValue + 1)
|
||||
} else {
|
||||
set(state.trackedPolls, pollId, 1)
|
||||
}
|
||||
},
|
||||
untrackPoll (state, pollId) {
|
||||
const currentValue = state.trackedPolls[pollId]
|
||||
if (currentValue) {
|
||||
set(state.trackedPolls, pollId, currentValue - 1)
|
||||
} else {
|
||||
set(state.trackedPolls, pollId, 0)
|
||||
}
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
updatePoll ({ rootState, commit }, pollId) {
|
||||
return rootState.api.backendInteractor.fetchPoll(pollId).then(poll => {
|
||||
commit('mergePoll', poll)
|
||||
return poll
|
||||
})
|
||||
},
|
||||
updateTrackedPoll ({ rootState, dispatch, commit }, pollId) {
|
||||
rootState.api.backendInteractor.fetchPoll(pollId).then(poll => {
|
||||
setTimeout(() => {
|
||||
if (rootState.polls.trackedPolls[pollId]) {
|
||||
dispatch('updateTrackedPoll', pollId)
|
||||
}
|
||||
}, 30 * 1000)
|
||||
commit('mergePoll', poll)
|
||||
})
|
||||
},
|
||||
trackPoll ({ rootState, commit, dispatch }, pollId) {
|
||||
if (!rootState.polls.trackedPolls[pollId]) {
|
||||
setTimeout(() => dispatch('updateTrackedPoll', pollId), 30 * 1000)
|
||||
}
|
||||
commit('trackPoll', pollId)
|
||||
},
|
||||
untrackPoll ({ commit }, pollId) {
|
||||
commit('untrackPoll', pollId)
|
||||
},
|
||||
votePoll ({ rootState, commit }, { id, pollId, choices }) {
|
||||
return rootState.api.backendInteractor.vote(pollId, choices).then(poll => {
|
||||
commit('mergePoll', poll)
|
||||
return poll
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default polls
|
|
@ -582,18 +582,6 @@ const statuses = {
|
|||
]).then(([favoritedByUsers, rebloggedByUsers]) =>
|
||||
commit('addFavsAndRepeats', { id, favoritedByUsers, rebloggedByUsers })
|
||||
)
|
||||
},
|
||||
votePoll ({ rootState, commit }, { id, pollId, choices }) {
|
||||
return rootState.api.backendInteractor.vote(pollId, choices).then(poll => {
|
||||
commit('updateStatusWithPoll', { id, poll })
|
||||
return poll
|
||||
})
|
||||
},
|
||||
refreshPoll ({ rootState, commit }, { id, pollId }) {
|
||||
return rootState.api.backendInteractor.fetchPoll(pollId).then(poll => {
|
||||
commit('updateStatusWithPoll', { id, poll })
|
||||
return poll
|
||||
})
|
||||
}
|
||||
},
|
||||
mutations
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue