8.5 KiB
Correção da Atualização do Card da Próxima Entrega
🎯 Problema Identificado
O card da próxima entrega não estava sendo atualizado após a finalização de uma entrega, mesmo com o sistema de callback implementado.
🔍 Logs de Debug Implementados
1. OfflineModeContext - Verificação do Callback
Logs Adicionados:
// Notificar mudança no status da entrega
if (onDeliveryStatusChanged) {
console.log('🚨 OFFLINE CONTEXT - NOTIFICANDO MUDANÇA NO STATUS DA ENTREGA');
console.log('🚨 Callback registrado:', !!onDeliveryStatusChanged);
onDeliveryStatusChanged();
console.log('🚨 Callback executado com sucesso');
} else {
console.log('🚨 OFFLINE CONTEXT - NENHUM CALLBACK REGISTRADO');
}
Objetivo:
- Verificar se o callback está registrado
- Confirmar se o callback está sendo executado
- Identificar se há erro na execução
2. DeliveriesContext - Debug do Recarregamento
Logs Adicionados:
// Função handleDeliveryStatusChange
const handleDeliveryStatusChange = useCallback(() => {
console.log("🚨 DELIVERIES CONTEXT - STATUS DE ENTREGA MUDOU - RECARREGANDO DADOS")
console.log("🚨 DELIVERIES CONTEXT - Executando loadDeliveries(false)")
console.log("🚨 DELIVERIES CONTEXT - Estado atual antes do reload:", {
deliveriesCount: deliveries.length,
loading: loading,
isRefreshing: isRefreshing
})
loadDeliveries(false)
}, [loadDeliveries, deliveries.length, loading, isRefreshing])
// Função loadDeliveries
console.log("🚨 DELIVERIES CONTEXT - CARREGAMENTO JÁ EM ANDAMENTO - IGNORANDO") // ← NOVO
console.log("🚨 DELIVERIES CONTEXT - INICIANDO CARREGAMENTO")
console.log("🚨 DELIVERIES CONTEXT - Estado atual antes do carregamento:", {...})
console.log("🚨 DELIVERIES CONTEXT - Total de entregas:", data.length)
console.log("🚨 DELIVERIES CONTEXT - Primeiras 3 entregas:", [...])
console.log("🚨 DELIVERIES CONTEXT - DADOS ATUALIZADOS:", {...})
Objetivo:
- Verificar se
handleDeliveryStatusChangeestá sendo chamado - Confirmar se
loadDeliveriesestá sendo executado - Identificar se carregamento está sendo ignorado
- Verificar se dados estão sendo atualizados
3. HomeScreen - Debug da Próxima Entrega
Logs Adicionados:
// Log para debug da próxima entrega
useEffect(() => {
console.log('🚨 HOMESCREEN - PRÓXIMA ENTREGA ATUALIZADA:', {
nextDelivery: nextDelivery ? {
id: nextDelivery.id,
customerName: nextDelivery.customerName,
status: nextDelivery.status,
deliverySeq: nextDelivery.deliverySeq
} : null,
totalDeliveries: deliveries.length,
sortedDeliveriesCount: sortedDeliveries.length
})
}, [nextDelivery?.id, nextDelivery?.status, deliveries.length]) // ← Otimizado
Objetivo:
- Verificar se a próxima entrega está sendo atualizada
- Confirmar se o status da entrega anterior mudou
- Identificar se a nova próxima entrega está correta
🔄 Fluxo de Debug Esperado
1. Finalização da Entrega:
LOG 🚨 INICIANDO completeDeliveryOffline...
LOG 🚨 completeDeliveryOffline executado com sucesso!
LOG 🚨 OFFLINE CONTEXT - NOTIFICANDO MUDANÇA NO STATUS DA ENTREGA
LOG 🚨 Callback registrado: true
LOG 🚨 Callback executado com sucesso
2. Recarregamento dos Dados:
LOG 🚨 DELIVERIES CONTEXT - STATUS DE ENTREGA MUDOU - RECARREGANDO DADOS
LOG 🚨 DELIVERIES CONTEXT - Executando loadDeliveries(false)
LOG 🚨 DELIVERIES CONTEXT - Estado atual antes do reload: {deliveriesCount: 5, loading: false, isRefreshing: false}
LOG 🚨 DELIVERIES CONTEXT - INICIANDO CARREGAMENTO
LOG 🚨 DELIVERIES CONTEXT - USANDO DADOS LOCAIS
LOG 🚨 DELIVERIES CONTEXT - Total de entregas: 5
LOG 🚨 DELIVERIES CONTEXT - Primeiras 3 entregas: [
{id: "123", customerName: "Cliente A", status: "delivered", deliverySeq: 1},
{id: "124", customerName: "Cliente B", status: "pending", deliverySeq: 2},
{id: "125", customerName: "Cliente C", status: "pending", deliverySeq: 3}
]
LOG 🚨 DELIVERIES CONTEXT - DADOS ATUALIZADOS: {
totalDeliveries: 5,
firstDelivery: {id: "123", customerName: "Cliente A", status: "delivered", deliverySeq: 1}
}
3. Atualização da Próxima Entrega:
LOG === 🔍 PROCURANDO PRÓXIMA ENTREGA ===
LOG 📊 Total de entregas ordenadas: 5
LOG 📊 Fonte dos dados: LOCAL (SQLite)
LOG 🔍 Cliente A: deliverySeq=1, status=delivered, routing=1 -> INVÁLIDA
LOG 🔍 Cliente B: deliverySeq=2, status=pending, routing=1 -> VÁLIDA
LOG 📊 Entregas válidas encontradas: 1
LOG === 🎯 PRÓXIMA ENTREGA SELECIONADA ===
LOG 📦 Entrega: {id: "124", customerName: "Cliente B", deliverySeq: 2, status: "pending"}
LOG 🚨 HOMESCREEN - PRÓXIMA ENTREGA ATUALIZADA: {
nextDelivery: {id: "124", customerName: "Cliente B", status: "pending", deliverySeq: 2},
totalDeliveries: 5,
sortedDeliveriesCount: 5
}
🚨 Possíveis Problemas Identificados
1. Carregamento Ignorado:
LOG 🚨 DELIVERIES CONTEXT - CARREGAMENTO JÁ EM ANDAMENTO - IGNORANDO
Causa: isRefreshingRef.current está true e forceRefresh é false
Solução: Usar forceRefresh = true ou aguardar carregamento anterior
2. Callback Não Registrado:
LOG 🚨 OFFLINE CONTEXT - NENHUM CALLBACK REGISTRADO
Causa: DeliveriesContext não registrou o callback
Solução: Verificar se registerDeliveryStatusCallback está sendo chamado
3. Dados Não Atualizados no SQLite:
LOG 🚨 DELIVERIES CONTEXT - Primeiras 3 entregas: [
{status: "pending"} // ← Deveria ser "delivered"
]
Causa: SQLite não foi atualizado corretamente
Solução: Verificar completeDeliveryOffline no offlineSyncService
4. Próxima Entrega Não Recalculada:
LOG 🚨 HOMESCREEN - PRÓXIMA ENTREGA ATUALIZADA: {
nextDelivery: {customerName: "Cliente A"} // ← Deveria ser "Cliente B"
}
Causa: getNextDelivery não está filtrando corretamente
Solução: Verificar lógica de filtro por status
🔧 Otimizações Implementadas
1. Dependências Otimizadas no useEffect:
// ANTES: Dependências desnecessárias
}, [nextDelivery, deliveries.length, sortedDeliveries.length])
// DEPOIS: Dependências otimizadas
}, [nextDelivery?.id, nextDelivery?.status, deliveries.length])
2. Logs de Carregamento Ignorado:
// ANTES: Log comentado
// console.log("=== CARREGAMENTO JÁ EM ANDAMENTO - IGNORANDO ===")
// DEPOIS: Log habilitado para debug
console.log("🚨 DELIVERIES CONTEXT - CARREGAMENTO JÁ EM ANDAMENTO - IGNORANDO")
📱 Como Testar
1. Finalizar Entrega:
- Ir para
CompleteDeliveryScreen - Finalizar uma entrega
- Verificar logs de finalização
2. Verificar Callback:
- Procurar por:
🚨 OFFLINE CONTEXT - NOTIFICANDO MUDANÇA NO STATUS DA ENTREGA - Confirmar se callback foi executado
3. Verificar Recarregamento:
- Procurar por:
🚨 DELIVERIES CONTEXT - STATUS DE ENTREGA MUDOU - RECARREGANDO DADOS - Verificar se dados foram atualizados
4. Verificar Próxima Entrega:
- Procurar por:
🚨 HOMESCREEN - PRÓXIMA ENTREGA ATUALIZADA - Confirmar se próxima entrega mudou
🎯 Próximos Passos
1. Analisar Logs:
- Executar teste de finalização de entrega
- Coletar todos os logs gerados
- Identificar onde o fluxo está falhando
2. Implementar Correção:
- Com base nos logs, implementar correção específica
- Pode ser necessário:
- Forçar
forceRefresh = trueno callback - Corrigir atualização do SQLite
- Ajustar lógica de filtro da próxima entrega
- Forçar
3. Validar Correção:
- Testar novamente após correção
- Confirmar se card da próxima entrega atualiza corretamente
📝 Arquivos Modificados
-
src/contexts/OfflineModeContext.tsx- Adicionados logs detalhados no callback de notificação
- Verificação se callback está registrado e executado
-
src/contexts/DeliveriesContext.tsx- Adicionados logs detalhados no
handleDeliveryStatusChange - Adicionados logs no início e fim do
loadDeliveries - Habilitado log de carregamento ignorado
- Logs de dados carregados e atualizados
- Adicionados logs detalhados no
-
src/screens/main/HomeScreen.tsx- Adicionado
useEffectpara debug da próxima entrega - Dependências otimizadas para evitar re-renderizações desnecessárias
- Adicionado
Data: 2024-01-16
Status: 🔍 Logs de Debug Implementados
Próximo Passo: Testar finalização de entrega e analisar logs