From d980962570e1bfaa75f310da60025bb8259a364f Mon Sep 17 00:00:00 2001 From: JuruSysadmin Date: Thu, 15 Jan 2026 17:31:29 -0300 Subject: [PATCH] feat(orders): add status transfer filter with multi-select support --- .../orders/components/OrderTableColumns.tsx | 2 +- src/features/orders/components/SearchBar.tsx | 15 +++++++++++++++ src/features/orders/hooks/useOrderFilters.ts | 1 + .../orders/schemas/order-filters.schema.ts | 17 ++++++++++++++++- 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/features/orders/components/OrderTableColumns.tsx b/src/features/orders/components/OrderTableColumns.tsx index 1ac8d3f..d69723d 100644 --- a/src/features/orders/components/OrderTableColumns.tsx +++ b/src/features/orders/components/OrderTableColumns.tsx @@ -362,7 +362,7 @@ export const createOrderColumns = ( }, { field: 'deliveryLocal', - headerName: 'Local Entrega', + headerName: 'Praça', width: 180, minWidth: 160, renderCell: (params: Readonly) => ( diff --git a/src/features/orders/components/SearchBar.tsx b/src/features/orders/components/SearchBar.tsx index cc69a02..a21dbdb 100644 --- a/src/features/orders/components/SearchBar.tsx +++ b/src/features/orders/components/SearchBar.tsx @@ -56,9 +56,11 @@ interface LocalFilters { sellerId: string | null; sellerName: string | null; deliveryType: string[] | null; + statusTransfer: string[] | null; } const DELIVERY_TYPES = ['RI', 'EN', 'EF', 'RP']; +const STATUS_TRANSFER_OPTIONS = ['Em Trânsito', 'Em Separação', 'Aguardando Separação', 'Concluída']; const getInitialLocalFilters = ( urlFilters: Partial @@ -78,6 +80,7 @@ const getInitialLocalFilters = ( sellerId: urlFilters.sellerId ?? null, sellerName: urlFilters.sellerName ?? null, deliveryType: urlFilters.deliveryType ?? null, + statusTransfer: urlFilters.statusTransfer ?? null, }); export const SearchBar = () => { @@ -140,6 +143,7 @@ export const SearchBar = () => { productId: null, productName: null, deliveryType: null, + statusTransfer: null, }; setLocalFilters(getInitialLocalFilters(resetState)); @@ -205,6 +209,7 @@ export const SearchBar = () => { localFilters.partnerId, localFilters.productId, localFilters.deliveryType?.length, + localFilters.statusTransfer?.length, ].filter(Boolean).length; const toggleDrawer = (open: boolean) => (event: React.KeyboardEvent | React.MouseEvent) => { @@ -470,6 +475,16 @@ export const SearchBar = () => { renderInput={(params) => } /> + {/* Status de Transferência */} + updateLocalFilter('statusTransfer', newValue.length > 0 ? newValue : null)} + renderInput={(params) => } + /> + diff --git a/src/features/orders/hooks/useOrderFilters.ts b/src/features/orders/hooks/useOrderFilters.ts index 5977c0a..fdbcd92 100644 --- a/src/features/orders/hooks/useOrderFilters.ts +++ b/src/features/orders/hooks/useOrderFilters.ts @@ -35,6 +35,7 @@ export const useOrderFilters = () => { searchTriggered: parseAsBoolean.withDefault(false), deliveryType: parseAsArrayOf(parseAsString, ','), + statusTransfer: parseAsArrayOf(parseAsString, ','), }, { shallow: true, diff --git a/src/features/orders/schemas/order-filters.schema.ts b/src/features/orders/schemas/order-filters.schema.ts index f7f17f8..0ad9fed 100644 --- a/src/features/orders/schemas/order-filters.schema.ts +++ b/src/features/orders/schemas/order-filters.schema.ts @@ -45,7 +45,22 @@ export const findOrdersSchema = z.object({ onlyPendingTransfer: z.coerce.boolean().optional(), statusTransfer: z - .enum(['Em Trânsito', 'Em Separação', 'Aguardando Separação', 'Concluída']) + .union([ + z.enum([ + 'Em Trânsito', + 'Em Separação', + 'Aguardando Separação', + 'Concluída', + ]), + z.array( + z.enum([ + 'Em Trânsito', + 'Em Separação', + 'Aguardando Separação', + 'Concluída', + ]) + ), + ]) .optional(), markId: z.coerce.number().optional(),