Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions apps/roadrunner-view/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -52,19 +52,19 @@ const ProviderEnforcedRoute = ({ requiredProvider, component: Component }: { req
};

const WrappedGoogleHomePage = () => (
<APIProvider apiKey={CONFIG.GOOGLE_MAPS_API_KEY || ''} version="weekly">
<APIProvider apiKey={CONFIG.GOOGLE_MAPS_API_KEY || ''} version="weekly" region="CA">
<GoogleHomePage />
</APIProvider>
);

const WrappedGoogleVehicle3DMapPage = () => (
<APIProvider apiKey={CONFIG.GOOGLE_MAPS_API_KEY || ''} version="beta">
<APIProvider apiKey={CONFIG.GOOGLE_MAPS_API_KEY || ''} version="beta" region="CA">
<GoogleVehicle3DMapPage />
</APIProvider>
);

const WrappedGoogleDriverViewPage = () => (
<APIProvider apiKey={CONFIG.GOOGLE_MAPS_API_KEY || ''} version="beta">
<APIProvider apiKey={CONFIG.GOOGLE_MAPS_API_KEY || ''} version="beta" region="CA">
<GoogleDriverViewPage />
</APIProvider>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -261,8 +261,7 @@ export const GoogleDriverViewPage = () => {
}
}
} catch (error) {
console.error("Historical session lookup failed, exiting to home:", error);
gotoHomePage();
console.error("Historical session lookup failed:", error);
} finally {
setIsSearchingSession(false);
setHasCheckedHistory(true);
Expand All @@ -274,6 +273,17 @@ export const GoogleDriverViewPage = () => {

// Handle Auto-Redirects
useEffect(() => {
if (goingHome) return;

if (isDataLoaded && version > 0 && !isSearchingSession && hasCheckedHistory && !vehicleStateMap.has(vehicleId) && !lastState) {
if (missingTimestampRef.current === null) {
missingTimestampRef.current = Date.now();
} else if (Date.now() - missingTimestampRef.current > 10000) {
gotoHomePage();
}
return;
}

const msCurrentTime = Date.now() - playbackOffset;

if ((playbackOffset === 0) && lastState && (lastState.msEpochLastRun < msCurrentTime - (30 * 1000))) {
Expand All @@ -283,8 +293,9 @@ export const GoogleDriverViewPage = () => {
const currentState = vehicleStateMap.get(vehicleId);
if (currentState && (lastState?.msEpochLastRun !== currentState.msEpochLastRun)) {
setLastState(currentState);
missingTimestampRef.current = null;
}
}, [vehicleStateMap, vehicleId, lastState, playbackOffset, gotoHomePage]);
}, [vehicleStateMap, vehicleId, lastState, playbackOffset, gotoHomePage, isDataLoaded, version, isSearchingSession, hasCheckedHistory, goingHome]);

const getCoordinateAtBearingAndRange = useCallback((degLatitude: number, degLongitude: number, degBearing: number, mRange: number) => {
const KM_EARTH_RADIUS = 6378.14;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ export const CreateVehiclePanel = (props: {
const data = await response.json();

// Hop into the vehicle.
const provider = localStorage.getItem('roadrunner_map_provider') || 'mapbox';
const provider = localStorage.getItem('roadrunner_map_provider') || 'google';
navigate(provider === 'google' ? `/google/driver-view/${data.id}` : `/driver-view/${data.id}`);
} catch (error) {
console.error(error);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { useMemo, useState } from 'react';
import { useNavigate } from 'react-router-dom';
import { MaterialReactTable } from 'material-react-table';
import { usePlayback } from "../../context/PlaybackContext";
import { useSimulationSessionData } from "../../hooks/useSimulationSessionData";
Expand All @@ -20,6 +21,7 @@ export const SimulationTable = (props: {
toggleSimTable: any,
returnToNow: any,
}) => {
const navigate = useNavigate();
const { playbackOffset, setPlaybackSession } = usePlayback();
const { simulationSessionMap, activeCountData } = useSimulationSessionData();

Expand Down Expand Up @@ -91,16 +93,21 @@ export const SimulationTable = (props: {
variant="primary"
size="sm"
onClick={() => {
const vehicleId = row.original.vehicleId || row.original.id;
setPlaybackSession(row.original.start);
props.toggleSimTable();
if (vehicleId) {
const provider = localStorage.getItem('roadrunner_map_provider') || 'google';
navigate(provider === 'google' ? `/google/driver-view/${vehicleId}` : `/driver-view/${vehicleId}`);
}
}}
>
Jump to
</Button>
),
},
],
[props, setPlaybackSession]
[props, setPlaybackSession, navigate]
);

return (
Expand Down
50 changes: 35 additions & 15 deletions apps/roadrunner-view/src/components/Shared/PointPicker.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -148,31 +148,51 @@ export const PointPicker = ({
markerRef.current = null;
}

// Reuse/update Google AdvancedMarkerElement
if (typeof google !== 'undefined' && google.maps && google.maps.marker?.AdvancedMarkerElement) {
// Reuse/update Google Marker (AdvancedMarkerElement or standard Marker)
if (typeof google !== 'undefined' && google.maps) {
const position = { lat: selectedLat, lng: selectedLng };

if (googleMarkerRef.current) {
googleMarkerRef.current.position = position;
if (typeof googleMarkerRef.current.setPosition === 'function') {
googleMarkerRef.current.setPosition(position);
} else {
googleMarkerRef.current.position = position;
}
if (googleInfoWindowRef.current) {
googleInfoWindowRef.current.setPosition(position);
}
} else {
const marker = new google.maps.marker.AdvancedMarkerElement({
position: position,
map: map,
title: label
});
let marker: any = null;
if (google.maps.marker?.AdvancedMarkerElement) {
try {
marker = new google.maps.marker.AdvancedMarkerElement({
position: position,
map: map,
title: label
});
} catch (err) {
console.warn("AdvancedMarkerElement initialization failed, falling back to google.maps.Marker", err);
}
}
if (!marker && google.maps.Marker) {
marker = new google.maps.Marker({
position: position,
map: map,
title: label
});
}

const infoWindow = new google.maps.InfoWindow({
content: `<div style="color: #000; font-weight: bold; padding: 2px 5px;">${label}</div>`,
disableAutoPan: true
});
if (marker) {
const infoWindow = new google.maps.InfoWindow({
content: `<div style="color: #000; font-weight: bold; padding: 2px 5px;">${label}</div>`,
disableAutoPan: true
});

infoWindow.open(map, marker);
infoWindow.open(map, marker);

googleMarkerRef.current = marker;
googleInfoWindowRef.current = infoWindow;
googleMarkerRef.current = marker;
googleInfoWindowRef.current = infoWindow;
}
}
}
}
Expand Down
Loading