Spaces:
Sleeping
Sleeping
| import { useState, useCallback } from 'react' | |
| export default function useEntityDetail(isMobile, setSidebarOpen) { | |
| const [selectedEntity, setSelectedEntity] = useState(null) | |
| const handleEntityClick = useCallback(async (slug, onFlyTo) => { | |
| try { | |
| const resp = await fetch(`/api/entities/detail/${slug}`) | |
| const data = await resp.json() | |
| setSelectedEntity(data) | |
| if (data.latitude && data.longitude && onFlyTo) onFlyTo({ lng: data.longitude, lat: data.latitude, zoom: 14 }) | |
| if (isMobile && setSidebarOpen) setSidebarOpen(false) | |
| return data | |
| } catch (err) { | |
| console.error('Failed to fetch entity:', err) | |
| return null | |
| } | |
| }, [isMobile, setSidebarOpen]) | |
| const handleClose = useCallback(() => setSelectedEntity(null), []) | |
| return { selectedEntity, setSelectedEntity, handleEntityClick, handleClose } | |
| } | |