diff --git a/src/components/moderation/ModerationQueue.tsx b/src/components/moderation/ModerationQueue.tsx index 552be225..17626351 100644 --- a/src/components/moderation/ModerationQueue.tsx +++ b/src/components/moderation/ModerationQueue.tsx @@ -523,9 +523,27 @@ export const ModerationQueue = forwardRef((props, ref) => { console.log('✅ Queue frozen (default) - existing submissions unchanged'); } } else { - // Normal fetch: Load all items and reset pending - console.log('🔄 Manual refresh - replacing entire queue'); - setItems(moderationItems); + // Manual refresh: Use smart comparison even for non-silent refreshes + console.log('🔄 Manual refresh - checking for changes'); + + const mergeResult = smartMergeArray(itemsRef.current, moderationItems, { + compareFields: ['status', 'content', 'reviewed_at', 'reviewed_by', 'reviewer_notes', 'assigned_to', 'locked_until'], + preserveOrder: false, + addToTop: false, + }); + + if (mergeResult.hasChanges) { + setItems(mergeResult.items); + console.log('🔄 Queue updated (manual refresh):', { + added: mergeResult.changes.added.length, + removed: mergeResult.changes.removed.length, + updated: mergeResult.changes.updated.length, + }); + } else { + console.log('✅ Queue unchanged (manual refresh) - data identical, no re-render'); + } + + // Always reset pending items on manual refresh setPendingNewItems([]); setNewItemsCount(0);