From 69487028917335366d333e971a3a7e3517908b0e Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Mon, 1 Jul 2024 14:00:53 -0500 Subject: [PATCH] Add fullscreen button to the default live grid on desktops (#12250) --- web/src/views/live/LiveDashboardView.tsx | 158 +++++++++++++++-------- 1 file changed, 103 insertions(+), 55 deletions(-) diff --git a/web/src/views/live/LiveDashboardView.tsx b/web/src/views/live/LiveDashboardView.tsx index 9cf8d7198..0d101ba96 100644 --- a/web/src/views/live/LiveDashboardView.tsx +++ b/web/src/views/live/LiveDashboardView.tsx @@ -7,7 +7,12 @@ import BirdseyeLivePlayer from "@/components/player/BirdseyeLivePlayer"; import LivePlayer from "@/components/player/LivePlayer"; import { Button } from "@/components/ui/button"; import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area"; -import { TooltipProvider } from "@/components/ui/tooltip"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "@/components/ui/tooltip"; import { usePersistence } from "@/hooks/use-persistence"; import { CameraConfig, FrigateConfig } from "@/types/frigateConfig"; import { ReviewSegment } from "@/types/review"; @@ -24,6 +29,8 @@ import { IoClose } from "react-icons/io5"; import { LuLayoutDashboard } from "react-icons/lu"; import { cn } from "@/lib/utils"; import { LivePlayerError, LivePlayerMode } from "@/types/live"; +import { FaCompress, FaExpand } from "react-icons/fa"; +import { useResizeObserver } from "@/hooks/resize-observer"; type LiveDashboardViewProps = { cameras: CameraConfig[]; @@ -122,6 +129,16 @@ export default function LiveDashboardView({ setPreferredLiveModes(newPreferredLiveModes); }, [cameras, config]); + const [{ height: containerHeight }] = useResizeObserver(containerRef); + + const hasScrollbar = useMemo(() => { + if (containerHeight && containerRef.current) { + return ( + containerRef.current.offsetHeight < containerRef.current.scrollHeight + ); + } + }, [containerRef, containerHeight]); + const [windowVisible, setWindowVisible] = useState(true); const visibilityListener = useCallback(() => { setWindowVisible(document.visibilityState == "visible"); @@ -277,64 +294,95 @@ export default function LiveDashboardView({ )} {!cameraGroup || cameraGroup == "default" || isMobileOnly ? ( -