import { filter } from 'lodash' import { defineStore } from 'pinia' import { useInterfaceStore } from 'src/stores/interface.js' import { useOAuthStore } from 'src/stores/oauth.js' import { useStatusesStore } from 'src/stores/statuses.js' import { setReportState } from 'src/api/admin.js' export const useReportsStore = defineStore('reports', { state: () => ({ reportModal: { userId: null, statuses: [], preTickedIds: [], activated: false, }, reports: {}, }), actions: { openUserReportingModal({ userId, statusIds = [] }) { const preTickedStatuses = statusIds.map((id) => useStatusesStore().allStatuses.get(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 setReportState({ id, state, credentials: useOAuthStore().token, }).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 }, }, })