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

109 lines
2.9 KiB
JavaScript
Raw Normal View History

2022-03-17 15:07:04 -04:00
import { mapState } from 'vuex'
2022-03-17 16:51:32 -04:00
import AnnouncementEditor from '../announcement_editor/announcement_editor.vue'
import RichContent from '../rich_content/rich_content.jsx'
2022-03-17 16:51:32 -04:00
import localeService from '../../services/locale/locale.service.js'
2025-02-03 13:02:14 +02:00
import { useAnnouncementsStore } from 'src/stores/announcements'
const Announcement = {
2022-03-17 16:51:32 -04:00
components: {
AnnouncementEditor,
RichContent
2022-03-17 16:51:32 -04:00
},
data () {
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,
allDay: undefined
},
editError: ''
2022-03-17 16:51:32 -04:00
}
},
props: {
announcement: Object
},
computed: {
2022-03-17 15:07:04 -04:00
...mapState({
currentUser: state => state.users.currentUser
}),
canEditAnnouncement () {
return this.currentUser && this.currentUser.privileges.includes('announcements_manage_announcements')
},
content () {
return this.announcement.content
2022-03-17 14:01:45 -04:00
},
isRead () {
return this.announcement.read
2022-03-17 16:51:32 -04:00
},
2022-07-14 18:42:28 -04: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
}
return this.formatTimeOrDate(time, localeService.internalToBrowserLocale(this.$i18n.locale))
},
2022-03-17 16:51:32 -04: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
}
return this.formatTimeOrDate(time, localeService.internalToBrowserLocale(this.$i18n.locale))
},
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
}
return this.formatTimeOrDate(time, localeService.internalToBrowserLocale(this.$i18n.locale))
},
inactive () {
return this.announcement.inactive
2022-03-17 14:01:45 -04:00
}
},
methods: {
markAsRead () {
if (!this.isRead) {
2023-04-06 16:32:21 -06:00
return useAnnouncementsStore().markAnnouncementAsRead(this.announcement.id)
2022-03-17 14:01:45 -04:00
}
2022-03-17 15:07:04 -04:00
},
deleteAnnouncement () {
2023-04-06 16:32:21 -06:00
return useAnnouncementsStore().deleteAnnouncement(this.announcement.id)
2022-03-17 16:51:32 -04:00
},
formatTimeOrDate (time, locale) {
const d = new Date(time)
2022-08-01 11:08:09 -04:00
return this.announcement.all_day ? d.toLocaleDateString(locale) : d.toLocaleString(locale)
2022-03-17 17:11:53 -04: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
},
submitEdit () {
2023-04-06 16:32:21 -06:00
useAnnouncementsStore().editAnnouncement({
2022-03-17 17:11:53 -04:00
id: this.announcement.id,
...this.editedAnnouncement
2022-03-17 17:11:53 -04:00
})
.then(() => {
this.editing = false
})
.catch(error => {
this.editError = error.error
})
},
cancelEdit () {
this.editing = false
},
clearError () {
this.editError = undefined
}
}
}
export default Announcement