Skip to content

Commit 75f60a3

Browse files
zeyapfacebook-github-bot
authored andcommitted
[skip ci] Allow setting/getting event emitter listener on UIManager
Summary: ## Changelog: [General] [Added] - Allow setting/getting event emitter listener on UIManager Differential Revision: D71668401
1 parent 69951cc commit 75f60a3

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.cpp

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,19 @@ UIManager::UIManager(
5858
ReactNativeFeatureFlags::enableUIConsistency()
5959
? nullptr
6060
: std::make_unique<LatestShadowTreeRevisionProvider>(
61-
shadowTreeRegistry_)) {}
61+
shadowTreeRegistry_)) {
62+
eventEmitterListener_ = std::make_shared<EventEmitterListener>(
63+
[eventEmitterListenerContainer = &eventEmitterListenerContainer_](
64+
Tag tag,
65+
const std::string& eventName,
66+
const EventPayload& payload) -> bool {
67+
if (eventEmitterListenerContainer) {
68+
return eventEmitterListenerContainer->willDispatchEvent(
69+
tag, eventName, payload);
70+
}
71+
return false;
72+
});
73+
}
6274

6375
UIManager::~UIManager() {
6476
LOG(WARNING) << "UIManager::~UIManager() was called (address: " << this
@@ -705,4 +717,14 @@ void UIManager::setSynchronousViewUpdateCallback(
705717
synchronousViewUpdateCallback_ = std::move(callback);
706718
}
707719

720+
void UIManager::addEventEmitterListener(
721+
const std::shared_ptr<EventEmitterListener>& listener) {
722+
eventEmitterListenerContainer_.addListener(listener);
723+
}
724+
725+
void UIManager::removeEventEmitterListener(
726+
const std::shared_ptr<EventEmitterListener>& listener) {
727+
eventEmitterListenerContainer_.removeListener(listener);
728+
}
729+
708730
} // namespace facebook::react

packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,16 @@ class UIManager final : public ShadowTreeDelegate {
7070

7171
void animationTick() const;
7272

73+
void addEventEmitterListener(
74+
const std::shared_ptr<EventEmitterListener>& listener);
75+
76+
void removeEventEmitterListener(
77+
const std::shared_ptr<EventEmitterListener>& listener);
78+
79+
std::shared_ptr<EventEmitterListener> getEventEmitterListener() const {
80+
return eventEmitterListener_;
81+
}
82+
7383
/*
7484
* Provides access to a UIManagerBindging.
7585
* The `callback` methods will not be called if the internal pointer to
@@ -234,6 +244,9 @@ class UIManager final : public ShadowTreeDelegate {
234244
SharedComponentDescriptorRegistry componentDescriptorRegistry_;
235245
UIManagerDelegate* delegate_{};
236246
UIManagerAnimationDelegate* animationDelegate_{nullptr};
247+
248+
EventEmitterListenerContainer eventEmitterListenerContainer_{};
249+
std::shared_ptr<EventEmitterListener> eventEmitterListener_;
237250
const RuntimeExecutor runtimeExecutor_{};
238251
ShadowTreeRegistry shadowTreeRegistry_{};
239252
ContextContainer::Shared contextContainer_;

0 commit comments

Comments
 (0)