useSplitPanelTracking.tsx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import {useCallback, useRef} from 'react';
  2. import trackAdvancedAnalyticsEvent from 'sentry/utils/analytics/trackAdvancedAnalyticsEvent';
  3. import useReplayLayout from 'sentry/utils/replays/hooks/useReplayLayout';
  4. import useOrganization from 'sentry/utils/useOrganization';
  5. type CSSValuePct = `${number}%`;
  6. type Options = {
  7. slideDirection: 'updown' | 'leftright';
  8. };
  9. function useSplitPanelTracking({slideDirection}: Options) {
  10. const organization = useOrganization();
  11. const {getLayout} = useReplayLayout();
  12. const startSizeCSSRef = useRef<number>(0);
  13. const setStartPosition = useCallback((startPosition: undefined | CSSValuePct) => {
  14. startSizeCSSRef.current = Number(startPosition?.replace('%', '') || 0);
  15. }, []);
  16. const logEndPosition = useCallback(
  17. (endPosition: undefined | CSSValuePct) => {
  18. const smaller = slideDirection === 'updown' ? 'toTop' : 'toLeft';
  19. const bigger = slideDirection === 'updown' ? 'toBottom' : 'toRight';
  20. const endSizeCSS = Number(endPosition?.replace('%', '') || 0);
  21. trackAdvancedAnalyticsEvent('replay.details-resized-panel', {
  22. organization,
  23. layout: getLayout(),
  24. slide_motion: endSizeCSS > startSizeCSSRef.current ? bigger : smaller,
  25. });
  26. },
  27. [getLayout, organization, slideDirection]
  28. );
  29. return {
  30. setStartPosition,
  31. logEndPosition,
  32. };
  33. }
  34. export default useSplitPanelTracking;