diff --git a/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm b/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm index 4fba3d78fc44d4..bc34a372f3c10c 100644 --- a/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +++ b/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm @@ -630,7 +630,7 @@ - (BOOL)shouldGroupAccessibilityChildren NSMutableArray *customActions = [NSMutableArray array]; for (auto const &accessibilityAction : accessibilityActions) { [customActions - addObject:[[UIAccessibilityCustomAction alloc] initWithName:RCTNSStringFromString(accessibilityAction) + addObject:[[UIAccessibilityCustomAction alloc] initWithName:RCTNSStringFromString(accessibilityAction.name) target:self selector:@selector(didActivateAccessibilityCustomAction:)]]; } diff --git a/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h b/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h index 157aebed39bca4..b9306c2967d49a 100644 --- a/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h +++ b/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h @@ -7,7 +7,9 @@ #pragma once +#include #include +#include namespace facebook { namespace react { @@ -45,6 +47,11 @@ constexpr enum AccessibilityTraits operator&( return (enum AccessibilityTraits)((uint32_t)lhs & (uint32_t)rhs); } +struct AccessibilityAction { + std::string name{""}; + better::optional label{}; +}; + struct AccessibilityState { bool disabled{false}; bool selected{false}; diff --git a/ReactCommon/react/renderer/components/view/AccessibilityProps.h b/ReactCommon/react/renderer/components/view/AccessibilityProps.h index 4235e7cdd6c4f8..362ee83f08546b 100644 --- a/ReactCommon/react/renderer/components/view/AccessibilityProps.h +++ b/ReactCommon/react/renderer/components/view/AccessibilityProps.h @@ -29,7 +29,7 @@ class AccessibilityProps { AccessibilityState accessibilityState; std::string accessibilityLabel{""}; std::string accessibilityHint{""}; - std::vector accessibilityActions{}; + std::vector accessibilityActions{}; bool accessibilityViewIsModal{false}; bool accessibilityElementsHidden{false}; bool accessibilityIgnoresInvertColors{false}; diff --git a/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h b/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h index 8540fa4bbcb348..5eb0b6e4a4df4b 100644 --- a/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h +++ b/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h @@ -192,5 +192,22 @@ inline void fromRawValue( } } +inline void fromRawValue(const RawValue &value, AccessibilityAction &result) { + auto map = (better::map)value; + + auto name = map.find("name"); + react_native_assert(name != map.end() && name->second.hasType()); + if (name != map.end()) { + fromRawValue(name->second, result.name); + } + + auto label = map.find("label"); + if (label != map.end()) { + if (label->second.hasType()) { + result.label = (std::string)label->second; + } + } +} + } // namespace react } // namespace facebook