fix: add unregister mechanism for map icon updates to prevent memory leaks during component unmount
This commit is contained in:
@@ -3,6 +3,7 @@ import maplibregl from "maplibre-gl";
|
||||
import { MAP_MAX_ZOOM, MAP_MIN_ZOOM } from "@/uhm/lib/map/constants";
|
||||
import { clampNumber, roundZoom } from "./mapUtils";
|
||||
import { getBaseMapStyle } from "./useMapLayers";
|
||||
import { unregisterMapFromIconUpdates } from "@/uhm/lib/map/styles/geotypeLayers";
|
||||
|
||||
const MAP_PROJECTION_STORAGE_KEY = "uhm:mapProjection";
|
||||
|
||||
@@ -79,6 +80,7 @@ export function useMapInstance() {
|
||||
if (mapRef.current === map) {
|
||||
mapRef.current = null;
|
||||
}
|
||||
unregisterMapFromIconUpdates(map);
|
||||
map.remove();
|
||||
};
|
||||
} catch (err) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import maplibregl from "maplibre-gl";
|
||||
export const TYPE_MATCH_EXPR: maplibregl.ExpressionSpecification = ["coalesce", ["get", "type"], ["get", "entity_type_id"], ""];
|
||||
export { ensurePointGeotypeIcons } from "./shared/pointStyle";
|
||||
export { ensurePointGeotypeIcons, unregisterMapFromIconUpdates } from "./shared/pointStyle";
|
||||
|
||||
import { getDefenseLineLayers } from "./geotypes/defense_line";
|
||||
import { getMilitaryRouteLayers } from "./geotypes/military_route";
|
||||
|
||||
@@ -178,6 +178,10 @@ const preloadedImages: Record<string, HTMLImageElement> = {};
|
||||
const loadedImageKeys = new Set<string>();
|
||||
const mapsToUpdate = new Set<maplibregl.Map>();
|
||||
|
||||
export function unregisterMapFromIconUpdates(map: maplibregl.Map) {
|
||||
mapsToUpdate.delete(map);
|
||||
}
|
||||
|
||||
function preloadPointIcons() {
|
||||
if (typeof window === "undefined" || typeof document === "undefined") return;
|
||||
for (const [typeId, path] of Object.entries(POINT_GEOTYPE_ICON_PATHS)) {
|
||||
|
||||
Reference in New Issue
Block a user