only show allowed cameras and groups in camera filter button

This commit is contained in:
Josh Hawkins 2025-12-22 15:39:55 -06:00
parent bf74e74696
commit 6e1b2447ac

View File

@ -13,6 +13,7 @@ import { Drawer, DrawerContent, DrawerTrigger } from "../ui/drawer";
import FilterSwitch from "./FilterSwitch"; import FilterSwitch from "./FilterSwitch";
import { FaVideo } from "react-icons/fa"; import { FaVideo } from "react-icons/fa";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { useAllowedCameras } from "@/hooks/use-allowed-cameras";
type CameraFilterButtonProps = { type CameraFilterButtonProps = {
allCameras: string[]; allCameras: string[];
@ -35,6 +36,30 @@ export function CamerasFilterButton({
const [currentCameras, setCurrentCameras] = useState<string[] | undefined>( const [currentCameras, setCurrentCameras] = useState<string[] | undefined>(
selectedCameras, 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(() => { const buttonText = useMemo(() => {
if (isMobile) { if (isMobile) {
@ -79,8 +104,8 @@ export function CamerasFilterButton({
); );
const content = ( const content = (
<CamerasFilterContent <CamerasFilterContent
allCameras={allCameras} allCameras={filteredCameras}
groups={groups} groups={filteredGroups}
currentCameras={currentCameras} currentCameras={currentCameras}
mainCamera={mainCamera} mainCamera={mainCamera}
setCurrentCameras={setCurrentCameras} setCurrentCameras={setCurrentCameras}