aboutsummaryrefslogtreecommitdiff
path: root/src/components/announcement
diff options
context:
space:
mode:
authorTusooa Zhu <tusooa@kazv.moe>2022-03-17 16:51:32 -0400
committertusooa <tusooa@kazv.moe>2022-11-24 18:27:14 -0500
commit04fbb6d93d6217812dc1b594b65f237bcee692a7 (patch)
treeada2938f4f1311f992265fee4034422186d5d007 /src/components/announcement
parentce84557190a46e2bb9eee202dd09c91d13d95ca6 (diff)
Show announcement dates
Diffstat (limited to 'src/components/announcement')
-rw-r--r--src/components/announcement/announcement.js35
-rw-r--r--src/components/announcement/announcement.vue54
2 files changed, 74 insertions, 15 deletions
diff --git a/src/components/announcement/announcement.js b/src/components/announcement/announcement.js
index b1f5ee77..309eecea 100644
--- a/src/components/announcement/announcement.js
+++ b/src/components/announcement/announcement.js
@@ -1,6 +1,21 @@
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
},
@@ -13,6 +28,22 @@ const Announcement = {
},
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: {
@@ -23,6 +54,10 @@ const Announcement = {
},
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)
}
}
}
diff --git a/src/components/announcement/announcement.vue b/src/components/announcement/announcement.vue
index d6f35b9f..5ddeebf5 100644
--- a/src/components/announcement/announcement.vue
+++ b/src/components/announcement/announcement.vue
@@ -5,27 +5,42 @@
</div>
<div class="body">
<rich-content
+ v-if="!editing"
:html="content"
:emoji="announcement.emojis"
:handle-links="true"
/>
+ <announcement-editor
+ v-else
+ :announcement="newAnnouncement"
+ />
</div>
<div class="footer">
- <button
- v-if="currentUser"
- class="btn button-default"
- :class="{ toggled: isRead }"
- @click="markAsRead"
- >
- {{ $t('announcements.mark_as_read_action') }}
- </button>
- <button
- v-if="currentUser && currentUser.role === 'admin'"
- class="btn button-default"
- @click="deleteAnnouncement"
- >
- {{ $t('announcements.delete_action') }}
- </button>
+ <div class="times">
+ <span v-if="startsAt">
+ {{ $t('announcements.start_time_display', { time: startsAt }) }}
+ </span>
+ <span v-if="endsAt">
+ {{ $t('announcements.end_time_display', { time: endsAt }) }}
+ </span>
+ </div>
+ <div class="actions">
+ <button
+ v-if="currentUser"
+ class="btn button-default"
+ :class="{ toggled: isRead }"
+ @click="markAsRead"
+ >
+ {{ $t('announcements.mark_as_read_action') }}
+ </button>
+ <button
+ v-if="currentUser && currentUser.role === 'admin'"
+ class="btn button-default"
+ @click="deleteAnnouncement"
+ >
+ {{ $t('announcements.delete_action') }}
+ </button>
+ </div>
</div>
</div>
</template>
@@ -48,6 +63,15 @@
.footer {
display: flex;
+ flex-direction: column;
+ .times {
+ display: flex;
+ flex-direction: column;
+ }
+ }
+
+ .footer .actions {
+ display: flex;
flex-direction: row;
justify-content: space-around;