From fa3408c2385ebbff0dd48358b467562f2d321f08 Mon Sep 17 00:00:00 2001 From: Marcos Reifonas Date: Fri, 21 Aug 2026 18:42:14 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20Auto-deploy:=20TrackSteelAPP=20a?= =?UTF-8?q?tualizado=20em=2021/08/2026=2018:42:14?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dashboard-producao/GraficoMestre.tsx | 108 ++++++++++-------- 1 file changed, 63 insertions(+), 45 deletions(-) diff --git a/src/components/dashboard-producao/GraficoMestre.tsx b/src/components/dashboard-producao/GraficoMestre.tsx index 2b7a710..487b7c2 100644 --- a/src/components/dashboard-producao/GraficoMestre.tsx +++ b/src/components/dashboard-producao/GraficoMestre.tsx @@ -6,8 +6,7 @@ import { XAxis, YAxis, CartesianGrid, - Tooltip, - Legend + Tooltip } from 'recharts'; import { format, parseISO } from 'date-fns'; import { ptBR } from 'date-fns/locale'; @@ -61,6 +60,66 @@ const CORES_FALLBACK = [ '#06b6d4', '#14b8a6', '#6366f1', '#10b981', '#eab308' ]; +interface CustomTooltipProps { + active?: boolean; + payload?: Array<{ + name: string; + value: number; + color: string; + dataKey: string; + }>; + label?: string; + modoExibicao: 'kg' | 'percent'; + selectedProcesso: string | null; +} + +// Componente Tooltip declarado fora da renderização principal para evitar recriação no render +const CustomTooltip: React.FC = ({ + active, + payload, + label, + modoExibicao, + selectedProcesso +}) => { + if (!active || !payload || !payload.length) return null; + + return ( +
+
+ Data + {label} +
+
+ {payload.map((entry, index) => { + const isHighlight = !selectedProcesso || selectedProcesso === entry.name; + return ( +
+
+ + {entry.name} +
+ + {modoExibicao === 'kg' + ? `${entry.value.toLocaleString('pt-BR')} kg` + : `${entry.value.toFixed(1)}%` + } + +
+ ); + })} +
+
+ ); +}; + export const GraficoMestre: React.FC = ({ processos, onProcessoClick, @@ -121,7 +180,7 @@ export const GraficoMestre: React.FC = ({ return datasOrdenadas.map(data => { const dataFormatada = format(parseISO(data), 'dd/MM', { locale: ptBR }); - const pontoGrafico: any = { + const pontoGrafico: Record = { data: dataFormatada, dataCompleta: data }; @@ -143,47 +202,6 @@ export const GraficoMestre: React.FC = ({ }); }, [processosOrdenados, modoExibicao]); - // Formatação customizada para o Tooltip estilo Glassmorphism - const CustomTooltip = ({ active, payload, label }: any) => { - if (!active || !payload || !payload.length) return null; - - return ( -
-
- Data - {label} -
-
- {payload.map((entry: any, index: number) => { - const isHighlight = !selectedProcesso || selectedProcesso === entry.name; - return ( -
-
- - {entry.name} -
- - {modoExibicao === 'kg' - ? `${entry.value.toLocaleString('pt-BR')} kg` - : `${entry.value.toFixed(1)}%` - } - -
- ); - })} -
-
- ); - }; - return (
{/* Barra Superior de Controles */} @@ -286,7 +304,7 @@ export const GraficoMestre: React.FC = ({ unit={modoExibicao === 'kg' ? ' kg' : '%'} tickFormatter={(val) => modoExibicao === 'kg' && val >= 1000 ? `${(val / 1000).toFixed(1)}k` : `${val}`} /> - } /> + } /> {processosOrdenados.map((processo, idx) => { const color = getCorProcesso(processo.nome, idx);