import { h } from 'preact'; import { useState } from 'preact/hooks'; import { addSeconds, differenceInSeconds, fromUnixTime, format, parseISO, startOfHour } from 'date-fns'; import ArrowDropdown from '../icons/ArrowDropdown'; import ArrowDropup from '../icons/ArrowDropup'; import Link from '../components/Link'; import Menu from '../icons/Menu'; import MenuOpen from '../icons/MenuOpen'; import { useApiHost } from '../api'; export default function RecordingPlaylist({ camera, recordings, selectedDate, selectedHour }) { const [active, setActive] = useState(true); const toggle = () => setActive(!active); const result = []; for (const recording of recordings.slice().reverse()) { const date = parseISO(recording.date); result.push( {recording.recordings.map((item, i) => (
{item.hour}:00
{item.events.length} Events
{item.events.map((event) => ( ))}
))}
); } const openClass = active ? '-left-6' : 'right-0'; return (
{active ? : }
{result}
); } export function ExpandableList({ title, events = 0, children, selected = false }) { const [active, setActive] = useState(selected); const toggle = () => setActive(!active); return (
{title}
{events} Events
{active ? : }
{children}
); } export function EventCard({ camera, event, delay }) { const apiHost = useApiHost(); const start = fromUnixTime(event.start_time); const end = fromUnixTime(event.end_time); const duration = addSeconds(new Date(0), differenceInSeconds(end, start)); const position = differenceInSeconds(start, startOfHour(start)); const offset = Object.entries(delay) .map(([p, d]) => (position > p ? d : 0)) .reduce((p, c) => p + c, 0); const seconds = Math.max(position - offset - 10, 0); return (
{event.label}
Start: {format(start, 'HH:mm:ss')}
Duration: {format(duration, 'mm:ss')}
{(event.top_score * 100).toFixed(1)}%
); }