diff --git a/packages/react-native-gesture-handler/src/v3/hooks/utils/configUtils.ts b/packages/react-native-gesture-handler/src/v3/hooks/utils/configUtils.ts index d728407101..014e77532a 100644 --- a/packages/react-native-gesture-handler/src/v3/hooks/utils/configUtils.ts +++ b/packages/react-native-gesture-handler/src/v3/hooks/utils/configUtils.ts @@ -87,9 +87,8 @@ export function prepareConfigForNativeSide< for (const [key, value] of Object.entries(config)) { // @ts-ignore That's the point, we want to see if key exists in the whitelists if (allowedNativeProps.has(key) || handlerPropsWhiteList.has(key)) { - Object.assign(filteredConfig, { - [key]: Reanimated?.isSharedValue(value) ? value.value : value, - }); + (filteredConfig as Record)[key] = + Reanimated?.isSharedValue(value) ? value.value : value; } else if (PropsToFilter.has(key)) { continue; } else { diff --git a/packages/react-native-gesture-handler/src/v3/hooks/utils/eventHandlersUtils.ts b/packages/react-native-gesture-handler/src/v3/hooks/utils/eventHandlersUtils.ts index ec44f33f85..b6b3ddc131 100644 --- a/packages/react-native-gesture-handler/src/v3/hooks/utils/eventHandlersUtils.ts +++ b/packages/react-native-gesture-handler/src/v3/hooks/utils/eventHandlersUtils.ts @@ -16,38 +16,49 @@ export function useMemoizedGestureCallbacks< >( callbacks: GestureCallbacks ): GestureCallbacks { - return useMemo( - () => ({ - ...(callbacks.onBegin ? { onBegin: callbacks.onBegin } : {}), - ...(callbacks.onActivate ? { onActivate: callbacks.onActivate } : {}), - ...(callbacks.onDeactivate - ? { onDeactivate: callbacks.onDeactivate } - : {}), - ...(callbacks.onFinalize ? { onFinalize: callbacks.onFinalize } : {}), - ...(callbacks.onUpdate ? { onUpdate: callbacks.onUpdate } : {}), - ...(callbacks.onTouchesDown - ? { onTouchesDown: callbacks.onTouchesDown } - : {}), - ...(callbacks.onTouchesMove - ? { onTouchesMove: callbacks.onTouchesMove } - : {}), - ...(callbacks.onTouchesUp ? { onTouchesUp: callbacks.onTouchesUp } : {}), - ...(callbacks.onTouchesCancel - ? { onTouchesCancel: callbacks.onTouchesCancel } - : {}), - }), - [ - callbacks.onActivate, - callbacks.onBegin, - callbacks.onDeactivate, - callbacks.onFinalize, - callbacks.onTouchesCancel, - callbacks.onTouchesDown, - callbacks.onTouchesMove, - callbacks.onTouchesUp, - callbacks.onUpdate, - ] - ); + return useMemo(() => { + const memoized: GestureCallbacks = {}; + + if (callbacks.onBegin) { + memoized.onBegin = callbacks.onBegin; + } + if (callbacks.onActivate) { + memoized.onActivate = callbacks.onActivate; + } + if (callbacks.onDeactivate) { + memoized.onDeactivate = callbacks.onDeactivate; + } + if (callbacks.onFinalize) { + memoized.onFinalize = callbacks.onFinalize; + } + if (callbacks.onUpdate) { + memoized.onUpdate = callbacks.onUpdate; + } + if (callbacks.onTouchesDown) { + memoized.onTouchesDown = callbacks.onTouchesDown; + } + if (callbacks.onTouchesMove) { + memoized.onTouchesMove = callbacks.onTouchesMove; + } + if (callbacks.onTouchesUp) { + memoized.onTouchesUp = callbacks.onTouchesUp; + } + if (callbacks.onTouchesCancel) { + memoized.onTouchesCancel = callbacks.onTouchesCancel; + } + + return memoized; + }, [ + callbacks.onActivate, + callbacks.onBegin, + callbacks.onDeactivate, + callbacks.onFinalize, + callbacks.onTouchesCancel, + callbacks.onTouchesDown, + callbacks.onTouchesMove, + callbacks.onTouchesUp, + callbacks.onUpdate, + ]); } function getHandler( diff --git a/packages/react-native-gesture-handler/src/v3/hooks/utils/reanimatedUtils.ts b/packages/react-native-gesture-handler/src/v3/hooks/utils/reanimatedUtils.ts index 956e1b8414..30ead9484b 100644 --- a/packages/react-native-gesture-handler/src/v3/hooks/utils/reanimatedUtils.ts +++ b/packages/react-native-gesture-handler/src/v3/hooks/utils/reanimatedUtils.ts @@ -2,7 +2,6 @@ import { Reanimated } from '../../../handlers/gestures/reanimatedWrapper'; import { NativeProxy } from '../../NativeProxy'; import type { BaseGestureConfig, - GestureCallbacks, SharedValue, SharedValueOrT, } from '../../types'; @@ -101,14 +100,15 @@ export function hasWorkletEventHandlers< THandlerData, TExtendedHandlerData extends THandlerData, >(config: BaseGestureConfig) { - return Object.entries(config).some( - ([key, value]) => - HandlerCallbacks.has( - key as keyof GestureCallbacks - ) && - typeof value === 'function' && - '__workletHash' in value - ); + for (const key of HandlerCallbacks) { + const value = config[key]; + + if (typeof value === 'function' && '__workletHash' in value) { + return true; + } + } + + return false; } export function maybeUnpackValue(