mirror of
https://github.com/status-im/react-native.git
synced 2025-02-22 22:28:09 +00:00
Fabric: Coupling Tag
inside TargetEventEmitter
Summary: Now instead of passing `reactTag` through the whole event pipeline, we store it inside `EventTargetWrapper` (and it does not leave `UIManagerBinding`). It helps with reducing the complexity of `EventEmitter` and will help us in migrating to JSI. Reviewed By: sahrens Differential Revision: D13123045 fbshipit-source-id: aa9ee94d5660ff3090369c1e55cf748d2e72b987
This commit is contained in:
parent
106de1201b
commit
f4da8769a3
@ -40,7 +40,6 @@ EventEmitter::EventEmitter(
|
||||
WeakEventDispatcher eventDispatcher)
|
||||
: eventTarget_(std::move(eventTarget)),
|
||||
weakEventTarget_({}),
|
||||
tag_(tag),
|
||||
eventDispatcher_(std::move(eventDispatcher)) {}
|
||||
|
||||
void EventEmitter::dispatchEvent(
|
||||
@ -48,19 +47,14 @@ void EventEmitter::dispatchEvent(
|
||||
const folly::dynamic &payload,
|
||||
const EventPriority &priority) const {
|
||||
SystraceSection s("EventEmitter::dispatchEvent");
|
||||
|
||||
auto eventDispatcher = eventDispatcher_.lock();
|
||||
if (!eventDispatcher) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Mixing `target` into `payload`.
|
||||
assert(payload.isObject());
|
||||
folly::dynamic extendedPayload = folly::dynamic::object("target", tag_);
|
||||
extendedPayload.merge_patch(payload);
|
||||
|
||||
eventDispatcher->dispatchEvent(
|
||||
RawEvent(normalizeEventType(type), extendedPayload, eventTarget_),
|
||||
priority);
|
||||
RawEvent(normalizeEventType(type), payload, eventTarget_), priority);
|
||||
}
|
||||
|
||||
void EventEmitter::enable() const {
|
||||
|
@ -84,7 +84,6 @@ class EventEmitter {
|
||||
|
||||
mutable SharedEventTarget eventTarget_;
|
||||
mutable WeakEventTarget weakEventTarget_;
|
||||
Tag tag_;
|
||||
WeakEventDispatcher eventDispatcher_;
|
||||
mutable int enableCounter_{0};
|
||||
};
|
||||
|
@ -71,6 +71,7 @@ void UIManagerBinding::dispatchEvent(
|
||||
SystraceSection s("UIManagerBinding::dispatchEvent");
|
||||
|
||||
auto eventTargetValue = jsi::Value::null();
|
||||
folly::dynamic extendedPayload;
|
||||
|
||||
if (eventTarget) {
|
||||
auto &eventTargetWrapper =
|
||||
@ -79,6 +80,13 @@ void UIManagerBinding::dispatchEvent(
|
||||
if (eventTargetValue.isUndefined()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Mixing `target` into `payload`.
|
||||
assert(payload.isObject());
|
||||
extendedPayload = folly::dynamic::object("target", eventTargetWrapper.tag);
|
||||
extendedPayload.merge_patch(payload);
|
||||
} else {
|
||||
extendedPayload = payload;
|
||||
}
|
||||
|
||||
auto &eventHandlerWrapper =
|
||||
@ -87,7 +95,7 @@ void UIManagerBinding::dispatchEvent(
|
||||
runtime,
|
||||
{std::move(eventTargetValue),
|
||||
jsi::String::createFromUtf8(runtime, type),
|
||||
jsi::valueFromDynamic(runtime, payload)});
|
||||
jsi::valueFromDynamic(runtime, extendedPayload)});
|
||||
}
|
||||
|
||||
void UIManagerBinding::invalidate() const {
|
||||
@ -119,7 +127,7 @@ jsi::Value UIManagerBinding::get(
|
||||
componentNameFromValue(runtime, arguments[1]),
|
||||
surfaceIdFromValue(runtime, arguments[2]),
|
||||
rawPropsFromValue(runtime, arguments[3]),
|
||||
eventTargetFromValue(runtime, arguments[4])));
|
||||
eventTargetFromValue(runtime, arguments[4], arguments[0])));
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -31,10 +31,11 @@ inline RawProps rawPropsFromDynamic(const folly::dynamic object) noexcept {
|
||||
}
|
||||
|
||||
struct EventTargetWrapper : public EventTarget {
|
||||
EventTargetWrapper(jsi::WeakObject instanceHandle)
|
||||
: instanceHandle(std::move(instanceHandle)) {}
|
||||
EventTargetWrapper(jsi::WeakObject instanceHandle, Tag tag)
|
||||
: instanceHandle(std::move(instanceHandle)), tag(tag) {}
|
||||
|
||||
mutable jsi::WeakObject instanceHandle;
|
||||
mutable Tag tag;
|
||||
};
|
||||
|
||||
struct EventHandlerWrapper : public EventHandler {
|
||||
@ -97,9 +98,11 @@ inline static RawProps rawPropsFromValue(
|
||||
|
||||
inline static SharedEventTarget eventTargetFromValue(
|
||||
jsi::Runtime &runtime,
|
||||
const jsi::Value &value) {
|
||||
const jsi::Value &eventTargetValue,
|
||||
const jsi::Value &tagValue) {
|
||||
return std::make_shared<EventTargetWrapper>(
|
||||
jsi::WeakObject(runtime, value.getObject(runtime)));
|
||||
jsi::WeakObject(runtime, eventTargetValue.getObject(runtime)),
|
||||
tagValue.getNumber());
|
||||
}
|
||||
|
||||
inline static Tag tagFromValue(jsi::Runtime &runtime, const jsi::Value &value) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user