diff --git a/src/lib/app/i18n/en.json b/src/lib/app/i18n/en.json index 14b7c398..0877b278 100644 --- a/src/lib/app/i18n/en.json +++ b/src/lib/app/i18n/en.json @@ -585,6 +585,8 @@ "share.photon": "Kelp link", "crosspost": "Crosspost", "delete": "Delete", + "deletePostConfirm": "Delete this post permanently? This can't be undone.", + "deleteCommentConfirm": "Delete this comment permanently? This can't be undone.", "restore": "Restore" }, "vote": { diff --git a/src/lib/feature/comment/CommentActions.svelte b/src/lib/feature/comment/CommentActions.svelte index bcc1050d..d9139c57 100644 --- a/src/lib/feature/comment/CommentActions.svelte +++ b/src/lib/feature/comment/CommentActions.svelte @@ -11,7 +11,7 @@ postLinkRefFromUri, type PostLinkRef, } from '$lib/feature/post' - import { Button, Menu, MenuButton, toast } from 'mono-svelte' + import { action, Button, Menu, MenuButton, modal, toast } from 'mono-svelte' import { ChatBubbleOvalLeft, EllipsisHorizontal, @@ -47,6 +47,44 @@ let shareUrl = $derived( commentLink(post ?? postLinkRefFromUri(comment.post.uri), comment.uri), ) + + async function deleteComment(): Promise { + if (!profile.current?.jwt) { + toast({ content: $t('toast.sessionExpired'), type: 'warning' }) + return + } + try { + await coves().deleteComment({ uri: comment.uri }) + comment.isDeleted = true + if (comment.record) { + comment.record.content = deletedContentPlaceholder() + } + } catch (err) { + toast({ + content: errorMessage(err), + type: 'error', + }) + } + } + + function confirmDelete(): void { + modal({ + title: $t('post.actions.more.delete'), + body: $t('post.actions.more.deleteCommentConfirm'), + actions: [ + action({ + content: $t('post.actions.more.delete'), + action: deleteComment, + type: 'danger', + close: true, + }), + action({ + content: $t('common.cancel'), + close: true, + }), + ], + }) + }
{ - if (!profile.current?.jwt) { - toast({ content: $t('toast.sessionExpired'), type: 'warning' }) - return - } - try { - await coves().deleteComment({ uri: comment.uri }) - comment.isDeleted = true - if (comment.record) { - comment.record.content = deletedContentPlaceholder() - } - } catch (err) { - toast({ - content: errorMessage(err), - type: 'error', - }) - } - }} + onclick={confirmDelete} icon={Trash} > {$t('post.actions.more.delete')} diff --git a/src/lib/feature/post/actions/PostActionsMenu.svelte b/src/lib/feature/post/actions/PostActionsMenu.svelte index 33dd4550..b37fc017 100644 --- a/src/lib/feature/post/actions/PostActionsMenu.svelte +++ b/src/lib/feature/post/actions/PostActionsMenu.svelte @@ -6,7 +6,7 @@ import { settings } from '$lib/app/settings.svelte' import { report } from '$lib/feature/moderation/moderation.svelte' import { encodeCrosspostDraft } from '$lib/feature/post/helpers' - import { MenuButton, toast } from 'mono-svelte' + import { action, MenuButton, modal, toast } from 'mono-svelte' import { ArrowTopRightOnSquare, Flag, Trash } from 'svelte-hero-icons/dist' interface Props { @@ -47,6 +47,25 @@ deleting = false } } + + function confirmDelete(): void { + modal({ + title: $t('post.actions.more.delete'), + body: $t('post.actions.more.deletePostConfirm'), + actions: [ + action({ + content: $t('post.actions.more.delete'), + action: handleDelete, + type: 'danger', + close: true, + }), + action({ + content: $t('common.cancel'), + close: true, + }), + ], + }) + } {#if profile.current?.jwt} @@ -57,7 +76,7 @@ {$t('post.actions.more.crosspost')} {#if profile.current?.did && profile.current.did === post.author.did} - + {$t('post.actions.more.delete')} {/if}