import React, { useState, useEffect } from "react"; import { Product } from "../types"; import { productService } from "../src/services/product.service"; import { authService } from "../src/services/auth.service"; import FilialSelector from "./FilialSelector"; import { X } from "lucide-react"; interface Stock { store: string; storeName: string; quantity: number; work: boolean; blocked: string; breakdown: number; transfer: number; allowDelivery: number; } interface ProductStoreDeliveryModalProps { isOpen: boolean; onClose: () => void; onConfirm: (stockStore: string, deliveryType: string) => void; product: Product | null; quantity?: number; } const ProductStoreDeliveryModal: React.FC = ({ isOpen, onClose, onConfirm, product, quantity = 1, }) => { const [selectedStore, setSelectedStore] = useState(""); const [deliveryType, setDeliveryType] = useState(""); const [stocks, setStocks] = useState([]); const [loading, setLoading] = useState(false); const [errors, setErrors] = useState<{ stockStore?: string; deliveryType?: string; }>({}); // Tipos de entrega - seguindo EXATAMENTE o padrão do Angular const deliveryTypes = [ { type: "RI", description: "Retira Imediata" }, { type: "RP", description: "Retira Posterior" }, { type: "EN", description: "Entrega" }, { type: "EF", description: "Encomenda" }, ]; // Carregar estoques quando o modal abrir useEffect(() => { if (isOpen && product?.code) { loadStocks(); } else { // Resetar estados quando fechar setSelectedStore(""); setDeliveryType(""); setStocks([]); setErrors({}); } }, [isOpen, product]); const loadStocks = async () => { if (!product?.code) return; try { setLoading(true); const store = authService.getStore(); if (!store) { throw new Error("Loja não encontrada. Faça login novamente."); } const productId = parseInt(product.code); if (isNaN(productId)) { throw new Error("ID do produto inválido"); } const stocksData = await productService.getProductStocks(store, productId); setStocks(stocksData); // Selecionar a primeira loja por padrão se houver apenas uma if (stocksData.length === 1) { setSelectedStore(stocksData[0].store); } } catch (err: any) { console.error("Erro ao carregar estoques:", err); setErrors({ stockStore: "Erro ao carregar lojas de estoque" }); } finally { setLoading(false); } }; const handleConfirm = () => { const newErrors: { stockStore?: string; deliveryType?: string } = {}; // Validar loja de estoque if (!selectedStore) { newErrors.stockStore = "Selecione uma loja de estoque"; } // Validar tipo de entrega if (!deliveryType) { newErrors.deliveryType = "Selecione um tipo de entrega"; } if (Object.keys(newErrors).length > 0) { setErrors(newErrors); return; } // Se tudo estiver válido, confirmar onConfirm(selectedStore, deliveryType); onClose(); }; if (!isOpen || !product) return null; return (
{/* Overlay */}
{/* Modal */}
{/* Header */}

{product.code} - {product.name}

{/* Content */}

Selecione a loja de estoque e forma de entrega

{/* LOCAL DE ESTOQUE */}
{loading ? (
Carregando lojas...
) : stocks.length > 0 ? ( { setSelectedStore(value); if (errors.stockStore) { setErrors((prev) => ({ ...prev, stockStore: undefined })); } }} placeholder="Selecione a loja..." label="" className="w-full" /> ) : (

Nenhuma loja de estoque disponível

)} {errors.stockStore && (
{errors.stockStore}
)}
{/* TIPO DE ENTREGA */}
{deliveryTypes.map((dt) => ( ))}
{errors.deliveryType && (
{errors.deliveryType}
)}

Informe a forma de entrega do produto

{/* Actions */}
); }; export default ProductStoreDeliveryModal;