You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
5.1 KiB
141 lines
5.1 KiB
import React from 'react';
|
|
|
|
import { ActionType } from './ActionType';
|
|
import { isExperimentalWebImplementationEnabled } from './EnableExperimentalWebImplementation';
|
|
|
|
//GestureHandlers
|
|
import InteractionManager from './web/tools/InteractionManager';
|
|
import NodeManager from './web/tools/NodeManager';
|
|
import PanGestureHandler from './web/handlers/PanGestureHandler';
|
|
import TapGestureHandler from './web/handlers/TapGestureHandler';
|
|
import LongPressGestureHandler from './web/handlers/LongPressGestureHandler';
|
|
import PinchGestureHandler from './web/handlers/PinchGestureHandler';
|
|
import RotationGestureHandler from './web/handlers/RotationGestureHandler';
|
|
import FlingGestureHandler from './web/handlers/FlingGestureHandler';
|
|
import NativeViewGestureHandler from './web/handlers/NativeViewGestureHandler';
|
|
import ManualGestureHandler from './web/handlers/ManualGestureHandler';
|
|
|
|
//Hammer Handlers
|
|
import * as HammerNodeManager from './web_hammer/NodeManager';
|
|
import HammerNativeViewGestureHandler from './web_hammer/NativeViewGestureHandler';
|
|
import HammerPanGestureHandler from './web_hammer/PanGestureHandler';
|
|
import HammerTapGestureHandler from './web_hammer/TapGestureHandler';
|
|
import HammerLongPressGestureHandler from './web_hammer/LongPressGestureHandler';
|
|
import HammerPinchGestureHandler from './web_hammer/PinchGestureHandler';
|
|
import HammerRotationGestureHandler from './web_hammer/RotationGestureHandler';
|
|
import HammerFlingGestureHandler from './web_hammer/FlingGestureHandler';
|
|
import { Config } from './web/interfaces';
|
|
|
|
export const Gestures = {
|
|
NativeViewGestureHandler,
|
|
PanGestureHandler,
|
|
TapGestureHandler,
|
|
LongPressGestureHandler,
|
|
PinchGestureHandler,
|
|
RotationGestureHandler,
|
|
FlingGestureHandler,
|
|
ManualGestureHandler,
|
|
};
|
|
|
|
export const HammerGestures = {
|
|
NativeViewGestureHandler: HammerNativeViewGestureHandler,
|
|
PanGestureHandler: HammerPanGestureHandler,
|
|
TapGestureHandler: HammerTapGestureHandler,
|
|
LongPressGestureHandler: HammerLongPressGestureHandler,
|
|
PinchGestureHandler: HammerPinchGestureHandler,
|
|
RotationGestureHandler: HammerRotationGestureHandler,
|
|
FlingGestureHandler: HammerFlingGestureHandler,
|
|
};
|
|
|
|
export default {
|
|
handleSetJSResponder(tag: number, blockNativeResponder: boolean) {
|
|
console.warn('handleSetJSResponder: ', tag, blockNativeResponder);
|
|
},
|
|
handleClearJSResponder() {
|
|
console.warn('handleClearJSResponder: ');
|
|
},
|
|
createGestureHandler<T>(
|
|
handlerName: keyof typeof Gestures,
|
|
handlerTag: number,
|
|
config: T
|
|
) {
|
|
if (isExperimentalWebImplementationEnabled()) {
|
|
if (!(handlerName in Gestures)) {
|
|
throw new Error(
|
|
`react-native-gesture-handler: ${handlerName} is not supported on web.`
|
|
);
|
|
}
|
|
|
|
const GestureClass = Gestures[handlerName];
|
|
NodeManager.createGestureHandler(handlerTag, new GestureClass());
|
|
InteractionManager.getInstance().configureInteractions(
|
|
NodeManager.getHandler(handlerTag),
|
|
config as unknown as Config
|
|
);
|
|
} else {
|
|
if (!(handlerName in HammerGestures)) {
|
|
throw new Error(
|
|
`react-native-gesture-handler: ${handlerName} is not supported on web.`
|
|
);
|
|
}
|
|
|
|
// @ts-ignore If it doesn't exist, the error is thrown
|
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
const GestureClass = HammerGestures[handlerName];
|
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
HammerNodeManager.createGestureHandler(handlerTag, new GestureClass());
|
|
}
|
|
|
|
this.updateGestureHandler(handlerTag, config as unknown as Config);
|
|
},
|
|
attachGestureHandler(
|
|
handlerTag: number,
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
newView: any,
|
|
_actionType: ActionType,
|
|
propsRef: React.RefObject<unknown>
|
|
) {
|
|
if (
|
|
!(newView instanceof HTMLElement || newView instanceof React.Component)
|
|
) {
|
|
return;
|
|
}
|
|
|
|
if (isExperimentalWebImplementationEnabled()) {
|
|
//@ts-ignore Types should be HTMLElement or React.Component
|
|
NodeManager.getHandler(handlerTag).init(newView, propsRef);
|
|
} else {
|
|
//@ts-ignore Types should be HTMLElement or React.Component
|
|
HammerNodeManager.getHandler(handlerTag).setView(newView, propsRef);
|
|
}
|
|
},
|
|
updateGestureHandler(handlerTag: number, newConfig: Config) {
|
|
if (isExperimentalWebImplementationEnabled()) {
|
|
NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
|
|
|
|
InteractionManager.getInstance().configureInteractions(
|
|
NodeManager.getHandler(handlerTag),
|
|
newConfig
|
|
);
|
|
} else {
|
|
HammerNodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
|
|
}
|
|
},
|
|
getGestureHandlerNode(handlerTag: number) {
|
|
if (isExperimentalWebImplementationEnabled()) {
|
|
return NodeManager.getHandler(handlerTag);
|
|
} else {
|
|
return HammerNodeManager.getHandler(handlerTag);
|
|
}
|
|
},
|
|
dropGestureHandler(handlerTag: number) {
|
|
if (isExperimentalWebImplementationEnabled()) {
|
|
NodeManager.dropGestureHandler(handlerTag);
|
|
} else {
|
|
HammerNodeManager.dropGestureHandler(handlerTag);
|
|
}
|
|
},
|
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
flushOperations() {},
|
|
};
|