Skip to content

Commit 174ef37

Browse files
Bartlomiej Bloniarzfacebook-github-bot
authored andcommitted
Pass families to Native Animated (#54613)
Summary: This PR allows C++ Native Animated to use `ShadowNodeFamily` instances to use the `cloneMultiple` method when pushing updates through the `ShadowTree` in `AnimationBackend` # Changelog [General] [Added] - Add `connectAnimatedNodeToShadowNodeFamily` method to `NativeAnimatedModule` and `NativeAnimatedTurboModule` Differential Revision: D84055752
1 parent adc0934 commit 174ef37

File tree

14 files changed

+218
-170
lines changed

14 files changed

+218
-170
lines changed

packages/react-native/Libraries/Animated/__tests__/AnimatedBackend-itest.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import ensureInstance from '../../../src/private/__tests__/utilities/ensureInsta
1717
import * as Fantom from '@react-native/fantom';
1818
import {createRef} from 'react';
1919
import {Animated, useAnimatedValue} from 'react-native';
20+
import {allowStyleProp} from 'react-native/Libraries/Animated/NativeAnimatedAllowlist';
2021
import ReactNativeElement from 'react-native/src/private/webapis/dom/nodes/ReactNativeElement';
2122

2223
test('animated opacity', () => {
@@ -73,3 +74,56 @@ test('animated opacity', () => {
7374
<rn-view opacity="0" />,
7475
);
7576
});
77+
78+
test('animate layout props', () => {
79+
const viewRef = createRef<HostInstance>();
80+
allowStyleProp('height');
81+
82+
let _animatedHeight;
83+
let _heightAnimation;
84+
85+
function MyApp() {
86+
const animatedHeight = useAnimatedValue(0);
87+
_animatedHeight = animatedHeight;
88+
return (
89+
<Animated.View
90+
ref={viewRef}
91+
style={[
92+
{
93+
width: 100,
94+
height: animatedHeight,
95+
},
96+
]}
97+
/>
98+
);
99+
}
100+
101+
const root = Fantom.createRoot();
102+
103+
Fantom.runTask(() => {
104+
root.render(<MyApp />);
105+
});
106+
107+
const viewElement = ensureInstance(viewRef.current, ReactNativeElement);
108+
109+
Fantom.runTask(() => {
110+
_heightAnimation = Animated.timing(_animatedHeight, {
111+
toValue: 100,
112+
duration: 10,
113+
useNativeDriver: true,
114+
}).start();
115+
});
116+
117+
Fantom.unstable_produceFramesForDuration(10);
118+
119+
// TODO: this shouldn't be neccessary since animation should be stopped after duration
120+
Fantom.runTask(() => {
121+
_heightAnimation?.stop();
122+
});
123+
124+
// TODO: getFabricUpdateProps is not working with the cloneMutliple method
125+
// expect(Fantom.unstable_getFabricUpdateProps(viewElement).height).toBe(100);
126+
expect(root.getRenderedOutput({props: ['height']}).toJSX()).toEqual(
127+
<rn-view height="100.000000" />,
128+
);
129+
});

packages/react-native/Libraries/Animated/nodes/AnimatedProps.js

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import type {AnimatedStyleAllowlist} from './AnimatedStyle';
1515

1616
import NativeAnimatedHelper from '../../../src/private/animated/NativeAnimatedHelper';
1717
import {findNodeHandle} from '../../ReactNative/RendererProxy';
18+
import {getNodeFromPublicInstance} from '../../ReactPrivate/ReactNativePrivateInterface';
1819
import flattenStyle from '../../StyleSheet/flattenStyle';
1920
import {AnimatedEvent} from '../AnimatedEvent';
2021
import AnimatedNode from './AnimatedNode';
@@ -251,7 +252,9 @@ export default class AnimatedProps extends AnimatedNode {
251252
super.__setPlatformConfig(platformConfig);
252253

253254
if (this._target != null) {
254-
this.#connectAnimatedView(this._target);
255+
const target = this._target;
256+
this.#connectAnimatedView(target);
257+
this.#connectShadowNode(target);
255258
}
256259
}
257260
}
@@ -260,9 +263,10 @@ export default class AnimatedProps extends AnimatedNode {
260263
if (this._target?.instance === instance) {
261264
return;
262265
}
263-
this._target = {instance, connectedViewTag: null};
266+
const target = (this._target = {instance, connectedViewTag: null});
264267
if (this.__isNative) {
265-
this.#connectAnimatedView(this._target);
268+
this.#connectAnimatedView(target);
269+
this.#connectShadowNode(target);
266270
}
267271
}
268272

@@ -283,6 +287,19 @@ export default class AnimatedProps extends AnimatedNode {
283287
target.connectedViewTag = viewTag;
284288
}
285289

290+
#connectShadowNode(target: TargetView): void {
291+
invariant(this.__isNative, 'Expected node to be marked as "native"');
292+
// $FlowExpectedError[incompatible-type] - target.instance may be an HTMLElement but we need ReactNativeElement for Fabric
293+
const shadowNode = getNodeFromPublicInstance(target.instance);
294+
if (shadowNode == null) {
295+
return;
296+
}
297+
NativeAnimatedHelper.API.connectAnimatedNodeToShadowNodeFamily(
298+
this.__getNativeTag(),
299+
shadowNode,
300+
);
301+
}
302+
286303
#disconnectAnimatedView(target: TargetView): void {
287304
invariant(this.__isNative, 'Expected node to be marked as "native"');
288305
const viewTag = target.connectedViewTag;

packages/react-native/Libraries/Animated/shouldUseTurboAnimatedModule.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ function shouldUseTurboAnimatedModule(): boolean {
1515
if (ReactNativeFeatureFlags.cxxNativeAnimatedEnabled()) {
1616
return false;
1717
} else {
18-
return Platform.OS === 'ios' && global.RN$Bridgeless === true;
18+
return Platform.OS === 'ios';
1919
}
2020
}
2121

packages/react-native/Libraries/NativeAnimation/RCTNativeAnimatedTurboModule.mm

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,8 @@ - (void)setSurfacePresenter:(id<RCTSurfacePresenterStub>)surfacePresenter
165165
}];
166166
}
167167

168+
RCT_EXPORT_METHOD(connectAnimatedNodeToShadowNodeFamily : (double)nodeTag shadowNode : (NSDictionary *)shadowNode) {}
169+
168170
RCT_EXPORT_METHOD(disconnectAnimatedNodeFromView : (double)nodeTag viewTag : (double)viewTag)
169171
{
170172
[self queueOperationBlock:^(RCTNativeAnimatedNodesManager *nodesManager) {

packages/react-native/ReactAndroid/api/ReactAndroid.api

Lines changed: 1 addition & 158 deletions
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,7 @@ public final class com/facebook/react/animated/NativeAnimatedModule : com/facebo
457457
public fun <init> (Lcom/facebook/react/bridge/ReactApplicationContext;)V
458458
public fun addAnimatedEventToView (DLjava/lang/String;Lcom/facebook/react/bridge/ReadableMap;)V
459459
public fun addListener (Ljava/lang/String;)V
460+
public fun connectAnimatedNodeToShadowNodeFamily (DLcom/facebook/react/bridge/ReadableMap;)V
460461
public fun connectAnimatedNodeToView (DD)V
461462
public fun connectAnimatedNodes (DD)V
462463
public fun createAnimatedNode (DLcom/facebook/react/bridge/ReadableMap;)V
@@ -5129,164 +5130,6 @@ public final class com/facebook/react/util/RNLog {
51295130
public static final fun w (Lcom/facebook/react/bridge/ReactContext;Ljava/lang/String;)V
51305131
}
51315132

5132-
public class com/facebook/react/viewmanagers/ActivityIndicatorViewManagerDelegate : com/facebook/react/uimanager/BaseViewManagerDelegate {
5133-
public fun <init> (Lcom/facebook/react/uimanager/BaseViewManager;)V
5134-
public fun setProperty (Landroid/view/View;Ljava/lang/String;Ljava/lang/Object;)V
5135-
}
5136-
5137-
public abstract interface class com/facebook/react/viewmanagers/ActivityIndicatorViewManagerInterface : com/facebook/react/uimanager/ViewManagerWithGeneratedInterface {
5138-
public abstract fun setAnimating (Landroid/view/View;Z)V
5139-
public abstract fun setColor (Landroid/view/View;Ljava/lang/Integer;)V
5140-
public abstract fun setHidesWhenStopped (Landroid/view/View;Z)V
5141-
public abstract fun setSize (Landroid/view/View;Ljava/lang/String;)V
5142-
}
5143-
5144-
public class com/facebook/react/viewmanagers/AndroidDrawerLayoutManagerDelegate : com/facebook/react/uimanager/BaseViewManagerDelegate {
5145-
public fun <init> (Lcom/facebook/react/uimanager/BaseViewManager;)V
5146-
public fun receiveCommand (Landroid/view/View;Ljava/lang/String;Lcom/facebook/react/bridge/ReadableArray;)V
5147-
public fun setProperty (Landroid/view/View;Ljava/lang/String;Ljava/lang/Object;)V
5148-
}
5149-
5150-
public abstract interface class com/facebook/react/viewmanagers/AndroidDrawerLayoutManagerInterface : com/facebook/react/uimanager/ViewManagerWithGeneratedInterface {
5151-
public abstract fun closeDrawer (Landroid/view/View;)V
5152-
public abstract fun openDrawer (Landroid/view/View;)V
5153-
public abstract fun setDrawerBackgroundColor (Landroid/view/View;Ljava/lang/Integer;)V
5154-
public abstract fun setDrawerLockMode (Landroid/view/View;Ljava/lang/String;)V
5155-
public abstract fun setDrawerPosition (Landroid/view/View;Ljava/lang/String;)V
5156-
public abstract fun setDrawerWidth (Landroid/view/View;Ljava/lang/Float;)V
5157-
public abstract fun setKeyboardDismissMode (Landroid/view/View;Ljava/lang/String;)V
5158-
public abstract fun setStatusBarBackgroundColor (Landroid/view/View;Ljava/lang/Integer;)V
5159-
}
5160-
5161-
public class com/facebook/react/viewmanagers/AndroidHorizontalScrollContentViewManagerDelegate : com/facebook/react/uimanager/BaseViewManagerDelegate {
5162-
public fun <init> (Lcom/facebook/react/uimanager/BaseViewManager;)V
5163-
public fun setProperty (Landroid/view/View;Ljava/lang/String;Ljava/lang/Object;)V
5164-
}
5165-
5166-
public abstract interface class com/facebook/react/viewmanagers/AndroidHorizontalScrollContentViewManagerInterface : com/facebook/react/uimanager/ViewManagerWithGeneratedInterface {
5167-
public abstract fun setRemoveClippedSubviews (Landroid/view/View;Z)V
5168-
}
5169-
5170-
public class com/facebook/react/viewmanagers/AndroidProgressBarManagerDelegate : com/facebook/react/uimanager/BaseViewManagerDelegate {
5171-
public fun <init> (Lcom/facebook/react/uimanager/BaseViewManager;)V
5172-
public fun setProperty (Landroid/view/View;Ljava/lang/String;Ljava/lang/Object;)V
5173-
}
5174-
5175-
public abstract interface class com/facebook/react/viewmanagers/AndroidProgressBarManagerInterface : com/facebook/react/uimanager/ViewManagerWithGeneratedInterface {
5176-
public abstract fun setAnimating (Landroid/view/View;Z)V
5177-
public abstract fun setColor (Landroid/view/View;Ljava/lang/Integer;)V
5178-
public abstract fun setIndeterminate (Landroid/view/View;Z)V
5179-
public abstract fun setProgress (Landroid/view/View;D)V
5180-
public abstract fun setStyleAttr (Landroid/view/View;Ljava/lang/String;)V
5181-
public abstract fun setTestID (Landroid/view/View;Ljava/lang/String;)V
5182-
public abstract fun setTypeAttr (Landroid/view/View;Ljava/lang/String;)V
5183-
}
5184-
5185-
public class com/facebook/react/viewmanagers/AndroidSwipeRefreshLayoutManagerDelegate : com/facebook/react/uimanager/BaseViewManagerDelegate {
5186-
public fun <init> (Lcom/facebook/react/uimanager/BaseViewManager;)V
5187-
public fun receiveCommand (Landroid/view/View;Ljava/lang/String;Lcom/facebook/react/bridge/ReadableArray;)V
5188-
public fun setProperty (Landroid/view/View;Ljava/lang/String;Ljava/lang/Object;)V
5189-
}
5190-
5191-
public abstract interface class com/facebook/react/viewmanagers/AndroidSwipeRefreshLayoutManagerInterface : com/facebook/react/uimanager/ViewManagerWithGeneratedInterface {
5192-
public abstract fun setColors (Landroid/view/View;Lcom/facebook/react/bridge/ReadableArray;)V
5193-
public abstract fun setEnabled (Landroid/view/View;Z)V
5194-
public abstract fun setNativeRefreshing (Landroid/view/View;Z)V
5195-
public abstract fun setProgressBackgroundColor (Landroid/view/View;Ljava/lang/Integer;)V
5196-
public abstract fun setProgressViewOffset (Landroid/view/View;F)V
5197-
public abstract fun setRefreshing (Landroid/view/View;Z)V
5198-
public abstract fun setSize (Landroid/view/View;Ljava/lang/String;)V
5199-
}
5200-
5201-
public class com/facebook/react/viewmanagers/AndroidSwitchManagerDelegate : com/facebook/react/uimanager/BaseViewManagerDelegate {
5202-
public fun <init> (Lcom/facebook/react/uimanager/BaseViewManager;)V
5203-
public fun receiveCommand (Landroid/view/View;Ljava/lang/String;Lcom/facebook/react/bridge/ReadableArray;)V
5204-
public fun setProperty (Landroid/view/View;Ljava/lang/String;Ljava/lang/Object;)V
5205-
}
5206-
5207-
public abstract interface class com/facebook/react/viewmanagers/AndroidSwitchManagerInterface : com/facebook/react/uimanager/ViewManagerWithGeneratedInterface {
5208-
public abstract fun setDisabled (Landroid/view/View;Z)V
5209-
public abstract fun setEnabled (Landroid/view/View;Z)V
5210-
public abstract fun setNativeValue (Landroid/view/View;Z)V
5211-
public abstract fun setOn (Landroid/view/View;Z)V
5212-
public abstract fun setThumbColor (Landroid/view/View;Ljava/lang/Integer;)V
5213-
public abstract fun setThumbTintColor (Landroid/view/View;Ljava/lang/Integer;)V
5214-
public abstract fun setTrackColorForFalse (Landroid/view/View;Ljava/lang/Integer;)V
5215-
public abstract fun setTrackColorForTrue (Landroid/view/View;Ljava/lang/Integer;)V
5216-
public abstract fun setTrackTintColor (Landroid/view/View;Ljava/lang/Integer;)V
5217-
public abstract fun setValue (Landroid/view/View;Z)V
5218-
}
5219-
5220-
public class com/facebook/react/viewmanagers/DebuggingOverlayManagerDelegate : com/facebook/react/uimanager/BaseViewManagerDelegate {
5221-
public fun <init> (Lcom/facebook/react/uimanager/BaseViewManager;)V
5222-
public fun receiveCommand (Landroid/view/View;Ljava/lang/String;Lcom/facebook/react/bridge/ReadableArray;)V
5223-
public fun setProperty (Landroid/view/View;Ljava/lang/String;Ljava/lang/Object;)V
5224-
}
5225-
5226-
public abstract interface class com/facebook/react/viewmanagers/DebuggingOverlayManagerInterface : com/facebook/react/uimanager/ViewManagerWithGeneratedInterface {
5227-
public abstract fun clearElementsHighlights (Landroid/view/View;)V
5228-
public abstract fun highlightElements (Landroid/view/View;Lcom/facebook/react/bridge/ReadableArray;)V
5229-
public abstract fun highlightTraceUpdates (Landroid/view/View;Lcom/facebook/react/bridge/ReadableArray;)V
5230-
}
5231-
5232-
public class com/facebook/react/viewmanagers/ModalHostViewManagerDelegate : com/facebook/react/uimanager/BaseViewManagerDelegate {
5233-
public fun <init> (Lcom/facebook/react/uimanager/BaseViewManager;)V
5234-
public fun setProperty (Landroid/view/View;Ljava/lang/String;Ljava/lang/Object;)V
5235-
}
5236-
5237-
public abstract interface class com/facebook/react/viewmanagers/ModalHostViewManagerInterface : com/facebook/react/uimanager/ViewManagerWithGeneratedInterface {
5238-
public abstract fun setAllowSwipeDismissal (Landroid/view/View;Z)V
5239-
public abstract fun setAnimated (Landroid/view/View;Z)V
5240-
public abstract fun setAnimationType (Landroid/view/View;Ljava/lang/String;)V
5241-
public abstract fun setHardwareAccelerated (Landroid/view/View;Z)V
5242-
public abstract fun setIdentifier (Landroid/view/View;I)V
5243-
public abstract fun setNavigationBarTranslucent (Landroid/view/View;Z)V
5244-
public abstract fun setPresentationStyle (Landroid/view/View;Ljava/lang/String;)V
5245-
public abstract fun setStatusBarTranslucent (Landroid/view/View;Z)V
5246-
public abstract fun setSupportedOrientations (Landroid/view/View;Lcom/facebook/react/bridge/ReadableArray;)V
5247-
public abstract fun setTransparent (Landroid/view/View;Z)V
5248-
public abstract fun setVisible (Landroid/view/View;Z)V
5249-
}
5250-
5251-
public class com/facebook/react/viewmanagers/SafeAreaViewManagerDelegate : com/facebook/react/uimanager/BaseViewManagerDelegate {
5252-
public fun <init> (Lcom/facebook/react/uimanager/BaseViewManager;)V
5253-
public fun setProperty (Landroid/view/View;Ljava/lang/String;Ljava/lang/Object;)V
5254-
}
5255-
5256-
public abstract interface class com/facebook/react/viewmanagers/SafeAreaViewManagerInterface : com/facebook/react/uimanager/ViewManagerWithGeneratedInterface {
5257-
}
5258-
5259-
public class com/facebook/react/viewmanagers/UnimplementedNativeViewManagerDelegate : com/facebook/react/uimanager/BaseViewManagerDelegate {
5260-
public fun <init> (Lcom/facebook/react/uimanager/BaseViewManager;)V
5261-
public fun setProperty (Landroid/view/View;Ljava/lang/String;Ljava/lang/Object;)V
5262-
}
5263-
5264-
public abstract interface class com/facebook/react/viewmanagers/UnimplementedNativeViewManagerInterface : com/facebook/react/uimanager/ViewManagerWithGeneratedInterface {
5265-
public abstract fun setName (Landroid/view/View;Ljava/lang/String;)V
5266-
}
5267-
5268-
public class com/facebook/react/viewmanagers/VirtualViewExperimentalManagerDelegate : com/facebook/react/uimanager/BaseViewManagerDelegate {
5269-
public fun <init> (Lcom/facebook/react/uimanager/BaseViewManager;)V
5270-
public fun setProperty (Landroid/view/View;Ljava/lang/String;Ljava/lang/Object;)V
5271-
}
5272-
5273-
public abstract interface class com/facebook/react/viewmanagers/VirtualViewExperimentalManagerInterface : com/facebook/react/uimanager/ViewManagerWithGeneratedInterface {
5274-
public abstract fun setInitialHidden (Landroid/view/View;Z)V
5275-
public abstract fun setRemoveClippedSubviews (Landroid/view/View;Z)V
5276-
public abstract fun setRenderState (Landroid/view/View;I)V
5277-
}
5278-
5279-
public class com/facebook/react/viewmanagers/VirtualViewManagerDelegate : com/facebook/react/uimanager/BaseViewManagerDelegate {
5280-
public fun <init> (Lcom/facebook/react/uimanager/BaseViewManager;)V
5281-
public fun setProperty (Landroid/view/View;Ljava/lang/String;Ljava/lang/Object;)V
5282-
}
5283-
5284-
public abstract interface class com/facebook/react/viewmanagers/VirtualViewManagerInterface : com/facebook/react/uimanager/ViewManagerWithGeneratedInterface {
5285-
public abstract fun setInitialHidden (Landroid/view/View;Z)V
5286-
public abstract fun setRemoveClippedSubviews (Landroid/view/View;Z)V
5287-
public abstract fun setRenderState (Landroid/view/View;I)V
5288-
}
5289-
52905133
public final class com/facebook/react/views/drawer/ReactDrawerLayout : androidx/drawerlayout/widget/DrawerLayout {
52915134
public fun <init> (Lcom/facebook/react/bridge/ReactContext;)V
52925135
public fun onInterceptTouchEvent (Landroid/view/MotionEvent;)Z

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1117,4 +1117,6 @@ public class NativeAnimatedModule(reactContext: ReactApplicationContext) :
11171117

11181118
public const val ANIMATED_MODULE_DEBUG: Boolean = false
11191119
}
1120+
1121+
override fun connectAnimatedNodeToShadowNodeFamily(p0: Double, p1: ReadableMap) {}
11201122
}

packages/react-native/ReactCommon/react/renderer/animated/AnimatedModule.cpp

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99

1010
#include <glog/logging.h>
1111
#include <jsi/JSIDynamic.h>
12+
#include <react/renderer/bridging/bridging.h>
1213

1314
namespace facebook::react {
14-
1515
AnimatedModule::AnimatedModule(
1616
std::shared_ptr<CallInvoker> jsInvoker,
1717
std::shared_ptr<NativeAnimatedNodesManagerProvider> nodesManagerProvider)
@@ -160,6 +160,19 @@ void AnimatedModule::connectAnimatedNodeToView(
160160
ConnectAnimatedNodeToViewOp{.nodeTag = nodeTag, .viewTag = viewTag});
161161
}
162162

163+
void AnimatedModule::connectAnimatedNodeToShadowNodeFamily(
164+
jsi::Runtime& rt,
165+
Tag nodeTag,
166+
jsi::Object shadowNodeObj) {
167+
const auto& shadowNode = Bridging<std::shared_ptr<const ShadowNode>>::fromJs(
168+
rt, jsi::Value(rt, shadowNodeObj));
169+
170+
operations_.emplace_back(
171+
ConnectAnimatedNodeToShadowNodeFamilyOp{
172+
.nodeTag = nodeTag,
173+
.shadowNodeFamily = shadowNode->getFamilyShared()});
174+
}
175+
163176
void AnimatedModule::disconnectAnimatedNodeFromView(
164177
jsi::Runtime& /*rt*/,
165178
Tag nodeTag,
@@ -282,6 +295,11 @@ void AnimatedModule::executeOperation(
282295
DisconnectAnimatedNodeFromViewOp>) {
283296
nodesManager->disconnectAnimatedNodeFromView(
284297
op.nodeTag, op.viewTag);
298+
} else if constexpr (std::is_same_v<
299+
T,
300+
ConnectAnimatedNodeToShadowNodeFamilyOp>) {
301+
nodesManager->connectAnimatedNodeToShadowNodeFamily(
302+
op.nodeTag, op.shadowNodeFamily);
285303
} else if constexpr (std::is_same_v<T, RestoreDefaultValuesOp>) {
286304
nodesManager->restoreDefaultValues(op.nodeTag);
287305
} else if constexpr (std::is_same_v<T, DropAnimatedNodeOp>) {

packages/react-native/ReactCommon/react/renderer/animated/AnimatedModule.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,11 @@ class AnimatedModule : public NativeAnimatedModuleCxxSpec<AnimatedModule>, publi
8787
Tag viewTag{};
8888
};
8989

90+
struct ConnectAnimatedNodeToShadowNodeFamilyOp {
91+
Tag nodeTag{};
92+
std::shared_ptr<const ShadowNodeFamily> shadowNodeFamily{};
93+
};
94+
9095
struct DisconnectAnimatedNodeFromViewOp {
9196
Tag nodeTag{};
9297
Tag viewTag{};
@@ -124,6 +129,7 @@ class AnimatedModule : public NativeAnimatedModuleCxxSpec<AnimatedModule>, publi
124129
SetAnimatedNodeOffsetOp,
125130
SetAnimatedNodeValueOp,
126131
ConnectAnimatedNodeToViewOp,
132+
ConnectAnimatedNodeToShadowNodeFamilyOp,
127133
DisconnectAnimatedNodeFromViewOp,
128134
RestoreDefaultValuesOp,
129135
FlattenAnimatedNodeOffsetOp,
@@ -176,6 +182,8 @@ class AnimatedModule : public NativeAnimatedModuleCxxSpec<AnimatedModule>, publi
176182

177183
void connectAnimatedNodeToView(jsi::Runtime &rt, Tag nodeTag, Tag viewTag);
178184

185+
void connectAnimatedNodeToShadowNodeFamily(jsi::Runtime &rt, Tag nodeTag, jsi::Object shadowNode);
186+
179187
void disconnectAnimatedNodeFromView(jsi::Runtime &rt, Tag nodeTag, Tag viewTag);
180188

181189
void restoreDefaultValues(jsi::Runtime &rt, Tag nodeTag);

0 commit comments

Comments
 (0)