From 6e1b2447ac7437574b1fff2368205594445d6d63 Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Mon, 22 Dec 2025 15:39:55 -0600 Subject: [PATCH] only show allowed cameras and groups in camera filter button --- .../components/filter/CamerasFilterButton.tsx | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/web/src/components/filter/CamerasFilterButton.tsx b/web/src/components/filter/CamerasFilterButton.tsx index baeccf06f..cc89e13cf 100644 --- a/web/src/components/filter/CamerasFilterButton.tsx +++ b/web/src/components/filter/CamerasFilterButton.tsx @@ -13,6 +13,7 @@ import { Drawer, DrawerContent, DrawerTrigger } from "../ui/drawer"; import FilterSwitch from "./FilterSwitch"; import { FaVideo } from "react-icons/fa"; import { useTranslation } from "react-i18next"; +import { useAllowedCameras } from "@/hooks/use-allowed-cameras"; type CameraFilterButtonProps = { allCameras: string[]; @@ -35,6 +36,30 @@ export function CamerasFilterButton({ const [currentCameras, setCurrentCameras] = useState( selectedCameras, ); + const allowedCameras = useAllowedCameras(); + + // Filter cameras to only include those the user has access to + const filteredCameras = useMemo( + () => allCameras.filter((camera) => allowedCameras.includes(camera)), + [allCameras, allowedCameras], + ); + + // Filter groups to only include those with at least one allowed camera + const filteredGroups = useMemo( + () => + groups + .map(([name, config]) => { + const allowedGroupCameras = config.cameras.filter((camera) => + allowedCameras.includes(camera), + ); + return [name, { ...config, cameras: allowedGroupCameras }] as [ + string, + CameraGroupConfig, + ]; + }) + .filter(([, config]) => config.cameras.length > 0), + [groups, allowedCameras], + ); const buttonText = useMemo(() => { if (isMobile) { @@ -79,8 +104,8 @@ export function CamerasFilterButton({ ); const content = (