import useSWR from "swr"; import PreviewThumbnailPlayer from "../player/PreviewThumbnailPlayer"; import { Card } from "../ui/card"; import { FrigateConfig } from "@/types/frigateConfig"; import ActivityIndicator from "../ui/activity-indicator"; import { LuCircle, LuClock, LuPlay, LuPlayCircle, LuTruck } from "react-icons/lu"; import { IoMdExit } from "react-icons/io" import { MdFaceUnlock, MdOutlineLocationOn, MdOutlinePictureInPictureAlt } from "react-icons/md"; import { HiOutlineVideoCamera } from "react-icons/hi"; import { formatUnixTimestampToDateTime } from "@/utils/dateUtil"; type HistoryCardProps = { timeline: Card, allPreviews?: Preview[], } export default function HistoryCard({ allPreviews, timeline }: HistoryCardProps) { const { data: config } = useSWR("config"); if (!config) { return } return (
{formatUnixTimestampToDateTime(timeline.time, { strftime_fmt: config.ui.time_format == '24hour' ? '%H:%M:%S' : '%I:%M:%S' })}
{timeline.camera.replaceAll('_', ' ')}
Activity:
{Object.entries(timeline.entries).map(([_, entry]) => { return (
{getTimelineIcon(entry)} {getTimelineItemDescription(entry)}
); })}
); } function getTimelineIcon(timelineItem: Timeline) { switch (timelineItem.class_type) { case 'visible': return ; case 'gone': return ; case 'active': return ; case 'stationary': return ; case 'entered_zone': return ; case 'attribute': switch (timelineItem.data.attribute) { case 'face': return ; case 'license_plate': return ; default: return ; } case 'sub_label': switch (timelineItem.data.label) { case 'person': return ; case 'car': return ; } } } function getTimelineItemDescription(timelineItem: Timeline) { const label = ((Array.isArray(timelineItem.data.sub_label) ? timelineItem.data.sub_label[0] : timelineItem.data.sub_label) || timelineItem.data.label).replaceAll('_', ' '); switch (timelineItem.class_type) { case 'visible': return `${label} detected`; case 'entered_zone': return `${label} entered ${timelineItem.data.zones.join(' and ').replaceAll('_', ' ')}`; case 'active': return `${label} became active`; case 'stationary': return `${label} became stationary`; case 'attribute': { let title = ''; if (timelineItem.data.attribute == 'face' || timelineItem.data.attribute == 'license_plate') { title = `${timelineItem.data.attribute.replaceAll('_', ' ')} detected for ${label}`; } else { title = `${timelineItem.data.sub_label} recognized as ${timelineItem.data.attribute.replaceAll('_', ' ')}`; } return title; } case 'sub_label': return `${timelineItem.data.label} recognized as ${timelineItem.data.sub_label}`; case 'gone': return `${label} left`; } }