react-native-chart-kit
Version:
Beautiful React Native charts for dashboards, reports, and data-rich mobile apps.
63 lines (62 loc) • 2.82 kB
JavaScript
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
}
: {};
};