-
Servicios en GeoRent
+
Servicios en GeoMapp
GeoRent, aplicación social, permite georreferenciar toda la oferta de servicios y comercio afín que se encuentra en tu sector.
Locatarios y pequeños emprendedores de cada lugar podrán georreferenciar sus locales y negocios de una manera rápida y sencilla, potenciando su visibilidad frente a la demanda de productos y servicios que se generan durante todo el año; sobre todo, en los períodos de incremento de veraneantes en época estival.
La solución de búsqueda de servicios en mapas geolocalizados, permite, durante todo el año, ser un elemento de vital importancia para la potenciación de cada negocio de la zona, y al mismo tiempo, fomentar la aparición de nuevos emprendimientos que den crecimiento al sector y su gente.
diff --git a/src/pages/users/zcamping.jsx b/src/pages/users/zcamping.jsx
index bcb7857..169dc04 100644
--- a/src/pages/users/zcamping.jsx
+++ b/src/pages/users/zcamping.jsx
@@ -15,31 +15,62 @@ const mapContainerStyle = {
};
const center = {
- lat: -33.4489, // Cambia esto a la latitud de tu ubicación inicial
- lng: -70.6693 // Cambia esto a la longitud de tu ubicación inicial
+ lat: -33.4489,
+ lng: -70.6693
};
-function CampingForm({ formData, errors, onInputChange, onNext }) {
+function CampingForm({ onNext }) {
const [markerPosition, setMarkerPosition] = useState(center);
const [userLocation, setUserLocation] = useState(null);
+ const [formData, setFormData] = useState({
+ subcategoria: '',
+ titulo: '',
+ descripcion: '',
+ ubicacion: '',
+ numeroUbicacion: '',
+ nombreContacto: '',
+ celularContacto: '',
+ mailContacto: '',
+ instagram: '',
+ facebook: '',
+ paginaWeb: '',
+ precioPorNoche: '',
+ disponible: false
+ });
+ const [errors, setErrors] = useState({});
- const handleMapClick = (event) => {
+ const getAddressFromLatLng = async (lat, lng) => {
+ const apiKey = "AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E"; // Replace with your API key
+ const response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`);
+ const data = await response.json();
+ if (data.results && data.results.length > 0) {
+ return data.results[0].formatted_address;
+ } else {
+ return '';
+ }
+ };
+
+ const handleMapClick = async (event) => {
const lat = event.latLng.lat();
const lng = event.latLng.lng();
setMarkerPosition({ lat, lng });
- onInputChange('ubicacion', `Lat: ${lat}, Lng: ${lng}`);
+
+ const address = await getAddressFromLatLng(lat, lng);
+ setFormData((prev) => ({ ...prev, ubicacion: address }));
};
useEffect(() => {
if (navigator.geolocation) {
- navigator.geolocation.getCurrentPosition(position => {
+ navigator.geolocation.getCurrentPosition(async (position) => {
const newLocation = {
lat: position.coords.latitude,
lng: position.coords.longitude,
};
setUserLocation(newLocation);
setMarkerPosition(newLocation);
- onInputChange('ubicacion', `Lat: ${position.coords.latitude}, Lng: ${position.coords.longitude}`);
+
+ const address = await getAddressFromLatLng(newLocation.lat, newLocation.lng);
+ setFormData((prev) => ({ ...prev, ubicacion: address }));
}, () => {
alert("No se pudo obtener la ubicación.");
});
@@ -48,32 +79,23 @@ function CampingForm({ formData, errors, onInputChange, onNext }) {
}
}, []);
+ const handleInputChange = (field, value) => {
+ setFormData(prev => ({ ...prev, [field]: value }));
+ if (errors[name]) {
+ setErrors((prevErrors) => ({ ...prevErrors, [name]: undefined }));
+ }
+ };
+
const validateForm = () => {
const newErrors = {};
if (!formData.titulo) newErrors.titulo = 'Escribe un título.';
if (!formData.descripcion) newErrors.descripcion = 'Escribe una descripción.';
if (!formData.ubicacion) {
newErrors.ubicacion = 'Escribe una ubicación (Ej: Calle 123, Comuna, Ciudad).';
- } else if (!/^[\w\s,.-]+$/.test(formData.ubicacion)) {
- newErrors.ubicacion = 'Debes seguir el formato de dirección: Calle 123, Comuna, Ciudad.';
}
-
if (!formData.celularContacto && !formData.mailContacto) {
newErrors.contacto = 'Debes incluir al menos el número de celular de contacto o el mail de contacto.';
- } else {
- if (formData.celularContacto && !/^\d+$/.test(formData.celularContacto)) {
- newErrors.celularContacto = 'El número de celular debe contener solo números. Ej: 9 8765 4321.';
- }
- if (formData.mailContacto && !/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/.test(formData.mailContacto)) {
- newErrors.mailContacto = 'Escribir el email en su debido formato. Ej: usuario@dominio.com';
- }
- }
-
- if (!formData.precioPorNoche) newErrors.precioPorNoche = 'Se debe escribir un precio por noche.';
- if (formData.paginaWeb && !/^(https?:\/\/)?([\w\-]+\.)+[\w\-]{2,4}(\/[\w\-\.]*)*$/.test(formData.paginaWeb)) {
- 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;
};
@@ -91,50 +113,47 @@ function CampingForm({ formData, errors, onInputChange, onNext }) {
);
}
CampingForm.propTypes = {
- formData: PropTypes.object.isRequired,
- errors: PropTypes.object.isRequired,
- onInputChange: PropTypes.func.isRequired,
onNext: PropTypes.func.isRequired,
};
diff --git a/src/pages/users/zcultura.jsx b/src/pages/users/zcultura.jsx
index 8f896ee..d7e06a6 100644
--- a/src/pages/users/zcultura.jsx
+++ b/src/pages/users/zcultura.jsx
@@ -8,8 +8,8 @@ import {
FormControlLabel,
Typography,
} from '@mui/material';
-//------------new
-import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api'; // Importar componentes de Google Maps
+import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api';
+
const mapContainerStyle = {
height: "400px",
width: "100%"
@@ -19,265 +19,231 @@ const center = {
lat: -33.4489, // Cambia esto a la latitud de tu ubicación inicial
lng: -70.6693 // Cambia esto a la longitud de tu ubicación inicial
};
-//-----------new
-
function CulturaForm({ handleNext }) {
- //-----------new
- const [markerPosition, setMarkerPosition] = useState(center); // Estado para la posición del marcador
- const [userLocation, setUserLocation] = useState(null); // Estado para la ubicación del usuario
-
- const handleMapClick = async (event) => {
- const lat = event.latLng.lat();
- const lng = event.latLng.lng();
- setMarkerPosition({ lat, lng }); // Actualiza la posición del marcador
- // Aquí puedes agregar lógica para convertir las coordenadas en una dirección si lo deseas
- //const address = await getAddressFromLatLng(lat, lng); //new
- setFormData((prev) => ({ ...prev, ubicacion: `Lat: ${lat}, Lng: ${lng}` })); // Actualiza el campo de ubicación
- };
-
- useEffect(() => {
- // Obtener ubicación actual del usuario
- if (navigator.geolocation) {
- navigator.geolocation.getCurrentPosition(position => {
- const newLocation = {
- lat: position.coords.latitude,
- lng: position.coords.longitude,
- };
- setUserLocation(newLocation);
- setMarkerPosition(newLocation);
- //setFormData(prev => ({ ...prev, ubicacion: address })); //new
- setFormData(prev => ({ ...prev, ubicacion: `Lat: ${position.coords.latitude}, Lng: ${position.coords.longitude}` }));
- }, () => {
- alert("No se pudo obtener la ubicación.");
- });
- } else {
- alert("Geolocalización no es soportada en este navegador.");
- }
- }, []);
-
- /*const getAddressFromLatLng = async (lat, lng) => {
- const apiKey = "AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E"; // Reemplaza con tu API key
- const response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`);
- const data = await response.json();
- if (data.results && data.results.length > 0) {
- return data.results[0].formatted_address; // Retorna la primera dirección formateada
- } else {
- return ''; // Retorna vacío si no se encuentra dirección
- }
- };*/
- //-----------new
-
- const [formData, setFormData] = useState({
- titulo: '',
- descripcion: '',
- ubicacion: '',
- numeroUbicacion: '',
- nombreContacto: '',
- celularContacto: '',
- mailContacto: '',
- instagram: '',
- facebook: '',
- paginaWeb: '',
- disponible: false,
- });
-
- const [errors, setErrors] = useState({});
-
- const handleInputChange = (field, value) => {
- setFormData(prev => ({ ...prev, [field]: value }));
- setErrors(prev => ({ ...prev, [field]: '' })); // Reset error when value changes
- };
-
-
- const validateForm = () => {
- const newErrors = {};
-
- if (!formData.titulo) {newErrors.titulo = 'Escribe un título.';}
- if (!formData.descripcion) {newErrors.descripcion = 'Escribe una descripción.';}
- if (!formData.ubicacion) {
- newErrors.ubicacion = 'Escribe una ubicación (Ej: Calle 123, Comuna, Ciudad).';
- } else if (!/^[\w\s,.-]+$/.test(formData.ubicacion)) { // Simple regex for address format
- newErrors.ubicacion = 'Debes seguir el formato de dirección: Calle 123, Comuna, Ciudad.';
- }
- if (!formData.celularContacto && !formData.mailContacto) {
- newErrors.contacto = 'Debes incluir al menos el número de celular de contacto o el mail de contacto.';
- } else {
- if (formData.celularContacto && !/^\d+$/.test(formData.celularContacto)) { // Validar que solo incluya números
- newErrors.celularContacto = 'El número de celular debe contener solo números. Ej: 9 8765 4321.';
- }
- if (formData.mailContacto && !/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/.test(formData.mailContacto)) { // Simple regex for email
- newErrors.mailContacto = 'Escribir el email en su debido formato. Ej: usuario@dominio.com';
- }
- }
- if (formData.paginaWeb && !/^(https?:\/\/)?([\w\-]+\.)+[\w\-]{2,4}(\/[\w\-\.]*)*$/.test(formData.paginaWeb)) {
- 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 handleSubmit = (e) => {
- e.preventDefault();
- if (validateForm()) {
- console.log('Formulario válido, proceder...');
- handleNext();
- } else {
- console.log('Errores en el formulario:', errors);
- }
- };
-
-
- return (
-
+ );
}
CulturaForm.propTypes = {
- handleNext: PropTypes.func.isRequired,
- };
+ handleNext: PropTypes.func.isRequired,
+};
+
export default CulturaForm;
diff --git a/src/pages/users/zdeporte.jsx b/src/pages/users/zdeporte.jsx
index 4c81550..9547779 100644
--- a/src/pages/users/zdeporte.jsx
+++ b/src/pages/users/zdeporte.jsx
@@ -8,8 +8,8 @@ import {
FormControlLabel,
Typography,
} from '@mui/material';
-//------------new
-import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api'; // Importar componentes de Google Maps
+import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api';
+
const mapContainerStyle = {
height: "400px",
width: "100%"
@@ -19,266 +19,231 @@ const center = {
lat: -33.4489, // Cambia esto a la latitud de tu ubicación inicial
lng: -70.6693 // Cambia esto a la longitud de tu ubicación inicial
};
-//-----------new
-
function DeporteForm({ handleNext }) {
- //-----------new
- const [markerPosition, setMarkerPosition] = useState(center); // Estado para la posición del marcador
- const [userLocation, setUserLocation] = useState(null); // Estado para la ubicación del usuario
-
- const handleMapClick = async (event) => {
- const lat = event.latLng.lat();
- const lng = event.latLng.lng();
- setMarkerPosition({ lat, lng }); // Actualiza la posición del marcador
- // Aquí puedes agregar lógica para convertir las coordenadas en una dirección si lo deseas
- //const address = await getAddressFromLatLng(lat, lng); //new
- setFormData((prev) => ({ ...prev, ubicacion: `Lat: ${lat}, Lng: ${lng}` })); // Actualiza el campo de ubicación
- };
-
- useEffect(() => {
- // Obtener ubicación actual del usuario
- if (navigator.geolocation) {
- navigator.geolocation.getCurrentPosition(position => {
- const newLocation = {
- lat: position.coords.latitude,
- lng: position.coords.longitude,
- };
- setUserLocation(newLocation);
- setMarkerPosition(newLocation);
- //setFormData(prev => ({ ...prev, ubicacion: address })); //new
- setFormData(prev => ({ ...prev, ubicacion: `Lat: ${position.coords.latitude}, Lng: ${position.coords.longitude}` }));
- }, () => {
- alert("No se pudo obtener la ubicación.");
- });
- } else {
- alert("Geolocalización no es soportada en este navegador.");
- }
- }, []);
-
- /*const getAddressFromLatLng = async (lat, lng) => {
- const apiKey = "AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E"; // Reemplaza con tu API key
- const response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`);
- const data = await response.json();
- if (data.results && data.results.length > 0) {
- return data.results[0].formatted_address; // Retorna la primera dirección formateada
- } else {
- return ''; // Retorna vacío si no se encuentra dirección
- }
- };*/
- //-----------new
-
- const [formData, setFormData] = useState({
- titulo: '',
- descripcion: '',
- ubicacion: '',
- numeroUbicacion: '',
- nombreContacto: '',
- celularContacto: '',
- mailContacto: '',
- instagram: '',
- facebook: '',
- paginaWeb: '',
- disponible: false,
- });
-
- const [errors, setErrors] = useState({});
-
- const handleInputChange = (field, value) => {
- setFormData(prev => ({ ...prev, [field]: value }));
- setErrors(prev => ({ ...prev, [field]: '' })); // Reset error when value changes
- };
-
-
- const validateForm = () => {
- const newErrors = {};
-
- if (!formData.titulo) {newErrors.titulo = 'Escribe un título.';}
- if (!formData.descripcion) {newErrors.descripcion = 'Escribe una descripción.';}
- if (!formData.ubicacion) {
- newErrors.ubicacion = 'Escribe una ubicación (Ej: Calle 123, Comuna, Ciudad).';
- } else if (!/^[\w\s,.-]+$/.test(formData.ubicacion)) { // Simple regex for address format
- newErrors.ubicacion = 'Debes seguir el formato de dirección: Calle 123, Comuna, Ciudad.';
- }
- if (!formData.celularContacto && !formData.mailContacto) {
- newErrors.contacto = 'Debes incluir al menos el número de celular de contacto o el mail de contacto.';
- } else {
- if (formData.celularContacto && !/^\d+$/.test(formData.celularContacto)) { // Validar que solo incluya números
- newErrors.celularContacto = 'El número de celular debe contener solo números. Ej: 9 8765 4321.';
- }
- if (formData.mailContacto && !/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/.test(formData.mailContacto)) { // Simple regex for email
- newErrors.mailContacto = 'Escribir el email en su debido formato. Ej: usuario@dominio.com';
- }
- }
- if (formData.paginaWeb && !/^(https?:\/\/)?([\w\-]+\.)+[\w\-]{2,4}(\/[\w\-\.]*)*$/.test(formData.paginaWeb)) {
- 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 handleSubmit = (e) => {
- e.preventDefault();
- if (validateForm()) {
- console.log('Formulario válido, proceder...');
- handleNext();
- } else {
- console.log('Errores en el formulario:', errors);
- }
- };
-
-
- return (
-
- Tiempo Libre y Deporte
- Ingresa la información de tu publicación
-
- handleInputChange('titulo', e.target.value)}
- error={Boolean(errors.titulo)}
- helperText={errors.titulo||'Campo Obligatorio'}
- />
- handleInputChange('descripcion', e.target.value)}
- error={Boolean(errors.descripcion)}
- helperText={errors.descripcion||'Campo Obligatorio'}
- />
-
- handleInputChange('ubicacion', e.target.value)}
- error={Boolean(errors.ubicacion)}
- helperText={errors.ubicacion||'Campo Obligatorio'}
- />
- handleInputChange('ubicacion', e.target.value)}
- margin="normal"
- />
-
-
- {/* Reemplaza con tu API key */}
-
- {/* Muestra un marcador en la posición seleccionada */}
-
-
-
-
-
- handleInputChange('nombreContacto', e.target.value)}
- />
- handleInputChange('celularContacto', e.target.value)}
- type = "number"
- error={Boolean(errors.celularContacto)}
- helperText={errors.celularContacto}
- />
+ const [markerPosition, setMarkerPosition] = useState(center);
+ const [userLocation, setUserLocation] = useState(null);
+ const [formData, setFormData] = useState({
+ titulo: '',
+ descripcion: '',
+ ubicacion: '',
+ numeroUbicacion: '',
+ nombreContacto: '',
+ celularContacto: '',
+ mailContacto: '',
+ instagram: '',
+ facebook: '',
+ paginaWeb: '',
+ disponible: false,
+ });
+ const [errors, setErrors] = useState({});
+
+ // Función para obtener la dirección a partir de coordenadas
+ const getAddressFromLatLng = async (lat, lng) => {
+ const apiKey = "AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E"; // Reemplaza con tu API key
+ const response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`);
+ const data = await response.json();
+ if (data.results && data.results.length > 0) {
+ return data.results[0].formatted_address;
+ } else {
+ return '';
+ }
+ };
- handleInputChange('mailContacto', e.target.value)}
- error={Boolean(errors.mailContacto)}
- helperText={errors.mailContacto}
- />
-
+ const handleMapClick = async (event) => {
+ const lat = event.latLng.lat();
+ const lng = event.latLng.lng();
+ setMarkerPosition({ lat, lng });
- {errors.contacto && {errors.contacto} ||'Incluir al menos el número de celular o mail de contacto'} {/* Mensaje de error de contacto */}
+ const address = await getAddressFromLatLng(lat, lng); // Obtiene la dirección
+ setFormData((prev) => ({ ...prev, ubicacion: address }));
+ };
-
- handleInputChange('instagram', e.target.value)}
- />
- handleInputChange('facebook', e.target.value)}
- />
- handleInputChange('paginaWeb', e.target.value)}
- error={Boolean(errors.paginaWeb)}
- helperText={errors.paginaWeb}
- />
-
+ useEffect(() => {
+ // Obtener ubicación actual del usuario
+ if (navigator.geolocation) {
+ navigator.geolocation.getCurrentPosition(async (position) => {
+ const newLocation = {
+ lat: position.coords.latitude,
+ lng: position.coords.longitude,
+ };
+ setUserLocation(newLocation);
+ setMarkerPosition(newLocation);
+
+ const address = await getAddressFromLatLng(newLocation.lat, newLocation.lng);
+ setFormData((prev) => ({ ...prev, ubicacion: address }));
+ }, () => {
+ alert("No se pudo obtener la ubicación.");
+ });
+ } else {
+ alert("Geolocalización no es soportada en este navegador.");
+ }
+ }, []);
+
+ const handleInputChange = (field, value) => {
+ setFormData(prev => ({ ...prev, [field]: value }));
+ setErrors(prev => ({ ...prev, [field]: '' }));
+ };
-
+ const validateForm = () => {
+ const newErrors = {};
+ if (!formData.titulo) newErrors.titulo = 'Escribe un título.';
+ if (!formData.descripcion) newErrors.descripcion = 'Escribe una descripción.';
+ if (!formData.ubicacion) newErrors.ubicacion = 'Escribe una ubicación (Ej: Calle 123, Comuna, Ciudad).';
+ if (!formData.celularContacto && !formData.mailContacto) {
+ newErrors.contacto = 'Debes incluir al menos el número de celular de contacto o el mail de contacto.';
+ }
+ setErrors(newErrors);
+ return Object.keys(newErrors).length === 0;
+ };
+ const handleSubmit = (e) => {
+ e.preventDefault();
+ if (validateForm()) {
+ console.log('Formulario válido, proceder...');
+ handleNext();
+ } else {
+ console.log('Errores en el formulario:', errors);
+ }
+ };
-
handleInputChange('disponible', e.target.checked)}
- />
- }
- label="Actualmente Disponible"
+ return (
+
+ Tiempo Libre y Deporte
+ Ingresa la información de tu publicación
+
+ handleInputChange('titulo', e.target.value)}
+ error={Boolean(errors.titulo)}
+ helperText={errors.titulo || 'Campo Obligatorio'}
+ />
+ handleInputChange('descripcion', e.target.value)}
+ error={Boolean(errors.descripcion)}
+ helperText={errors.descripcion || 'Campo Obligatorio'}
+ />
+
+ handleInputChange('ubicacion', e.target.value)}
+ error={Boolean(errors.ubicacion)}
+ helperText={errors.ubicacion || 'Campo Obligatorio'}
+ />
+ handleInputChange('numeroUbicacion', e.target.value)}
+ margin="normal"
+ />
+
+
+
+
+
+
+
+
+
+ handleInputChange('nombreContacto', e.target.value)}
+ />
+ handleInputChange('celularContacto', e.target.value)}
+ type="number"
+ error={Boolean(errors.celularContacto)}
+ helperText={errors.celularContacto}
+ />
+ handleInputChange('mailContacto', e.target.value)}
+ error={Boolean(errors.mailContacto)}
+ helperText={errors.mailContacto}
+ />
+
+
+ {errors.contacto && {errors.contacto} || 'Incluir al menos el número de celular o mail de contacto'}
+
+
+ handleInputChange('instagram', e.target.value)}
+ />
+ handleInputChange('facebook', e.target.value)}
+ />
+ handleInputChange('paginaWeb', e.target.value)}
+ error={Boolean(errors.paginaWeb)}
+ helperText={errors.paginaWeb}
+ />
+
+
+
+ handleInputChange('disponible', e.target.checked)}
/>
-
-
-
-
-
- Enviar
-
-
-
-
-
- );
+ }
+ label="Actualmente Disponible"
+ />
+
+
+
+
+ Enviar
+
+
+
+ );
}
DeporteForm.propTypes = {
- handleNext: PropTypes.func.isRequired,
- };
+ handleNext: PropTypes.func.isRequired,
+};
+
export default DeporteForm;
+
diff --git a/src/pages/users/zentretenimiento.jsx b/src/pages/users/zentretenimiento.jsx
index 06b694b..8049c75 100644
--- a/src/pages/users/zentretenimiento.jsx
+++ b/src/pages/users/zentretenimiento.jsx
@@ -8,8 +8,8 @@ import {
FormControlLabel,
Typography,
} from '@mui/material';
-//------------new
-import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api'; // Importar componentes de Google Maps
+import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api';
+
const mapContainerStyle = {
height: "400px",
width: "100%"
@@ -19,266 +19,230 @@ const center = {
lat: -33.4489, // Cambia esto a la latitud de tu ubicación inicial
lng: -70.6693 // Cambia esto a la longitud de tu ubicación inicial
};
-//-----------new
-
function EntretenimientoForm({ handleNext }) {
- //-----------new
- const [markerPosition, setMarkerPosition] = useState(center); // Estado para la posición del marcador
- const [userLocation, setUserLocation] = useState(null); // Estado para la ubicación del usuario
-
- const handleMapClick = async (event) => {
- const lat = event.latLng.lat();
- const lng = event.latLng.lng();
- setMarkerPosition({ lat, lng }); // Actualiza la posición del marcador
- // Aquí puedes agregar lógica para convertir las coordenadas en una dirección si lo deseas
- //const address = await getAddressFromLatLng(lat, lng); //new
- setFormData((prev) => ({ ...prev, ubicacion: `Lat: ${lat}, Lng: ${lng}` })); // Actualiza el campo de ubicación
- };
-
- useEffect(() => {
- // Obtener ubicación actual del usuario
- if (navigator.geolocation) {
- navigator.geolocation.getCurrentPosition(position => {
- const newLocation = {
- lat: position.coords.latitude,
- lng: position.coords.longitude,
- };
- setUserLocation(newLocation);
- setMarkerPosition(newLocation);
- //setFormData(prev => ({ ...prev, ubicacion: address })); //new
- setFormData(prev => ({ ...prev, ubicacion: `Lat: ${position.coords.latitude}, Lng: ${position.coords.longitude}` }));
- }, () => {
- alert("No se pudo obtener la ubicación.");
- });
- } else {
- alert("Geolocalización no es soportada en este navegador.");
- }
- }, []);
-
- /*const getAddressFromLatLng = async (lat, lng) => {
- const apiKey = "AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E"; // Reemplaza con tu API key
- const response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`);
- const data = await response.json();
- if (data.results && data.results.length > 0) {
- return data.results[0].formatted_address; // Retorna la primera dirección formateada
- } else {
- return ''; // Retorna vacío si no se encuentra dirección
- }
- };*/
- //-----------new
-
- const [formData, setFormData] = useState({
- titulo: '',
- descripcion: '',
- ubicacion: '',
- numeroUbicacion: '',
- nombreContacto: '',
- celularContacto: '',
- mailContacto: '',
- instagram: '',
- facebook: '',
- paginaWeb: '',
- disponible: false,
- });
-
- const [errors, setErrors] = useState({});
-
- const handleInputChange = (field, value) => {
- setFormData(prev => ({ ...prev, [field]: value }));
- setErrors(prev => ({ ...prev, [field]: '' })); // Reset error when value changes
- };
-
-
- const validateForm = () => {
- const newErrors = {};
-
- if (!formData.titulo) {newErrors.titulo = 'Escribe un título.';}
- if (!formData.descripcion) {newErrors.descripcion = 'Escribe una descripción.';}
- if (!formData.ubicacion) {
- newErrors.ubicacion = 'Escribe una ubicación (Ej: Calle 123, Comuna, Ciudad).';
- } else if (!/^[\w\s,.-]+$/.test(formData.ubicacion)) { // Simple regex for address format
- newErrors.ubicacion = 'Debes seguir el formato de dirección: Calle 123, Comuna, Ciudad.';
- }
- if (!formData.celularContacto && !formData.mailContacto) {
- newErrors.contacto = 'Debes incluir al menos el número de celular de contacto o el mail de contacto.';
- } else {
- if (formData.celularContacto && !/^\d+$/.test(formData.celularContacto)) { // Validar que solo incluya números
- newErrors.celularContacto = 'El número de celular debe contener solo números. Ej: 9 8765 4321.';
- }
- if (formData.mailContacto && !/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/.test(formData.mailContacto)) { // Simple regex for email
- newErrors.mailContacto = 'Escribir el email en su debido formato. Ej: usuario@dominio.com';
- }
- }
- if (formData.paginaWeb && !/^(https?:\/\/)?([\w\-]+\.)+[\w\-]{2,4}(\/[\w\-\.]*)*$/.test(formData.paginaWeb)) {
- 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 handleSubmit = (e) => {
- e.preventDefault();
- if (validateForm()) {
- console.log('Formulario válido, proceder...');
- handleNext();
- } else {
- console.log('Errores en el formulario:', errors);
- }
- };
-
-
- return (
-
- Entretenimiento
- Ingresa la información de tu publicación
-
- handleInputChange('titulo', e.target.value)}
- error={Boolean(errors.titulo)}
- helperText={errors.titulo||'Campo Obligatorio'}
- />
- handleInputChange('descripcion', e.target.value)}
- error={Boolean(errors.descripcion)}
- helperText={errors.descripcion||'Campo Obligatorio'}
- />
-
- handleInputChange('ubicacion', e.target.value)}
- error={Boolean(errors.ubicacion)}
- helperText={errors.ubicacion||'Campo Obligatorio'}
- />
- handleInputChange('ubicacion', e.target.value)}
- margin="normal"
- />
-
-
- {/* Reemplaza con tu API key */}
-
- {/* Muestra un marcador en la posición seleccionada */}
-
-
-
-
-
- handleInputChange('nombreContacto', e.target.value)}
- />
- handleInputChange('celularContacto', e.target.value)}
- type = "number"
- error={Boolean(errors.celularContacto)}
- helperText={errors.celularContacto}
- />
+ const [markerPosition, setMarkerPosition] = useState(center);
+ const [userLocation, setUserLocation] = useState(null);
+ const [formData, setFormData] = useState({
+ titulo: '',
+ descripcion: '',
+ ubicacion: '',
+ numeroUbicacion: '',
+ nombreContacto: '',
+ celularContacto: '',
+ mailContacto: '',
+ instagram: '',
+ facebook: '',
+ paginaWeb: '',
+ disponible: false,
+ });
+ const [errors, setErrors] = useState({});
+
+ // Función para obtener la dirección a partir de coordenadas
+ const getAddressFromLatLng = async (lat, lng) => {
+ const apiKey = "AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E"; // Reemplaza con tu API key
+ const response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`);
+ const data = await response.json();
+ if (data.results && data.results.length > 0) {
+ return data.results[0].formatted_address;
+ } else {
+ return '';
+ }
+ };
- handleInputChange('mailContacto', e.target.value)}
- error={Boolean(errors.mailContacto)}
- helperText={errors.mailContacto}
- />
-
+ const handleMapClick = async (event) => {
+ const lat = event.latLng.lat();
+ const lng = event.latLng.lng();
+ setMarkerPosition({ lat, lng });
- {errors.contacto && {errors.contacto} ||'Incluir al menos el número de celular o mail de contacto'} {/* Mensaje de error de contacto */}
+ const address = await getAddressFromLatLng(lat, lng); // Obtiene la dirección
+ setFormData((prev) => ({ ...prev, ubicacion: address }));
+ };
-
- handleInputChange('instagram', e.target.value)}
- />
- handleInputChange('facebook', e.target.value)}
- />
- handleInputChange('paginaWeb', e.target.value)}
- error={Boolean(errors.paginaWeb)}
- helperText={errors.paginaWeb}
- />
-
+ useEffect(() => {
+ // Obtener ubicación actual del usuario
+ if (navigator.geolocation) {
+ navigator.geolocation.getCurrentPosition(async (position) => {
+ const newLocation = {
+ lat: position.coords.latitude,
+ lng: position.coords.longitude,
+ };
+ setUserLocation(newLocation);
+ setMarkerPosition(newLocation);
+
+ const address = await getAddressFromLatLng(newLocation.lat, newLocation.lng);
+ setFormData((prev) => ({ ...prev, ubicacion: address }));
+ }, () => {
+ alert("No se pudo obtener la ubicación.");
+ });
+ } else {
+ alert("Geolocalización no es soportada en este navegador.");
+ }
+ }, []);
+
+ const handleInputChange = (field, value) => {
+ setFormData(prev => ({ ...prev, [field]: value }));
+ setErrors(prev => ({ ...prev, [field]: '' }));
+ };
-
+ const validateForm = () => {
+ const newErrors = {};
+ if (!formData.titulo) newErrors.titulo = 'Escribe un título.';
+ if (!formData.descripcion) newErrors.descripcion = 'Escribe una descripción.';
+ if (!formData.ubicacion) newErrors.ubicacion = 'Escribe una ubicación (Ej: Calle 123, Comuna, Ciudad).';
+ if (!formData.celularContacto && !formData.mailContacto) {
+ newErrors.contacto = 'Debes incluir al menos el número de celular de contacto o el mail de contacto.';
+ }
+ setErrors(newErrors);
+ return Object.keys(newErrors).length === 0;
+ };
+ const handleSubmit = (e) => {
+ e.preventDefault();
+ if (validateForm()) {
+ console.log('Formulario válido, proceder...');
+ handleNext();
+ } else {
+ console.log('Errores en el formulario:', errors);
+ }
+ };
-
handleInputChange('disponible', e.target.checked)}
- />
- }
- label="Actualmente Disponible"
+ return (
+
+ Entretenimiento
+ Ingresa la información de tu publicación
+
+ handleInputChange('titulo', e.target.value)}
+ error={Boolean(errors.titulo)}
+ helperText={errors.titulo || 'Campo Obligatorio'}
+ />
+ handleInputChange('descripcion', e.target.value)}
+ error={Boolean(errors.descripcion)}
+ helperText={errors.descripcion || 'Campo Obligatorio'}
+ />
+
+ handleInputChange('ubicacion', e.target.value)}
+ error={Boolean(errors.ubicacion)}
+ helperText={errors.ubicacion || 'Campo Obligatorio'}
+ />
+ handleInputChange('numeroUbicacion', e.target.value)}
+ margin="normal"
+ />
+
+
+
+
+
+
+
+
+
+ handleInputChange('nombreContacto', e.target.value)}
+ />
+ handleInputChange('celularContacto', e.target.value)}
+ type="number"
+ error={Boolean(errors.celularContacto)}
+ helperText={errors.celularContacto}
+ />
+ handleInputChange('mailContacto', e.target.value)}
+ error={Boolean(errors.mailContacto)}
+ helperText={errors.mailContacto}
+ />
+
+
+ {errors.contacto && {errors.contacto} || 'Incluir al menos el número de celular o mail de contacto'}
+
+
+ handleInputChange('instagram', e.target.value)}
+ />
+ handleInputChange('facebook', e.target.value)}
+ />
+ handleInputChange('paginaWeb', e.target.value)}
+ error={Boolean(errors.paginaWeb)}
+ helperText={errors.paginaWeb}
+ />
+
+
+
+ handleInputChange('disponible', e.target.checked)}
/>
-
-
-
-
-
- Enviar
-
-
-
-
-
- );
+ }
+ label="Actualmente Disponible"
+ />
+
+
+
+
+ Enviar
+
+
+
+ );
}
EntretenimientoForm.propTypes = {
- handleNext: PropTypes.func.isRequired,
- };
+ handleNext: PropTypes.func.isRequired,
+};
+
export default EntretenimientoForm;
diff --git a/src/pages/users/zeventos.jsx b/src/pages/users/zeventos.jsx
index 63ea558..600794e 100644
--- a/src/pages/users/zeventos.jsx
+++ b/src/pages/users/zeventos.jsx
@@ -23,27 +23,59 @@ const subcategories = [
{ label: 'Música', value: 'musica' },
{ label: 'Talleres', value: 'talleres' },
{ label: 'Otros', value: 'otros' },
-];
+];
-function EventosForm({ formData, errors, onInputChange, handleNext }) {
+function EventosForm({ handleNext }) {
const [markerPosition, setMarkerPosition] = useState(center);
+ const [userLocation, setUserLocation] = useState(null);
+ const [eventDetails, setEventDetails] = useState({
+ tipo: '',
+ titulo: '',
+ descripcion: '',
+ ubicacion: '',
+ numeroUbicacion: '',
+ fechasDisponibles: [],
+ nombreContacto: '',
+ numeroCelular: '',
+ mailContacto: '',
+ instagram: '',
+ facebook: '',
+ paginaWeb: ''
+ });
+ const [errors, setErrors] = useState({});
- const handleMapClick = (event) => {
+ const getAddressFromLatLng = async (lat, lng) => {
+ const apiKey = "AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E"; // Reemplaza con tu API key
+ const response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`);
+ const data = await response.json();
+ if (data.results && data.results.length > 0) {
+ return data.results[0].formatted_address;
+ } else {
+ return '';
+ }
+ };
+
+ const handleMapClick = async (event) => {
const lat = event.latLng.lat();
const lng = event.latLng.lng();
setMarkerPosition({ lat, lng });
- onInputChange('ubicacion', `Lat: ${lat}, Lng: ${lng}`);
+
+ const address = await getAddressFromLatLng(lat, lng);
+ setEventDetails((prev) => ({ ...prev, ubicacion: address }));
};
useEffect(() => {
if (navigator.geolocation) {
- navigator.geolocation.getCurrentPosition(position => {
+ navigator.geolocation.getCurrentPosition(async (position) => {
const newLocation = {
lat: position.coords.latitude,
lng: position.coords.longitude,
};
+ setUserLocation(newLocation);
setMarkerPosition(newLocation);
- onInputChange('ubicacion', `Lat: ${position.coords.latitude}, Lng: ${position.coords.longitude}`);
+
+ const address = await getAddressFromLatLng(newLocation.lat, newLocation.lng);
+ setEventDetails((prev) => ({ ...prev, ubicacion: address }));
}, () => {
alert("No se pudo obtener la ubicación.");
});
@@ -52,28 +84,85 @@ function EventosForm({ formData, errors, onInputChange, handleNext }) {
}
}, []);
+ const handleChange = (field) => (event) => {
+ setEventDetails({
+ ...eventDetails,
+ [field]: event.target.value
+ });
+ setErrors(prev => ({ ...prev, [field]: '' }));
+ };
+
const handleDateChange = (date) => {
const formattedDate = format(date, 'yyyy-MM-dd');
- onInputChange('fechasDisponibles', [
- ...formData.fechasDisponibles,
- { fecha: formattedDate, horarioInicio: '', horarioFin: '' }
- ]);
+ setEventDetails((prevDetails) => ({
+ ...prevDetails,
+ fechasDisponibles: [
+ ...prevDetails.fechasDisponibles,
+ { fecha: formattedDate, horarioInicio: '', horarioFin: '' }
+ ]
+ }));
};
const handleTimeChange = (index, field) => (event) => {
- const updatedFechas = [...formData.fechasDisponibles];
+ const updatedFechas = [...eventDetails.fechasDisponibles];
updatedFechas[index][field] = event.target.value;
- onInputChange('fechasDisponibles', updatedFechas);
+ setEventDetails({
+ ...eventDetails,
+ fechasDisponibles: updatedFechas
+ });
};
const handleDeleteDate = (index) => {
- const updatedFechas = formData.fechasDisponibles.filter((_, i) => i !== index);
- onInputChange('fechasDisponibles', updatedFechas);
+ const updatedFechas = eventDetails.fechasDisponibles.filter((_, i) => i !== index);
+ setEventDetails((prevDetails) => ({
+ ...prevDetails,
+ fechasDisponibles: updatedFechas
+ }));
+ };
+
+ const validateForm = () => {
+ const newErrors = {};
+
+ if (!eventDetails.tipo) newErrors.tipo = 'Selecciona un tipo de evento.';
+ if (!eventDetails.titulo) newErrors.titulo = 'Escribe un título.';
+ if (!eventDetails.descripcion) newErrors.descripcion = 'Escribe una descripción.';
+ if (!eventDetails.ubicacion) {
+ newErrors.ubicacion = 'Escribe una ubicación (Ej: Calle 123, Comuna, Ciudad).';
+ }
+
+ if (!eventDetails.numeroCelular && !eventDetails.mailContacto) {
+ newErrors.contacto = 'Debes incluir al menos el número de celular de contacto o el mail de contacto.';
+ } else {
+ if (eventDetails.numeroCelular && !/^\d+$/.test(eventDetails.numeroCelular)) {
+ newErrors.numeroCelular = 'El número de celular debe contener solo números. Ej: 9 8765 4321.';
+ }
+ if (eventDetails.mailContacto && !/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/.test(eventDetails.mailContacto)) {
+ newErrors.mailContacto = 'Escribir el email en su debido formato. Ej: usuario@dominio.com';
+ }
+ }
+
+ if (eventDetails.paginaWeb && !/^(https?:\/\/)?([\w\-]+\.)+[\w\-]{2,4}(\/[\w\-\.]*)*$/.test(eventDetails.paginaWeb)) {
+ newErrors.paginaWeb = 'Debes escribir en el formato indicado de página web. Ej: https://www.ejemplo.com';
+ }
+
+ eventDetails.fechasDisponibles.forEach((fecha, index) => {
+ if (!fecha.horarioInicio || !fecha.horarioFin) {
+ newErrors[`horario_${index}`] = 'Debes especificar la hora de inicio y fin para cada fecha.';
+ }
+ });
+
+ setErrors(newErrors);
+ return Object.keys(newErrors).length === 0;
};
const handleSubmit = (e) => {
e.preventDefault();
- handleNext();
+ if (validateForm()) {
+ console.log('Formulario válido, proceder...');
+ handleNext();
+ } else {
+ console.log('Errores en el formulario:', errors);
+ }
};
return (
@@ -85,9 +174,9 @@ function EventosForm({ formData, errors, onInputChange, handleNext }) {
onInputChange('tipo', e.target.value)}
+ onChange={handleChange('tipo')}
>
{subcategories.map(sub => (
{sub.label}
@@ -99,44 +188,45 @@ function EventosForm({ formData, errors, onInputChange, handleNext }) {
onInputChange('titulo', e.target.value)}
+ value={eventDetails.titulo}
+ onChange={handleChange('titulo')}
margin="normal"
error={Boolean(errors.titulo)}
- helperText={errors.titulo || 'Campo obligatorio'}
+ helperText={errors.titulo}
/>
onInputChange('descripcion', e.target.value)}
+ value={eventDetails.descripcion}
+ onChange={handleChange('descripcion')}
margin="normal"
multiline
rows={4}
error={Boolean(errors.descripcion)}
- helperText={errors.descripcion || 'Campo obligatorio'}
+ helperText={errors.descripcion}
/>
onInputChange('ubicacion', e.target.value)}
+ value={eventDetails.ubicacion}
+ onChange={handleChange('ubicacion')}
margin="normal"
error={Boolean(errors.ubicacion)}
- helperText={errors.ubicacion || 'Campo obligatorio'}
+ helperText={errors.ubicacion}
/>
onInputChange('numeroUbicacion', e.target.value)}
+ value={eventDetails.numeroUbicacion}
+ onChange={handleChange('numeroUbicacion')}
margin="normal"
/>
-
+
-
+
onInputChange('nombreContacto', e.target.value)}
+ value={eventDetails.nombreContacto}
+ onChange={handleChange('nombreContacto')}
margin="normal"
/>
onInputChange('numeroCelular', e.target.value)}
+ label="Número de Celular de Contacto: 9 1122 3344"
+ value={eventDetails.numeroCelular}
+ onChange={handleChange('numeroCelular')}
margin="normal"
+ type="number"
error={Boolean(errors.numeroCelular)}
helperText={errors.numeroCelular}
/>
onInputChange('mailContacto', e.target.value)}
+ label="Mail de Contacto: usuario@dominio.com"
+ value={eventDetails.mailContacto}
+ onChange={handleChange('mailContacto')}
margin="normal"
error={Boolean(errors.mailContacto)}
helperText={errors.mailContacto}
/>
+ {errors.contacto && {errors.contacto} }
+
onInputChange('instagram', e.target.value)}
+ label="Instagram: usuario"
+ value={eventDetails.instagram}
+ onChange={handleChange('instagram')}
margin="normal"
/>
onInputChange('facebook', e.target.value)}
+ label="Facebook: usuario"
+ value={eventDetails.facebook}
+ onChange={handleChange('facebook')}
margin="normal"
/>
onInputChange('paginaWeb', e.target.value)}
+ label="Página Web: https://www.ejemplo.com"
+ value={eventDetails.paginaWeb}
+ onChange={handleChange('paginaWeb')}
margin="normal"
error={Boolean(errors.paginaWeb)}
helperText={errors.paginaWeb}
@@ -213,7 +306,8 @@ function EventosForm({ formData, errors, onInputChange, handleNext }) {
Fechas seleccionadas:
- {formData.fechasDisponibles.map((fecha, index) => (
+
A continuación se mostrarán las fechas seleccionadas por usted. Por favor, ingresa hora de inicio y fin.
+ {eventDetails.fechasDisponibles.map((fecha, index) => (
{`Fecha: ${fecha.fecha}`}
@@ -235,18 +329,11 @@ function EventosForm({ formData, errors, onInputChange, handleNext }) {
))}
-
-
- Enviar
-
);
}
EventosForm.propTypes = {
- formData: PropTypes.object.isRequired,
- errors: PropTypes.object.isRequired,
- onInputChange: PropTypes.func.isRequired,
handleNext: PropTypes.func.isRequired,
};
diff --git a/src/pages/users/zfamiliar.jsx b/src/pages/users/zfamiliar.jsx
index b74e86d..33ee520 100644
--- a/src/pages/users/zfamiliar.jsx
+++ b/src/pages/users/zfamiliar.jsx
@@ -8,8 +8,8 @@ import {
FormControlLabel,
Typography,
} from '@mui/material';
-//------------new
-import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api'; // Importar componentes de Google Maps
+import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api';
+
const mapContainerStyle = {
height: "400px",
width: "100%"
@@ -19,266 +19,230 @@ const center = {
lat: -33.4489, // Cambia esto a la latitud de tu ubicación inicial
lng: -70.6693 // Cambia esto a la longitud de tu ubicación inicial
};
-//-----------new
-
function FamiliarForm({ handleNext }) {
- //-----------new
- const [markerPosition, setMarkerPosition] = useState(center); // Estado para la posición del marcador
- const [userLocation, setUserLocation] = useState(null); // Estado para la ubicación del usuario
-
- const handleMapClick = async (event) => {
- const lat = event.latLng.lat();
- const lng = event.latLng.lng();
- setMarkerPosition({ lat, lng }); // Actualiza la posición del marcador
- // Aquí puedes agregar lógica para convertir las coordenadas en una dirección si lo deseas
- //const address = await getAddressFromLatLng(lat, lng); //new
- setFormData((prev) => ({ ...prev, ubicacion: `Lat: ${lat}, Lng: ${lng}` })); // Actualiza el campo de ubicación
- };
-
- useEffect(() => {
- // Obtener ubicación actual del usuario
- if (navigator.geolocation) {
- navigator.geolocation.getCurrentPosition(position => {
- const newLocation = {
- lat: position.coords.latitude,
- lng: position.coords.longitude,
- };
- setUserLocation(newLocation);
- setMarkerPosition(newLocation);
- //setFormData(prev => ({ ...prev, ubicacion: address })); //new
- setFormData(prev => ({ ...prev, ubicacion: `Lat: ${position.coords.latitude}, Lng: ${position.coords.longitude}` }));
- }, () => {
- alert("No se pudo obtener la ubicación.");
- });
- } else {
- alert("Geolocalización no es soportada en este navegador.");
- }
- }, []);
-
- /*const getAddressFromLatLng = async (lat, lng) => {
- const apiKey = "AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E"; // Reemplaza con tu API key
- const response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`);
- const data = await response.json();
- if (data.results && data.results.length > 0) {
- return data.results[0].formatted_address; // Retorna la primera dirección formateada
- } else {
- return ''; // Retorna vacío si no se encuentra dirección
- }
- };*/
- //-----------new
-
- const [formData, setFormData] = useState({
- titulo: '',
- descripcion: '',
- ubicacion: '',
- numeroUbicacion: '',
- nombreContacto: '',
- celularContacto: '',
- mailContacto: '',
- instagram: '',
- facebook: '',
- paginaWeb: '',
- disponible: false,
- });
-
- const [errors, setErrors] = useState({});
-
- const handleInputChange = (field, value) => {
- setFormData(prev => ({ ...prev, [field]: value }));
- setErrors(prev => ({ ...prev, [field]: '' })); // Reset error when value changes
- };
-
-
- const validateForm = () => {
- const newErrors = {};
-
- if (!formData.titulo) {newErrors.titulo = 'Escribe un título.';}
- if (!formData.descripcion) {newErrors.descripcion = 'Escribe una descripción.';}
- if (!formData.ubicacion) {
- newErrors.ubicacion = 'Escribe una ubicación (Ej: Calle 123, Comuna, Ciudad).';
- } else if (!/^[\w\s,.-]+$/.test(formData.ubicacion)) { // Simple regex for address format
- newErrors.ubicacion = 'Debes seguir el formato de dirección: Calle 123, Comuna, Ciudad.';
- }
- if (!formData.celularContacto && !formData.mailContacto) {
- newErrors.contacto = 'Debes incluir al menos el número de celular de contacto o el mail de contacto.';
- } else {
- if (formData.celularContacto && !/^\d+$/.test(formData.celularContacto)) { // Validar que solo incluya números
- newErrors.celularContacto = 'El número de celular debe contener solo números. Ej: 9 8765 4321.';
- }
- if (formData.mailContacto && !/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/.test(formData.mailContacto)) { // Simple regex for email
- newErrors.mailContacto = 'Escribir el email en su debido formato. Ej: usuario@dominio.com';
- }
- }
- if (formData.paginaWeb && !/^(https?:\/\/)?([\w\-]+\.)+[\w\-]{2,4}(\/[\w\-\.]*)*$/.test(formData.paginaWeb)) {
- 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 handleSubmit = (e) => {
- e.preventDefault();
- if (validateForm()) {
- console.log('Formulario válido, proceder...');
- handleNext();
- } else {
- console.log('Errores en el formulario:', errors);
- }
- };
-
-
- return (
-
- Mundo Familiar y Salud
- Ingresa la información de tu publicación
-
- handleInputChange('titulo', e.target.value)}
- error={Boolean(errors.titulo)}
- helperText={errors.titulo||'Campo Obligatorio'}
- />
- handleInputChange('descripcion', e.target.value)}
- error={Boolean(errors.descripcion)}
- helperText={errors.descripcion||'Campo Obligatorio'}
- />
-
- handleInputChange('ubicacion', e.target.value)}
- error={Boolean(errors.ubicacion)}
- helperText={errors.ubicacion||'Campo Obligatorio'}
- />
- handleInputChange('ubicacion', e.target.value)}
- margin="normal"
- />
-
-
- {/* Reemplaza con tu API key */}
-
- {/* Muestra un marcador en la posición seleccionada */}
-
-
-
-
-
- handleInputChange('nombreContacto', e.target.value)}
- />
- handleInputChange('celularContacto', e.target.value)}
- type = "number"
- error={Boolean(errors.celularContacto)}
- helperText={errors.celularContacto}
- />
+ const [markerPosition, setMarkerPosition] = useState(center);
+ const [userLocation, setUserLocation] = useState(null);
+ const [formData, setFormData] = useState({
+ titulo: '',
+ descripcion: '',
+ ubicacion: '',
+ numeroUbicacion: '',
+ nombreContacto: '',
+ celularContacto: '',
+ mailContacto: '',
+ instagram: '',
+ facebook: '',
+ paginaWeb: '',
+ disponible: false,
+ });
+ const [errors, setErrors] = useState({});
+
+ // Función para obtener la dirección a partir de coordenadas
+ const getAddressFromLatLng = async (lat, lng) => {
+ const apiKey = "AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E"; // Reemplaza con tu API key
+ const response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`);
+ const data = await response.json();
+ if (data.results && data.results.length > 0) {
+ return data.results[0].formatted_address;
+ } else {
+ return '';
+ }
+ };
- handleInputChange('mailContacto', e.target.value)}
- error={Boolean(errors.mailContacto)}
- helperText={errors.mailContacto}
- />
-
+ const handleMapClick = async (event) => {
+ const lat = event.latLng.lat();
+ const lng = event.latLng.lng();
+ setMarkerPosition({ lat, lng });
- {errors.contacto && {errors.contacto} ||'Incluir al menos el número de celular o mail de contacto'} {/* Mensaje de error de contacto */}
+ const address = await getAddressFromLatLng(lat, lng);
+ setFormData((prev) => ({ ...prev, ubicacion: address }));
+ };
-
- handleInputChange('instagram', e.target.value)}
- />
- handleInputChange('facebook', e.target.value)}
- />
- handleInputChange('paginaWeb', e.target.value)}
- error={Boolean(errors.paginaWeb)}
- helperText={errors.paginaWeb}
- />
-
+ useEffect(() => {
+ // Obtener ubicación actual del usuario
+ if (navigator.geolocation) {
+ navigator.geolocation.getCurrentPosition(async (position) => {
+ const newLocation = {
+ lat: position.coords.latitude,
+ lng: position.coords.longitude,
+ };
+ setUserLocation(newLocation);
+ setMarkerPosition(newLocation);
+
+ const address = await getAddressFromLatLng(newLocation.lat, newLocation.lng);
+ setFormData((prev) => ({ ...prev, ubicacion: address }));
+ }, () => {
+ alert("No se pudo obtener la ubicación.");
+ });
+ } else {
+ alert("Geolocalización no es soportada en este navegador.");
+ }
+ }, []);
+
+ const handleInputChange = (field, value) => {
+ setFormData(prev => ({ ...prev, [field]: value }));
+ setErrors(prev => ({ ...prev, [field]: '' }));
+ };
-
+ const validateForm = () => {
+ const newErrors = {};
+ if (!formData.titulo) newErrors.titulo = 'Escribe un título.';
+ if (!formData.descripcion) newErrors.descripcion = 'Escribe una descripción.';
+ if (!formData.ubicacion) newErrors.ubicacion = 'Escribe una ubicación (Ej: Calle 123, Comuna, Ciudad).';
+ if (!formData.celularContacto && !formData.mailContacto) {
+ newErrors.contacto = 'Debes incluir al menos el número de celular de contacto o el mail de contacto.';
+ }
+ setErrors(newErrors);
+ return Object.keys(newErrors).length === 0;
+ };
+ const handleSubmit = (e) => {
+ e.preventDefault();
+ if (validateForm()) {
+ console.log('Formulario válido, proceder...');
+ handleNext();
+ } else {
+ console.log('Errores en el formulario:', errors);
+ }
+ };
-
handleInputChange('disponible', e.target.checked)}
- />
- }
- label="Actualmente Disponible"
+ return (
+
+ Mundo Familiar y Salud
+ Ingresa la información de tu publicación
+
+ handleInputChange('titulo', e.target.value)}
+ error={Boolean(errors.titulo)}
+ helperText={errors.titulo || 'Campo Obligatorio'}
+ />
+ handleInputChange('descripcion', e.target.value)}
+ error={Boolean(errors.descripcion)}
+ helperText={errors.descripcion || 'Campo Obligatorio'}
+ />
+
+ handleInputChange('ubicacion', e.target.value)}
+ error={Boolean(errors.ubicacion)}
+ helperText={errors.ubicacion || 'Campo Obligatorio'}
+ />
+ handleInputChange('numeroUbicacion', e.target.value)}
+ margin="normal"
+ />
+
+
+
+
+
+
+
+
+
+ handleInputChange('nombreContacto', e.target.value)}
+ />
+ handleInputChange('celularContacto', e.target.value)}
+ type="number"
+ error={Boolean(errors.celularContacto)}
+ helperText={errors.celularContacto}
+ />
+ handleInputChange('mailContacto', e.target.value)}
+ error={Boolean(errors.mailContacto)}
+ helperText={errors.mailContacto}
+ />
+
+
+ {errors.contacto && {errors.contacto} || 'Incluir al menos el número de celular o mail de contacto'}
+
+
+ handleInputChange('instagram', e.target.value)}
+ />
+ handleInputChange('facebook', e.target.value)}
+ />
+ handleInputChange('paginaWeb', e.target.value)}
+ error={Boolean(errors.paginaWeb)}
+ helperText={errors.paginaWeb}
+ />
+
+
+
+ handleInputChange('disponible', e.target.checked)}
/>
-
-
-
-
-
- Enviar
-
-
-
-
-
- );
+ }
+ label="Actualmente Disponible"
+ />
+
+
+
+
+ Enviar
+
+
+
+ );
}
FamiliarForm.propTypes = {
- handleNext: PropTypes.func.isRequired,
- };
+ handleNext: PropTypes.func.isRequired,
+};
+
export default FamiliarForm;
diff --git a/src/pages/users/zgastronomia.jsx b/src/pages/users/zgastronomia.jsx
index cc592f7..c67d4b6 100644
--- a/src/pages/users/zgastronomia.jsx
+++ b/src/pages/users/zgastronomia.jsx
@@ -1,5 +1,5 @@
import '../../styles/users/zgastronomia.css';
-import { useState,useEffect } from 'react';
+import { useState, useEffect } from 'react';
import PropTypes from 'prop-types';
import {
TextField,
@@ -12,8 +12,8 @@ import {
FormControlLabel,
Typography,
} from '@mui/material';
-//------------new
-import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api'; // Importar componentes de Google Maps
+import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api';
+
const mapContainerStyle = {
height: "400px",
width: "100%"
@@ -23,329 +23,241 @@ const center = {
lat: -33.4489, // Cambia esto a la latitud de tu ubicación inicial
lng: -70.6693 // Cambia esto a la longitud de tu ubicación inicial
};
-//-----------new
const subcategories = [
- { label: 'Restaurant', value: 'restaurant' },
- { label: 'Cafetería', value: 'cafeteria' },
- { label: 'Bar', value: 'bar' },
- { label: 'Heladería', value: 'heladeria' }
+ { label: 'Restaurant', value: 'restaurant' },
+ { label: 'Cafetería', value: 'cafeteria' },
+ { label: 'Bar', value: 'bar' },
+ { label: 'Heladería', value: 'heladeria' }
];
-function GastronomiaForm({ handleNext }) {
- //-----------new
- const [markerPosition, setMarkerPosition] = useState(center); // Estado para la posición del marcador
- const [userLocation, setUserLocation] = useState(null); // Estado para la ubicación del usuario
-
- const handleMapClick = async (event) => {
- const lat = event.latLng.lat();
- const lng = event.latLng.lng();
- setMarkerPosition({ lat, lng }); // Actualiza la posición del marcador
- // Aquí puedes agregar lógica para convertir las coordenadas en una dirección si lo deseas
- //const address = await getAddressFromLatLng(lat, lng); //new
- setFormData((prev) => ({ ...prev, ubicacion: `Lat: ${lat}, Lng: ${lng}` })); // Actualiza el campo de ubicación
- };
-
- useEffect(() => {
- // Obtener ubicación actual del usuario
- if (navigator.geolocation) {
- navigator.geolocation.getCurrentPosition(position => {
- const newLocation = {
- lat: position.coords.latitude,
- lng: position.coords.longitude,
- };
- setUserLocation(newLocation);
- setMarkerPosition(newLocation);
- //setFormData(prev => ({ ...prev, ubicacion: address })); //new
- setFormData(prev => ({ ...prev, ubicacion: `Lat: ${position.coords.latitude}, Lng: ${position.coords.longitude}` }));
- }, () => {
- alert("No se pudo obtener la ubicación.");
- });
- } else {
- alert("Geolocalización no es soportada en este navegador.");
- }
- }, []);
-
- /*const getAddressFromLatLng = async (lat, lng) => {
- const apiKey = "AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E"; // Reemplaza con tu API key
- const response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`);
- const data = await response.json();
- if (data.results && data.results.length > 0) {
- return data.results[0].formatted_address; // Retorna la primera dirección formateada
- } else {
- return ''; // Retorna vacío si no se encuentra dirección
- }
- };*/
- //-----------new
- const [formData, setFormData] = useState({
- subcategoria: '',
- titulo: '',
- descripcion: '',
- ubicacion: '',
- nombreContacto: '',
- celularContacto: '',
- mailContacto: '',
- instagram: '',
- facebook: '',
- paginaWeb: '',
- disponible: false,
- aptoVeganos: false,
- aptoVegetarianos: false,
- aptoCeliacos: false,
- });
-
- const [errors, setErrors] = useState({});
-
- const handleInputChange = (field, value) => {
- setFormData(prev => ({ ...prev, [field]: value }));
- setErrors(prev => ({ ...prev, [field]: '' })); // Reset error when value changes
- };
-
-
- const validateForm = () => {
- const newErrors = {};
-
- if (!formData.subcategoria) {newErrors.subcategoria = 'Selecciona un tipo de establecimiento.';}
- if (!formData.titulo) {newErrors.titulo = 'Escribe un título.';}
- if (!formData.descripcion) {newErrors.descripcion = 'Escribe una descripción.';}
- if (!formData.ubicacion) {
- newErrors.ubicacion = 'Escribe una ubicación (Ej: Calle 123, Comuna, Ciudad).';
- } else if (!/^[\w\s,.-]+$/.test(formData.ubicacion)) { // Simple regex for address format
- newErrors.ubicacion = 'Debes seguir el formato de dirección: Calle 123, Comuna, Ciudad.';
- }
- if (!formData.celularContacto && !formData.mailContacto) {
- newErrors.contacto = 'Debes incluir al menos el número de celular de contacto o el mail de contacto.';
- } else {
- if (formData.celularContacto && !/^\d+$/.test(formData.celularContacto)) { // Validar que solo incluya números
- newErrors.celularContacto = 'El número de celular debe contener solo números. Ej: 9 8765 4321.';
- }
- if (formData.mailContacto && !/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/.test(formData.mailContacto)) { // Simple regex for email
- newErrors.mailContacto = 'Escribir el email en su debido formato. Ej: usuario@dominio.com';
- }
- }
-
- if (formData.paginaWeb && !/^(https?:\/\/)?([\w\-]+\.)+[\w\-]{2,4}(\/[\w\-\.]*)*$/.test(formData.paginaWeb)) {
- 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 handleSubmit = (e) => {
- e.preventDefault();
- if (validateForm()) {
- console.log('Formulario válido, proceder...');
- handleNext();
- } else {
- console.log('Errores en el formulario:', errors);
- }
- };
-
-
- return (
-
- Restaurantes y Comida
- Ingresa la información de tu publicación
-
-
- Tipo de Establecimiento
- handleInputChange('subcategoria', e.target.value)}
- >
- {subcategories.map((type) => (
- {type.label}
- ))}
-
- {errors.subcategoria && {errors.subcategoria} ||'Campo Obligatorio'}
-
-
- handleInputChange('titulo', e.target.value)}
- margin="normal"
- error={Boolean(errors.titulo)}
- helperText={errors.titulo||'Campo Obligatorio'}
- />
-
- handleInputChange('descripcion', e.target.value)}
- margin="normal"
- multiline
- rows={4}
- error={Boolean(errors.descripcion)}
- helperText={errors.descripcion||'Campo Obligatorio'}
- />
-
-
- handleInputChange('ubicacion', e.target.value)}
- margin="normal"
- error={Boolean(errors.ubicacion)}
- helperText={errors.ubicacion||'Campo Obligatorio'}
- />
- handleInputChange('ubicacion', e.target.value)}
- margin="normal"
- />
-
- {/* Reemplaza con tu API key */}
-
- {/* Muestra un marcador en la posición seleccionada */}
-
-
-
- handleInputChange('nombreContacto', e.target.value)}
- margin="normal"
- />
- handleInputChange('celularContacto', e.target.value)}
- margin="normal"
- error={Boolean(errors.celularContacto)}
- helperText={errors.celularContacto}
- type= "number"
- />
-
- handleInputChange('mailContacto', e.target.value)}
- margin="normal"
- error={Boolean(errors.mailContacto)}
- helperText={errors.mailContacto}
- />
-
-
- {errors.contacto && {errors.contacto} || 'Incluir al menos el número de celular o mail de contacto'} {/* Mensaje de error de contacto */}
-
-
- handleInputChange('instagram', e.target.value)}
- margin="normal"
- />
-
- handleInputChange('facebook', e.target.value)}
- margin="normal"
- />
-
- handleInputChange('paginaWeb', e.target.value)}
- margin="normal"
- error={Boolean(errors.paginaWeb)}
- helperText={errors.paginaWeb}
- />
-
-
-
-
-
-
- handleInputChange('disponible', e.target.checked)}
- />
- }
- label="Actualmente Disponible"
- />
-
-
-
+function GastronomiaForm({ handleNext }) {
+ const [markerPosition, setMarkerPosition] = useState(center); // Estado para la posición del marcador
+ const [userLocation, setUserLocation] = useState(null); // Estado para la ubicación del usuario
+ const [formData, setFormData] = useState({
+ subcategoria: '',
+ titulo: '',
+ descripcion: '',
+ ubicacion: '',
+ nombreContacto: '',
+ celularContacto: '',
+ mailContacto: '',
+ instagram: '',
+ facebook: '',
+ paginaWeb: '',
+ disponible: false,
+ aptoVeganos: false,
+ aptoVegetarianos: false,
+ aptoCeliacos: false,
+ });
+ const [errors, setErrors] = useState({});
+
+ // Función para obtener la dirección a partir de coordenadas
+ const getAddressFromLatLng = async (lat, lng) => {
+ const apiKey = "AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E"; // Reemplaza con tu API key
+ const response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`);
+ const data = await response.json();
+ if (data.results && data.results.length > 0) {
+ return data.results[0].formatted_address;
+ } else {
+ return '';
+ }
+ };
-
-
-
+ const handleMapClick = async (event) => {
+ const lat = event.latLng.lat();
+ const lng = event.latLng.lng();
+ setMarkerPosition({ lat, lng }); // Actualiza la posición del marcador
-
- handleInputChange('aptoVeganos', e.target.checked)}
- />
- }
- label="Apto para Veganos"
- />
+ const address = await getAddressFromLatLng(lat, lng); // Obtiene la dirección
+ setFormData((prev) => ({ ...prev, ubicacion: address })); // Actualiza el campo de ubicación
+ };
- handleInputChange('aptoVegetarianos', e.target.checked)}
- />
- }
- label="Apto para Vegetarianos"
- />
+ useEffect(() => {
+ // Obtener ubicación actual del usuario
+ if (navigator.geolocation) {
+ navigator.geolocation.getCurrentPosition(async (position) => {
+ const newLocation = {
+ lat: position.coords.latitude,
+ lng: position.coords.longitude,
+ };
+ setUserLocation(newLocation);
+ setMarkerPosition(newLocation);
+
+ const address = await getAddressFromLatLng(newLocation.lat, newLocation.lng); // Obtiene la dirección de la ubicación actual
+ setFormData((prev) => ({ ...prev, ubicacion: address }));
+ }, () => {
+ alert("No se pudo obtener la ubicación.");
+ });
+ } else {
+ alert("Geolocalización no es soportada en este navegador.");
+ }
+ }, []);
+
+ const handleInputChange = (field, value) => {
+ setFormData(prev => ({ ...prev, [field]: value }));
+ setErrors(prev => ({ ...prev, [field]: '' })); // Reset error when value changes
+ };
- handleInputChange('aptoCeliacos', e.target.checked)}
- />
- }
- label="Apto para Celíacos"
- />
-
+ const validateForm = () => {
+ const newErrors = {};
+ if (!formData.subcategoria) newErrors.subcategoria = 'Selecciona un tipo de establecimiento.';
+ if (!formData.titulo) newErrors.titulo = 'Escribe un título.';
+ if (!formData.descripcion) newErrors.descripcion = 'Escribe una descripción.';
+ if (!formData.ubicacion) newErrors.ubicacion = 'Escribe una ubicación (Ej: Calle 123, Comuna, Ciudad).';
+ if (!formData.celularContacto && !formData.mailContacto) {
+ newErrors.contacto = 'Debes incluir al menos el número de celular de contacto o el mail de contacto.';
+ }
+ setErrors(newErrors);
+ return Object.keys(newErrors).length === 0;
+ };
-
-
- Enviar
-
-
+ const handleSubmit = (e) => {
+ e.preventDefault();
+ if (validateForm()) {
+ console.log('Formulario válido, proceder...');
+ handleNext();
+ } else {
+ console.log('Errores en el formulario:', errors);
+ }
+ };
-
- );
+ return (
+
+ Restaurantes y Comida
+ Ingresa la información de tu publicación
+
+
+ Tipo de Establecimiento
+ handleInputChange('subcategoria', e.target.value)}
+ >
+ {subcategories.map((type) => (
+ {type.label}
+ ))}
+
+ {errors.subcategoria && {errors.subcategoria} || 'Campo Obligatorio'}
+
+
+ handleInputChange('titulo', e.target.value)}
+ margin="normal"
+ error={Boolean(errors.titulo)}
+ helperText={errors.titulo || 'Campo Obligatorio'}
+ />
+
+ handleInputChange('descripcion', e.target.value)}
+ margin="normal"
+ multiline
+ rows={4}
+ error={Boolean(errors.descripcion)}
+ helperText={errors.descripcion || 'Campo Obligatorio'}
+ />
+
+
+ handleInputChange('ubicacion', e.target.value)}
+ margin="normal"
+ error={Boolean(errors.ubicacion)}
+ helperText={errors.ubicacion || 'Campo Obligatorio'}
+ />
+ handleInputChange('numeroUbicacion', e.target.value)}
+ margin="normal"
+ />
+
+
+ {/* Reemplaza con tu API key */}
+
+
+
+
+
+ {/* Campos de contacto */}
+
+ handleInputChange('nombreContacto', e.target.value)}
+ margin="normal"
+ />
+
+ handleInputChange('celularContacto', e.target.value)}
+ margin="normal"
+ error={Boolean(errors.celularContacto)}
+ helperText={errors.celularContacto}
+ type="number"
+ />
+
+ handleInputChange('mailContacto', e.target.value)}
+ margin="normal"
+ error={Boolean(errors.mailContacto)}
+ helperText={errors.mailContacto}
+ />
+
+
+ {errors.contacto && {errors.contacto} || 'Incluir al menos el número de celular o mail de contacto'}
+
+ {/* Red social y opciones */}
+
+ handleInputChange('instagram', e.target.value)} margin="normal" />
+ handleInputChange('facebook', e.target.value)} margin="normal" />
+ handleInputChange('paginaWeb', e.target.value)} margin="normal" error={Boolean(errors.paginaWeb)} helperText={errors.paginaWeb} />
+
+
+
+ handleInputChange('disponible', e.target.checked)} />} label="Actualmente Disponible" />
+
+
+
+ handleInputChange('aptoVeganos', e.target.checked)} />} label="Apto para Veganos" />
+ handleInputChange('aptoVegetarianos', e.target.checked)} />} label="Apto para Vegetarianos" />
+ handleInputChange('aptoCeliacos', e.target.checked)} />} label="Apto para Celíacos" />
+
+
+
+
+ Enviar
+
+
+
+ );
}
GastronomiaForm.propTypes = {
- handleNext: PropTypes.func.isRequired,
- };
+ handleNext: PropTypes.func.isRequired,
+};
+
export default GastronomiaForm;
diff --git a/src/pages/users/zholistico.jsx b/src/pages/users/zholistico.jsx
index 49aa36d..dd2aba5 100644
--- a/src/pages/users/zholistico.jsx
+++ b/src/pages/users/zholistico.jsx
@@ -8,8 +8,8 @@ import {
FormControlLabel,
Typography,
} from '@mui/material';
-//------------new
-import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api'; // Importar componentes de Google Maps
+import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api';
+
const mapContainerStyle = {
height: "400px",
width: "100%"
@@ -19,266 +19,230 @@ const center = {
lat: -33.4489, // Cambia esto a la latitud de tu ubicación inicial
lng: -70.6693 // Cambia esto a la longitud de tu ubicación inicial
};
-//-----------new
-
function HolisticoForm({ handleNext }) {
- //-----------new
- const [markerPosition, setMarkerPosition] = useState(center); // Estado para la posición del marcador
- const [userLocation, setUserLocation] = useState(null); // Estado para la ubicación del usuario
-
- const handleMapClick = async (event) => {
- const lat = event.latLng.lat();
- const lng = event.latLng.lng();
- setMarkerPosition({ lat, lng }); // Actualiza la posición del marcador
- // Aquí puedes agregar lógica para convertir las coordenadas en una dirección si lo deseas
- //const address = await getAddressFromLatLng(lat, lng); //new
- setFormData((prev) => ({ ...prev, ubicacion: `Lat: ${lat}, Lng: ${lng}` })); // Actualiza el campo de ubicación
- };
-
- useEffect(() => {
- // Obtener ubicación actual del usuario
- if (navigator.geolocation) {
- navigator.geolocation.getCurrentPosition(position => {
- const newLocation = {
- lat: position.coords.latitude,
- lng: position.coords.longitude,
- };
- setUserLocation(newLocation);
- setMarkerPosition(newLocation);
- //setFormData(prev => ({ ...prev, ubicacion: address })); //new
- setFormData(prev => ({ ...prev, ubicacion: `Lat: ${position.coords.latitude}, Lng: ${position.coords.longitude}` }));
- }, () => {
- alert("No se pudo obtener la ubicación.");
- });
- } else {
- alert("Geolocalización no es soportada en este navegador.");
- }
- }, []);
-
- /*const getAddressFromLatLng = async (lat, lng) => {
- const apiKey = "AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E"; // Reemplaza con tu API key
- const response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`);
- const data = await response.json();
- if (data.results && data.results.length > 0) {
- return data.results[0].formatted_address; // Retorna la primera dirección formateada
- } else {
- return ''; // Retorna vacío si no se encuentra dirección
- }
- };*/
- //-----------new
-
- const [formData, setFormData] = useState({
- titulo: '',
- descripcion: '',
- ubicacion: '',
- numeroUbicacion: '',
- nombreContacto: '',
- celularContacto: '',
- mailContacto: '',
- instagram: '',
- facebook: '',
- paginaWeb: '',
- disponible: false,
- });
-
- const [errors, setErrors] = useState({});
-
- const handleInputChange = (field, value) => {
- setFormData(prev => ({ ...prev, [field]: value }));
- setErrors(prev => ({ ...prev, [field]: '' })); // Reset error when value changes
- };
-
-
-
- const validateForm = () => {
- const newErrors = {};
-
- if (!formData.titulo) {newErrors.titulo = 'Escribe un título.';}
- if (!formData.descripcion) {newErrors.descripcion = 'Escribe una descripción.';}
- if (!formData.ubicacion) {
- newErrors.ubicacion = 'Escribe una ubicación (Ej: Calle 123, Comuna, Ciudad).';
- } else if (!/^[\w\s,.-]+$/.test(formData.ubicacion)) { // Simple regex for address format
- newErrors.ubicacion = 'Debes seguir el formato de dirección: Calle 123, Comuna, Ciudad.';
- }
- if (!formData.celularContacto && !formData.mailContacto) {
- newErrors.contacto = 'Debes incluir al menos el número de celular de contacto o el mail de contacto.';
- } else {
- if (formData.celularContacto && !/^\d+$/.test(formData.celularContacto)) { // Validar que solo incluya números
- newErrors.celularContacto = 'El número de celular debe contener solo números. Ej: 9 8765 4321.';
- }
- if (formData.mailContacto && !/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/.test(formData.mailContacto)) { // Simple regex for email
- newErrors.mailContacto = 'Escribir el email en su debido formato. Ej: usuario@dominio.com';
- }
- }
- if (formData.paginaWeb && !/^(https?:\/\/)?([\w\-]+\.)+[\w\-]{2,4}(\/[\w\-\.]*)*$/.test(formData.paginaWeb)) {
- 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 handleSubmit = (e) => {
- e.preventDefault();
- if (validateForm()) {
- console.log('Formulario válido, proceder...');
- handleNext();
- } else {
- console.log('Errores en el formulario:', errors);
- }
- };
-
-
- return (
-
- Mundo Holístico
- Ingresa la información de tu publicación
-
- handleInputChange('titulo', e.target.value)}
- error={Boolean(errors.titulo)}
- helperText={errors.titulo||'Campo Obligatorio'}
- />
- handleInputChange('descripcion', e.target.value)}
- error={Boolean(errors.descripcion)}
- helperText={errors.descripcion||'Campo Obligatorio'}
- />
-
- handleInputChange('ubicacion', e.target.value)}
- error={Boolean(errors.ubicacion)}
- helperText={errors.ubicacion||'Campo Obligatorio'}
- />
- handleInputChange('ubicacion', e.target.value)}
- margin="normal"
- />
-
-
- {/* Reemplaza con tu API key */}
-
- {/* Muestra un marcador en la posición seleccionada */}
-
-
+ const [markerPosition, setMarkerPosition] = useState(center);
+ const [userLocation, setUserLocation] = useState(null);
+ const [formData, setFormData] = useState({
+ titulo: '',
+ descripcion: '',
+ ubicacion: '',
+ numeroUbicacion: '',
+ nombreContacto: '',
+ celularContacto: '',
+ mailContacto: '',
+ instagram: '',
+ facebook: '',
+ paginaWeb: '',
+ disponible: false,
+ });
+ const [errors, setErrors] = useState({});
+
+ // Función para obtener la dirección a partir de coordenadas
+ const getAddressFromLatLng = async (lat, lng) => {
+ const apiKey = "AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E"; // Reemplaza con tu API key
+ const response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`);
+ const data = await response.json();
+ if (data.results && data.results.length > 0) {
+ return data.results[0].formatted_address;
+ } else {
+ return '';
+ }
+ };
+ const handleMapClick = async (event) => {
+ const lat = event.latLng.lat();
+ const lng = event.latLng.lng();
+ setMarkerPosition({ lat, lng });
-
- handleInputChange('nombreContacto', e.target.value)}
- />
- handleInputChange('celularContacto', e.target.value)}
- type = "number"
- error={Boolean(errors.celularContacto)}
- helperText={errors.celularContacto}
- />
-
- handleInputChange('mailContacto', e.target.value)}
- error={Boolean(errors.mailContacto)}
- helperText={errors.mailContacto}
- />
-
+ const address = await getAddressFromLatLng(lat, lng); // Obtiene la dirección
+ setFormData((prev) => ({ ...prev, ubicacion: address }));
+ };
- {errors.contacto && {errors.contacto} ||'Incluir al menos el número de celular o mail de contacto'} {/* Mensaje de error de contacto */}
+ useEffect(() => {
+ // Obtener ubicación actual del usuario
+ if (navigator.geolocation) {
+ navigator.geolocation.getCurrentPosition(async (position) => {
+ const newLocation = {
+ lat: position.coords.latitude,
+ lng: position.coords.longitude,
+ };
+ setUserLocation(newLocation);
+ setMarkerPosition(newLocation);
+
+ const address = await getAddressFromLatLng(newLocation.lat, newLocation.lng);
+ setFormData((prev) => ({ ...prev, ubicacion: address }));
+ }, () => {
+ alert("No se pudo obtener la ubicación.");
+ });
+ } else {
+ alert("Geolocalización no es soportada en este navegador.");
+ }
+ }, []);
+
+ const handleInputChange = (field, value) => {
+ setFormData(prev => ({ ...prev, [field]: value }));
+ setErrors(prev => ({ ...prev, [field]: '' }));
+ };
-
- handleInputChange('instagram', e.target.value)}
- />
- handleInputChange('facebook', e.target.value)}
- />
- handleInputChange('paginaWeb', e.target.value)}
- error={Boolean(errors.paginaWeb)}
- helperText={errors.paginaWeb}
- />
-
+ const validateForm = () => {
+ const newErrors = {};
+ if (!formData.titulo) newErrors.titulo = 'Escribe un título.';
+ if (!formData.descripcion) newErrors.descripcion = 'Escribe una descripción.';
+ if (!formData.ubicacion) newErrors.ubicacion = 'Escribe una ubicación (Ej: Calle 123, Comuna, Ciudad).';
+ if (!formData.celularContacto && !formData.mailContacto) {
+ newErrors.contacto = 'Debes incluir al menos el número de celular de contacto o el mail de contacto.';
+ }
+ setErrors(newErrors);
+ return Object.keys(newErrors).length === 0;
+ };
-
+ const handleSubmit = (e) => {
+ e.preventDefault();
+ if (validateForm()) {
+ console.log('Formulario válido, proceder...');
+ handleNext();
+ } else {
+ console.log('Errores en el formulario:', errors);
+ }
+ };
-
handleInputChange('disponible', e.target.checked)}
- />
- }
- label="Actualmente Disponible"
+ return (
+
+ Mundo Holístico
+ Ingresa la información de tu publicación
+
+ handleInputChange('titulo', e.target.value)}
+ error={Boolean(errors.titulo)}
+ helperText={errors.titulo || 'Campo Obligatorio'}
+ />
+ handleInputChange('descripcion', e.target.value)}
+ error={Boolean(errors.descripcion)}
+ helperText={errors.descripcion || 'Campo Obligatorio'}
+ />
+
+ handleInputChange('ubicacion', e.target.value)}
+ error={Boolean(errors.ubicacion)}
+ helperText={errors.ubicacion || 'Campo Obligatorio'}
+ />
+ handleInputChange('numeroUbicacion', e.target.value)}
+ margin="normal"
+ />
+
+
+
+
+
+
+
+
+
+ handleInputChange('nombreContacto', e.target.value)}
+ />
+ handleInputChange('celularContacto', e.target.value)}
+ type="number"
+ error={Boolean(errors.celularContacto)}
+ helperText={errors.celularContacto}
+ />
+ handleInputChange('mailContacto', e.target.value)}
+ error={Boolean(errors.mailContacto)}
+ helperText={errors.mailContacto}
+ />
+
+
+ {errors.contacto && {errors.contacto} || 'Incluir al menos el número de celular o mail de contacto'}
+
+
+ handleInputChange('instagram', e.target.value)}
+ />
+ handleInputChange('facebook', e.target.value)}
+ />
+ handleInputChange('paginaWeb', e.target.value)}
+ error={Boolean(errors.paginaWeb)}
+ helperText={errors.paginaWeb}
+ />
+
+
+
+ handleInputChange('disponible', e.target.checked)}
/>
-
-
-
-
-
- Enviar
-
-
-
-
-
- );
+ }
+ label="Actualmente Disponible"
+ />
+
+
+
+
+ Enviar
+
+
+
+ );
}
HolisticoForm.propTypes = {
- handleNext: PropTypes.func.isRequired,
- };
+ handleNext: PropTypes.func.isRequired,
+};
+
export default HolisticoForm;
diff --git a/src/pages/users/zhospedaje.jsx b/src/pages/users/zhospedaje.jsx
index 6b3dd6e..ff693b4 100644
--- a/src/pages/users/zhospedaje.jsx
+++ b/src/pages/users/zhospedaje.jsx
@@ -1,8 +1,8 @@
-import React from 'react';
+import '../../styles/users/zhospedaje.css';
+import { useState, useEffect } from 'react';
import PropTypes from 'prop-types';
import { TextField, MenuItem, FormControl, InputLabel, Select, Checkbox, FormControlLabel, Typography, Button, Box } from '@mui/material';
import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api';
-import '../../styles/users/zhospedaje.css';
const subcategories = [
{ label: 'Arriendo', value: 'arriendo' },
@@ -17,13 +17,56 @@ const mapContainerStyle = { height: "400px", width: "100%" };
const center = { lat: -33.4489, lng: -70.6693 };
function HospedajeForm({ formData, errors, onInputChange, onNext }) {
- const handleInputChange = (field, value) => {
- onInputChange(field, value);
+ const [markerPosition, setMarkerPosition] = useState(center);
+
+ // Función para obtener la dirección a partir de coordenadas
+ const getAddressFromLatLng = async (lat, lng) => {
+ const apiKey = "AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E"; // Reemplaza con tu API key
+ const response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`);
+ const data = await response.json();
+ if (data.results && data.results.length > 0) {
+ return data.results[0].formatted_address; // Retorna la dirección formateada
+ } else {
+ return '';
+ }
};
+ const handleMapClick = async (event) => {
+ const lat = event.latLng.lat();
+ const lng = event.latLng.lng();
+ setMarkerPosition({ lat, lng }); // Actualiza la posición del marcador
+
+ const address = await getAddressFromLatLng(lat, lng); // Obtiene la dirección
+ if (address) {
+ onInputChange('ubicacion', address); // Actualiza el campo de ubicación en el formulario
+ }
+ };
+
+ useEffect(() => {
+ // Obtener ubicación actual del usuario
+ if (navigator.geolocation) {
+ navigator.geolocation.getCurrentPosition(async (position) => {
+ const newLocation = {
+ lat: position.coords.latitude,
+ lng: position.coords.longitude,
+ };
+ setMarkerPosition(newLocation); // Actualiza la posición del marcador
+
+ const address = await getAddressFromLatLng(newLocation.lat, newLocation.lng);
+ if (address) {
+ onInputChange('ubicacion', address); // Actualiza el campo de ubicación en el formulario
+ }
+ }, () => {
+ alert("No se pudo obtener la ubicación.");
+ });
+ } else {
+ alert("Geolocalización no es soportada en este navegador.");
+ }
+ }, [onInputChange]);
+
const handleSubmit = (event) => {
event.preventDefault();
- onNext();
+ onNext(); // Llama a la función de siguiente paso
};
return (
@@ -38,7 +81,7 @@ function HospedajeForm({ formData, errors, onInputChange, onNext }) {
id="tipo-acomodacion"
value={formData.subcategoria}
label="Tipo de Acomodación"
- onChange={(e) => handleInputChange('subcategoria', e.target.value)}
+ onChange={(e) => onInputChange('subcategoria', e.target.value)}
>
{subcategories.map((type) => (
{type.label}
@@ -51,7 +94,7 @@ function HospedajeForm({ formData, errors, onInputChange, onNext }) {
fullWidth
label="Título"
value={formData.titulo}
- onChange={(e) => handleInputChange('titulo', e.target.value)}
+ onChange={(e) => onInputChange('titulo', e.target.value)}
margin="normal"
error={Boolean(errors.titulo)}
helperText={errors.titulo || 'Campo Obligatorio'}
@@ -61,7 +104,7 @@ function HospedajeForm({ formData, errors, onInputChange, onNext }) {
fullWidth
label="Descripción"
value={formData.descripcion}
- onChange={(e) => handleInputChange('descripcion', e.target.value)}
+ onChange={(e) => onInputChange('descripcion', e.target.value)}
margin="normal"
multiline
rows={4}
@@ -74,7 +117,7 @@ function HospedajeForm({ formData, errors, onInputChange, onNext }) {
fullWidth
label="Ubicación: Calle 123, Comuna, Ciudad"
value={formData.ubicacion}
- onChange={(e) => handleInputChange('ubicacion', e.target.value)}
+ onChange={(e) => onInputChange('ubicacion', e.target.value)}
margin="normal"
error={Boolean(errors.ubicacion)}
helperText={errors.ubicacion || 'Campo Obligatorio'}
@@ -83,14 +126,19 @@ function HospedajeForm({ formData, errors, onInputChange, onNext }) {
fullWidth
label="Número Casa/Depto"
value={formData.numeroUbicacion}
- onChange={(e) => handleInputChange('numeroUbicacion', e.target.value)}
+ onChange={(e) => onInputChange('numeroUbicacion', e.target.value)}
margin="normal"
/>
-
-
-
+
+
+
@@ -212,4 +260,4 @@ HospedajeForm.propTypes = {
onNext: PropTypes.func.isRequired,
};
-export default HospedajeForm;
\ No newline at end of file
+export default HospedajeForm;
diff --git a/src/pages/users/zmascota.jsx b/src/pages/users/zmascota.jsx
index da8568a..05ccc27 100644
--- a/src/pages/users/zmascota.jsx
+++ b/src/pages/users/zmascota.jsx
@@ -8,8 +8,8 @@ import {
FormControlLabel,
Typography,
} from '@mui/material';
-//------------new
-import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api'; // Importar componentes de Google Maps
+import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api';
+
const mapContainerStyle = {
height: "400px",
width: "100%"
@@ -19,266 +19,228 @@ const center = {
lat: -33.4489, // Cambia esto a la latitud de tu ubicación inicial
lng: -70.6693 // Cambia esto a la longitud de tu ubicación inicial
};
-//-----------new
-
function MascotaForm({ handleNext }) {
- //-----------new
- const [markerPosition, setMarkerPosition] = useState(center); // Estado para la posición del marcador
- const [userLocation, setUserLocation] = useState(null); // Estado para la ubicación del usuario
-
- const handleMapClick = async (event) => {
- const lat = event.latLng.lat();
- const lng = event.latLng.lng();
- setMarkerPosition({ lat, lng }); // Actualiza la posición del marcador
- // Aquí puedes agregar lógica para convertir las coordenadas en una dirección si lo deseas
- //const address = await getAddressFromLatLng(lat, lng); //new
- setFormData((prev) => ({ ...prev, ubicacion: `Lat: ${lat}, Lng: ${lng}` })); // Actualiza el campo de ubicación
- };
-
- useEffect(() => {
- // Obtener ubicación actual del usuario
- if (navigator.geolocation) {
- navigator.geolocation.getCurrentPosition(position => {
- const newLocation = {
- lat: position.coords.latitude,
- lng: position.coords.longitude,
- };
- setUserLocation(newLocation);
- setMarkerPosition(newLocation);
- //setFormData(prev => ({ ...prev, ubicacion: address })); //new
- setFormData(prev => ({ ...prev, ubicacion: `Lat: ${position.coords.latitude}, Lng: ${position.coords.longitude}` }));
- }, () => {
- alert("No se pudo obtener la ubicación.");
- });
- } else {
- alert("Geolocalización no es soportada en este navegador.");
- }
- }, []);
-
- /*const getAddressFromLatLng = async (lat, lng) => {
- const apiKey = "AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E"; // Reemplaza con tu API key
- const response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`);
- const data = await response.json();
- if (data.results && data.results.length > 0) {
- return data.results[0].formatted_address; // Retorna la primera dirección formateada
- } else {
- return ''; // Retorna vacío si no se encuentra dirección
- }
- };*/
- //-----------new
-
- const [formData, setFormData] = useState({
- titulo: '',
- descripcion: '',
- ubicacion: '',
- numeroUbicacion: '',
- nombreContacto: '',
- celularContacto: '',
- mailContacto: '',
- instagram: '',
- facebook: '',
- paginaWeb: '',
- disponible: false,
- });
-
- const [errors, setErrors] = useState({});
-
- const handleInputChange = (field, value) => {
- setFormData(prev => ({ ...prev, [field]: value }));
- setErrors(prev => ({ ...prev, [field]: '' })); // Reset error when value changes
- };
-
-
- const validateForm = () => {
- const newErrors = {};
-
- if (!formData.titulo) {newErrors.titulo = 'Escribe un título.';}
- if (!formData.descripcion) {newErrors.descripcion = 'Escribe una descripción.';}
- if (!formData.ubicacion) {
- newErrors.ubicacion = 'Escribe una ubicación (Ej: Calle 123, Comuna, Ciudad).';
- } else if (!/^[\w\s,.-]+$/.test(formData.ubicacion)) { // Simple regex for address format
- newErrors.ubicacion = 'Debes seguir el formato de dirección: Calle 123, Comuna, Ciudad.';
- }
- if (!formData.celularContacto && !formData.mailContacto) {
- newErrors.contacto = 'Debes incluir al menos el número de celular de contacto o el mail de contacto.';
- } else {
- if (formData.celularContacto && !/^\d+$/.test(formData.celularContacto)) { // Validar que solo incluya números
- newErrors.celularContacto = 'El número de celular debe contener solo números. Ej: 9 8765 4321.';
- }
- if (formData.mailContacto && !/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/.test(formData.mailContacto)) { // Simple regex for email
- newErrors.mailContacto = 'Escribir el email en su debido formato. Ej: usuario@dominio.com';
- }
- }
- if (formData.paginaWeb && !/^(https?:\/\/)?([\w\-]+\.)+[\w\-]{2,4}(\/[\w\-\.]*)*$/.test(formData.paginaWeb)) {
- 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 handleSubmit = (e) => {
- e.preventDefault();
- if (validateForm()) {
- console.log('Formulario válido, proceder...');
- handleNext();
- } else {
- console.log('Errores en el formulario:', errors);
- }
- };
-
-
- return (
-
- Mascotas
- Ingresa la información de tu publicación
-
- handleInputChange('titulo', e.target.value)}
- error={Boolean(errors.titulo)}
- helperText={errors.titulo||'Campo Obligatorio'}
- />
- handleInputChange('descripcion', e.target.value)}
- error={Boolean(errors.descripcion)}
- helperText={errors.descripcion||'Campo Obligatorio'}
- />
-
- handleInputChange('ubicacion', e.target.value)}
- error={Boolean(errors.ubicacion)}
- helperText={errors.ubicacion||'Campo Obligatorio'}
- />
- handleInputChange('ubicacion', e.target.value)}
- margin="normal"
- />
-
-
- {/* Reemplaza con tu API key */}
-
- {/* Muestra un marcador en la posición seleccionada */}
-
-
-
-
-
- handleInputChange('nombreContacto', e.target.value)}
- />
- handleInputChange('celularContacto', e.target.value)}
- type = "number"
- error={Boolean(errors.celularContacto)}
- helperText={errors.celularContacto}
- />
+ const [markerPosition, setMarkerPosition] = useState(center);
+ const [userLocation, setUserLocation] = useState(null);
+ const [formData, setFormData] = useState({
+ titulo: '',
+ descripcion: '',
+ ubicacion: '',
+ numeroUbicacion: '',
+ nombreContacto: '',
+ celularContacto: '',
+ mailContacto: '',
+ instagram: '',
+ facebook: '',
+ paginaWeb: '',
+ disponible: false,
+ });
+ const [errors, setErrors] = useState({});
+
+ const getAddressFromLatLng = async (lat, lng) => {
+ const apiKey = "AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E"; // Reemplaza con tu API key
+ const response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`);
+ const data = await response.json();
+ if (data.results && data.results.length > 0) {
+ return data.results[0].formatted_address;
+ } else {
+ return '';
+ }
+ };
- handleInputChange('mailContacto', e.target.value)}
- error={Boolean(errors.mailContacto)}
- helperText={errors.mailContacto}
- />
-
+ const handleMapClick = async (event) => {
+ const lat = event.latLng.lat();
+ const lng = event.latLng.lng();
+ setMarkerPosition({ lat, lng });
- {errors.contacto && {errors.contacto} ||'Incluir al menos el número de celular o mail de contacto'} {/* Mensaje de error de contacto */}
+ const address = await getAddressFromLatLng(lat, lng);
+ setFormData((prev) => ({ ...prev, ubicacion: address }));
+ };
-
- handleInputChange('instagram', e.target.value)}
- />
- handleInputChange('facebook', e.target.value)}
- />
- handleInputChange('paginaWeb', e.target.value)}
- error={Boolean(errors.paginaWeb)}
- helperText={errors.paginaWeb}
- />
-
+ useEffect(() => {
+ if (navigator.geolocation) {
+ navigator.geolocation.getCurrentPosition(async (position) => {
+ const newLocation = {
+ lat: position.coords.latitude,
+ lng: position.coords.longitude,
+ };
+ setUserLocation(newLocation);
+ setMarkerPosition(newLocation);
+
+ const address = await getAddressFromLatLng(newLocation.lat, newLocation.lng);
+ setFormData((prev) => ({ ...prev, ubicacion: address }));
+ }, () => {
+ alert("No se pudo obtener la ubicación.");
+ });
+ } else {
+ alert("Geolocalización no es soportada en este navegador.");
+ }
+ }, []);
+
+ const handleInputChange = (field, value) => {
+ setFormData(prev => ({ ...prev, [field]: value }));
+ setErrors(prev => ({ ...prev, [field]: '' }));
+ };
-
+ const validateForm = () => {
+ const newErrors = {};
+ if (!formData.titulo) newErrors.titulo = 'Escribe un título.';
+ if (!formData.descripcion) newErrors.descripcion = 'Escribe una descripción.';
+ if (!formData.ubicacion) newErrors.ubicacion = 'Escribe una ubicación (Ej: Calle 123, Comuna, Ciudad).';
+ if (!formData.celularContacto && !formData.mailContacto) {
+ newErrors.contacto = 'Debes incluir al menos el número de celular de contacto o el mail de contacto.';
+ }
+ setErrors(newErrors);
+ return Object.keys(newErrors).length === 0;
+ };
+ const handleSubmit = (e) => {
+ e.preventDefault();
+ if (validateForm()) {
+ console.log('Formulario válido, proceder...');
+ handleNext();
+ } else {
+ console.log('Errores en el formulario:', errors);
+ }
+ };
-
handleInputChange('disponible', e.target.checked)}
- />
- }
- label="Actualmente Disponible"
+ return (
+
+ Mascotas
+ Ingresa la información de tu publicación
+
+ handleInputChange('titulo', e.target.value)}
+ error={Boolean(errors.titulo)}
+ helperText={errors.titulo || 'Campo Obligatorio'}
+ />
+ handleInputChange('descripcion', e.target.value)}
+ error={Boolean(errors.descripcion)}
+ helperText={errors.descripcion || 'Campo Obligatorio'}
+ />
+
+ handleInputChange('ubicacion', e.target.value)}
+ error={Boolean(errors.ubicacion)}
+ helperText={errors.ubicacion || 'Campo Obligatorio'}
+ />
+ handleInputChange('numeroUbicacion', e.target.value)}
+ margin="normal"
+ />
+
+
+
+
+
+
+
+
+
+ handleInputChange('nombreContacto', e.target.value)}
+ />
+ handleInputChange('celularContacto', e.target.value)}
+ type="number"
+ error={Boolean(errors.celularContacto)}
+ helperText={errors.celularContacto}
+ />
+ handleInputChange('mailContacto', e.target.value)}
+ error={Boolean(errors.mailContacto)}
+ helperText={errors.mailContacto}
+ />
+
+
+ {errors.contacto && {errors.contacto} || 'Incluir al menos el número de celular o mail de contacto'}
+
+
+ handleInputChange('instagram', e.target.value)}
+ />
+ handleInputChange('facebook', e.target.value)}
+ />
+ handleInputChange('paginaWeb', e.target.value)}
+ error={Boolean(errors.paginaWeb)}
+ helperText={errors.paginaWeb}
+ />
+
+
+
+ handleInputChange('disponible', e.target.checked)}
/>
-
-
-
-
-
- Enviar
-
-
-
-
-
- );
+ }
+ label="Actualmente Disponible"
+ />
+
+
+
+
+ Enviar
+
+
+
+ );
}
MascotaForm.propTypes = {
- handleNext: PropTypes.func.isRequired,
- };
+ handleNext: PropTypes.func.isRequired,
+};
+
export default MascotaForm;
diff --git a/src/pages/users/znegocios.jsx b/src/pages/users/znegocios.jsx
index 7c7d6cc..7f94a82 100644
--- a/src/pages/users/znegocios.jsx
+++ b/src/pages/users/znegocios.jsx
@@ -8,8 +8,8 @@ import {
FormControlLabel,
Typography,
} from '@mui/material';
-//------------new
-import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api'; // Importar componentes de Google Maps
+import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api';
+
const mapContainerStyle = {
height: "400px",
width: "100%"
@@ -19,263 +19,231 @@ const center = {
lat: -33.4489, // Cambia esto a la latitud de tu ubicación inicial
lng: -70.6693 // Cambia esto a la longitud de tu ubicación inicial
};
-//-----------new
-
function NegociosForm({ handleNext }) {
- //-----------new
- const [markerPosition, setMarkerPosition] = useState(center); // Estado para la posición del marcador
- const [userLocation, setUserLocation] = useState(null); // Estado para la ubicación del usuario
-
- const handleMapClick = async (event) => {
- const lat = event.latLng.lat();
- const lng = event.latLng.lng();
- setMarkerPosition({ lat, lng }); // Actualiza la posición del marcador
- // Aquí puedes agregar lógica para convertir las coordenadas en una dirección si lo deseas
- //const address = await getAddressFromLatLng(lat, lng); //new
- setFormData((prev) => ({ ...prev, ubicacion: `Lat: ${lat}, Lng: ${lng}` })); // Actualiza el campo de ubicación
- };
-
- useEffect(() => {
- // Obtener ubicación actual del usuario
- if (navigator.geolocation) {
- navigator.geolocation.getCurrentPosition(position => {
- const newLocation = {
- lat: position.coords.latitude,
- lng: position.coords.longitude,
- };
- setUserLocation(newLocation);
- setMarkerPosition(newLocation);
- //setFormData(prev => ({ ...prev, ubicacion: address })); //new
- setFormData(prev => ({ ...prev, ubicacion: `Lat: ${position.coords.latitude}, Lng: ${position.coords.longitude}` }));
- }, () => {
- alert("No se pudo obtener la ubicación.");
- });
- } else {
- alert("Geolocalización no es soportada en este navegador.");
- }
- }, []);
-
- /*const getAddressFromLatLng = async (lat, lng) => {
- const apiKey = "AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E"; // Reemplaza con tu API key
- const response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`);
- const data = await response.json();
- if (data.results && data.results.length > 0) {
- return data.results[0].formatted_address; // Retorna la primera dirección formateada
- } else {
- return ''; // Retorna vacío si no se encuentra dirección
- }
- };*/
- //-----------new
-
- const [formData, setFormData] = useState({
- titulo: '',
- descripcion: '',
- ubicacion: '',
- numeroUbicacion: '',
- nombreContacto: '',
- celularContacto: '',
- mailContacto: '',
- instagram: '',
- facebook: '',
- paginaWeb: '',
- disponible: false,
- });
-
- const [errors, setErrors] = useState({});
-
- const handleInputChange = (field, value) => {
- setFormData(prev => ({ ...prev, [field]: value }));
- setErrors(prev => ({ ...prev, [field]: '' })); // Reset error when value changes
- };
-
- const validateForm = () => {
- const newErrors = {};
-
- if (!formData.titulo) {newErrors.titulo = 'Escribe un título.';}
- if (!formData.descripcion) {newErrors.descripcion = 'Escribe una descripción.';}
- if (!formData.ubicacion) {
- newErrors.ubicacion = 'Escribe una ubicación (Ej: Calle 123, Comuna, Ciudad).';
- } else if (!/^[\w\s,.-]+$/.test(formData.ubicacion)) { // Simple regex for address format
- newErrors.ubicacion = 'Debes seguir el formato de dirección: Calle 123, Comuna, Ciudad.';
- }
- if (!formData.celularContacto && !formData.mailContacto) {
- newErrors.contacto = 'Debes incluir al menos el número de celular de contacto o el mail de contacto.';
- } else {
- if (formData.celularContacto && !/^\d+$/.test(formData.celularContacto)) { // Validar que solo incluya números
- newErrors.celularContacto = 'El número de celular debe contener solo números. Ej: 9 8765 4321.';
- }
- if (formData.mailContacto && !/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/.test(formData.mailContacto)) { // Simple regex for email
- newErrors.mailContacto = 'Escribir el email en su debido formato. Ej: usuario@dominio.com';
- }
- }
- if (formData.paginaWeb && !/^(https?:\/\/)?([\w\-]+\.)+[\w\-]{2,4}(\/[\w\-\.]*)*$/.test(formData.paginaWeb)) {
- 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 handleSubmit = (e) => {
- e.preventDefault();
- if (validateForm()) {
- console.log('Formulario válido, proceder...');
- handleNext();
- } else {
- console.log('Errores en el formulario:', errors);
- }
- };
-
-
- return (
-
- Negocios y Tiendas
- Ingresa la información de tu publicación
-
- handleInputChange('titulo', e.target.value)}
- error={Boolean(errors.titulo)}
- helperText={errors.titulo||'Campo Obligatorio'}
- />
- handleInputChange('descripcion', e.target.value)}
- error={Boolean(errors.descripcion)}
- helperText={errors.descripcion||'Campo Obligatorio'}
- />
-
- handleInputChange('ubicacion', e.target.value)}
- error={Boolean(errors.ubicacion)}
- helperText={errors.ubicacion||'Campo Obligatorio'}
- />
- handleInputChange('ubicacion', e.target.value)}
- margin="normal"
- />
-
+ const [markerPosition, setMarkerPosition] = useState(center); // Estado para la posición del marcador
+ const [userLocation, setUserLocation] = useState(null); // Estado para la ubicación del usuario
+ const [formData, setFormData] = useState({
+ titulo: '',
+ descripcion: '',
+ ubicacion: '',
+ numeroUbicacion: '',
+ nombreContacto: '',
+ celularContacto: '',
+ mailContacto: '',
+ instagram: '',
+ facebook: '',
+ paginaWeb: '',
+ disponible: false,
+ });
+ const [errors, setErrors] = useState({});
+
+ // Función para obtener la dirección a partir de coordenadas
+ const getAddressFromLatLng = async (lat, lng) => {
+ const apiKey = "AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E"; // Reemplaza con tu API key
+ const response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`);
+ const data = await response.json();
+ if (data.results && data.results.length > 0) {
+ return data.results[0].formatted_address; // Retorna la primera dirección formateada
+ } else {
+ return ''; // Retorna vacío si no se encuentra dirección
+ }
+ };
- {/* Reemplaza con tu API key */}
-
- {/* Muestra un marcador en la posición seleccionada */}
-
-
+ const handleMapClick = async (event) => {
+ const lat = event.latLng.lat();
+ const lng = event.latLng.lng();
+ setMarkerPosition({ lat, lng }); // Actualiza la posición del marcador
+ const address = await getAddressFromLatLng(lat, lng); // Obtiene la dirección
+ setFormData((prev) => ({ ...prev, ubicacion: address })); // Actualiza el campo de ubicación
+ };
-
- handleInputChange('nombreContacto', e.target.value)}
- />
- handleInputChange('celularContacto', e.target.value)}
- type = "number"
- error={Boolean(errors.celularContacto)}
- helperText={errors.celularContacto}
- />
+ useEffect(() => {
+ // Obtener ubicación actual del usuario
+ if (navigator.geolocation) {
+ navigator.geolocation.getCurrentPosition(async (position) => {
+ const newLocation = {
+ lat: position.coords.latitude,
+ lng: position.coords.longitude,
+ };
+ setUserLocation(newLocation);
+ setMarkerPosition(newLocation);
+
+ const address = await getAddressFromLatLng(newLocation.lat, newLocation.lng); // Obtiene la dirección de la ubicación actual
+ setFormData((prev) => ({ ...prev, ubicacion: address }));
+ }, () => {
+ alert("No se pudo obtener la ubicación.");
+ });
+ } else {
+ alert("Geolocalización no es soportada en este navegador.");
+ }
+ }, []);
+
+ const handleInputChange = (field, value) => {
+ setFormData(prev => ({ ...prev, [field]: value }));
+ setErrors(prev => ({ ...prev, [field]: '' })); // Reset error when value changes
+ };
- handleInputChange('mailContacto', e.target.value)}
- error={Boolean(errors.mailContacto)}
- helperText={errors.mailContacto}
- />
-
+ const validateForm = () => {
+ const newErrors = {};
+ if (!formData.titulo) newErrors.titulo = 'Escribe un título.';
+ if (!formData.descripcion) newErrors.descripcion = 'Escribe una descripción.';
+ if (!formData.ubicacion) newErrors.ubicacion = 'Escribe una ubicación (Ej: Calle 123, Comuna, Ciudad).';
+ if (!formData.celularContacto && !formData.mailContacto) {
+ newErrors.contacto = 'Debes incluir al menos el número de celular de contacto o el mail de contacto.';
+ }
+ setErrors(newErrors);
+ return Object.keys(newErrors).length === 0;
+ };
- {errors.contacto && {errors.contacto} ||'Incluir al menos el número de celular o mail de contacto'} {/* Mensaje de error de contacto */}
+ const handleSubmit = (e) => {
+ e.preventDefault();
+ if (validateForm()) {
+ console.log('Formulario válido, proceder...');
+ handleNext();
+ } else {
+ console.log('Errores en el formulario:', errors);
+ }
+ };
-
-
handleInputChange('instagram', e.target.value)}
- />
- handleInputChange('facebook', e.target.value)}
- />
- handleInputChange('paginaWeb', e.target.value)}
- error={Boolean(errors.paginaWeb)}
- helperText={errors.paginaWeb}
+ return (
+
+ Negocios y Tiendas
+ Ingresa la información de tu publicación
+
+ handleInputChange('titulo', e.target.value)}
+ error={Boolean(errors.titulo)}
+ helperText={errors.titulo || 'Campo Obligatorio'}
+ />
+ handleInputChange('descripcion', e.target.value)}
+ error={Boolean(errors.descripcion)}
+ helperText={errors.descripcion || 'Campo Obligatorio'}
+ />
+
+
+ handleInputChange('ubicacion', e.target.value)}
+ error={Boolean(errors.ubicacion)}
+ helperText={errors.ubicacion || 'Campo Obligatorio'}
+ />
+ handleInputChange('numeroUbicacion', e.target.value)}
+ margin="normal"
+ />
+
+
+
+
+
+
+
+
+
+ handleInputChange('nombreContacto', e.target.value)}
+ />
+ handleInputChange('celularContacto', e.target.value)}
+ type="number"
+ error={Boolean(errors.celularContacto)}
+ helperText={errors.celularContacto}
+ />
+ handleInputChange('mailContacto', e.target.value)}
+ error={Boolean(errors.mailContacto)}
+ helperText={errors.mailContacto}
+ />
+
+
+ {errors.contacto && {errors.contacto} || 'Incluir al menos el número de celular o mail de contacto'}
+
+
+ handleInputChange('instagram', e.target.value)}
+ />
+ handleInputChange('facebook', e.target.value)}
+ />
+ handleInputChange('paginaWeb', e.target.value)}
+ error={Boolean(errors.paginaWeb)}
+ helperText={errors.paginaWeb}
+ />
+
+
+
+ handleInputChange('disponible', e.target.checked)}
/>
-
-
-
-
- handleInputChange('disponible', e.target.checked)}
- />
- }
- label="Actualmente Disponible"
- />
-
-
-
-
- Enviar
-
-
-
-
-
- );
+ }
+ label="Actualmente Disponible"
+ />
+
+
+
+
+ Enviar
+
+
+
+ );
}
NegociosForm.propTypes = {
- handleNext: PropTypes.func.isRequired,
- };
+ handleNext: PropTypes.func.isRequired,
+};
+
export default NegociosForm;
diff --git a/src/pages/users/zoficio.jsx b/src/pages/users/zoficio.jsx
index 21fac54..fac3765 100644
--- a/src/pages/users/zoficio.jsx
+++ b/src/pages/users/zoficio.jsx
@@ -8,277 +8,239 @@ import {
FormControlLabel,
Typography,
} from '@mui/material';
-//------------new
-import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api'; // Importar componentes de Google Maps
+import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api';
+
const mapContainerStyle = {
height: "400px",
width: "100%"
};
const center = {
- lat: -33.4489, // Cambia esto a la latitud de tu ubicación inicial
- lng: -70.6693 // Cambia esto a la longitud de tu ubicación inicial
+ lat: -33.4489,
+ lng: -70.6693
};
-//-----------new
-
function OficioForm({ handleNext }) {
- //-----------new
- const [markerPosition, setMarkerPosition] = useState(center); // Estado para la posición del marcador
- const [userLocation, setUserLocation] = useState(null); // Estado para la ubicación del usuario
-
- const handleMapClick = async (event) => {
- const lat = event.latLng.lat();
- const lng = event.latLng.lng();
- setMarkerPosition({ lat, lng }); // Actualiza la posición del marcador
- // Aquí puedes agregar lógica para convertir las coordenadas en una dirección si lo deseas
- //const address = await getAddressFromLatLng(lat, lng); //new
- setFormData((prev) => ({ ...prev, ubicacion: `Lat: ${lat}, Lng: ${lng}` })); // Actualiza el campo de ubicación
- };
-
- useEffect(() => {
- // Obtener ubicación actual del usuario
- if (navigator.geolocation) {
- navigator.geolocation.getCurrentPosition(position => {
- const newLocation = {
- lat: position.coords.latitude,
- lng: position.coords.longitude,
- };
- setUserLocation(newLocation);
- setMarkerPosition(newLocation);
- //setFormData(prev => ({ ...prev, ubicacion: address })); //new
- setFormData(prev => ({ ...prev, ubicacion: `Lat: ${position.coords.latitude}, Lng: ${position.coords.longitude}` }));
- }, () => {
- alert("No se pudo obtener la ubicación.");
- });
- } else {
- alert("Geolocalización no es soportada en este navegador.");
- }
- }, []);
-
- /*const getAddressFromLatLng = async (lat, lng) => {
- const apiKey = "AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E"; // Reemplaza con tu API key
- const response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`);
- const data = await response.json();
- if (data.results && data.results.length > 0) {
- return data.results[0].formatted_address; // Retorna la primera dirección formateada
- } else {
- return ''; // Retorna vacío si no se encuentra dirección
- }
- };*/
- //-----------new
-
- const [formData, setFormData] = useState({
- titulo: '',
- descripcion: '',
- ubicacion: '',
- numeroUbicacion: '',
- nombreContacto: '',
- celularContacto: '',
- mailContacto: '',
- instagram: '',
- facebook: '',
- paginaWeb: '',
- disponible: false,
- });
-
- const [errors, setErrors] = useState({});
-
- const handleInputChange = (field, value) => {
- setFormData(prev => ({ ...prev, [field]: value }));
- setErrors(prev => ({ ...prev, [field]: '' })); // Reset error when value changes
- };
-
-
-
- const validateForm = () => {
- const newErrors = {};
-
- if (!formData.titulo) {newErrors.titulo = 'Escribe un título.';}
- if (!formData.descripcion) {newErrors.descripcion = 'Escribe una descripción.';}
- if (!formData.ubicacion) {
- newErrors.ubicacion = 'Escribe una ubicación (Ej: Calle 123, Comuna, Ciudad).';
- } else if (!/^[\w\s,.-]+$/.test(formData.ubicacion)) { // Simple regex for address format
- newErrors.ubicacion = 'Debes seguir el formato de dirección: Calle 123, Comuna, Ciudad.';
- }
- if (!formData.celularContacto && !formData.mailContacto) {
- newErrors.contacto = 'Debes incluir al menos el número de celular de contacto o el mail de contacto.';
- } else {
- if (formData.celularContacto && !/^\d+$/.test(formData.celularContacto)) { // Validar que solo incluya números
- newErrors.celularContacto = 'El número de celular debe contener solo números. Ej: 9 8765 4321.';
- }
- if (formData.mailContacto && !/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/.test(formData.mailContacto)) { // Simple regex for email
- newErrors.mailContacto = 'Escribir el email en su debido formato. Ej: usuario@dominio.com';
- }
- }
- if (formData.paginaWeb && !/^(https?:\/\/)?([\w\-]+\.)+[\w\-]{2,4}(\/[\w\-\.]*)*$/.test(formData.paginaWeb)) {
- 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 handleSubmit = (e) => {
- e.preventDefault();
- if (validateForm()) {
- console.log('Formulario válido, proceder...');
- handleNext();
- } else {
- console.log('Errores en el formulario:', errors);
- }
- };
-
-
- return (
-
- Oficios
- Ingresa la información de tu publicación
-
- handleInputChange('titulo', e.target.value)}
- error={Boolean(errors.titulo)}
- helperText={errors.titulo||'Campo Obligatorio'}
- />
- handleInputChange('descripcion', e.target.value)}
- error={Boolean(errors.descripcion)}
- helperText={errors.descripcion||'Campo Obligatorio'}
- />
-
- handleInputChange('ubicacion', e.target.value)}
- error={Boolean(errors.ubicacion)}
- helperText={errors.ubicacion||'Campo Obligatorio'}
- />
- handleInputChange('ubicacion', e.target.value)}
- margin="normal"
- />
-
-
- {/* Reemplaza con tu API key */}
-
- {/* Muestra un marcador en la posición seleccionada */}
-
-
+ const [markerPosition, setMarkerPosition] = useState(center);
+ const [userLocation, setUserLocation] = useState(null);
+ const [formData, setFormData] = useState({
+ titulo: '',
+ descripcion: '',
+ ubicacion: '',
+ numeroUbicacion: '',
+ nombreContacto: '',
+ celularContacto: '',
+ mailContacto: '',
+ instagram: '',
+ facebook: '',
+ paginaWeb: '',
+ disponible: false,
+ });
+ const [errors, setErrors] = useState({});
+
+ const getAddressFromLatLng = async (lat, lng) => {
+ const apiKey = "AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E"; // Reemplaza con tu API key
+ const response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`);
+ const data = await response.json();
+ if (data.results && data.results.length > 0) {
+ return data.results[0].formatted_address;
+ } else {
+ return '';
+ }
+ };
+ const handleMapClick = async (event) => {
+ const lat = event.latLng.lat();
+ const lng = event.latLng.lng();
+ setMarkerPosition({ lat, lng });
-
- handleInputChange('nombreContacto', e.target.value)}
- />
- handleInputChange('celularContacto', e.target.value)}
- type = "number"
- error={Boolean(errors.celularContacto)}
- helperText={errors.celularContacto}
- />
-
- handleInputChange('mailContacto', e.target.value)}
- error={Boolean(errors.mailContacto)}
- helperText={errors.mailContacto}
- />
-
+ const address = await getAddressFromLatLng(lat, lng);
+ setFormData((prev) => ({ ...prev, ubicacion: address }));
+ };
- {errors.contacto && {errors.contacto} ||'Incluir al menos el número de celular o mail de contacto'} {/* Mensaje de error de contacto */}
+ useEffect(() => {
+ if (navigator.geolocation) {
+ navigator.geolocation.getCurrentPosition(async (position) => {
+ const newLocation = {
+ lat: position.coords.latitude,
+ lng: position.coords.longitude,
+ };
+ setUserLocation(newLocation);
+ setMarkerPosition(newLocation);
+
+ const address = await getAddressFromLatLng(newLocation.lat, newLocation.lng);
+ setFormData((prev) => ({ ...prev, ubicacion: address }));
+ }, () => {
+ alert("No se pudo obtener la ubicación.");
+ });
+ } else {
+ alert("Geolocalización no es soportada en este navegador.");
+ }
+ }, []);
+
+ const handleInputChange = (field, value) => {
+ setFormData(prev => ({ ...prev, [field]: value }));
+ setErrors(prev => ({ ...prev, [field]: '' }));
+ };
-
- handleInputChange('instagram', e.target.value)}
- />
- handleInputChange('facebook', e.target.value)}
- />
- handleInputChange('paginaWeb', e.target.value)}
- error={Boolean(errors.paginaWeb)}
- helperText={errors.paginaWeb}
- />
-
+ const validateForm = () => {
+ const newErrors = {};
+ if (!formData.titulo) newErrors.titulo = 'Escribe un título.';
+ if (!formData.descripcion) newErrors.descripcion = 'Escribe una descripción.';
+ if (!formData.ubicacion) newErrors.ubicacion = 'Escribe una ubicación (Ej: Calle 123, Comuna, Ciudad).';
+ if (!formData.celularContacto && !formData.mailContacto) {
+ newErrors.contacto = 'Debes incluir al menos el número de celular de contacto o el mail de contacto.';
+ }
+ setErrors(newErrors);
+ return Object.keys(newErrors).length === 0;
+ };
-
+ const handleSubmit = (e) => {
+ e.preventDefault();
+ if (validateForm()) {
+ console.log('Formulario válido, proceder...');
+ handleNext();
+ } else {
+ console.log('Errores en el formulario:', errors);
+ }
+ };
-
handleInputChange('disponible', e.target.checked)}
- />
- }
- label="Actualmente Disponible"
+ return (
+
+ Oficios
+ Ingresa la información de tu publicación
+
+ handleInputChange('titulo', e.target.value)}
+ error={Boolean(errors.titulo)}
+ helperText={errors.titulo || 'Campo Obligatorio'}
+ />
+ handleInputChange('descripcion', e.target.value)}
+ error={Boolean(errors.descripcion)}
+ helperText={errors.descripcion || 'Campo Obligatorio'}
+ />
+
+ handleInputChange('ubicacion', e.target.value)}
+ error={Boolean(errors.ubicacion)}
+ helperText={errors.ubicacion || 'Campo Obligatorio'}
+ />
+ handleInputChange('numeroUbicacion', e.target.value)}
+ margin="normal"
+ />
+
+
+
+
+
+
+
+
+
+ handleInputChange('nombreContacto', e.target.value)}
+ />
+ handleInputChange('celularContacto', e.target.value)}
+ type="number"
+ error={Boolean(errors.celularContacto)}
+ helperText={errors.celularContacto}
+ />
+ handleInputChange('mailContacto', e.target.value)}
+ error={Boolean(errors.mailContacto)}
+ helperText={errors.mailContacto}
+ />
+
+
+ {errors.contacto && {errors.contacto} || 'Incluir al menos el número de celular o mail de contacto'}
+
+
+ handleInputChange('instagram', e.target.value)}
+ />
+ handleInputChange('facebook', e.target.value)}
+ />
+ handleInputChange('paginaWeb', e.target.value)}
+ error={Boolean(errors.paginaWeb)}
+ helperText={errors.paginaWeb}
+ />
+
+
+
+ handleInputChange('disponible', e.target.checked)}
/>
-
-
-
-
-
- Enviar
-
-
-
-
-
- );
+ }
+ label="Actualmente Disponible"
+ />
+
+
+
+
+ Enviar
+
+
+
+ );
}
OficioForm.propTypes = {
- handleNext: PropTypes.func.isRequired,
- };
+ handleNext: PropTypes.func.isRequired,
+};
+
export default OficioForm;
diff --git a/src/pages/users/ztours.jsx b/src/pages/users/ztours.jsx
index a2a0d9f..5662624 100644
--- a/src/pages/users/ztours.jsx
+++ b/src/pages/users/ztours.jsx
@@ -8,8 +8,8 @@ import {
FormControlLabel,
Typography,
} from '@mui/material';
-//------------new
-import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api'; // Importar componentes de Google Maps
+import { GoogleMap, LoadScript, Marker } from '@react-google-maps/api';
+
const mapContainerStyle = {
height: "400px",
width: "100%"
@@ -19,265 +19,230 @@ const center = {
lat: -33.4489, // Cambia esto a la latitud de tu ubicación inicial
lng: -70.6693 // Cambia esto a la longitud de tu ubicación inicial
};
-//-----------new
-
function TourForm({ handleNext }) {
- //-----------new
- const [markerPosition, setMarkerPosition] = useState(center); // Estado para la posición del marcador
- const [userLocation, setUserLocation] = useState(null); // Estado para la ubicación del usuario
-
- const handleMapClick = async (event) => {
- const lat = event.latLng.lat();
- const lng = event.latLng.lng();
- setMarkerPosition({ lat, lng }); // Actualiza la posición del marcador
- // Aquí puedes agregar lógica para convertir las coordenadas en una dirección si lo deseas
- //const address = await getAddressFromLatLng(lat, lng); //new
- setFormData((prev) => ({ ...prev, ubicacion: `Lat: ${lat}, Lng: ${lng}` })); // Actualiza el campo de ubicación
- };
-
- useEffect(() => {
- // Obtener ubicación actual del usuario
- if (navigator.geolocation) {
- navigator.geolocation.getCurrentPosition(position => {
- const newLocation = {
- lat: position.coords.latitude,
- lng: position.coords.longitude,
- };
- setUserLocation(newLocation);
- setMarkerPosition(newLocation);
- //setFormData(prev => ({ ...prev, ubicacion: address })); //new
- setFormData(prev => ({ ...prev, ubicacion: `Lat: ${position.coords.latitude}, Lng: ${position.coords.longitude}` }));
- }, () => {
- alert("No se pudo obtener la ubicación.");
- });
- } else {
- alert("Geolocalización no es soportada en este navegador.");
- }
- }, []);
-
- /*const getAddressFromLatLng = async (lat, lng) => {
- const apiKey = "AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E"; // Reemplaza con tu API key
- const response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`);
- const data = await response.json();
- if (data.results && data.results.length > 0) {
- return data.results[0].formatted_address; // Retorna la primera dirección formateada
- } else {
- return ''; // Retorna vacío si no se encuentra dirección
- }
- };*/
- //-----------new
-
- const [formData, setFormData] = useState({
- titulo: '',
- descripcion: '',
- ubicacion: '',
- numeroUbicacion: '',
- nombreContacto: '',
- celularContacto: '',
- mailContacto: '',
- instagram: '',
- facebook: '',
- paginaWeb: '',
- disponible: false,
- });
-
- const [errors, setErrors] = useState({});
-
- const handleInputChange = (field, value) => {
- setFormData(prev => ({ ...prev, [field]: value }));
- setErrors(prev => ({ ...prev, [field]: '' })); // Reset error when value changes
- };
-
-
- const validateForm = () => {
- const newErrors = {};
-
- if (!formData.titulo) {newErrors.titulo = 'Escribe un título.';}
- if (!formData.descripcion) {newErrors.descripcion = 'Escribe una descripción.';}
- if (!formData.ubicacion) {
- newErrors.ubicacion = 'Escribe una ubicación (Ej: Calle 123, Comuna, Ciudad).';
- } else if (!/^[\w\s,.-]+$/.test(formData.ubicacion)) { // Simple regex for address format
- newErrors.ubicacion = 'Debes seguir el formato de dirección: Calle 123, Comuna, Ciudad.';
- }
- if (!formData.celularContacto && !formData.mailContacto) {
- newErrors.contacto = 'Debes incluir al menos el número de celular de contacto o el mail de contacto.';
- } else {
- if (formData.celularContacto && !/^\d+$/.test(formData.celularContacto)) { // Validar que solo incluya números
- newErrors.celularContacto = 'El número de celular debe contener solo números. Ej: 9 8765 4321.';
- }
- if (formData.mailContacto && !/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/.test(formData.mailContacto)) { // Simple regex for email
- newErrors.mailContacto = 'Escribir el email en su debido formato. Ej: usuario@dominio.com';
- }
- }
- if (formData.paginaWeb && !/^(https?:\/\/)?([\w\-]+\.)+[\w\-]{2,4}(\/[\w\-\.]*)*$/.test(formData.paginaWeb)) {
- 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 handleSubmit = (e) => {
- e.preventDefault();
- if (validateForm()) {
- console.log('Formulario válido, proceder...');
- handleNext();
- } else {
- console.log('Errores en el formulario:', errors);
- }
- };
-
-
- return (
-
- Tours y Transporte
- Ingresa la información de tu publicación
-
- handleInputChange('titulo', e.target.value)}
- error={Boolean(errors.titulo)}
- helperText={errors.titulo||'Campo Obligatorio'}
- />
- handleInputChange('descripcion', e.target.value)}
- error={Boolean(errors.descripcion)}
- helperText={errors.descripcion||'Campo Obligatorio'}
- />
-
- handleInputChange('ubicacion', e.target.value)}
- error={Boolean(errors.ubicacion)}
- helperText={errors.ubicacion||'Campo Obligatorio'}
- />
- handleInputChange('ubicacion', e.target.value)}
- margin="normal"
- />
-
-
- {/* Reemplaza con tu API key */}
-
- {/* Muestra un marcador en la posición seleccionada */}
-
-
-
+ const [markerPosition, setMarkerPosition] = useState(center);
+ const [userLocation, setUserLocation] = useState(null);
+ const [formData, setFormData] = useState({
+ titulo: '',
+ descripcion: '',
+ ubicacion: '',
+ numeroUbicacion: '',
+ nombreContacto: '',
+ celularContacto: '',
+ mailContacto: '',
+ instagram: '',
+ facebook: '',
+ paginaWeb: '',
+ disponible: false,
+ });
+ const [errors, setErrors] = useState({});
+
+ // Función para obtener la dirección a partir de coordenadas
+ const getAddressFromLatLng = async (lat, lng) => {
+ const apiKey = "AIzaSyAJuzF9SX5VP6CU38hq-lgRopJ66jYgb5E"; // Reemplaza con tu API key
+ const response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`);
+ const data = await response.json();
+ if (data.results && data.results.length > 0) {
+ return data.results[0].formatted_address;
+ } else {
+ return '';
+ }
+ };
-
- handleInputChange('nombreContacto', e.target.value)}
- />
- handleInputChange('celularContacto', e.target.value)}
- type = "number"
- error={Boolean(errors.celularContacto)}
- helperText={errors.celularContacto}
- />
+ const handleMapClick = async (event) => {
+ const lat = event.latLng.lat();
+ const lng = event.latLng.lng();
+ setMarkerPosition({ lat, lng });
- handleInputChange('mailContacto', e.target.value)}
- error={Boolean(errors.mailContacto)}
- helperText={errors.mailContacto}
- />
-
+ const address = await getAddressFromLatLng(lat, lng); // Obtiene la dirección
+ setFormData((prev) => ({ ...prev, ubicacion: address }));
+ };
- {errors.contacto && {errors.contacto} ||'Incluir al menos el número de celular o mail de contacto'} {/* Mensaje de error de contacto */}
+ useEffect(() => {
+ // Obtener ubicación actual del usuario
+ if (navigator.geolocation) {
+ navigator.geolocation.getCurrentPosition(async (position) => {
+ const newLocation = {
+ lat: position.coords.latitude,
+ lng: position.coords.longitude,
+ };
+ setUserLocation(newLocation);
+ setMarkerPosition(newLocation);
+
+ const address = await getAddressFromLatLng(newLocation.lat, newLocation.lng);
+ setFormData((prev) => ({ ...prev, ubicacion: address }));
+ }, () => {
+ alert("No se pudo obtener la ubicación.");
+ });
+ } else {
+ alert("Geolocalización no es soportada en este navegador.");
+ }
+ }, []);
+
+ const handleInputChange = (field, value) => {
+ setFormData(prev => ({ ...prev, [field]: value }));
+ setErrors(prev => ({ ...prev, [field]: '' }));
+ };
-
- handleInputChange('instagram', e.target.value)}
- />
- handleInputChange('facebook', e.target.value)}
- />
- handleInputChange('paginaWeb', e.target.value)}
- error={Boolean(errors.paginaWeb)}
- helperText={errors.paginaWeb}
- />
-
+ const validateForm = () => {
+ const newErrors = {};
+ if (!formData.titulo) newErrors.titulo = 'Escribe un título.';
+ if (!formData.descripcion) newErrors.descripcion = 'Escribe una descripción.';
+ if (!formData.ubicacion) newErrors.ubicacion = 'Escribe una ubicación (Ej: Calle 123, Comuna, Ciudad).';
+ if (!formData.celularContacto && !formData.mailContacto) {
+ newErrors.contacto = 'Debes incluir al menos el número de celular de contacto o el mail de contacto.';
+ }
+ setErrors(newErrors);
+ return Object.keys(newErrors).length === 0;
+ };
-
+ const handleSubmit = (e) => {
+ e.preventDefault();
+ if (validateForm()) {
+ console.log('Formulario válido, proceder...');
+ handleNext();
+ } else {
+ console.log('Errores en el formulario:', errors);
+ }
+ };
-
handleInputChange('disponible', e.target.checked)}
- />
- }
- label="Actualmente Disponible"
+ return (
+
+ Tours y Transporte
+ Ingresa la información de tu publicación
+
+ handleInputChange('titulo', e.target.value)}
+ error={Boolean(errors.titulo)}
+ helperText={errors.titulo || 'Campo Obligatorio'}
+ />
+ handleInputChange('descripcion', e.target.value)}
+ error={Boolean(errors.descripcion)}
+ helperText={errors.descripcion || 'Campo Obligatorio'}
+ />
+
+ handleInputChange('ubicacion', e.target.value)}
+ error={Boolean(errors.ubicacion)}
+ helperText={errors.ubicacion || 'Campo Obligatorio'}
+ />
+ handleInputChange('numeroUbicacion', e.target.value)}
+ margin="normal"
+ />
+
+
+
+
+
+
+
+
+
+ handleInputChange('nombreContacto', e.target.value)}
+ />
+ handleInputChange('celularContacto', e.target.value)}
+ type="number"
+ error={Boolean(errors.celularContacto)}
+ helperText={errors.celularContacto}
+ />
+ handleInputChange('mailContacto', e.target.value)}
+ error={Boolean(errors.mailContacto)}
+ helperText={errors.mailContacto}
+ />
+
+
+ {errors.contacto && {errors.contacto} || 'Incluir al menos el número de celular o mail de contacto'}
+
+
+ handleInputChange('instagram', e.target.value)}
+ />
+ handleInputChange('facebook', e.target.value)}
+ />
+ handleInputChange('paginaWeb', e.target.value)}
+ error={Boolean(errors.paginaWeb)}
+ helperText={errors.paginaWeb}
+ />
+
+
+
+ handleInputChange('disponible', e.target.checked)}
/>
-
-
-
-
-
- Enviar
-
-
-
-
-
- );
+ }
+ label="Actualmente Disponible"
+ />
+
+
+
+
+ Enviar
+
+
+
+ );
}
TourForm.propTypes = {
- handleNext: PropTypes.func.isRequired,
- };
+ handleNext: PropTypes.func.isRequired,
+};
+
export default TourForm;
diff --git a/src/styles/gestionSolicitudes.css b/src/styles/gestionSolicitudes.css
new file mode 100644
index 0000000..2adcf5c
--- /dev/null
+++ b/src/styles/gestionSolicitudes.css
@@ -0,0 +1,131 @@
+/* gestionSolicitudes.css */
+
+.gestion-solicitudes-container {
+ padding: 20px;
+ max-width: 90%; /* Ajusta el ancho máximo para ocupar más espacio */
+ width: 100%;
+ margin: 0 auto;
+ }
+
+ .gestion-solicitudes-container h1{
+ padding: 20px;
+ max-width: 90%; /* Ajusta el ancho máximo para ocupar más espacio */
+ width: 100%;
+ margin: 0 auto;
+ color: #E2974B;
+ text-align: center;
+
+ }
+
+ .GS-content {
+ display: flex;
+ gap: 20px; /* Ajusta el espacio entre columnas si es necesario */
+ }
+
+ .filters {
+ flex: 1;
+ padding: 20px;
+ background-color: #f4f4f4;
+ border-radius: 8px;
+ margin-right: 20px;
+ }
+
+ .filters h3 {
+ font-size: 18px;
+ color: black;
+ margin-bottom: 10px;
+ }
+
+ .filters label {
+ display: block;
+ font-weight: bold;
+ margin-top: 10px;
+ color: #333;
+ }
+
+ .filters input[type="date"],
+ .filters select {
+ width: 100%;
+ padding: 8px;
+ margin-top: 5px;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ font-size: 14px;
+ }
+
+ .solicitudes-list {
+ flex: 2.5;
+ display: flex;
+ flex-direction: column;
+ gap: 20px;
+ }
+
+ .solicitud-item {
+ padding: 15px;
+ border: 1px solid #ddd;
+ border-radius: 8px;
+ background-color: #f9f9f9;
+ }
+
+ .solicitud-item h2 {
+ margin: 0;
+ color: black;
+ }
+
+ .comentario-input {
+ width: 100%;
+ padding: 10px;
+ margin: 10px 0;
+ font-size: 14px;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ resize: vertical;
+ }
+
+ .actions {
+ display: flex;
+ gap: 10px;
+ }
+
+/* gestionSolicitudes.css */
+
+.button-aceptar {
+ background-color: #81C784; /* Verde */
+ color: white;
+ border: none;
+ padding: 8px 12px;
+ border-radius: 5px;
+ cursor: pointer;
+}
+
+.button-aceptar:hover {
+ background-color: #66BB6A; /* Verde oscuro al pasar el ratón */
+}
+
+.button-rechazar {
+ background-color: #E57373; /* Rojo */
+ color: white;
+ border: none;
+ padding: 8px 12px;
+ border-radius: 5px;
+ cursor: pointer;
+}
+
+.button-rechazar:hover {
+ background-color: #EF5350; /* Rojo oscuro al pasar el ratón */
+}
+
+.button-objetar {
+ background-color: #fbc12dc8; /* Amarillo */
+ color: white;
+ border: none;
+ padding: 8px 12px;
+ border-radius: 5px;
+ cursor: pointer;
+}
+
+.button-objetar:hover {
+ background-color: #f9a825de; /* Amarillo oscuro al pasar el ratón */
+}
+
+
\ No newline at end of file
diff --git a/src/styles/helloworld.css b/src/styles/helloworld.css
index 9ced1ba..8085380 100644
--- a/src/styles/helloworld.css
+++ b/src/styles/helloworld.css
@@ -31,7 +31,7 @@ html, body {
.background-image-container {
width: 100%; /* Asegura que el contenedor tome toda la anchura */
height: auto; /* Ajusta la altura automáticamente según la imagen */
- background-image: url('../assets/buscar3.jpg'); /* Cambia esto por la ruta real de tu imagen */
+ background-image: url('../assets/a.jpg'); /* Cambia esto por la ruta real de tu imagen */
background-size: cover; /* Asegura que la imagen cubra completamente el contenedor */
background-position: center; /* Centra la imagen en el contenedor */
background-repeat: no-repeat; /* Evita que la imagen se repita */
@@ -40,13 +40,13 @@ html, body {
@media (min-width: 768px) {
.background-image-container {
- background-image: url('../assets/buscar3.jpg');
+ background-image: url('../assets/a.jpg');
}
}
@media (min-width: 1200px) {
.background-image-container {
- background-image: url('../assets/buscar3.jpg'); /* Versión de alta resolución para pantallas grandes */
+ background-image: url('../assets/a.jpg'); /* Versión de alta resolución para pantallas grandes */
}
}
@@ -80,6 +80,7 @@ html, body {
font-weight: 400;
font-style: normal;
font-size: 100px;
+ text-align: center;
}
diff --git a/src/styles/users/zcamping.css b/src/styles/users/zcamping.css
index e174145..6246ee8 100644
--- a/src/styles/users/zcamping.css
+++ b/src/styles/users/zcamping.css
@@ -1,38 +1,27 @@
-html, body {
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; /* Usar San Francisco */
-}
-
.form-container {
- width: 60%;
- margin: 0 auto;
- padding: 20px;
- border-radius: 8px;
+ max-width: 800px; /* Controla el ancho máximo del formulario */
+ margin: 0 auto; /* Centra el formulario en la página */
}
-
-.contacto-container {
- display: flex;
- justify-content: space-between; /* Espacio igual entre los campos */
- align-items: flex-start; /* Alinea los campos en la parte superior */
- gap: 16px; /* Espacio entre los campos */
+.MuiTextField-root {
+ margin: 10px 0; /* Espaciado entre campos */
}
-.contacto-container .MuiTextField-root {
- flex: 1; /* Asegura que todos los campos ocupen el mismo espacio */
+input {
+ height: 56px; /* Ajusta la altura de los campos */
+ font-size: 16px; /* Cambia el tamaño del texto */
}
-.redes-container {
- display: flex;
- justify-content: space-between; /* Espacio igual entre los campos */
- align-items: flex-start; /* Alinea los campos en la parte superior */
- gap: 16px; /* Espacio entre los campos */
+.MuiFormControl-root {
+ width: 100%; /* Asegúrate de que los campos ocupen todo el ancho disponible */
}
-.redes-container .MuiTextField-root {
- flex: 1; /* Asegura que todos los campos ocupen el mismo espacio */
-}
.direccion-container {
- display: flex;
- align-items: flex-start; /* Alinea los campos en la parte superior */
- gap: 16px; /* Espacio entre los campos */
+ display: flex; /* Usar flexbox para alinear los campos */
+ flex-direction: column; /* Cambiar a columna para apilar los campos */
+}
+
+.redes-container {
+ display: flex; /* Usar flexbox para alinear los campos */
+ flex-direction: column; /* Cambiar a columna para apilar los campos */
}