diff --git a/packages/react-native/ReactCommon/react/nativemodule/intersectionobserver/NativeIntersectionObserver.cpp b/packages/react-native/ReactCommon/react/nativemodule/intersectionobserver/NativeIntersectionObserver.cpp index ab948bf017f2f5..91b441e4b5ed4a 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/intersectionobserver/NativeIntersectionObserver.cpp +++ b/packages/react-native/ReactCommon/react/nativemodule/intersectionobserver/NativeIntersectionObserver.cpp @@ -37,7 +37,7 @@ void NativeIntersectionObserver::observe( intersectionObserverManager_.observe( intersectionObserverId, - shadowNode, + shadowNode->getFamilyShared(), thresholds, rootThresholds, uiManager); @@ -48,7 +48,8 @@ void NativeIntersectionObserver::unobserve( IntersectionObserverObserverId intersectionObserverId, jsi::Object targetShadowNode) { auto shadowNode = shadowNodeFromValue(runtime, std::move(targetShadowNode)); - intersectionObserverManager_.unobserve(intersectionObserverId, *shadowNode); + intersectionObserverManager_.unobserve( + intersectionObserverId, shadowNode->getFamilyShared()); } void NativeIntersectionObserver::connect( diff --git a/packages/react-native/ReactCommon/react/renderer/observers/intersection/IntersectionObserverManager.cpp b/packages/react-native/ReactCommon/react/renderer/observers/intersection/IntersectionObserverManager.cpp index 04058e668ca597..e2ac61ae1d2de8 100644 --- a/packages/react-native/ReactCommon/react/renderer/observers/intersection/IntersectionObserverManager.cpp +++ b/packages/react-native/ReactCommon/react/renderer/observers/intersection/IntersectionObserverManager.cpp @@ -17,14 +17,13 @@ IntersectionObserverManager::IntersectionObserverManager() = default; void IntersectionObserverManager::observe( IntersectionObserverObserverId intersectionObserverId, - const ShadowNode::Shared& shadowNode, + const ShadowNodeFamily::Shared& shadowNodeFamily, std::vector thresholds, std::optional> rootThresholds, const UIManager& uiManager) { TraceSection s("IntersectionObserverManager::observe"); - auto surfaceId = shadowNode->getSurfaceId(); - auto shadowNodeFamily = shadowNode->getFamilyShared(); + auto surfaceId = shadowNodeFamily->getSurfaceId(); // The actual observer lives in the array, so we need to create it there and // then get a reference. Otherwise we only update its state in a copy. @@ -78,15 +77,13 @@ void IntersectionObserverManager::observe( void IntersectionObserverManager::unobserve( IntersectionObserverObserverId intersectionObserverId, - const ShadowNode& shadowNode) { + const ShadowNodeFamily::Shared& shadowNodeFamily) { TraceSection s("IntersectionObserverManager::unobserve"); - auto& shadowNodeFamily = shadowNode.getFamily(); - { std::unique_lock lock(observersMutex_); - auto surfaceId = shadowNode.getSurfaceId(); + auto surfaceId = shadowNodeFamily->getSurfaceId(); auto observersIt = observersBySurfaceId_.find(surfaceId); if (observersIt == observersBySurfaceId_.end()) { @@ -102,7 +99,7 @@ void IntersectionObserverManager::unobserve( [intersectionObserverId, &shadowNodeFamily](const auto& observer) { return observer.getIntersectionObserverId() == intersectionObserverId && - observer.isTargetShadowNodeFamily(shadowNodeFamily); + observer.isTargetShadowNodeFamily(*shadowNodeFamily); }), observers.end()); @@ -120,7 +117,7 @@ void IntersectionObserverManager::unobserve( pendingEntries_.end(), [intersectionObserverId, &shadowNodeFamily](const auto& entry) { return entry.intersectionObserverId == intersectionObserverId && - entry.sameShadowNodeFamily(shadowNodeFamily); + entry.sameShadowNodeFamily(*shadowNodeFamily); }), pendingEntries_.end()); } diff --git a/packages/react-native/ReactCommon/react/renderer/observers/intersection/IntersectionObserverManager.h b/packages/react-native/ReactCommon/react/renderer/observers/intersection/IntersectionObserverManager.h index 93ae10dd1b2ab0..af65a599203420 100644 --- a/packages/react-native/ReactCommon/react/renderer/observers/intersection/IntersectionObserverManager.h +++ b/packages/react-native/ReactCommon/react/renderer/observers/intersection/IntersectionObserverManager.h @@ -22,14 +22,14 @@ class IntersectionObserverManager final : public UIManagerMountHook { void observe( IntersectionObserverObserverId intersectionObserverId, - const ShadowNode::Shared& shadowNode, + const ShadowNodeFamily::Shared& shadowNode, std::vector thresholds, std::optional> rootThresholds, const UIManager& uiManager); void unobserve( IntersectionObserverObserverId intersectionObserverId, - const ShadowNode& shadowNode); + const ShadowNodeFamily::Shared& shadowNode); void connect( UIManager& uiManager,