diff --git a/src/pages/ProductionPlans.tsx b/src/pages/ProductionPlans.tsx index 0d231cc..bfb47f4 100644 --- a/src/pages/ProductionPlans.tsx +++ b/src/pages/ProductionPlans.tsx @@ -1,6 +1,6 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; import { Link } from 'react-router-dom'; -import { ArrowLeft, CheckCircle2, ClipboardList, Factory, Loader2, PlayCircle } from 'lucide-react'; +import { ArrowLeft, CheckCircle2, ClipboardList, Factory, Loader2, PlayCircle, type LucideIcon } from 'lucide-react'; import { fetchProductionPlans, updateProductionPlanStatus } from '../dataService'; import type { ProductionOrderStatus, ProductionPlan } from '../types'; @@ -16,6 +16,11 @@ const statusOptions: Array<{ value: ProductionOrderStatus; label: string; classN const statusStyle = (status: string) => statusOptions.find(option => option.value === status)?.className || 'border-dark-border bg-dark-input text-dark-muted'; const formatNumber = (value: number) => new Intl.NumberFormat('pt-BR', { maximumFractionDigits: 2 }).format(value); const formatDate = (value: string | null) => value ? new Intl.DateTimeFormat('pt-BR').format(new Date(`${value.slice(0, 10)}T00:00:00`)) : '-'; +const planMetrics: Array<{ label: string; value: string | number; icon: LucideIcon; tone: string }> = [ + { label: 'Planos ativos', value: 0, icon: ClipboardList, tone: 'text-brand-primary' }, + { label: 'OPs planejadas', value: 0, icon: Factory, tone: 'text-sky-300' }, + { label: 'Unidades em fluxo', value: 0, icon: PlayCircle, tone: 'text-amber-300' } +]; const ProductionPlans = () => { const [plans, setPlans] = useState([]); @@ -69,13 +74,14 @@ const ProductionPlans = () => {
- {[ - ['Planos ativos', activePlans.length, ClipboardList, 'text-brand-primary'], - ['OPs planejadas', activePlans.reduce((total, plan) => total + plan.orderCount, 0), Factory, 'text-sky-300'], - ['Unidades em fluxo', formatNumber(totalOpenQuantity), PlayCircle, 'text-amber-300'] - ].map(([label, value, Icon, tone]) => { - const MetricIcon = Icon as typeof ClipboardList; - return

{label}

{value}

; + {planMetrics.map(metric => { + const value = metric.label === 'Planos ativos' + ? activePlans.length + : metric.label === 'OPs planejadas' + ? activePlans.reduce((total, plan) => total + plan.orderCount, 0) + : formatNumber(totalOpenQuantity); + const MetricIcon = metric.icon; + return

{metric.label}

{value}

; })}