janpiechota's picture
small style changes
18dfe1b
import { useRef, useState, useEffect } from 'react'
import { useConfig } from '../../hooks/useConfig'
import { useMap } from '../../hooks/useMap'
import { useAnalysisLayers } from '../../hooks/useAnalysisLayers'
import MapLegend from '../MapLegend/MapLegend'
import LayerOpacitySlider from '../LayerOpacitySlider/LayerOpacitySlider'
import { IconPlus, IconMinus, IconMapPin } from '@tabler/icons-react'
import { Tooltip } from '@mantine/core'
import styles from './MapView.module.css';
function MapView({
selectedLocation,
onLocationSelect,
analysisResult,
layersConfig
}) {
const mapContainerRef = useRef(null);
const { mapboxAccessToken } = useConfig();
const [localOpacity, setLocalOpacity] = useState(0.5);
const { mapInstance, isMapLoaded, handleZoomIn, handleZoomOut, handleFlyBackToAnalysis } = useMap(
mapContainerRef,
mapboxAccessToken,
selectedLocation,
analysisResult
);
useAnalysisLayers(
mapInstance,
isMapLoaded,
analysisResult,
layersConfig,
localOpacity,
);
useEffect(() => {
if (!isMapLoaded || !mapInstance) return;
const handleMapClick = (e) => {
const { lng, lat } = e.lngLat;
onLocationSelect({ lat, lng, isSearch: false });
};
mapInstance.on('click', handleMapClick);
return () => mapInstance.off('click', handleMapClick);
}, [isMapLoaded, mapInstance, onLocationSelect]);
return (
<div className={styles.mapWrapper}>
<div className={styles.mapContainer} ref={mapContainerRef} />
{analysisResult && (
<>
<MapLegend analysisResult={analysisResult} />
<LayerOpacitySlider
opacity={localOpacity}
onChange={setLocalOpacity}
/>
</>
)}
<div className={styles.mapActionsPanel}>
<Tooltip label="Zoom In" position="left" withArrow offset={15} openDelay={500} closeDelay={200} classNames={{ tooltip: styles.customTooltip }}>
<button onClick={handleZoomIn} className={styles.mapActionButton}>
<IconPlus size={20} stroke={1.5} />
</button>
</Tooltip>
<div className={styles.actionDivider} />
<Tooltip label="Zoom Out" position="left" withArrow offset={15} openDelay={500} closeDelay={200} classNames={{ tooltip: styles.customTooltip }}>
<button onClick={handleZoomOut} className={styles.mapActionButton}>
<IconMinus size={20} stroke={1.5} />
</button>
</Tooltip>
<div className={styles.actionDivider} />
<Tooltip label="Fly Back to Analysis" position="left" withArrow offset={15} openDelay={500} closeDelay={200} classNames={{ tooltip: styles.customTooltip }}>
<button onClick={handleFlyBackToAnalysis} className={styles.mapActionButton}>
<IconMapPin size={20} stroke={1.5} />
</button>
</Tooltip>
</div>
</div>
);
}
export default MapView;