2026-01-06 16:23:17 +02:00
|
|
|
import { useAnnouncementsStore } from 'src/stores/announcements'
|
2022-03-17 15:07:04 -04:00
|
|
|
import { mapState } from 'vuex'
|
2026-01-06 16:23:17 +02:00
|
|
|
import localeService from '../../services/locale/locale.service.js'
|
2022-03-17 16:51:32 -04:00
|
|
|
import AnnouncementEditor from '../announcement_editor/announcement_editor.vue'
|
2022-05-07 12:37:13 -04:00
|
|
|
import RichContent from '../rich_content/rich_content.jsx'
|
2022-03-17 12:59:10 -04:00
|
|
|
|
|
|
|
|
const Announcement = {
|
2022-03-17 16:51:32 -04:00
|
|
|
components: {
|
2022-05-07 12:37:13 -04:00
|
|
|
AnnouncementEditor,
|
2026-01-06 16:22:52 +02:00
|
|
|
RichContent,
|
2022-03-17 16:51:32 -04:00
|
|
|
},
|
2026-01-06 16:22:52 +02:00
|
|
|
data() {
|
2022-03-17 16:51:32 -04:00
|
|
|
return {
|
|
|
|
|
editing: false,
|
2022-03-20 13:49:26 -04:00
|
|
|
editedAnnouncement: {
|
2022-03-17 16:51:32 -04:00
|
|
|
content: '',
|
|
|
|
|
startsAt: undefined,
|
2022-03-17 17:11:53 -04:00
|
|
|
endsAt: undefined,
|
2026-01-06 16:22:52 +02:00
|
|
|
allDay: undefined,
|
2022-03-17 17:11:53 -04:00
|
|
|
},
|
2026-01-06 16:22:52 +02:00
|
|
|
editError: '',
|
2022-03-17 16:51:32 -04:00
|
|
|
}
|
|
|
|
|
},
|
2022-03-17 12:59:10 -04:00
|
|
|
props: {
|
2026-01-06 16:22:52 +02:00
|
|
|
announcement: Object,
|
2022-03-17 12:59:10 -04:00
|
|
|
},
|
|
|
|
|
computed: {
|
2022-03-17 15:07:04 -04:00
|
|
|
...mapState({
|
2026-01-06 16:22:52 +02:00
|
|
|
currentUser: (state) => state.users.currentUser,
|
2022-03-17 15:07:04 -04:00
|
|
|
}),
|
2026-01-06 16:22:52 +02:00
|
|
|
canEditAnnouncement() {
|
|
|
|
|
return (
|
|
|
|
|
this.currentUser &&
|
|
|
|
|
this.currentUser.privileges.includes(
|
|
|
|
|
'announcements_manage_announcements',
|
|
|
|
|
)
|
|
|
|
|
)
|
2022-12-24 12:17:09 -05:00
|
|
|
},
|
2026-01-06 16:22:52 +02:00
|
|
|
content() {
|
2022-03-17 12:59:10 -04:00
|
|
|
return this.announcement.content
|
2022-03-17 14:01:45 -04:00
|
|
|
},
|
2026-01-06 16:22:52 +02:00
|
|
|
isRead() {
|
2022-03-17 14:01:45 -04:00
|
|
|
return this.announcement.read
|
2022-03-17 16:51:32 -04:00
|
|
|
},
|
2026-01-06 16:22:52 +02:00
|
|
|
publishedAt() {
|
2022-08-09 18:52:17 -04:00
|
|
|
const time = this.announcement.published_at
|
2022-07-14 18:42:28 -04:00
|
|
|
if (!time) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-06 16:22:52 +02:00
|
|
|
return this.formatTimeOrDate(
|
|
|
|
|
time,
|
|
|
|
|
localeService.internalToBrowserLocale(this.$i18n.locale),
|
|
|
|
|
)
|
2022-07-14 18:42:28 -04:00
|
|
|
},
|
2026-01-06 16:22:52 +02:00
|
|
|
startsAt() {
|
2022-08-01 11:08:09 -04:00
|
|
|
const time = this.announcement.starts_at
|
2022-03-17 16:51:32 -04:00
|
|
|
if (!time) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-06 16:22:52 +02:00
|
|
|
return this.formatTimeOrDate(
|
|
|
|
|
time,
|
|
|
|
|
localeService.internalToBrowserLocale(this.$i18n.locale),
|
|
|
|
|
)
|
2022-03-17 16:51:32 -04:00
|
|
|
},
|
2026-01-06 16:22:52 +02:00
|
|
|
endsAt() {
|
2022-08-01 11:08:09 -04:00
|
|
|
const time = this.announcement.ends_at
|
2022-03-17 16:51:32 -04:00
|
|
|
if (!time) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-06 16:22:52 +02:00
|
|
|
return this.formatTimeOrDate(
|
|
|
|
|
time,
|
|
|
|
|
localeService.internalToBrowserLocale(this.$i18n.locale),
|
|
|
|
|
)
|
2022-03-17 17:32:16 -04:00
|
|
|
},
|
2026-01-06 16:22:52 +02:00
|
|
|
inactive() {
|
2022-03-17 17:32:16 -04:00
|
|
|
return this.announcement.inactive
|
2026-01-06 16:22:52 +02:00
|
|
|
},
|
2022-03-17 14:01:45 -04:00
|
|
|
},
|
|
|
|
|
methods: {
|
2026-01-06 16:22:52 +02:00
|
|
|
markAsRead() {
|
2022-03-17 14:01:45 -04:00
|
|
|
if (!this.isRead) {
|
2026-01-06 16:22:52 +02:00
|
|
|
return useAnnouncementsStore().markAnnouncementAsRead(
|
|
|
|
|
this.announcement.id,
|
|
|
|
|
)
|
2022-03-17 14:01:45 -04:00
|
|
|
}
|
2022-03-17 15:07:04 -04:00
|
|
|
},
|
2026-01-06 16:22:52 +02:00
|
|
|
deleteAnnouncement() {
|
2023-04-06 16:32:21 -06:00
|
|
|
return useAnnouncementsStore().deleteAnnouncement(this.announcement.id)
|
2022-03-17 16:51:32 -04:00
|
|
|
},
|
2026-01-06 16:22:52 +02:00
|
|
|
formatTimeOrDate(time, locale) {
|
2022-03-17 16:51:32 -04:00
|
|
|
const d = new Date(time)
|
2026-01-06 16:22:52 +02:00
|
|
|
return this.announcement.all_day
|
|
|
|
|
? d.toLocaleDateString(locale)
|
|
|
|
|
: d.toLocaleString(locale)
|
2022-03-17 17:11:53 -04:00
|
|
|
},
|
2026-01-06 16:22:52 +02:00
|
|
|
enterEditMode() {
|
2022-08-01 11:08:09 -04:00
|
|
|
this.editedAnnouncement.content = this.announcement.pleroma.raw_content
|
|
|
|
|
this.editedAnnouncement.startsAt = this.announcement.starts_at
|
|
|
|
|
this.editedAnnouncement.endsAt = this.announcement.ends_at
|
|
|
|
|
this.editedAnnouncement.allDay = this.announcement.all_day
|
2022-03-17 17:11:53 -04:00
|
|
|
this.editing = true
|
|
|
|
|
},
|
2026-01-06 16:22:52 +02:00
|
|
|
submitEdit() {
|
|
|
|
|
useAnnouncementsStore()
|
|
|
|
|
.editAnnouncement({
|
|
|
|
|
id: this.announcement.id,
|
|
|
|
|
...this.editedAnnouncement,
|
|
|
|
|
})
|
2022-03-17 17:11:53 -04:00
|
|
|
.then(() => {
|
|
|
|
|
this.editing = false
|
|
|
|
|
})
|
2026-01-06 16:22:52 +02:00
|
|
|
.catch((error) => {
|
2022-03-17 17:11:53 -04:00
|
|
|
this.editError = error.error
|
|
|
|
|
})
|
|
|
|
|
},
|
2026-01-06 16:22:52 +02:00
|
|
|
cancelEdit() {
|
2022-03-17 17:11:53 -04:00
|
|
|
this.editing = false
|
|
|
|
|
},
|
2026-01-06 16:22:52 +02:00
|
|
|
clearError() {
|
2022-03-17 17:11:53 -04:00
|
|
|
this.editError = undefined
|
2026-01-06 16:22:52 +02:00
|
|
|
},
|
|
|
|
|
},
|
2022-03-17 12:59:10 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default Announcement
|