diff options
| author | gantiro <gantiro396@gmail.com> | 2025-07-15 22:56:56 +0700 |
|---|---|---|
| committer | gantiro <gantiro396@gmail.com> | 2025-07-15 22:56:56 +0700 |
| commit | 52f003f25ab8d3124ddf4880c44f874206d7f988 (patch) | |
| tree | fee80fc0bedf0122e3aa6f020d23642a4093cee7 /apps/web/src/hooks/use-timeline-zoom.ts | |
| parent | b266678fe4bb8c4053688fd037693fa2f930ac14 (diff) | |
| download | opencut-52f003f25ab8d3124ddf4880c44f874206d7f988.tar.gz | |
add comment for hooks
Diffstat (limited to 'apps/web/src/hooks/use-timeline-zoom.ts')
| -rw-r--r-- | apps/web/src/hooks/use-timeline-zoom.ts | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/apps/web/src/hooks/use-timeline-zoom.ts b/apps/web/src/hooks/use-timeline-zoom.ts index 16d20d7e..c8780f9a 100644 --- a/apps/web/src/hooks/use-timeline-zoom.ts +++ b/apps/web/src/hooks/use-timeline-zoom.ts @@ -15,15 +15,30 @@ interface UseTimelineZoomReturn { handleWheel: (e: React.WheelEvent) => void;
}
+/**
+ * useTimelineZoom
+ *
+ * Custom hook to manage zoom logic for a timeline component.
+ * Handles zoom state, step calculation, level changes, and mouse wheel zooming (with ctrl/meta).
+ */
export function useTimelineZoom(): UseTimelineZoomReturn {
+ // Current zoom level (1 = default)
const [zoomLevel, setZoomLevel] = useState(1);
+ /**
+ * Calculate the current zoom step based on the zoom level and a base step constant.
+ * Ensures minimum step is 1 (prevents zero or negative step).
+ */
const zoomStep = useMemo(
() =>
Math.max(1, Math.round(zoomLevel / TIMELINE_CONSTANTS.ZOOM_STEP_BASE)),
[zoomLevel]
);
+ /**
+ * Update the zoom level using a given step.
+ * The zoom level is clamped to a minimum value defined in constants.
+ */
const handleChangeZoomStep = useCallback((newStep: number) => {
setZoomLevel(
Math.max(
@@ -33,6 +48,10 @@ export function useTimelineZoom(): UseTimelineZoomReturn { );
}, []);
+ /**
+ * Update the zoom level directly.
+ * The new value is clamped between the defined minimum and maximum levels.
+ */
const handleChangeZoomLevel = useCallback((newLevel: number) => {
setZoomLevel(
Math.max(
@@ -42,7 +61,10 @@ export function useTimelineZoom(): UseTimelineZoomReturn { );
}, []);
- // Mouse wheel zoom, ctrl/meta gesture
+ /**
+ * Handle zooming using mouse wheel + ctrl/meta key (like browser zoom).
+ * Prevents default browser behavior and updates zoom level accordingly.
+ */
const handleWheel = useCallback((e: React.WheelEvent) => {
if (e.ctrlKey || e.metaKey) {
e.preventDefault?.();
@@ -59,12 +81,13 @@ export function useTimelineZoom(): UseTimelineZoomReturn { }
}, []);
+ // Return all handlers and state values for use in timeline components
return {
- zoomLevel,
- zoomStep,
- setZoomLevel,
- handleChangeZoomStep,
- handleChangeZoomLevel,
- handleWheel,
+ zoomLevel, // Current zoom level
+ zoomStep, // Current zoom step (calculated from zoomLevel)
+ setZoomLevel, // Directly set the zoom level (accepts value or updater function)
+ handleChangeZoomStep, // Change zoom by step value
+ handleChangeZoomLevel, // Change zoom by level value
+ handleWheel, // Handler for mouse wheel zooming
};
}
|
