UNPKG

react-native-wishlist

Version:
60 lines (57 loc) 2.12 kB
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