mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 15:31:13 -05:00
Refactor: Simplify architecture
This commit is contained in:
@@ -7,11 +7,10 @@ import {
|
||||
useProfileCache,
|
||||
useModerationFilters,
|
||||
usePagination,
|
||||
useModerationSort,
|
||||
useRealtimeSubscriptions,
|
||||
} from "./index";
|
||||
import { useModerationQueue } from "@/hooks/useModerationQueue";
|
||||
import { smartMergeArray } from "@/lib/smartStateUpdate";
|
||||
|
||||
import type { ModerationItem, EntityFilter, StatusFilter, LoadingState } from "@/types/moderation";
|
||||
|
||||
/**
|
||||
@@ -43,7 +42,6 @@ export interface ModerationQueueManager {
|
||||
// Sub-hooks (exposed for granular control)
|
||||
filters: ReturnType<typeof useModerationFilters>;
|
||||
pagination: ReturnType<typeof usePagination>;
|
||||
sort: ReturnType<typeof useModerationSort>;
|
||||
queue: ReturnType<typeof useModerationQueue>;
|
||||
|
||||
// Realtime
|
||||
@@ -110,8 +108,6 @@ export function useModerationQueueManager(config: ModerationQueueManagerConfig):
|
||||
},
|
||||
});
|
||||
|
||||
const sort = useModerationSort();
|
||||
|
||||
const queue = useModerationQueue();
|
||||
const entityCache = useEntityCache();
|
||||
const profileCache = useProfileCache();
|
||||
@@ -133,10 +129,10 @@ export function useModerationQueueManager(config: ModerationQueueManagerConfig):
|
||||
|
||||
const FETCH_COOLDOWN_MS = 1000;
|
||||
|
||||
// Store settings, filters, sort, and pagination in refs to stabilize fetchItems
|
||||
// Store settings, filters, and pagination in refs to stabilize fetchItems
|
||||
const settingsRef = useRef(settings);
|
||||
const filtersRef = useRef(filters);
|
||||
const sortRef = useRef(sort.debouncedConfig);
|
||||
const sortRef = useRef(filters.debouncedSortConfig);
|
||||
const paginationRef = useRef(pagination);
|
||||
|
||||
// Sync refs with state
|
||||
@@ -149,8 +145,8 @@ export function useModerationQueueManager(config: ModerationQueueManagerConfig):
|
||||
}, [filters]);
|
||||
|
||||
useEffect(() => {
|
||||
sortRef.current = sort.debouncedConfig;
|
||||
}, [sort.debouncedConfig]);
|
||||
sortRef.current = filters.debouncedSortConfig;
|
||||
}, [filters.debouncedSortConfig]);
|
||||
|
||||
useEffect(() => {
|
||||
paginationRef.current = pagination;
|
||||
@@ -465,25 +461,10 @@ export function useModerationQueueManager(config: ModerationQueueManagerConfig):
|
||||
break;
|
||||
|
||||
case "replace":
|
||||
const mergeResult = smartMergeArray(items, 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 (replace mode)");
|
||||
}
|
||||
|
||||
// Full replace - simple and predictable
|
||||
setItems(moderationItems);
|
||||
console.log("🔄 Queue updated (replace mode)");
|
||||
|
||||
if (!currentPreserveInteraction) {
|
||||
setPendingNewItems([]);
|
||||
setNewItemsCount(0);
|
||||
@@ -515,14 +496,6 @@ export function useModerationQueueManager(config: ModerationQueueManagerConfig):
|
||||
user,
|
||||
isAdmin,
|
||||
isSuperuser,
|
||||
filters.debouncedEntityFilter,
|
||||
filters.debouncedStatusFilter,
|
||||
filters.activeTab,
|
||||
pagination.setTotalCount,
|
||||
pagination.startIndex,
|
||||
pagination.endIndex,
|
||||
sort.debouncedConfig.field,
|
||||
sort.debouncedConfig.direction,
|
||||
profileCache,
|
||||
entityCache,
|
||||
toast
|
||||
@@ -856,8 +829,8 @@ export function useModerationQueueManager(config: ModerationQueueManagerConfig):
|
||||
console.log('🔄 [SORT/FILTER CHANGE] Detected change:', {
|
||||
entityFilter: filters.debouncedEntityFilter,
|
||||
statusFilter: filters.debouncedStatusFilter,
|
||||
sortField: sort.debouncedConfig.field,
|
||||
sortDirection: sort.debouncedConfig.direction,
|
||||
sortField: filters.debouncedSortConfig.field,
|
||||
sortDirection: filters.debouncedSortConfig.direction,
|
||||
timestamp: new Date().toISOString()
|
||||
});
|
||||
|
||||
@@ -866,8 +839,8 @@ export function useModerationQueueManager(config: ModerationQueueManagerConfig):
|
||||
}, [
|
||||
filters.debouncedEntityFilter,
|
||||
filters.debouncedStatusFilter,
|
||||
sort.debouncedConfig.field,
|
||||
sort.debouncedConfig.direction,
|
||||
filters.debouncedSortConfig.field,
|
||||
filters.debouncedSortConfig.direction,
|
||||
user,
|
||||
fetchItems,
|
||||
pagination
|
||||
@@ -948,7 +921,6 @@ export function useModerationQueueManager(config: ModerationQueueManagerConfig):
|
||||
actionLoading,
|
||||
filters,
|
||||
pagination,
|
||||
sort,
|
||||
queue,
|
||||
newItemsCount,
|
||||
pendingNewItems,
|
||||
|
||||
Reference in New Issue
Block a user