mirror of
https://github.com/zoriya/react-native-svg.git
synced 2025-12-06 07:06:11 +00:00
58 lines
1.5 KiB
JavaScript
58 lines
1.5 KiB
JavaScript
import { PanResponder } from "react-native";
|
|
|
|
const responderProps = [
|
|
...Object.keys(PanResponder.create({}).panHandlers),
|
|
"pointerEvents",
|
|
];
|
|
|
|
const touchableProps = [
|
|
"disabled",
|
|
"onPress",
|
|
"onPressIn",
|
|
"onPressOut",
|
|
"onLongPress",
|
|
"delayPressIn",
|
|
"delayPressOut",
|
|
"delayLongPress",
|
|
];
|
|
|
|
function hasTouchableProperty(props) {
|
|
for (let prop of touchableProps) {
|
|
if (props.hasOwnProperty(prop)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
export default function(props, ref) {
|
|
const extractedProps = {};
|
|
|
|
for (let key of responderProps) {
|
|
const value = props[key];
|
|
if (props[key]) {
|
|
if (!extractedProps.responsible && key !== "pointerEvents") {
|
|
extractedProps.responsible = true;
|
|
}
|
|
|
|
extractedProps[key] = value;
|
|
}
|
|
}
|
|
|
|
if (hasTouchableProperty(props)) {
|
|
extractedProps.responsible = true;
|
|
Object.assign(extractedProps, {
|
|
onStartShouldSetResponder:
|
|
ref.touchableHandleStartShouldSetResponder,
|
|
onResponderTerminationRequest:
|
|
ref.touchableHandleResponderTerminationRequest,
|
|
onResponderGrant: ref.touchableHandleResponderGrant,
|
|
onResponderMove: ref.touchableHandleResponderMove,
|
|
onResponderRelease: ref.touchableHandleResponderRelease,
|
|
onResponderTerminate: ref.touchableHandleResponderTerminate,
|
|
});
|
|
}
|
|
|
|
return extractedProps;
|
|
}
|