diff --git a/node_modules/react-native-reanimated/src/createAnimatedComponent/commonTypes.ts b/node_modules/react-native-reanimated/src/createAnimatedComponent/commonTypes.ts index 92ebe62..5f8207e 100644 --- a/node_modules/react-native-reanimated/src/createAnimatedComponent/commonTypes.ts +++ b/node_modules/react-native-reanimated/src/createAnimatedComponent/commonTypes.ts @@ -96,7 +96,8 @@ export interface AnimatedComponentRef extends Component { export interface IAnimatedComponentInternal { _styles: StyleProps[] | null; _animatedProps?: Partial>; - _viewTag: number; + _componentViewTag: number; + _eventViewTag: number; _isFirstRender: boolean; jestAnimatedStyle: { value: StyleProps }; _component: AnimatedComponentRef | HTMLElement | null; diff --git a/node_modules/react-native-reanimated/src/createAnimatedComponent/createAnimatedComponent.tsx b/node_modules/react-native-reanimated/src/createAnimatedComponent/createAnimatedComponent.tsx index 88b3fdf..2488ebc 100644 --- a/node_modules/react-native-reanimated/src/createAnimatedComponent/createAnimatedComponent.tsx +++ b/node_modules/react-native-reanimated/src/createAnimatedComponent/createAnimatedComponent.tsx @@ -122,7 +122,8 @@ export function createAnimatedComponent( { _styles: StyleProps[] | null = null; _animatedProps?: Partial>; - _viewTag = -1; + _componentViewTag = -1; + _eventViewTag = -1; _isFirstRender = true; jestAnimatedStyle: { value: StyleProps } = { value: {} }; _component: AnimatedComponentRef | HTMLElement | null = null; @@ -143,7 +144,8 @@ export function createAnimatedComponent( } componentDidMount() { - this._viewTag = this._getViewInfo().viewTag as number; + this._setComponentViewTag(); + this._setEventViewTag(); this._attachNativeEvents(); this._jsPropsUpdater.addOnJSPropsChangeListener(this); this._attachAnimatedStyles(); @@ -185,7 +187,10 @@ export function createAnimatedComponent( if (this.props.sharedTransitionTag) { this._configureSharedTransition(true); } - this._sharedElementTransition?.unregisterTransition(this._viewTag, true); + this._sharedElementTransition?.unregisterTransition( + this._componentViewTag, + true + ); const exiting = this.props.exiting; if ( @@ -209,7 +214,7 @@ export function createAnimatedComponent( : getReduceMotionFromConfig(); if (!reduceMotionInExiting) { updateLayoutAnimations( - this._viewTag, + this._componentViewTag, LayoutAnimationType.EXITING, maybeBuild( exiting, @@ -221,12 +226,22 @@ export function createAnimatedComponent( } } - _getEventViewRef() { - // Make sure to get the scrollable node for components that implement - // `ScrollResponder.Mixin`. - return (this._component as AnimatedComponentRef)?.getScrollableNode - ? (this._component as AnimatedComponentRef).getScrollableNode?.() - : this._component; + _setComponentViewTag() { + this._componentViewTag = this._getViewInfo().viewTag as number; + } + + _setEventViewTag() { + // Setting the tag for registering events - since the event emitting view can be nested inside the main component + const componentAnimatedRef = this._component as AnimatedComponentRef; + if (componentAnimatedRef.getScrollableNode) { + const scrollableNode = componentAnimatedRef.getScrollableNode(); + this._eventViewTag = findNodeHandle(scrollableNode) ?? -1; + } else { + this._eventViewTag = + findNodeHandle( + options?.setNativeProps ? this : componentAnimatedRef + ) ?? -1; + } } _attachNativeEvents() { @@ -236,7 +251,7 @@ export function createAnimatedComponent( has('workletEventHandler', prop) && prop.workletEventHandler instanceof WorkletEventHandler ) { - prop.workletEventHandler.registerForEvents(this._viewTag, key); + prop.workletEventHandler.registerForEvents(this._eventViewTag, key); } } } @@ -248,7 +263,7 @@ export function createAnimatedComponent( has('workletEventHandler', prop) && prop.workletEventHandler instanceof WorkletEventHandler ) { - prop.workletEventHandler.unregisterFromEvents(this._viewTag); + prop.workletEventHandler.unregisterFromEvents(this._eventViewTag); } } } @@ -258,15 +273,17 @@ export function createAnimatedComponent( for (const style of this._styles) { style.viewsRef.remove(this); } - } else if (this._viewTag !== -1 && this._styles !== null) { + } else if (this._componentViewTag !== -1 && this._styles !== null) { for (const style of this._styles) { - style.viewDescriptors.remove(this._viewTag); + style.viewDescriptors.remove(this._componentViewTag); } if (this.props.animatedProps?.viewDescriptors) { - this.props.animatedProps.viewDescriptors.remove(this._viewTag); + this.props.animatedProps.viewDescriptors.remove( + this._componentViewTag + ); } if (isFabric()) { - removeFromPropsRegistry(this._viewTag); + removeFromPropsRegistry(this._componentViewTag); } } } @@ -283,15 +300,19 @@ export function createAnimatedComponent( const newProp = this.props[key]; if (!newProp) { // Prop got deleted - prevProp.workletEventHandler.unregisterFromEvents(this._viewTag); + prevProp.workletEventHandler.unregisterFromEvents( + this._eventViewTag + ); } else if ( has('workletEventHandler', newProp) && newProp.workletEventHandler instanceof WorkletEventHandler && newProp.workletEventHandler !== prevProp.workletEventHandler ) { // Prop got changed - prevProp.workletEventHandler.unregisterFromEvents(this._viewTag); - newProp.workletEventHandler.registerForEvents(this._viewTag); + prevProp.workletEventHandler.unregisterFromEvents( + this._eventViewTag + ); + newProp.workletEventHandler.registerForEvents(this._eventViewTag); } } } @@ -304,7 +325,7 @@ export function createAnimatedComponent( !prevProps[key] ) { // Prop got added - newProp.workletEventHandler.registerForEvents(this._viewTag); + newProp.workletEventHandler.registerForEvents(this._eventViewTag); } } } @@ -381,7 +402,7 @@ export function createAnimatedComponent( adaptViewConfig(viewConfig); } - this._viewTag = viewTag as number; + this._componentViewTag = viewTag as number; // remove old styles if (prevStyles) { @@ -487,7 +508,11 @@ export function createAnimatedComponent( AnimatedComponent.displayName ) : undefined; - updateLayoutAnimations(this._viewTag, LayoutAnimationType.LAYOUT, layout); + updateLayoutAnimations( + this._componentViewTag, + LayoutAnimationType.LAYOUT, + layout + ); } _configureSharedTransition(isUnmounting = false) { @@ -497,7 +522,7 @@ export function createAnimatedComponent( const { sharedTransitionTag } = this.props; if (!sharedTransitionTag) { this._sharedElementTransition?.unregisterTransition( - this._viewTag, + this._componentViewTag, isUnmounting ); this._sharedElementTransition = null; @@ -508,7 +533,7 @@ export function createAnimatedComponent( this._sharedElementTransition ?? new SharedTransition(); sharedElementTransition.registerTransition( - this._viewTag, + this._componentViewTag, sharedTransitionTag, isUnmounting ); @@ -527,7 +552,7 @@ export function createAnimatedComponent( ? (ref as HTMLElement) : findNodeHandle(ref as Component); - this._viewTag = tag as number; + this._componentViewTag = tag as number; const { layout, entering, exiting, sharedTransitionTag } = this.props; if (