diff --git a/packages/react-native-reanimated/src/mock.ts b/packages/react-native-reanimated/src/mock.ts index 65288ac6d64..3d8e3f8a67c 100644 --- a/packages/react-native-reanimated/src/mock.ts +++ b/packages/react-native-reanimated/src/mock.ts @@ -50,7 +50,37 @@ const hook = { ): EventHandlerProcessed => NOOP, // useHandler: ADD ME IF NEEDED useWorkletCallback: ID, - useSharedValue: (init: Value) => ({ value: init }), + useSharedValue: (init: Value) => { + const value = { value: init }; + return new Proxy(value, { + get(target, prop) { + if (prop === 'value') { + return target.value; + } + if (prop === 'get') { + return () => target.value; + } + if (prop === 'set') { + return (newValue: Value | ((currentValue: Value) => Value)) => { + if (typeof newValue === 'function') { + target.value = (newValue as (currentValue: Value) => Value)( + target.value + ); + } else { + target.value = newValue; + } + }; + } + }, + set(target, prop: string, newValue) { + if (prop === 'value') { + target.value = newValue; + return true; + } + return false; + }, + }); + }, // useReducedMotion: ADD ME IF NEEDED useAnimatedStyle: IMMEDIATE_CALLBACK_INVOCATION, useAnimatedGestureHandler: NOOP_FACTORY,