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
@@ -16,158 +16,228 @@
16
16
  #import "AIRDummyView.h"
17
17
 
18
18
  CGRect unionRect(CGRect a, CGRect b) {
19
- return CGRectMake(
20
- MIN(a.origin.x, b.origin.x),
21
- MIN(a.origin.y, b.origin.y),
22
- MAX(a.size.width, b.size.width),
23
- MAX(a.size.height, b.size.height));
19
+ return CGRectMake(
20
+ MIN(a.origin.x, b.origin.x),
21
+ MIN(a.origin.y, b.origin.y),
22
+ MAX(a.size.width, b.size.width),
23
+ MAX(a.size.height, b.size.height));
24
24
  }
25
25
 
26
26
  @interface AIRGoogleMapMarker ()
27
- - (id)eventFromMarker:(AIRGMSMarker*)marker;
28
27
  @end
29
28
 
30
29
  @implementation AIRGoogleMapMarker {
31
- RCTImageLoaderCancellationBlock _reloadImageCancellationBlock;
32
- __weak UIImageView *_iconImageView;
33
- UIView *_iconView;
30
+ RCTImageLoaderCancellationBlock _reloadImageCancellationBlock;
31
+ RCTBubblingEventBlock _onPress;
32
+ RCTDirectEventBlock _onSelect;
33
+ RCTDirectEventBlock _onDeselect;
34
+ __weak UIImageView *_iconImageView;
35
+ UIView *_iconView;
36
+ UIColor *_pinColor;
37
+ CLLocationCoordinate2D _coordinates;
38
+ CLLocationDegrees _rotation;
39
+ BOOL _tracksInfoWindowChanges;
40
+ BOOL _tracksViewChanges;
41
+ BOOL _draggable;
42
+ BOOL _tappable;
43
+ BOOL _flat;
44
+ double _opacity;
45
+ NSString* _identifier;
46
+ NSString* _title;
47
+ NSString* _subtitle;
48
+
34
49
  }
35
50
 
36
51
  - (instancetype)init
37
52
  {
38
- if ((self = [super init])) {
39
- _realMarker = [[AIRGMSMarker alloc] init];
40
- _realMarker.fakeMarker = self;
41
- _realMarker.tracksViewChanges = true;
42
- _realMarker.tracksInfoWindowChanges = false;
43
- }
44
- return self;
53
+ if ((self = [super init])) {
54
+ _tracksViewChanges = true;
55
+ _tracksInfoWindowChanges = false;
56
+ _tappable = true;
57
+ _opacity = 1.0;
58
+ }
59
+ return self;
45
60
  }
46
61
 
47
62
  - (void)layoutSubviews {
48
- float width = 0;
49
- float height = 0;
63
+ float width = 0;
64
+ float height = 0;
65
+
66
+ for (UIView *v in [_iconView subviews]) {
50
67
 
51
- for (UIView *v in [_iconView subviews]) {
68
+ float fw = v.frame.origin.x + v.frame.size.width;
69
+ float fh = v.frame.origin.y + v.frame.size.height;
52
70
 
53
- float fw = v.frame.origin.x + v.frame.size.width;
54
- float fh = v.frame.origin.y + v.frame.size.height;
71
+ width = MAX(fw, width);
72
+ height = MAX(fh, height);
73
+ }
74
+
75
+ [_iconView setFrame:CGRectMake(0, 0, width, height)];
76
+ }
55
77
 
56
- width = MAX(fw, width);
57
- height = MAX(fh, height);
58
- }
59
78
 
60
- [_iconView setFrame:CGRectMake(0, 0, width, height)];
79
+ - (UIView *) iconView
80
+ {
81
+ return _iconView;
61
82
  }
62
83
 
63
- - (id)eventFromMarker:(AIRGMSMarker*)marker {
84
+ - (void) didUpdateReactSubviews
85
+ {
86
+ [super didUpdateReactSubviews];
87
+ if (_iconView){
88
+ [_iconView setFrame:self.frame];
89
+ }
90
+ }
64
91
 
65
- CLLocationCoordinate2D coordinate = marker.position;
66
- CGPoint position = [self.realMarker.map.projection pointForCoordinate:coordinate];
92
+ - (void) didInsertInMap:(AIRGoogleMap *) map
93
+ {
94
+ _realMarker = [AIRGMSMarker new];
95
+ _realMarker.fakeMarker = self;
96
+ _realMarker.tracksViewChanges = _tracksViewChanges;
97
+ _realMarker.tracksInfoWindowChanges = _tracksInfoWindowChanges;
67
98
 
68
- return @{
69
- @"id": marker.identifier ?: @"unknown",
70
- @"position": @{
71
- @"x": @(position.x),
72
- @"y": @(position.y),
73
- },
74
- @"coordinate": @{
75
- @"latitude": @(coordinate.latitude),
76
- @"longitude": @(coordinate.longitude),
77
- }
78
- };
99
+ [_realMarker setPosition:_coordinates];
100
+ if (_iconView){
101
+ [_realMarker setIconView:_iconView];
102
+ }
103
+ if (_rotation != 0){
104
+ [_realMarker setRotation:_rotation];
105
+ }
106
+ if (_identifier){
107
+ [_realMarker setIdentifier:_identifier];
108
+ }
109
+ if (_title){
110
+ [_realMarker setTitle:_title];
111
+ }
112
+ if (_subtitle){
113
+ [_realMarker setSnippet:_subtitle];
114
+ }
115
+ if (!CGPointEqualToPoint(_anchor, CGPointZero)){
116
+ [_realMarker setGroundAnchor:_anchor];
117
+ }
118
+ if (!CGPointEqualToPoint(_calloutAnchor, CGPointZero)){
119
+ [_realMarker setInfoWindowAnchor:_calloutAnchor];
120
+ }
121
+ if (_flat){
122
+ [_realMarker setFlat:_flat];
123
+ }
124
+ if (_draggable){
125
+ [_realMarker setDraggable:_draggable];
126
+ }
127
+ [_realMarker setTappable:_tappable];
128
+ if (_pinColor){
129
+ _realMarker.icon = [GMSMarker markerImageWithColor:_pinColor];
130
+ }
131
+ if (_opacity != 1.0){
132
+ [_realMarker setOpacity:_opacity];
133
+ }
134
+ if (_onSelect){
135
+ [_realMarker setOnSelect:_onSelect];
136
+ }
137
+ if (_onDeselect){
138
+ [_realMarker setOnDeselect:_onDeselect];
139
+ }
140
+ if (_onPress){
141
+ [_realMarker setOnPress:_onPress];
142
+ }
143
+ if (_zIndex){
144
+ [_realMarker setZIndex:_zIndex];
145
+ }
146
+ [_realMarker setMap:map];
79
147
  }
80
148
 
81
149
  - (void)iconViewInsertSubview:(UIView*)subview atIndex:(NSInteger)atIndex {
82
- if (!_realMarker.iconView) {
83
- _iconView = [[UIView alloc] init];
84
- _realMarker.iconView = _iconView;
85
- }
86
- [_iconView insertSubview:subview atIndex:atIndex];
150
+ if (!_iconView){
151
+ _iconView = [[UIView alloc] init];
152
+ }
153
+ if (!_realMarker.iconView) {
154
+ _realMarker.iconView = _iconView;
155
+ }
156
+ [_iconView insertSubview:subview atIndex:atIndex];
87
157
  }
88
158
 
89
159
  - (void)insertReactSubview:(id<RCTComponent>)subview atIndex:(NSInteger)atIndex {
90
- if ([subview isKindOfClass:[AIRGoogleMapCallout class]]) {
91
- self.calloutView = (AIRGoogleMapCallout *)subview;
92
- } else { // a child view of the marker
93
- [self iconViewInsertSubview:(UIView*)subview atIndex:atIndex+1];
94
- }
95
- AIRDummyView *dummySubview = [[AIRDummyView alloc] initWithView:(UIView *)subview];
96
- [super insertReactSubview:(UIView*)dummySubview atIndex:atIndex];
160
+ if ([subview isKindOfClass:[AIRGoogleMapCallout class]]) {
161
+ self.calloutView = (AIRGoogleMapCallout *)subview;
162
+ } else { // a child view of the marker
163
+ [self iconViewInsertSubview:(UIView*)subview atIndex:atIndex+1];
164
+ }
165
+ AIRDummyView *dummySubview = [[AIRDummyView alloc] initWithView:(UIView *)subview];
166
+ [super insertReactSubview:(UIView*)dummySubview atIndex:atIndex];
97
167
  }
98
168
 
99
169
  - (void)removeReactSubview:(id<RCTComponent>)dummySubview {
100
- UIView* subview = ((AIRDummyView*)dummySubview).view;
170
+ UIView *subview = [dummySubview isKindOfClass:[AIRDummyView class]] ? ((AIRDummyView *)dummySubview).view : (UIView *)dummySubview;
101
171
 
102
- if ([subview isKindOfClass:[AIRGoogleMapCallout class]]) {
103
- self.calloutView = nil;
104
- } else {
105
- [(UIView*)subview removeFromSuperview];
106
- }
107
- [super removeReactSubview:(UIView*)dummySubview];
172
+ if ([subview isKindOfClass:[AIRGoogleMapCallout class]]) {
173
+ self.calloutView = nil;
174
+ } else {
175
+ [subview removeFromSuperview];
176
+ }
177
+ [super removeReactSubview:(UIView*)dummySubview];
108
178
  }
109
179
 
110
180
  - (void)showCalloutView {
111
- [_realMarker.map setSelectedMarker:_realMarker];
181
+ [_realMarker.map setSelectedMarker:_realMarker];
112
182
  }
113
183
 
114
184
  - (void)hideCalloutView {
115
- [_realMarker.map setSelectedMarker:Nil];
185
+ [_realMarker.map setSelectedMarker:Nil];
116
186
  }
117
187
 
118
188
  - (void)redraw {
119
- if (!_realMarker.iconView) return;
189
+ if (!_realMarker.iconView) return;
120
190
 
121
- BOOL oldValue = _realMarker.tracksViewChanges;
191
+ BOOL oldValue = _realMarker.tracksViewChanges;
122
192
 
123
- if (oldValue == YES)
124
- {
125
- // Immediate refresh, like right now. Not waiting for next frame.
126
- UIView *view = _realMarker.iconView;
127
- _realMarker.iconView = nil;
128
- _realMarker.iconView = view;
129
- }
130
- else
131
- {
132
- // Refresh according to docs
133
- _realMarker.tracksViewChanges = YES;
134
- _realMarker.tracksViewChanges = NO;
135
- }
193
+ if (oldValue == YES)
194
+ {
195
+ // Immediate refresh, like right now. Not waiting for next frame.
196
+ UIView *view = _realMarker.iconView;
197
+ _realMarker.iconView = nil;
198
+ _realMarker.iconView = view;
199
+ }
200
+ else
201
+ {
202
+ // Refresh according to docs
203
+ _realMarker.tracksViewChanges = YES;
204
+ _realMarker.tracksViewChanges = NO;
205
+ }
136
206
  }
137
207
 
138
208
  - (UIView *)markerInfoContents {
139
- if (self.calloutView && !self.calloutView.tooltip) {
140
- return self.calloutView;
141
- }
142
- return nil;
209
+ if (self.calloutView && !self.calloutView.tooltip) {
210
+ return self.calloutView;
211
+ }
212
+ return nil;
143
213
  }
144
214
 
145
215
  - (UIView *)markerInfoWindow {
146
- if (self.calloutView && self.calloutView.tooltip) {
147
- return self.calloutView;
148
- }
149
- return nil;
216
+ if (self.calloutView && self.calloutView.tooltip) {
217
+ return self.calloutView;
218
+ }
219
+ return nil;
150
220
  }
151
221
 
152
222
  - (void)didTapInfoWindowOfMarker:(AIRGMSMarker *)marker point:(CGPoint)point frame:(CGRect)frame {
153
- if (self.calloutView && self.calloutView.onPress) {
154
- //todo: why not 'callout-press' ?
155
- id event = @{
156
- @"action": @"marker-overlay-press",
157
- @"id": self.identifier ?: @"unknown",
158
- @"point": @{
159
- @"x": @(point.x),
160
- @"y": @(point.y),
161
- },
162
- @"frame": @{
163
- @"x": @(frame.origin.x),
164
- @"y": @(frame.origin.y),
165
- @"width": @(frame.size.width),
166
- @"height": @(frame.size.height),
167
- }
168
- };
169
- self.calloutView.onPress(event);
170
- }
223
+ if (self.calloutView && self.calloutView.onPress) {
224
+ //todo: why not 'callout-press' ?
225
+ id event = @{
226
+ @"action": @"marker-overlay-press",
227
+ @"id": self.identifier ?: @"unknown",
228
+ @"point": @{
229
+ @"x": @(point.x),
230
+ @"y": @(point.y),
231
+ },
232
+ @"frame": @{
233
+ @"x": @(frame.origin.x),
234
+ @"y": @(frame.origin.y),
235
+ @"width": @(frame.size.width),
236
+ @"height": @(frame.size.height),
237
+ }
238
+ };
239
+ self.calloutView.onPress(event);
240
+ }
171
241
  }
172
242
 
173
243
  - (void)didTapInfoWindowOfMarker:(AIRGMSMarker *)marker {
@@ -178,19 +248,19 @@ CGRect unionRect(CGRect a, CGRect b) {
178
248
  if (subview && subview.onPress) {
179
249
  //todo: why not 'callout-inside-press' ?
180
250
  id event = @{
181
- @"action": @"marker-inside-overlay-press",
182
- @"id": self.identifier ?: @"unknown",
183
- @"point": @{
184
- @"x": @(point.x),
185
- @"y": @(point.y),
186
- },
187
- @"frame": @{
188
- @"x": @(frame.origin.x),
189
- @"y": @(frame.origin.y),
190
- @"width": @(frame.size.width),
191
- @"height": @(frame.size.height),
192
- }
193
- };
251
+ @"action": @"marker-inside-overlay-press",
252
+ @"id": self.identifier ?: @"unknown",
253
+ @"point": @{
254
+ @"x": @(point.x),
255
+ @"y": @(point.y),
256
+ },
257
+ @"frame": @{
258
+ @"x": @(frame.origin.x),
259
+ @"y": @(frame.origin.y),
260
+ @"width": @(frame.size.width),
261
+ @"height": @(frame.size.height),
262
+ }
263
+ };
194
264
  subview.onPress(event);
195
265
  } else {
196
266
  [self didTapInfoWindowOfMarker:marker point:point frame:frame];
@@ -198,30 +268,32 @@ CGRect unionRect(CGRect a, CGRect b) {
198
268
  }
199
269
 
200
270
  - (void)didBeginDraggingMarker:(AIRGMSMarker *)marker {
201
- if (!self.onDragStart) return;
202
- self.onDragStart([self eventFromMarker:marker]);
271
+ if (!self.onDragStart) return;
272
+ self.onDragStart([self makeEventData]);
203
273
  }
204
274
 
205
275
  - (void)didEndDraggingMarker:(AIRGMSMarker *)marker {
206
- if (!self.onDragEnd) return;
207
- self.onDragEnd([self eventFromMarker:marker]);
276
+ if (!self.onDragEnd) return;
277
+ self.onDragEnd([self makeEventData]);
208
278
  }
209
279
 
210
280
  - (void)didDragMarker:(AIRGMSMarker *)marker {
211
- if (!self.onDrag) return;
212
- self.onDrag([self eventFromMarker:marker]);
281
+ if (!self.onDrag) return;
282
+ self.onDrag([self makeEventData]);
213
283
  }
214
284
 
215
285
  - (void)setCoordinate:(CLLocationCoordinate2D)coordinate {
216
- _realMarker.position = coordinate;
286
+ _realMarker.position = coordinate;
287
+ _coordinates = coordinate;
217
288
  }
218
289
 
219
290
  - (CLLocationCoordinate2D)coordinate {
220
- return _realMarker.position;
291
+ return _realMarker.position;
221
292
  }
222
293
 
223
294
  - (void)setRotation:(CLLocationDegrees)rotation {
224
295
  _realMarker.rotation = rotation;
296
+ _rotation = rotation;
225
297
  }
226
298
 
227
299
  - (CLLocationDegrees)rotation {
@@ -229,198 +301,258 @@ CGRect unionRect(CGRect a, CGRect b) {
229
301
  }
230
302
 
231
303
  - (void)setIdentifier:(NSString *)identifier {
232
- _realMarker.identifier = identifier;
304
+ _realMarker.identifier = identifier;
305
+ _identifier = identifier;
233
306
  }
234
307
 
235
308
  - (NSString *)identifier {
236
- return _realMarker.identifier;
309
+ return _realMarker.identifier;
237
310
  }
238
311
 
239
312
  - (void)setOnPress:(RCTBubblingEventBlock)onPress {
240
- _realMarker.onPress = onPress;
313
+ _realMarker.onPress = onPress;
314
+ _onPress = onPress;
241
315
  }
242
316
 
243
317
  - (RCTBubblingEventBlock)onPress {
244
- return _realMarker.onPress;
318
+ return _realMarker.onPress;
319
+ }
320
+
321
+ - (void)setOnSelect:(RCTDirectEventBlock)onSelect {
322
+ _realMarker.onSelect = onSelect;
323
+ _onSelect = onSelect;
324
+ }
325
+
326
+ - (RCTDirectEventBlock)onSelect {
327
+ return _realMarker.onSelect;
328
+ }
329
+
330
+ - (void)setOnDeselect:(RCTDirectEventBlock)onDeselect {
331
+ _realMarker.onDeselect = onDeselect;
332
+ _onDeselect = onDeselect;
333
+ }
334
+
335
+ - (RCTDirectEventBlock)onDeselect {
336
+ return _realMarker.onDeselect;
245
337
  }
246
338
 
247
339
  - (void)setOpacity:(double)opacity
248
340
  {
249
- _realMarker.opacity = opacity;
341
+ _realMarker.opacity = opacity;
342
+ _opacity = opacity;
250
343
  }
251
344
 
252
345
  - (void)setImageSrc:(NSString *)imageSrc
253
346
  {
254
- _imageSrc = imageSrc;
255
-
256
- if (_reloadImageCancellationBlock) {
257
- _reloadImageCancellationBlock();
258
- _reloadImageCancellationBlock = nil;
259
- }
260
-
261
- if (!_imageSrc) {
262
- if (_iconImageView) [_iconImageView removeFromSuperview];
263
- return;
264
- }
265
-
266
- if (!_iconImageView) {
267
- // prevent glitch with marker (cf. https://github.com/react-native-maps/react-native-maps/issues/738)
268
- UIImageView *empyImageView = [[UIImageView alloc] init];
269
- _iconImageView = empyImageView;
270
- [self iconViewInsertSubview:_iconImageView atIndex:0];
271
- }
272
-
273
- _reloadImageCancellationBlock = [[_bridge moduleForName:@"ImageLoader"] loadImageWithURLRequest:[RCTConvert NSURLRequest:_imageSrc]
274
- size:self.bounds.size
275
- scale:RCTScreenScale()
276
- clipped:YES
277
- resizeMode:RCTResizeModeCenter
278
- progressBlock:nil
279
- partialLoadBlock:nil
280
- completionBlock:^(NSError *error, UIImage *image) {
281
- if (error) {
282
- // TODO(lmr): do something with the error?
283
- NSLog(@"%@", error);
284
- }
285
- dispatch_async(dispatch_get_main_queue(), ^{
286
-
287
- // TODO(gil): This way allows different image sizes
288
- if (self->_iconImageView) [self->_iconImageView removeFromSuperview];
289
-
290
- // ... but this way is more efficient?
291
- // if (_iconImageView) {
292
- // [_iconImageView setImage:image];
293
- // return;
294
- // }
295
-
296
- UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
297
-
298
- // TODO: w,h or pixel density could be a prop.
299
- float density = 1;
300
- float w = image.size.width/density;
301
- float h = image.size.height/density;
302
- CGRect bounds = CGRectMake(0, 0, w, h);
303
-
304
- imageView.contentMode = UIViewContentModeScaleAspectFit;
305
- [imageView setFrame:bounds];
306
-
307
- // NOTE: sizeToFit doesn't work instead. Not sure why.
308
- // TODO: Doing it this way is not ideal because it causes things to reshuffle
309
- // when the image loads IF the image is larger than the UIView.
310
- // Shouldn't required images have size info automatically via RN?
311
- CGRect selfBounds = unionRect(bounds, self.bounds);
312
- [self setFrame:selfBounds];
313
-
314
- self->_iconImageView = imageView;
315
- [self iconViewInsertSubview:imageView atIndex:0];
316
- });
317
- }];
347
+ _imageSrc = imageSrc;
348
+
349
+ if (_reloadImageCancellationBlock) {
350
+ _reloadImageCancellationBlock();
351
+ _reloadImageCancellationBlock = nil;
352
+ }
353
+
354
+ if (!_imageSrc) {
355
+ if (_iconImageView) [_iconImageView removeFromSuperview];
356
+ return;
357
+ }
358
+
359
+ if (!_iconImageView) {
360
+ // prevent glitch with marker (cf. https://github.com/react-native-maps/react-native-maps/issues/738)
361
+ UIImageView *empyImageView = [[UIImageView alloc] init];
362
+ _iconImageView = empyImageView;
363
+ [self iconViewInsertSubview:_iconImageView atIndex:0];
364
+ }
365
+ __weak AIRGoogleMapMarker* weakSelf = self;
366
+
367
+ _reloadImageCancellationBlock = [[_bridge moduleForName:@"ImageLoader"] loadImageWithURLRequest:[RCTConvert NSURLRequest:_imageSrc]
368
+ size:self.bounds.size
369
+ scale:RCTScreenScale()
370
+ clipped:YES
371
+ resizeMode:RCTResizeModeCenter
372
+ progressBlock:nil
373
+ partialLoadBlock:nil
374
+ completionBlock:^(NSError *error, UIImage *image) {
375
+ if (error) {
376
+ // TODO(lmr): do something with the error?
377
+ NSLog(@"%@", error);
378
+ }
379
+
380
+ dispatch_async(dispatch_get_main_queue(), ^{
381
+ __strong AIRGoogleMapMarker* strongSelf = weakSelf;
382
+
383
+ // TODO(gil): This way allows different image sizes
384
+ if (strongSelf->_iconImageView) [strongSelf->_iconImageView removeFromSuperview];
385
+
386
+ // ... but this way is more efficient?
387
+ // if (_iconImageView) {
388
+ // [_iconImageView setImage:image];
389
+ // return;
390
+ // }
391
+
392
+ UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
393
+
394
+ // TODO: w,h or pixel density could be a prop.
395
+ float density = 1;
396
+ float w = image.size.width/density;
397
+ float h = image.size.height/density;
398
+ CGRect bounds = CGRectMake(0, 0, w, h);
399
+
400
+ imageView.contentMode = UIViewContentModeScaleAspectFit;
401
+ [imageView setFrame:bounds];
402
+
403
+ // NOTE: sizeToFit doesn't work instead. Not sure why.
404
+ // TODO: Doing it this way is not ideal because it causes things to reshuffle
405
+ // when the image loads IF the image is larger than the UIView.
406
+ // Shouldn't required images have size info automatically via RN?
407
+ CGRect selfBounds = unionRect(bounds, self.bounds);
408
+ [strongSelf setFrame:selfBounds];
409
+
410
+ strongSelf->_iconImageView = imageView;
411
+ [strongSelf iconViewInsertSubview:imageView atIndex:0];
412
+ [strongSelf layoutSubviews];
413
+ [strongSelf.realMarker setIconView:strongSelf.iconView];
414
+ });
415
+ }];
318
416
  }
319
417
 
320
418
  - (void)setIconSrc:(NSString *)iconSrc
321
419
  {
322
- _iconSrc = iconSrc;
323
-
324
- if (_reloadImageCancellationBlock) {
325
- _reloadImageCancellationBlock();
326
- _reloadImageCancellationBlock = nil;
327
- }
328
-
329
- _reloadImageCancellationBlock =
330
- [[_bridge moduleForName:@"ImageLoader"] loadImageWithURLRequest:[RCTConvert NSURLRequest:_iconSrc]
331
- size:self.bounds.size
332
- scale:RCTScreenScale()
333
- clipped:YES
334
- resizeMode:RCTResizeModeCenter
335
- progressBlock:nil
336
- partialLoadBlock:nil
337
- completionBlock:^(NSError *error, UIImage *image) {
338
- if (error) {
339
- // TODO(lmr): do something with the error?
340
- NSLog(@"%@", error);
341
- }
342
- dispatch_async(dispatch_get_main_queue(), ^{
343
- self->_realMarker.icon = image;
344
- });
345
- }];
420
+ _iconSrc = iconSrc;
421
+
422
+ if (_reloadImageCancellationBlock) {
423
+ _reloadImageCancellationBlock();
424
+ _reloadImageCancellationBlock = nil;
425
+ }
426
+
427
+ if (!_realMarker.icon) {
428
+ // prevent glitch with marker (cf. https://github.com/react-native-maps/react-native-maps/issues/3657)
429
+ UIImage *emptyImage = [[UIImage alloc] init];
430
+ _realMarker.icon = emptyImage;
431
+ }
432
+
433
+ _reloadImageCancellationBlock =
434
+ [[_bridge moduleForName:@"ImageLoader"] loadImageWithURLRequest:[RCTConvert NSURLRequest:_iconSrc]
435
+ size:self.bounds.size
436
+ scale:RCTScreenScale()
437
+ clipped:YES
438
+ resizeMode:RCTResizeModeCenter
439
+ progressBlock:nil
440
+ partialLoadBlock:nil
441
+ completionBlock:^(NSError *error, UIImage *image) {
442
+ if (error) {
443
+ // TODO(lmr): do something with the error?
444
+ NSLog(@"%@", error);
445
+ }
446
+ dispatch_async(dispatch_get_main_queue(), ^{
447
+ self->_realMarker.icon = image;
448
+ });
449
+ }];
346
450
  }
347
451
 
348
452
  - (void)setTitle:(NSString *)title {
349
- _realMarker.title = [title copy];
453
+ _realMarker.title = [title copy];
454
+ _title = title;
350
455
  }
351
456
 
352
457
  - (NSString *)title {
353
- return _realMarker.title;
458
+ return _realMarker.title;
354
459
  }
355
460
 
356
461
  - (void)setSubtitle:(NSString *)subtitle {
357
- _realMarker.snippet = subtitle;
462
+ _realMarker.snippet = subtitle;
463
+ _subtitle = subtitle;
358
464
  }
359
465
 
360
466
  - (NSString *)subtitle {
361
- return _realMarker.snippet;
467
+ return _realMarker.snippet;
362
468
  }
363
469
 
364
470
  - (void)setPinColor:(UIColor *)pinColor {
365
- _pinColor = pinColor;
366
- _realMarker.icon = [GMSMarker markerImageWithColor:pinColor];
471
+ _pinColor = pinColor;
472
+ _realMarker.icon = [GMSMarker markerImageWithColor:pinColor];
367
473
  }
368
474
 
369
475
  - (void)setAnchor:(CGPoint)anchor {
370
- _anchor = anchor;
371
- _realMarker.groundAnchor = anchor;
476
+ _anchor = anchor;
477
+ _realMarker.groundAnchor = anchor;
372
478
  }
373
479
 
374
480
  - (void)setCalloutAnchor:(CGPoint)calloutAnchor {
375
- _calloutAnchor = calloutAnchor;
376
- _realMarker.infoWindowAnchor = calloutAnchor;
481
+ _calloutAnchor = calloutAnchor;
482
+ _realMarker.infoWindowAnchor = calloutAnchor;
377
483
  }
378
484
 
379
485
 
380
486
  - (void)setZIndex:(NSInteger)zIndex
381
487
  {
382
- _zIndex = zIndex;
383
- _realMarker.zIndex = (int)zIndex;
488
+ _zIndex = zIndex;
489
+ _realMarker.zIndex = (int)zIndex;
384
490
  }
385
491
 
386
492
  - (void)setDraggable:(BOOL)draggable {
387
- _realMarker.draggable = draggable;
493
+ _realMarker.draggable = draggable;
494
+ _draggable = draggable;
388
495
  }
389
496
 
390
497
  - (BOOL)draggable {
391
- return _realMarker.draggable;
498
+ return _realMarker.draggable;
392
499
  }
393
500
 
394
501
  - (void)setTappable:(BOOL)tappable {
395
- _realMarker.tappable = tappable;
502
+ _realMarker.tappable = tappable;
503
+ _tappable = tappable;
396
504
  }
397
505
 
398
506
  - (BOOL)tappable {
399
- return _realMarker.tappable;
507
+ return _realMarker.tappable;
400
508
  }
401
509
 
402
510
  - (void)setFlat:(BOOL)flat {
403
- _realMarker.flat = flat;
511
+ _realMarker.flat = flat;
512
+ _flat = flat;
404
513
  }
405
514
 
406
515
  - (BOOL)flat {
407
- return _realMarker.flat;
516
+ return _realMarker.flat;
408
517
  }
409
518
 
410
519
  - (void)setTracksViewChanges:(BOOL)tracksViewChanges {
411
- _realMarker.tracksViewChanges = tracksViewChanges;
520
+ _realMarker.tracksViewChanges = tracksViewChanges;
412
521
  }
413
522
 
414
523
  - (BOOL)tracksViewChanges {
415
- return _realMarker.tracksViewChanges;
524
+ return _realMarker.tracksViewChanges;
416
525
  }
417
526
 
418
527
  - (void)setTracksInfoWindowChanges:(BOOL)tracksInfoWindowChanges {
419
- _realMarker.tracksInfoWindowChanges = tracksInfoWindowChanges;
528
+ _realMarker.tracksInfoWindowChanges = tracksInfoWindowChanges;
420
529
  }
421
530
 
422
531
  - (BOOL)tracksInfoWindowChanges {
423
- return _realMarker.tracksInfoWindowChanges;
532
+ return _realMarker.tracksInfoWindowChanges;
533
+ }
534
+
535
+
536
+ - (id)makeEventData:(NSString *)action {
537
+ CLLocationCoordinate2D coordinate = self.realMarker.position;
538
+ CGPoint position = [self.realMarker.map.projection pointForCoordinate:coordinate];
539
+
540
+ return @{
541
+ @"id": self.identifier ?: @"unknown",
542
+ @"position": @{
543
+ @"x": @(position.x),
544
+ @"y": @(position.y),
545
+ },
546
+ @"coordinate": @{
547
+ @"latitude": @(coordinate.latitude),
548
+ @"longitude": @(coordinate.longitude),
549
+ },
550
+ @"action": action,
551
+ };
552
+ }
553
+
554
+ - (id)makeEventData {
555
+ return [self makeEventData:@"unknown"];
424
556
  }
425
557
 
426
558
  @end