added geolocation

This commit is contained in:
SlimusMinus
2026-09-01 01:19:59 +03:00
parent 0ce69c14c1
commit 98473d4b59
8 changed files with 196 additions and 54 deletions

View File

@@ -8,6 +8,7 @@ import { useImageUpload, ACCEPT, MAX_SIZE_MB } from "../hooks/useImageUpload";
import { validatePostForm } from "../utils/validatePostForm";
import { formatPhone } from "../utils/formatPhone";
import { useYandexMap } from "../hooks/useYandexMap";
import { useGeolocation, GEO_STATUS } from "../hooks/useGeolocation";
import MapModal from "./MapModal";
import ClearableField from "../components/ClearableField";
@@ -62,12 +63,29 @@ export default function CreateUpdatePost({ onClose, onSuccess, initialData }) {
? { latitude: initialData.latitude, longitude: initialData.longitude }
: null;
const { mapRef, coords, address, addressRef, loading: mapLoading } = useYandexMap(
const { mapRef, coords, address, addressRef, loading: mapLoading, moveTo } = useYandexMap(
mapModalOpen,
initialCoords,
isEdit ? (initialData.location || "") : ""
);
const { coords: geoCoords, status: geoStatus, requestLocation: requestGeoLocation } =
useGeolocation();
// При открытии окна карты запрашиваем геолокацию; если пользователь дал
// разрешение — автоматически центрируем карту и ставим маркер на его место.
// При отказе/недоступности API ничего не делаем — остаётся дефолтный центр.
useEffect(() => {
if (mapModalOpen) {
requestGeoLocation();
}
}, [mapModalOpen, requestGeoLocation]);
useEffect(() => {
if (mapModalOpen && geoStatus === GEO_STATUS.SUCCESS && geoCoords) {
moveTo(geoCoords.latitude, geoCoords.longitude);
}
}, [mapModalOpen, geoStatus, geoCoords, moveTo]);
useEffect(() => {
if (address) {
setForm(prev => ({ ...prev, address }));
@@ -394,6 +412,7 @@ export default function CreateUpdatePost({ onClose, onSuccess, initialData }) {
mapRef={mapRef}
address={address}
mapLoading={mapLoading}
geoStatus={geoStatus}
onClose={() => setMapModalOpen(false)}
onSave={() => setMapModalOpen(false)}
/>