From 3d14393df96b00557e0c0b256a76693dcd24ef9e Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Sun, 12 Oct 2025 15:12:20 +0000 Subject: [PATCH] Refactor: Implement all refresh settings --- src/components/moderation/ModerationQueue.tsx | 92 +++++++++++++++++-- 1 file changed, 82 insertions(+), 10 deletions(-) diff --git a/src/components/moderation/ModerationQueue.tsx b/src/components/moderation/ModerationQueue.tsx index 9dbdd9b6..4a5a6683 100644 --- a/src/components/moderation/ModerationQueue.tsx +++ b/src/components/moderation/ModerationQueue.tsx @@ -936,14 +936,40 @@ export const ModerationQueue = forwardRef((props, ref) => { locked_until: submission.locked_until || undefined, }; - // Add to pending items - setPendingNewItems(prev => { - if (prev.some(p => p.id === fullItem.id)) return prev; - return [...prev, fullItem]; - }); - setNewItemsCount(prev => prev + 1); + // Check auto-refresh strategy + const strategy = refreshStrategyRef.current; - // Toast notification + if (strategy === 'notify') { + console.log('📢 NEW submission detected - showing notification only (strategy: notify)'); + toast({ + title: '🆕 New Submission', + description: `${fullItem.submission_type} - ${fullItem.entity_name}`, + action: ( + + ), + }); + setNewItemsCount(prev => prev + 1); + return; // Don't add to queue + } + + if (strategy === 'replace') { + console.log('🔄 NEW submission detected - full replacement (strategy: replace)'); + toast({ + title: '🆕 New Submission', + description: 'Refreshing queue...', + }); + fetchItems(filtersRef.current.entityFilter, filtersRef.current.statusFilter, true, activeTabRef.current); + return; + } + + // strategy === 'merge' (default behavior - seamlessly add to existing list) + console.log('➕ NEW submission detected - merging into queue (strategy: merge)'); + setItems(prev => [fullItem, ...prev]); toast({ title: '🆕 New Submission', description: `${fullItem.submission_type} - ${fullItem.entity_name}`, @@ -1138,6 +1164,50 @@ export const ModerationQueue = forwardRef((props, ref) => { } console.log('🔄 Realtime UPDATE: Changes detected for', fullItem.id); + + // Check auto-refresh strategy + const strategy = refreshStrategyRef.current; + + if (strategy === 'notify') { + console.log('📢 UPDATE detected - showing notification only (strategy: notify)'); + toastRef.current({ + title: '🔄 Submission Updated', + description: `Submission has been updated`, + action: ( + + ), + }); + return prev; // Don't update queue + } + + if (strategy === 'replace') { + console.log('🔄 UPDATE detected - full replacement (strategy: replace)'); + toastRef.current({ + title: '🔄 Submission Updated', + description: 'Refreshing queue...', + }); + fetchItems(filtersRef.current.entityFilter, filtersRef.current.statusFilter, true, activeTabRef.current); + return prev; + } + + // strategy === 'merge' (default - seamlessly update in place) + console.log('🔄 Realtime UPDATE: Merging changes (strategy: merge)'); // Update ONLY changed fields to preserve object stability return prev.map(i => { if (i.id !== fullItem.id) return i; @@ -1182,16 +1252,18 @@ export const ModerationQueue = forwardRef((props, ref) => { console.log('📴 Tab hidden - pausing queue updates'); pauseFetchingRef.current = true; } else { - console.log('📱 Tab visible - resuming queue updates'); - pauseFetchingRef.current = false; + console.log('📱 Tab visible - checking admin settings'); // Check admin setting for auto-refresh behavior const shouldRefresh = refreshOnTabVisibleRef.current; if (shouldRefresh && initialFetchCompleteRef.current && !isMountingRef.current) { - console.log('🔄 Tab became visible - triggering refresh (admin setting enabled)'); + console.log('🔄 Tab became visible - triggering refresh (setting enabled)'); + pauseFetchingRef.current = false; // Only unpause when refreshing fetchItems(filtersRef.current.entityFilter, filtersRef.current.statusFilter, true, activeTabRef.current); } else { + console.log('⛔ Tab became visible - refresh BLOCKED by admin settings (keeping fetch paused)'); + // Keep pauseFetchingRef.current = true to prevent ANY mechanism from triggering fetches console.log('✅ Tab became visible - resuming without refresh'); // Realtime subscriptions will handle updates naturally }