58 lines
1.7 KiB
JavaScript
58 lines
1.7 KiB
JavaScript
import filter from 'lodash/filter'
|
|
import { defineStore } from 'pinia'
|
|
|
|
import { useInterfaceStore } from 'src/stores/interface.js'
|
|
|
|
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 = this.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
|
|
},
|
|
},
|
|
})
|