UNPKG

react-native-chart-kit

Version:

Beautiful React Native charts for dashboards, reports, and data-rich mobile apps.

63 lines (62 loc) 2.82 kB
import { useCallback } from "react"; export const useLineChartResponderProps = ({ clearGestureSelection, handleInteractionEvent, interactionConfig, isInteractionEnabled, isResponderEventInPlot, preventBrowserSelection, viewportPan }) => { const handleResponderGrant = useCallback((event) => { preventBrowserSelection(event); if (!isResponderEventInPlot(event)) { if (interactionConfig.deselectOnOutsidePress) { clearGestureSelection({ reason: "outsidePress" }); } return; } if (viewportPan.isEnabled) { viewportPan.handleGrant(event); return; } interactionConfig.onGestureStart?.(); handleInteractionEvent(event); }, [ clearGestureSelection, handleInteractionEvent, interactionConfig, isResponderEventInPlot, preventBrowserSelection, viewportPan ]); const handleResponderMove = useCallback((event) => { if (viewportPan.isActive()) { viewportPan.handleMove(event); return; } if (interactionConfig.mode === "scrub") { handleInteractionEvent(event); } }, [handleInteractionEvent, interactionConfig.mode, viewportPan]); const handleResponderEnd = useCallback(() => { if (viewportPan.isActive()) { viewportPan.handleEnd(); return; } if (interactionConfig.selectionPersistence === "whileActive") { clearGestureSelection({ reason: "gestureEnd" }); } interactionConfig.onGestureEnd?.(); }, [clearGestureSelection, interactionConfig, viewportPan]); const isResponderEnabled = isInteractionEnabled || viewportPan.isEnabled; return isResponderEnabled ? { onStartShouldSetResponderCapture: (event) => viewportPan.shouldSetResponder(event) || isInteractionEnabled, onMoveShouldSetResponderCapture: (event) => viewportPan.shouldSetResponder(event) || (interactionConfig.mode === "scrub" && isResponderEventInPlot(event)), onStartShouldSetResponder: (event) => viewportPan.shouldSetResponder(event) || isInteractionEnabled, onMoveShouldSetResponder: (event) => viewportPan.shouldSetResponder(event) || (interactionConfig.mode === "scrub" && isResponderEventInPlot(event)), onResponderTerminationRequest: () => viewportPan.isActive() ? !viewportPan.shouldBlockTermination : interactionConfig.mode !== "scrub", onResponderGrant: handleResponderGrant, onResponderMove: handleResponderMove, onResponderRelease: handleResponderEnd, onResponderTerminate: handleResponderEnd } : {}; };