diff --git a/src/components/feed/FeedContent.jsx b/src/components/feed/FeedContent.jsx index c65c2ec..22e6227 100644 --- a/src/components/feed/FeedContent.jsx +++ b/src/components/feed/FeedContent.jsx @@ -15,6 +15,7 @@ export default function FeedContent({ onDelete, onMarkFound, onImageClick, + onLocationClick, onAuthRequired, t, }) { @@ -79,6 +80,7 @@ export default function FeedContent({ onMarkFound={activeNav === "myads" ? onMarkFound : undefined} isOwner={activeNav === "myads"} onImageClick={onImageClick} + onLocationClick={onLocationClick} onAuthRequired={onAuthRequired} /> )); diff --git a/src/pages/MainFeed.jsx b/src/pages/MainFeed.jsx index 4e6e478..f69f877 100644 --- a/src/pages/MainFeed.jsx +++ b/src/pages/MainFeed.jsx @@ -54,6 +54,11 @@ export default function MainFeed() { const isSearchView = new URLSearchParams(location.search).get("view") === "search"; const isMapView = new URLSearchParams(location.search).get("view") === "map"; + // параметры фокуса карты на конкретном объявлении (?view=map&post=ID&lat=..&lng=..) + const mapFocusParams = new URLSearchParams(location.search); + const focusPostId = isMapView ? mapFocusParams.get("post") : null; + const focusLat = parseFloat(mapFocusParams.get("lat")); + const focusLng = parseFloat(mapFocusParams.get("lng")); const hasActiveFilters = searchQuery.trim().length > 0 || selectedCities.length > 0; const hasSearchParams = searchQuery.trim().length > 0 || selectedCities.length > 0; const searchPrompt = isSearchView && !hasSearchParams; @@ -201,6 +206,18 @@ export default function MainFeed() { feedRef.current?.scrollTo({ top: 0, behavior: "smooth" }); }, [isMapView, navigate]); + // Клик по локации на карточке — карта с фокусом на этом объявлении + const handleLocationClick = useCallback((ad) => { + const params = new URLSearchParams({ view: "map", post: ad.id }); + if (ad.latitude != null && ad.longitude != null) { + params.set("lat", ad.latitude); + params.set("lng", ad.longitude); + } + setActiveNav("map"); + navigate(`/feed?${params.toString()}`); + feedRef.current?.scrollTo({ top: 0, behavior: "smooth" }); + }, [navigate]); + const handleProfileClick = useCallback(() => { if (!isAuthenticated) modals.open("auth"); else modals.open("profile"); @@ -276,7 +293,7 @@ export default function MainFeed() {