2025-11-07 17:02:06 +03:00
|
|
|
import { FrigateConfig } from "@/types/frigateConfig";
|
|
|
|
|
import { useMemo } from "react";
|
|
|
|
|
import useSWR from "swr";
|
|
|
|
|
|
|
|
|
|
export function resolveZoneName(
|
|
|
|
|
config: FrigateConfig | undefined,
|
|
|
|
|
zoneId: string,
|
|
|
|
|
cameraId?: string,
|
|
|
|
|
) {
|
2026-06-19 19:10:22 +03:00
|
|
|
if (!config) return String(zoneId);
|
2025-11-07 17:02:06 +03:00
|
|
|
|
|
|
|
|
if (cameraId) {
|
|
|
|
|
const camera = config.cameras?.[String(cameraId)];
|
|
|
|
|
const zone = camera?.zones?.[zoneId];
|
2026-06-19 19:10:22 +03:00
|
|
|
return zone?.friendly_name || String(zoneId);
|
2025-11-07 17:02:06 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (const camKey in config.cameras) {
|
|
|
|
|
if (!Object.prototype.hasOwnProperty.call(config.cameras, camKey)) continue;
|
|
|
|
|
const cam = config.cameras[camKey];
|
|
|
|
|
if (!cam?.zones) continue;
|
|
|
|
|
if (Object.prototype.hasOwnProperty.call(cam.zones, zoneId)) {
|
|
|
|
|
const zone = cam.zones[zoneId];
|
2026-06-19 19:10:22 +03:00
|
|
|
return zone?.friendly_name || String(zoneId);
|
2025-11-07 17:02:06 +03:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-06-19 19:10:22 +03:00
|
|
|
// Fallback: display the raw zone id verbatim (no friendly_name available)
|
|
|
|
|
return String(zoneId);
|
2025-11-07 17:02:06 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function useZoneFriendlyName(zoneId: string, cameraId?: string): string {
|
|
|
|
|
const { data: config } = useSWR<FrigateConfig>("config");
|
|
|
|
|
|
|
|
|
|
const name = useMemo(
|
|
|
|
|
() => resolveZoneName(config, zoneId, cameraId),
|
|
|
|
|
[config, cameraId, zoneId],
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return name;
|
|
|
|
|
}
|