diff --git a/packages/react-native/Libraries/Animated/AnimatedImplementation.js b/packages/react-native/Libraries/Animated/AnimatedImplementation.js index 7e25c65f2a461e..e516115733360b 100644 --- a/packages/react-native/Libraries/Animated/AnimatedImplementation.js +++ b/packages/react-native/Libraries/Animated/AnimatedImplementation.js @@ -378,7 +378,7 @@ const parallel = function ( } animations.forEach((animation, idx) => { - const cb = function (endResult: EndResult | {finished: boolean}) { + const cb = function (endResult: EndResult) { hasEnded[idx] = true; doneCount++; if (doneCount === animations.length) { diff --git a/packages/react-native/Libraries/Animated/NativeAnimatedModule.js b/packages/react-native/Libraries/Animated/NativeAnimatedModule.js index a080eb4d66eb0f..5094739f4fd90d 100644 --- a/packages/react-native/Libraries/Animated/NativeAnimatedModule.js +++ b/packages/react-native/Libraries/Animated/NativeAnimatedModule.js @@ -13,7 +13,7 @@ import type {TurboModule} from '../TurboModule/RCTExport'; import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry'; import shouldUseTurboAnimatedModule from './shouldUseTurboAnimatedModule'; -type EndResult = {finished: boolean, ...}; +type EndResult = {finished: boolean, value?: number, ...}; type EndCallback = (result: EndResult) => void; type SaveValueCallback = (value: number) => void; diff --git a/packages/react-native/Libraries/Animated/NativeAnimatedTurboModule.js b/packages/react-native/Libraries/Animated/NativeAnimatedTurboModule.js index f9ea5881232273..35a4ffa16bf576 100644 --- a/packages/react-native/Libraries/Animated/NativeAnimatedTurboModule.js +++ b/packages/react-native/Libraries/Animated/NativeAnimatedTurboModule.js @@ -13,7 +13,7 @@ import type {TurboModule} from '../TurboModule/RCTExport'; import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry'; import shouldUseTurboAnimatedModule from './shouldUseTurboAnimatedModule'; -type EndResult = {finished: boolean, ...}; +type EndResult = {finished: boolean, value?: number, ...}; type EndCallback = (result: EndResult) => void; type SaveValueCallback = (value: number) => void; diff --git a/packages/react-native/Libraries/Animated/animations/Animation.js b/packages/react-native/Libraries/Animated/animations/Animation.js index f3d2ac6d3ac234..d71a86b5137d7d 100644 --- a/packages/react-native/Libraries/Animated/animations/Animation.js +++ b/packages/react-native/Libraries/Animated/animations/Animation.js @@ -15,7 +15,7 @@ import type AnimatedValue from '../nodes/AnimatedValue'; import NativeAnimatedHelper from '../NativeAnimatedHelper'; -export type EndResult = {finished: boolean, ...}; +export type EndResult = {finished: boolean, value?: number, ...}; export type EndCallback = (result: EndResult) => void; export type AnimationConfig = { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedNodesManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedNodesManager.java index 4ca3aa3a180c3d..79805825767cb2 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedNodesManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedNodesManager.java @@ -302,6 +302,7 @@ private void stopAnimationsForNode(AnimatedNode animatedNode) { // Invoke animation end callback with {finished: false} WritableMap endCallbackResponse = Arguments.createMap(); endCallbackResponse.putBoolean("finished", false); + endCallbackResponse.putDouble("value", animation.mAnimatedValue.mValue); animation.mEndCallback.invoke(endCallbackResponse); } else if (mReactApplicationContext != null) { // If no callback is passed in, this /may/ be an animation set up by the single-op @@ -310,6 +311,7 @@ private void stopAnimationsForNode(AnimatedNode animatedNode) { WritableMap params = Arguments.createMap(); params.putInt("animationId", animation.mId); params.putBoolean("finished", false); + params.putDouble("value", animation.mAnimatedValue.mValue); mReactApplicationContext.emitDeviceEvent( "onNativeAnimatedModuleAnimationFinished", params); } @@ -332,6 +334,7 @@ public void stopAnimation(int animationId) { // Invoke animation end callback with {finished: false} WritableMap endCallbackResponse = Arguments.createMap(); endCallbackResponse.putBoolean("finished", false); + endCallbackResponse.putDouble("value", animation.mAnimatedValue.mValue); animation.mEndCallback.invoke(endCallbackResponse); } else if (mReactApplicationContext != null) { // If no callback is passed in, this /may/ be an animation set up by the single-op @@ -340,6 +343,7 @@ public void stopAnimation(int animationId) { WritableMap params = Arguments.createMap(); params.putInt("animationId", animation.mId); params.putBoolean("finished", false); + params.putDouble("value", animation.mAnimatedValue.mValue); mReactApplicationContext.emitDeviceEvent( "onNativeAnimatedModuleAnimationFinished", params); } @@ -645,6 +649,7 @@ public void runUpdates(long frameTimeNanos) { if (animation.mEndCallback != null) { WritableMap endCallbackResponse = Arguments.createMap(); endCallbackResponse.putBoolean("finished", true); + endCallbackResponse.putDouble("value", animation.mAnimatedValue.mValue); animation.mEndCallback.invoke(endCallbackResponse); } else if (mReactApplicationContext != null) { // If no callback is passed in, this /may/ be an animation set up by the single-op @@ -653,6 +658,7 @@ public void runUpdates(long frameTimeNanos) { WritableMap params = Arguments.createMap(); params.putInt("animationId", animation.mId); params.putBoolean("finished", true); + params.putDouble("value", animation.mAnimatedValue.mValue); mReactApplicationContext.emitDeviceEvent( "onNativeAnimatedModuleAnimationFinished", params); }