Files
frigate/web/src/components/overlay/MobileCameraDrawer.tsx
T

56 lines
1.7 KiB
TypeScript
Raw Normal View History

2024-03-27 17:03:05 -06:00
import { useState } from "react";
import { Drawer, DrawerContent, DrawerTrigger } from "../ui/drawer";
import { Button } from "../ui/button";
import { FaVideo } from "react-icons/fa";
import { isMobile } from "react-device-detect";
import { useTranslation } from "react-i18next";
2025-08-27 01:15:01 +08:00
import { CameraNameLabel } from "../camera/CameraNameLabel";
2024-03-27 17:03:05 -06:00
type MobileCameraDrawerProps = {
allCameras: string[];
selected: string;
onSelectCamera: (cam: string) => void;
};
export default function MobileCameraDrawer({
allCameras,
selected,
onSelectCamera,
}: MobileCameraDrawerProps) {
const { t } = useTranslation(["common"]);
2024-03-27 17:03:05 -06:00
const [cameraDrawer, setCameraDrawer] = useState(false);
if (!isMobile) {
return;
}
return (
<Drawer open={cameraDrawer} onOpenChange={setCameraDrawer}>
<DrawerTrigger asChild>
2024-10-22 17:07:42 -05:00
<Button
className="rounded-lg smart-capitalize"
2025-03-17 07:26:01 -05:00
aria-label={t("menu.live.cameras.title")}
2024-10-22 17:07:42 -05:00
size="sm"
>
2024-04-04 14:55:04 -06:00
<FaVideo className="text-secondary-foreground" />
2024-03-27 17:03:05 -06:00
</Button>
</DrawerTrigger>
2024-05-14 10:06:44 -05:00
<DrawerContent className="mx-1 max-h-[75dvh] overflow-hidden rounded-t-2xl px-4">
<div className="scrollbar-container flex h-auto w-full flex-col items-center gap-2 overflow-y-auto overflow-x-hidden py-4">
2024-03-28 11:53:36 -06:00
{allCameras.map((cam) => (
<div
key={cam}
className={`mx-4 w-full py-2 text-center smart-capitalize ${cam == selected ? "rounded-lg bg-secondary" : ""}`}
2024-03-28 11:53:36 -06:00
onClick={() => {
onSelectCamera(cam);
setCameraDrawer(false);
}}
>
2025-08-27 01:15:01 +08:00
<CameraNameLabel camera={cam} />
2024-03-28 11:53:36 -06:00
</div>
))}
</div>
2024-03-27 17:03:05 -06:00
</DrawerContent>
</Drawer>
);
}