import { DropdownMenu, DropdownMenuContent, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; // import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { ToggleGroup, ToggleGroupItem } from "@/components/ui/toggle-group"; import { Drawer, DrawerContent, DrawerTrigger } from "@/components/ui/drawer"; import MotionTuner from "@/components/settings/MotionTuner"; import MasksAndZones from "@/components/settings/MasksAndZones"; import { Button } from "@/components/ui/button"; import { useMemo, useState } from "react"; import useOptimisticState from "@/hooks/use-optimistic-state"; import Logo from "@/components/Logo"; import { isMobile } from "react-device-detect"; import { FaVideo } from "react-icons/fa"; import { CameraConfig, FrigateConfig } from "@/types/frigateConfig"; import useSWR from "swr"; import General from "@/components/settings/General"; import FilterCheckBox from "@/components/filter/FilterCheckBox"; import { ZoneMaskFilterButton } from "@/components/filter/ZoneMaskFilter"; import { PolygonType } from "@/types/canvas"; export default function Settings() { const settingsViews = [ "general", "objects", "masks / zones", "motion tuner", ] as const; type SettingsType = (typeof settingsViews)[number]; const [page, setPage] = useState("general"); const [pageToggle, setPageToggle] = useOptimisticState(page, setPage, 100); const { data: config } = useSWR("config"); const [isEditing, setIsEditing] = useState(false); const [unsavedChanges, setUnsavedChanges] = useState(false); const cameras = useMemo(() => { if (!config) { return []; } return Object.values(config.cameras) .filter((conf) => conf.ui.dashboard && conf.enabled) .sort((aConf, bConf) => aConf.ui.order - bConf.ui.order); }, [config]); const [selectedCamera, setSelectedCamera] = useState(cameras[0].name); const [filterZoneMask, setFilterZoneMask] = useState(); return (
{isMobile && ( )} { if (value) { setPageToggle(value); } }} > {Object.values(settingsViews).map((item) => (
{item}
))}
{(page == "objects" || page == "masks / zones" || page == "motion tuner") && (
{!isEditing && ( )} {/* {isEditing && page == "masks / zones" && (
)}
{page == "general" && } {page == "objects" && <>} {page == "masks / zones" && ( )} {page == "motion tuner" && }
); } type CameraSelectButtonProps = { allCameras: CameraConfig[]; selectedCamera: string; setSelectedCamera: React.Dispatch>; }; function CameraSelectButton({ allCameras, selectedCamera, setSelectedCamera, }: CameraSelectButtonProps) { const [open, setOpen] = useState(false); const trigger = ( ); const content = ( <> {isMobile && ( <> Camera )}
{allCameras.map((item) => ( { if (isChecked) { setSelectedCamera(item.name); setOpen(false); } }} /> ))}
); if (isMobile) { return ( { if (!open) { setSelectedCamera(selectedCamera); } setOpen(open); }} > {trigger} {content} ); } return ( { if (!open) { setSelectedCamera(selectedCamera); } setOpen(open); }} > {trigger} {content} ); }