all repos — caroster @ b665d19a2b5ab4e6c3f62c5344056a27ed78f486

[Octree] Group carpool to your event https://caroster.io

frontend/containers/Map/Map.tsx (view raw)

 1import {
 2  MapContainer,
 3  CircleMarker,
 4  TileLayer,
 5  ZoomControl,
 6  Popup,
 7} from 'react-leaflet';
 8import {useTheme} from '@mui/material';
 9import MapController from './MapController';
10import MapWrapper from './MapWrapper';
11import useMapStore from '../../stores/useMapStore';
12import Bounds from './Bounds';
13
14const DEV_TILES_URL =
15  process.env.DEV_TILES_URL ||
16  'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';
17
18const Map = () => {
19  const theme = useTheme();
20  const {center, markers} = useMapStore();
21  const defaultMarkerStyle = {
22    radius: 12,
23    fillColor: theme.palette.primary.main,
24    color: theme.palette.background.paper,
25    fillOpacity: 1,
26    opacity: 1,
27    weight: 3,
28  };
29
30  return (
31    <MapWrapper>
32      <MapContainer
33        center={center}
34        zoom={15}
35        style={{height: '100%', width: '100%'}}
36        zoomControl={false}
37      >
38        <Bounds />
39        <TileLayer key="tiles" url={DEV_TILES_URL} />
40        <MapController />
41        {markers.map(({popup, ...circleMarkerProps}, index) => (
42          <CircleMarker
43            key={index}
44            {...defaultMarkerStyle}
45            radius={circleMarkerProps.double ? 9 : defaultMarkerStyle.radius}
46            center={circleMarkerProps.center}
47          >
48            <CircleMarker
49              {...{
50                ...defaultMarkerStyle,
51                fillColor: defaultMarkerStyle.color,
52                color: defaultMarkerStyle.fillColor,
53              }}
54              center={circleMarkerProps.center}
55            ></CircleMarker>
56            {popup && <Popup>{popup}</Popup>}
57          </CircleMarker>
58        ))}
59      </MapContainer>
60    </MapWrapper>
61  );
62};
63
64export default Map;