From 0d3cb5feac133c4d8f969f6f69a8110c0bb35982 Mon Sep 17 00:00:00 2001 From: Jakub Hanko <1kuko3@gmail.com> Date: Tue, 26 May 2026 15:10:08 +0200 Subject: [PATCH] fix(ios): make event emit() templates compatible with RN 0.85+ React Native 0.85 changed facebook::react::SharedEventEmitter from shared_ptr to shared_ptr. RCTViewComponentView still holds _eventEmitter as SharedViewEventEmitter (shared_ptr), so the const-stripping implicit conversion stops compiling. Templatize the holder type on each event's emit() so the deduced argument matches whatever the call site provides. Backward-compatible with RN <0.85. Co-Authored-By: Claude Opus 4.7 (1M context) --- ios/events/CameraIdleEvent.h | 6 ++++-- ios/events/CameraMoveEvent.h | 6 ++++-- ios/events/CirclePressEvent.h | 6 ++++-- ios/events/GroundOverlayPressEvent.h | 6 ++++-- ios/events/LongPressEvent.h | 6 ++++-- ios/events/MarkerDragEvent.h | 18 ++++++++++++------ ios/events/MarkerPressEvent.h | 6 ++++-- ios/events/PolygonPressEvent.h | 6 ++++-- ios/events/PressEvent.h | 6 ++++-- ios/events/ReadyEvent.h | 6 ++++-- ios/events/TileOverlayPressEvent.h | 6 ++++-- 11 files changed, 52 insertions(+), 26 deletions(-) diff --git a/ios/events/CameraIdleEvent.h b/ios/events/CameraIdleEvent.h index b5a1378..11ca6ec 100644 --- a/ios/events/CameraIdleEvent.h +++ b/ios/events/CameraIdleEvent.h @@ -11,8 +11,10 @@ struct CameraIdleEvent { double zoom; bool gesture; - template - void emit(const facebook::react::SharedEventEmitter &eventEmitter) const { + // Holder type is templated to bridge RN versions: SharedEventEmitter went + // from shared_ptr to shared_ptr in 0.85. + template + void emit(const EventEmitterPtr &eventEmitter) const { if (!eventEmitter) return; auto emitter = std::static_pointer_cast(eventEmitter); diff --git a/ios/events/CameraMoveEvent.h b/ios/events/CameraMoveEvent.h index 7073bf1..9a2a011 100644 --- a/ios/events/CameraMoveEvent.h +++ b/ios/events/CameraMoveEvent.h @@ -11,8 +11,10 @@ struct CameraMoveEvent { double zoom; bool gesture; - template - void emit(const facebook::react::SharedEventEmitter &eventEmitter) const { + // Holder type is templated to bridge RN versions: SharedEventEmitter went + // from shared_ptr to shared_ptr in 0.85. + template + void emit(const EventEmitterPtr &eventEmitter) const { if (!eventEmitter) return; auto emitter = std::static_pointer_cast(eventEmitter); diff --git a/ios/events/CirclePressEvent.h b/ios/events/CirclePressEvent.h index f24d714..8e98368 100644 --- a/ios/events/CirclePressEvent.h +++ b/ios/events/CirclePressEvent.h @@ -6,8 +6,10 @@ namespace luggmaps { namespace events { struct CirclePressEvent { - template - static void emit(const facebook::react::SharedEventEmitter &eventEmitter) { + // Holder type is templated to bridge RN versions: SharedEventEmitter went + // from shared_ptr to shared_ptr in 0.85. + template + static void emit(const EventEmitterPtr &eventEmitter) { if (!eventEmitter) return; auto emitter = std::static_pointer_cast(eventEmitter); diff --git a/ios/events/GroundOverlayPressEvent.h b/ios/events/GroundOverlayPressEvent.h index 9f1c36f..43cbd38 100644 --- a/ios/events/GroundOverlayPressEvent.h +++ b/ios/events/GroundOverlayPressEvent.h @@ -6,8 +6,10 @@ namespace luggmaps { namespace events { struct GroundOverlayPressEvent { - template - static void emit(const facebook::react::SharedEventEmitter &eventEmitter) { + // Holder type is templated to bridge RN versions: SharedEventEmitter went + // from shared_ptr to shared_ptr in 0.85. + template + static void emit(const EventEmitterPtr &eventEmitter) { if (!eventEmitter) return; auto emitter = std::static_pointer_cast(eventEmitter); diff --git a/ios/events/LongPressEvent.h b/ios/events/LongPressEvent.h index d40b2f3..153f01b 100644 --- a/ios/events/LongPressEvent.h +++ b/ios/events/LongPressEvent.h @@ -11,8 +11,10 @@ struct LongPressEvent { double x; double y; - template - void emit(const facebook::react::SharedEventEmitter &eventEmitter) const { + // Holder type is templated to bridge RN versions: SharedEventEmitter went + // from shared_ptr to shared_ptr in 0.85. + template + void emit(const EventEmitterPtr &eventEmitter) const { if (!eventEmitter) return; auto emitter = std::static_pointer_cast(eventEmitter); diff --git a/ios/events/MarkerDragEvent.h b/ios/events/MarkerDragEvent.h index 33f45ed..e033d5c 100644 --- a/ios/events/MarkerDragEvent.h +++ b/ios/events/MarkerDragEvent.h @@ -11,8 +11,10 @@ struct MarkerDragStartEvent { double x; double y; - template - void emit(const facebook::react::SharedEventEmitter &eventEmitter) const { + // Holder type is templated to bridge RN versions: SharedEventEmitter went + // from shared_ptr to shared_ptr in 0.85. + template + void emit(const EventEmitterPtr &eventEmitter) const { if (!eventEmitter) return; auto emitter = std::static_pointer_cast(eventEmitter); @@ -31,8 +33,10 @@ struct MarkerDragChangeEvent { double x; double y; - template - void emit(const facebook::react::SharedEventEmitter &eventEmitter) const { + // Holder type is templated to bridge RN versions: SharedEventEmitter went + // from shared_ptr to shared_ptr in 0.85. + template + void emit(const EventEmitterPtr &eventEmitter) const { if (!eventEmitter) return; auto emitter = std::static_pointer_cast(eventEmitter); @@ -51,8 +55,10 @@ struct MarkerDragEndEvent { double x; double y; - template - void emit(const facebook::react::SharedEventEmitter &eventEmitter) const { + // Holder type is templated to bridge RN versions: SharedEventEmitter went + // from shared_ptr to shared_ptr in 0.85. + template + void emit(const EventEmitterPtr &eventEmitter) const { if (!eventEmitter) return; auto emitter = std::static_pointer_cast(eventEmitter); diff --git a/ios/events/MarkerPressEvent.h b/ios/events/MarkerPressEvent.h index a47d523..e80abe4 100644 --- a/ios/events/MarkerPressEvent.h +++ b/ios/events/MarkerPressEvent.h @@ -11,8 +11,10 @@ struct MarkerPressEvent { double x; double y; - template - void emit(const facebook::react::SharedEventEmitter &eventEmitter) const { + // Holder type is templated to bridge RN versions: SharedEventEmitter went + // from shared_ptr to shared_ptr in 0.85. + template + void emit(const EventEmitterPtr &eventEmitter) const { if (!eventEmitter) return; auto emitter = std::static_pointer_cast(eventEmitter); diff --git a/ios/events/PolygonPressEvent.h b/ios/events/PolygonPressEvent.h index ee08cac..f975bfd 100644 --- a/ios/events/PolygonPressEvent.h +++ b/ios/events/PolygonPressEvent.h @@ -6,8 +6,10 @@ namespace luggmaps { namespace events { struct PolygonPressEvent { - template - static void emit(const facebook::react::SharedEventEmitter &eventEmitter) { + // Holder type is templated to bridge RN versions: SharedEventEmitter went + // from shared_ptr to shared_ptr in 0.85. + template + static void emit(const EventEmitterPtr &eventEmitter) { if (!eventEmitter) return; auto emitter = std::static_pointer_cast(eventEmitter); diff --git a/ios/events/PressEvent.h b/ios/events/PressEvent.h index 08fe6a7..429a409 100644 --- a/ios/events/PressEvent.h +++ b/ios/events/PressEvent.h @@ -11,8 +11,10 @@ struct PressEvent { double x; double y; - template - void emit(const facebook::react::SharedEventEmitter &eventEmitter) const { + // Holder type is templated to bridge RN versions: SharedEventEmitter went + // from shared_ptr to shared_ptr in 0.85. + template + void emit(const EventEmitterPtr &eventEmitter) const { if (!eventEmitter) return; auto emitter = std::static_pointer_cast(eventEmitter); diff --git a/ios/events/ReadyEvent.h b/ios/events/ReadyEvent.h index a994942..ec2f3b7 100644 --- a/ios/events/ReadyEvent.h +++ b/ios/events/ReadyEvent.h @@ -6,8 +6,10 @@ namespace luggmaps { namespace events { struct ReadyEvent { - template - static void emit(const facebook::react::SharedEventEmitter &eventEmitter) { + // Holder type is templated to bridge RN versions: SharedEventEmitter went + // from shared_ptr to shared_ptr in 0.85. + template + static void emit(const EventEmitterPtr &eventEmitter) { if (!eventEmitter) return; auto emitter = std::static_pointer_cast(eventEmitter); diff --git a/ios/events/TileOverlayPressEvent.h b/ios/events/TileOverlayPressEvent.h index 87d8490..d668c71 100644 --- a/ios/events/TileOverlayPressEvent.h +++ b/ios/events/TileOverlayPressEvent.h @@ -6,8 +6,10 @@ namespace luggmaps { namespace events { struct TileOverlayPressEvent { - template - static void emit(const facebook::react::SharedEventEmitter &eventEmitter) { + // Holder type is templated to bridge RN versions: SharedEventEmitter went + // from shared_ptr to shared_ptr in 0.85. + template + static void emit(const EventEmitterPtr &eventEmitter) { if (!eventEmitter) return; auto emitter = std::static_pointer_cast(eventEmitter);