From 0daa23eaf7ee6241e900958f9bba605ebdf08cba Mon Sep 17 00:00:00 2001 From: Tusooa Zhu <tusooa@kazv.moe> Date: Thu, 17 Mar 2022 15:07:04 -0400 Subject: [PATCH] Implement deleting announcement --- src/components/announcement/announcement.js | 7 +++++++ src/components/announcement/announcement.vue | 18 ++++++++++++++++++ src/modules/announcements.js | 6 ++++++ src/services/api/api.service.js | 12 +++++++++++- 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/components/announcement/announcement.js b/src/components/announcement/announcement.js index 9e043e48..b1f5ee77 100644 --- a/src/components/announcement/announcement.js +++ b/src/components/announcement/announcement.js @@ -1,9 +1,13 @@ +import { mapState } from 'vuex' const Announcement = { props: { announcement: Object }, computed: { + ...mapState({ + currentUser: state => state.users.currentUser + }), content () { return this.announcement.content }, @@ -16,6 +20,9 @@ const Announcement = { if (!this.isRead) { return this.$store.dispatch('markAnnouncementAsRead', this.announcement.id) } + }, + deleteAnnouncement () { + return this.$store.dispatch('deleteAnnouncement', this.announcement.id) } } } diff --git a/src/components/announcement/announcement.vue b/src/components/announcement/announcement.vue index d8591468..d6f35b9f 100644 --- a/src/components/announcement/announcement.vue +++ b/src/components/announcement/announcement.vue @@ -12,12 +12,20 @@ </div> <div class="footer"> <button + v-if="currentUser" class="btn button-default" :class="{ toggled: isRead }" @click="markAsRead" > {{ $t('announcements.mark_as_read_action') }} </button> + <button + v-if="currentUser && currentUser.role === 'admin'" + class="btn button-default" + @click="deleteAnnouncement" + > + {{ $t('announcements.delete_action') }} + </button> </div> </div> </template> @@ -37,5 +45,15 @@ .heading, .body { margin-bottom: var(--status-margin, $status-margin); } + + .footer { + display: flex; + flex-direction: row; + justify-content: space-around; + + .btn { + min-width: 10em; + } + } } </style> diff --git a/src/modules/announcements.js b/src/modules/announcements.js index 76cea154..ddc51c33 100644 --- a/src/modules/announcements.js +++ b/src/modules/announcements.js @@ -59,6 +59,12 @@ const announcements = { .then(() => { return store.dispatch('fetchAnnouncements') }) + }, + deleteAnnouncement (store, id) { + return store.rootState.api.backendInteractor.deleteAnnouncement({ id }) + .then(() => { + return store.dispatch('fetchAnnouncements') + }) } } } diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index 497a9d9f..b6b44872 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -90,6 +90,7 @@ const PLEROMA_CHAT_MESSAGES_URL = id => `/api/v1/pleroma/chats/${id}/messages` const PLEROMA_CHAT_READ_URL = id => `/api/v1/pleroma/chats/${id}/read` const PLEROMA_DELETE_CHAT_MESSAGE_URL = (chatId, messageId) => `/api/v1/pleroma/chats/${chatId}/messages/${messageId}` const PLEROMA_POST_ANNOUNCEMENT_URL = '/api/v1/pleroma/admin/announcements' +const PLEROMA_DELETE_ANNOUNCEMENT_URL = id => `/api/v1/pleroma/admin/announcements/${id}` const oldfetch = window.fetch @@ -1119,6 +1120,14 @@ const postAnnouncement = ({ credentials, content, startsAt, endsAt, allDay }) => }) } +const deleteAnnouncement = ({ id, credentials }) => { + return promisedRequest({ + url: PLEROMA_DELETE_ANNOUNCEMENT_URL(id), + credentials, + method: 'DELETE' + }) +} + export const getMastodonSocketURI = ({ credentials, stream, args = {} }) => { return Object.entries({ ...(credentials @@ -1392,7 +1401,8 @@ const apiService = { deleteChatMessage, fetchAnnouncements, dismissAnnouncement, - postAnnouncement + postAnnouncement, + deleteAnnouncement } export default apiService