diff --git a/src/components/moderation/ModerationQueue.tsx b/src/components/moderation/ModerationQueue.tsx index 7e3248fb..0fdda434 100644 --- a/src/components/moderation/ModerationQueue.tsx +++ b/src/components/moderation/ModerationQueue.tsx @@ -55,6 +55,7 @@ interface ModerationItem { type EntityFilter = 'all' | 'reviews' | 'submissions' | 'photos'; type StatusFilter = 'all' | 'pending' | 'partially_approved' | 'flagged' | 'approved' | 'rejected'; +type QueueTab = 'mainQueue' | 'archive'; export interface ModerationQueueRef { refresh: () => void; @@ -67,6 +68,7 @@ export const ModerationQueue = forwardRef((props, ref) => { const [isInitialLoad, setIsInitialLoad] = useState(true); const [actionLoading, setActionLoading] = useState(null); const [notes, setNotes] = useState>({}); + const [activeTab, setActiveTab] = useState('mainQueue'); const [activeEntityFilter, setActiveEntityFilter] = useState('all'); const [activeStatusFilter, setActiveStatusFilter] = useState('pending'); const [photoModalOpen, setPhotoModalOpen] = useState(false); @@ -119,7 +121,7 @@ export const ModerationQueue = forwardRef((props, ref) => { loadedIdsRef.current = new Set(items.map(item => item.id)); }, [items]); - const fetchItems = useCallback(async (entityFilter: EntityFilter = 'all', statusFilter: StatusFilter = 'pending', silent = false) => { + const fetchItems = useCallback(async (entityFilter: EntityFilter = 'all', statusFilter: StatusFilter = 'pending', silent = false, tab: QueueTab = 'mainQueue') => { if (!user) { return; } @@ -135,6 +137,7 @@ export const ModerationQueue = forwardRef((props, ref) => { console.log('🔍 fetchItems called:', { entityFilter, statusFilter, + tab, silent, timestamp: new Date().toISOString() }); @@ -168,13 +171,23 @@ export const ModerationQueue = forwardRef((props, ref) => { .order('priority', { ascending: false }) .order('created_at', { ascending: true }); - // Apply status filter - if (statusFilter === 'all') { - submissionsQuery = submissionsQuery.in('status', ['pending', 'approved', 'rejected', 'partially_approved']); - } else if (statusFilter === 'pending') { - submissionsQuery = submissionsQuery.in('status', ['pending', 'partially_approved']); + // Apply tab-based status filtering + if (tab === 'mainQueue') { + // Main queue: pending, flagged, partially_approved submissions + if (statusFilter === 'all') { + submissionsQuery = submissionsQuery.in('status', ['pending', 'flagged', 'partially_approved']); + } else if (statusFilter === 'pending') { + submissionsQuery = submissionsQuery.in('status', ['pending', 'partially_approved']); + } else { + submissionsQuery = submissionsQuery.eq('status', statusFilter); + } } else { - submissionsQuery = submissionsQuery.eq('status', statusFilter); + // Archive: approved or rejected submissions + if (statusFilter === 'all') { + submissionsQuery = submissionsQuery.in('status', ['approved', 'rejected']); + } else { + submissionsQuery = submissionsQuery.eq('status', statusFilter); + } } // Apply entity type filter