react-native-maps 1.21.0-alpha.99 → 1.22.0

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 (234) hide show
  1. package/README.md +9 -4
  2. package/android/build.gradle +65 -72
  3. package/android/gradle/wrapper/gradle-wrapper.properties +1 -1
  4. package/android/src/main/RCTAppDependencyProvider.h +25 -0
  5. package/android/src/main/RCTAppDependencyProvider.mm +55 -0
  6. package/android/src/main/RCTModulesConformingToProtocolsProvider.h +18 -0
  7. package/android/src/main/RCTModulesConformingToProtocolsProvider.mm +33 -0
  8. package/android/src/main/RCTThirdPartyComponentsProvider.h +16 -0
  9. package/android/src/main/RCTThirdPartyComponentsProvider.mm +28 -0
  10. package/android/src/main/ReactAppDependencyProvider.podspec +34 -0
  11. package/android/src/main/java/com/facebook/fbreact/specs/NativeAirMapsModuleSpec.java +63 -0
  12. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCalloutManagerDelegate.java +35 -0
  13. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCalloutManagerInterface.java +17 -0
  14. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCircleManagerDelegate.java +49 -0
  15. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsCircleManagerInterface.java +23 -0
  16. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsGooglePolygonManagerDelegate.java +49 -0
  17. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsGooglePolygonManagerInterface.java +23 -0
  18. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMapViewManagerDelegate.java +209 -0
  19. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMapViewManagerInterface.java +74 -0
  20. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMarkerManagerDelegate.java +104 -0
  21. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsMarkerManagerInterface.java +39 -0
  22. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsOverlayManagerDelegate.java +45 -0
  23. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsOverlayManagerInterface.java +22 -0
  24. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsPolylineManagerDelegate.java +58 -0
  25. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsPolylineManagerInterface.java +26 -0
  26. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsUrlTileManagerDelegate.java +62 -0
  27. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsUrlTileManagerInterface.java +27 -0
  28. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsWMSTileManagerDelegate.java +56 -0
  29. package/android/src/main/java/com/facebook/react/viewmanagers/RNMapsWMSTileManagerInterface.java +25 -0
  30. package/android/src/main/java/com/rnmaps/fabric/MapViewManager.java +5 -1
  31. package/android/src/main/java/com/rnmaps/fabric/NativeAirMapsModule.java +1 -1
  32. package/android/src/main/java/com/rnmaps/fabric/OverlayManager.java +9 -3
  33. package/android/src/main/java/com/rnmaps/fabric/UrlTileManager.java +124 -0
  34. package/android/src/main/java/com/rnmaps/fabric/WMSTileManager.java +114 -0
  35. package/android/src/main/java/com/rnmaps/maps/MapAirModulePackage.java +19 -3
  36. package/android/src/main/java/com/rnmaps/maps/MapMarker.java +608 -603
  37. package/android/src/main/java/com/rnmaps/maps/MapMarkerManager.java +3 -3
  38. package/android/src/main/java/com/rnmaps/maps/MapOverlay.java +2 -22
  39. package/android/src/main/java/com/rnmaps/maps/MapOverlayManager.java +23 -1
  40. package/android/src/main/java/com/rnmaps/maps/MapUrlTile.java +18 -18
  41. package/android/src/main/java/com/rnmaps/maps/MapUrlTileManager.java +10 -14
  42. package/android/src/main/java/com/rnmaps/maps/MapView.java +58 -49
  43. package/android/src/main/java/com/rnmaps/maps/MapWMSTile.java +3 -3
  44. package/android/src/main/java/com/rnmaps/maps/MapWMSTileManager.java +10 -10
  45. package/android/src/main/jni/CMakeLists.txt +36 -0
  46. package/android/src/main/jni/RNMapsSpecs-generated.cpp +68 -0
  47. package/android/src/main/jni/RNMapsSpecs.h +31 -0
  48. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ComponentDescriptors.cpp +31 -0
  49. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ComponentDescriptors.h +33 -0
  50. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/EventEmitters.cpp +979 -0
  51. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/EventEmitters.h +860 -0
  52. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/Props.cpp +227 -0
  53. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/Props.h +1297 -0
  54. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/RNMapsSpecsJSI-generated.cpp +74 -0
  55. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/RNMapsSpecsJSI.h +268 -0
  56. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ShadowNodes.cpp +26 -0
  57. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/ShadowNodes.h +131 -0
  58. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/States.cpp +16 -0
  59. package/android/src/main/jni/react/renderer/components/RNMapsSpecs/States.h +137 -0
  60. package/app.plugin.js +1 -0
  61. package/ios/AirGoogleMaps/AIRGoogleMap.h +13 -13
  62. package/ios/AirGoogleMaps/{AIRGoogleMap.m → AIRGoogleMap.mm} +32 -34
  63. package/ios/AirGoogleMaps/AIRGoogleMapManager.h +1 -0
  64. package/ios/AirGoogleMaps/AIRGoogleMapManager.mm +543 -0
  65. package/ios/AirGoogleMaps/AIRGoogleMapMarker.m +3 -3
  66. package/ios/AirGoogleMaps/AIRGoogleMapMarkerManager.m +1 -1
  67. package/ios/AirGoogleMaps/AIRGoogleMapUrlTile.m +2 -2
  68. package/ios/AirGoogleMaps/AIRGoogleMapWMSTile.m +2 -2
  69. package/ios/AirGoogleMaps/RNMapsGoogleMapView.h +5 -2
  70. package/ios/AirGoogleMaps/RNMapsGoogleMapView.mm +41 -33
  71. package/ios/AirGoogleMaps/RNMapsGoogleMapViewManager.mm +16 -1
  72. package/ios/AirGoogleMaps/RNMapsGooglePolygonView.mm +23 -14
  73. package/ios/AirGoogleMaps/RNMapsGooglePolygonViewManager.mm +1 -0
  74. package/ios/AirMaps/AIRMap.h +8 -9
  75. package/ios/AirMaps/{AIRMap.m → AIRMap.mm} +18 -14
  76. package/ios/AirMaps/AIRMapManager.m +8 -19
  77. package/ios/AirMaps/AIRMapMarker.m +57 -44
  78. package/ios/AirMaps/AIRMapOverlay.m +2 -2
  79. package/ios/AirMaps/AIRMapWMSTile.m +8 -8
  80. package/ios/AirMaps/FabricPlaceholders/PlaceHolderGoogleMapView.h +25 -0
  81. package/ios/AirMaps/FabricPlaceholders/PlaceHolderGoogleMapView.mm +77 -0
  82. package/ios/AirMaps/FabricPlaceholders/PlaceHolderPolygonView.h +25 -0
  83. package/ios/AirMaps/FabricPlaceholders/PlaceHolderPolygonView.mm +51 -0
  84. package/ios/AirMaps/RNMapsAirModule.h +2 -3
  85. package/ios/AirMaps/RNMapsAirModule.mm +14 -0
  86. package/ios/AirMaps/RNMapsDefines.h +1 -0
  87. package/ios/AirMaps/RNMapsMapView.h +5 -2
  88. package/ios/AirMaps/RNMapsMapView.mm +16 -6
  89. package/ios/AirMaps/RNMapsMapViewManager.mm +19 -1
  90. package/ios/AirMaps/RNMapsMarkerView.mm +12 -4
  91. package/ios/AirMaps/RNMapsMarkerViewManager.mm +7 -0
  92. package/ios/AirMaps/module.modulemap +6 -0
  93. package/ios/AirMaps.xcodeproj/project.pbxproj +15 -55
  94. package/ios/generated/RCTAppDependencyProvider.h +25 -0
  95. package/ios/generated/RCTAppDependencyProvider.mm +55 -0
  96. package/ios/generated/RCTModulesConformingToProtocolsProvider.h +18 -0
  97. package/ios/generated/RCTModulesConformingToProtocolsProvider.mm +33 -0
  98. package/ios/generated/RCTThirdPartyComponentsProvider.h +16 -0
  99. package/ios/generated/RCTThirdPartyComponentsProvider.mm +26 -0
  100. package/ios/{AirMaps → generated}/RNMapsAirModuleDelegate.h +1 -1
  101. package/ios/generated/RNMapsSpecs/ComponentDescriptors.cpp +29 -0
  102. package/ios/generated/RNMapsSpecs/ComponentDescriptors.h +31 -0
  103. package/ios/generated/RNMapsSpecs/EventEmitters.cpp +977 -0
  104. package/ios/generated/RNMapsSpecs/EventEmitters.h +846 -0
  105. package/ios/generated/RNMapsSpecs/Props.cpp +194 -0
  106. package/ios/generated/RNMapsSpecs/Props.h +1224 -0
  107. package/ios/generated/RNMapsSpecs/RCTComponentViewHelpers.h +591 -0
  108. package/ios/generated/RNMapsSpecs/RNMapsSpecs-generated.mm +92 -0
  109. package/ios/generated/RNMapsSpecs/RNMapsSpecs.h +137 -0
  110. package/ios/generated/RNMapsSpecs/ShadowNodes.cpp +24 -0
  111. package/ios/generated/RNMapsSpecs/ShadowNodes.h +109 -0
  112. package/ios/generated/RNMapsSpecs/States.cpp +16 -0
  113. package/ios/generated/RNMapsSpecs/States.h +113 -0
  114. package/ios/generated/RNMapsSpecsJSI-generated.cpp +74 -0
  115. package/ios/generated/RNMapsSpecsJSI.h +268 -0
  116. package/ios/generated/ReactAppDependencyProvider.podspec +34 -0
  117. package/ios/generated/module.modulemap +15 -0
  118. package/package.json +34 -27
  119. package/plugin/build/android.js +58 -0
  120. package/plugin/build/index.js +10 -0
  121. package/plugin/build/ios.js +172 -0
  122. package/react-native-google-maps.podspec +27 -0
  123. package/react-native-maps-generated.podspec +31 -0
  124. package/react-native-maps.podspec +52 -46
  125. package/react-native.config.js +16 -0
  126. package/src/AnimatedRegion.ts +169 -0
  127. package/src/Geojson.tsx +541 -0
  128. package/src/MapCallout.tsx +77 -0
  129. package/src/MapCalloutSubview.tsx +64 -0
  130. package/src/MapCircle.tsx +162 -0
  131. package/src/MapHeatmap.tsx +125 -0
  132. package/src/MapLocalTile.tsx +60 -0
  133. package/src/MapMarker.tsx +531 -0
  134. package/src/MapMarkerNativeComponent.ts +51 -0
  135. package/src/MapOverlay.tsx +178 -0
  136. package/src/MapPolygon.tsx +188 -0
  137. package/src/MapPolygon.types.ts +25 -0
  138. package/src/MapPolyline.tsx +215 -0
  139. package/src/MapUrlTile.tsx +169 -0
  140. package/src/MapView.tsx +1230 -0
  141. package/src/MapView.types.ts +212 -0
  142. package/src/MapView.web.ts +2 -0
  143. package/src/MapViewNativeComponent.ts +86 -0
  144. package/src/MapWMSTile.tsx +148 -0
  145. package/src/ProviderConstants.ts +2 -0
  146. package/src/createFabricMap.tsx +253 -0
  147. package/src/decorateMapComponent.ts +229 -0
  148. package/src/fixImageProp.ts +17 -0
  149. package/src/index.ts +52 -0
  150. package/src/sharedTypes.ts +101 -0
  151. package/{specs → src/specs}/NativeComponentCircle.ts +3 -4
  152. package/{specs → src/specs}/NativeComponentGoogleMapView.ts +15 -9
  153. package/{specs → src/specs}/NativeComponentMapView.ts +61 -32
  154. package/{specs → src/specs}/NativeComponentOverlay.ts +11 -2
  155. package/{specs → src/specs}/NativeComponentPolyline.ts +1 -1
  156. package/src/specs/NativeComponentUrlTile.ts +128 -0
  157. package/src/specs/NativeComponentWMSTile.ts +107 -0
  158. package/ios/AirGoogleMaps/AIRGoogleMapManager.m +0 -533
  159. package/lib/AnimatedRegion.d.ts +0 -19
  160. package/lib/AnimatedRegion.js +0 -134
  161. package/lib/Geojson.d.ts +0 -204
  162. package/lib/Geojson.js +0 -166
  163. package/lib/MapCallout.d.ts +0 -40
  164. package/lib/MapCallout.js +0 -51
  165. package/lib/MapCalloutSubview.d.ts +0 -34
  166. package/lib/MapCalloutSubview.js +0 -48
  167. package/lib/MapCircle.d.ts +0 -117
  168. package/lib/MapCircle.js +0 -53
  169. package/lib/MapHeatmap.d.ts +0 -78
  170. package/lib/MapHeatmap.js +0 -59
  171. package/lib/MapLocalTile.d.ts +0 -35
  172. package/lib/MapLocalTile.js +0 -44
  173. package/lib/MapMarker.d.ts +0 -322
  174. package/lib/MapMarker.js +0 -158
  175. package/lib/MapMarkerNativeComponent.d.ts +0 -15
  176. package/lib/MapMarkerNativeComponent.js +0 -15
  177. package/lib/MapOverlay.d.ts +0 -88
  178. package/lib/MapOverlay.js +0 -65
  179. package/lib/MapPolygon.d.ts +0 -140
  180. package/lib/MapPolygon.js +0 -53
  181. package/lib/MapPolygon.types.d.ts +0 -18
  182. package/lib/MapPolyline.d.ts +0 -156
  183. package/lib/MapPolyline.js +0 -53
  184. package/lib/MapUrlTile.d.ts +0 -134
  185. package/lib/MapUrlTile.js +0 -44
  186. package/lib/MapView.d.ts +0 -703
  187. package/lib/MapView.js +0 -427
  188. package/lib/MapView.types.d.ts +0 -161
  189. package/lib/MapView.types.js +0 -2
  190. package/lib/MapView.web.d.ts +0 -1
  191. package/lib/MapView.web.js +0 -9
  192. package/lib/MapViewNativeComponent.d.ts +0 -18
  193. package/lib/MapViewNativeComponent.js +0 -19
  194. package/lib/MapWMSTile.d.ts +0 -116
  195. package/lib/MapWMSTile.js +0 -44
  196. package/lib/ProviderConstants.d.ts +0 -2
  197. package/lib/ProviderConstants.js +0 -5
  198. package/lib/createFabricMap.d.ts +0 -24
  199. package/lib/createFabricMap.js +0 -188
  200. package/lib/decorateMapComponent.d.ts +0 -36
  201. package/lib/decorateMapComponent.js +0 -120
  202. package/lib/fixImageProp.d.ts +0 -4
  203. package/lib/fixImageProp.js +0 -16
  204. package/lib/index.d.ts +0 -38
  205. package/lib/index.js +0 -81
  206. package/lib/sharedTypes.d.ts +0 -81
  207. package/lib/sharedTypes.js +0 -2
  208. package/lib/sharedTypesInternal.js +0 -2
  209. package/lib/specs/NativeAirMapsModule.d.ts +0 -31
  210. package/lib/specs/NativeAirMapsModule.js +0 -4
  211. package/lib/specs/NativeComponentCallout.d.ts +0 -46
  212. package/lib/specs/NativeComponentCallout.js +0 -9
  213. package/lib/specs/NativeComponentCircle.d.ts +0 -74
  214. package/lib/specs/NativeComponentCircle.js +0 -7
  215. package/lib/specs/NativeComponentGoogleMapView.d.ts +0 -713
  216. package/lib/specs/NativeComponentGoogleMapView.js +0 -22
  217. package/lib/specs/NativeComponentGooglePolygon.d.ts +0 -75
  218. package/lib/specs/NativeComponentGooglePolygon.js +0 -7
  219. package/lib/specs/NativeComponentMapView.d.ts +0 -847
  220. package/lib/specs/NativeComponentMapView.js +0 -20
  221. package/lib/specs/NativeComponentMarker.d.ts +0 -258
  222. package/lib/specs/NativeComponentMarker.js +0 -19
  223. package/lib/specs/NativeComponentOverlay.d.ts +0 -67
  224. package/lib/specs/NativeComponentOverlay.js +0 -7
  225. package/lib/specs/NativeComponentPolyline.d.ts +0 -101
  226. package/lib/specs/NativeComponentPolyline.js +0 -7
  227. /package/ios/AirMaps/{UIView +AirMap.m → UIView+AirMap.m} +0 -0
  228. /package/ios/{AirMaps → generated}/RNMapsHostVewDelegate.h +0 -0
  229. /package/{lib/MapPolygon.types.js → plugin/build/types.js} +0 -0
  230. /package/{lib/sharedTypesInternal.d.ts → src/sharedTypesInternal.ts} +0 -0
  231. /package/{specs → src/specs}/NativeAirMapsModule.ts +0 -0
  232. /package/{specs → src/specs}/NativeComponentCallout.ts +0 -0
  233. /package/{specs → src/specs}/NativeComponentGooglePolygon.ts +0 -0
  234. /package/{specs → src/specs}/NativeComponentMarker.ts +0 -0
@@ -0,0 +1,541 @@
1
+ import * as React from 'react';
2
+ import {
3
+ Feature,
4
+ FeatureCollection,
5
+ Point,
6
+ Position,
7
+ MultiPoint,
8
+ LineString,
9
+ MultiLineString,
10
+ Polygon,
11
+ MultiPolygon,
12
+ } from 'geojson';
13
+ import Marker, {MapMarkerProps as MarkerProps} from './MapMarker';
14
+ import {MapPolygonProps as PolygonProps} from './MapPolygon';
15
+ import {MapPolylineProps as PolylineProps} from './MapPolyline';
16
+ import Polyline from './MapPolyline';
17
+ import MapPolygon from './MapPolygon';
18
+ import {LatLng} from './sharedTypes';
19
+
20
+ export type GeojsonProps = {
21
+ /**
22
+ * Sets the anchor point for the marker.
23
+ * The anchor specifies the point in the icon image that is anchored to the marker's position on the Earth's surface.
24
+ *
25
+ * The anchor point is specified in the continuous space [0.0, 1.0] x [0.0, 1.0],
26
+ * where (0, 0) is the top-left corner of the image, and (1, 1) is the bottom-right corner.
27
+ *
28
+ * The anchoring point in a W x H image is the nearest discrete grid point in a (W + 1) x (H + 1) grid, obtained by scaling the then rounding.
29
+ * For example, in a 4 x 2 image, the anchor point (0.7, 0.6) resolves to the grid point at (3, 1).
30
+ *
31
+ * @default {x: 0.5, y: 1.0}
32
+ * @platform iOS: Google Maps only. For Apple Maps, see the `centerOffset` prop
33
+ * @platform Android: Supported
34
+ */
35
+ anchor?: MarkerProps['anchor'];
36
+
37
+ /**
38
+ * The offset (in points) at which to display the annotation view.
39
+ *
40
+ * By default, the center point of an annotation view is placed at the coordinate point of the associated annotation.
41
+ *
42
+ * Positive offset values move the annotation view down and to the right, while negative values move it up and to the left.
43
+ *
44
+ * @default {x: 0.0, y: 0.0}
45
+ * @platform iOS: Apple Maps only. For Google Maps, see the `anchor` prop
46
+ * @platform Android: Not supported. See see the `anchor` prop
47
+ */
48
+ centerOffset?: MarkerProps['centerOffset'];
49
+
50
+ /**
51
+ * The pincolor used on markers
52
+ *
53
+ * @platform iOS: Supported
54
+ * @platform Android: Supported
55
+ */
56
+ color?: MarkerProps['pinColor'];
57
+
58
+ /**
59
+ * The fill color to use for the path.
60
+ *
61
+ * @platform iOS: Supported
62
+ * @platform Android: Supported
63
+ */
64
+ fillColor?: PolygonProps['fillColor'];
65
+
66
+ /**
67
+ * [Geojson](https://geojson.org/) description of object.
68
+ *
69
+ * @platform iOS: Supported
70
+ * @platform Android: Supported
71
+ */
72
+ geojson: FeatureCollection;
73
+
74
+ /**
75
+ * A custom image to be used as the marker's icon. Only local image resources are allowed to be
76
+ * used.
77
+ *
78
+ * @platform iOS: Supported
79
+ * @platform Android: Supported
80
+ */
81
+ image?: MarkerProps['image'];
82
+
83
+ /**
84
+ * The line cap style to apply to the open ends of the path.
85
+ * The default style is `round`.
86
+ *
87
+ * @platform iOS: Apple Maps only
88
+ * @platform Android: Supported
89
+ */
90
+ lineCap?: PolylineProps['lineCap'];
91
+
92
+ /**
93
+ * An array of numbers specifying the dash pattern to use for the path.
94
+ *
95
+ * The array contains one or more numbers that indicate the lengths (measured in points) of the
96
+ * line segments and gaps in the pattern. The values in the array alternate, starting with the
97
+ * first line segment length, followed by the first gap length, followed by the second line
98
+ * segment length, and so on.
99
+ *
100
+ * This property is set to `null` by default, which indicates no line dash pattern.
101
+ *
102
+ * @platform iOS: Supported
103
+ * @platform Android: Supported
104
+ */
105
+ lineDashPattern?:
106
+ | PolygonProps['lineDashPattern']
107
+ | PolylineProps['lineDashPattern'];
108
+
109
+ /**
110
+ * The offset (in points) at which to start drawing the dash pattern.
111
+ *
112
+ * Use this property to start drawing a dashed line partway through a segment or gap. For
113
+ * example, a phase value of 6 for the patter 5-2-3-2 would cause drawing to begin in the
114
+ * middle of the first gap.
115
+ *
116
+ * The default value of this property is 0.
117
+ *
118
+ * @platform iOS: Apple Maps only
119
+ * @platform Android: Not supported
120
+ */
121
+ lineDashPhase?: PolylineProps['lineDashPhase'];
122
+
123
+ /**
124
+ * The line join style to apply to corners of the path.
125
+ * The default style is `round`.
126
+ *
127
+ * @platform iOS: Apple Maps only
128
+ * @platform Android: Not supported
129
+ */
130
+ lineJoin?: PolylineProps['lineJoin'];
131
+
132
+ /**
133
+ * Component to render in place of the default marker when the overlay type is a `point`
134
+ *
135
+ * @platform iOS: Supported
136
+ * @platform Android: Supported
137
+ */
138
+ markerComponent?: MarkerProps['children'];
139
+
140
+ /**
141
+ * The limiting value that helps avoid spikes at junctions between connected line segments.
142
+ * The miter limit helps you avoid spikes in paths that use the `miter` `lineJoin` style. If
143
+ * the ratio of the miter length—that is, the diagonal length of the miter join—to the line
144
+ * thickness exceeds the miter limit, the joint is converted to a bevel join. The default
145
+ * miter limit is 10, which results in the conversion of miters whose angle at the joint
146
+ * is less than 11 degrees.
147
+ *
148
+ * @platform iOS: Apple Maps only
149
+ * @platform Android: Not supported
150
+ */
151
+ miterLimit?: PolylineProps['miterLimit'];
152
+
153
+ /**
154
+ * Callback that is called when the user presses any of the overlays
155
+ */
156
+ onPress?: (event: OverlayPressEvent) => void;
157
+
158
+ /**
159
+ * The stroke color to use for the path.
160
+ *
161
+ * @platform — iOS: Supported
162
+ * @platform — Android: Supported
163
+ */
164
+ strokeColor?: PolygonProps['strokeColor'] | PolylineProps['strokeColor'];
165
+
166
+ /**
167
+ * The stroke width to use for the path.
168
+ *
169
+ * @platform — iOS: Supported
170
+ * @platform — Android: Supported
171
+ */
172
+ strokeWidth?: PolygonProps['strokeWidth'] | PolylineProps['strokeWidth'];
173
+
174
+ /**
175
+ * Make the `Polygon` or `Polyline` tappable
176
+ *
177
+ * @platform — iOS: Google Maps only
178
+ * @platform — Android: Supported
179
+ */
180
+ tappable?: PolygonProps['tappable'] | PolylineProps['tappable'];
181
+
182
+ /**
183
+ * The title of the marker. This is only used if the <Marker /> component has no children that
184
+ * are a `<Callout />`, in which case the default callout behavior will be used, which
185
+ * will show both the `title` and the `description`, if provided.
186
+ *
187
+ * @platform — iOS: Supported
188
+ * @platform — Android: Supported
189
+ */
190
+ title?: MarkerProps['title'];
191
+
192
+ /**
193
+ * Sets whether this marker should track view changes.
194
+ * It's recommended to turn it off whenever it's possible to improve custom marker performance.
195
+ * This is the default value for all point markers in your geojson data. It can be overriden
196
+ * on a per point basis by adding a `trackViewChanges` property to the `properties` object on the point.
197
+ *
198
+ * @default true
199
+ * @platform iOS: Google Maps only
200
+ * @platform Android: Supported
201
+ */
202
+ tracksViewChanges?: boolean;
203
+
204
+ /**
205
+ * The order in which this tile overlay is drawn with respect to other overlays. An overlay
206
+ * with a larger z-index is drawn over overlays with smaller z-indices. The order of overlays
207
+ * with the same z-index is arbitrary. The default zIndex is 0.
208
+ *
209
+ * @platform iOS: Apple Maps: [Marker], Google Maps: [Marker, Polygon, Polyline]
210
+ * @platform Android: Supported
211
+ */
212
+ zIndex?:
213
+ | MarkerProps['zIndex']
214
+ | PolygonProps['zIndex']
215
+ | PolylineProps['zIndex'];
216
+ };
217
+
218
+ const Geojson = (props: GeojsonProps) => {
219
+ const {
220
+ anchor,
221
+ centerOffset,
222
+ geojson,
223
+ strokeColor,
224
+ fillColor,
225
+ strokeWidth,
226
+ color,
227
+ title,
228
+ image,
229
+ zIndex,
230
+ onPress,
231
+ lineCap,
232
+ lineJoin,
233
+ tappable,
234
+ tracksViewChanges,
235
+ miterLimit,
236
+ lineDashPhase,
237
+ lineDashPattern,
238
+ markerComponent,
239
+ } = props;
240
+ const pointOverlays = makePointOverlays(geojson.features);
241
+ const lineOverlays = makeLineOverlays(geojson.features);
242
+ const polygonOverlays = makePolygonOverlays(geojson.features);
243
+ return (
244
+ <React.Fragment>
245
+ {pointOverlays.map((overlay, index) => {
246
+ const markerColor = getColor(color, overlay, 'marker-color');
247
+ const pointOverlayTracksViewChanges =
248
+ overlay.feature.properties?.tracksViewChanges || tracksViewChanges;
249
+ return (
250
+ <Marker
251
+ key={index}
252
+ coordinate={overlay.coordinates}
253
+ tracksViewChanges={pointOverlayTracksViewChanges}
254
+ image={image}
255
+ title={title}
256
+ pinColor={markerColor}
257
+ zIndex={zIndex}
258
+ anchor={anchor}
259
+ centerOffset={centerOffset}
260
+ onPress={() => onPress && onPress(overlay)}>
261
+ {markerComponent}
262
+ </Marker>
263
+ );
264
+ })}
265
+ {lineOverlays.map((overlay, index) => {
266
+ const lineStrokeColor = getColor(strokeColor, overlay, 'stroke');
267
+ const lineStrokeWidth = getStrokeWidth(strokeWidth, overlay);
268
+
269
+ return (
270
+ <Polyline
271
+ key={index}
272
+ coordinates={overlay.coordinates}
273
+ strokeColor={lineStrokeColor}
274
+ strokeWidth={lineStrokeWidth}
275
+ lineDashPhase={lineDashPhase}
276
+ lineDashPattern={lineDashPattern}
277
+ lineCap={lineCap}
278
+ lineJoin={lineJoin}
279
+ miterLimit={miterLimit}
280
+ zIndex={zIndex}
281
+ tappable={tappable}
282
+ onPress={() => onPress && onPress(overlay)}
283
+ />
284
+ );
285
+ })}
286
+ {polygonOverlays.map((overlay, index) => {
287
+ const polygonFillColor = getColor(fillColor, overlay, 'fill');
288
+ const lineStrokeColor = getColor(strokeColor, overlay, 'stroke');
289
+ const lineStrokeWidth = getStrokeWidth(strokeWidth, overlay);
290
+
291
+ return (
292
+ <MapPolygon
293
+ key={index}
294
+ coordinates={overlay.coordinates}
295
+ holes={overlay.holes}
296
+ strokeColor={lineStrokeColor}
297
+ fillColor={polygonFillColor}
298
+ strokeWidth={lineStrokeWidth}
299
+ lineDashPhase={lineDashPhase}
300
+ lineDashPattern={lineDashPattern}
301
+ lineCap={lineCap}
302
+ lineJoin={lineJoin}
303
+ miterLimit={miterLimit}
304
+ tappable={tappable}
305
+ onPress={() => onPress && onPress(overlay)}
306
+ zIndex={zIndex}
307
+ />
308
+ );
309
+ })}
310
+ </React.Fragment>
311
+ );
312
+ };
313
+
314
+ export default Geojson;
315
+
316
+ const makePointOverlays = (features: Feature[]): AnyPointOverlay[] => {
317
+ return features
318
+ .filter(isAnyPointFeature)
319
+ .map(feature =>
320
+ makeCoordinatesForAnyPoint(feature.geometry).map(coordinates =>
321
+ makeOverlayForAnyPoint(coordinates, feature),
322
+ ),
323
+ )
324
+ .reduce((prev, curr) => prev.concat(curr), [])
325
+ .map(overlay => ({...overlay, type: 'point'}));
326
+ };
327
+
328
+ const makeLineOverlays = (features: Feature[]): AnyLineStringOverlay[] => {
329
+ return features
330
+ .filter(isAnyLineStringFeature)
331
+ .map(feature =>
332
+ makeCoordinatesForAnyLine(feature.geometry).map(coordinates =>
333
+ makeOverlayForAnyLine(coordinates, feature),
334
+ ),
335
+ )
336
+ .reduce((prev, curr) => prev.concat(curr), [])
337
+ .map(overlay => ({...overlay, type: 'polyline'}));
338
+ };
339
+
340
+ const makePolygonOverlays = (features: Feature[]): AnyPolygonOverlay[] => {
341
+ const multipolygons: AnyPolygonOverlay[] = features
342
+ .filter(isMultiPolygonFeature)
343
+ .map(feature =>
344
+ makeCoordinatesForMultiPolygon(feature.geometry).map(coordinates =>
345
+ makeOverlayForAnyPolygon(coordinates, feature),
346
+ ),
347
+ )
348
+ .reduce((prev, curr) => prev.concat(curr), [])
349
+ .map(overlay => ({...overlay, type: 'polygon'}));
350
+
351
+ const polygons: AnyPolygonOverlay[] = features
352
+ .filter(isPolygonFeature)
353
+ .map(feature =>
354
+ makeOverlayForAnyPolygon(
355
+ makeCoordinatesForPolygon(feature.geometry),
356
+ feature,
357
+ ),
358
+ )
359
+ .reduce<Omit<AnyPolygonOverlay, 'type'>[]>(
360
+ (prev, curr) => prev.concat(curr),
361
+ [],
362
+ )
363
+ .map(overlay => ({...overlay, type: 'polygon'}));
364
+
365
+ return polygons.concat(multipolygons);
366
+ };
367
+
368
+ const makeOverlayForAnyPoint = (
369
+ coordinates: LatLng,
370
+ feature: Feature<Point | MultiPoint>,
371
+ ): Omit<AnyPointOverlay, 'type'> => {
372
+ return {feature, coordinates};
373
+ };
374
+
375
+ const makeOverlayForAnyLine = (
376
+ coordinates: LatLng[],
377
+ feature: Feature<LineString | MultiLineString>,
378
+ ): Omit<AnyLineStringOverlay, 'type'> => {
379
+ return {feature, coordinates};
380
+ };
381
+
382
+ const makeOverlayForAnyPolygon = (
383
+ coordinates: LatLng[][],
384
+ feature: Feature<Polygon | MultiPolygon>,
385
+ ): Omit<AnyPolygonOverlay, 'type'> => {
386
+ return {
387
+ feature,
388
+ coordinates: coordinates[0],
389
+ holes: coordinates.length > 1 ? coordinates.slice(1) : undefined,
390
+ };
391
+ };
392
+
393
+ const makePoint = (c: Position): LatLng => ({
394
+ latitude: c[1],
395
+ longitude: c[0],
396
+ });
397
+
398
+ const makeLine = (l: Position[]) => l.map(makePoint);
399
+
400
+ const makeCoordinatesForAnyPoint = (geometry: Point | MultiPoint) => {
401
+ if (geometry.type === 'Point') {
402
+ return [makePoint(geometry.coordinates)];
403
+ }
404
+ return geometry.coordinates.map(makePoint);
405
+ };
406
+
407
+ const makeCoordinatesForAnyLine = (geometry: LineString | MultiLineString) => {
408
+ if (geometry.type === 'LineString') {
409
+ return [makeLine(geometry.coordinates)];
410
+ }
411
+ return geometry.coordinates.map(makeLine);
412
+ };
413
+
414
+ const makeCoordinatesForPolygon = (geometry: Polygon) => {
415
+ return geometry.coordinates.map(makeLine);
416
+ };
417
+
418
+ const makeCoordinatesForMultiPolygon = (geometry: MultiPolygon) => {
419
+ return geometry.coordinates.map(p => p.map(makeLine));
420
+ };
421
+
422
+ const getRgbaFromHex = (hex: string, alpha: number = 1) => {
423
+ const matchArray = hex.match(/\w\w/g);
424
+ if (!matchArray || matchArray.length < 3) {
425
+ throw new Error('Invalid hex string');
426
+ }
427
+ const [r, g, b] = matchArray.map(x => {
428
+ const subColor = parseInt(x, 16);
429
+ if (Number.isNaN(subColor)) {
430
+ throw new Error('Invalid hex string');
431
+ }
432
+ return subColor;
433
+ });
434
+ return `rgba(${r},${g},${b},${alpha})`;
435
+ };
436
+
437
+ const getColor = (
438
+ prop: string | undefined,
439
+ overlay: Overlay,
440
+ colorType: string,
441
+ ) => {
442
+ if (prop) {
443
+ return prop;
444
+ }
445
+ let color = overlay.feature.properties?.[colorType];
446
+ if (color) {
447
+ const opacityProperty = colorType + '-opacity';
448
+ const alpha = overlay.feature.properties?.[opacityProperty];
449
+ if (alpha && alpha !== '0' && color[0] === '#') {
450
+ color = getRgbaFromHex(color, alpha);
451
+ }
452
+ return color;
453
+ }
454
+ return undefined;
455
+ };
456
+
457
+ const getStrokeWidth = (
458
+ prop: GeojsonProps['strokeWidth'],
459
+ overlay: Overlay,
460
+ ) => {
461
+ if (prop) {
462
+ return prop;
463
+ }
464
+ return overlay.feature.properties?.['stroke-width'];
465
+ };
466
+
467
+ // GeoJSON.Feature type-guards
468
+ const isPointFeature = (feature: Feature): feature is Feature<Point> =>
469
+ feature.geometry.type === 'Point';
470
+
471
+ const isMultiPointFeature = (
472
+ feature: Feature,
473
+ ): feature is Feature<MultiPoint> => feature.geometry.type === 'MultiPoint';
474
+
475
+ const isAnyPointFeature = (
476
+ feature: Feature,
477
+ ): feature is Feature<Point> | Feature<MultiPoint> =>
478
+ isPointFeature(feature) || isMultiPointFeature(feature);
479
+
480
+ const isLineStringFeature = (
481
+ feature: Feature,
482
+ ): feature is Feature<LineString> => feature.geometry.type === 'LineString';
483
+
484
+ const isMultiLineStringFeature = (
485
+ feature: Feature,
486
+ ): feature is Feature<MultiLineString> =>
487
+ feature.geometry.type === 'MultiLineString';
488
+
489
+ const isAnyLineStringFeature = (
490
+ feature: Feature,
491
+ ): feature is Feature<LineString> | Feature<MultiLineString> =>
492
+ isLineStringFeature(feature) || isMultiLineStringFeature(feature);
493
+
494
+ const isPolygonFeature = (feature: Feature): feature is Feature<Polygon> =>
495
+ feature.geometry.type === 'Polygon';
496
+
497
+ const isMultiPolygonFeature = (
498
+ feature: Feature,
499
+ ): feature is Feature<MultiPolygon> => feature.geometry.type === 'MultiPolygon';
500
+
501
+ type OverlayPressEvent = {
502
+ type:
503
+ | AnyPointOverlay['type']
504
+ | AnyLineStringOverlay['type']
505
+ | AnyPolygonOverlay['type'];
506
+ feature:
507
+ | AnyPointOverlay['feature']
508
+ | AnyLineStringOverlay['feature']
509
+ | AnyPolygonOverlay['feature'];
510
+ coordinates:
511
+ | AnyPointOverlay['coordinates']
512
+ | AnyLineStringOverlay['coordinates']
513
+ | AnyPolygonOverlay['coordinates'];
514
+ holes?: AnyPolygonOverlay['holes'];
515
+ };
516
+
517
+ type AnyPointOverlay = {
518
+ type: 'point';
519
+ feature: Feature<Point | MultiPoint>;
520
+ coordinates: LatLng;
521
+ };
522
+
523
+ type AnyLineStringOverlay = {
524
+ type: 'polyline';
525
+ feature: Feature<LineString | MultiLineString>;
526
+ coordinates: LatLng[];
527
+ };
528
+
529
+ type AnyPolygonOverlay = {
530
+ type: 'polygon';
531
+ feature: Feature<Polygon | MultiPolygon>;
532
+ coordinates: LatLng[];
533
+ holes?: LatLng[][];
534
+ };
535
+
536
+ type Overlay = {
537
+ type: 'point' | 'polyline' | 'polygon';
538
+ feature: Feature;
539
+ coordinates: LatLng | LatLng[];
540
+ holes?: LatLng[][];
541
+ };
@@ -0,0 +1,77 @@
1
+ import * as React from 'react';
2
+ import {StyleSheet, ViewProps} from 'react-native';
3
+ import decorateMapComponent, {
4
+ MapManagerCommand,
5
+ NativeComponent,
6
+ ProviderContext,
7
+ SUPPORTED,
8
+ UIManagerCommand,
9
+ USES_DEFAULT_IMPLEMENTATION,
10
+ } from './decorateMapComponent';
11
+ import {CalloutPressEvent} from './sharedTypes';
12
+
13
+ export type MapCalloutProps = ViewProps & {
14
+ /**
15
+ * If `true`, clicks on transparent areas in callout will be passed to map.
16
+ *
17
+ * @default false
18
+ * @platform iOS: Supported
19
+ * @platform Android: Not supported
20
+ */
21
+ alphaHitTest?: boolean;
22
+
23
+ /**
24
+ * Callback that is called when the user presses on the callout
25
+ *
26
+ * @platform iOS: Apple Maps only
27
+ * @platform Android: Supported
28
+ */
29
+ onPress?: (event: CalloutPressEvent) => void;
30
+
31
+ /**
32
+ * If `false`, a default "tooltip" bubble window will be drawn around this callouts children.
33
+ * If `true`, the child views can fully customize their appearance, including any "bubble" like styles.
34
+ *
35
+ * @default false
36
+ * @platform iOS: Supported
37
+ * @platform Android: Supported
38
+ */
39
+ tooltip?: boolean;
40
+ };
41
+
42
+ type NativeProps = MapCalloutProps;
43
+
44
+ export class MapCallout extends React.Component<MapCalloutProps> {
45
+ // declaration only, as they are set through decorateMap
46
+ /// @ts-ignore
47
+ context!: React.ContextType<typeof ProviderContext>;
48
+ getNativeComponent!: () => NativeComponent<NativeProps>;
49
+ getMapManagerCommand!: (name: string) => MapManagerCommand;
50
+ getUIManagerCommand!: (name: string) => UIManagerCommand;
51
+
52
+ render() {
53
+ const {tooltip = false, alphaHitTest = false} = this.props;
54
+ const AIRMapCallout = this.getNativeComponent();
55
+ return (
56
+ <AIRMapCallout
57
+ {...this.props}
58
+ tooltip={tooltip}
59
+ alphaHitTest={alphaHitTest}
60
+ style={[styles.callout, this.props.style]}
61
+ />
62
+ );
63
+ }
64
+ }
65
+
66
+ const styles = StyleSheet.create({
67
+ callout: {
68
+ position: 'absolute',
69
+ },
70
+ });
71
+
72
+ export default decorateMapComponent(MapCallout, 'Callout', {
73
+ google: {
74
+ ios: SUPPORTED,
75
+ android: USES_DEFAULT_IMPLEMENTATION,
76
+ },
77
+ });
@@ -0,0 +1,64 @@
1
+ import * as React from 'react';
2
+ import {NativeSyntheticEvent, StyleSheet, ViewProps} from 'react-native';
3
+ import decorateMapComponent, {
4
+ SUPPORTED,
5
+ NOT_SUPPORTED,
6
+ ProviderContext,
7
+ NativeComponent,
8
+ MapManagerCommand,
9
+ UIManagerCommand,
10
+ } from './decorateMapComponent';
11
+ import {Frame, Point} from './sharedTypes';
12
+
13
+ export type MapCalloutSubviewProps = ViewProps & {
14
+ /**
15
+ * Callback that is called when the user presses on this subview inside callout
16
+ *
17
+ * @platform iOS: Supported
18
+ * @platform Android: Not supported
19
+ */
20
+ onPress?: (event: CalloutSubviewPressEvent) => void;
21
+ };
22
+
23
+ type NativeProps = MapCalloutSubviewProps;
24
+
25
+ export class MapCalloutSubview extends React.Component<MapCalloutSubviewProps> {
26
+ // declaration only, as they are set through decorateMap
27
+ /// @ts-ignore
28
+ context!: React.ContextType<typeof ProviderContext>;
29
+ getNativeComponent!: () => NativeComponent<NativeProps>;
30
+ getMapManagerCommand!: (name: string) => MapManagerCommand;
31
+ getUIManagerCommand!: (name: string) => UIManagerCommand;
32
+ render() {
33
+ const AIRMapCalloutSubview = this.getNativeComponent();
34
+ return (
35
+ <AIRMapCalloutSubview
36
+ {...this.props}
37
+ style={[styles.calloutSubview, this.props.style]}
38
+ />
39
+ );
40
+ }
41
+ }
42
+
43
+ const styles = StyleSheet.create({
44
+ calloutSubview: {},
45
+ });
46
+
47
+ export default decorateMapComponent(MapCalloutSubview, 'CalloutSubview', {
48
+ google: {
49
+ ios: SUPPORTED,
50
+ android: NOT_SUPPORTED,
51
+ },
52
+ });
53
+
54
+ type CalloutSubviewPressEvent = NativeSyntheticEvent<{
55
+ /**
56
+ * Apple Maps: `callout-inside-press`
57
+ *
58
+ * Google Maps: `marker-inside-overlay-press`
59
+ */
60
+ action: 'callout-inside-press' | 'marker-inside-overlay-press';
61
+ frame: Frame;
62
+ id: string;
63
+ point: Point;
64
+ }>;