import { useMap } from "@vis.gl/react-google-maps" import { useEffect, useState } from "react" import { DEFAULT_ZOOM, MAX_ZOOM, MIN_ZOOM } from "@/constants/map" export function useZoomControls() { const map = useMap() const [zoomLevel, setZoomLevel] = useState(DEFAULT_ZOOM) const zoomIn = () => { if (map && zoomLevel < MAX_ZOOM) { map.setZoom(zoomLevel + 1) } } const zoomOut = () => { if (map && zoomLevel > MIN_ZOOM) { map.setZoom(zoomLevel - 1) } } useEffect(() => { if (!map) return const handleZoomChanged = () => { const currentZoom = map.getZoom() if (currentZoom != null) { setZoomLevel(currentZoom) } } const listener = map.addListener("zoom_changed", handleZoomChanged) return () => listener.remove() }, [map]) return { zoomLevel, zoomIn, zoomOut, isMinZoom: zoomLevel <= MIN_ZOOM, isMaxZoom: zoomLevel >= MAX_ZOOM, } }