import { h, Fragment } from 'preact'; import { useCallback, useState, useEffect } from 'preact/hooks'; import ActivityIndicator from '../components/ActivityIndicator'; import Button from '../components/Button'; import Clip from '../icons/Clip'; import Close from '../icons/Close'; import Delete from '../icons/Delete'; import Snapshot from '../icons/Snapshot'; import Dialog from '../components/Dialog'; import Heading from '../components/Heading'; import VideoPlayer from '../components/VideoPlayer'; import { FetchStatus, useApiHost, useEvent, useDelete } from '../api'; export default function Event({ eventId, close, scrollRef }) { const apiHost = useApiHost(); const { data, status } = useEvent(eventId); const [showDialog, setShowDialog] = useState(false); const [shouldScroll, setShouldScroll] = useState(true); const [deleteStatus, setDeleteStatus] = useState(FetchStatus.NONE); const setDeleteEvent = useDelete(); useEffect(() => { // Scroll event into view when component has been mounted. if (shouldScroll && scrollRef && scrollRef[eventId]) { scrollRef[eventId].scrollIntoView(); setShouldScroll(false); } }, [data, scrollRef, eventId, shouldScroll]); const handleClickDelete = () => { setShowDialog(true); }; const handleDismissDeleteDialog = () => { setShowDialog(false); }; const handleClickDeleteDialog = useCallback(async () => { let success; try { success = await setDeleteEvent(eventId); setDeleteStatus(success ? FetchStatus.LOADED : FetchStatus.ERROR); } catch (e) { setDeleteStatus(FetchStatus.ERROR); } if (success) { setDeleteStatus(FetchStatus.LOADED); setShowDialog(false); } }, [eventId, setShowDialog, setDeleteEvent]); if (status !== FetchStatus.LOADED) { return ; } return (
{showDialog ? ( ) : null}
{data.has_clip ? ( Clip {}} /> ) : ( {data.has_snapshot ? 'Best Image' : 'Thumbnail'} {`${data.label} )}
); }