diff --git a/src/app/admin/reviews/page.tsx b/src/app/admin/reviews/page.tsx index 129bb2a..2ae829c 100644 --- a/src/app/admin/reviews/page.tsx +++ b/src/app/admin/reviews/page.tsx @@ -244,6 +244,9 @@ export default function ReviewsPage() { ) } await fetchReviews(skip, { silent: true }) + // The silent refetch intentionally skips the selection reset, so clear the + // now-stale selection here — decided rows have left the pending list. + setSelectedIds(new Set()) refreshPendingCount() } diff --git a/src/components/admin/review-row.tsx b/src/components/admin/review-row.tsx index db25153..ed36d29 100644 --- a/src/components/admin/review-row.tsx +++ b/src/components/admin/review-row.tsx @@ -621,7 +621,13 @@ export function ReviewRow({ : undefined const res = await approveReview(review.ref_id, override) if (res.error_message || res.status === "failed") { + // Keep the row and its error visible instead of silently refetching it + // out of the pending list (it is now 'failed', not pending) — otherwise + // a failed merge just vanishes and looks like it succeeded. Still refresh + // the pending badge so the count reflects that it left the queue. setInlineError(res.error_message ?? "Approval failed") + onCountRefresh?.() + return } onRefresh() onCountRefresh?.()