Add reports management (#186)
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>
This commit is contained in:
parent
23b0b01829
commit
15bac1e401
30 changed files with 1082 additions and 32 deletions
|
@ -163,6 +163,7 @@ const api = {
|
|||
dispatch('startFetchingTimeline', { timeline: 'friends' })
|
||||
dispatch('startFetchingNotifications')
|
||||
dispatch('startFetchingAnnouncements')
|
||||
dispatch('startFetchingReports')
|
||||
dispatch('pushGlobalNotice', {
|
||||
level: 'error',
|
||||
messageKey: 'timeline.socket_broke',
|
||||
|
@ -280,6 +281,19 @@ const api = {
|
|||
if (!fetcher) return
|
||||
store.commit('removeFetcher', { fetcherName: 'announcements', fetcher })
|
||||
},
|
||||
|
||||
// Reports
|
||||
startFetchingReports (store) {
|
||||
if (store.state.fetchers['reports']) return
|
||||
const fetcher = store.state.backendInteractor.startFetchingReports({ store })
|
||||
store.commit('addFetcher', { fetcherName: 'reports', fetcher })
|
||||
},
|
||||
stopFetchingReports (store) {
|
||||
const fetcher = store.state.fetchers.reports
|
||||
if (!fetcher) return
|
||||
store.commit('removeFetcher', { fetcherName: 'reports', fetcher })
|
||||
},
|
||||
|
||||
getSupportedTranslationlanguages (store) {
|
||||
store.state.backendInteractor.getSupportedTranslationlanguages({ store })
|
||||
.then((data) => {
|
||||
|
|
|
@ -2,6 +2,9 @@ const defaultState = {
|
|||
settingsModalState: 'hidden',
|
||||
settingsModalLoaded: false,
|
||||
settingsModalTargetTab: null,
|
||||
modModalState: 'hidden',
|
||||
modModalLoaded: false,
|
||||
modModalTargetTab: null,
|
||||
settings: {
|
||||
currentSaveStateNotice: null,
|
||||
noticeClearTimeout: null,
|
||||
|
@ -63,6 +66,30 @@ const interfaceMod = {
|
|||
setSettingsModalTargetTab (state, value) {
|
||||
state.settingsModalTargetTab = value
|
||||
},
|
||||
closeModModal (state) {
|
||||
state.modModalState = 'hidden'
|
||||
},
|
||||
togglePeekModModal (state) {
|
||||
switch (state.modModalState) {
|
||||
case 'minimized':
|
||||
state.modModalState = 'visible'
|
||||
return
|
||||
case 'visible':
|
||||
state.modModalState = 'minimized'
|
||||
return
|
||||
default:
|
||||
throw new Error('Illegal minimization state of mod modal')
|
||||
}
|
||||
},
|
||||
openModModal (state) {
|
||||
state.modModalState = 'visible'
|
||||
if (!state.modModalLoaded) {
|
||||
state.modModalLoaded = true
|
||||
}
|
||||
},
|
||||
setModModalTargetTab (state, value) {
|
||||
state.modModalTargetTab = value
|
||||
},
|
||||
pushGlobalNotice (state, notice) {
|
||||
state.globalNotices.push(notice)
|
||||
},
|
||||
|
@ -105,6 +132,18 @@ const interfaceMod = {
|
|||
commit('setSettingsModalTargetTab', value)
|
||||
commit('openSettingsModal')
|
||||
},
|
||||
closeModModal ({ commit }) {
|
||||
commit('closeModModal')
|
||||
},
|
||||
openModModal ({ commit }) {
|
||||
commit('openModModal')
|
||||
},
|
||||
togglePeekModModal ({ commit }) {
|
||||
commit('togglePeekModModal')
|
||||
},
|
||||
clearModModalTargetTab ({ commit }) {
|
||||
commit('setModModalTargetTab', null)
|
||||
},
|
||||
pushGlobalNotice (
|
||||
{ commit, dispatch, state },
|
||||
{
|
||||
|
|
|
@ -1,11 +1,17 @@
|
|||
import filter from 'lodash/filter'
|
||||
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
|
||||
modalActivated: false,
|
||||
reports: []
|
||||
},
|
||||
mutations: {
|
||||
openUserReportingModal (state, { userId, statuses, preTickedIds }) {
|
||||
|
@ -16,6 +22,38 @@ const reports = {
|
|||
},
|
||||
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: {
|
||||
|
@ -31,6 +69,22 @@ const reports = {
|
|||
},
|
||||
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 })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue