From 5cf8df72fd4b049c3cacaae9aa8b73efe869c1e4 Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Fri, 29 Nov 2024 20:19:49 -0600 Subject: [PATCH] update playground --- web/src/pages/UIPlayground.tsx | 47 ++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/web/src/pages/UIPlayground.tsx b/web/src/pages/UIPlayground.tsx index 39f8d3629..b4f7cee0e 100644 --- a/web/src/pages/UIPlayground.tsx +++ b/web/src/pages/UIPlayground.tsx @@ -1,4 +1,4 @@ -import { useMemo, useRef, useState } from "react"; +import { useCallback, useMemo, useRef, useState } from "react"; import Heading from "@/components/ui/heading"; import useSWR from "swr"; import { FrigateConfig } from "@/types/frigateConfig"; @@ -29,6 +29,7 @@ import { useNavigate } from "react-router-dom"; import SummaryTimeline from "@/components/timeline/SummaryTimeline"; import { isMobile } from "react-device-detect"; import IconPicker, { IconElement } from "@/components/icons/IconPicker"; +import { useTimelineZoom } from "@/hooks/use-timeline-zoom"; // Color data const colors = [ @@ -173,32 +174,35 @@ function UIPlayground() { return Math.floor(Date.now() / 1000); // Default to current time if no events }, [mockEvents]); - const [zoomLevel, setZoomLevel] = useState(0); const [zoomSettings, setZoomSettings] = useState({ segmentDuration: 60, timestampSpread: 15, }); - const possibleZoomLevels = [ - { segmentDuration: 60, timestampSpread: 15 }, - { segmentDuration: 30, timestampSpread: 5 }, - { segmentDuration: 10, timestampSpread: 1 }, - ]; + const possibleZoomLevels = useMemo( + () => [ + { segmentDuration: 60, timestampSpread: 15 }, + { segmentDuration: 30, timestampSpread: 5 }, + { segmentDuration: 10, timestampSpread: 1 }, + ], + [], + ); - function handleZoomIn() { - const nextZoomLevel = Math.min( - possibleZoomLevels.length - 1, - zoomLevel + 1, - ); - setZoomLevel(nextZoomLevel); - setZoomSettings(possibleZoomLevels[nextZoomLevel]); - } + const handleZoomChange = useCallback( + (newZoomLevel: number) => { + setZoomSettings(possibleZoomLevels[newZoomLevel]); + }, + [possibleZoomLevels], + ); - function handleZoomOut() { - const nextZoomLevel = Math.max(0, zoomLevel - 1); - setZoomLevel(nextZoomLevel); - setZoomSettings(possibleZoomLevels[nextZoomLevel]); - } + const { zoomLevel, handleZoom } = useTimelineZoom({ + zoomSettings, + zoomLevels: possibleZoomLevels, + onZoomChange: handleZoomChange, + }); + + const handleZoomIn = () => handleZoom(-1); + const handleZoomOut = () => handleZoom(1); const [isDragging, setIsDragging] = useState(false); @@ -330,6 +334,7 @@ function UIPlayground() {
-