diff --git a/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm b/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm index 086bfc1e18bdf9..23ab6549b2a89f 100644 --- a/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +++ b/packages/react-native/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm @@ -588,6 +588,17 @@ - (void)updateProps:(const Props::Shared &)props oldProps:(const Props::Shared & needsInvalidateLayer = YES; } +#if TARGET_OS_OSX // [macOS] + // `tooltip` + if (oldViewProps.tooltip != newViewProps.tooltip) { + if (newViewProps.tooltip.has_value()) { + self.toolTip = RCTNSStringFromStringNilIfEmpty(newViewProps.tooltip.value()); + } else { + self.toolTip = nil; + } + } +#endif // macOS] + _needsInvalidateLayer = _needsInvalidateLayer || needsInvalidateLayer; _props = std::static_pointer_cast(props); diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/platform/macos/react/renderer/components/view/HostPlatformViewProps.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/platform/macos/react/renderer/components/view/HostPlatformViewProps.cpp index 4dc677333b23f9..8b4d4a6bb5097a 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/platform/macos/react/renderer/components/view/HostPlatformViewProps.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/view/platform/macos/react/renderer/components/view/HostPlatformViewProps.cpp @@ -65,7 +65,16 @@ HostPlatformViewProps::HostPlatformViewProps( rawProps, "keyUpEvents", sourceProps.keyUpEvents, - {})) {} + {})), + tooltip( + ReactNativeFeatureFlags::enableCppPropsIteratorSetter() + ? sourceProps.tooltip + : convertRawProp( + context, + rawProps, + "tooltip", + sourceProps.tooltip, + {})) {} #define VIEW_EVENT_CASE_MACOS(eventType) \ case CONSTEXPR_RAW_PROPS_KEY_HASH("on" #eventType): { \ @@ -102,6 +111,7 @@ void HostPlatformViewProps::setProp( RAW_SET_PROP_SWITCH_CASE_BASIC(enableFocusRing); RAW_SET_PROP_SWITCH_CASE_BASIC(keyDownEvents); RAW_SET_PROP_SWITCH_CASE_BASIC(keyUpEvents); + RAW_SET_PROP_SWITCH_CASE_BASIC(tooltip); } } diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/platform/macos/react/renderer/components/view/HostPlatformViewProps.h b/packages/react-native/ReactCommon/react/renderer/components/view/platform/macos/react/renderer/components/view/HostPlatformViewProps.h index f2e4424f8818f4..c2b0c3acf7ddff 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/platform/macos/react/renderer/components/view/HostPlatformViewProps.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/platform/macos/react/renderer/components/view/HostPlatformViewProps.h @@ -16,6 +16,9 @@ #include +#include +#include + #include "HostPlatformViewEvents.h" namespace facebook::react { @@ -43,5 +46,7 @@ class HostPlatformViewProps : public BaseViewProps { std::vector keyDownEvents{}; std::vector keyUpEvents{}; + + std::optional tooltip{}; }; } // namespace facebook::react diff --git a/packages/rn-tester/js/utils/RNTesterList.ios.js b/packages/rn-tester/js/utils/RNTesterList.ios.js index 6d7ee8ce1d7185..87a92d6de5f18f 100644 --- a/packages/rn-tester/js/utils/RNTesterList.ios.js +++ b/packages/rn-tester/js/utils/RNTesterList.ios.js @@ -127,10 +127,6 @@ const Components: Array = [ module: require('../examples/TextInput/TextInputExample.ios'), category: 'Basic', }, - { - key: 'TooltipExample', - module: require('../examples/Tooltip/TooltipExample'), - }, { key: 'TouchableExample', module: require('../examples/Touchable/TouchableExample'), @@ -186,6 +182,11 @@ const APIs: Array = ([ key: 'AccessibilityShowMenu', module: require('../examples/AccessibilityShowMenu/AccessibilityShowMenu'), category: 'macOS', + }, + { + key: 'TooltipExample', + module: require('../examples/Tooltip/TooltipExample'), + category: 'macOS', }, // macOS] { key: 'AccessibilityExample',