205 lines
6.1 KiB
Markdown
205 lines
6.1 KiB
Markdown
|
|
# Recarregamento da HomeScreen Após Roteamento
|
||
|
|
|
||
|
|
## Funcionalidade Implementada
|
||
|
|
Após a função `sendRoutingOrder()` ser executada com sucesso, a `HomeScreen` é automaticamente recarregada para mostrar a próxima entrega de acordo com as novas ordens de roteamento.
|
||
|
|
|
||
|
|
## Fluxo de Funcionamento
|
||
|
|
|
||
|
|
### 1. **Roteamento no RoutesScreen**
|
||
|
|
- Usuário desenha/otimiza a rota no mapa
|
||
|
|
- Sistema calcula a ordem otimizada das entregas
|
||
|
|
- Função `sendRoutingAfterMapRoute()` é chamada
|
||
|
|
|
||
|
|
### 2. **Envio para API**
|
||
|
|
- Dados de roteamento são enviados para `/v1/driver/routing`
|
||
|
|
- API processa e atualiza a ordem das entregas
|
||
|
|
- Sistema aguarda confirmação de sucesso
|
||
|
|
|
||
|
|
### 3. **Recarregamento Automático**
|
||
|
|
- Após sucesso, navegação automática para HomeScreen
|
||
|
|
- Parâmetros especiais são passados: `refreshDeliveries: true` e `routingUpdated: true`
|
||
|
|
- HomeScreen detecta os parâmetros e recarrega as entregas
|
||
|
|
|
||
|
|
### 4. **Atualização da Interface**
|
||
|
|
- Próxima entrega é recalculada baseada na nova ordem
|
||
|
|
- Interface é atualizada automaticamente
|
||
|
|
- Feedback visual é mostrado ao usuário
|
||
|
|
|
||
|
|
## Implementação Técnica
|
||
|
|
|
||
|
|
### RoutesScreen.tsx - Função `handleRouteCalculated`
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
const handleRouteCalculated = async (optimizedDeliveries: Delivery[]) => {
|
||
|
|
try {
|
||
|
|
// Enviar roteamento para a API
|
||
|
|
const result = await api.sendRoutingAfterMapRoute(optimizedDeliveries);
|
||
|
|
|
||
|
|
// Recarregar a HomeScreen para mostrar a próxima entrega
|
||
|
|
console.log('=== DEBUG: RECARREGANDO HOMESCREEN APÓS ROTEAMENTO ===');
|
||
|
|
|
||
|
|
// Navegar de volta para a HomeScreen com flag de recarregamento
|
||
|
|
// @ts-ignore
|
||
|
|
navigation.navigate('Home', {
|
||
|
|
refreshDeliveries: true,
|
||
|
|
routingUpdated: true
|
||
|
|
});
|
||
|
|
|
||
|
|
// Mostrar feedback para o usuário
|
||
|
|
Alert.alert(
|
||
|
|
"Roteamento Atualizado",
|
||
|
|
"A ordem das entregas foi atualizada com sucesso! A próxima entrega foi recalculada.",
|
||
|
|
[{ text: "OK" }]
|
||
|
|
);
|
||
|
|
|
||
|
|
} catch (error) {
|
||
|
|
// Tratamento de erro com feedback ao usuário
|
||
|
|
Alert.alert(
|
||
|
|
"Erro no Roteamento",
|
||
|
|
"Não foi possível atualizar a ordem das entregas. Tente novamente.",
|
||
|
|
[{ text: "OK" }]
|
||
|
|
);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### HomeScreen.tsx - Detecção de Parâmetros
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
useFocusEffect(
|
||
|
|
React.useCallback(() => {
|
||
|
|
// Verificar parâmetros da rota
|
||
|
|
const params = route.params as {
|
||
|
|
refreshDeliveries?: boolean;
|
||
|
|
routingUpdated?: boolean
|
||
|
|
} | undefined
|
||
|
|
|
||
|
|
const shouldRefresh = params?.refreshDeliveries
|
||
|
|
const routingUpdated = params?.routingUpdated
|
||
|
|
|
||
|
|
if (hasInitialized) {
|
||
|
|
// Se foi atualizado o roteamento, mostrar mensagem específica
|
||
|
|
if (routingUpdated) {
|
||
|
|
console.log("=== ROTEAMENTO ATUALIZADO - RECARREGANDO ENTREGAS ===")
|
||
|
|
}
|
||
|
|
|
||
|
|
loadDeliveries()
|
||
|
|
|
||
|
|
// Limpar os parâmetros após usar
|
||
|
|
if (shouldRefresh || routingUpdated) {
|
||
|
|
navigation.setParams({
|
||
|
|
refreshDeliveries: undefined,
|
||
|
|
routingUpdated: undefined
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}, [hasInitialized, route.params])
|
||
|
|
)
|
||
|
|
```
|
||
|
|
|
||
|
|
## Logs de Debug
|
||
|
|
|
||
|
|
### RoutesScreen - Envio do Roteamento
|
||
|
|
```
|
||
|
|
=== DEBUG: ROTA CALCULADA - ENVIANDO PARA API ===
|
||
|
|
Entregas otimizadas recebidas: 5
|
||
|
|
=== DEBUG: ROTEAMENTO ENVIADO COM SUCESSO ===
|
||
|
|
Resultado: { success: true, data: [...] }
|
||
|
|
=== DEBUG: RECARREGANDO HOMESCREEN APÓS ROTEAMENTO ===
|
||
|
|
```
|
||
|
|
|
||
|
|
### HomeScreen - Detecção de Recarregamento
|
||
|
|
```
|
||
|
|
=== HomeScreen useFocusEffect ===
|
||
|
|
hasInitialized: true
|
||
|
|
shouldRefresh: true
|
||
|
|
routingUpdated: true
|
||
|
|
route.params: { refreshDeliveries: true, routingUpdated: true }
|
||
|
|
=== ROTEAMENTO ATUALIZADO - RECARREGANDO ENTREGAS ===
|
||
|
|
=== INICIANDO CARREGAMENTO DE ENTREGAS ===
|
||
|
|
=== LIMPANDO PARÂMETROS DA ROTA ===
|
||
|
|
```
|
||
|
|
|
||
|
|
## Benefícios
|
||
|
|
|
||
|
|
### 🎯 **Atualização Automática**
|
||
|
|
- Próxima entrega é recalculada automaticamente
|
||
|
|
- Não requer ação manual do usuário
|
||
|
|
- Interface sempre sincronizada com o backend
|
||
|
|
|
||
|
|
### 🚀 **Experiência do Usuário**
|
||
|
|
- Feedback imediato sobre sucesso/falha
|
||
|
|
- Transição suave entre telas
|
||
|
|
- Indicação clara de que a ordem foi atualizada
|
||
|
|
|
||
|
|
### 🔧 **Robustez**
|
||
|
|
- Tratamento de erros com feedback ao usuário
|
||
|
|
- Logs detalhados para debug
|
||
|
|
- Limpeza automática de parâmetros
|
||
|
|
|
||
|
|
### 📱 **Integração**
|
||
|
|
- Compatível com sistema de navegação existente
|
||
|
|
- Não interfere com outras funcionalidades
|
||
|
|
- Mantém estado da aplicação consistente
|
||
|
|
|
||
|
|
## Cenários de Uso
|
||
|
|
|
||
|
|
### ✅ **Cenário de Sucesso**
|
||
|
|
1. Usuário otimiza rota no RoutesScreen
|
||
|
|
2. Sistema envia dados para API
|
||
|
|
3. API confirma sucesso
|
||
|
|
4. HomeScreen é recarregada automaticamente
|
||
|
|
5. Próxima entrega é atualizada
|
||
|
|
6. Usuário vê feedback de sucesso
|
||
|
|
|
||
|
|
### ❌ **Cenário de Erro**
|
||
|
|
1. Usuário otimiza rota no RoutesScreen
|
||
|
|
2. Sistema tenta enviar dados para API
|
||
|
|
3. API retorna erro
|
||
|
|
4. Usuário vê alerta de erro
|
||
|
|
5. HomeScreen não é recarregada
|
||
|
|
6. Usuário pode tentar novamente
|
||
|
|
|
||
|
|
## Compatibilidade
|
||
|
|
|
||
|
|
### ✅ **Plataformas**
|
||
|
|
- **Android**: Totalmente compatível
|
||
|
|
- **iOS**: Totalmente compatível
|
||
|
|
- **Expo SDK 53**: Compatível
|
||
|
|
|
||
|
|
### ✅ **Navegação**
|
||
|
|
- **React Navigation**: Integração nativa
|
||
|
|
- **Stack Navigation**: Suporte completo
|
||
|
|
- **Parâmetros de Rota**: Tipagem TypeScript
|
||
|
|
|
||
|
|
### ✅ **Estados**
|
||
|
|
- **Online**: Funciona normalmente
|
||
|
|
- **Offline**: Tratamento de erro adequado
|
||
|
|
- **Transições**: Suaves e responsivas
|
||
|
|
|
||
|
|
## Como Testar
|
||
|
|
|
||
|
|
### 1. **Teste de Roteamento**
|
||
|
|
```bash
|
||
|
|
# Build de produção
|
||
|
|
npx expo run:android --variant release
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. **Cenários de Teste**
|
||
|
|
- **Roteamento bem-sucedido**: Deve recarregar HomeScreen e mostrar próxima entrega
|
||
|
|
- **Erro de API**: Deve mostrar alerta de erro sem recarregar
|
||
|
|
- **Navegação manual**: Deve funcionar normalmente
|
||
|
|
- **Múltiplas atualizações**: Deve lidar com várias atualizações consecutivas
|
||
|
|
|
||
|
|
### 3. **Verificação de Logs**
|
||
|
|
- Verificar logs no console para confirmar fluxo
|
||
|
|
- Confirmar limpeza de parâmetros
|
||
|
|
- Validar atualização da próxima entrega
|
||
|
|
|
||
|
|
## Próximos Passos
|
||
|
|
|
||
|
|
### 🔮 **Melhorias Futuras**
|
||
|
|
- **Cache Inteligente**: Evitar recarregamento desnecessário
|
||
|
|
- **Sincronização em Tempo Real**: WebSocket para atualizações automáticas
|
||
|
|
- **Histórico de Roteamento**: Salvar histórico de mudanças
|
||
|
|
- **Otimização de Performance**: Lazy loading de dados
|