aboutsummaryrefslogtreecommitdiff
path: root/src/components/announcement
diff options
context:
space:
mode:
authorTusooa Zhu <tusooa@kazv.moe>2022-03-17 17:11:53 -0400
committertusooa <tusooa@kazv.moe>2022-11-24 18:27:14 -0500
commit89c49b6fb46e607aee07afd5bc436e8f2f605bfe (patch)
tree264b78477fa6aeaf4776d959dc1f6f39831ef9f5 /src/components/announcement
parent0e51e824a29204bb193e2707d6f65b6caaee719d (diff)
Allow editing announcements
Diffstat (limited to 'src/components/announcement')
-rw-r--r--src/components/announcement/announcement.js31
-rw-r--r--src/components/announcement/announcement.vue50
2 files changed, 77 insertions, 4 deletions
diff --git a/src/components/announcement/announcement.js b/src/components/announcement/announcement.js
index 309eecea..253e2bb2 100644
--- a/src/components/announcement/announcement.js
+++ b/src/components/announcement/announcement.js
@@ -12,8 +12,10 @@ const Announcement = {
newAnnouncement: {
content: '',
startsAt: undefined,
- endsAt: undefined
- }
+ endsAt: undefined,
+ allDay: undefined
+ },
+ editError: ''
}
},
props: {
@@ -58,6 +60,31 @@ const Announcement = {
formatTimeOrDate (time, locale) {
const d = new Date(time)
return this.announcement['all_day'] ? d.toLocaleDateString(locale) : d.toLocaleString(locale)
+ },
+ enterEditMode () {
+ this.newAnnouncement.content = this.announcement.pleroma['raw_content']
+ this.newAnnouncement.startsAt = this.announcement['starts_at']
+ this.newAnnouncement.endsAt = this.announcement['ends_at']
+ this.newAnnouncement.allDay = this.announcement['all_day']
+ this.editing = true
+ },
+ submitEdit () {
+ this.$store.dispatch('editAnnouncement', {
+ id: this.announcement.id,
+ ...this.newAnnouncement
+ })
+ .then(() => {
+ this.editing = false
+ })
+ .catch(error => {
+ this.editError = error.error
+ })
+ },
+ cancelEdit () {
+ this.editing = false
+ },
+ clearError () {
+ this.editError = undefined
}
}
}
diff --git a/src/components/announcement/announcement.vue b/src/components/announcement/announcement.vue
index 5ddeebf5..1e4edcca 100644
--- a/src/components/announcement/announcement.vue
+++ b/src/components/announcement/announcement.vue
@@ -16,7 +16,10 @@
/>
</div>
<div class="footer">
- <div class="times">
+ <div
+ v-if="!editing"
+ class="times"
+ >
<span v-if="startsAt">
{{ $t('announcements.start_time_display', { time: startsAt }) }}
</span>
@@ -24,7 +27,10 @@
{{ $t('announcements.end_time_display', { time: endsAt }) }}
</span>
</div>
- <div class="actions">
+ <div
+ v-if="!editing"
+ class="actions"
+ >
<button
v-if="currentUser"
class="btn button-default"
@@ -36,11 +42,51 @@
<button
v-if="currentUser && currentUser.role === 'admin'"
class="btn button-default"
+ @click="enterEditMode"
+ >
+ {{ $t('announcements.edit_action') }}
+ </button>
+ <button
+ v-if="currentUser && currentUser.role === 'admin'"
+ class="btn button-default"
@click="deleteAnnouncement"
>
{{ $t('announcements.delete_action') }}
</button>
</div>
+ <div
+ v-else
+ class="actions"
+ >
+ <button
+ class="btn button-default"
+ @click="submitEdit"
+ >
+ {{ $t('announcements.submit_edit_action') }}
+ </button>
+ <button
+ class="btn button-default"
+ @click="cancelEdit"
+ >
+ {{ $t('announcements.cancel_edit_action') }}
+ </button>
+ <div
+ v-if="editing && editError"
+ class="alert error"
+ >
+ {{ $t('announcements.edit_error', { error }) }}
+ <button
+ class="button-unstyled"
+ @click="clearError"
+ >
+ <FAIcon
+ class="fa-scale-110 fa-old-padding"
+ icon="times"
+ :title="$t('announcements.close_error')"
+ />
+ </button>
+ </div>
+ </div>
</div>
</div>
</template>