Better event mapping handling in prop setter (#35775)

Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/35775

[Changelog][Internal]

Follow-up to D42344715 (f70a2f6e38).

I realized that the problem that was fixed there could have been avoided, to begin with, by crafting the corresponding macro more carefully.

This gives both more readable and less fragile code.

Reviewed By: mdvacca

Differential Revision: D42345323

fbshipit-source-id: d4b6d5a95aab360ef0aac3ecb0f157d5325271b6
This commit is contained in:
Ruslan Shestopalyuk 2023-01-05 02:59:37 -08:00 коммит произвёл Facebook GitHub Bot
Родитель e625616118
Коммит 55db1b23ff
1 изменённых файлов: 35 добавлений и 49 удалений

Просмотреть файл

@ -267,15 +267,16 @@ ViewProps::ViewProps(
#endif
{};
#define VIEW_EVENT_CASE(eventType, eventString) \
case CONSTEXPR_RAW_PROPS_KEY_HASH(eventString): { \
ViewEvents defaultViewEvents{}; \
bool res = defaultViewEvents[eventType]; \
if (value.hasValue()) { \
fromRawValue(context, value, res); \
} \
events[eventType] = res; \
return; \
#define VIEW_EVENT_CASE(eventType) \
case CONSTEXPR_RAW_PROPS_KEY_HASH("on" #eventType): { \
const auto offset = ViewEvents::Offset::eventType; \
ViewEvents defaultViewEvents{}; \
bool res = defaultViewEvents[offset]; \
if (value.hasValue()) { \
fromRawValue(context, value, res); \
} \
events[offset] = res; \
return; \
}
void ViewProps::setProp(
@ -307,46 +308,31 @@ void ViewProps::setProp(
RAW_SET_PROP_SWITCH_CASE_BASIC(collapsable, true);
RAW_SET_PROP_SWITCH_CASE_BASIC(removeClippedSubviews, false);
// events field
VIEW_EVENT_CASE(ViewEvents::Offset::PointerEnter, "onPointerEnter");
VIEW_EVENT_CASE(
ViewEvents::Offset::PointerEnterCapture, "onPointerEnterCapture");
VIEW_EVENT_CASE(ViewEvents::Offset::PointerMove, "onPointerMove");
VIEW_EVENT_CASE(
ViewEvents::Offset::PointerMoveCapture, "onPointerMoveCapture");
VIEW_EVENT_CASE(ViewEvents::Offset::PointerLeave, "onPointerLeave");
VIEW_EVENT_CASE(
ViewEvents::Offset::PointerLeaveCapture, "onPointerLeaveCapture");
VIEW_EVENT_CASE(ViewEvents::Offset::PointerOver, "onPointerOver");
VIEW_EVENT_CASE(ViewEvents::Offset::PointerOut, "onPointerOut");
VIEW_EVENT_CASE(
ViewEvents::Offset::MoveShouldSetResponder, "onMoveShouldSetResponder");
VIEW_EVENT_CASE(
ViewEvents::Offset::MoveShouldSetResponderCapture,
"onMoveShouldSetResponderCapture");
VIEW_EVENT_CASE(
ViewEvents::Offset::StartShouldSetResponder,
"onStartShouldSetResponder");
VIEW_EVENT_CASE(
ViewEvents::Offset::StartShouldSetResponderCapture,
"onStartShouldSetResponderCapture");
VIEW_EVENT_CASE(ViewEvents::Offset::ResponderGrant, "onResponderGrant");
VIEW_EVENT_CASE(ViewEvents::Offset::ResponderReject, "onResponderReject");
VIEW_EVENT_CASE(ViewEvents::Offset::ResponderStart, "onResponderStart");
VIEW_EVENT_CASE(ViewEvents::Offset::ResponderEnd, "onResponderEnd");
VIEW_EVENT_CASE(ViewEvents::Offset::ResponderRelease, "onResponderRelease");
VIEW_EVENT_CASE(ViewEvents::Offset::ResponderMove, "onResponderMove");
VIEW_EVENT_CASE(
ViewEvents::Offset::ResponderTerminate, "onResponderTerminate");
VIEW_EVENT_CASE(
ViewEvents::Offset::ResponderTerminationRequest,
"onResponderTerminationRequest");
VIEW_EVENT_CASE(
ViewEvents::Offset::ShouldBlockNativeResponder,
"onShouldBlockNativeResponder");
VIEW_EVENT_CASE(ViewEvents::Offset::TouchStart, "onTouchStart");
VIEW_EVENT_CASE(ViewEvents::Offset::TouchMove, "onTouchMove");
VIEW_EVENT_CASE(ViewEvents::Offset::TouchEnd, "onTouchEnd");
VIEW_EVENT_CASE(ViewEvents::Offset::TouchCancel, "onTouchCancel");
VIEW_EVENT_CASE(PointerEnter);
VIEW_EVENT_CASE(PointerEnterCapture);
VIEW_EVENT_CASE(PointerMove);
VIEW_EVENT_CASE(PointerMoveCapture);
VIEW_EVENT_CASE(PointerLeave);
VIEW_EVENT_CASE(PointerLeaveCapture);
VIEW_EVENT_CASE(PointerOver);
VIEW_EVENT_CASE(PointerOut);
VIEW_EVENT_CASE(MoveShouldSetResponder);
VIEW_EVENT_CASE(MoveShouldSetResponderCapture);
VIEW_EVENT_CASE(StartShouldSetResponder);
VIEW_EVENT_CASE(StartShouldSetResponderCapture);
VIEW_EVENT_CASE(ResponderGrant);
VIEW_EVENT_CASE(ResponderReject);
VIEW_EVENT_CASE(ResponderStart);
VIEW_EVENT_CASE(ResponderEnd);
VIEW_EVENT_CASE(ResponderRelease);
VIEW_EVENT_CASE(ResponderMove);
VIEW_EVENT_CASE(ResponderTerminate);
VIEW_EVENT_CASE(ResponderTerminationRequest);
VIEW_EVENT_CASE(ShouldBlockNativeResponder);
VIEW_EVENT_CASE(TouchStart);
VIEW_EVENT_CASE(TouchMove);
VIEW_EVENT_CASE(TouchEnd);
VIEW_EVENT_CASE(TouchCancel);
#ifdef ANDROID
RAW_SET_PROP_SWITCH_CASE_BASIC(elevation, {});
RAW_SET_PROP_SWITCH_CASE(nativeBackground, "nativeBackgroundAndroid", {});