From f6891296d6448a339a486502196ff412ec11279c Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Mon, 13 Oct 2025 12:51:21 +0000 Subject: [PATCH] Fix: Implement comprehensive sorting fixes --- .../moderation/useModerationQueueManager.ts | 46 ++++++++++++++----- src/hooks/moderation/useModerationSort.ts | 21 +++++++-- src/lib/moderation/sorting.ts | 2 +- 3 files changed, 54 insertions(+), 15 deletions(-) diff --git a/src/hooks/moderation/useModerationQueueManager.ts b/src/hooks/moderation/useModerationQueueManager.ts index 9adc9222..f6f33403 100644 --- a/src/hooks/moderation/useModerationQueueManager.ts +++ b/src/hooks/moderation/useModerationQueueManager.ts @@ -255,19 +255,33 @@ export function useModerationQueueManager(config: ModerationQueueManagerConfig): uiField: sort.field, dbColumn: sortColumn, direction: sort.direction, - ascending: sortAscending + ascending: sortAscending, + sortObjectRef: sort, + timestamp: new Date().toISOString() + }); + + // Log what localStorage has + console.log('[Query] Sort config persistence:', { + localStorageValue: localStorage.getItem('moderationQueue_sortConfig'), + parsedValue: (() => { + try { + return JSON.parse(localStorage.getItem('moderationQueue_sortConfig') || 'null'); + } catch { + return null; + } + })(), }); submissionsQuery = submissionsQuery.order(sortColumn, { ascending: sortAscending }); - // Secondary sort by created_at for consistency when primary sort has ties - if (sortColumn !== 'created_at') { - submissionsQuery = submissionsQuery.order('created_at', { ascending: true }); + // CRITICAL: Verify the query builder chain is working + if (!submissionsQuery.order) { + console.error('❌ [CRITICAL] Query builder broken - order method not found!'); + throw new Error('Supabase query builder is not functioning correctly'); } - // Validate sort was applied - if (!sortColumn) { - console.error('❌ [Query] Sort column is undefined! Using fallback.'); + // Secondary sort by created_at for consistency when primary sort has ties + if (sortColumn !== 'created_at') { submissionsQuery = submissionsQuery.order('created_at', { ascending: true }); } @@ -939,8 +953,11 @@ export function useModerationQueueManager(config: ModerationQueueManagerConfig): // Refetch when sort configuration changes useEffect(() => { console.log('🔄 [Sort Changed]', { - field: sort.config.field, - direction: sort.config.direction, + field: sort.field, + direction: sort.direction, + configField: sort.config.field, + configDirection: sort.config.direction, + match: sort.field === sort.config.field && sort.direction === sort.config.direction, timestamp: new Date().toISOString() }); @@ -956,10 +973,17 @@ export function useModerationQueueManager(config: ModerationQueueManagerConfig): return; } - // Trigger refetch with new sort + // CRITICAL: Ensure we're using the latest fetchItems if (fetchItemsRef.current) { - console.log('✅ Triggering refetch due to sort change'); + console.log('✅ Triggering refetch due to sort change', { + willUseField: sort.field, + willUseDirection: sort.direction + }); + + // Force immediate refetch fetchItemsRef.current(false); + } else { + console.error('❌ fetchItemsRef.current is null - cannot refetch!'); } }, [sort.field, sort.direction]); diff --git a/src/hooks/moderation/useModerationSort.ts b/src/hooks/moderation/useModerationSort.ts index fcaa6df8..1aaefae7 100644 --- a/src/hooks/moderation/useModerationSort.ts +++ b/src/hooks/moderation/useModerationSort.ts @@ -87,9 +87,24 @@ export function useModerationSort(config: ModerationSortConfig = {}): Moderation // Load persisted or use initial/default config const [sortConfig, setSortConfig] = useState(() => { - if (initialConfig) return initialConfig; - if (persist) return loadSortConfig(storageKey); - return getDefaultSortConfig(); + // Priority order: + // 1. Saved config from localStorage (if persist enabled and exists) + // 2. initialConfig prop (if provided) + // 3. Global default (fallback) + + if (persist) { + try { + const saved = localStorage.getItem(storageKey); + if (saved) { + return JSON.parse(saved); + } + } catch (error) { + console.error('Failed to load sort config:', error); + } + } + + // Use initialConfig if provided, otherwise use global default + return initialConfig || getDefaultSortConfig(); }); // Persist changes diff --git a/src/lib/moderation/sorting.ts b/src/lib/moderation/sorting.ts index 0b77c708..fdf658e4 100644 --- a/src/lib/moderation/sorting.ts +++ b/src/lib/moderation/sorting.ts @@ -57,7 +57,7 @@ export function sortModerationItems( export function getDefaultSortConfig(): SortConfig { return { field: 'created_at', - direction: 'asc', + direction: 'desc', // Newest first by default }; }