-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
c645d60
commit 590d7fc
Showing
4 changed files
with
228 additions
and
275 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -102,7 +102,6 @@ function Publicar() { | |
}); | ||
|
||
const [formDataCamping, setFormDataCamping] = useState({ | ||
subcategoria: '', | ||
titulo: '', | ||
descripcion: '', | ||
ubicacion: '', | ||
|
@@ -169,7 +168,7 @@ function Publicar() { | |
if (!formDataHospedaje.cantidadMaxima) newErrors.cantidadMaxima = 'Ingresa cantidad máxima de personas para la acomodación.'; | ||
if (!formDataHospedaje.cantidadMinima) newErrors.cantidadMinima = 'Ingresa cantidad mínima de personas para la acomodación.'; | ||
|
||
if (!formDataHospedaje.celularContacto && !formData.mailContacto) { | ||
if (!formDataHospedaje.celularContacto && !formDataHospedaje.mailContacto) { | ||
newErrors.contacto = 'Debes incluir al menos el número de celular o el mail de contacto.'; | ||
} else { | ||
if (formDataHospedaje.celularContacto && !/^\d+$/.test(formDataHospedaje.celularContacto)) { | ||
|
@@ -190,70 +189,110 @@ function Publicar() { | |
if (activeStep === 0 && !selectedType) { | ||
setError('Por favor selecciona tu tipo de publicación'); | ||
} else if (activeStep === 1) { | ||
// Ejecuta la validación del formulario según el tipo seleccionado | ||
if (selectedType === 'propiedad' && !validateFormHospedaje()) { | ||
console.log(errors); // Revisa los errores de validación | ||
return; // Detén el avance si la validación de Hospedaje falla | ||
} else if (selectedType === 'camping' && !validateFormCamping()) { | ||
console.log(errors); // Revisa los errores de validación | ||
return; // Detén el avance si la validación de Camping falla | ||
} else if (selectedType === 'eventos' && !validateFormEventos()) { | ||
console.log(errors); | ||
return; | ||
console.log('Errores antes de la validación:', errors); // Verifica el estado de errors | ||
|
||
let isValid = true; | ||
|
||
if (selectedType === 'propiedad') { | ||
isValid = validateFormHospedaje(); | ||
} else if (selectedType === 'camping') { | ||
isValid = validateFormCamping(); | ||
} else if (selectedType === 'eventos') { | ||
isValid = validateFormEventos(); | ||
if (isValid) { | ||
setActiveStep((prevActiveStep) => prevActiveStep + 1); | ||
} | ||
} | ||
setActiveStep((prevActiveStep) => prevActiveStep + 1); | ||
} else { | ||
setActiveStep((prevActiveStep) => prevActiveStep + 1); | ||
} | ||
}; | ||
|
||
if (!isValid) { | ||
console.log('Errores después de la validación:', errors); // Muestra errores | ||
return; // Detiene el avance si hay errores | ||
} | ||
} | ||
|
||
// Solo avanza si todas las validaciones pasaron | ||
setActiveStep((prevActiveStep) => prevActiveStep + 1); | ||
}; | ||
|
||
const validateFormCamping = () => { | ||
const newErrors = {}; | ||
|
||
if (!formDataCamping.titulo) {newErrors.titulo = 'Escribe un título.';} | ||
if (!formDataCamping.descripcion) {newErrors.descripcion = 'Escribe una descripción.';} | ||
|
||
// Validar campos requeridos | ||
if (!formDataCamping.titulo) newErrors.titulo = 'Escribe un título.'; | ||
if (!formDataCamping.descripcion) newErrors.descripcion = 'Escribe una descripción.'; | ||
|
||
// Validación para la ubicación | ||
if (!formDataCamping.ubicacion) { | ||
newErrors.ubicacion = 'Escribe una ubicación (Ej: Calle 123, Comuna, Ciudad).'; | ||
} else if (!/^[\w\s,.-]+$/.test(formDataCamping.ubicacion)) { // Simple regex for address format | ||
newErrors.ubicacion = 'Debes seguir el formato de dirección: Calle 123, Comuna, Ciudad.'; | ||
newErrors.ubicacion = 'Escribe una ubicación (Ej: Calle 123, Comuna, Ciudad).'; | ||
} | ||
|
||
// Validación del nombre de contacto | ||
if (!formDataCamping.nombreContacto) { | ||
newErrors.nombreContacto = 'Escribe el nombre de contacto.'; | ||
} | ||
|
||
// Validación de contacto (teléfono o correo) | ||
if (!formDataCamping.celularContacto && !formDataCamping.mailContacto) { | ||
newErrors.contacto = 'Debes incluir al menos el número de celular de contacto o el mail de contacto.'; | ||
newErrors.contacto = 'Debes incluir al menos el número de celular de contacto o el mail de contacto.'; | ||
} else { | ||
if (formDataCamping.celularContacto && !/^\d+$/.test(formDataCamping.celularContacto)) { // Validar que solo incluya números | ||
newErrors.celularContacto = 'El número de celular debe contener solo números. Ej: 9 8765 4321.'; | ||
} | ||
if (formDataCamping.mailContacto && !/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/.test(formDataCamping.mailContacto)) { // Simple regex for email | ||
newErrors.mailContacto = 'Escribir el email en su debido formato. Ej: [email protected]'; | ||
} | ||
if (formDataCamping.celularContacto && !/^\d+$/.test(formDataCamping.celularContacto)) { | ||
newErrors.celularContacto = 'El número de celular debe contener solo números. Ej: 9 8765 4321.'; | ||
} | ||
if (formDataCamping.mailContacto && !/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/.test(formDataCamping.mailContacto)) { | ||
newErrors.mailContacto = 'Escribir el email en su debido formato. Ej: [email protected]'; | ||
} | ||
} | ||
|
||
// Validación del precio | ||
if (!formDataCamping.precioPorNoche) { | ||
newErrors.precioPorNoche = 'Se debe escribir un precio por noche.'; | ||
newErrors.precioPorNoche = 'Se debe escribir un precio por noche.'; | ||
} | ||
|
||
// Validación de la disponibilidad | ||
if (formDataCamping.disponible === undefined) { | ||
newErrors.disponible = 'Debes indicar si está disponible o no.'; | ||
} | ||
|
||
// Validación de la página web (opcional) | ||
if (formDataCamping.paginaWeb && !/^(https?:\/\/)?([\w\-]+\.)+[\w\-]{2,4}(\/[\w\-\.]*)*$/.test(formDataCamping.paginaWeb)) { | ||
newErrors.paginaWeb = 'Debes escribir en el formato indicado de página web. Ej: https://www.ejemplo.com'; | ||
newErrors.paginaWeb = 'Debes escribir en el formato indicado de página web. Ej: https://www.ejemplo.com'; | ||
} | ||
|
||
setErrors(newErrors); | ||
return Object.keys(newErrors).length === 0; | ||
}; | ||
}; | ||
|
||
|
||
const handleInputChangeHospedaje = (field, value) => { | ||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
const handleInputChangeHospedaje = (field, value) => { | ||
setFormDataHospedaje((prev) => ({ ...prev, [field]: value })); | ||
// Si el campo tiene un error asociado, lo eliminamos | ||
if (errors[field]) { | ||
setErrors((prevErrors) => ({ ...prevErrors, [field]: undefined })); | ||
} | ||
}; | ||
|
||
|
||
const handleInputChangeCamping = (field, value) => { | ||
console.log(`Campo actualizado: ${field}, Valor: ${value}`); // Para depuración | ||
setFormDataCamping((prev) => ({ ...prev, [field]: value })); | ||
if (errors[field]) { | ||
setErrors((prevErrors) => ({ ...prevErrors, [field]: undefined })); | ||
} | ||
}; | ||
|
||
|
||
const handleInputChangeEventos = (field, value) => { | ||
setEventDetails((prev) => ({ ...prev, [field]: value })); | ||
|
@@ -433,34 +472,35 @@ function Publicar() { | |
)} | ||
|
||
<div> | ||
<Typography sx={{ mt: 2, mb: 1 }}>{getStepContent(activeStep)}</Typography> | ||
|
||
{/* Mostrar botón "Siguiente" solo en el primer paso para "notificaciones" */} | ||
{(selectedType !== 'notificaciones' || activeStep === 0) && ( | ||
<Box sx={{ display: 'flex', justifyContent: 'center', pt: 2 }}> | ||
{activeStep > 0 && selectedType !== 'notificaciones' && ( | ||
<Button onClick={handleBack} variant="contained" className='volver-button'> | ||
Volver | ||
</Button> | ||
)} | ||
{activeStep === steps.length - 1 && selectedType !== 'notificaciones' ? ( | ||
<Link to="/publicaciones"> | ||
<Button className='siguiente-button' variant='contained'> | ||
Finalizar | ||
</Button> | ||
</Link> | ||
) : ( | ||
<Button | ||
className='siguiente-button' | ||
variant="contained" | ||
onClick={handleNext} | ||
> | ||
Siguiente | ||
</Button> | ||
)} | ||
</Box> | ||
<Typography sx={{ mt: 2, mb: 1 }}>{getStepContent(activeStep)}</Typography> | ||
|
||
{/* Mostrar botón "Siguiente" solo si no es "notificaciones" */} | ||
{(selectedType !== 'notificaciones' || activeStep === 0) && ( | ||
<Box sx={{ display: 'flex', justifyContent: 'center', pt: 2 }}> | ||
{activeStep > 0 && selectedType !== 'notificaciones' && ( | ||
<Button onClick={handleBack} variant="contained" className='volver-button'> | ||
Volver | ||
</Button> | ||
)} | ||
</div> | ||
{activeStep === steps.length - 1 && selectedType !== 'notificaciones' ? ( | ||
<Link to="/publicaciones"> | ||
<Button className='siguiente-button' variant='contained'> | ||
Finalizar | ||
</Button> | ||
</Link> | ||
) : ( | ||
<Button | ||
className='siguiente-button' | ||
variant="contained" | ||
onClick={handleNext} | ||
> | ||
Siguiente | ||
</Button> | ||
)} | ||
</Box> | ||
)} | ||
</div> | ||
|
||
</Box> | ||
</main> | ||
|
||
|
Oops, something went wrong.