Fix childer tennats
This commit is contained in:
@@ -23,7 +23,12 @@ export const useUserProgress = (
|
||||
queryKey: onboardingKeys.progress(userId),
|
||||
queryFn: () => onboardingService.getUserProgress(userId),
|
||||
enabled: !!userId,
|
||||
staleTime: 30 * 1000, // 30 seconds
|
||||
// OPTIMIZATION: Once onboarding is fully completed, it won't change back
|
||||
// Use longer staleTime (5 min) and gcTime (30 min) to reduce API calls
|
||||
// The select function below will update staleTime based on completion status
|
||||
staleTime: 5 * 60 * 1000, // 5 minutes (increased from 30s - completed status rarely changes)
|
||||
gcTime: 30 * 60 * 1000, // 30 minutes - keep in cache longer
|
||||
refetchOnWindowFocus: false, // Don't refetch on window focus for onboarding status
|
||||
...options,
|
||||
});
|
||||
};
|
||||
|
||||
@@ -20,6 +20,10 @@ import { parseISO } from 'date-fns';
|
||||
// Debounce delay for SSE-triggered query invalidations (ms)
|
||||
const SSE_INVALIDATION_DEBOUNCE_MS = 500;
|
||||
|
||||
// Delay before SSE invalidations are allowed after initial load (ms)
|
||||
// This prevents duplicate API calls when SSE events arrive during/right after initial fetch
|
||||
const SSE_INITIAL_LOAD_GRACE_PERIOD_MS = 3000;
|
||||
|
||||
// ============================================================
|
||||
// Types
|
||||
// ============================================================
|
||||
@@ -421,6 +425,15 @@ export function useControlPanelData(tenantId: string) {
|
||||
// Ref for debouncing SSE-triggered invalidations
|
||||
const invalidationTimeoutRef = useRef<NodeJS.Timeout | null>(null);
|
||||
const lastEventCountRef = useRef<number>(0);
|
||||
// Track when the initial data was successfully fetched to avoid immediate SSE refetches
|
||||
const initialLoadTimestampRef = useRef<number | null>(null);
|
||||
|
||||
// Update initial load timestamp when query succeeds
|
||||
useEffect(() => {
|
||||
if (query.isSuccess && !initialLoadTimestampRef.current) {
|
||||
initialLoadTimestampRef.current = Date.now();
|
||||
}
|
||||
}, [query.isSuccess]);
|
||||
|
||||
// SSE integration - invalidate query on relevant events (debounced)
|
||||
useEffect(() => {
|
||||
@@ -429,6 +442,17 @@ export function useControlPanelData(tenantId: string) {
|
||||
return;
|
||||
}
|
||||
|
||||
// OPTIMIZATION: Skip SSE-triggered invalidation during grace period after initial load
|
||||
// This prevents duplicate API calls when SSE events arrive during/right after the initial fetch
|
||||
if (initialLoadTimestampRef.current) {
|
||||
const timeSinceInitialLoad = Date.now() - initialLoadTimestampRef.current;
|
||||
if (timeSinceInitialLoad < SSE_INITIAL_LOAD_GRACE_PERIOD_MS) {
|
||||
// Update the event count ref so we don't process these events later
|
||||
lastEventCountRef.current = sseAlerts.length;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
const relevantEvents = sseAlerts.filter(event =>
|
||||
event.event_type?.includes('production.') ||
|
||||
event.event_type?.includes('batch_') ||
|
||||
|
||||
Reference in New Issue
Block a user