66 lines
1.5 KiB
JavaScript
66 lines
1.5 KiB
JavaScript
import { mapState } from 'vuex'
|
|
import AnnouncementEditor from '../announcement_editor/announcement_editor.vue'
|
|
import localeService from '../../services/locale/locale.service.js'
|
|
|
|
const Announcement = {
|
|
components: {
|
|
AnnouncementEditor
|
|
},
|
|
data () {
|
|
return {
|
|
editing: false,
|
|
newAnnouncement: {
|
|
content: '',
|
|
startsAt: undefined,
|
|
endsAt: undefined
|
|
}
|
|
}
|
|
},
|
|
props: {
|
|
announcement: Object
|
|
},
|
|
computed: {
|
|
...mapState({
|
|
currentUser: state => state.users.currentUser
|
|
}),
|
|
content () {
|
|
return this.announcement.content
|
|
},
|
|
isRead () {
|
|
return this.announcement.read
|
|
},
|
|
startsAt () {
|
|
const time = this.announcement['starts_at']
|
|
if (!time) {
|
|
return
|
|
}
|
|
|
|
return this.formatTimeOrDate(time, localeService.internalToBrowserLocale(this.$i18n.locale))
|
|
},
|
|
endsAt () {
|
|
const time = this.announcement['ends_at']
|
|
if (!time) {
|
|
return
|
|
}
|
|
|
|
return this.formatTimeOrDate(time, localeService.internalToBrowserLocale(this.$i18n.locale))
|
|
}
|
|
},
|
|
methods: {
|
|
markAsRead () {
|
|
if (!this.isRead) {
|
|
return this.$store.dispatch('markAnnouncementAsRead', this.announcement.id)
|
|
}
|
|
},
|
|
deleteAnnouncement () {
|
|
return this.$store.dispatch('deleteAnnouncement', this.announcement.id)
|
|
},
|
|
formatTimeOrDate (time, locale) {
|
|
const d = new Date(time)
|
|
return this.announcement['all_day'] ? d.toLocaleDateString(locale) : d.toLocaleString(locale)
|
|
}
|
|
}
|
|
}
|
|
|
|
export default Announcement
|