diff --git a/src/components/announcements_page/announcements_page.js b/src/components/announcements_page/announcements_page.js
index a2a218fd..ec038361 100644
--- a/src/components/announcements_page/announcements_page.js
+++ b/src/components/announcements_page/announcements_page.js
@@ -1,16 +1,44 @@
+import { mapState } from 'vuex'
import Announcement from '../announcement/announcement.vue'
const AnnouncementsPage = {
components: {
Announcement
},
+ data () {
+ return {
+ newAnnouncement: {
+ content: ''
+ },
+ posting: false,
+ error: undefined
+ }
+ },
mounted () {
this.$store.dispatch('fetchAnnouncements')
},
computed: {
+ ...mapState({
+ currentUser: state => state.users.currentUser
+ }),
announcements () {
return this.$store.state.announcements.announcements
}
+ },
+ methods: {
+ postAnnouncement () {
+ this.posting = true
+ this.$store.dispatch('postAnnouncement', this.newAnnouncement)
+ .catch(error => {
+ this.error = error.error
+ })
+ .finally(() => {
+ this.posting = false
+ })
+ },
+ clearError () {
+ this.error = undefined
+ }
}
}
diff --git a/src/components/announcements_page/announcements_page.vue b/src/components/announcements_page/announcements_page.vue
index 16b2f955..1b3bd578 100644
--- a/src/components/announcements_page/announcements_page.vue
+++ b/src/components/announcements_page/announcements_page.vue
@@ -6,6 +6,51 @@
+
+
+
+
{{ $t('announcements.post_form_header') }}
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/announcements.js b/src/modules/announcements.js
index 2ab2600c..76cea154 100644
--- a/src/modules/announcements.js
+++ b/src/modules/announcements.js
@@ -53,6 +53,12 @@ const announcements = {
const interval = store.state.fetchAnnouncementsTimer
store.commit('setFetchAnnouncementsTimer', undefined)
clearInterval(interval)
+ },
+ postAnnouncement (store, { content, startsAt, endsAt, allDay }) {
+ return store.rootState.api.backendInteractor.postAnnouncement({ content, startsAt, endsAt, allDay })
+ .then(() => {
+ return store.dispatch('fetchAnnouncements')
+ })
}
}
}
diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js
index 10d43632..5206602d 100644
--- a/src/services/api/api.service.js
+++ b/src/services/api/api.service.js
@@ -102,6 +102,7 @@ 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_ADMIN_REPORTS = '/api/pleroma/admin/reports'
const PLEROMA_BACKUP_URL = '/api/v1/pleroma/backups'
+const PLEROMA_POST_ANNOUNCEMENT_URL = '/api/v1/pleroma/admin/announcements'
const oldfetch = window.fetch
@@ -1375,6 +1376,29 @@ const dismissAnnouncement = ({ id, credentials }) => {
})
}
+const postAnnouncement = ({ credentials, content, startsAt, endsAt, allDay }) => {
+ const payload = { content }
+
+ if (typeof startsAt !== 'undefined') {
+ payload['starts_at'] = startsAt
+ }
+
+ if (typeof endsAt !== 'undefined') {
+ payload['ends_at'] = endsAt
+ }
+
+ if (typeof allDay !== 'undefined') {
+ payload['all_day'] = allDay
+ }
+
+ return promisedRequest({
+ url: PLEROMA_POST_ANNOUNCEMENT_URL,
+ credentials,
+ method: 'POST',
+ payload
+ })
+}
+
export const getMastodonSocketURI = ({ credentials, stream, args = {} }) => {
return Object.entries({
...(credentials
@@ -1703,7 +1727,8 @@ const apiService = {
setReportState,
fetchUserInLists,
fetchAnnouncements,
- dismissAnnouncement
+ dismissAnnouncement,
+ postAnnouncement
}
export default apiService