From 9387246f83f190bf6a7956637d7bc6713e99550a Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Sat, 21 Dec 2024 17:57:22 -0600 Subject: [PATCH] Add tooltips to ptz controls (#15633) --- web/src/views/live/LiveCameraView.tsx | 170 ++++++++++++++++++-------- 1 file changed, 119 insertions(+), 51 deletions(-) diff --git a/web/src/views/live/LiveCameraView.tsx b/web/src/views/live/LiveCameraView.tsx index a3bbeea06..af3ed0cee 100644 --- a/web/src/views/live/LiveCameraView.tsx +++ b/web/src/views/live/LiveCameraView.tsx @@ -17,7 +17,12 @@ import { DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; -import { TooltipProvider } from "@/components/ui/tooltip"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "@/components/ui/tooltip"; import { useResizeObserver } from "@/hooks/resize-observer"; import useKeyboardListener from "@/hooks/use-keyboard-listener"; import { CameraConfig, FrigateConfig } from "@/types/frigateConfig"; @@ -29,6 +34,7 @@ import { import { CameraPtzInfo } from "@/types/ptz"; import { RecordingStartingPoint } from "@/types/record"; import React, { + ReactNode, useCallback, useEffect, useMemo, @@ -518,6 +524,53 @@ export default function LiveCameraView({ ); } +type TooltipButtonProps = { + label: string; + onClick?: () => void; + onMouseDown?: (e: React.MouseEvent) => void; + onMouseUp?: (e: React.MouseEvent) => void; + onTouchStart?: (e: React.TouchEvent) => void; + onTouchEnd?: (e: React.TouchEvent) => void; + children: ReactNode; + className?: string; +}; + +function TooltipButton({ + label, + onClick, + onMouseDown, + onMouseUp, + onTouchStart, + onTouchEnd, + children, + className, + ...props +}: TooltipButtonProps) { + return ( + + + + + {children} + + + + {label} + + + + ); +} + function PtzControlPanel({ camera, clickOverlay, @@ -611,8 +664,8 @@ function PtzControlPanel({ > {ptz?.features?.includes("pt") && ( <> - { e.preventDefault(); sendPtz("MOVE_LEFT"); @@ -625,9 +678,9 @@ function PtzControlPanel({ onTouchEnd={onStop} > - - + { e.preventDefault(); sendPtz("MOVE_UP"); @@ -640,9 +693,9 @@ function PtzControlPanel({ onTouchEnd={onStop} > - - + { e.preventDefault(); sendPtz("MOVE_DOWN"); @@ -655,9 +708,9 @@ function PtzControlPanel({ onTouchEnd={onStop} > - - + { e.preventDefault(); sendPtz("MOVE_RIGHT"); @@ -670,13 +723,13 @@ function PtzControlPanel({ onTouchEnd={onStop} > - + > )} {ptz?.features?.includes("zoom") && ( <> - { e.preventDefault(); sendPtz("ZOOM_IN"); @@ -689,9 +742,9 @@ function PtzControlPanel({ onTouchEnd={onStop} > - - + { e.preventDefault(); sendPtz("ZOOM_OUT"); @@ -704,45 +757,60 @@ function PtzControlPanel({ onTouchEnd={onStop} > - + > )} + {ptz?.features?.includes("pt-r-fov") && ( - <> - setClickOverlay(!clickOverlay)} - > - - - > + + + + setClickOverlay(!clickOverlay)} + > + + + + + {clickOverlay ? "Disable" : "Enable"} click to move + + + )} {(ptz?.presets?.length ?? 0) > 0 && ( - - - - - - - e.preventDefault()} - > - {ptz?.presets.map((preset) => { - return ( - sendPtz(`preset_${preset}`)} + + + + + + + + + + e.preventDefault()} > - {preset} - - ); - })} - - + {ptz?.presets.map((preset) => ( + sendPtz(`preset_${preset}`)} + > + {preset} + + ))} + + + + + PTZ camera presets + + + )} );
{label}
{clickOverlay ? "Disable" : "Enable"} click to move
PTZ camera presets