krishnadhulipalla's picture
First commit
0e11366
import { useEffect } from "react";
import { useMap } from "@vis.gl/react-google-maps";
import type { FC, SelectMeta } from "../../../lib/types";
import { sevColor } from "../../../lib/utils";
export default function NWSDataLayer({
nws,
onSelect,
}: {
nws: FC | null;
onSelect: (ll: [number, number], meta: SelectMeta) => void;
}) {
const map = useMap();
useEffect(() => {
if (!map) return;
map.data.forEach((f) => map.data.remove(f));
if (nws?.features?.length) {
map.data.addGeoJson(nws as any);
map.data.setStyle((f) => {
const sev = (f.getProperty("severity") || "Unknown") as string;
const color = sevColor(sev);
return {
strokeColor: color,
strokeWeight: 1.2,
fillColor: color,
fillOpacity: 0.18,
};
});
const clickListener = map.data.addListener(
"click",
(e: google.maps.Data.MouseEvent) => {
const p: any = e.feature;
const title =
(p.getProperty && p.getProperty("event")) || "NWS Alert";
const sev = (p.getProperty && p.getProperty("severity")) || "Unknown";
const src =
(p.getProperty && (p.getProperty("@id") || p.getProperty("id"))) ||
"";
if (e.latLng) {
onSelect([e.latLng.lat(), e.latLng.lng()], {
kind: "nws",
title,
severity: sev,
sourceUrl: src || undefined,
confidence: 1,
emoji: "⚠️",
raw: p?.g ?? p,
});
}
}
);
return () => {
google.maps.event.removeListener(clickListener);
map.data.forEach((f) => map.data.remove(f));
};
}
}, [map, nws, onSelect]);
return null;
}