mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-01-22 20:18:30 +03:00
only show allowed cameras and groups in camera filter button
This commit is contained in:
parent
bf74e74696
commit
6e1b2447ac
@ -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}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user