feat: Implement Phase 4 Streamlined Enhancements

This commit is contained in:
gpt-engineer-app[bot]
2025-10-13 22:46:42 +00:00
parent 787e16753e
commit 68a2572c23
3 changed files with 52 additions and 12 deletions

View File

@@ -47,7 +47,7 @@ export interface RealtimeSubscriptionConfig {
/** Pause subscriptions when tab is hidden (default: true) */
pauseWhenHidden?: boolean;
/** Debounce delay for UPDATE events in milliseconds (default: 1000) */
/** Debounce delay for UPDATE events in milliseconds (default: 500) */
debounceMs?: number;
/** Entity cache for resolving entity names */
@@ -95,7 +95,7 @@ export function useRealtimeSubscriptions(
onUpdateItem,
onItemRemoved,
pauseWhenHidden = true,
debounceMs = 1000,
debounceMs = 500,
entityCache,
profileCache,
recentlyRemovedIds,
@@ -314,6 +314,7 @@ export function useRealtimeSubscriptions(
*/
const handleUpdate = useCallback(async (payload: any) => {
const updatedSubmission = payload.new as any;
const oldSubmission = payload.old as any;
console.log('🔄 Realtime UPDATE:', updatedSubmission.id);
@@ -335,7 +336,24 @@ export function useRealtimeSubscriptions(
return;
}
// Debounce the update
// Skip debounce for status changes (critical updates)
const isStatusChange = oldSubmission?.status !== updatedSubmission.status;
if (isStatusChange) {
console.log('⚡ Status change detected, invalidating immediately');
await queryClient.invalidateQueries({ queryKey: ['moderation-queue'] });
const matchesEntity = matchesEntityFilter(updatedSubmission, filters.entityFilter);
const matchesStatus = matchesStatusFilter(updatedSubmission, filters.statusFilter);
const shouldBeInQueue = matchesEntity && matchesStatus;
if (!shouldBeInQueue) {
onItemRemoved(updatedSubmission.id);
}
return; // Skip debounced update
}
// Use debounce for non-critical updates
debouncedUpdate(updatedSubmission.id, async () => {
console.log('🔄 Invalidating query due to UPDATE:', updatedSubmission.id);