diff --git a/src/hooks/useRealtimeSync.ts b/src/hooks/useRealtimeSync.ts index 0246a43..b106297 100644 --- a/src/hooks/useRealtimeSync.ts +++ b/src/hooks/useRealtimeSync.ts @@ -34,9 +34,12 @@ export const useUsersRealtime = () => { } } ) - .subscribe(); + newChannel.subscribe(); - setChannel(newChannel); + // Deferir o setChannel para evitar o erro de renderização em cascata síncrona + setTimeout(() => { + setChannel(newChannel); + }, 0); // Cleanup na desmontagem return () => { @@ -81,9 +84,12 @@ export const useObrasRealtimeSync = () => { } } ) - .subscribe(); + newChannel.subscribe(); - setChannel(newChannel); + // Deferir o setChannel para evitar o erro de renderização em cascata síncrona + setTimeout(() => { + setChannel(newChannel); + }, 0); return () => { if (newChannel) { @@ -118,24 +124,24 @@ export const useRdosRealtimeSync = (obraId?: string) => { invalidateQueries.rdos(); if (payload.new && typeof payload.new === 'object') { - const newRdo = payload.new as any; + const newRdo = payload.new as Record; // Invalidar RDO específico if ('id' in newRdo) { queryClient.invalidateQueries({ - queryKey: queryKeys.rdos.detail(newRdo.id) + queryKey: queryKeys.rdos.detail(newRdo.id as string) }); } // Invalidar RDOs da obra if ('obra_id' in newRdo) { - invalidateQueries.rdosByObra(newRdo.obra_id); + invalidateQueries.rdosByObra(newRdo.obra_id as string); } // Invalidar RDOs do usuário if ('usuario_id' in newRdo) { queryClient.invalidateQueries({ - queryKey: queryKeys.rdos.byUser(newRdo.usuario_id) + queryKey: queryKeys.rdos.byUser(newRdo.usuario_id as string) }); } } @@ -143,7 +149,9 @@ export const useRdosRealtimeSync = (obraId?: string) => { ) .subscribe(); - setChannel(newChannel); + setTimeout(() => { + setChannel(newChannel); + }, 0); return () => { if (newChannel) {