draft.js (2529B)
- import PostStatusForm from 'src/components/post_status_form/post_status_form.vue'
- import EditStatusForm from 'src/components/edit_status_form/edit_status_form.vue'
- import ConfirmModal from 'src/components/confirm_modal/confirm_modal.vue'
- import StatusContent from 'src/components/status_content/status_content.vue'
- import Gallery from 'src/components/gallery/gallery.vue'
- import { cloneDeep } from 'lodash'
- import { library } from '@fortawesome/fontawesome-svg-core'
- import {
- faPollH
- } from '@fortawesome/free-solid-svg-icons'
- library.add(
- faPollH
- )
- const Draft = {
- components: {
- PostStatusForm,
- EditStatusForm,
- ConfirmModal,
- StatusContent,
- Gallery
- },
- props: {
- draft: {
- type: Object,
- required: true
- }
- },
- data () {
- return {
- referenceDraft: cloneDeep(this.draft),
- editing: false,
- showingConfirmDialog: false
- }
- },
- computed: {
- relAttrs () {
- if (this.draft.type === 'edit') {
- return { statusId: this.draft.refId }
- } else if (this.draft.type === 'reply') {
- return { replyTo: this.draft.refId }
- } else {
- return {}
- }
- },
- safeToSave () {
- return this.draft.status ||
- this.draft.files?.length ||
- this.draft.hasPoll
- },
- postStatusFormProps () {
- return {
- draftId: this.draft.id,
- ...this.relAttrs
- }
- },
- refStatus () {
- return this.draft.refId ? this.$store.state.statuses.allStatusesObject[this.draft.refId] : undefined
- },
- localCollapseSubjectDefault () {
- return this.$store.getters.mergedConfig.collapseMessageWithSubject
- },
- nsfwClickthrough () {
- if (!this.draft.nsfw) {
- return false
- }
- if (this.draft.summary && this.localCollapseSubjectDefault) {
- return false
- }
- return true
- }
- },
- watch: {
- editing (newVal) {
- if (newVal) return
- if (this.safeToSave) {
- this.$store.dispatch('addOrSaveDraft', { draft: this.draft })
- } else {
- this.$store.dispatch('addOrSaveDraft', { draft: this.referenceDraft })
- }
- }
- },
- methods: {
- toggleEditing () {
- this.editing = !this.editing
- },
- abandon () {
- this.showingConfirmDialog = true
- },
- doAbandon () {
- this.$store.dispatch('abandonDraft', { id: this.draft.id })
- .then(() => {
- this.hideConfirmDialog()
- })
- },
- hideConfirmDialog () {
- this.showingConfirmDialog = false
- }
- }
- }
- export default Draft