aboutsummaryrefslogtreecommitdiff
path: root/modern/src/main/MainMap.jsx
diff options
context:
space:
mode:
authorAnton Tananaev <anton@traccar.org>2023-08-19 13:58:45 -0700
committerAnton Tananaev <anton@traccar.org>2023-08-19 13:59:07 -0700
commitd3c7705bedebd65c94f9eea691aaf2fe03b0cafe (patch)
tree5f98b3d9bbbd4fe8067b5a334e84aff008b8db22 /modern/src/main/MainMap.jsx
parent0161ae449d4a7bd0781c0665d663353663ab0faf (diff)
downloadtrackermap-web-d3c7705bedebd65c94f9eea691aaf2fe03b0cafe.tar.gz
trackermap-web-d3c7705bedebd65c94f9eea691aaf2fe03b0cafe.tar.bz2
trackermap-web-d3c7705bedebd65c94f9eea691aaf2fe03b0cafe.zip
Move to Vite
Diffstat (limited to 'modern/src/main/MainMap.jsx')
-rw-r--r--modern/src/main/MainMap.jsx66
1 files changed, 66 insertions, 0 deletions
diff --git a/modern/src/main/MainMap.jsx b/modern/src/main/MainMap.jsx
new file mode 100644
index 00000000..3b57c745
--- /dev/null
+++ b/modern/src/main/MainMap.jsx
@@ -0,0 +1,66 @@
+import React, { useCallback } from 'react';
+import { useTheme } from '@mui/material/styles';
+import useMediaQuery from '@mui/material/useMediaQuery';
+import { useDispatch, useSelector } from 'react-redux';
+import MapView from '../map/core/MapView';
+import MapSelectedDevice from '../map/main/MapSelectedDevice';
+import MapAccuracy from '../map/main/MapAccuracy';
+import MapGeofence from '../map/MapGeofence';
+import MapCurrentLocation from '../map/MapCurrentLocation';
+import PoiMap from '../map/main/PoiMap';
+import MapPadding from '../map/MapPadding';
+import { devicesActions } from '../store';
+import MapDefaultCamera from '../map/main/MapDefaultCamera';
+import MapLiveRoutes from '../map/main/MapLiveRoutes';
+import MapPositions from '../map/MapPositions';
+import MapOverlay from '../map/overlay/MapOverlay';
+import MapGeocoder from '../map/geocoder/MapGeocoder';
+import MapScale from '../map/MapScale';
+import MapNotification from '../map/notification/MapNotification';
+import useFeatures from '../common/util/useFeatures';
+
+const MainMap = ({ filteredPositions, selectedPosition, onEventsClick }) => {
+ const theme = useTheme();
+ const dispatch = useDispatch();
+
+ const desktop = useMediaQuery(theme.breakpoints.up('md'));
+
+ const eventsAvailable = useSelector((state) => !!state.events.items.length);
+
+ const features = useFeatures();
+
+ const onMarkerClick = useCallback((_, deviceId) => {
+ dispatch(devicesActions.selectId(deviceId));
+ }, [dispatch]);
+
+ return (
+ <>
+ <MapView>
+ <MapOverlay />
+ <MapGeofence />
+ <MapAccuracy positions={filteredPositions} />
+ <MapLiveRoutes />
+ <MapPositions
+ positions={filteredPositions}
+ onClick={onMarkerClick}
+ selectedPosition={selectedPosition}
+ showStatus
+ />
+ <MapDefaultCamera />
+ <MapSelectedDevice />
+ <PoiMap />
+ </MapView>
+ <MapScale />
+ <MapCurrentLocation />
+ <MapGeocoder />
+ {!features.disableEvents && (
+ <MapNotification enabled={eventsAvailable} onClick={onEventsClick} />
+ )}
+ {desktop && (
+ <MapPadding left={parseInt(theme.dimensions.drawerWidthDesktop, 10)} />
+ )}
+ </>
+ );
+};
+
+export default MainMap;