diff --git a/src/components/FrontCameraOverview/FrontCameraOverviewCard.tsx b/src/components/FrontCameraOverview/FrontCameraOverviewCard.tsx index 6c449dd..b7689fa 100644 --- a/src/components/FrontCameraOverview/FrontCameraOverviewCard.tsx +++ b/src/components/FrontCameraOverview/FrontCameraOverviewCard.tsx @@ -10,6 +10,7 @@ const FrontCameraOverviewCard = () => { const navigate = useNavigate(); const handlers = useSwipeable({ onSwipedRight: () => navigate("/camera-settings"), + onSwipedLeft: () => navigate("/rear-camera-settings"), trackMouse: true, }); diff --git a/src/components/FrontCameraSettings/OverviewVideoContainer.tsx b/src/components/FrontCameraSettings/OverviewVideoContainer.tsx index db16aeb..631270f 100644 --- a/src/components/FrontCameraSettings/OverviewVideoContainer.tsx +++ b/src/components/FrontCameraSettings/OverviewVideoContainer.tsx @@ -1,7 +1,7 @@ import clsx from "clsx"; import { SnapshotContainer } from "../CameraOverview/SnapshotContainer"; import Card from "../UI/Card"; -import { useNavigate } from "react-router"; +import { useNavigate, useLocation } from "react-router"; import { useSwipeable } from "react-swipeable"; import type { ZoomLevel } from "../../types/types"; @@ -18,8 +18,17 @@ const OverviewVideoContainer = ({ onZoomLevelChange?: (level: ZoomLevel) => void; }) => { const navigate = useNavigate(); + const location = useLocation(); + console.log(location); const handlers = useSwipeable({ - onSwipedLeft: () => navigate("/"), + onSwipedLeft: () => { + if (location.pathname === "/rear-camera-settings") return; + navigate("/"); + }, + onSwipedRight: () => { + if (location.pathname === "/camera-settings") return; + navigate("/"); + }, trackMouse: true, }); return ( diff --git a/src/components/SightingOverview/SightingOverview.tsx b/src/components/SightingOverview/SightingOverview.tsx index 14b012b..07b62c0 100644 --- a/src/components/SightingOverview/SightingOverview.tsx +++ b/src/components/SightingOverview/SightingOverview.tsx @@ -30,6 +30,7 @@ const SightingOverview = () => { return (
+
{mostRecent && (
diff --git a/src/components/UI/Header.tsx b/src/components/UI/Header.tsx index 1e0866a..2de4734 100644 --- a/src/components/UI/Header.tsx +++ b/src/components/UI/Header.tsx @@ -3,56 +3,25 @@ import Logo from "/MAV.svg"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faGear, + faHome, faListCheck, faMaximize, faMinimize, faRotate, } from "@fortawesome/free-solid-svg-icons"; -import type { VersionFieldType } from "../../types/types"; -import { useEffect, useState } from "react"; +import { useState } from "react"; import SoundBtn from "./SoundBtn"; import { useNPEDContext } from "../../context/NPEDUserContext"; -async function fetchVersions( - signal?: AbortSignal -): Promise { - try { - const res = await fetch("http://192.168.75.11/api/versions", { signal }); - if (!res.ok) throw new Error(`HTTP ${res.status}`); - return res.json(); - } catch (error) { - console.log(error); - return undefined; - } -} - -const pad = (n: number) => String(n).padStart(2, "0"); -const normalizeToMs = (ts: number) => (ts < 1e12 ? ts * 1000 : ts); // seconds → ms if needed - -function formatFromMs(ms: number, tz: "local" | "utc" = "local") { - const d = new Date(ms); - const h = tz === "utc" ? d.getUTCHours() : d.getHours(); - const m = tz === "utc" ? d.getUTCMinutes() : d.getMinutes(); - const s = tz === "utc" ? d.getUTCSeconds() : d.getSeconds(); - const day = tz === "utc" ? d.getUTCDate() : d.getDate(); - const month = (tz === "utc" ? d.getUTCMonth() : d.getMonth()) + 1; - const year = tz === "utc" ? d.getUTCFullYear() : d.getFullYear(); - return `${pad(h)}:${pad(m)}:${pad(s)} ${pad(day)}-${pad(month)}-${year}`; -} - export default function Header() { - const [offsetMs, setOffsetMs] = useState(null); - const [nowMs, setNowMs] = useState(Date.now()); const [isFullscreen, setIsFullscreen] = useState(false); const { sessionStarted } = useNPEDContext(); const toggleFullscreen = () => { if (!document.fullscreenElement) { - // Enter fullscreen on the entire app document.documentElement.requestFullscreen(); setIsFullscreen(true); } else { - // Exit fullscreen document.exitFullscreen(); setIsFullscreen(false); } @@ -62,38 +31,8 @@ export default function Header() { window.location.reload(); }; - useEffect(() => { - const ac = new AbortController(); - fetchVersions(ac.signal) - .then((data) => { - if (!data) throw new Error("No data"); - const serverMs = normalizeToMs(data?.timeStamp); - setOffsetMs(serverMs - Date.now()); - }) - .catch((err) => { - console.log(err); - }); - return () => ac.abort("failed"); - }, []); - - useEffect(() => { - let timer: number; - const schedule = () => { - const now = Date.now(); - setNowMs(now); - const delay = 1000 - (now % 1000); - timer = window.setTimeout(schedule, delay); - }; - schedule(); - return () => clearTimeout(timer); - }, []); - - const serverNowMs = offsetMs == null ? nowMs : nowMs + offsetMs; - const localStr = formatFromMs(serverNowMs, "local"); - const utcStr = formatFromMs(serverNowMs, "utc"); - return ( -
+
Logo @@ -103,11 +42,11 @@ export default function Header() { {sessionStarted && (
Session Active
)} -
-

Local: {localStr}

-

UTC: {utcStr}

-
+
+ + +
{isFullscreen ? ( diff --git a/src/components/UI/NavigationArrow.tsx b/src/components/UI/NavigationArrow.tsx index 65c14d7..a879255 100644 --- a/src/components/UI/NavigationArrow.tsx +++ b/src/components/UI/NavigationArrow.tsx @@ -9,7 +9,6 @@ type NavigationArrowProps = { const NavigationArrow = ({ side, settingsPage }: NavigationArrowProps) => { const navigate = useNavigate(); - const navigationDest = (side: string | undefined) => { if (settingsPage) { navigate("/"); @@ -44,19 +43,17 @@ const NavigationArrow = ({ side, settingsPage }: NavigationArrowProps) => { } return ( <> - {side === "Front" ? ( - navigationDest(side)} - /> - ) : ( - navigationDest(side)} - /> - )} + navigationDest(side)} + /> + + navigationDest(side)} + /> ); }; diff --git a/src/pages/Dashboard.tsx b/src/pages/Dashboard.tsx index 844a26b..7af2040 100644 --- a/src/pages/Dashboard.tsx +++ b/src/pages/Dashboard.tsx @@ -6,7 +6,7 @@ import { CAM_BASE } from "../utils/config"; const Dashboard = () => { const base_url = `${CAM_BASE}/SightingListFront/sightingSummary?mostRecentRef=`; return ( - +
diff --git a/src/pages/FrontCamera.tsx b/src/pages/FrontCamera.tsx index cc4bc03..3393e5e 100644 --- a/src/pages/FrontCamera.tsx +++ b/src/pages/FrontCamera.tsx @@ -18,7 +18,7 @@ const FrontCamera = () => {
{ - const navigate = useNavigate(); - const handlers = useSwipeable({ - onSwipedRight: () => navigate("/"), - trackMouse: true, + const [zoomLevel, setZoomLevel] = useState({ + left: 0, + top: 0, + x: 0, + y: 0, + px: 0, + py: 0, + level: 1, }); - return ( -
- - -
- -
+
+ +
);