pleroma-fe/src/components/announcement/announcement.js

128 lines
3 KiB
JavaScript
Raw Normal View History

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'
import RichContent from '../rich_content/rich_content.jsx'
const Announcement = {
2022-03-17 16:51:32 -04:00
components: {
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,
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
}
},
props: {
2026-01-06 16:22:52 +02:00
announcement: Object,
},
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',
)
)
},
2026-01-06 16:22:52 +02:00
content() {
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),
)
},
2026-01-06 16:22:52 +02:00
inactive() {
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
},
},
}
export default Announcement