# Solução Final - Problema de Timing ## Problema Identificado Através dos logs do console, identificamos que: 1. ✅ **Dados carregam corretamente** - 39 cantoneiras 2. ✅ **Função `exibirCantoneiras()` é chamada** 3. ❌ **MAS a tabela não é preenchida** ### Causa Raiz: TIMING O problema é a **ordem de execução**: ``` 1. getCantoneirasContent() chamada (linha 13) 2. Seção cantoneiras carregada (linha 41) 3. Seção cantoneiras exibida (linha 52) 4. Carregando cantoneiras do cache (linha 660) ← TARDE DEMAIS! ``` A função `carregarCantoneiras()` está sendo chamada **ANTES** do HTML ser renderizado no DOM! ## Soluções Aplicadas ### 1. Aumentar Timeout e Adicionar Retry ```javascript setTimeout(() => { if (sectionId === 'cantoneiras' && typeof carregarCantoneiras === 'function') { const tbody = document.getElementById('cantoneiras-tbody'); if (tbody) { carregarCantoneiras(); } else { // RETRY após 500ms setTimeout(() => { const tbody2 = document.getElementById('cantoneiras-tbody'); if (tbody2) { carregarCantoneiras(); } }, 500); } } }, 200); // Aumentado de 100ms para 200ms ``` ### 2. Adicionar Função `switchPerfilTab()` A função estava sendo chamada mas não existia: ```javascript function switchPerfilTab(index) { // Atualizar botões document.querySelectorAll('.tab-btn').forEach((btn, i) => { if (i === index) { btn.classList.add('active'); } else { btn.classList.remove('active'); } }); // Atualizar conteúdo document.querySelectorAll('.tab-content').forEach((content, i) => { if (i === index) { content.classList.add('active'); } else { content.classList.remove('active'); } }); } ``` ### 3. Adicionar Função `calcularPrecoCantoneira()` Função para a calculadora de preços: ```javascript function calcularPrecoCantoneira() { const peso = parseFloat(document.getElementById('calc-peso')?.value) || 0; const comprimento = parseFloat(document.getElementById('calc-comprimento')?.value) || 0; const quantidade = parseInt(document.getElementById('calc-quantidade')?.value) || 0; const precoKg = parseFloat(document.getElementById('calc-preco-kg')?.value) || 0; // Cálculos... const pesoTotal = peso * comprimento * quantidade; const precoTotal = pesoTotal * precoKg; // Exibir resultado... } ``` ## Como Testar ### 1. Limpar Cache ``` Ctrl+Shift+Delete → Limpar tudo ``` ### 2. Hard Refresh ``` Ctrl+Shift+R (ou F5 várias vezes) ``` ### 3. Abrir Console ``` F12 → Aba Console ``` ### 4. Testar Cantoneiras 1. Clique em "Cantoneiras" 2. **Aguarde 1 segundo** 3. Verifique no console: ``` 🔧 Chamando carregarCantoneiras() 📋 Elemento tbody encontrado: SIM 📊 Carregando dados das cantoneiras... ✅ 39 cantoneiras carregadas 📋 exibirCantoneiras() chamada com 39 itens ✅ Elemento tbody encontrado:
✅ Gerando HTML para 39 cantoneiras... ``` 4. **A tabela deve aparecer com 39 linhas** ### 5. Testar Tabs 1. Clique nas tabs: "Especificações", "Fabricantes", "Preços 2025", "Aplicações" 2. O conteúdo deve trocar 3. Verifique no console: "🔄 Trocando para tab X" ### 6. Testar Calculadora 1. Vá na tab "Preços 2025" 2. Preencha os campos 3. Clique em "Calcular Preço Total" 4. Deve mostrar o resultado ## Se Ainda Não Funcionar ### Verificar no Console: Se aparecer: ``` ❌ Elemento tbody não existe! Tentando novamente em 500ms... ✅ Elemento encontrado na segunda tentativa ``` Significa que o timeout de 200ms não foi suficiente. Nesse caso: 1. Aumentar o timeout inicial para 300ms ou 500ms 2. Ou usar `MutationObserver` para detectar quando o elemento é adicionado ### Solução Alternativa: MutationObserver Se o problema persistir, podemos usar um observer: ```javascript function aguardarElemento(id, callback) { const elemento = document.getElementById(id); if (elemento) { callback(elemento); return; } const observer = new MutationObserver(() => { const el = document.getElementById(id); if (el) { observer.disconnect(); callback(el); } }); observer.observe(document.body, { childList: true, subtree: true }); } // Uso: aguardarElemento('cantoneiras-tbody', () => { carregarCantoneiras(); }); ``` ## Problemas Relacionados Resolvidos 1. ✅ **Accordion não funciona** - Função `switchPerfilTab()` criada 2. ✅ **Calculadora não funciona** - Função `calcularPrecoCantoneira()` criada 3. ✅ **Timing do carregamento** - Retry adicionado ## Arquivos Modificados 1. `app.js` - Timeout aumentado + retry logic 2. `js/sections/perfis-catalog.js` - Funções `switchPerfilTab()` e `calcularPrecoCantoneira()` adicionadas ## Próximos Passos Após confirmar que as cantoneiras funcionam: 1. Implementar os outros 9 tipos de perfis 2. Usar o mesmo padrão de timing 3. Testar cada um individualmente