Refactor: Simplify architecture

This commit is contained in:
gpt-engineer-app[bot]
2025-10-13 22:27:58 +00:00
parent 27c7f36ca4
commit 2bd0b414e1
5 changed files with 117 additions and 164 deletions

View File

@@ -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,