aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/app/routes/map.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend/app/routes/map.tsx')
-rw-r--r--src/frontend/app/routes/map.tsx42
1 files changed, 29 insertions, 13 deletions
diff --git a/src/frontend/app/routes/map.tsx b/src/frontend/app/routes/map.tsx
index 5a8c7a2..b8fb881 100644
--- a/src/frontend/app/routes/map.tsx
+++ b/src/frontend/app/routes/map.tsx
@@ -1,22 +1,21 @@
import StopDataProvider, { type Stop } from "../data/StopDataProvider";
import "./map.css";
+import { loadStyle } from "app/maps/styleloader";
+import type { Feature as GeoJsonFeature, Point } from "geojson";
import { useEffect, useRef, useState } from "react";
-import { useApp } from "~/AppContext";
+import { useTranslation } from "react-i18next";
import Map, {
- AttributionControl,
- GeolocateControl,
- Layer,
- NavigationControl,
- Source,
- type MapRef,
- type MapLayerMouseEvent,
- type StyleSpecification,
+ GeolocateControl,
+ Layer,
+ NavigationControl,
+ Source,
+ type MapLayerMouseEvent,
+ type MapRef,
+ type StyleSpecification
} from "react-map-gl/maplibre";
-import { loadStyle } from "app/maps/styleloader";
-import type { Feature as GeoJsonFeature, Point } from "geojson";
+import { useApp } from "~/AppContext";
import { StopSheet } from "~/components/StopSheet";
-import { useTranslation } from "react-i18next";
import { REGIONS } from "~/data/RegionConfig";
// Default minimal fallback style before dynamic loading
@@ -96,10 +95,26 @@ export default function StopMap() {
updateMapState([center.lat, center.lng], zoom);
};
+ const handleStyleImageMissing = (e: any) => {
+ // Suppress warnings for missing sprite images from base style
+ // This prevents console noise from OpenFreeMap's missing icons
+ if (!mapRef.current) return;
+ const map = mapRef.current.getMap();
+ if (!map || map.hasImage(e.id)) return;
+
+ // Add a transparent 1x1 placeholder to prevent repeated warnings
+ map.addImage(e.id, {
+ width: 1,
+ height: 1,
+ data: new Uint8Array(4),
+ });
+ };
+
if (mapRef.current) {
const map = mapRef.current.getMap();
if (map) {
map.on("moveend", handleMapChange);
+ map.on("styleimagemissing", handleStyleImageMissing);
}
}
@@ -108,6 +123,7 @@ export default function StopMap() {
const map = mapRef.current.getMap();
if (map) {
map.off("moveend", handleMapChange);
+ map.off("styleimagemissing", handleStyleImageMissing);
}
}
};
@@ -168,7 +184,7 @@ export default function StopMap() {
layout={{
"icon-image": [
"case",
- ["boolean", ["get", "cancelled"], false],
+ ["coalesce", ["get", "cancelled"], false],
`stop-${region}-cancelled`,
`stop-${region}`,
],