El objetivo de estos cambios es, por un lado, mantener los datos
actualizados y, por otro, mejorar la experiencia para quienes lo usan:
- Fiabilidad: los locales se pueden confirmar ("Sigue aquí") y
reportar (cerrado, datos incorrectos...), y se avisa de duplicados
antes de publicar, para que el contenido no se quede obsoleto ni
repetido.
- Usabilidad: autocompletado al proponer, favoritos, "cerca de mí",
compartir fichas, enlaces a Waze y una política de privacidad
visible, para que sea más sencillo aportar y encontrar locales.
34 lines
1.2 KiB
JavaScript
34 lines
1.2 KiB
JavaScript
import { useCallback, useState } from "react";
|
|
|
|
// Pide la ubicación del navegador solo cuando el usuario la solicita explícitamente
|
|
// (botón "Cerca de mí"), nunca automáticamente al cargar la página.
|
|
export default function useUbicacion() {
|
|
const [ubicacion, setUbicacion] = useState(null); // { lat, lng }
|
|
const [buscando, setBuscando] = useState(false);
|
|
const [error, setError] = useState("");
|
|
|
|
const pedirUbicacion = useCallback(() => {
|
|
if (!navigator.geolocation) {
|
|
setError("Tu navegador no permite compartir ubicación.");
|
|
return;
|
|
}
|
|
setBuscando(true);
|
|
setError("");
|
|
navigator.geolocation.getCurrentPosition(
|
|
(pos) => {
|
|
setUbicacion({ lat: pos.coords.latitude, lng: pos.coords.longitude });
|
|
setBuscando(false);
|
|
},
|
|
(err) => {
|
|
setError(err.code === 1 ? "Has denegado el acceso a tu ubicación." : "No se pudo obtener tu ubicación.");
|
|
setBuscando(false);
|
|
},
|
|
{ enableHighAccuracy: true, timeout: 10000 },
|
|
);
|
|
}, []);
|
|
|
|
const limpiarUbicacion = useCallback(() => { setUbicacion(null); setError(""); }, []);
|
|
|
|
return { ubicacion, buscando, error, pedirUbicacion, limpiarUbicacion };
|
|
}
|