useScrubberMouseTracking.tsx 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import {RefObject, useCallback} from 'react';
  2. import {useReplayContext} from 'sentry/components/replays/replayContext';
  3. import useMouseTracking from 'sentry/utils/replays/hooks/useMouseTracking';
  4. type Opts<T extends Element> = {
  5. elem: RefObject<T>;
  6. };
  7. export function useScrubberMouseTracking<T extends Element>({elem}: Opts<T>) {
  8. const {replay, setCurrentHoverTime} = useReplayContext();
  9. const durationMs = replay?.getDurationMs();
  10. const handlePositionChange = useCallback(
  11. params => {
  12. if (!params || durationMs === undefined) {
  13. setCurrentHoverTime(undefined);
  14. return;
  15. }
  16. const {left, width} = params;
  17. if (left >= 0) {
  18. const percent = left / width;
  19. const time = percent * durationMs;
  20. setCurrentHoverTime(time);
  21. } else {
  22. setCurrentHoverTime(undefined);
  23. }
  24. },
  25. [durationMs, setCurrentHoverTime]
  26. );
  27. const mouseTrackingProps = useMouseTracking({
  28. elem,
  29. onPositionChange: handlePositionChange,
  30. });
  31. return mouseTrackingProps;
  32. }
  33. export default useScrubberMouseTracking;