Move reports module to store

This commit is contained in:
Sean King 2023-04-06 17:59:12 -06:00
parent f9254e5fb7
commit ad7d47f440
No known key found for this signature in database
GPG Key ID: 510C52BACD6E7257
8 changed files with 64 additions and 74 deletions

View File

@ -7,6 +7,7 @@ import { library } from '@fortawesome/fontawesome-svg-core'
import { import {
faEllipsisV faEllipsisV
} from '@fortawesome/free-solid-svg-icons' } from '@fortawesome/free-solid-svg-icons'
import { useReportsStore } from '../../stores/reports'
library.add( library.add(
faEllipsisV faEllipsisV
@ -73,7 +74,7 @@ const AccountActions = {
this.hideConfirmRemoveUserFromFollowers() this.hideConfirmRemoveUserFromFollowers()
}, },
reportUser () { reportUser () {
this.$store.dispatch('openUserReportingModal', { userId: this.user.id }) useReportsStore().openUserReportingModal({ userId: this.user.id })
}, },
openChat () { openChat () {
this.$router.push({ this.$router.push({

View File

@ -18,6 +18,7 @@ import {
} from '@fortawesome/free-regular-svg-icons' } from '@fortawesome/free-regular-svg-icons'
import { useEditStatusStore } from '../../stores/editStatus' import { useEditStatusStore } from '../../stores/editStatus'
import { useStatusHistoryStore } from '../../stores/statusHistory' import { useStatusHistoryStore } from '../../stores/statusHistory'
import { useReportsStore } from '../../stores/reports'
library.add( library.add(
faEllipsisH, faEllipsisH,
@ -105,7 +106,7 @@ const ExtraButtons = {
.catch(err => this.$emit('onError', err.error.error)) .catch(err => this.$emit('onError', err.error.error))
}, },
reportStatus () { reportStatus () {
this.$store.dispatch('openUserReportingModal', { userId: this.status.user.id, statusIds: [this.status.id] }) useReportsStore().openUserReportingModal({ userId: this.status.user.id, statusIds: [this.status.id] })
}, },
editStatus () { editStatus () {
this.$store.dispatch('fetchStatusSource', { id: this.status.id }) this.$store.dispatch('fetchStatusSource', { id: this.status.id })

View File

@ -1,3 +1,4 @@
import { useReportsStore } from '../../stores/reports'
import Select from '../select/select.vue' import Select from '../select/select.vue'
import StatusContent from '../status_content/status_content.vue' import StatusContent from '../status_content/status_content.vue'
import Timeago from '../timeago/timeago.vue' import Timeago from '../timeago/timeago.vue'
@ -14,7 +15,7 @@ const Report = {
}, },
computed: { computed: {
report () { report () {
return this.$store.state.reports.reports[this.reportId] || {} return useReportsStore().reports[this.reportId] || {}
}, },
state: { state: {
get: function () { return this.report.state }, get: function () { return this.report.state },
@ -26,7 +27,7 @@ const Report = {
return generateProfileLink(user.id, user.screen_name, this.$store.state.instance.restrictedNicknames) return generateProfileLink(user.id, user.screen_name, this.$store.state.instance.restrictedNicknames)
}, },
setReportState (state) { setReportState (state) {
return this.$store.dispatch('setReportState', { id: this.report.id, state }) return useReportsStore().setReportState({ id: this.report.id, state })
} }
} }
} }

View File

@ -3,6 +3,7 @@ import List from '../list/list.vue'
import Checkbox from '../checkbox/checkbox.vue' import Checkbox from '../checkbox/checkbox.vue'
import Modal from '../modal/modal.vue' import Modal from '../modal/modal.vue'
import UserLink from '../user_link/user_link.vue' import UserLink from '../user_link/user_link.vue'
import { useReportsStore } from '../../stores/reports'
const UserReportingModal = { const UserReportingModal = {
components: { components: {
@ -23,7 +24,7 @@ const UserReportingModal = {
}, },
computed: { computed: {
reportModal () { reportModal () {
return this.$store.state.reports.reportModal return useReportsStore().reportModal
}, },
isLoggedIn () { isLoggedIn () {
return !!this.$store.state.users.currentUser return !!this.$store.state.users.currentUser
@ -63,7 +64,7 @@ const UserReportingModal = {
this.error = false this.error = false
}, },
closeModal () { closeModal () {
this.$store.dispatch('closeUserReportingModal') useReportsStore().closeUserReportingModal()
}, },
reportUser () { reportUser () {
this.processing = true this.processing = true

View File

@ -15,7 +15,6 @@ import serverSideStorageModule from './modules/serverSideStorage.js'
import oauthModule from './modules/oauth.js' import oauthModule from './modules/oauth.js'
import authFlowModule from './modules/auth_flow.js' import authFlowModule from './modules/auth_flow.js'
import oauthTokensModule from './modules/oauth_tokens.js' import oauthTokensModule from './modules/oauth_tokens.js'
import reportsModule from './modules/reports.js'
import chatsModule from './modules/chats.js' import chatsModule from './modules/chats.js'
@ -75,7 +74,6 @@ const persistedStateOptions = {
oauth: oauthModule, oauth: oauthModule,
authFlow: authFlowModule, authFlow: authFlowModule,
oauthTokens: oauthTokensModule, oauthTokens: oauthTokensModule,
reports: reportsModule,
chats: chatsModule chats: chatsModule
}, },
plugins, plugins,

View File

@ -1,65 +0,0 @@
import filter from 'lodash/filter'
import { useInterfaceStore } from '../stores/interface'
const reports = {
state: {
reportModal: {
userId: null,
statuses: [],
preTickedIds: [],
activated: false
},
reports: {}
},
mutations: {
openUserReportingModal (state, { userId, statuses, preTickedIds }) {
state.reportModal.userId = userId
state.reportModal.statuses = statuses
state.reportModal.preTickedIds = preTickedIds
state.reportModal.activated = true
},
closeUserReportingModal (state) {
state.reportModal.activated = false
},
setReportState (reportsState, { id, state }) {
reportsState.reports[id].state = state
},
addReport (state, report) {
state.reports[report.id] = report
}
},
actions: {
openUserReportingModal ({ rootState, commit }, { userId, statusIds = [] }) {
const preTickedStatuses = statusIds.map(id => rootState.statuses.allStatusesObject[id])
const preTickedIds = statusIds
const statuses = preTickedStatuses.concat(
filter(rootState.statuses.allStatuses,
status => status.user.id === userId && !preTickedIds.includes(status.id)
)
)
commit('openUserReportingModal', { userId, statuses, preTickedIds })
},
closeUserReportingModal ({ commit }) {
commit('closeUserReportingModal')
},
setReportState ({ commit, dispatch, rootState }, { id, state }) {
const oldState = rootState.reports.reports[id].state
commit('setReportState', { id, state })
rootState.api.backendInteractor.setReportState({ id, state }).catch(e => {
console.error('Failed to set report state', e)
useInterfaceStore().pushGlobalNotice({
level: 'error',
messageKey: 'general.generic_error_message',
messageArgs: [e.message],
timeout: 5000
})
commit('setReportState', { id, state: oldState })
})
},
addReport ({ commit }, report) {
commit('addReport', report)
}
}
}
export default reports

View File

@ -18,6 +18,7 @@ import {
maybeShowNotification maybeShowNotification
} from '../services/notification_utils/notification_utils.js' } from '../services/notification_utils/notification_utils.js'
import apiService from '../services/api/api.service.js' import apiService from '../services/api/api.service.js'
import { useReportsStore } from '../stores/reports.js'
const emptyTl = (userId = 0) => ({ const emptyTl = (userId = 0) => ({
statuses: [], statuses: [],
@ -341,7 +342,7 @@ const addNewNotifications = (state, { dispatch, notifications, older, visibleNot
} }
if (notification.type === 'pleroma:report') { if (notification.type === 'pleroma:report') {
dispatch('addReport', notification.report) useReportsStore().addReport(notification.report)
} }
if (notification.type === 'pleroma:emoji_reaction') { if (notification.type === 'pleroma:emoji_reaction') {

52
src/stores/reports.js Normal file
View File

@ -0,0 +1,52 @@
import { defineStore } from 'pinia'
import filter from 'lodash/filter'
import { useInterfaceStore } from '../stores/interface'
export const useReportsStore = defineStore('reports', {
state: () => ({
reportModal: {
userId: null,
statuses: [],
preTickedIds: [],
activated: false
},
reports: {}
}),
actions: {
openUserReportingModal ({ userId, statusIds = [] }) {
const preTickedStatuses = statusIds.map(id => window.vuex.state.statuses.allStatusesObject[id])
const preTickedIds = statusIds
const statuses = preTickedStatuses.concat(
filter(window.vuex.state.statuses.allStatuses,
status => status.user.id === userId && !preTickedIds.includes(status.id)
)
)
this.reportModal.userId = userId
this.reportModal.statuses = statuses
this.reportModal.preTickedIds = preTickedIds
this.reportModal.activated = true
},
closeUserReportingModal () {
this.reportModal.activated = false
},
setReportState ({ id, state }) {
const oldState = window.vuex.state.reports.reports[id].state
this.reports[id].state = state
window.vuex.state.api.backendInteractor.setReportState({ id, state }).catch(e => {
console.error('Failed to set report state', e)
useInterfaceStore().pushGlobalNotice({
level: 'error',
messageKey: 'general.generic_error_message',
messageArgs: [e.message],
timeout: 5000
})
this.reports[id].state = oldState
})
},
addReport (report) {
this.reports[report.id] = report
}
}
})