react-native-maps 1.21.0-alpha.7 → 1.21.0-alpha.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/android/build.gradle +38 -13
  2. package/android/generated/RCTAppDependencyProvider.h +25 -0
  3. package/android/generated/RCTAppDependencyProvider.mm +55 -0
  4. package/android/generated/RCTModulesConformingToProtocolsProvider.h +18 -0
  5. package/android/generated/RCTModulesConformingToProtocolsProvider.mm +33 -0
  6. package/android/generated/RCTThirdPartyComponentsProvider.h +16 -0
  7. package/android/generated/RCTThirdPartyComponentsProvider.mm +26 -0
  8. package/android/generated/ReactAppDependencyProvider.podspec +34 -0
  9. package/android/generated/java/com/facebook/fbreact/specs/NativeAirMapsModuleSpec.java +63 -0
  10. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsCalloutManagerDelegate.java +35 -0
  11. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsCalloutManagerInterface.java +17 -0
  12. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsMapViewManagerDelegate.java +200 -0
  13. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsMapViewManagerInterface.java +71 -0
  14. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsMarkerManagerDelegate.java +104 -0
  15. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsMarkerManagerInterface.java +39 -0
  16. package/android/generated/jni/CMakeLists.txt +36 -0
  17. package/android/generated/jni/RNMapsSpecs-generated.cpp +68 -0
  18. package/android/generated/jni/RNMapsSpecs.h +31 -0
  19. package/android/generated/jni/react/renderer/components/RNMapsSpecs/ComponentDescriptors.cpp +26 -0
  20. package/android/generated/jni/react/renderer/components/RNMapsSpecs/ComponentDescriptors.h +28 -0
  21. package/android/generated/jni/react/renderer/components/RNMapsSpecs/EventEmitters.cpp +918 -0
  22. package/android/generated/jni/react/renderer/components/RNMapsSpecs/EventEmitters.h +787 -0
  23. package/android/generated/jni/react/renderer/components/RNMapsSpecs/Props.cpp +154 -0
  24. package/android/generated/jni/react/renderer/components/RNMapsSpecs/Props.h +1058 -0
  25. package/android/generated/jni/react/renderer/components/RNMapsSpecs/RNMapsSpecsJSI-generated.cpp +74 -0
  26. package/android/generated/jni/react/renderer/components/RNMapsSpecs/RNMapsSpecsJSI.h +268 -0
  27. package/android/generated/jni/react/renderer/components/RNMapsSpecs/ShadowNodes.cpp +21 -0
  28. package/android/generated/jni/react/renderer/components/RNMapsSpecs/ShadowNodes.h +76 -0
  29. package/android/generated/jni/react/renderer/components/RNMapsSpecs/States.cpp +16 -0
  30. package/android/generated/jni/react/renderer/components/RNMapsSpecs/States.h +77 -0
  31. package/android/gradle/wrapper/gradle-wrapper.properties +1 -1
  32. package/android/src/main/java/com/rnmaps/fabric/CalloutManager.java +77 -0
  33. package/android/src/main/java/com/rnmaps/fabric/JSONUtil.java +86 -0
  34. package/android/src/main/java/com/rnmaps/fabric/MapViewManager.java +593 -0
  35. package/android/src/main/java/com/rnmaps/fabric/MarkerManager.java +259 -0
  36. package/android/src/main/java/com/rnmaps/fabric/NativeAirMapsModule.java +156 -4
  37. package/android/src/main/java/com/rnmaps/fabric/event/OnCalloutPressEvent.java +25 -0
  38. package/android/src/main/java/com/rnmaps/fabric/event/OnDeselectEvent.java +28 -0
  39. package/android/src/main/java/com/rnmaps/fabric/event/OnDragEndEvent.java +28 -0
  40. package/android/src/main/java/com/rnmaps/fabric/event/OnDragEvent.java +28 -0
  41. package/android/src/main/java/com/rnmaps/fabric/event/OnDragStartEvent.java +28 -0
  42. package/android/src/main/java/com/rnmaps/fabric/event/OnLongPressEvent.java +28 -0
  43. package/android/src/main/java/com/rnmaps/fabric/event/OnMapLoadedEvent.java +29 -0
  44. package/android/src/main/java/com/rnmaps/fabric/event/OnMapReadyEvent.java +29 -0
  45. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDeselectEvent.java +28 -0
  46. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragEndEvent.java +28 -0
  47. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragEvent.java +28 -0
  48. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragStartEvent.java +28 -0
  49. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerPressEvent.java +28 -0
  50. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerSelectEvent.java +28 -0
  51. package/android/src/main/java/com/rnmaps/fabric/event/OnPoiClickEvent.java +27 -0
  52. package/android/src/main/java/com/rnmaps/fabric/event/OnPressEvent.java +27 -0
  53. package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeCompleteEvent.java +30 -0
  54. package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeEvent.java +48 -0
  55. package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeStartEvent.java +33 -0
  56. package/android/src/main/java/com/rnmaps/fabric/event/OnSelectEvent.java +28 -0
  57. package/android/src/main/java/com/rnmaps/fabric/event/OnUserLocationChangeEvent.java +28 -0
  58. package/android/src/main/java/com/rnmaps/maps/MapAirModulePackage.java +22 -2
  59. package/android/src/main/java/com/rnmaps/maps/MapCallout.java +18 -0
  60. package/android/src/main/java/com/rnmaps/maps/MapManager.java +14 -14
  61. package/android/src/main/java/com/rnmaps/maps/MapMarker.java +79 -3
  62. package/android/src/main/java/com/rnmaps/maps/MapModule.java +206 -206
  63. package/android/src/main/java/com/rnmaps/maps/MapView.java +1618 -1346
  64. package/ios/AirGoogleMaps/AIRGoogleMap.h +3 -2
  65. package/ios/AirGoogleMaps/AIRGoogleMap.m +153 -48
  66. package/ios/AirGoogleMaps/AIRGoogleMapCircle.m +23 -11
  67. package/ios/AirGoogleMaps/AIRGoogleMapManager.m +17 -28
  68. package/ios/AirGoogleMaps/AIRGoogleMapMarker.h +2 -0
  69. package/ios/AirGoogleMaps/AIRGoogleMapMarker.m +347 -243
  70. package/ios/AirGoogleMaps/AIRGoogleMapPolygon.h +2 -1
  71. package/ios/AirGoogleMaps/AIRGoogleMapPolygon.m +30 -0
  72. package/ios/AirGoogleMaps/AIRGoogleMapPolyline.h +0 -1
  73. package/ios/AirGoogleMaps/AIRGoogleMapPolyline.m +0 -7
  74. package/ios/AirGoogleMaps/AIRGoogleMapWMSTile.h +1 -1
  75. package/ios/AirGoogleMaps/AIRGoogleMapWMSTile.m +2 -2
  76. package/ios/AirGoogleMaps/RCTConvert+GMSMapViewType.h +3 -0
  77. package/ios/AirGoogleMaps/RCTConvert+GMSMapViewType.m +2 -0
  78. package/ios/AirGoogleMaps/RNMapsGoogleMapView.h +3 -3
  79. package/ios/AirGoogleMaps/RNMapsGoogleMapView.mm +161 -61
  80. package/ios/AirGoogleMaps/RNMapsGooglePolygonView.h +26 -0
  81. package/ios/AirGoogleMaps/RNMapsGooglePolygonView.mm +217 -0
  82. package/ios/AirGoogleMaps/RNMapsGooglePolygonViewManager.mm +25 -0
  83. package/ios/AirMaps/AIRMap.h +6 -3
  84. package/ios/AirMaps/AIRMap.m +289 -145
  85. package/ios/AirMaps/AIRMapManager.m +8 -17
  86. package/ios/AirMaps/AIRMapMarker.h +1 -0
  87. package/ios/AirMaps/AIRMapMarker.m +165 -103
  88. package/ios/AirMaps/Callout/SMCalloutView.m +1 -1
  89. package/ios/AirMaps/RCTConvert+AirMap.h +4 -0
  90. package/ios/AirMaps/RCTConvert+AirMap.m +2 -0
  91. package/ios/AirMaps/RNMapsAirModule.h +1 -1
  92. package/ios/AirMaps/RNMapsAirModule.mm +42 -172
  93. package/ios/AirMaps/RNMapsAirModuleDelegate.h +24 -0
  94. package/ios/AirMaps/RNMapsHostVewDelegate.h +17 -0
  95. package/ios/AirMaps/RNMapsMapView.h +3 -3
  96. package/ios/AirMaps/RNMapsMapView.mm +344 -307
  97. package/ios/AirMaps/RNMapsMarkerView.h +24 -0
  98. package/ios/AirMaps/RNMapsMarkerView.mm +430 -0
  99. package/ios/AirMaps/RNMapsMarkerViewManager.mm +21 -0
  100. package/ios/AirMaps/UIView +AirMap.m +20 -0
  101. package/ios/AirMaps/UIView+AirMap.h +11 -0
  102. package/ios/AirMaps.xcodeproj/project.pbxproj +60 -0
  103. package/ios/generated/RCTAppDependencyProvider.h +25 -0
  104. package/ios/generated/RCTAppDependencyProvider.mm +55 -0
  105. package/ios/generated/RCTModulesConformingToProtocolsProvider.h +18 -0
  106. package/ios/generated/RCTModulesConformingToProtocolsProvider.mm +33 -0
  107. package/ios/generated/RCTThirdPartyComponentsProvider.h +16 -0
  108. package/ios/generated/RCTThirdPartyComponentsProvider.mm +26 -0
  109. package/ios/generated/RNMapsSpecs/ComponentDescriptors.cpp +26 -0
  110. package/ios/generated/RNMapsSpecs/ComponentDescriptors.h +28 -0
  111. package/ios/generated/RNMapsSpecs/EventEmitters.cpp +918 -0
  112. package/ios/generated/RNMapsSpecs/EventEmitters.h +787 -0
  113. package/ios/generated/RNMapsSpecs/Props.cpp +154 -0
  114. package/ios/generated/RNMapsSpecs/Props.h +1058 -0
  115. package/ios/generated/RNMapsSpecs/RCTComponentViewHelpers.h +549 -0
  116. package/ios/generated/RNMapsSpecs/RNMapsSpecs-generated.mm +92 -0
  117. package/ios/generated/RNMapsSpecs/RNMapsSpecs.h +137 -0
  118. package/ios/generated/RNMapsSpecs/ShadowNodes.cpp +21 -0
  119. package/ios/generated/RNMapsSpecs/ShadowNodes.h +76 -0
  120. package/ios/generated/RNMapsSpecs/States.cpp +16 -0
  121. package/ios/generated/RNMapsSpecs/States.h +77 -0
  122. package/ios/generated/RNMapsSpecsJSI-generated.cpp +74 -0
  123. package/ios/generated/RNMapsSpecsJSI.h +268 -0
  124. package/ios/generated/ReactAppDependencyProvider.podspec +34 -0
  125. package/lib/MapCallout.js +1 -0
  126. package/lib/MapMarker.d.ts +15 -2
  127. package/lib/MapMarker.js +53 -9
  128. package/lib/MapMarkerNativeComponent.js +0 -2
  129. package/lib/MapOverlay.js +2 -8
  130. package/lib/MapPolyline.d.ts +1 -1
  131. package/lib/MapView.d.ts +7 -22
  132. package/lib/MapView.js +83 -94
  133. package/lib/{FabricMapView.d.ts → createFabricMap.d.ts} +7 -11
  134. package/lib/createFabricMap.js +175 -0
  135. package/lib/decorateMapComponent.js +22 -0
  136. package/lib/specs/NativeAirMapsModule.d.ts +2 -2
  137. package/lib/specs/NativeComponentCallout.d.ts +46 -0
  138. package/lib/specs/NativeComponentCallout.js +9 -0
  139. package/lib/specs/NativeComponentGoogleMapView.d.ts +12 -12
  140. package/lib/specs/NativeComponentGooglePolygon.d.ts +75 -0
  141. package/lib/specs/NativeComponentGooglePolygon.js +9 -0
  142. package/lib/specs/NativeComponentMapView.d.ts +19 -36
  143. package/lib/specs/NativeComponentMapView.js +1 -3
  144. package/lib/specs/NativeComponentMarker.d.ts +258 -0
  145. package/lib/specs/NativeComponentMarker.js +19 -0
  146. package/package.json +15 -10
  147. package/react-native-maps.podspec +2 -1
  148. package/lib/FabricMapView.js +0 -181
@@ -0,0 +1,24 @@
1
+ //
2
+ // RNMapsMarker.h
3
+ // AirMaps
4
+ //
5
+ // Created by Salah Ghanim on 23.11.24.
6
+ // Copyright © 2024 react-native-maps. All rights reserved.
7
+ //
8
+ #ifdef RCT_NEW_ARCH_ENABLED
9
+
10
+ #import <React/RCTViewComponentView.h>
11
+ #import <UIKit/UIKit.h>
12
+
13
+ NS_ASSUME_NONNULL_BEGIN
14
+
15
+ typedef void (^LoadCompletionHandler)(UIView *view);
16
+
17
+ @class AIRMapMarker;
18
+ @interface RNMapsMarkerView : RCTViewComponentView
19
+ - (AIRMapMarker*) marker;
20
+ @end
21
+
22
+ NS_ASSUME_NONNULL_END
23
+
24
+ #endif
@@ -0,0 +1,430 @@
1
+ //
2
+ // RNMapsMarker.m
3
+ // AirMaps
4
+ //
5
+ // Created by Salah Ghanim on 23.11.24.
6
+ // Copyright © 2024 react-native-maps. All rights reserved.
7
+ //
8
+
9
+ #import "RNMapsMarkerView.h"
10
+ #import "AirMap.h"
11
+ #import "AIRMapMarker.h"
12
+ #import "AIRMapMarkerManager.h"
13
+ #import <react-native-maps-generated/ComponentDescriptors.h>
14
+ #import <react-native-maps-generated/EventEmitters.h>
15
+ #import <react-native-maps-generated/Props.h>
16
+ #import <react-native-maps-generated/RCTComponentViewHelpers.h>
17
+ #import "RCTFabricComponentsPlugins.h"
18
+ #import <React/RCTConversions.h>
19
+ #import "UIView+AirMap.h"
20
+
21
+ using namespace facebook::react;
22
+
23
+ @interface RNMapsMarkerView () <RCTRNMapsMarkerViewProtocol>
24
+ @end
25
+
26
+ @implementation RNMapsMarkerView {
27
+ AIRMapMarker *_view;
28
+ AIRMapMarkerManager* _legacyMapManager;
29
+ }
30
+
31
+ - (AIRMapMarker *) marker {
32
+ return _view;
33
+ }
34
+ - (void) prepareForRecycle
35
+ {
36
+ [super prepareForRecycle];
37
+ [_view removeFromSuperview];
38
+ _view = nil;
39
+ _legacyMapManager = nil;
40
+ }
41
+
42
+ #pragma mark - JS Commands
43
+
44
+
45
+ #pragma mark - Native commands
46
+
47
+ - (void)handleCommand:(const NSString *)commandName args:(const NSArray *)args
48
+ {
49
+ RCTRNMapsMarkerHandleCommand(self, commandName, args);
50
+ }
51
+
52
+
53
+ + (ComponentDescriptorProvider)componentDescriptorProvider
54
+ {
55
+ return concreteComponentDescriptorProvider<RNMapsMarkerComponentDescriptor>();
56
+ }
57
+
58
+ - (void) animateToCoordinates:(double)latitude longitude:(double)longitude duration:(NSInteger)duration
59
+ {
60
+ [_view animateToCoordinate:CLLocationCoordinate2DMake(latitude, longitude) duration:duration/1000];
61
+ }
62
+
63
+ - (void) showCallout
64
+ {
65
+ [_view.map selectAnnotation:_view animated:YES];
66
+ }
67
+
68
+ - (void) hideCallout
69
+ {
70
+ [_view.map deselectAnnotation:_view animated:YES];
71
+
72
+ }
73
+ - (void) redraw
74
+ {
75
+ // do nothing
76
+ }
77
+ - (void) redrawCallout
78
+ {
79
+ // do nothing
80
+ }
81
+
82
+ - (void) setCoordinates:(double)latitude longitude:(double)longitude
83
+ {
84
+ [_view setCoordinate:CLLocationCoordinate2DMake(latitude, longitude)];
85
+ }
86
+
87
+
88
+
89
+ - (void) prepareMarkerView
90
+ {
91
+ if (_legacyMapManager && _view) return;
92
+ static const auto defaultProps = std::make_shared<const RNMapsMarkerProps>();
93
+ _props = defaultProps;
94
+ _legacyMapManager = [[AIRMapMarkerManager alloc] init];
95
+ _view = (AIRMapMarker *)[_legacyMapManager view];
96
+
97
+
98
+ _view.onPress = [self](NSDictionary* dictionary) {
99
+ if (_eventEmitter) {
100
+ // Extract values from the NSDictionary
101
+ NSDictionary* coordinateDict = dictionary[@"coordinate"];
102
+ NSDictionary* positionDict = dictionary[@"position"];
103
+
104
+ // Populate the OnCalloutPressPoint struct
105
+ facebook::react::RNMapsMarkerEventEmitter::OnPressPosition point = {
106
+ .x = [coordinateDict[@"x"] doubleValue],
107
+ .y = [coordinateDict[@"y"] doubleValue],
108
+ };
109
+
110
+
111
+ facebook::react::RNMapsMarkerEventEmitter::OnPressCoordinate coordinate = {
112
+ .latitude = [coordinateDict[@"latitude"] doubleValue],
113
+ .longitude = [coordinateDict[@"longitude"] doubleValue],
114
+ };
115
+
116
+ auto eventEmitter = std::static_pointer_cast<RNMapsMarkerEventEmitter const>(_eventEmitter);
117
+ facebook::react::RNMapsMarkerEventEmitter::OnPress data = {
118
+ .action = std::string([dictionary[@"action"] UTF8String]),
119
+ .id = std::string([dictionary[@"id"] UTF8String]),
120
+ .position = point,
121
+ .coordinate = coordinate,
122
+ };
123
+ eventEmitter->onPress(data);
124
+ }
125
+ };
126
+
127
+ _view.onDeselect = [self](NSDictionary* dictionary) {
128
+ if (_eventEmitter) {
129
+ // Extract values from the NSDictionary
130
+ NSDictionary* coordinateDict = dictionary[@"coordinate"];
131
+ NSDictionary* positionDict = dictionary[@"position"];
132
+
133
+ // Populate the OnCalloutPressPoint struct
134
+ facebook::react::RNMapsMarkerEventEmitter::OnDeselectPosition point = {
135
+ .x = [coordinateDict[@"x"] doubleValue],
136
+ .y = [coordinateDict[@"y"] doubleValue],
137
+ };
138
+
139
+
140
+ facebook::react::RNMapsMarkerEventEmitter::OnDeselectCoordinate coordinate = {
141
+ .latitude = [coordinateDict[@"latitude"] doubleValue],
142
+ .longitude = [coordinateDict[@"longitude"] doubleValue],
143
+ };
144
+
145
+ auto eventEmitter = std::static_pointer_cast<RNMapsMarkerEventEmitter const>(_eventEmitter);
146
+ facebook::react::RNMapsMarkerEventEmitter::OnDeselect data = {
147
+ .action = std::string([dictionary[@"action"] UTF8String]),
148
+ .id = std::string([dictionary[@"id"] UTF8String]),
149
+ .position = point,
150
+ .coordinate = coordinate,
151
+ };
152
+ eventEmitter->onDeselect(data);
153
+ }
154
+ };
155
+
156
+ _view.onDrag = [self](NSDictionary* dictionary) {
157
+ if (_eventEmitter) {
158
+ // Extract values from the NSDictionary
159
+ NSDictionary* coordinateDict = dictionary[@"coordinate"];
160
+
161
+
162
+ facebook::react::RNMapsMarkerEventEmitter::OnDragCoordinate coordinate = {
163
+ .latitude = [coordinateDict[@"latitude"] doubleValue],
164
+ .longitude = [coordinateDict[@"longitude"] doubleValue],
165
+ };
166
+
167
+ auto eventEmitter = std::static_pointer_cast<RNMapsMarkerEventEmitter const>(_eventEmitter);
168
+ facebook::react::RNMapsMarkerEventEmitter::OnDrag data = {
169
+ .id = std::string([dictionary[@"id"] UTF8String]),
170
+ .coordinate = coordinate,
171
+ };
172
+ eventEmitter->onDrag(data);
173
+ }
174
+ };
175
+ _view.onDragStart = [self](NSDictionary* dictionary) {
176
+ if (_eventEmitter) {
177
+ // Extract values from the NSDictionary
178
+ NSDictionary* coordinateDict = dictionary[@"coordinate"];
179
+
180
+ facebook::react::RNMapsMarkerEventEmitter::OnDragStartCoordinate coordinate = {
181
+ .latitude = [coordinateDict[@"latitude"] doubleValue],
182
+ .longitude = [coordinateDict[@"longitude"] doubleValue],
183
+ };
184
+
185
+ auto eventEmitter = std::static_pointer_cast<RNMapsMarkerEventEmitter const>(_eventEmitter);
186
+ facebook::react::RNMapsMarkerEventEmitter::OnDragStart data = {
187
+ .id = std::string([dictionary[@"id"] UTF8String]),
188
+ .coordinate = coordinate,
189
+ };
190
+ eventEmitter->onDragStart(data);
191
+ }
192
+ };
193
+
194
+ _view.onDragEnd = [self](NSDictionary* dictionary) {
195
+ if (_eventEmitter) {
196
+ // Extract values from the NSDictionary
197
+ NSDictionary* coordinateDict = dictionary[@"coordinate"];
198
+
199
+
200
+ facebook::react::RNMapsMarkerEventEmitter::OnDragEndCoordinate coordinate = {
201
+ .latitude = [coordinateDict[@"latitude"] doubleValue],
202
+ .longitude = [coordinateDict[@"longitude"] doubleValue],
203
+ };
204
+
205
+ auto eventEmitter = std::static_pointer_cast<RNMapsMarkerEventEmitter const>(_eventEmitter);
206
+ facebook::react::RNMapsMarkerEventEmitter::OnDragEnd data = {
207
+ .id = std::string([dictionary[@"id"] UTF8String]),
208
+ .coordinate = coordinate,
209
+ };
210
+ eventEmitter->onDragEnd(data);
211
+ }
212
+ };
213
+
214
+ _view.onSelect = [self](NSDictionary* dictionary) {
215
+ if (_eventEmitter) {
216
+ // Extract values from the NSDictionary
217
+ NSDictionary* coordinateDict = dictionary[@"coordinate"];
218
+ NSDictionary* positionDict = dictionary[@"position"];
219
+
220
+ // Populate the OnCalloutPressPoint struct
221
+ facebook::react::RNMapsMarkerEventEmitter::OnSelectPosition point = {
222
+ .x = [coordinateDict[@"x"] doubleValue],
223
+ .y = [coordinateDict[@"y"] doubleValue],
224
+ };
225
+
226
+
227
+ facebook::react::RNMapsMarkerEventEmitter::OnSelectCoordinate coordinate = {
228
+ .latitude = [coordinateDict[@"latitude"] doubleValue],
229
+ .longitude = [coordinateDict[@"longitude"] doubleValue],
230
+ };
231
+
232
+ auto eventEmitter = std::static_pointer_cast<RNMapsMarkerEventEmitter const>(_eventEmitter);
233
+ facebook::react::RNMapsMarkerEventEmitter::OnSelect data = {
234
+ .action = std::string([dictionary[@"action"] UTF8String]),
235
+ .id = std::string([dictionary[@"id"] UTF8String]),
236
+ .position = point,
237
+ .coordinate = coordinate,
238
+ };
239
+ eventEmitter->onSelect(data);
240
+ }
241
+ };
242
+
243
+
244
+ _view.onCalloutPress = [self](NSDictionary* dictionary) {
245
+ if (_eventEmitter) {
246
+ // Extract values from the NSDictionary
247
+ NSDictionary* pointDict = dictionary[@"point"];
248
+ NSDictionary* frameDict = dictionary[@"frame"];
249
+
250
+ // Populate the OnCalloutPressPoint struct
251
+ facebook::react::RNMapsMarkerEventEmitter::OnCalloutPressPoint point = {
252
+ .x = [pointDict[@"x"] doubleValue],
253
+ .y = [pointDict[@"y"] doubleValue],
254
+ };
255
+
256
+
257
+ facebook::react::RNMapsMarkerEventEmitter::OnCalloutPressFrame frame = {
258
+ .x = [frameDict[@"x"] doubleValue],
259
+ .y = [frameDict[@"x"] doubleValue],
260
+ .width = [frameDict[@"width"] doubleValue],
261
+ .height = [frameDict[@"height"] doubleValue],
262
+ };
263
+
264
+ auto eventEmitter = std::static_pointer_cast<RNMapsMarkerEventEmitter const>(_eventEmitter);
265
+ facebook::react::RNMapsMarkerEventEmitter::OnCalloutPress data = {
266
+ .action = std::string([dictionary[@"action"] UTF8String]),
267
+ .id = std::string([dictionary[@"id"] UTF8String]),
268
+ .frame = frame,
269
+ .point = point,
270
+ };
271
+ eventEmitter->onCalloutPress(data);
272
+ }
273
+ };
274
+
275
+ }
276
+
277
+ - (void)mountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView index:(NSInteger)index{
278
+ if (!_view){
279
+ [self prepareMarkerView];
280
+ }
281
+ id<RCTComponent> paperView = [childComponentView getPaperViewFromChildComponentView];
282
+ if (paperView){
283
+ [_view insertReactSubview:paperView atIndex:index];
284
+ } else {
285
+ [_view insertReactSubview:childComponentView atIndex:index];
286
+ }
287
+ }
288
+
289
+ - (void) unmountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView index:(NSInteger)index
290
+ {
291
+ id<RCTComponent> paperView = [childComponentView getPaperViewFromChildComponentView];
292
+ if (paperView){
293
+ [_view removeReactSubview:paperView];
294
+ } else {
295
+ [_view removeReactSubview:childComponentView];
296
+ }
297
+ }
298
+ - (instancetype)initWithFrame:(CGRect)frame
299
+ {
300
+ if (self = [super initWithFrame:frame]) {
301
+ [self prepareMarkerView];
302
+ }
303
+
304
+ return self;
305
+ }
306
+
307
+ - (void)updateProps:(Props::Shared const &)props oldProps:(Props::Shared const &)oldProps
308
+ {
309
+ [self prepareMarkerView];
310
+ const auto &oldViewProps = *std::static_pointer_cast<RNMapsMarkerProps const>(_props);
311
+ const auto &newViewProps = *std::static_pointer_cast<RNMapsMarkerProps const>(props);
312
+ BOOL completionHandlerCalled = false;
313
+
314
+ #define REMAP_MAPVIEW_PROP(name) \
315
+ if (oldViewProps.name != newViewProps.name) { \
316
+ _view.name = newViewProps.name; \
317
+ }
318
+
319
+ #define REMAP_MAPVIEW_STRING_PROP(name) \
320
+ if (oldViewProps.name != newViewProps.name) { \
321
+ _view.name = RCTNSStringFromString(newViewProps.name); \
322
+ }
323
+
324
+ #define REMAP_MAPVIEW_COLOR_PROP(name) \
325
+ if (oldViewProps.name != newViewProps.name) { \
326
+ _view.name = RCTUIColorFromSharedColor(newViewProps.name); \
327
+ }
328
+
329
+ #define REMAP_MAPVIEW_POINT_PROP(name) \
330
+ if (newViewProps.name.x != oldViewProps.name.x || \
331
+ newViewProps.name.y != oldViewProps.name.y) { \
332
+ _view.name = CGPointMake(newViewProps.name.x, newViewProps.name.y); \
333
+ }
334
+
335
+ if (newViewProps.zIndex != oldViewProps.zIndex){
336
+ if (newViewProps.zIndex.has_value()){
337
+ _view.zIndex = newViewProps.zIndex.value();
338
+ } else {
339
+ // default
340
+ _view.zIndex = 0;
341
+ }
342
+ }
343
+ if (newViewProps.image != oldViewProps.image){
344
+ if (newViewProps.image.uri.size()){
345
+ [_view setImageSrc:RCTNSStringFromString(newViewProps.image.uri)];
346
+ completionHandlerCalled = true;
347
+ } else {
348
+ [_view setImageSrc:nil];
349
+ }
350
+ }
351
+
352
+ REMAP_MAPVIEW_PROP(useLegacyPinView)
353
+
354
+
355
+ REMAP_MAPVIEW_PROP(opacity)
356
+ REMAP_MAPVIEW_PROP(draggable)
357
+ REMAP_MAPVIEW_PROP(isPreselected)
358
+
359
+ REMAP_MAPVIEW_COLOR_PROP(pinColor)
360
+
361
+
362
+ REMAP_MAPVIEW_POINT_PROP(calloutOffset)
363
+ if (newViewProps.coordinate.latitude != oldViewProps.coordinate.latitude ||
364
+ newViewProps.coordinate.longitude != oldViewProps.coordinate.longitude) {
365
+ CLLocationCoordinate2D coordinates = CLLocationCoordinate2DMake(
366
+ newViewProps.coordinate.latitude,
367
+ newViewProps.coordinate.longitude);
368
+ _view.coordinate = coordinates;
369
+ }
370
+
371
+
372
+ if (newViewProps.description != oldViewProps.description){
373
+ _view.subtitle = RCTNSStringFromString(newViewProps.description);
374
+ }
375
+ REMAP_MAPVIEW_STRING_PROP(title)
376
+ REMAP_MAPVIEW_STRING_PROP(identifier)
377
+ if (newViewProps.titleVisibility != oldViewProps.titleVisibility){
378
+ switch (newViewProps.titleVisibility) {
379
+ case RNMapsMarkerTitleVisibility::Visible:
380
+ [_view setTitleVisibility:MKFeatureVisibilityVisible];
381
+ break;
382
+ case RNMapsMarkerTitleVisibility::Adaptive:
383
+ [_view setTitleVisibility:MKFeatureVisibilityAdaptive];
384
+ break;
385
+ case RNMapsMarkerTitleVisibility::Hidden:
386
+ [_view setTitleVisibility:MKFeatureVisibilityHidden];
387
+ break;
388
+ }
389
+ }
390
+ if (newViewProps.subtitleVisibility != oldViewProps.subtitleVisibility){
391
+ switch (newViewProps.subtitleVisibility) {
392
+ case RNMapsMarkerSubtitleVisibility::Visible:
393
+ [_view setSubtitleVisibility:MKFeatureVisibilityVisible];
394
+ break;
395
+ case RNMapsMarkerSubtitleVisibility::Adaptive:
396
+ [_view setSubtitleVisibility:MKFeatureVisibilityAdaptive];
397
+ break;
398
+ case RNMapsMarkerSubtitleVisibility::Hidden:
399
+ [_view setSubtitleVisibility:MKFeatureVisibilityHidden];
400
+ break;
401
+
402
+ }
403
+ }
404
+
405
+ if (newViewProps.displayPriority != oldViewProps.displayPriority){
406
+ switch (newViewProps.displayPriority) {
407
+ case RNMapsMarkerDisplayPriority::Required:
408
+ [_view setDisplayPriority:MKFeatureDisplayPriorityRequired];
409
+ break;
410
+ case RNMapsMarkerDisplayPriority::High:
411
+ [_view setDisplayPriority:MKFeatureDisplayPriorityDefaultHigh];
412
+ break;
413
+ case RNMapsMarkerDisplayPriority::Low:
414
+ [_view setDisplayPriority:MKFeatureDisplayPriorityDefaultLow];
415
+ break;
416
+
417
+ }
418
+ }
419
+
420
+
421
+ [super updateProps:props oldProps:oldProps];
422
+ }
423
+
424
+
425
+ @end
426
+
427
+ Class<RCTComponentViewProtocol> RNMapsMarkerCls(void)
428
+ {
429
+ return RNMapsMarkerView.class;
430
+ }
@@ -0,0 +1,21 @@
1
+ //
2
+ // RNMapsMarkerManager.m
3
+ // AirMaps
4
+ //
5
+ // Created by Salah Ghanim on 23.11.24.
6
+ // Copyright © 2024 react-native-maps. All rights reserved.
7
+ //
8
+
9
+ #import <React/RCTLog.h>
10
+ #import <React/RCTUIManager.h>
11
+ #import <React/RCTViewManager.h>
12
+
13
+ @interface RNMapsMarkerViewManager : RCTViewManager
14
+ @end
15
+
16
+ @implementation RNMapsMarkerViewManager
17
+
18
+ RCT_EXPORT_MODULE(RNMapsMarkerViewManager)
19
+
20
+
21
+ @end
@@ -0,0 +1,20 @@
1
+ //
2
+ // Created by Leland Richardson on 12/27/15.
3
+ // Copyright (c) 2015 Facebook. All rights reserved.
4
+ //
5
+
6
+ #import "UIView+AirMap.h"
7
+
8
+ @implementation UIView (AirMap)
9
+
10
+ - (UIView *) getPaperViewFromChildComponentView {
11
+ // Check if the childComponentView responds to the "adapter" selector
12
+ if ([self respondsToSelector:@selector(paperView)]) {
13
+ // Safely return the paperView
14
+ return [self valueForKey:@"paperView"];
15
+ }
16
+ // Return nil if paperView is not accessible
17
+ return nil;
18
+ }
19
+
20
+ @end
@@ -0,0 +1,11 @@
1
+ //
2
+ // Created by Salah Ghanim on 29/12/2024.
3
+ // Copyright (c) 2015 Facebook. All rights reserved.
4
+ //
5
+
6
+ #import <UIKit/UIKit.h>
7
+
8
+ @interface UIView (AirMap)
9
+ - (UIView *) getPaperViewFromChildComponentView;
10
+
11
+ @end
@@ -28,6 +28,13 @@
28
28
  4E0CFBDE2B388F2B0017E126 /* RCTComponentData+Maps.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E0CFBDD2B388F2B0017E126 /* RCTComponentData+Maps.m */; };
29
29
  4E430F272CF20153006E4F41 /* RNMapsMarkerManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4E430F262CF20153006E4F41 /* RNMapsMarkerManager.mm */; };
30
30
  4E430F2A2CF20305006E4F41 /* RNMapsMarker.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4E430F292CF20305006E4F41 /* RNMapsMarker.mm */; };
31
+ 4E84CA362D3C4ACF00D23ADD /* EventEmitters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4E84CA282D3C4ACF00D23ADD /* EventEmitters.cpp */; };
32
+ 4E84CA372D3C4ACF00D23ADD /* RNMapsSpecsJSI-generated.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4E84CA342D3C4ACF00D23ADD /* RNMapsSpecsJSI-generated.cpp */; };
33
+ 4E84CA382D3C4ACF00D23ADD /* Props.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4E84CA2A2D3C4ACF00D23ADD /* Props.cpp */; };
34
+ 4E84CA392D3C4ACF00D23ADD /* ShadowNodes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4E84CA2F2D3C4ACF00D23ADD /* ShadowNodes.cpp */; };
35
+ 4E84CA3A2D3C4ACF00D23ADD /* RNMapsSpecs-generated.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4E84CA2D2D3C4ACF00D23ADD /* RNMapsSpecs-generated.mm */; };
36
+ 4E84CA3B2D3C4ACF00D23ADD /* ComponentDescriptors.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4E84CA262D3C4ACF00D23ADD /* ComponentDescriptors.cpp */; };
37
+ 4E84CA3C2D3C4ACF00D23ADD /* States.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4E84CA312D3C4ACF00D23ADD /* States.cpp */; };
31
38
  53D31636202E723B00B55447 /* AIRMapOverlayManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 53D31635202E723B00B55447 /* AIRMapOverlayManager.m */; };
32
39
  53D3163A202E72FC00B55447 /* AIRMapOverlay.m in Sources */ = {isa = PBXBuildFile; fileRef = 53D31639202E72FC00B55447 /* AIRMapOverlay.m */; };
33
40
  53D3163D202E734F00B55447 /* AIRMapOverlayRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 53D3163C202E734F00B55447 /* AIRMapOverlayRenderer.m */; };
@@ -122,6 +129,21 @@
122
129
  4E430F262CF20153006E4F41 /* RNMapsMarkerManager.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = RNMapsMarkerManager.mm; sourceTree = "<group>"; };
123
130
  4E430F282CF20305006E4F41 /* RNMapsMarker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RNMapsMarker.h; sourceTree = "<group>"; };
124
131
  4E430F292CF20305006E4F41 /* RNMapsMarker.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = RNMapsMarker.mm; sourceTree = "<group>"; };
132
+ 4E84CA252D3C4ACF00D23ADD /* ComponentDescriptors.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ComponentDescriptors.h; sourceTree = "<group>"; };
133
+ 4E84CA262D3C4ACF00D23ADD /* ComponentDescriptors.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ComponentDescriptors.cpp; sourceTree = "<group>"; };
134
+ 4E84CA272D3C4ACF00D23ADD /* EventEmitters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EventEmitters.h; sourceTree = "<group>"; };
135
+ 4E84CA282D3C4ACF00D23ADD /* EventEmitters.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = EventEmitters.cpp; sourceTree = "<group>"; };
136
+ 4E84CA292D3C4ACF00D23ADD /* Props.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Props.h; sourceTree = "<group>"; };
137
+ 4E84CA2A2D3C4ACF00D23ADD /* Props.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Props.cpp; sourceTree = "<group>"; };
138
+ 4E84CA2B2D3C4ACF00D23ADD /* RCTComponentViewHelpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RCTComponentViewHelpers.h; sourceTree = "<group>"; };
139
+ 4E84CA2C2D3C4ACF00D23ADD /* RNMapsSpecs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RNMapsSpecs.h; sourceTree = "<group>"; };
140
+ 4E84CA2D2D3C4ACF00D23ADD /* RNMapsSpecs-generated.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = "RNMapsSpecs-generated.mm"; sourceTree = "<group>"; };
141
+ 4E84CA2E2D3C4ACF00D23ADD /* ShadowNodes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ShadowNodes.h; sourceTree = "<group>"; };
142
+ 4E84CA2F2D3C4ACF00D23ADD /* ShadowNodes.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ShadowNodes.cpp; sourceTree = "<group>"; };
143
+ 4E84CA302D3C4ACF00D23ADD /* States.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = States.h; sourceTree = "<group>"; };
144
+ 4E84CA312D3C4ACF00D23ADD /* States.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = States.cpp; sourceTree = "<group>"; };
145
+ 4E84CA332D3C4ACF00D23ADD /* RNMapsSpecsJSI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RNMapsSpecsJSI.h; sourceTree = "<group>"; };
146
+ 4E84CA342D3C4ACF00D23ADD /* RNMapsSpecsJSI-generated.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "RNMapsSpecsJSI-generated.cpp"; sourceTree = "<group>"; };
125
147
  53D31635202E723B00B55447 /* AIRMapOverlayManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AIRMapOverlayManager.m; sourceTree = "<group>"; };
126
148
  53D31637202E725E00B55447 /* AIRMapOverlayManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AIRMapOverlayManager.h; sourceTree = "<group>"; };
127
149
  53D31638202E72D500B55447 /* AIRMapOverlay.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AIRMapOverlay.h; sourceTree = "<group>"; };
@@ -208,6 +230,7 @@
208
230
  11FA5C481C4A1296003AC2EE = {
209
231
  isa = PBXGroup;
210
232
  children = (
233
+ 4E84CA352D3C4ACF00D23ADD /* generated */,
211
234
  4E0A36152BFB4E76009FCCE4 /* PrivacyInfo.xcprivacy */,
212
235
  9B9498A32017EF9D00158761 /* AirGoogleMaps */,
213
236
  62AEC4D31FD5A0AA003225E0 /* AIRMapLocalTileOverlay.m */,
@@ -297,6 +320,36 @@
297
320
  path = AirMaps;
298
321
  sourceTree = "<group>";
299
322
  };
323
+ 4E84CA322D3C4ACF00D23ADD /* RNMapsSpecs */ = {
324
+ isa = PBXGroup;
325
+ children = (
326
+ 4E84CA252D3C4ACF00D23ADD /* ComponentDescriptors.h */,
327
+ 4E84CA262D3C4ACF00D23ADD /* ComponentDescriptors.cpp */,
328
+ 4E84CA272D3C4ACF00D23ADD /* EventEmitters.h */,
329
+ 4E84CA282D3C4ACF00D23ADD /* EventEmitters.cpp */,
330
+ 4E84CA292D3C4ACF00D23ADD /* Props.h */,
331
+ 4E84CA2A2D3C4ACF00D23ADD /* Props.cpp */,
332
+ 4E84CA2B2D3C4ACF00D23ADD /* RCTComponentViewHelpers.h */,
333
+ 4E84CA2C2D3C4ACF00D23ADD /* RNMapsSpecs.h */,
334
+ 4E84CA2D2D3C4ACF00D23ADD /* RNMapsSpecs-generated.mm */,
335
+ 4E84CA2E2D3C4ACF00D23ADD /* ShadowNodes.h */,
336
+ 4E84CA2F2D3C4ACF00D23ADD /* ShadowNodes.cpp */,
337
+ 4E84CA302D3C4ACF00D23ADD /* States.h */,
338
+ 4E84CA312D3C4ACF00D23ADD /* States.cpp */,
339
+ );
340
+ path = RNMapsSpecs;
341
+ sourceTree = "<group>";
342
+ };
343
+ 4E84CA352D3C4ACF00D23ADD /* generated */ = {
344
+ isa = PBXGroup;
345
+ children = (
346
+ 4E84CA322D3C4ACF00D23ADD /* RNMapsSpecs */,
347
+ 4E84CA332D3C4ACF00D23ADD /* RNMapsSpecsJSI.h */,
348
+ 4E84CA342D3C4ACF00D23ADD /* RNMapsSpecsJSI-generated.cpp */,
349
+ );
350
+ path = generated;
351
+ sourceTree = "<group>";
352
+ };
300
353
  9B9498A32017EF9D00158761 /* AirGoogleMaps */ = {
301
354
  isa = PBXGroup;
302
355
  children = (
@@ -445,6 +498,13 @@
445
498
  1125B2DF1C4AD3DA007D0023 /* AIRMapCoordinate.m in Sources */,
446
499
  9B9498D62017EFB800158761 /* AIRGoogleMapCircleManager.m in Sources */,
447
500
  8BC85FB02107CFEC0006CEA5 /* AIRGoogleMapOverlay.m in Sources */,
501
+ 4E84CA362D3C4ACF00D23ADD /* EventEmitters.cpp in Sources */,
502
+ 4E84CA372D3C4ACF00D23ADD /* RNMapsSpecsJSI-generated.cpp in Sources */,
503
+ 4E84CA382D3C4ACF00D23ADD /* Props.cpp in Sources */,
504
+ 4E84CA392D3C4ACF00D23ADD /* ShadowNodes.cpp in Sources */,
505
+ 4E84CA3A2D3C4ACF00D23ADD /* RNMapsSpecs-generated.mm in Sources */,
506
+ 4E84CA3B2D3C4ACF00D23ADD /* ComponentDescriptors.cpp in Sources */,
507
+ 4E84CA3C2D3C4ACF00D23ADD /* States.cpp in Sources */,
448
508
  1125B2F21C4AD445007D0023 /* SMCalloutView.m in Sources */,
449
509
  2163AA501FEAEDD100BBEC95 /* AIRMapPolylineRenderer.m in Sources */,
450
510
  9B9498D02017EFB800158761 /* AIRGoogleMapPolylineManager.m in Sources */,
@@ -0,0 +1,25 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+
9
+ #import <Foundation/Foundation.h>
10
+
11
+ #if __has_include(<React-RCTAppDelegate/RCTDependencyProvider.h>)
12
+ #import <React-RCTAppDelegate/RCTDependencyProvider.h>
13
+ #elif __has_include(<React_RCTAppDelegate/RCTDependencyProvider.h>)
14
+ #import <React_RCTAppDelegate/RCTDependencyProvider.h>
15
+ #else
16
+ #import "RCTDependencyProvider.h"
17
+ #endif
18
+
19
+ NS_ASSUME_NONNULL_BEGIN
20
+
21
+ @interface RCTAppDependencyProvider : NSObject <RCTDependencyProvider>
22
+
23
+ @end
24
+
25
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,55 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #import "RCTAppDependencyProvider.h"
9
+ #import <ReactCodegen/RCTModulesConformingToProtocolsProvider.h>
10
+ #import <ReactCodegen/RCTThirdPartyComponentsProvider.h>
11
+
12
+ @implementation RCTAppDependencyProvider {
13
+ NSArray<NSString *> * _URLRequestHandlerClassNames;
14
+ NSArray<NSString *> * _imageDataDecoderClassNames;
15
+ NSArray<NSString *> * _imageURLLoaderClassNames;
16
+ NSDictionary<NSString *,Class<RCTComponentViewProtocol>> * _thirdPartyFabricComponents;
17
+ }
18
+
19
+ - (nonnull NSArray<NSString *> *)URLRequestHandlerClassNames {
20
+ static dispatch_once_t requestUrlToken;
21
+ dispatch_once(&requestUrlToken, ^{
22
+ self->_URLRequestHandlerClassNames = RCTModulesConformingToProtocolsProvider.URLRequestHandlerClassNames;
23
+ });
24
+
25
+ return _URLRequestHandlerClassNames;
26
+ }
27
+
28
+ - (nonnull NSArray<NSString *> *)imageDataDecoderClassNames {
29
+ static dispatch_once_t dataDecoderToken;
30
+ dispatch_once(&dataDecoderToken, ^{
31
+ _imageDataDecoderClassNames = RCTModulesConformingToProtocolsProvider.imageDataDecoderClassNames;
32
+ });
33
+
34
+ return _imageDataDecoderClassNames;
35
+ }
36
+
37
+ - (nonnull NSArray<NSString *> *)imageURLLoaderClassNames {
38
+ static dispatch_once_t urlLoaderToken;
39
+ dispatch_once(&urlLoaderToken, ^{
40
+ _imageURLLoaderClassNames = RCTModulesConformingToProtocolsProvider.imageURLLoaderClassNames;
41
+ });
42
+
43
+ return _imageURLLoaderClassNames;
44
+ }
45
+
46
+ - (nonnull NSDictionary<NSString *,Class<RCTComponentViewProtocol>> *)thirdPartyFabricComponents {
47
+ static dispatch_once_t nativeComponentsToken;
48
+ dispatch_once(&nativeComponentsToken, ^{
49
+ _thirdPartyFabricComponents = RCTThirdPartyComponentsProvider.thirdPartyFabricComponents;
50
+ });
51
+
52
+ return _thirdPartyFabricComponents;
53
+ }
54
+
55
+ @end