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.

79 lines
3.0 KiB

// Previous types exported gesture handlers as classes which creates an interface and variable, both named the same as class.
// Without those types, we'd introduce breaking change, forcing users to prefix every handler type specification with typeof
// e.g. React.createRef<TapGestureHandler> -> React.createRef<typeof TapGestureHandler>.
// See https://www.typescriptlang.org/docs/handbook/classes.html#constructor-functions for reference.
import { Platform, findNodeHandle as findNodeHandleRN } from 'react-native';
import { handlerIDToTag } from './handlersRegistry';
import { toArray } from '../utils';
import RNGestureHandlerModule from '../RNGestureHandlerModule';
const commonProps = ['id', 'enabled', 'shouldCancelWhenOutside', 'hitSlop', 'cancelsTouchesInView', 'userSelect'];
const componentInteractionProps = ['waitFor', 'simultaneousHandlers'];
export const baseGestureHandlerProps = [...commonProps, ...componentInteractionProps, 'onBegan', 'onFailed', 'onCancelled', 'onActivated', 'onEnded', 'onGestureEvent', 'onHandlerStateChange'];
export const baseGestureHandlerWithMonitorProps = [...commonProps, 'needsPointerData', 'manualActivation'];
function isConfigParam(param, name) {
// param !== Object(param) returns false if `param` is a function
// or an object and returns true if `param` is null
return param !== undefined && (param !== Object(param) || !('__isNative' in param)) && name !== 'onHandlerStateChange' && name !== 'onGestureEvent';
}
export function filterConfig(props, validProps, defaults = {}) {
const filteredConfig = { ...defaults
};
for (const key of validProps) {
let value = props[key];
if (isConfigParam(value, key)) {
if (key === 'simultaneousHandlers' || key === 'waitFor') {
value = transformIntoHandlerTags(props[key]);
} else if (key === 'hitSlop' && typeof value !== 'object') {
value = {
top: value,
left: value,
bottom: value,
right: value
};
}
filteredConfig[key] = value;
}
}
return filteredConfig;
}
function transformIntoHandlerTags(handlerIDs) {
handlerIDs = toArray(handlerIDs);
if (Platform.OS === 'web') {
return handlerIDs.map(({
current
}) => current).filter(handle => handle);
} // converts handler string IDs into their numeric tags
return handlerIDs.map(handlerID => {
var _handlerID$current;
return handlerIDToTag[handlerID] || ((_handlerID$current = handlerID.current) === null || _handlerID$current === void 0 ? void 0 : _handlerID$current.handlerTag) || -1;
}).filter(handlerTag => handlerTag > 0);
}
export function findNodeHandle(node) {
if (Platform.OS === 'web') {
return node;
}
return findNodeHandleRN(node);
}
let scheduledFlushOperationsId = null;
export function scheduleFlushOperations() {
if (scheduledFlushOperationsId === null) {
scheduledFlushOperationsId = requestAnimationFrame(() => {
RNGestureHandlerModule.flushOperations();
scheduledFlushOperationsId = null;
});
}
}
//# sourceMappingURL=gestureHandlerCommon.js.map