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 = () => {
+