From bd429856a6739aeac60bef2b7fb8194c727727d2 Mon Sep 17 00:00:00 2001 From: Marcos Reifonas Date: Wed, 9 Sep 2026 16:56:28 +0000 Subject: [PATCH] fix: ordenacao numerica natural para marca de pecas (1, 2, 3... 10 em vez de alfabetica) --- src/components/apontamento/SeletorItensOtimizado.tsx | 4 ++-- src/components/expedicao/ItensRomaneioModal.tsx | 2 +- src/components/expedicao/RomaneioReportModal.tsx | 2 +- src/hooks/usePecasTable.tsx | 7 ++++++- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/components/apontamento/SeletorItensOtimizado.tsx b/src/components/apontamento/SeletorItensOtimizado.tsx index 384e25f..cb1aece 100644 --- a/src/components/apontamento/SeletorItensOtimizado.tsx +++ b/src/components/apontamento/SeletorItensOtimizado.tsx @@ -157,11 +157,11 @@ export const SeletorItensOtimizado: React.FC = ({ peca.marca.toLowerCase().includes(filtroNumeroPeca.toLowerCase()) ); } - return pecasFiltradas.sort((a, b) => a.marca.localeCompare(b.marca)); + return pecasFiltradas.sort((a, b) => a.marca.localeCompare(b.marca, undefined, { numeric: true, sensitivity: 'base' })); }, [pecasDisponiveis, filtroNumeroPeca]); const componentesOrdenados = useMemo(() => { - return componentesDisponiveis.sort((a, b) => a.marca.localeCompare(b.marca)); + return componentesDisponiveis.sort((a, b) => a.marca.localeCompare(b.marca, undefined, { numeric: true, sensitivity: 'base' })); }, [componentesDisponiveis]); const fetchPecas = useCallback(async (term: string) => { diff --git a/src/components/expedicao/ItensRomaneioModal.tsx b/src/components/expedicao/ItensRomaneioModal.tsx index 8dadf29..fdb8927 100644 --- a/src/components/expedicao/ItensRomaneioModal.tsx +++ b/src/components/expedicao/ItensRomaneioModal.tsx @@ -303,7 +303,7 @@ export const ItensRomaneioModal: React.FC = ({ return parseInt(aNum[0]) - parseInt(bNum[0]); } - return a.marca.localeCompare(b.marca); + return a.marca.localeCompare(b.marca, undefined, { numeric: true, sensitivity: 'base' }); }); }, [pecasDisponiveis, faseFilter, marcaFilter]); diff --git a/src/components/expedicao/RomaneioReportModal.tsx b/src/components/expedicao/RomaneioReportModal.tsx index 711243e..00a9bfa 100644 --- a/src/components/expedicao/RomaneioReportModal.tsx +++ b/src/components/expedicao/RomaneioReportModal.tsx @@ -88,7 +88,7 @@ export const RomaneioReportModal: React.FC = ({ if (typeof marcaA === 'number' && typeof marcaB === 'number') { return marcaA - marcaB; } - return String(marcaA).localeCompare(String(marcaB)); + return String(marcaA).localeCompare(String(marcaB), undefined, { numeric: true, sensitivity: 'base' }); }); }); diff --git a/src/hooks/usePecasTable.tsx b/src/hooks/usePecasTable.tsx index d49bfe2..62e014a 100644 --- a/src/hooks/usePecasTable.tsx +++ b/src/hooks/usePecasTable.tsx @@ -120,13 +120,18 @@ export const usePecasTable = (pecas: Peca[]) => { } if (typeof aValue === 'string' && typeof bValue === 'string') { - const comparison = aValue.localeCompare(bValue); + const comparison = aValue.localeCompare(bValue, undefined, { numeric: true, sensitivity: 'base' }); return sortOrder === 'asc' ? comparison : -comparison; } if (typeof aValue === 'number' && typeof bValue === 'number') { return sortOrder === 'asc' ? aValue - bValue : bValue - aValue; } + + if (aValue != null && bValue != null) { + const comparison = String(aValue).localeCompare(String(bValue), undefined, { numeric: true, sensitivity: 'base' }); + return sortOrder === 'asc' ? comparison : -comparison; + } return 0; });