Skip to content

Commit

Permalink
feat: add getDeltaXFromScreenX
Browse files Browse the repository at this point in the history
  • Loading branch information
samuelarbibe committed Dec 20, 2024
1 parent 71b58cc commit 17e1dc8
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 10 deletions.
30 changes: 20 additions & 10 deletions packages/dnd-timeline/src/hooks/useTimeline.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import type { CSSProperties } from "react";
import { useCallback, useMemo } from "react";

import type {
GetDeltaXFromScreenX,
GetSpanFromDragEvent,
GetSpanFromResizeEvent,
GetValueFromScreenX,
Expand Down Expand Up @@ -93,6 +94,21 @@ export default function useTimeline({
[rangeStart, rangeEnd, timelineViewportWidth],
);

const getDeltaXFromScreenX = useCallback<GetDeltaXFromScreenX>(
(screenX) => {
const side = direction === "rtl" ? "right" : "left";

const timelineSideX =
(timelineRef.current?.getBoundingClientRect()[side] || 0) +
sidebarWidth * (direction === "rtl" ? -1 : 1);

const deltaX = screenX - timelineSideX;

return deltaX;
},
[timelineRef, sidebarWidth, direction],
);

const snapValueToRangeGrid = useCallback(
(value: number) => {
if (!rangeGridSize) return value;
Expand All @@ -104,24 +120,16 @@ export default function useTimeline({

const getValueFromScreenX = useCallback<GetValueFromScreenX>(
(screenX) => {
const side = direction === "rtl" ? "right" : "left";

const timelineSideX =
(timelineRef.current?.getBoundingClientRect()[side] || 0) +
sidebarWidth * (direction === "rtl" ? -1 : 1);

const deltaX = screenX - timelineSideX;

const deltaX = getDeltaXFromScreenX(screenX);
const delta = pixelsToValue(deltaX) * (direction === "rtl" ? -1 : 1);

return snapValueToRangeGrid(rangeStart + delta);
},
[
timelineRef,
sidebarWidth,
rangeStart,
direction,
pixelsToValue,
getDeltaXFromScreenX,
snapValueToRangeGrid,
],
);
Expand Down Expand Up @@ -233,6 +241,7 @@ export default function useTimeline({
direction,
rangeGridSize,
getValueFromScreenX,
getDeltaXFromScreenX,
getSpanFromDragEvent,
getSpanFromResizeEvent,
}),
Expand All @@ -254,6 +263,7 @@ export default function useTimeline({
direction,
rangeGridSize,
getValueFromScreenX,
getDeltaXFromScreenX,
getSpanFromDragEvent,
getSpanFromResizeEvent,
],
Expand Down
3 changes: 3 additions & 0 deletions packages/dnd-timeline/src/types/timeline.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ export type GetSpanFromResizeEvent = (event: ResizeEndEvent) => Range | null;

export type GetValueFromScreenX = (screenX: number) => number;

export type GetDeltaXFromScreenX = (screenX: number) => number;

export type OnResizeStart = (event: ResizeStartEvent) => void;

export type OnResizeEnd = (event: ResizeEndEvent) => void;
Expand Down Expand Up @@ -54,6 +56,7 @@ export interface TimelineBag {
valueToPixels: ValueToPixels;
pixelsToValue: PixelsToValue;
getValueFromScreenX: GetValueFromScreenX;
getDeltaXFromScreenX: GetDeltaXFromScreenX;
getSpanFromDragEvent: GetSpanFromDragEvent;
getSpanFromResizeEvent: GetSpanFromResizeEvent;
}
Expand Down

0 comments on commit 17e1dc8

Please # to comment.