Refactor SnapshotContainer to integrate camera zoom functionality and improve error handling

This commit is contained in:
2025-10-01 11:30:06 +01:00
parent 6f2bc96ac7
commit 4eeb368484

View File

@@ -1,6 +1,8 @@
import { useGetOverviewSnapshot } from "../../hooks/useGetOverviewSnapshot"; import { useGetOverviewSnapshot } from "../../hooks/useGetOverviewSnapshot";
import type { ZoomLevel } from "../../types/types"; import type { ZoomInOptions, ZoomLevel } from "../../types/types";
import NavigationArrow from "../UI/NavigationArrow"; import NavigationArrow from "../UI/NavigationArrow";
import { useCameraZoom } from "../../hooks/useCameraZoom";
import { useEffect } from "react";
type SnapshotContainerProps = { type SnapshotContainerProps = {
side: string; side: string;
@@ -16,8 +18,9 @@ export const SnapshotContainer = ({
onZoomLevelChange, onZoomLevelChange,
}: SnapshotContainerProps) => { }: SnapshotContainerProps) => {
const { canvasRef, isError, isPending } = useGetOverviewSnapshot(side); const { canvasRef, isError, isPending } = useGetOverviewSnapshot(side);
if (isError) return <p className="h-100">An error occurred</p>; const { mutation } = useCameraZoom();
if (isPending) return <p className="h-100">Loading...</p>; const cameraControllerSide =
side === "CameraA" ? "CameraControllerA" : "CameraControllerB";
const handleZoomClick = (event: React.MouseEvent<HTMLCanvasElement>) => { const handleZoomClick = (event: React.MouseEvent<HTMLCanvasElement>) => {
const bounds = canvasRef.current?.getBoundingClientRect(); const bounds = canvasRef.current?.getBoundingClientRect();
@@ -45,8 +48,24 @@ export const SnapshotContainer = ({
py, py,
level: newLevel, level: newLevel,
}); });
if (!zoomLevel?.level) return;
}; };
useEffect(() => {
if (zoomLevel?.level) {
const zoomInOptions: ZoomInOptions = {
camera: cameraControllerSide,
multiplier: zoomLevel.level,
};
mutation.mutate(zoomInOptions);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [zoomLevel?.level]);
if (isError) return <p className="h-100">An error occurred</p>;
if (isPending) return <p className="h-100">Loading...</p>;
return ( return (
<div className="flex flex-col md:flex-row"> <div className="flex flex-col md:flex-row">
<NavigationArrow side={side} settingsPage={settingsPage} /> <NavigationArrow side={side} settingsPage={settingsPage} />