scrubberMouseTracking.tsx 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import {useCallback} from 'react';
  2. import {useReplayContext} from 'sentry/components/replays/replayContext';
  3. import useMouseTracking from 'sentry/utils/replays/hooks/useMouseTracking';
  4. type Props = {
  5. children: React.ReactNode;
  6. };
  7. function ScrubberMouseTracking({children}: Props) {
  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<HTMLDivElement>({
  28. onPositionChange: handlePositionChange,
  29. });
  30. return <div {...mouseTrackingProps}>{children}</div>;
  31. }
  32. export default ScrubberMouseTracking;