react-native-gesture-handler
Version:
Declarative API exposing native platform touch and gesture system to React Native
105 lines (104 loc) • 3.27 kB
JavaScript
import { Platform } from 'react-native';
import { PressableStateMachine } from './StateMachine';
export var StateMachineEvent;
(function (StateMachineEvent) {
StateMachineEvent["NATIVE_BEGIN"] = "nativeBegin";
StateMachineEvent["NATIVE_START"] = "nativeStart";
StateMachineEvent["FINALIZE"] = "finalize";
StateMachineEvent["LONG_PRESS_TOUCHES_DOWN"] = "longPressTouchesDown";
})(StateMachineEvent || (StateMachineEvent = {}));
function getAndroidStateMachine(handlePressIn, handlePressOut) {
return new PressableStateMachine([
{
eventName: StateMachineEvent.NATIVE_BEGIN,
},
{
eventName: StateMachineEvent.LONG_PRESS_TOUCHES_DOWN,
callback: handlePressIn,
},
{
eventName: StateMachineEvent.FINALIZE,
callback: handlePressOut,
},
]);
}
function getIosStateMachine(handlePressIn, handlePressOut) {
return new PressableStateMachine([
{
eventName: StateMachineEvent.LONG_PRESS_TOUCHES_DOWN,
},
{
eventName: StateMachineEvent.NATIVE_START,
callback: handlePressIn,
},
{
eventName: StateMachineEvent.FINALIZE,
callback: handlePressOut,
},
]);
}
function getWebStateMachine(handlePressIn, handlePressOut) {
return new PressableStateMachine([
{
eventName: StateMachineEvent.NATIVE_BEGIN,
},
{
eventName: StateMachineEvent.NATIVE_START,
},
{
eventName: StateMachineEvent.LONG_PRESS_TOUCHES_DOWN,
callback: handlePressIn,
},
{
eventName: StateMachineEvent.FINALIZE,
callback: handlePressOut,
},
]);
}
function getMacosStateMachine(handlePressIn, handlePressOut) {
return new PressableStateMachine([
{
eventName: StateMachineEvent.LONG_PRESS_TOUCHES_DOWN,
},
{
eventName: StateMachineEvent.NATIVE_BEGIN,
callback: handlePressIn,
},
{
eventName: StateMachineEvent.NATIVE_START,
},
{
eventName: StateMachineEvent.FINALIZE,
callback: handlePressOut,
},
]);
}
function getUniversalStateMachine(handlePressIn, handlePressOut) {
return new PressableStateMachine([
{
eventName: StateMachineEvent.FINALIZE,
callback: (event) => {
handlePressIn(event);
handlePressOut(event);
},
},
]);
}
export function getConfiguredStateMachine(handlePressIn, handlePressOut) {
if (Platform.OS === 'android') {
return getAndroidStateMachine(handlePressIn, handlePressOut);
}
else if (Platform.OS === 'ios') {
return getIosStateMachine(handlePressIn, handlePressOut);
}
else if (Platform.OS === 'web') {
return getWebStateMachine(handlePressIn, handlePressOut);
}
else if (Platform.OS === 'macos') {
return getMacosStateMachine(handlePressIn, handlePressOut);
}
else {
// Unknown platform - using minimal universal setup.
return getUniversalStateMachine(handlePressIn, handlePressOut);
}
}