fix: hide unavailable GeoServer layers

This commit is contained in:
2026-09-11 16:40:24 +08:00
parent f9c71cc076
commit cf699d6207
15 changed files with 683 additions and 60 deletions
@@ -47,6 +47,7 @@ export function clearMapFeatureInteractionState(
}
type UseMapInteractionsOptions = {
availableSourceIds: readonly WaterNetworkSourceId[];
mapRef: RefObject<MapLibreMap | null>;
mapReady: boolean;
onSelectFeature: (feature: DetailFeature) => void;
@@ -54,6 +55,7 @@ type UseMapInteractionsOptions = {
};
export function useMapInteractions({
availableSourceIds,
mapRef,
mapReady,
onSelectFeature,
@@ -102,7 +104,7 @@ export function useMapInteractions({
if (feature) onSelectFeature(toDetailFeature(feature));
};
const hitLayerIds = [...INTERACTIVE_HIT_LAYER_IDS];
const hitLayerIds = INTERACTIVE_HIT_LAYER_IDS.filter((layerId) => map.getLayer(layerId));
map.on("mousemove", hitLayerIds, handleMouseMove);
map.on("mouseleave", hitLayerIds, handleMouseLeave);
map.on("click", hitLayerIds, handleClick);
@@ -113,17 +115,21 @@ export function useMapInteractions({
map.off("mouseleave", hitLayerIds, handleMouseLeave);
map.off("click", hitLayerIds, handleClick);
};
}, [mapRef, mapReady, onSelectFeature, selectedFeature]);
}, [availableSourceIds, mapRef, mapReady, onSelectFeature, selectedFeature]);
useEffect(() => {
const map = mapRef.current;
if (!mapReady || !map) return;
const next = toMapFeatureReference(selectedFeature);
if (next) setMapFeatureInteractionState(map, next, { selected: true, hovered: false });
if (next && map.getSource(next.source)) {
setMapFeatureInteractionState(map, next, { selected: true, hovered: false });
}
return () => {
if (next) clearMapFeatureInteractionState(map, next, "selected");
if (next && map.getSource(next.source)) {
clearMapFeatureInteractionState(map, next, "selected");
}
};
}, [mapReady, mapRef, selectedFeature]);
}, [availableSourceIds, mapReady, mapRef, selectedFeature]);
}
function toFeatureStateTarget(feature: FeatureReference) {