From ed750ac4ce76ffdb7e1b13e939d8c296c78c25c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cau=C3=AA=20Faleiros?= Date: Thu, 27 Aug 2026 13:43:17 -0300 Subject: [PATCH] Organize quality under supplies --- src/components/Layout.tsx | 3 +-- src/pages/Cutting.tsx | 10 +++++----- src/pages/Supplies.tsx | 2 ++ 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx index 1d6d2d1..4f2f80d 100644 --- a/src/components/Layout.tsx +++ b/src/components/Layout.tsx @@ -1,6 +1,6 @@ import { useState, useEffect } from 'react'; import { Outlet, Link, useLocation } from 'react-router-dom'; -import { LayoutDashboard, Users, BarChart3, ChevronLeft, ChevronRight, Package, LogOut, Megaphone, Grid3X3, Shield, ShieldCheck, Moon, Sun, Tags, Boxes, ClipboardList, Menu, X, BriefcaseBusiness, Radio } from 'lucide-react'; +import { LayoutDashboard, Users, BarChart3, ChevronLeft, ChevronRight, Package, LogOut, Megaphone, Grid3X3, Shield, Moon, Sun, Tags, Boxes, ClipboardList, Menu, X, BriefcaseBusiness, Radio } from 'lucide-react'; import type { DateRange, OrderData } from '../types'; import { isSuperAdmin, logout } from '../dataService'; import { rangeForLastDays } from '../dateRanges'; @@ -83,7 +83,6 @@ const Layout = () => { { name: 'Suprimentos', href: '/supplies', icon: Boxes }, { name: 'Planos de Produção', href: '/production-plans', icon: ClipboardList }, { name: 'Ordens de Produção', href: '/production-orders', icon: Package }, - { name: 'Qualidade', href: '/production-quality', icon: ShieldCheck }, ], }, { diff --git a/src/pages/Cutting.tsx b/src/pages/Cutting.tsx index 6a1dc04..2a5ddaa 100644 --- a/src/pages/Cutting.tsx +++ b/src/pages/Cutting.tsx @@ -1,4 +1,4 @@ -import { useEffect, useMemo, useState } from 'react'; +import { useCallback, useEffect, useMemo, useState } from 'react'; import { Link, useOutletContext, useSearchParams } from 'react-router-dom'; import { AlertTriangle, ArrowLeft, ArrowRight, Check, ChevronDown, ClipboardList, Download, Eye, Layers3, Pencil, RotateCcw, Ruler, Save as SaveIcon, Scissors, Search, Settings2, UserRound, X } from 'lucide-react'; import DateRangePicker from '../components/DateRangePicker'; @@ -394,10 +394,10 @@ const Cutting = () => { }; }, [cutPlan.needRows, materialReadinessByProductId]); - const getPreviewQuantity = (row: CutPlanSkuRow) => { + const getPreviewQuantity = useCallback((row: CutPlanSkuRow) => { const override = Number((previewQuantityOverrides[row.id] || '').replace(',', '.')); return Number.isFinite(override) && override > 0 ? Math.round(override) : row.suggestedCutQuantity; - }; + }, [previewQuantityOverrides]); const selectedPreviewRows = useMemo(() => { const selectedIds = new Set(selectedPreviewRowIds); @@ -405,7 +405,7 @@ const Cutting = () => { }, [rowsAvailableForOrder, selectedPreviewRowIds]); const orderPreviewTotalUnits = useMemo(() => ( selectedPreviewRows.reduce((total, row) => total + getPreviewQuantity(row), 0) - ), [previewQuantityOverrides, selectedPreviewRows]); + ), [getPreviewQuantity, selectedPreviewRows]); const selectedResponsibleUser = useMemo(() => ( operationalUsers.find((user) => user.id === productionPlanForm.responsibleUserId && user.name === productionPlanForm.responsibleName) || null ), [operationalUsers, productionPlanForm.responsibleName, productionPlanForm.responsibleUserId]); @@ -434,7 +434,7 @@ const Cutting = () => { }); }); return Array.from(requirements.values()).sort((a, b) => a.label.localeCompare(b.label, 'pt-BR')); - }, [compositionsByProductId, previewQuantityOverrides, selectedPreviewRows]); + }, [compositionsByProductId, getPreviewQuantity, selectedPreviewRows]); const selectedLotReservations = useMemo(() => ( selectedMaterialRequirements.flatMap(requirement => { diff --git a/src/pages/Supplies.tsx b/src/pages/Supplies.tsx index b2db5e9..9f7cd72 100644 --- a/src/pages/Supplies.tsx +++ b/src/pages/Supplies.tsx @@ -22,6 +22,7 @@ import { Save, Search, Scissors, + ShieldCheck, Truck, Trash2, Warehouse, @@ -416,6 +417,7 @@ const SuppliesHub = () => { +