mirror of
https://github.com/status-im/react-native.git
synced 2025-02-23 06:38:13 +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)
|
WeakEventDispatcher eventDispatcher)
|
||||||
: eventTarget_(std::move(eventTarget)),
|
: eventTarget_(std::move(eventTarget)),
|
||||||
weakEventTarget_({}),
|
weakEventTarget_({}),
|
||||||
tag_(tag),
|
|
||||||
eventDispatcher_(std::move(eventDispatcher)) {}
|
eventDispatcher_(std::move(eventDispatcher)) {}
|
||||||
|
|
||||||
void EventEmitter::dispatchEvent(
|
void EventEmitter::dispatchEvent(
|
||||||
@ -48,19 +47,14 @@ void EventEmitter::dispatchEvent(
|
|||||||
const folly::dynamic &payload,
|
const folly::dynamic &payload,
|
||||||
const EventPriority &priority) const {
|
const EventPriority &priority) const {
|
||||||
SystraceSection s("EventEmitter::dispatchEvent");
|
SystraceSection s("EventEmitter::dispatchEvent");
|
||||||
|
|
||||||
auto eventDispatcher = eventDispatcher_.lock();
|
auto eventDispatcher = eventDispatcher_.lock();
|
||||||
if (!eventDispatcher) {
|
if (!eventDispatcher) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mixing `target` into `payload`.
|
|
||||||
assert(payload.isObject());
|
|
||||||
folly::dynamic extendedPayload = folly::dynamic::object("target", tag_);
|
|
||||||
extendedPayload.merge_patch(payload);
|
|
||||||
|
|
||||||
eventDispatcher->dispatchEvent(
|
eventDispatcher->dispatchEvent(
|
||||||
RawEvent(normalizeEventType(type), extendedPayload, eventTarget_),
|
RawEvent(normalizeEventType(type), payload, eventTarget_), priority);
|
||||||
priority);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventEmitter::enable() const {
|
void EventEmitter::enable() const {
|
||||||
|
@ -84,7 +84,6 @@ class EventEmitter {
|
|||||||
|
|
||||||
mutable SharedEventTarget eventTarget_;
|
mutable SharedEventTarget eventTarget_;
|
||||||
mutable WeakEventTarget weakEventTarget_;
|
mutable WeakEventTarget weakEventTarget_;
|
||||||
Tag tag_;
|
|
||||||
WeakEventDispatcher eventDispatcher_;
|
WeakEventDispatcher eventDispatcher_;
|
||||||
mutable int enableCounter_{0};
|
mutable int enableCounter_{0};
|
||||||
};
|
};
|
||||||
|
@ -71,6 +71,7 @@ void UIManagerBinding::dispatchEvent(
|
|||||||
SystraceSection s("UIManagerBinding::dispatchEvent");
|
SystraceSection s("UIManagerBinding::dispatchEvent");
|
||||||
|
|
||||||
auto eventTargetValue = jsi::Value::null();
|
auto eventTargetValue = jsi::Value::null();
|
||||||
|
folly::dynamic extendedPayload;
|
||||||
|
|
||||||
if (eventTarget) {
|
if (eventTarget) {
|
||||||
auto &eventTargetWrapper =
|
auto &eventTargetWrapper =
|
||||||
@ -79,6 +80,13 @@ void UIManagerBinding::dispatchEvent(
|
|||||||
if (eventTargetValue.isUndefined()) {
|
if (eventTargetValue.isUndefined()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Mixing `target` into `payload`.
|
||||||
|
assert(payload.isObject());
|
||||||
|
extendedPayload = folly::dynamic::object("target", eventTargetWrapper.tag);
|
||||||
|
extendedPayload.merge_patch(payload);
|
||||||
|
} else {
|
||||||
|
extendedPayload = payload;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto &eventHandlerWrapper =
|
auto &eventHandlerWrapper =
|
||||||
@ -87,7 +95,7 @@ void UIManagerBinding::dispatchEvent(
|
|||||||
runtime,
|
runtime,
|
||||||
{std::move(eventTargetValue),
|
{std::move(eventTargetValue),
|
||||||
jsi::String::createFromUtf8(runtime, type),
|
jsi::String::createFromUtf8(runtime, type),
|
||||||
jsi::valueFromDynamic(runtime, payload)});
|
jsi::valueFromDynamic(runtime, extendedPayload)});
|
||||||
}
|
}
|
||||||
|
|
||||||
void UIManagerBinding::invalidate() const {
|
void UIManagerBinding::invalidate() const {
|
||||||
@ -119,7 +127,7 @@ jsi::Value UIManagerBinding::get(
|
|||||||
componentNameFromValue(runtime, arguments[1]),
|
componentNameFromValue(runtime, arguments[1]),
|
||||||
surfaceIdFromValue(runtime, arguments[2]),
|
surfaceIdFromValue(runtime, arguments[2]),
|
||||||
rawPropsFromValue(runtime, arguments[3]),
|
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 {
|
struct EventTargetWrapper : public EventTarget {
|
||||||
EventTargetWrapper(jsi::WeakObject instanceHandle)
|
EventTargetWrapper(jsi::WeakObject instanceHandle, Tag tag)
|
||||||
: instanceHandle(std::move(instanceHandle)) {}
|
: instanceHandle(std::move(instanceHandle)), tag(tag) {}
|
||||||
|
|
||||||
mutable jsi::WeakObject instanceHandle;
|
mutable jsi::WeakObject instanceHandle;
|
||||||
|
mutable Tag tag;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct EventHandlerWrapper : public EventHandler {
|
struct EventHandlerWrapper : public EventHandler {
|
||||||
@ -97,9 +98,11 @@ inline static RawProps rawPropsFromValue(
|
|||||||
|
|
||||||
inline static SharedEventTarget eventTargetFromValue(
|
inline static SharedEventTarget eventTargetFromValue(
|
||||||
jsi::Runtime &runtime,
|
jsi::Runtime &runtime,
|
||||||
const jsi::Value &value) {
|
const jsi::Value &eventTargetValue,
|
||||||
|
const jsi::Value &tagValue) {
|
||||||
return std::make_shared<EventTargetWrapper>(
|
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) {
|
inline static Tag tagFromValue(jsi::Runtime &runtime, const jsi::Value &value) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user