import { Accordion, Center, Flex, Group, NavLink, Text, UnstyledButton } from '@mantine/core'; import React, { useContext, useEffect, useState } from 'react'; import { RecordSummary } from '../../../types/record'; import { observer } from 'mobx-react-lite'; import PlayControl from '../buttons/PlayControl'; import { mapHostToHostname, proxyApi } from '../../../services/frigate.proxy/frigate.api'; import { Context } from '../../..'; import VideoPlayer from '../players/VideoPlayer'; import { getResolvedTimeZone } from '../../utils/dateUtil'; import DayEventsAccordion from './DayEventsAccordion'; import { strings } from '../../strings/strings'; import { useNavigate } from 'react-router-dom'; import AccordionControlButton from '../buttons/AccordionControlButton'; import { IconExternalLink, IconShare } from '@tabler/icons-react'; import { routesPath } from '../../../router/routes.path'; import AccordionShareButton from '../buttons/AccordionShareButton'; interface RecordingAccordionProps { recordSummary?: RecordSummary } const DayAccordion = ({ recordSummary }: RecordingAccordionProps) => { const { recordingsStore: recStore } = useContext(Context) const [playedValue, setVideoPlayerState] = useState() const [openedValue, setOpenedValue] = useState() const [playerUrl, setPlayerUrl] = useState() const [link, setLink] = useState() const navigate = useNavigate() const camera = recStore.openedCamera || recStore.filteredCamera const createRecordURL = (recordId: string): string | undefined => { const record = { hostName: recStore.filteredHost ? mapHostToHostname(recStore.filteredHost) : '', cameraName: camera?.name, day: recordSummary?.day, hour: recordId, timezone: getResolvedTimeZone().replace('/', ','), } const parsed = recStore.getFullRecordForPlay(record) if (parsed.success) { return proxyApi.recordingURL( parsed.data.hostName, parsed.data.cameraName, parsed.data.timezone, parsed.data.day, parsed.data.hour ) } return undefined } useEffect(() => { if (playedValue) { const url = createRecordURL(playedValue) if (url) { console.log('GET URL: ', url) setPlayerUrl(url) } } else { setPlayerUrl(undefined) } }, [playedValue]) if (!recordSummary || recordSummary.hours.length < 1) return Not have record at that day const handleOpenPlayer = (value: string) => { if (playedValue !== value) { setOpenedValue(value) setVideoPlayerState(value) } else if (openedValue === value && playedValue === value) { setVideoPlayerState(undefined) } } const handleOpenItem = (value: string) => { if (openedValue === value) { setOpenedValue(undefined) } else { setOpenedValue(value) } setVideoPlayerState(undefined) } console.log('DayAccordion rendered') const hourLabel = (hour: string, eventsQty: number) => ( {strings.hour}: {hour}:00 {eventsQty > 0 ? {strings.events}: {eventsQty} : {strings.notHaveEvents} } ) const hanleOpenNewLink = (recordId: string) => { const link = createRecordURL(recordId) if (link) { const url = `${routesPath.PLAYER_PATH}?link=${encodeURIComponent(link)}` navigate(url) } } return ( {recordSummary.hours.map(hour => ( {hourLabel(hour.hour, hour.events)} hanleOpenNewLink(hour.hour)}> {playedValue === hour.hour && playerUrl ? : <>} {hour.events > 0 ? :
{strings.notHaveEvents}
}
))}
) } export default observer(DayAccordion);