react-native-maps 0.31.0 → 1.0.0-alpha.1

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 (301) hide show
  1. package/android/build.gradle +89 -33
  2. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  3. package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  4. package/android/gradlew +251 -0
  5. package/android/gradlew.bat +94 -0
  6. package/android/src/main/AndroidManifest.xml +1 -5
  7. package/android/src/main/RCTAppDependencyProvider.h +25 -0
  8. package/android/src/main/RCTAppDependencyProvider.mm +55 -0
  9. package/android/src/main/RCTModulesConformingToProtocolsProvider.h +18 -0
  10. package/android/src/main/RCTModulesConformingToProtocolsProvider.mm +33 -0
  11. package/android/src/main/RCTThirdPartyComponentsProvider.h +16 -0
  12. package/android/src/main/RCTThirdPartyComponentsProvider.mm +28 -0
  13. package/android/src/main/ReactAppDependencyProvider.podspec +34 -0
  14. package/android/src/main/java/com/facebook/fbreact/specs/NativeAirMapsModuleSpec.java +63 -0
  15. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCalloutManagerDelegate.java +35 -0
  16. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCalloutManagerInterface.java +17 -0
  17. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCircleManagerDelegate.java +49 -0
  18. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCircleManagerInterface.java +23 -0
  19. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsGooglePolygonManagerDelegate.java +49 -0
  20. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsGooglePolygonManagerInterface.java +23 -0
  21. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMapViewManagerDelegate.java +209 -0
  22. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMapViewManagerInterface.java +74 -0
  23. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMarkerManagerDelegate.java +104 -0
  24. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMarkerManagerInterface.java +39 -0
  25. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsOverlayManagerDelegate.java +45 -0
  26. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsOverlayManagerInterface.java +22 -0
  27. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsPolylineManagerDelegate.java +58 -0
  28. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsPolylineManagerInterface.java +26 -0
  29. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsUrlTileManagerDelegate.java +62 -0
  30. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsUrlTileManagerInterface.java +27 -0
  31. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsWMSTileManagerDelegate.java +56 -0
  32. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsWMSTileManagerInterface.java +25 -0
  33. package/android/src/main/java/com/rnmaps/fabric/CalloutManager.java +77 -0
  34. package/android/src/main/java/com/rnmaps/fabric/CircleManager.java +94 -0
  35. package/android/src/main/java/com/rnmaps/fabric/JSONUtil.java +86 -0
  36. package/android/src/main/java/com/rnmaps/fabric/MapViewManager.java +623 -0
  37. package/android/src/main/java/com/rnmaps/fabric/MarkerManager.java +258 -0
  38. package/android/src/main/java/com/rnmaps/fabric/NativeAirMapsModule.java +284 -0
  39. package/android/src/main/java/com/rnmaps/fabric/OverlayManager.java +101 -0
  40. package/android/src/main/java/com/rnmaps/fabric/PolygonManager.java +89 -0
  41. package/android/src/main/java/com/rnmaps/fabric/PolylineManager.java +121 -0
  42. package/android/src/main/java/com/rnmaps/fabric/UrlTileManager.java +124 -0
  43. package/android/src/main/java/com/rnmaps/fabric/WMSTileManager.java +114 -0
  44. package/android/src/main/java/com/rnmaps/fabric/event/OnCalloutPressEvent.java +25 -0
  45. package/android/src/main/java/com/rnmaps/fabric/event/OnDeselectEvent.java +28 -0
  46. package/android/src/main/java/com/rnmaps/fabric/event/OnDoublePressEvent.java +27 -0
  47. package/android/src/main/java/com/rnmaps/fabric/event/OnDragEndEvent.java +28 -0
  48. package/android/src/main/java/com/rnmaps/fabric/event/OnDragEvent.java +28 -0
  49. package/android/src/main/java/com/rnmaps/fabric/event/OnDragStartEvent.java +28 -0
  50. package/android/src/main/java/com/rnmaps/fabric/event/OnIndoorBuildingFocusedEvent.java +28 -0
  51. package/android/src/main/java/com/rnmaps/fabric/event/OnIndoorLevelActivatedEvent.java +28 -0
  52. package/android/src/main/java/com/rnmaps/fabric/event/OnKmlReadyEvent.java +28 -0
  53. package/android/src/main/java/com/rnmaps/fabric/event/OnLongPressEvent.java +28 -0
  54. package/android/src/main/java/com/rnmaps/fabric/event/OnMapLoadedEvent.java +29 -0
  55. package/android/src/main/java/com/rnmaps/fabric/event/OnMapReadyEvent.java +29 -0
  56. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDeselectEvent.java +28 -0
  57. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragEndEvent.java +28 -0
  58. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragEvent.java +28 -0
  59. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragStartEvent.java +28 -0
  60. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerPressEvent.java +28 -0
  61. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerSelectEvent.java +28 -0
  62. package/android/src/main/java/com/rnmaps/fabric/event/OnPanDragEvent.java +28 -0
  63. package/android/src/main/java/com/rnmaps/fabric/event/OnPoiClickEvent.java +27 -0
  64. package/android/src/main/java/com/rnmaps/fabric/event/OnPressEvent.java +27 -0
  65. package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeCompleteEvent.java +30 -0
  66. package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeEvent.java +48 -0
  67. package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeStartEvent.java +33 -0
  68. package/android/src/main/java/com/rnmaps/fabric/event/OnSelectEvent.java +28 -0
  69. package/android/src/main/java/com/rnmaps/fabric/event/OnUserLocationChangeEvent.java +28 -0
  70. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/FileUtil.java +3 -6
  71. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/FusedLocationSource.java +5 -2
  72. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ImageReadable.java +1 -1
  73. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ImageReader.java +5 -7
  74. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ImageUtil.java +1 -2
  75. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/LatLngBoundsUtils.java +1 -1
  76. package/android/src/main/java/com/rnmaps/maps/MapAirModulePackage.java +98 -0
  77. package/android/src/main/java/com/rnmaps/maps/MapCallout.java +41 -0
  78. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapCalloutManager.java → rnmaps/maps/MapCalloutManager.java} +6 -6
  79. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapCircle.java → rnmaps/maps/MapCircle.java} +34 -8
  80. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapCircleManager.java → rnmaps/maps/MapCircleManager.java} +15 -20
  81. package/android/src/main/java/com/rnmaps/maps/MapFeature.java +17 -0
  82. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapGradientPolyline.java → rnmaps/maps/MapGradientPolyline.java} +9 -12
  83. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapGradientPolylineManager.java → rnmaps/maps/MapGradientPolylineManager.java} +13 -18
  84. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapHeatmap.java → rnmaps/maps/MapHeatmap.java} +8 -9
  85. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapHeatmapManager.java → rnmaps/maps/MapHeatmapManager.java} +8 -8
  86. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapLocalTile.java → rnmaps/maps/MapLocalTile.java} +19 -16
  87. package/android/src/main/java/com/rnmaps/maps/MapLocalTileManager.java +54 -0
  88. package/android/src/main/java/com/rnmaps/maps/MapManager.java +504 -0
  89. package/android/src/main/java/com/rnmaps/maps/MapMarker.java +706 -0
  90. package/android/src/main/java/com/rnmaps/maps/MapMarkerManager.java +368 -0
  91. package/android/src/main/java/com/rnmaps/maps/MapModule.java +283 -0
  92. package/android/src/main/java/com/rnmaps/maps/MapOverlay.java +262 -0
  93. package/android/src/main/java/com/rnmaps/maps/MapOverlayManager.java +97 -0
  94. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapPolygon.java → rnmaps/maps/MapPolygon.java} +73 -9
  95. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapPolygonManager.java → rnmaps/maps/MapPolygonManager.java} +22 -22
  96. package/android/src/main/java/com/rnmaps/maps/MapPolyline.java +230 -0
  97. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapPolylineManager.java → rnmaps/maps/MapPolylineManager.java} +18 -38
  98. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapTileProvider.java → rnmaps/maps/MapTileProvider.java} +55 -76
  99. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapTileWorker.java → rnmaps/maps/MapTileWorker.java} +7 -14
  100. package/android/src/main/java/com/rnmaps/maps/MapUIBlock.java +64 -0
  101. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapUrlTile.java → rnmaps/maps/MapUrlTile.java} +29 -29
  102. package/android/src/main/java/com/rnmaps/maps/MapUrlTileManager.java +87 -0
  103. package/android/src/main/java/com/rnmaps/maps/MapView.java +1844 -0
  104. package/android/src/main/java/com/{airbnb/android/react/maps/AirMapWMSTile.java → rnmaps/maps/MapWMSTile.java} +11 -17
  105. package/android/src/main/java/com/rnmaps/maps/MapWMSTileManager.java +81 -0
  106. package/android/src/main/java/com/rnmaps/maps/MapsPackage.java +45 -0
  107. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/RegionChangeEvent.java +1 -1
  108. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/SizeReportingShadowNode.java +1 -1
  109. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ViewAttacherGroup.java +2 -7
  110. package/android/src/main/java/com/{airbnb/android/react → rnmaps}/maps/ViewChangesTracker.java +12 -11
  111. package/android/src/main/jni/CMakeLists.txt +36 -0
  112. package/android/src/main/jni/RNMapsSpecs-generated.cpp +68 -0
  113. package/android/src/main/jni/RNMapsSpecs.h +31 -0
  114. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ComponentDescriptors.cpp +31 -0
  115. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ComponentDescriptors.h +33 -0
  116. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/EventEmitters.cpp +979 -0
  117. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/EventEmitters.h +860 -0
  118. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/Props.cpp +227 -0
  119. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/Props.h +1297 -0
  120. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/RNMapsSpecsJSI-generated.cpp +74 -0
  121. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/RNMapsSpecsJSI.h +268 -0
  122. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ShadowNodes.cpp +26 -0
  123. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ShadowNodes.h +131 -0
  124. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/States.cpp +16 -0
  125. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/States.h +137 -0
  126. package/app.plugin.js +1 -0
  127. package/ios/AirGoogleMaps/AIRGMSMarker.h +2 -0
  128. package/ios/AirGoogleMaps/AIRGoogleMap.h +22 -12
  129. package/ios/AirGoogleMaps/{AIRGoogleMap.m → AIRGoogleMap.mm} +407 -130
  130. package/ios/AirGoogleMaps/AIRGoogleMapCircle.h +2 -3
  131. package/ios/AirGoogleMaps/AIRGoogleMapCircle.m +42 -3
  132. package/ios/AirGoogleMaps/AIRGoogleMapCoordinate.h +13 -0
  133. package/ios/AirGoogleMaps/AIRGoogleMapCoordinate.m +10 -0
  134. package/ios/AirGoogleMaps/AIRGoogleMapHeatmap.h +1 -1
  135. package/ios/AirGoogleMaps/AIRGoogleMapManager.h +11 -0
  136. package/ios/AirGoogleMaps/AIRGoogleMapManager.mm +543 -0
  137. package/ios/AirGoogleMaps/AIRGoogleMapMarker.h +4 -0
  138. package/ios/AirGoogleMaps/AIRGoogleMapMarker.m +369 -237
  139. package/ios/AirGoogleMaps/AIRGoogleMapMarkerManager.m +3 -2
  140. package/ios/AirGoogleMaps/AIRGoogleMapOverlay.h +0 -1
  141. package/ios/AirGoogleMaps/AIRGoogleMapPolygon.h +7 -6
  142. package/ios/AirGoogleMaps/AIRGoogleMapPolygon.m +62 -5
  143. package/ios/AirGoogleMaps/AIRGoogleMapPolygonManager.m +3 -3
  144. package/ios/AirGoogleMaps/AIRGoogleMapPolyline.h +4 -3
  145. package/ios/AirGoogleMaps/AIRGoogleMapPolyline.m +9 -9
  146. package/ios/AirGoogleMaps/AIRGoogleMapPolylineManager.m +2 -2
  147. package/ios/AirGoogleMaps/AIRGoogleMapUrlTile.m +2 -2
  148. package/ios/AirGoogleMaps/AIRGoogleMapWMSTile.h +1 -1
  149. package/ios/AirGoogleMaps/AIRGoogleMapWMSTile.m +4 -4
  150. package/ios/AirGoogleMaps/RCTConvert+GMSMapViewType.h +3 -0
  151. package/ios/AirGoogleMaps/RCTConvert+GMSMapViewType.m +18 -0
  152. package/ios/AirGoogleMaps/RNMapsGoogleMapView.h +29 -0
  153. package/ios/AirGoogleMaps/RNMapsGoogleMapView.mm +678 -0
  154. package/ios/AirGoogleMaps/RNMapsGoogleMapViewManager.mm +40 -0
  155. package/ios/AirGoogleMaps/RNMapsGooglePolygonView.h +26 -0
  156. package/ios/AirGoogleMaps/RNMapsGooglePolygonView.mm +226 -0
  157. package/ios/AirGoogleMaps/RNMapsGooglePolygonViewManager.mm +26 -0
  158. package/ios/AirGoogleMaps/Resources/GoogleMapsPrivacy.bundle/PrivacyInfo.xcprivacy +110 -0
  159. package/ios/AirMaps/AIRMap.h +19 -14
  160. package/ios/AirMaps/{AIRMap.m → AIRMap.mm} +333 -120
  161. package/ios/AirMaps/AIRMapCircle.m +1 -53
  162. package/ios/AirMaps/AIRMapCoordinate.m +2 -4
  163. package/ios/AirMaps/AIRMapManager.m +64 -218
  164. package/ios/AirMaps/AIRMapMarker.h +5 -0
  165. package/ios/AirMaps/AIRMapMarker.m +180 -69
  166. package/ios/AirMaps/AIRMapMarkerManager.m +3 -0
  167. package/ios/AirMaps/AIRMapOverlay.m +2 -2
  168. package/ios/AirMaps/AIRMapPolygon.m +0 -52
  169. package/ios/AirMaps/AIRMapPolyline.m +3 -2
  170. package/ios/AirMaps/AIRMapWMSTile.m +8 -8
  171. package/ios/AirMaps/Callout/SMCalloutView.m +1 -1
  172. package/ios/AirMaps/FabricPlaceholders/PlaceHolderGoogleMapView.h +25 -0
  173. package/ios/AirMaps/FabricPlaceholders/PlaceHolderGoogleMapView.mm +77 -0
  174. package/ios/AirMaps/FabricPlaceholders/PlaceHolderPolygonView.h +25 -0
  175. package/ios/AirMaps/FabricPlaceholders/PlaceHolderPolygonView.mm +52 -0
  176. package/ios/AirMaps/RCTComponentData+Maps.h +13 -0
  177. package/ios/AirMaps/RCTComponentData+Maps.m +55 -0
  178. package/ios/AirMaps/RCTConvert+AirMap.h +6 -1
  179. package/ios/AirMaps/RCTConvert+AirMap.m +18 -0
  180. package/ios/AirMaps/RNMapsAirModule.h +15 -0
  181. package/ios/AirMaps/RNMapsAirModule.mm +164 -0
  182. package/ios/AirMaps/RNMapsDefines.h +1 -0
  183. package/ios/AirMaps/RNMapsMapView.h +27 -0
  184. package/ios/AirMaps/RNMapsMapView.mm +577 -0
  185. package/ios/AirMaps/RNMapsMapViewManager.mm +42 -0
  186. package/ios/AirMaps/RNMapsMarkerView.h +24 -0
  187. package/ios/AirMaps/RNMapsMarkerView.mm +439 -0
  188. package/ios/AirMaps/RNMapsMarkerViewManager.mm +28 -0
  189. package/ios/AirMaps/UIView+AirMap.h +11 -0
  190. package/ios/AirMaps/UIView+AirMap.m +20 -0
  191. package/ios/AirMaps/module.modulemap +6 -0
  192. package/ios/AirMaps.xcodeproj/project.pbxproj +44 -4
  193. package/ios/PrivacyInfo.xcprivacy +37 -0
  194. package/ios/generated/RCTAppDependencyProvider.h +25 -0
  195. package/ios/generated/RCTAppDependencyProvider.mm +55 -0
  196. package/ios/generated/RCTModulesConformingToProtocolsProvider.h +18 -0
  197. package/ios/generated/RCTModulesConformingToProtocolsProvider.mm +33 -0
  198. package/ios/generated/RCTThirdPartyComponentsProvider.h +16 -0
  199. package/ios/generated/RCTThirdPartyComponentsProvider.mm +26 -0
  200. package/ios/generated/RNMapsAirModuleDelegate.h +24 -0
  201. package/ios/generated/RNMapsHostVewDelegate.h +17 -0
  202. package/ios/generated/RNMapsSpecs/ComponentDescriptors.cpp +29 -0
  203. package/ios/generated/RNMapsSpecs/ComponentDescriptors.h +31 -0
  204. package/ios/generated/RNMapsSpecs/EventEmitters.cpp +977 -0
  205. package/ios/generated/RNMapsSpecs/EventEmitters.h +846 -0
  206. package/ios/generated/RNMapsSpecs/Props.cpp +194 -0
  207. package/ios/generated/RNMapsSpecs/Props.h +1224 -0
  208. package/ios/generated/RNMapsSpecs/RCTComponentViewHelpers.h +591 -0
  209. package/ios/generated/RNMapsSpecs/RNMapsSpecs-generated.mm +92 -0
  210. package/ios/generated/RNMapsSpecs/RNMapsSpecs.h +137 -0
  211. package/ios/generated/RNMapsSpecs/ShadowNodes.cpp +24 -0
  212. package/ios/generated/RNMapsSpecs/ShadowNodes.h +109 -0
  213. package/ios/generated/RNMapsSpecs/States.cpp +16 -0
  214. package/ios/generated/RNMapsSpecs/States.h +113 -0
  215. package/ios/generated/RNMapsSpecsJSI-generated.cpp +74 -0
  216. package/ios/generated/RNMapsSpecsJSI.h +268 -0
  217. package/ios/generated/ReactAppDependencyProvider.podspec +34 -0
  218. package/ios/generated/module.modulemap +15 -0
  219. package/package.json +57 -34
  220. package/plugin/build/android.js +58 -0
  221. package/plugin/build/index.js +10 -0
  222. package/plugin/build/ios.js +176 -0
  223. package/plugin/build/types.js +2 -0
  224. package/react-native-maps.podspec +114 -11
  225. package/react-native.config.js +15 -0
  226. package/src/{AnimatedRegion.js → AnimatedRegion.ts} +26 -21
  227. package/src/Geojson.tsx +541 -0
  228. package/src/MapCallout.tsx +77 -0
  229. package/src/MapCalloutSubview.tsx +64 -0
  230. package/src/MapCircle.tsx +162 -0
  231. package/src/MapHeatmap.tsx +125 -0
  232. package/src/MapLocalTile.tsx +60 -0
  233. package/src/MapMarker.tsx +531 -0
  234. package/src/MapMarkerNativeComponent.ts +51 -0
  235. package/src/MapOverlay.tsx +178 -0
  236. package/src/MapPolygon.tsx +188 -0
  237. package/src/MapPolygon.types.ts +25 -0
  238. package/src/MapPolyline.tsx +215 -0
  239. package/src/MapUrlTile.tsx +169 -0
  240. package/src/MapView.tsx +1235 -0
  241. package/src/MapView.types.ts +212 -0
  242. package/src/MapView.web.ts +2 -0
  243. package/src/MapViewNativeComponent.ts +86 -0
  244. package/src/MapWMSTile.tsx +148 -0
  245. package/src/ProviderConstants.ts +2 -0
  246. package/src/createFabricMap.tsx +253 -0
  247. package/src/decorateMapComponent.ts +230 -0
  248. package/src/fixImageProp.ts +17 -0
  249. package/src/index.ts +52 -0
  250. package/src/sharedTypes.ts +101 -0
  251. package/src/sharedTypesInternal.ts +1 -0
  252. package/src/specs/NativeAirMapsModule.ts +36 -0
  253. package/src/specs/NativeComponentCallout.ts +63 -0
  254. package/src/specs/NativeComponentCircle.ts +93 -0
  255. package/src/specs/NativeComponentGoogleMapView.ts +922 -0
  256. package/src/specs/NativeComponentGooglePolygon.ts +94 -0
  257. package/src/specs/NativeComponentMapView.ts +1100 -0
  258. package/src/specs/NativeComponentMarker.ts +326 -0
  259. package/src/specs/NativeComponentOverlay.ts +98 -0
  260. package/src/specs/NativeComponentPolyline.ts +124 -0
  261. package/src/specs/NativeComponentUrlTile.ts +128 -0
  262. package/src/specs/NativeComponentWMSTile.ts +107 -0
  263. package/LICENSE +0 -21
  264. package/README.md +0 -652
  265. package/android/src/main/assets/ula.kml +0 -1214
  266. package/android/src/main/java/com/airbnb/android/react/maps/AirMapCallout.java +0 -23
  267. package/android/src/main/java/com/airbnb/android/react/maps/AirMapFeature.java +0 -18
  268. package/android/src/main/java/com/airbnb/android/react/maps/AirMapLiteManager.java +0 -20
  269. package/android/src/main/java/com/airbnb/android/react/maps/AirMapLocalTileManager.java +0 -56
  270. package/android/src/main/java/com/airbnb/android/react/maps/AirMapManager.java +0 -500
  271. package/android/src/main/java/com/airbnb/android/react/maps/AirMapMarker.java +0 -630
  272. package/android/src/main/java/com/airbnb/android/react/maps/AirMapMarkerManager.java +0 -370
  273. package/android/src/main/java/com/airbnb/android/react/maps/AirMapModule.java +0 -380
  274. package/android/src/main/java/com/airbnb/android/react/maps/AirMapOverlay.java +0 -169
  275. package/android/src/main/java/com/airbnb/android/react/maps/AirMapOverlayManager.java +0 -81
  276. package/android/src/main/java/com/airbnb/android/react/maps/AirMapPolyline.java +0 -162
  277. package/android/src/main/java/com/airbnb/android/react/maps/AirMapUrlTileManager.java +0 -97
  278. package/android/src/main/java/com/airbnb/android/react/maps/AirMapView.java +0 -1384
  279. package/android/src/main/java/com/airbnb/android/react/maps/AirMapWMSTileManager.java +0 -87
  280. package/android/src/main/java/com/airbnb/android/react/maps/MapsPackage.java +0 -65
  281. package/index.d.ts +0 -637
  282. package/ios/AirGoogleMaps/AIRGoogleMapManager.m +0 -690
  283. package/ios/User.xcconfig +0 -0
  284. package/react-native-google-maps.podspec +0 -22
  285. package/src/Geojson.js +0 -334
  286. package/src/MapCallout.js +0 -51
  287. package/src/MapCalloutSubview.js +0 -44
  288. package/src/MapCircle.js +0 -150
  289. package/src/MapHeatmap.js +0 -99
  290. package/src/MapLocalTile.js +0 -52
  291. package/src/MapMarker.js +0 -377
  292. package/src/MapOverlay.js +0 -86
  293. package/src/MapPolygon.js +0 -202
  294. package/src/MapPolyline.js +0 -168
  295. package/src/MapUrlTile.js +0 -131
  296. package/src/MapView.js +0 -1160
  297. package/src/MapView.web.js +0 -1
  298. package/src/MapWMSTile.js +0 -122
  299. package/src/ProviderConstants.js +0 -2
  300. package/src/decorateMapComponent.js +0 -112
  301. package/src/index.js +0 -31
@@ -0,0 +1,678 @@
1
+ //
2
+ // RNMapsGoogleMapView.mm
3
+ //
4
+ //
5
+ // Created by Salah Ghanim on 23.11.24.
6
+ // Copyright © 2024 react-native-maps. All rights reserved.
7
+ //
8
+ #ifdef HAVE_GOOGLE_MAPS
9
+
10
+ #import "RNMapsGoogleMapView.h"
11
+ #import "RNMapsGooglePolygonView.h"
12
+ #import "AIRGoogleMap.h"
13
+ #import "AIRGoogleMapManager.h"
14
+ #if __has_include(<ReactNativeMaps/generated/RNMapsAirModuleDelegate.h>)
15
+ #import <ReactNativeMaps/generated/RNMapsAirModuleDelegate.h>
16
+ #import <ReactNativeMaps/generated/RNMapsHostVewDelegate.h>
17
+ #import <ReactNativeMaps/generated/ComponentDescriptors.h>
18
+ #import <ReactNativeMaps/generated/EventEmitters.h>
19
+ #import <ReactNativeMaps/generated/Props.h>
20
+ #import <ReactNativeMaps/generated/RCTComponentViewHelpers.h>
21
+ #else
22
+ #import "../generated/RNMapsAirModuleDelegate.h"
23
+ #import "../generated/RNMapsSpecs/ComponentDescriptors.h"
24
+ #import "../generated/RNMapsSpecs/EventEmitters.h"
25
+ #import "../generated/RNMapsSpecs/Props.h"
26
+ #import "../generated/RNMapsSpecs/RCTComponentViewHelpers.h"
27
+ #endif
28
+ #import "RCTFabricComponentsPlugins.h"
29
+ #import <React/RCTConversions.h>
30
+ #import <React/RCTUtils.h>
31
+ #import "RCTConvert+GMSMapViewType.h"
32
+ #if __has_include(<ReactNativeMaps/RCTConvert+AirMap.h>)
33
+ #import <ReactNativeMaps/RCTConvert+AirMap.h>
34
+ #import <ReactNativeMaps/UIView+AirMap.h>
35
+ #else
36
+ #import "RCTConvert+AirMap.h"
37
+ #import "UIView+AirMap.h"
38
+ #endif
39
+
40
+
41
+ using namespace facebook::react;
42
+
43
+ @interface RNMapsGoogleMapView () <RCTRNMapsGoogleMapViewViewProtocol>
44
+ @end
45
+
46
+ @implementation RNMapsGoogleMapView {
47
+ AIRGoogleMap *_view;
48
+ AIRGoogleMapManager* _legacyMapManager;
49
+ NSMutableDictionary<NSNumber*, UIView*>* _pendingInsertsSubviews;
50
+ NSMutableArray *_polygons;
51
+ }
52
+
53
+
54
+ - (id<RNMapsAirModuleDelegate>) mapView {
55
+ return (id<RNMapsAirModuleDelegate>)_view;
56
+ }
57
+
58
+ #pragma mark - JS Commands
59
+ - (void)animateToRegion:(NSString *)regionJSON duration:(NSInteger)duration{
60
+ NSDictionary* regionDic = [RCTConvert dictonaryFromString:regionJSON];
61
+ MKCoordinateRegion region = [RCTConvert MKCoordinateRegion:regionDic];
62
+ GMSCameraPosition *camera = [AIRGoogleMap makeGMSCameraPositionFromMap:_view andMKCoordinateRegion:region];
63
+ if (duration == 0){
64
+ [_view setRegion:region];
65
+ } else {
66
+ [_view animateToCameraPosition:camera];
67
+ }
68
+ }
69
+ - (void)setCamera:(NSString *)cameraJSON{
70
+ NSDictionary* cameraDic = [RCTConvert dictonaryFromString:cameraJSON];
71
+ GMSCameraPosition* camera = [RCTConvert GMSCameraPositionWithDefaults:cameraDic existingCamera:[_view camera]];
72
+ [_view setCamera:camera];
73
+ }
74
+
75
+ - (void)animateCamera:(NSString *)cameraJSON duration:(NSInteger)duration{
76
+ NSDictionary* cameraDic = [RCTConvert dictonaryFromString:cameraJSON];
77
+ GMSCameraPosition* camera = [RCTConvert GMSCameraPositionWithDefaults:cameraDic existingCamera:[_view camera]];
78
+ [_view animateToCameraPosition:camera];
79
+ }
80
+
81
+ - (void)fitToElements:(NSString *)edgePaddingJSON animated:(BOOL)animated {
82
+ NSDictionary* edgePadding = [RCTConvert dictonaryFromString:edgePaddingJSON];
83
+ [_view fitToElementsWithEdgePadding:edgePadding animated:animated];
84
+ }
85
+
86
+ - (void)fitToSuppliedMarkers:(NSString *)markersJSON edgePaddingJSON:(NSString *)edgePaddingJSON animated:(BOOL)animated {
87
+ NSArray* markers = [RCTConvert arrayFromString:markersJSON];
88
+ NSDictionary* edgePadding = [RCTConvert dictonaryFromString:edgePaddingJSON];
89
+ [_view fitToSuppliedMarkers:markers withEdgePadding:edgePadding animated:animated];
90
+
91
+ }
92
+ - (void)fitToCoordinates:(NSString *)coordinatesJSON edgePaddingJSON:(NSString *)edgePaddingJSON animated:(BOOL)animated {
93
+ NSArray* coordinatesArr = [RCTConvert arrayFromString:coordinatesJSON];
94
+ NSMutableArray<AIRGoogleMapCoordinate*>* coordinatesArray = [NSMutableArray new];
95
+ for (id json : coordinatesArr){
96
+ [coordinatesArray addObject:[RCTConvert AIRGoogleMapCoordinate:json]];
97
+ }
98
+
99
+ NSDictionary* edgePadding = [RCTConvert dictonaryFromString:edgePaddingJSON];
100
+
101
+ [_view fitToCoordinates:coordinatesArray withEdgePadding:edgePadding animated:animated];
102
+ }
103
+ - (void) setIndoorActiveLevelIndex:(NSInteger)activeLevelIndex
104
+ {
105
+ if (!_view.indoorDisplay) {
106
+ return;
107
+ }
108
+ if ( activeLevelIndex < [_view.indoorDisplay.activeBuilding.levels count]) {
109
+ _view.indoorDisplay.activeLevel = _view.indoorDisplay.activeBuilding.levels[activeLevelIndex];
110
+ }
111
+
112
+ }
113
+
114
+ #pragma mark - Native commands
115
+
116
+ - (void)handleCommand:(const NSString *)commandName args:(const NSArray *)args
117
+ {
118
+ RCTRNMapsGoogleMapViewHandleCommand(self, commandName, args);
119
+ }
120
+
121
+
122
+ + (ComponentDescriptorProvider)componentDescriptorProvider
123
+ {
124
+ return concreteComponentDescriptorProvider<RNMapsGoogleMapViewComponentDescriptor>();
125
+ }
126
+ - (void) loadPendingInsertSubviews
127
+ {
128
+ if ([_pendingInsertsSubviews count] > 0){
129
+ NSArray<NSNumber *> *sortedKeys = [[_pendingInsertsSubviews allKeys] sortedArrayUsingSelector:@selector(compare:)];
130
+ for (NSNumber *key in sortedKeys) {
131
+ // Get the corresponding view
132
+ UIView *view = [_pendingInsertsSubviews objectForKey:key];
133
+ [_view insertReactSubview:view atIndex:[key integerValue]];
134
+ // Remove the entry from the dictionary
135
+ [_pendingInsertsSubviews removeObjectForKey:key];
136
+ }
137
+ }
138
+ }
139
+
140
+ - (void) prepareContentView {
141
+
142
+ _view = (AIRGoogleMap *)[_legacyMapManager view];
143
+ _polygons = [NSMutableArray new];
144
+
145
+ self.contentView = _view;
146
+
147
+ _view.onPress = [self](NSDictionary* dictionary) {
148
+ if (_eventEmitter) {
149
+ // Extract values from the NSDictionary
150
+ NSDictionary* coordinateDict = dictionary[@"coordinate"];
151
+ NSDictionary* positionDict = dictionary[@"position"];
152
+
153
+ // Populate the OnMapPressCoordinate struct
154
+ facebook::react::RNMapsGoogleMapViewEventEmitter::OnPressCoordinate coordinate = {
155
+ .latitude = [coordinateDict[@"latitude"] doubleValue],
156
+ .longitude = [coordinateDict[@"longitude"] doubleValue],
157
+ };
158
+
159
+ // Populate the OnMapPressPosition struct
160
+ facebook::react::RNMapsGoogleMapViewEventEmitter::OnPressPosition position = {
161
+ .x = [positionDict[@"x"] doubleValue],
162
+ .y = [positionDict[@"y"] doubleValue],
163
+ };
164
+
165
+ auto mapViewEventEmitter = std::static_pointer_cast<RNMapsGoogleMapViewEventEmitter const>(_eventEmitter);
166
+ facebook::react::RNMapsGoogleMapViewEventEmitter::OnPress data = {
167
+ .action = std::string([@"press" UTF8String]),
168
+ .position = position,
169
+ .coordinate = coordinate
170
+ };
171
+ mapViewEventEmitter->onPress(data);
172
+ }
173
+ };
174
+
175
+ _view.onLongPress = [self](NSDictionary* dictionary) {
176
+ if (_eventEmitter) {
177
+ // Extract values from the NSDictionary
178
+ NSDictionary* coordinateDict = dictionary[@"coordinate"];
179
+ NSDictionary* positionDict = dictionary[@"position"];
180
+
181
+ // Populate the OnMapPressCoordinate struct
182
+ facebook::react::RNMapsGoogleMapViewEventEmitter::OnLongPressCoordinate coordinate = {
183
+ .latitude = [coordinateDict[@"latitude"] doubleValue],
184
+ .longitude = [coordinateDict[@"longitude"] doubleValue],
185
+ };
186
+
187
+ // Populate the OnMapPressPosition struct
188
+ facebook::react::RNMapsGoogleMapViewEventEmitter::OnLongPressPosition position = {
189
+ .x = [positionDict[@"x"] doubleValue],
190
+ .y = [positionDict[@"y"] doubleValue],
191
+ };
192
+
193
+ auto mapViewEventEmitter = std::static_pointer_cast<RNMapsGoogleMapViewEventEmitter const>(_eventEmitter);
194
+ facebook::react::RNMapsGoogleMapViewEventEmitter::OnLongPress data = {
195
+ .action = std::string([@"press" UTF8String]),
196
+ .position = position,
197
+ .coordinate = coordinate
198
+ };
199
+ mapViewEventEmitter->onLongPress(data);
200
+ }
201
+ };
202
+
203
+ _view.onMapReady = [self](NSDictionary* dictionary) {
204
+ [self loadPendingInsertSubviews];
205
+ if (_eventEmitter) {
206
+ auto mapViewEventEmitter = std::static_pointer_cast<RNMapsGoogleMapViewEventEmitter const>(_eventEmitter);
207
+ facebook::react::RNMapsGoogleMapViewEventEmitter::OnMapReady data = {};
208
+ mapViewEventEmitter->onMapReady(data);
209
+ }
210
+ };
211
+
212
+ _view.onIndoorLevelActivated = [self](NSDictionary* dictionary) {
213
+ if (_eventEmitter) {
214
+
215
+ auto mapViewEventEmitter = std::static_pointer_cast<RNMapsGoogleMapViewEventEmitter const>(_eventEmitter);
216
+
217
+ facebook::react::RNMapsGoogleMapViewEventEmitter::OnIndoorLevelActivated data = {
218
+ .activeLevelIndex= (int) [dictionary[@"activeLevelIndex"] integerValue],
219
+ .name = [dictionary[@"name"] UTF8String],
220
+ .shortName = [dictionary[@"shortName"] UTF8String],
221
+ };
222
+ mapViewEventEmitter->onIndoorLevelActivated(data);
223
+ }
224
+ };
225
+
226
+ _view.onIndoorBuildingFocused = [self](NSDictionary* dictionary) {
227
+ if (_eventEmitter) {
228
+ auto mapViewEventEmitter = std::static_pointer_cast<RNMapsGoogleMapViewEventEmitter const>(_eventEmitter);
229
+
230
+ NSError *jsError = nil;
231
+ NSString *levelsStr = RCTJSONStringify(dictionary[@"levels"], &jsError);
232
+
233
+ facebook::react::RNMapsGoogleMapViewEventEmitter::OnIndoorBuildingFocused data = {
234
+ .underground = [dictionary[@"underground"] boolValue],
235
+ .activeLevelIndex = (int) [dictionary[@"activeLevelIndex"] integerValue],
236
+ .levels = [levelsStr UTF8String]
237
+ };
238
+ mapViewEventEmitter->onIndoorBuildingFocused(data);
239
+ }
240
+ };
241
+
242
+ _view.onMapLoaded = [self](NSDictionary* dictionary) {
243
+ if (_eventEmitter) {
244
+ auto mapViewEventEmitter = std::static_pointer_cast<RNMapsGoogleMapViewEventEmitter const>(_eventEmitter);
245
+ facebook::react::RNMapsGoogleMapViewEventEmitter::OnMapLoaded data = {};
246
+ mapViewEventEmitter->onMapLoaded(data);
247
+ }
248
+ };
249
+
250
+ _view.onKmlReady = [self](NSDictionary* dictionary) {
251
+ if (_eventEmitter) {
252
+
253
+ auto mapViewEventEmitter = std::static_pointer_cast<RNMapsGoogleMapViewEventEmitter const>(_eventEmitter);
254
+ facebook::react::RNMapsGoogleMapViewEventEmitter::OnKmlReady data = {};
255
+ mapViewEventEmitter->onKmlReady(data);
256
+ }
257
+ };
258
+ _view.onRegionChange = [self](NSDictionary* dictionary) {
259
+ if (_eventEmitter) {
260
+
261
+ NSDictionary* regionDict = dictionary[@"region"];
262
+ auto mapViewEventEmitter = std::static_pointer_cast<RNMapsGoogleMapViewEventEmitter const>(_eventEmitter);
263
+ facebook::react::RNMapsGoogleMapViewEventEmitter::OnRegionChange data = {
264
+ .region.latitude = [regionDict[@"latitude"] doubleValue],
265
+ .region.longitude = [regionDict[@"longitude"] doubleValue],
266
+ .region.latitudeDelta = [regionDict[@"latitudeDelta"] doubleValue],
267
+ .region.longitudeDelta = [regionDict[@"longitudeDelta"] doubleValue],
268
+ .continuous = [dictionary[@"continuous"] boolValue],
269
+ };
270
+ mapViewEventEmitter->onRegionChange(data);
271
+ }
272
+ };
273
+
274
+ _view.onPanDrag = [self](NSDictionary* dictionary) {
275
+ if (_eventEmitter) {
276
+
277
+ NSDictionary* coordinateDict = dictionary[@"coordinate"];
278
+ NSDictionary* positionDict = dictionary[@"position"];
279
+
280
+ // Populate the OnMapPressCoordinate struct
281
+ facebook::react::RNMapsGoogleMapViewEventEmitter::OnPanDragCoordinate coordinate = {
282
+ .latitude = [coordinateDict[@"latitude"] doubleValue],
283
+ .longitude = [coordinateDict[@"longitude"] doubleValue],
284
+ };
285
+
286
+ // Populate the OnMapDouplePressPosition struct
287
+ facebook::react::RNMapsGoogleMapViewEventEmitter::OnPanDragPosition position = {
288
+ .x = [positionDict[@"x"] doubleValue],
289
+ .y = [positionDict[@"y"] doubleValue],
290
+ };
291
+
292
+ auto mapViewEventEmitter = std::static_pointer_cast<RNMapsGoogleMapViewEventEmitter const>(_eventEmitter);
293
+ facebook::react::RNMapsGoogleMapViewEventEmitter::OnPanDrag data = {
294
+ .position = position,
295
+ .coordinate = coordinate,
296
+ };
297
+ mapViewEventEmitter->onPanDrag(data);
298
+ }
299
+ };
300
+
301
+ _view.onUserLocationChange = [self](NSDictionary* dictionary) {
302
+ if (_eventEmitter) {
303
+
304
+ NSDictionary* coordinateDict = dictionary[@"coordinate"];
305
+ NSDictionary* errorDict = dictionary[@"error"];
306
+
307
+
308
+ // Populate the OnMapPressCoordinate struct
309
+ facebook::react::RNMapsGoogleMapViewEventEmitter::OnUserLocationChangeCoordinate coordinate = {
310
+ .latitude = [coordinateDict[@"latitude"] doubleValue],
311
+ .longitude = [coordinateDict[@"longitude"] doubleValue],
312
+ };
313
+ NSString* str = @"";
314
+ if (errorDict){
315
+ str = errorDict[@"message"];
316
+ }
317
+
318
+ facebook::react::RNMapsGoogleMapViewEventEmitter::OnUserLocationChangeError error = {
319
+ .message = std::string([str UTF8String]),
320
+ };
321
+
322
+
323
+ auto mapViewEventEmitter = std::static_pointer_cast<RNMapsGoogleMapViewEventEmitter const>(_eventEmitter);
324
+ facebook::react::RNMapsGoogleMapViewEventEmitter::OnUserLocationChange data = {
325
+ .coordinate = coordinate,
326
+ .error = error,
327
+ };
328
+ mapViewEventEmitter->onUserLocationChange(data);
329
+ }
330
+ };
331
+
332
+ _view.onPoiClick = [self](NSDictionary* dictionary) {
333
+ if (_eventEmitter) {
334
+
335
+ NSDictionary* coordinateDict = dictionary[@"coordinate"];
336
+ NSDictionary* positionDict = dictionary[@"position"];
337
+
338
+ // Populate the OnMapPressCoordinate struct
339
+ facebook::react::RNMapsGoogleMapViewEventEmitter::OnPoiClickCoordinate coordinate = {
340
+ .latitude = [coordinateDict[@"latitude"] doubleValue],
341
+ .longitude = [coordinateDict[@"longitude"] doubleValue],
342
+ };
343
+ // Populate the OnMapDouplePressPosition struct
344
+ facebook::react::RNMapsGoogleMapViewEventEmitter::OnPoiClickPosition position = {
345
+ .x = [positionDict[@"x"] doubleValue],
346
+ .y = [positionDict[@"y"] doubleValue],
347
+ };
348
+
349
+
350
+ auto mapViewEventEmitter = std::static_pointer_cast<RNMapsGoogleMapViewEventEmitter const>(_eventEmitter);
351
+ facebook::react::RNMapsGoogleMapViewEventEmitter::OnPoiClick data = {
352
+ .coordinate = coordinate,
353
+ .position = position,
354
+ .placeId = [dictionary[@"placeId"] UTF8String],
355
+ .name = [dictionary[@"name"] UTF8String],
356
+ };
357
+ mapViewEventEmitter->onPoiClick(data);
358
+ }
359
+ };
360
+
361
+
362
+
363
+ _view.onRegionChangeStart = [self](NSDictionary* dictionary) {
364
+ if (_eventEmitter) {
365
+
366
+ NSDictionary* regionDict = dictionary[@"region"];
367
+ auto mapViewEventEmitter = std::static_pointer_cast<RNMapsGoogleMapViewEventEmitter const>(_eventEmitter);
368
+ facebook::react::RNMapsGoogleMapViewEventEmitter::OnRegionChangeStart data = {
369
+ .region.latitude = [regionDict[@"latitude"] doubleValue],
370
+ .region.longitude = [regionDict[@"longitude"] doubleValue],
371
+ .region.latitudeDelta = [regionDict[@"latitudeDelta"] doubleValue],
372
+ .region.longitudeDelta = [regionDict[@"longitudeDelta"] doubleValue],
373
+ .continuous = [dictionary[@"continuous"] boolValue],
374
+ };
375
+ mapViewEventEmitter->onRegionChangeStart(data);
376
+ }
377
+ };
378
+
379
+ _view.onRegionChangeComplete = [self](NSDictionary* dictionary) {
380
+ if (_eventEmitter) {
381
+
382
+ NSDictionary* regionDict = dictionary[@"region"];
383
+ auto mapViewEventEmitter = std::static_pointer_cast<RNMapsGoogleMapViewEventEmitter const>(_eventEmitter);
384
+ facebook::react::RNMapsGoogleMapViewEventEmitter::OnRegionChangeComplete data = {
385
+ .region.latitude = [regionDict[@"latitude"] doubleValue],
386
+ .region.longitude = [regionDict[@"longitude"] doubleValue],
387
+ .region.latitudeDelta = [regionDict[@"latitudeDelta"] doubleValue],
388
+ .region.longitudeDelta = [regionDict[@"longitudeDelta"] doubleValue],
389
+ .continuous = [dictionary[@"continuous"] boolValue],
390
+ };
391
+ mapViewEventEmitter->onRegionChangeComplete(data);
392
+ }
393
+ };
394
+
395
+
396
+ #define HANDLE_MARKER_DRAG_EVENT(eventName, emitterFunction) \
397
+ if (_eventEmitter) { \
398
+ NSDictionary* coordinateDict = dictionary[@"coordinate"]; \
399
+ auto mapViewEventEmitter = \
400
+ std::static_pointer_cast<RNMapsGoogleMapViewEventEmitter const>(_eventEmitter); \
401
+ facebook::react::RNMapsGoogleMapViewEventEmitter::eventName data = { \
402
+ .coordinate.latitude = [coordinateDict[@"latitude"] doubleValue], \
403
+ .coordinate.longitude = [coordinateDict[@"longitude"] doubleValue], \
404
+ .id = std::string([[dictionary valueForKey:@"id"] UTF8String]), \
405
+ }; \
406
+ mapViewEventEmitter->emitterFunction(data); \
407
+ }
408
+
409
+
410
+
411
+ #define HANDLE_MARKER_EVENT(eventName, emitterFunction, actionName) \
412
+ if (_eventEmitter) { \
413
+ NSDictionary* coordinateDict = dictionary[@"coordinate"]; \
414
+ facebook::react::RNMapsGoogleMapViewEventEmitter::eventName##Coordinate coordinate = { \
415
+ .latitude = [coordinateDict[@"latitude"] doubleValue], \
416
+ .longitude = [coordinateDict[@"longitude"] doubleValue], \
417
+ }; \
418
+ \
419
+ auto mapViewEventEmitter = \
420
+ std::static_pointer_cast<RNMapsGoogleMapViewEventEmitter const>(_eventEmitter); \
421
+ facebook::react::RNMapsGoogleMapViewEventEmitter::eventName data = { \
422
+ .action = std::string([@actionName UTF8String]), \
423
+ .id = std::string([[dictionary valueForKey:@"id"] UTF8String]), \
424
+ .coordinate = coordinate \
425
+ }; \
426
+ mapViewEventEmitter->emitterFunction(data); \
427
+ }
428
+
429
+ _view.onMarkerSelect = [self](NSDictionary* dictionary) {
430
+ HANDLE_MARKER_EVENT(OnMarkerSelect, onMarkerSelect, "marker-select");
431
+ };
432
+
433
+ _view.onMarkerDeselect = [self](NSDictionary* dictionary) {
434
+ HANDLE_MARKER_EVENT(OnMarkerDeselect, onMarkerDeselect, "marker-deselect");
435
+ };
436
+
437
+ _view.onMarkerPress = [self](NSDictionary* dictionary) {
438
+ HANDLE_MARKER_EVENT(OnMarkerPress, onMarkerPress, "marker-press");
439
+ };
440
+ }
441
+
442
+ - (instancetype)initWithFrame:(CGRect)frame
443
+ {
444
+ if (self = [super initWithFrame:frame]) {
445
+ static const auto defaultProps = std::make_shared<const RNMapsGoogleMapViewProps>();
446
+ _props = defaultProps;
447
+ _legacyMapManager = [[AIRGoogleMapManager alloc] init];
448
+ _pendingInsertsSubviews = [NSMutableDictionary new];
449
+ }
450
+
451
+ return self;
452
+ }
453
+
454
+
455
+ - (void)mountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView index:(NSInteger)index{
456
+ id<RCTComponent> paperView = [childComponentView getPaperViewFromChildComponentView];
457
+ if (paperView){
458
+ if(_view && [_view isReady]){
459
+ [_view insertReactSubview:paperView atIndex:index];
460
+ } else {
461
+ [_pendingInsertsSubviews setObject:paperView forKey:[NSNumber numberWithInteger:index]];
462
+ }
463
+ } else {
464
+ [_view insertReactSubview:childComponentView atIndex:index];
465
+ if ([childComponentView isKindOfClass:[RNMapsGooglePolygonView class]]){
466
+ RNMapsGooglePolygonView* polygon = (RNMapsGooglePolygonView *) childComponentView;
467
+ [_polygons addObject:childComponentView];
468
+ [polygon didInsertInMap:_view];
469
+ }
470
+ }
471
+ }
472
+
473
+ - (void) unmountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView index:(NSInteger)index
474
+ {
475
+ id<RCTComponent> paperView = [childComponentView getPaperViewFromChildComponentView];
476
+ if (paperView){
477
+ if(_view && [_view isReady]){
478
+ [_view removeReactSubview:paperView];
479
+ } else {
480
+ [_pendingInsertsSubviews removeObjectForKey:[NSNumber numberWithInteger:index]];
481
+ }
482
+ } else {
483
+ [_view removeReactSubview:childComponentView];
484
+ if ([childComponentView isKindOfClass:[RNMapsGooglePolygonView class]]){
485
+ RNMapsGooglePolygonView* polygon = (RNMapsGooglePolygonView *) childComponentView;
486
+ [_polygons removeObject:childComponentView];
487
+ [polygon didRemoveFromMap];
488
+ }
489
+ }
490
+ }
491
+ - (void) prepareForRecycle
492
+ {
493
+ [super prepareForRecycle];
494
+ static const auto defaultProps = std::make_shared<const RNMapsGoogleMapViewProps>();
495
+ _props = defaultProps;
496
+ _legacyMapManager = [[AIRGoogleMapManager alloc] init];
497
+ _pendingInsertsSubviews = [NSMutableDictionary new];
498
+ [_view removeFromSuperview];
499
+ _view = nil;
500
+ }
501
+
502
+
503
+ - (void)updateProps:(Props::Shared const &)props oldProps:(Props::Shared const &)oldProps
504
+ {
505
+ const auto &oldViewProps = *std::static_pointer_cast<RNMapsGoogleMapViewProps const>(_props);
506
+ const auto &newViewProps = *std::static_pointer_cast<RNMapsGoogleMapViewProps const>(props);
507
+
508
+
509
+ if (oldViewProps.googleMapId != newViewProps.googleMapId) {
510
+ NSString* mapID = RCTNSStringFromString(newViewProps.googleMapId);
511
+ if (mapID && [mapID length]){
512
+ _legacyMapManager.googleMapId = mapID;
513
+ }
514
+ }
515
+ if (oldViewProps.customMapStyleString != newViewProps.customMapStyleString) {
516
+ NSString* customStyle = RCTNSStringFromString(newViewProps.customMapStyleString);
517
+ if (customStyle && [customStyle length]){
518
+ _legacyMapManager.customMapStyle = customStyle;
519
+ }
520
+ }
521
+ if (!newViewProps.zoomTapEnabled) {
522
+ _legacyMapManager.zoomTapEnabled = newViewProps.zoomTapEnabled;
523
+ } else {
524
+ _legacyMapManager.zoomTapEnabled = true;
525
+ }
526
+ if (oldViewProps.loadingBackgroundColor != newViewProps.loadingBackgroundColor){
527
+ _legacyMapManager.backgroundColor = RCTUIColorFromSharedColor(newViewProps.backgroundColor);
528
+ }
529
+
530
+ // bug with zoom / pitch / heading where value is not 0 even though
531
+ // nothing is passed from JS so we depend on lat / lng comparison for now
532
+ if (newViewProps.initialCamera.center.latitude != oldViewProps.initialCamera.center.latitude ||
533
+ newViewProps.initialCamera.center.longitude != oldViewProps.initialCamera.center.longitude ||
534
+ newViewProps.initialCamera.pitch != oldViewProps.initialCamera.pitch ||
535
+ newViewProps.initialCamera.zoom != oldViewProps.initialCamera.zoom
536
+ || newViewProps.initialCamera.heading != oldViewProps.initialCamera.heading) {
537
+ GMSCameraPosition* camera = [GMSCameraPosition cameraWithLatitude:newViewProps.initialCamera.center.latitude
538
+ longitude:newViewProps.initialCamera.center.longitude
539
+ zoom:newViewProps.initialCamera.zoom
540
+ bearing:newViewProps.initialCamera.heading
541
+ viewingAngle:newViewProps.initialCamera.pitch];
542
+ _legacyMapManager.camera = camera;
543
+ }
544
+
545
+
546
+
547
+ if (!_view){
548
+ [self prepareContentView];
549
+ }
550
+
551
+ #define REMAP_MAPVIEW_PROP(name) \
552
+ if (oldViewProps.name != newViewProps.name) { \
553
+ _view.name = newViewProps.name; \
554
+ }
555
+
556
+ #define REMAP_MAPVIEW_STRING_PROP(name) \
557
+ if (oldViewProps.name != newViewProps.name) { \
558
+ _view.name = RCTNSStringFromString(newViewProps.name); \
559
+ }
560
+
561
+ #define REMAP_MAPVIEW_POINT_PROP(name) \
562
+ if (newViewProps.name.x != oldViewProps.name.x || \
563
+ newViewProps.name.y != oldViewProps.name.y) { \
564
+ _view.name = CGPointMake(newViewProps.name.x, newViewProps.name.y); \
565
+ }
566
+
567
+ #define REMAP_MAPVIEW_REGION_PROP(name) \
568
+ if (newViewProps.name.latitude != oldViewProps.name.latitude || \
569
+ newViewProps.name.longitude != oldViewProps.name.longitude || \
570
+ newViewProps.name.latitudeDelta != oldViewProps.name.latitudeDelta ||\
571
+ newViewProps.name.longitudeDelta != oldViewProps.name.longitudeDelta) { \
572
+ MKCoordinateSpan span = MKCoordinateSpanMake(newViewProps.name.latitudeDelta, \
573
+ newViewProps.name.longitudeDelta); \
574
+ MKCoordinateRegion region = MKCoordinateRegionMake(CLLocationCoordinate2DMake( \
575
+ newViewProps.name.latitude, newViewProps.name.longitude), span); \
576
+ _view.name = region; \
577
+ }
578
+
579
+
580
+ #define REMAP_MAPVIEW_EDGEINSETS_PROP(name) \
581
+ if (newViewProps.name.top != oldViewProps.name.top || \
582
+ newViewProps.name.right != oldViewProps.name.right || \
583
+ newViewProps.name.bottom != oldViewProps.name.bottom || \
584
+ newViewProps.name.left != oldViewProps.name.left) { \
585
+ _view.name = UIEdgeInsetsMake(newViewProps.name.top, \
586
+ newViewProps.name.left, \
587
+ newViewProps.name.bottom, \
588
+ newViewProps.name.right); \
589
+ }
590
+
591
+
592
+ REMAP_MAPVIEW_PROP(pitchEnabled)
593
+ REMAP_MAPVIEW_PROP(zoomTapEnabled)
594
+ REMAP_MAPVIEW_PROP(scrollEnabled)
595
+
596
+ REMAP_MAPVIEW_STRING_PROP(kmlSrc)
597
+ REMAP_MAPVIEW_STRING_PROP(customMapStyleString)
598
+
599
+
600
+ if (newViewProps.minZoom != oldViewProps.minZoom || newViewProps.maxZoom != oldViewProps.maxZoom){
601
+ [_view setMinZoom:newViewProps.minZoom maxZoom:newViewProps.maxZoom];
602
+ }
603
+
604
+ [_view setShowsCompass:newViewProps.showsCompass];
605
+ REMAP_MAPVIEW_PROP(showsTraffic)
606
+ REMAP_MAPVIEW_PROP(showsUserLocation)
607
+ REMAP_MAPVIEW_PROP(zoomEnabled)
608
+
609
+
610
+ REMAP_MAPVIEW_REGION_PROP(region)
611
+ REMAP_MAPVIEW_REGION_PROP(initialRegion)
612
+
613
+ if (newViewProps.camera.center.latitude != oldViewProps.camera.center.latitude ||
614
+ newViewProps.camera.center.longitude != oldViewProps.camera.center.longitude ||
615
+ newViewProps.camera.heading != oldViewProps.camera.heading ||
616
+ newViewProps.camera.pitch != oldViewProps.camera.pitch ||
617
+ newViewProps.camera.zoom != oldViewProps.camera.zoom) {
618
+ GMSCameraPosition* camera = [GMSCameraPosition cameraWithLatitude:newViewProps.camera.center.latitude
619
+ longitude:newViewProps.camera.center.longitude
620
+ zoom:newViewProps.camera.zoom
621
+ bearing:newViewProps.camera.heading
622
+ viewingAngle:newViewProps.camera.pitch];
623
+ _view.cameraProp = camera;
624
+ }
625
+
626
+
627
+ REMAP_MAPVIEW_EDGEINSETS_PROP(mapPadding)
628
+
629
+
630
+ if (oldViewProps.mapType != newViewProps.mapType){
631
+ switch (newViewProps.mapType) {
632
+ case RNMapsGoogleMapViewMapType::Standard:
633
+ _view.mapType = kGMSTypeNormal;
634
+ break;
635
+ case RNMapsGoogleMapViewMapType::Satellite:
636
+ _view.mapType = kGMSTypeSatellite;
637
+ break;
638
+ case RNMapsGoogleMapViewMapType::Terrain:
639
+ _view.mapType = kGMSTypeTerrain;
640
+ break;
641
+ case RNMapsGoogleMapViewMapType::Hybrid:
642
+ _view.mapType = kGMSTypeHybrid;
643
+ break;
644
+ case RNMapsGoogleMapViewMapType::None:
645
+ _view.mapType = kGMSTypeNone;
646
+ break;
647
+ default:
648
+ _view.mapType = kGMSTypeNormal;
649
+ break;
650
+ }
651
+ }
652
+
653
+ if (oldViewProps.userInterfaceStyle != newViewProps.userInterfaceStyle){
654
+ switch (newViewProps.userInterfaceStyle) {
655
+ case RNMapsGoogleMapViewUserInterfaceStyle::Light:
656
+ _view.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
657
+ break;
658
+ case RNMapsGoogleMapViewUserInterfaceStyle::Dark:
659
+ _view.overrideUserInterfaceStyle = UIUserInterfaceStyleDark;
660
+ break;
661
+ case RNMapsGoogleMapViewUserInterfaceStyle::System:
662
+ _view.overrideUserInterfaceStyle = UIUserInterfaceStyleUnspecified;
663
+ break;
664
+ }
665
+ }
666
+
667
+
668
+ [super updateProps:props oldProps:oldProps];
669
+ }
670
+
671
+ @end
672
+
673
+ Class<RCTComponentViewProtocol> RNMapsGoogleMapViewCls(void)
674
+ {
675
+ return RNMapsGoogleMapView.class;
676
+ }
677
+
678
+ #endif