import React, { useState, useEffect } from 'react'; import { Modal, Box, Typography, TextField, Button, CircularProgress, Alert, FormControlLabel, Checkbox } from '@mui/material'; import type { PubliSeccionDto } from '../../../models/dtos/Distribucion/PubliSeccionDto'; import type { CreatePubliSeccionDto } from '../../../models/dtos/Distribucion/CreatePubliSeccionDto'; import type { UpdatePubliSeccionDto } from '../../../models/dtos/Distribucion/UpdatePubliSeccionDto'; const modalStyle = { /* ... (mismo estilo) ... */ position: 'absolute' as 'absolute', top: '50%', left: '50%', transform: 'translate(-50%, -50%)', width: { xs: '90%', sm: 450 }, bgcolor: 'background.paper', border: '2px solid #000', boxShadow: 24, p: 4, }; interface PubliSeccionFormModalProps { open: boolean; onClose: () => void; onSubmit: (data: CreatePubliSeccionDto | UpdatePubliSeccionDto, idSeccion?: number) => Promise; idPublicacion: number; // Siempre necesario para la creación initialData?: PubliSeccionDto | null; errorMessage?: string | null; clearErrorMessage: () => void; } const PubliSeccionFormModal: React.FC = ({ open, onClose, onSubmit, idPublicacion, initialData, errorMessage, clearErrorMessage }) => { const [nombre, setNombre] = useState(''); const [estado, setEstado] = useState(true); // Default a activa const [loading, setLoading] = useState(false); const [localErrorNombre, setLocalErrorNombre] = useState(null); const isEditing = Boolean(initialData); useEffect(() => { if (open) { setNombre(initialData?.nombre || ''); setEstado(initialData ? initialData.estado : true); setLocalErrorNombre(null); clearErrorMessage(); } }, [open, initialData, clearErrorMessage]); const validate = (): boolean => { let isValid = true; if (!nombre.trim()) { setLocalErrorNombre('El nombre de la sección es obligatorio.'); isValid = false; } return isValid; }; const handleInputChange = () => { if (localErrorNombre) setLocalErrorNombre(null); if (errorMessage) clearErrorMessage(); }; const handleSubmit = async (event: React.FormEvent) => { event.preventDefault(); clearErrorMessage(); if (!validate()) return; setLoading(true); try { if (isEditing && initialData) { const dataToSubmit: UpdatePubliSeccionDto = { nombre, estado }; await onSubmit(dataToSubmit, initialData.idSeccion); } else { const dataToSubmit: CreatePubliSeccionDto = { idPublicacion, // Viene de props nombre, estado }; await onSubmit(dataToSubmit); } onClose(); } catch (error: any) { console.error("Error en submit de PubliSeccionFormModal:", error); // El error de API se maneja en la página } finally { setLoading(false); } }; return ( {isEditing ? 'Editar Sección' : 'Agregar Nueva Sección'} {setNombre(e.target.value); handleInputChange();}} margin="dense" fullWidth error={!!localErrorNombre} helperText={localErrorNombre || ''} disabled={loading} autoFocus /> setEstado(e.target.checked)} disabled={loading}/>} label="Activa" sx={{mt:1}} /> {errorMessage && {errorMessage}} ); }; export default PubliSeccionFormModal;