import Card from "../UI/Card"; import CardHeader from "../UI/CardHeader"; import { useIntegrationsContext } from "../../context/IntegrationsContext"; import type { ReducedSightingType } from "../../types/types"; import { toast } from "sonner"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faFloppyDisk, faPause, faPlay, faStop } from "@fortawesome/free-solid-svg-icons"; import VehicleSessionItem from "../UI/VehicleSessionItem"; import { useCameraBlackboard } from "../../hooks/useCameraBlackboard"; const SessionCard = () => { const { state, dispatch } = useIntegrationsContext(); const { mutation } = useCameraBlackboard(); const sessionStarted = state.sessionStarted; const sessionPaused = state.sessionPaused; const sessionList = state.sessionList; const sightings = [...new Map(sessionList?.map((vehicle) => [vehicle.vrm, vehicle]))]; const dedupedSightings = sightings.map((sighting) => sighting[1]); const vehicles = dedupedSightings.reduce>( (acc, item) => { const hotlisthit = Object.values(item.metadata?.hotlistMatches ?? {}).includes(true); if (item.metadata?.npedJSON["NPED CATEGORY"] === "A") acc.npedCatA.push(item); if (item.metadata?.npedJSON["NPED CATEGORY"] === "B") acc.npedCatB.push(item); if (item.metadata?.npedJSON["NPED CATEGORY"] === "C") acc.npedCatC.push(item); if (item.metadata?.npedJSON["NPED CATEGORY"] === "D") acc.npedCatD.push(item); if (item.metadata?.npedJSON["TAX STATUS"] === false) acc.notTaxed.push(item); if (item.metadata?.npedJSON["MOT STATUS"] === false) acc.notMOT.push(item); if (hotlisthit) acc.hotlistHit.push(item); acc.vehicles.push(item); return acc; }, { npedCatA: [], npedCatB: [], npedCatC: [], npedCatD: [], notTaxed: [], notMOT: [], hotlistHit: [], vehicles: [], } ); const handleStartClick = () => { dispatch({ type: "SESSIONSTART", payload: !sessionStarted }); dispatch({ type: "SESSIONPAUSE", payload: false }); toast(`${sessionStarted ? "Vehicle tracking session ended" : "Vehicle tracking session started"}`); }; const handlepauseClick = () => { dispatch({ type: "SESSIONPAUSE", payload: !sessionPaused }); toast(`${sessionStarted ? "Vehicle tracking session paused" : "Vehicle tracking session resumed"}`); }; const handleSaveCick = async () => { const result = await mutation.mutateAsync({ operation: "INSERT", path: "sessionStats", value: dedupedSightings, }); if (result.reason === "OK") toast.success("Session saved"); }; return (
{sessionStarted && ( )} {sessionStarted && ( )}
); }; export default SessionCard;