import { useFormattedTimestamp } from "@/hooks/use-date-utils"; import { FrigateConfig } from "@/types/frigateConfig"; import { useMemo } from "react"; import { useTranslation } from "react-i18next"; import useSWR from "swr"; type MinimapSegmentProps = { isFirstSegmentInMinimap: boolean; isLastSegmentInMinimap: boolean; alignedMinimapStartTime: number; alignedMinimapEndTime: number; firstMinimapSegmentRef: React.MutableRefObject; dense: boolean; }; type TickSegmentProps = { timestamp: Date; timestampSpread: number; }; type TimestampSegmentProps = { isFirstSegmentInMinimap: boolean; isLastSegmentInMinimap: boolean; timestamp: Date; timestampSpread: number; segmentKey: string; }; export function MinimapBounds({ isFirstSegmentInMinimap, isLastSegmentInMinimap, alignedMinimapStartTime, alignedMinimapEndTime, firstMinimapSegmentRef, dense, }: MinimapSegmentProps) { const { data: config } = useSWR("config"); const { t } = useTranslation(["common"]); const timeFormat = config?.ui.time_format === "24hour" ? "24hour" : "12hour"; const formatKey = dense ? `time.formattedTimestampHourMinute.${timeFormat}` : `time.formattedTimestampMonthDayHourMinute.${timeFormat}`; const formattedStartTime = useFormattedTimestamp( alignedMinimapStartTime, t(formatKey), config?.ui.timezone, ); const formattedEndTime = useFormattedTimestamp( alignedMinimapEndTime, t(formatKey), config?.ui.timezone, ); return ( <> {isFirstSegmentInMinimap && (
{formattedStartTime}
)} {isLastSegmentInMinimap && (
{formattedEndTime}
)} ); } export function Tick({ timestamp, timestampSpread }: TickSegmentProps) { return (
); } export function Timestamp({ isFirstSegmentInMinimap, isLastSegmentInMinimap, timestamp, timestampSpread, segmentKey, }: TimestampSegmentProps) { const { t } = useTranslation(["common"]); const { data: config } = useSWR("config"); const timeFormat = config?.ui.time_format === "24hour" ? "24hour" : "12hour"; const format = t(`time.formattedTimestampHourMinute.${timeFormat}`); const formattedTimestamp = useFormattedTimestamp( timestamp.getTime() / 1000, format, config?.ui.timezone, ); const shouldDisplay = useMemo(() => { return ( timestamp.getMinutes() % timestampSpread === 0 && timestamp.getSeconds() === 0 ); }, [timestamp, timestampSpread]); return (
{!isFirstSegmentInMinimap && !isLastSegmentInMinimap && shouldDisplay && (
{formattedTimestamp}
)}
); }