forked from mirrors/akkoma-fe
implements part of #178, other parts will come later Co-authored-by: Sol Fisher Romanoff <sol@solfisher.com> Reviewed-on: https://akkoma.dev/AkkomaGang/pleroma-fe/pulls/186 Co-authored-by: sfr <sol@solfisher.com> Co-committed-by: sfr <sol@solfisher.com>
92 lines
3 KiB
JavaScript
92 lines
3 KiB
JavaScript
import { filter, find, forEach, remove } from 'lodash'
|
|
|
|
const getReport = (state, id) => find(state.reports, { id })
|
|
const updateReport = (state, { report, param, value }) => {
|
|
getReport(state, report.id)[param] = value
|
|
}
|
|
|
|
const reports = {
|
|
state: {
|
|
userId: null,
|
|
statuses: [],
|
|
preTickedIds: [],
|
|
modalActivated: false,
|
|
reports: []
|
|
},
|
|
mutations: {
|
|
openUserReportingModal (state, { userId, statuses, preTickedIds }) {
|
|
state.userId = userId
|
|
state.statuses = statuses
|
|
state.preTickedIds = preTickedIds
|
|
state.modalActivated = true
|
|
},
|
|
closeUserReportingModal (state) {
|
|
state.modalActivated = false
|
|
},
|
|
setReport (state, { report }) {
|
|
let existing = getReport(state, report.id)
|
|
if (existing) {
|
|
existing = report
|
|
} else {
|
|
state.reports.push(report)
|
|
}
|
|
},
|
|
updateReportStates (state, { reports }) {
|
|
forEach(reports, (report) => {
|
|
updateReport(state, { report, param: 'state', value: report.state })
|
|
})
|
|
},
|
|
addNoteToReport (state, { id, note, user }) {
|
|
// akkoma doesn't return the note from this API endpoint, and there's no
|
|
// good way to get it. the note data is spoofed in the frontend until
|
|
// reload.
|
|
// definitely worth adding this to the backend at some point
|
|
const report = getReport(state, id)
|
|
const date = new Date()
|
|
|
|
report.notes.push({
|
|
content: note,
|
|
user,
|
|
created_at: date.toISOString(),
|
|
id: date.getTime()
|
|
})
|
|
},
|
|
deleteNoteFromReport (state, { id, note }) {
|
|
const report = getReport(state, id)
|
|
remove(report.notes, { id: note })
|
|
}
|
|
},
|
|
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')
|
|
},
|
|
updateReportStates ({ rootState, commit }, { reports }) {
|
|
commit('updateReportStates', { reports })
|
|
return rootState.api.backendInteractor.updateReportStates({ reports })
|
|
},
|
|
getReport ({ rootState, commit }, { id }) {
|
|
return rootState.api.backendInteractor.getReport({ id })
|
|
.then(report => commit('setReport', { report }))
|
|
},
|
|
addNoteToReport ({ rootState, commit }, { id, note }) {
|
|
commit('addNoteToReport', { id, note, user: rootState.users.currentUser })
|
|
return rootState.api.backendInteractor.addNoteToReport({ id, note })
|
|
},
|
|
deleteNoteFromReport ({ rootState, commit }, { id, note }) {
|
|
commit('deleteNoteFromReport', { id, note })
|
|
return rootState.api.backendInteractor.deleteNoteFromReport({ id, note })
|
|
}
|
|
}
|
|
}
|
|
|
|
export default reports
|