react-native-wishlist
Version:
The fastest List component for React Native.
60 lines (57 loc) • 2.12 kB
JavaScript
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
import React, { forwardRef } from 'react';
import { NativeModules, View } from 'react-native';
import { createTemplateComponent } from '../createTemplateComponent';
import { useTemplateCallback } from '../EventHandler';
import { createRunInJsFn } from '../WishlistJsRuntime';
// TODO(janic): Figure out why those cannot be imported directly from RNGH in the example app.
const ActionType = {
REANIMATED_WORKLET: 1,
NATIVE_ANIMATED_EVENT: 2,
JS_FUNCTION_OLD_API: 3,
JS_FUNCTION_NEW_API: 4,
DIRECT_EVENT: 5
};
let _handlerTag = 1000;
export function getNextHandlerTag() {
return _handlerTag++;
}
const RNGestureHandlerModule = NativeModules.RNGestureHandlerModule;
export const State = {
UNDETERMINED: 0,
FAILED: 1,
BEGAN: 2,
CANCELLED: 3,
ACTIVE: 4,
END: 5
};
const attachGestureHandler = createRunInJsFn(tag => {
const handlerTag = getNextHandlerTag();
RNGestureHandlerModule.createGestureHandler('TapGestureHandler', handlerTag, {});
RNGestureHandlerModule.attachGestureHandler(handlerTag, tag, ActionType.DIRECT_EVENT);
RNGestureHandlerModule.flushOperations();
});
const PressableView = createTemplateComponent(View, (item, props) => {
'worklet';
const tag = item.getTag();
item.addProps(props);
attachGestureHandler(tag);
});
export const Pressable = /*#__PURE__*/forwardRef((_ref, ref) => {
let {
onPress,
...others
} = _ref;
const onGestureEvent = useTemplateCallback((ev, item, rootItem) => {
'worklet';
if (ev.state === State.ACTIVE) {
onPress(item, rootItem);
}
}, 'onGestureHandlerStateChange');
return /*#__PURE__*/React.createElement(PressableView, _extends({}, others, {
// @ts-expect-error
onGestureEvent: onGestureEvent,
ref: ref
}));
});
//# sourceMappingURL=Pressable.js.map