Merge pull request #70 from ibs0d/claude/fix-zoom-statistics-WFvOm

fix: motion dot outside zoom transform, fix activeMotion logic
This commit is contained in:
ibs0d 2026-03-18 19:41:26 +11:00 committed by GitHub
commit f99ef4075a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 6 additions and 7 deletions

View File

@ -176,9 +176,7 @@ export function useCameraActivity(
enabled: isCameraEnabled,
activeTracking: isCameraEnabled ? hasActiveObjects : false,
activeMotion: isCameraEnabled
? detectingMotion
? detectingMotion === "ON"
: updatedCameraState?.motion === true
? updatedCameraState?.motion === true || detectingMotion === "ON"
: false,
objects: isCameraEnabled ? (objects ?? []) : [],
audio_detections: isCameraEnabled ? (audioDetections ?? []) : [],

View File

@ -32,6 +32,8 @@ import { PlayerStats } from "@/components/player/PlayerStats";
import { MdCircle } from "react-icons/md";
import { useCameraActivity } from "@/hooks/use-camera-activity";
import { Skeleton } from "@/components/ui/skeleton";
import { MdCircle } from "react-icons/md";
import { useCameraActivity } from "@/hooks/use-camera-activity";
import { isEqual } from "lodash";
import useSWR from "swr";
@ -1081,9 +1083,8 @@ const BirdseyeLivePlayerGridItem = React.forwardRef<
},
);
// Separate component so it can call useCameraActivity as a hook (no hooks in loops).
// Direct WS subscription guarantees the dot reacts to motion changes in real-time
// without relying on an intermediate callback → parent-state chain.
// Separate component so useCameraActivity can be called as a hook (no hooks in loops).
// Rendered outside the zoom transform div so it doesn't scale with the camera zoom.
function CameraMotionDot({
camera,
autoLive,
@ -1095,7 +1096,7 @@ function CameraMotionDot({
if (autoLive === false || offline || !activeMotion) return null;
return (
<div className="absolute right-2 top-2 z-40">
<MdCircle className="mr-2 size-2 animate-pulse text-danger shadow-danger drop-shadow-md" />
<MdCircle className="size-2 animate-pulse text-danger drop-shadow-md" />
</div>
);
}