Add delete & redraft button to posts
ci/woodpecker/pr/woodpecker Pipeline was successful Details

This commit is contained in:
Sol Fisher Romanoff 2022-09-25 20:50:03 +03:00
parent 468eb12573
commit ca646822f6
Signed by untrusted user who does not match committer: nbsp
GPG Key ID: 9D3F2B64F2341B62
7 changed files with 9196 additions and 8707 deletions

View File

@ -20,7 +20,7 @@
"@chenfengyuan/vue-qrcode": "2.0.0", "@chenfengyuan/vue-qrcode": "2.0.0",
"@fortawesome/fontawesome-svg-core": "1.3.0", "@fortawesome/fontawesome-svg-core": "1.3.0",
"@fortawesome/free-regular-svg-icons": "^6.1.2", "@fortawesome/free-regular-svg-icons": "^6.1.2",
"@fortawesome/free-solid-svg-icons": "5.15.4", "@fortawesome/free-solid-svg-icons": "^6.2.0",
"@fortawesome/vue-fontawesome": "3.0.1", "@fortawesome/vue-fontawesome": "3.0.1",
"@kazvmoe-infra/pinch-zoom-element": "1.2.0", "@kazvmoe-infra/pinch-zoom-element": "1.2.0",
"@vuelidate/core": "2.0.0-alpha.42", "@vuelidate/core": "2.0.0-alpha.42",

View File

@ -8,7 +8,8 @@ import {
faThumbtack, faThumbtack,
faShareAlt, faShareAlt,
faExternalLinkAlt, faExternalLinkAlt,
faHistory faHistory,
faFilePen
} from '@fortawesome/free-solid-svg-icons' } from '@fortawesome/free-solid-svg-icons'
import { import {
faBookmark as faBookmarkReg, faBookmark as faBookmarkReg,
@ -24,7 +25,8 @@ library.add(
faShareAlt, faShareAlt,
faExternalLinkAlt, faExternalLinkAlt,
faFlag, faFlag,
faHistory faHistory,
faFilePen
) )
const ExtraButtons = { const ExtraButtons = {
@ -36,7 +38,8 @@ const ExtraButtons = {
data () { data () {
return { return {
expanded: false, expanded: false,
showingDeleteDialog: false showingDeleteDialog: false,
showingRedraftDialog: false
} }
}, },
methods: { methods: {
@ -122,6 +125,34 @@ const ExtraButtons = {
const stripFieldsList = ['attachments', 'created_at', 'emojis', 'text', 'raw_html', 'nsfw', 'poll', 'summary', 'summary_raw_html'] const stripFieldsList = ['attachments', 'created_at', 'emojis', 'text', 'raw_html', 'nsfw', 'poll', 'summary', 'summary_raw_html']
stripFieldsList.forEach(p => delete originalStatus[p]) stripFieldsList.forEach(p => delete originalStatus[p])
this.$store.dispatch('openStatusHistoryModal', originalStatus) this.$store.dispatch('openStatusHistoryModal', originalStatus)
},
redraftStatus () {
if (this.shouldConfirmDelete) {
this.showRedraftStatusConfirmDialog()
} else {
this.doRedraftStatus()
}
},
doRedraftStatus () {
this.$store.dispatch('fetchStatusSource', { id: this.status.id })
.then(data => this.$store.dispatch('openPostStatusModal', {
isRedraft: true,
statusId: this.status.id,
subject: data.spoiler_text,
statusText: data.text,
statusIsSensitive: this.status.nsfw,
statusPoll: this.status.poll,
statusFiles: [...this.status.attachments],
statusScope: this.status.visibility,
statusContentType: data.content_type
}))
this.doDeleteStatus()
},
showRedraftStatusConfirmDialog () {
this.showingRedraftDialog = true
},
hideRedraftStatusConfirmDialog () {
this.showingRedraftDialog = false
} }
}, },
computed: { computed: {

View File

@ -95,6 +95,17 @@
icon="history" icon="history"
/><span>{{ $t("status.edit_history") }}</span> /><span>{{ $t("status.edit_history") }}</span>
</button> </button>
<button
v-if="ownStatus"
class="button-default dropdown-item dropdown-item-icon"
@click.prevent="redraftStatus"
@click="close"
>
<FAIcon
fixed-width
icon="file-pen"
/><span>{{ $t("status.redraft") }}</span>
</button>
<button <button
v-if="canDelete" v-if="canDelete"
class="button-default dropdown-item dropdown-item-icon" class="button-default dropdown-item dropdown-item-icon"
@ -179,6 +190,16 @@
> >
{{ $t('status.delete_confirm') }} {{ $t('status.delete_confirm') }}
</ConfirmModal> </ConfirmModal>
<ConfirmModal
v-if="showingRedraftDialog"
:title="$t('status.redraft_confirm_title')"
:cancel-text="$t('status.redraft_confirm_cancel_button')"
:confirm-text="$t('status.redraft_confirm_accept_button')"
@cancelled="hideRedraftStatusConfirmDialog"
@accepted="doRedraftStatus"
>
{{ $t('status.redraft_confirm') }}
</ConfirmModal>
</teleport> </teleport>
</template> </template>
</Popover> </Popover>

View File

@ -86,7 +86,8 @@ const PostStatusForm = {
'fileLimit', 'fileLimit',
'submitOnEnter', 'submitOnEnter',
'emojiPickerPlacement', 'emojiPickerPlacement',
'optimisticPosting' 'optimisticPosting',
'isRedraft'
], ],
emits: [ emits: [
'posted', 'posted',
@ -141,7 +142,7 @@ const PostStatusForm = {
contentType contentType
} }
if (this.statusId) { if (this.statusId || this.isRedraft) {
const statusContentType = this.statusContentType || contentType const statusContentType = this.statusContentType || contentType
statusParams = { statusParams = {
spoilerText: this.subject || '', spoilerText: this.subject || '',
@ -259,7 +260,7 @@ const PostStatusForm = {
return this.newStatus.files.length >= this.fileLimit return this.newStatus.files.length >= this.fileLimit
}, },
isEdit () { isEdit () {
return typeof this.statusId !== 'undefined' && this.statusId.trim() !== '' return typeof this.statusId !== 'undefined' && this.statusId.trim() !== '' && !this.isRedraft
}, },
...mapGetters(['mergedConfig']), ...mapGetters(['mergedConfig']),
...mapState({ ...mapState({

View File

@ -28,7 +28,8 @@ const PostStatusModal = {
}, },
watch: { watch: {
params (newVal, oldVal) { params (newVal, oldVal) {
if (get(newVal, 'repliedUser.id') !== get(oldVal, 'repliedUser.id')) { if (get(newVal, 'repliedUser.id') !== get(oldVal, 'repliedUser.id') ||
get(newVal, 'statusId') !== get(oldVal, 'statusId')) {
this.resettingForm = true this.resettingForm = true
this.$nextTick(() => { this.$nextTick(() => {
this.resettingForm = false this.resettingForm = false

View File

@ -925,6 +925,11 @@
"pin": "Pin on profile", "pin": "Pin on profile",
"pinned": "Pinned", "pinned": "Pinned",
"plus_more": "+{number} more", "plus_more": "+{number} more",
"redraft": "Delete & redraft",
"redraft_confirm": "Do you really want to delete and redraft this post? Interactions to the original post will not be preserved.",
"redraft_confirm_accept_button": "Yes, delete and redraft",
"redraft_confirm_cancel_button": "No, keep the original",
"redraft_confirm_title": "Confirm delete & redraft",
"remove_attachment": "Remove attachment", "remove_attachment": "Remove attachment",
"repeat_confirm": "Do you really want to repeat this post?", "repeat_confirm": "Do you really want to repeat this post?",
"repeat_confirm_accept_button": "Yes, repeat it", "repeat_confirm_accept_button": "Yes, repeat it",

17828
yarn.lock

File diff suppressed because it is too large Load Diff