refactor: otimização e refatoração do app

- Lazy loading de rotas com React.lazy + Suspense (code-splitting)
- main.tsx reduzido de 378 para ~55 linhas (roteamento data-driven)
- Novo routeConfig.ts e AppRoutes.tsx para configuração centralizada
- 601 console.logs dos componentes core migrados para logger centralizado
- Logger aprimorado com nível debug e tipagem melhorada
- Imports mal posicionados corrigidos (OptimizedCache, PerformanceMonitor)
- process.env.NODE_ENV substituído por import.meta.env.DEV (padrão Vite)
- QueryClient com retry backoff exponencial, gcTime e refetchOnWindowFocus
- Toaster duplicado removido do Layout.tsx (mantido no main.tsx)
- Vite build: chunks adicionais para date-fns, jspdf, lucide-react
- Dead code removido em ProtectedRouteByResource (branch unreachable)
- Nenhuma lógica de negócios alterada
This commit is contained in:
2026-08-09 22:18:41 +00:00
parent 7ed4f26b50
commit a7bb224a48
12 changed files with 473 additions and 423 deletions
+15 -340
View File
@@ -1,74 +1,37 @@
import React from 'react'
import ReactDOM from 'react-dom/client'
import { BrowserRouter, Routes, Route } from 'react-router-dom'
import { BrowserRouter } from 'react-router-dom'
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
import { ThemeProvider } from '@/hooks/useTheme'
import { Toaster } from '@/components/ui/sonner'
import { Layout } from './components/Layout'
import { AuthProvider } from './hooks/useAuth'
import { IconStyleProvider } from './hooks/useIconStyle'
import { ProtectedRoute } from './components/ProtectedRoute'
import { ProtectedAdminRoute } from './components/ProtectedAdminRoute'
import { ProtectedRouteByResource } from './components/ProtectedRouteByResource'
import { ErrorBoundary } from './components/ErrorBoundary'
import {
Auth,
Dashboard,
CadastroOF,
CadastroPecas,
SeletorOF,
CadastroPecasFiltrado,
Equipamentos,
Estoque,
OrdensFabricacao,
OFsConcluidas,
CronogramaOF,
Producao,
DiarioProducao,
ApontamentoProducao,
DashboardProducao,
Expedicao,
Obra,
ObraConfiguracoes,
Tarefas,
TarefasHistorico,
Sistema,
Configuracoes,
Admin,
UserManagement,
ThemeCustomizationPage,
NotFound,
Catalogos,
BibliotecaFerramentas,
BibliotecaNormas,
BibliotecaReferencias,
Sugestoes,
ConversoresDados,
PlanejamentoProducao,
PainelIndustrial,
PrioridadesFabricacao,
MapaInterativo,
Atribuicoes,
VerInconsistencias,
SolicitacaoCompras,
WebClone
} from './pages'
import { AppRoutes } from './components/AppRoutes'
import './index.css'
// ============================================================================
// Configuração do React Query com retry inteligente
// ============================================================================
const queryClient = new QueryClient({
defaultOptions: {
queries: {
retry: 3,
retryDelay: 1000,
staleTime: 1000 * 60 * 5, // 5 minutes
retryDelay: (attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 30000),
staleTime: 1000 * 60 * 5, // 5 minutos
gcTime: 1000 * 60 * 10, // 10 minutos de garbage collection
refetchOnWindowFocus: false,
},
},
})
// ============================================================================
// Render da aplicação
// ============================================================================
ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<ErrorBoundary>
@@ -77,295 +40,7 @@ ReactDOM.createRoot(document.getElementById('root')!).render(
<IconStyleProvider>
<ThemeProvider defaultTheme="system">
<BrowserRouter>
<Routes>
<Route path="/auth" element={<Auth />} />
{/* Dashboard */}
<Route path="/" element={
<ProtectedRoute>
<Layout>
<Dashboard />
</Layout>
</ProtectedRoute>
} />
<Route path="/dashboard" element={
<ProtectedRoute>
<Layout>
<Dashboard />
</Layout>
</ProtectedRoute>
} />
{/* Cadastro */}
<Route path="/cadastro-of" element={
<ProtectedRouteByResource resourceKey="cadastro-of">
<Layout>
<CadastroOF />
</Layout>
</ProtectedRouteByResource>
} />
<Route path="/seletor-of" element={
<ProtectedRouteByResource resourceKey="cadastro-pecas">
<Layout>
<SeletorOF />
</Layout>
</ProtectedRouteByResource>
} />
<Route path="/cadastro-pecas/:ofNumber" element={
<ProtectedRouteByResource resourceKey="cadastro-pecas">
<Layout>
<CadastroPecasFiltrado />
</Layout>
</ProtectedRouteByResource>
} />
{/* Equipamentos */}
<Route path="/equipamentos" element={
<ProtectedRouteByResource resourceKey="equipamentos">
<Layout>
<Equipamentos />
</Layout>
</ProtectedRouteByResource>
} />
{/* Ferramentas */}
<Route path="/ferramentas/conversores" element={
<ProtectedRouteByResource resourceKey="ferramentas-conversores">
<Layout>
<ConversoresDados />
</Layout>
</ProtectedRouteByResource>
} />
<Route path="/ferramentas/inconsistencias" element={
<ProtectedRouteByResource resourceKey="ferramentas-inconsistencias">
<Layout>
<VerInconsistencias />
</Layout>
</ProtectedRouteByResource>
} />
<Route path="/ferramentas/webclone" element={
<ProtectedRouteByResource resourceKey="ferramentas-webclone">
<Layout>
<WebClone />
</Layout>
</ProtectedRouteByResource>
} />
{/* Estoque */}
<Route path="/estoque" element={
<ProtectedRouteByResource resourceKey="estoque">
<Layout>
<Estoque />
</Layout>
</ProtectedRouteByResource>
} />
<Route path="/estoque/solicitacao-compras" element={
<ProtectedRouteByResource resourceKey="estoque-solicitacao-compras">
<Layout>
<SolicitacaoCompras />
</Layout>
</ProtectedRouteByResource>
} />
{/* OFs */}
<Route path="/ofs" element={
<ProtectedRouteByResource resourceKey="ofs-lista">
<Layout>
<OrdensFabricacao />
</Layout>
</ProtectedRouteByResource>
} />
<Route path="/ofs/cronograma" element={
<ProtectedRouteByResource resourceKey="ofs-cronograma">
<Layout>
<CronogramaOF />
</Layout>
</ProtectedRouteByResource>
} />
<Route path="/cadastro/ofs-concluidas" element={
<ProtectedRouteByResource resourceKey="ofs-concluidas">
<Layout>
<OFsConcluidas />
</Layout>
</ProtectedRouteByResource>
} />
{/* Produção */}
<Route path="/producao" element={
<ProtectedRouteByResource resourceKey="producao-visao">
<Layout>
<Producao />
</Layout>
</ProtectedRouteByResource>
} />
<Route path="/diario-producao" element={
<ProtectedRouteByResource resourceKey="diario-producao">
<Layout>
<DiarioProducao />
</Layout>
</ProtectedRouteByResource>
} />
<Route path="/apontamento-producao" element={
<ProtectedRouteByResource resourceKey="producao-apontamento">
<Layout>
<ApontamentoProducao />
</Layout>
</ProtectedRouteByResource>
} />
<Route path="/dashboard-producao" element={
<ProtectedRouteByResource resourceKey="producao-dashboard">
<Layout>
<DashboardProducao />
</Layout>
</ProtectedRouteByResource>
} />
{/* Painel Industrial */}
<Route path="/painel-industrial" element={
<ProtectedRouteByResource resourceKey="painel-industrial">
<Layout>
<PainelIndustrial />
</Layout>
</ProtectedRouteByResource>
} />
{/* Expedição */}
<Route path="/expedicao" element={
<ProtectedRouteByResource resourceKey="expedicao">
<Layout>
<Expedicao />
</Layout>
</ProtectedRouteByResource>
} />
{/* Obra */}
<Route path="/obra" element={
<ProtectedRouteByResource resourceKey="obra-dashboard">
<Layout>
<Obra />
</Layout>
</ProtectedRouteByResource>
} />
<Route path="/obra/configuracoes" element={
<ProtectedRouteByResource resourceKey="obra-configuracoes">
<Layout>
<ObraConfiguracoes />
</Layout>
</ProtectedRouteByResource>
} />
{/* Tarefas */}
<Route path="/tarefas" element={
<ProtectedRouteByResource resourceKey="tarefas-lista">
<Layout>
<Tarefas />
</Layout>
</ProtectedRouteByResource>
} />
<Route path="/tarefas/historico" element={
<ProtectedRouteByResource resourceKey="tarefas-historico">
<Layout>
<TarefasHistorico />
</Layout>
</ProtectedRouteByResource>
} />
{/* Biblioteca */}
<Route path="/biblioteca/catalogos" element={
<ProtectedRouteByResource resourceKey="biblioteca-catalogos">
<Layout>
<Catalogos />
</Layout>
</ProtectedRouteByResource>
} />
<Route path="/biblioteca/normas" element={
<ProtectedRouteByResource resourceKey="biblioteca-normas">
<Layout>
<BibliotecaNormas />
</Layout>
</ProtectedRouteByResource>
} />
<Route path="/biblioteca/referencias" element={
<ProtectedRouteByResource resourceKey="biblioteca-referencias">
<Layout>
<BibliotecaReferencias />
</Layout>
</ProtectedRouteByResource>
} />
{/* Sistema */}
<Route path="/sistema" element={
<ProtectedRouteByResource resourceKey="sistema">
<Layout>
<Sistema />
</Layout>
</ProtectedRouteByResource>
} />
{/* Sugestões */}
<Route path="/sugestoes" element={
<ProtectedRouteByResource resourceKey="sugestoes">
<Layout>
<Sugestoes />
</Layout>
</ProtectedRouteByResource>
} />
{/* Configurações */}
<Route path="/configuracoes" element={
<ProtectedRouteByResource resourceKey="configuracoes-gerais">
<Layout>
<Configuracoes />
</Layout>
</ProtectedRouteByResource>
} />
<Route path="/admin/theme-customization" element={
<ProtectedRouteByResource resourceKey="theme-customization">
<Layout>
<ThemeCustomizationPage />
</Layout>
</ProtectedRouteByResource>
} />
{/* Admin */}
<Route path="/admin" element={
<ProtectedAdminRoute>
<Layout>
<Admin />
</Layout>
</ProtectedAdminRoute>
} />
<Route path="/user-management" element={
<ProtectedAdminRoute>
<Layout>
<UserManagement />
</Layout>
</ProtectedAdminRoute>
} />
<Route path="/mapa-interativo" element={
<ProtectedAdminRoute>
<Layout>
<MapaInterativo />
</Layout>
</ProtectedAdminRoute>
} />
<Route path="/atribuicoes" element={
<ProtectedAdminRoute>
<Layout>
<Atribuicoes />
</Layout>
</ProtectedAdminRoute>
} />
<Route path="/prioridades-fabricacao" element={
<ProtectedRoute>
<Layout>
<PrioridadesFabricacao />
</Layout>
</ProtectedRoute>
} />
<Route path="*" element={<NotFound />} />
</Routes>
<AppRoutes />
</BrowserRouter>
<Toaster />
</ThemeProvider>