admin can delete status changes from post timeline

This commit is contained in:
2026-03-22 07:41:59 +02:00
parent 6b110a6d90
commit 393001c07c
3 changed files with 47 additions and 0 deletions

View File

@@ -51,6 +51,7 @@ export default function Timeline({
onReply,
onShowEditHistory,
onLockComment,
onDeleteStatusChange,
}: {
entries: TimelineEntry[]
onReact?: (entryId: string, emoji: string) => void
@@ -61,6 +62,7 @@ export default function Timeline({
onReply?: (entry: TimelineEntry) => void
onShowEditHistory?: (entryId: string) => void
onLockComment?: (entryId: string) => void
onDeleteStatusChange?: (entryId: string) => void
}) {
return (
<div className="flex flex-col gap-3">
@@ -76,6 +78,7 @@ export default function Timeline({
onReply={onReply}
onShowEditHistory={onShowEditHistory}
onLockComment={onLockComment}
onDeleteStatusChange={onDeleteStatusChange}
index={i}
/>
))}
@@ -93,6 +96,7 @@ function TimelineItem({
onReply,
onShowEditHistory,
onLockComment,
onDeleteStatusChange,
index,
}: {
entry: TimelineEntry
@@ -104,6 +108,7 @@ function TimelineItem({
onReply?: (entry: TimelineEntry) => void
onShowEditHistory?: (entryId: string) => void
onLockComment?: (entryId: string) => void
onDeleteStatusChange?: (entryId: string) => void
index: number
}) {
const confirm = useConfirm()
@@ -138,6 +143,19 @@ function TimelineItem({
<time dateTime={entry.createdAt} style={{ color: 'var(--text-tertiary)', fontSize: 'var(--text-xs)' }}>
{new Date(entry.createdAt).toLocaleDateString()}
</time>
{isCurrentAdmin && onDeleteStatusChange && (
<button
onClick={async () => {
if (!await confirm('Remove this status change?')) return
onDeleteStatusChange(entry.id)
}}
className="action-btn"
aria-label="Remove status change"
style={{ color: 'var(--text-tertiary)', padding: '2px 4px', borderRadius: 'var(--radius-sm)', minHeight: 24 }}
>
<IconTrash size={12} stroke={2} />
</button>
)}
</div>
{entry.reason && (
<div

View File

@@ -931,6 +931,15 @@ export default function PostDetail() {
onReply={post.isThreadLocked ? undefined : handleReply}
onShowEditHistory={showCommentHistory}
onLockComment={admin.isAdmin ? toggleCommentEditLock : undefined}
onDeleteStatusChange={admin.isAdmin ? async (id) => {
try {
await api.delete(`/admin/status-changes/${id}`)
toast.success('Status change removed')
fetchPost()
} catch {
toast.error('Failed to remove status change')
}
} : undefined}
/>
</div>
)}