import { cloneDeep } from 'lodash' import ConfirmModal from 'src/components/confirm_modal/confirm_modal.vue' import EditStatusForm from 'src/components/edit_status_form/edit_status_form.vue' import Gallery from 'src/components/gallery/gallery.vue' import PostStatusForm from 'src/components/post_status_form/post_status_form.vue' import StatusContent from 'src/components/status_content/status_content.vue' import { useSyncConfigStore } from 'src/stores/sync_config.js' 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 useSyncConfigStore().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