From 16cd933c1f418868b709a0bd4e152b6c3a0124ec Mon Sep 17 00:00:00 2001 From: Jakub Nowakowski <61011609+sumo-slonik@users.noreply.github.com> Date: Fri, 22 Nov 2024 16:58:30 +0100 Subject: [PATCH] Fix bug in useSharedValueMock (#6742) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary The API for sharedValue has changed from using .value to get() and set() methods. As a result, the mock that previously returned an object with a single value property no longer works in the tests. ## Test plan This is a PR for the mocks, so it's not necessary for it. --------- Co-authored-by: Tomasz Żelawski --- packages/react-native-reanimated/src/mock.ts | 32 +++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) 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,