react-native-google-maps-plus 1.1.0-dev.2 → 1.1.0-dev.4

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 (67) hide show
  1. package/README.md +7 -5
  2. package/RNGoogleMapsPlus.podspec +2 -1
  3. package/android/src/main/java/com/rngooglemapsplus/GoogleMapsViewImpl.kt +91 -102
  4. package/android/src/main/java/com/rngooglemapsplus/LocationHandler.kt +3 -3
  5. package/android/src/main/java/com/rngooglemapsplus/MapCircleBuilder.kt +16 -2
  6. package/android/src/main/java/com/rngooglemapsplus/MapHeatmapBuilder.kt +31 -0
  7. package/android/src/main/java/com/rngooglemapsplus/MapMarkerBuilder.kt +25 -0
  8. package/android/src/main/java/com/rngooglemapsplus/MapPolygonBuilder.kt +18 -1
  9. package/android/src/main/java/com/rngooglemapsplus/MapPolylineBuilder.kt.kt +26 -9
  10. package/android/src/main/java/com/rngooglemapsplus/RNGoogleMapsPlusView.kt +61 -71
  11. package/android/src/main/java/com/rngooglemapsplus/extensions/RNHeatmapPointExtension.kt +9 -0
  12. package/ios/GoogleMapViewImpl.swift +129 -213
  13. package/ios/LocationHandler.swift +2 -10
  14. package/ios/MapCircleBuilder.swift +23 -8
  15. package/ios/MapHeatmapBuilder.swift +27 -0
  16. package/ios/MapHelper.swift +6 -4
  17. package/ios/MapMarkerBuilder.swift +39 -41
  18. package/ios/MapPolygonBuilder.swift +25 -7
  19. package/ios/MapPolylineBuilder.swift +27 -11
  20. package/ios/RNGoogleMapsPlusView.swift +31 -14
  21. package/ios/extensions/RNCircle+Extension.swift +0 -13
  22. package/ios/extensions/RNHeatmap+Extension.swift +16 -0
  23. package/ios/extensions/RNPolygon+Extension.swift.swift +2 -19
  24. package/ios/extensions/RNPolyline+Extension.swift.swift +1 -26
  25. package/lib/module/types.js.map +1 -1
  26. package/lib/typescript/src/RNGoogleMapsPlusView.nitro.d.ts +3 -3
  27. package/lib/typescript/src/RNGoogleMapsPlusView.nitro.d.ts.map +1 -1
  28. package/lib/typescript/src/types.d.ts +24 -1
  29. package/lib/typescript/src/types.d.ts.map +1 -1
  30. package/nitrogen/generated/android/c++/JHybridRNGoogleMapsPlusViewSpec.cpp +48 -15
  31. package/nitrogen/generated/android/c++/JHybridRNGoogleMapsPlusViewSpec.hpp +4 -4
  32. package/nitrogen/generated/android/c++/JRNCircle.hpp +4 -4
  33. package/nitrogen/generated/android/c++/JRNHeatmap.hpp +100 -0
  34. package/nitrogen/generated/android/c++/JRNHeatmapGradient.hpp +89 -0
  35. package/nitrogen/generated/android/c++/JRNHeatmapPoint.hpp +61 -0
  36. package/nitrogen/generated/android/c++/JRNMapZoomConfig.hpp +57 -0
  37. package/nitrogen/generated/android/c++/views/JHybridRNGoogleMapsPlusViewStateUpdater.cpp +6 -6
  38. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/HybridRNGoogleMapsPlusViewSpec.kt +7 -7
  39. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNCircle.kt +1 -1
  40. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNHeatmap.kt +47 -0
  41. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNHeatmapGradient.kt +35 -0
  42. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNHeatmapPoint.kt +35 -0
  43. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNMapZoomConfig.kt +32 -0
  44. package/nitrogen/generated/ios/RNGoogleMapsPlus-Swift-Cxx-Bridge.hpp +101 -0
  45. package/nitrogen/generated/ios/RNGoogleMapsPlus-Swift-Cxx-Umbrella.hpp +12 -0
  46. package/nitrogen/generated/ios/c++/HybridRNGoogleMapsPlusViewSpecSwift.hpp +23 -11
  47. package/nitrogen/generated/ios/c++/views/HybridRNGoogleMapsPlusViewComponent.mm +9 -9
  48. package/nitrogen/generated/ios/swift/HybridRNGoogleMapsPlusViewSpec.swift +2 -2
  49. package/nitrogen/generated/ios/swift/HybridRNGoogleMapsPlusViewSpec_cxx.swift +39 -19
  50. package/nitrogen/generated/ios/swift/RNCircle.swift +5 -17
  51. package/nitrogen/generated/ios/swift/RNHeatmap.swift +180 -0
  52. package/nitrogen/generated/ios/swift/RNHeatmapGradient.swift +81 -0
  53. package/nitrogen/generated/ios/swift/RNHeatmapPoint.swift +57 -0
  54. package/nitrogen/generated/ios/swift/RNMapZoomConfig.swift +70 -0
  55. package/nitrogen/generated/shared/c++/HybridRNGoogleMapsPlusViewSpec.cpp +4 -4
  56. package/nitrogen/generated/shared/c++/HybridRNGoogleMapsPlusViewSpec.hpp +10 -4
  57. package/nitrogen/generated/shared/c++/RNCircle.hpp +5 -5
  58. package/nitrogen/generated/shared/c++/RNHeatmap.hpp +98 -0
  59. package/nitrogen/generated/shared/c++/RNHeatmapGradient.hpp +76 -0
  60. package/nitrogen/generated/shared/c++/RNHeatmapPoint.hpp +75 -0
  61. package/nitrogen/generated/shared/c++/RNMapZoomConfig.hpp +71 -0
  62. package/nitrogen/generated/shared/c++/views/HybridRNGoogleMapsPlusViewComponent.cpp +19 -19
  63. package/nitrogen/generated/shared/c++/views/HybridRNGoogleMapsPlusViewComponent.hpp +4 -2
  64. package/nitrogen/generated/shared/json/RNGoogleMapsPlusViewConfig.json +2 -2
  65. package/package.json +12 -12
  66. package/src/RNGoogleMapsPlusView.nitro.ts +4 -2
  67. package/src/types.ts +28 -1
@@ -2,18 +2,14 @@ package com.rngooglemapsplus
2
2
 
3
3
  import com.facebook.proguard.annotations.DoNotStrip
4
4
  import com.facebook.react.bridge.UiThreadUtil
5
- import com.facebook.react.uimanager.PixelUtil.dpToPx
6
5
  import com.facebook.react.uimanager.ThemedReactContext
7
- import com.google.android.gms.maps.model.LatLng
8
6
  import com.google.android.gms.maps.model.MapStyleOptions
9
7
  import com.margelo.nitro.core.Promise
10
8
  import com.rngooglemapsplus.extensions.circleEquals
11
9
  import com.rngooglemapsplus.extensions.markerEquals
12
- import com.rngooglemapsplus.extensions.markerStyleEquals
13
10
  import com.rngooglemapsplus.extensions.polygonEquals
14
11
  import com.rngooglemapsplus.extensions.polylineEquals
15
12
  import com.rngooglemapsplus.extensions.toCameraPosition
16
- import com.rngooglemapsplus.extensions.toColor
17
13
  import com.rngooglemapsplus.extensions.toMapColorScheme
18
14
 
19
15
  @DoNotStrip
@@ -29,12 +25,15 @@ class RNGoogleMapsPlusView(
29
25
  private val polylineBuilder = MapPolylineBuilder()
30
26
  private val polygonBuilder = MapPolygonBuilder()
31
27
  private val circleBuilder = MapCircleBuilder()
28
+ private val heatmapBuilder = MapHeatmapBuilder()
32
29
 
33
30
  override val view =
34
31
  GoogleMapsViewImpl(context, locationHandler, playServiceHandler, markerBuilder)
35
32
 
36
33
  override var initialProps: RNInitialProps? = null
37
34
  set(value) {
35
+ if (field == value) return
36
+ field = value
38
37
  view.initMapView(
39
38
  value?.mapId,
40
39
  value?.liteMode,
@@ -44,31 +43,43 @@ class RNGoogleMapsPlusView(
44
43
 
45
44
  override var uiSettings: RNMapUiSettings? = null
46
45
  set(value) {
46
+ if (field == value) return
47
+ field = value
47
48
  view.uiSettings = value
48
49
  }
49
50
 
50
51
  override var myLocationEnabled: Boolean? = null
51
52
  set(value) {
53
+ if (field == value) return
54
+ field = value
52
55
  view.myLocationEnabled = value
53
56
  }
54
57
 
55
58
  override var buildingEnabled: Boolean? = null
56
59
  set(value) {
60
+ if (field == value) return
61
+ field = value
57
62
  view.buildingEnabled = value
58
63
  }
59
64
 
60
65
  override var trafficEnabled: Boolean? = null
61
66
  set(value) {
67
+ if (field == value) return
68
+ field = value
62
69
  view.trafficEnabled = value
63
70
  }
64
71
 
65
72
  override var indoorEnabled: Boolean? = null
66
73
  set(value) {
74
+ if (field == value) return
75
+ field = value
67
76
  view.indoorEnabled = value
68
77
  }
69
78
 
70
79
  override var customMapStyle: String? = null
71
80
  set(value) {
81
+ if (field == value) return
82
+ field = value
72
83
  currentCustomMapStyle = value
73
84
  value?.let {
74
85
  view.customMapStyle = MapStyleOptions(it)
@@ -77,26 +88,29 @@ class RNGoogleMapsPlusView(
77
88
 
78
89
  override var userInterfaceStyle: RNUserInterfaceStyle? = null
79
90
  set(value) {
91
+ if (field == value) return
92
+ field = value
80
93
  view.userInterfaceStyle = value.toMapColorScheme()
81
94
  }
82
95
 
83
- override var minZoomLevel: Double? = null
84
- set(value) {
85
- view.minZoomLevel = value
86
- }
87
-
88
- override var maxZoomLevel: Double? = null
96
+ override var mapZoomConfig: RNMapZoomConfig? = null
89
97
  set(value) {
90
- view.maxZoomLevel = value
98
+ if (field == value) return
99
+ field = value
100
+ view.mapZoomConfig = value
91
101
  }
92
102
 
93
103
  override var mapPadding: RNMapPadding? = null
94
104
  set(value) {
105
+ if (field == value) return
106
+ field = value
95
107
  view.mapPadding = value
96
108
  }
97
109
 
98
110
  override var mapType: RNMapType? = null
99
111
  set(value) {
112
+ if (field == value) return
113
+ field = value
100
114
  value?.let {
101
115
  view.mapType = it.value
102
116
  }
@@ -104,8 +118,10 @@ class RNGoogleMapsPlusView(
104
118
 
105
119
  override var markers: Array<RNMarker>? = null
106
120
  set(value) {
121
+ if (field.contentEquals(value)) return
107
122
  val prevById = field?.associateBy { it.id } ?: emptyMap()
108
123
  val nextById = value?.associateBy { it.id } ?: emptyMap()
124
+ field = value
109
125
 
110
126
  (prevById.keys - nextById.keys).forEach { id ->
111
127
  markerBuilder.cancelIconJob(id)
@@ -122,38 +138,21 @@ class RNGoogleMapsPlusView(
122
138
  )
123
139
  }
124
140
  } else if (!prev.markerEquals(next)) {
125
- view.updateMarker(id) { m ->
141
+ view.updateMarker(id) { marker ->
126
142
  onUi {
127
- m.position =
128
- LatLng(
129
- next.coordinate.latitude,
130
- next.coordinate.longitude,
131
- )
132
- next.zIndex?.let { m.zIndex = it.toFloat() } ?: run {
133
- m.zIndex = 0f
134
- }
135
-
136
- if (!prev.markerStyleEquals(next)) {
137
- markerBuilder.buildIconAsync(id, next) { icon ->
138
- m.setIcon(icon)
139
- }
140
- }
141
- m.setAnchor(
142
- (next.anchor?.x ?: 0.5).toFloat(),
143
- (next.anchor?.y ?: 0.5).toFloat(),
144
- )
143
+ markerBuilder.update(marker, next, prev)
145
144
  }
146
145
  }
147
146
  }
148
147
  }
149
- field = value
150
148
  }
151
149
 
152
150
  override var polylines: Array<RNPolyline>? = null
153
151
  set(value) {
152
+ if (field.contentEquals(value)) return
154
153
  val prevById = field?.associateBy { it.id } ?: emptyMap()
155
154
  val nextById = value?.associateBy { it.id } ?: emptyMap()
156
-
155
+ field = value
157
156
  (prevById.keys - nextById.keys).forEach { id ->
158
157
  view.removePolyline(id)
159
158
  }
@@ -161,35 +160,23 @@ class RNGoogleMapsPlusView(
161
160
  nextById.forEach { (id, next) ->
162
161
  val prev = prevById[id]
163
162
  if (prev == null) {
164
- view.addPolyline(id, polylineBuilder.buildPolylineOptions(next))
163
+ view.addPolyline(id, polylineBuilder.build(next))
165
164
  } else if (!prev.polylineEquals(next)) {
166
- view.updatePolyline(id) { gms ->
165
+ view.updatePolyline(id) { polyline ->
167
166
  onUi {
168
- gms.points =
169
- next.coordinates.map {
170
-
171
- LatLng(it.latitude, it.longitude)
172
- }
173
- next.width?.let { gms.width = it.dpToPx() }
174
- next.lineCap?.let {
175
- val cap = polylineBuilder.mapLineCap(it)
176
- gms.startCap = cap
177
- gms.endCap = cap
178
- }
179
- next.lineJoin?.let { gms.jointType = polylineBuilder.mapLineJoin(it) }
180
- next.color?.let { gms.color = it.toColor() }
181
- next.zIndex?.let { gms.zIndex = it.toFloat() }
167
+ polylineBuilder.update(polyline, next)
182
168
  }
183
169
  }
184
170
  }
185
171
  }
186
- field = value
187
172
  }
188
173
 
189
174
  override var polygons: Array<RNPolygon>? = null
190
175
  set(value) {
176
+ if (field.contentEquals(value)) return
191
177
  val prevById = field?.associateBy { it.id } ?: emptyMap()
192
178
  val nextById = value?.associateBy { it.id } ?: emptyMap()
179
+ field = value
193
180
 
194
181
  (prevById.keys - nextById.keys).forEach { id ->
195
182
  view.removePolygon(id)
@@ -198,30 +185,21 @@ class RNGoogleMapsPlusView(
198
185
  nextById.forEach { (id, next) ->
199
186
  val prev = prevById[id]
200
187
  if (prev == null) {
201
- view.addPolygon(id, polygonBuilder.buildPolygonOptions(next))
188
+ view.addPolygon(id, polygonBuilder.build(next))
202
189
  } else if (!prev.polygonEquals(next)) {
203
- view.updatePolygon(id) { gmsPoly ->
204
- onUi {
205
- gmsPoly.points =
206
- next.coordinates.map {
207
- com.google.android.gms.maps.model
208
- .LatLng(it.latitude, it.longitude)
209
- }
210
- next.fillColor?.let { gmsPoly.fillColor = it.toColor() }
211
- next.strokeColor?.let { gmsPoly.strokeColor = it.toColor() }
212
- next.strokeWidth?.let { gmsPoly.strokeWidth = it.dpToPx() }
213
- next.zIndex?.let { gmsPoly.zIndex = it.toFloat() }
214
- }
190
+ view.updatePolygon(id) { polygon ->
191
+ onUi { polygonBuilder.update(polygon, next) }
215
192
  }
216
193
  }
217
194
  }
218
- field = value
219
195
  }
220
196
 
221
197
  override var circles: Array<RNCircle>? = null
222
198
  set(value) {
199
+ if (field.contentEquals(value)) return
223
200
  val prevById = field?.associateBy { it.id } ?: emptyMap()
224
201
  val nextById = value?.associateBy { it.id } ?: emptyMap()
202
+ field = value
225
203
 
226
204
  (prevById.keys - nextById.keys).forEach { id ->
227
205
  view.removeCircle(id)
@@ -230,25 +208,36 @@ class RNGoogleMapsPlusView(
230
208
  nextById.forEach { (id, next) ->
231
209
  val prev = prevById[id]
232
210
  if (prev == null) {
233
- view.addCircle(id, circleBuilder.buildCircleOptions(next))
211
+ view.addCircle(id, circleBuilder.build(next))
234
212
  } else if (!prev.circleEquals(next)) {
235
- view.updateCircle(id) { gmsCircle ->
213
+ view.updateCircle(id) { circle ->
236
214
  onUi {
237
- gmsCircle.center = LatLng(next.center.latitude, next.center.longitude)
238
- next.radius?.let { gmsCircle.radius = it }
239
- next.strokeWidth?.let { gmsCircle.strokeWidth = it.dpToPx() }
240
- next.strokeColor?.let { gmsCircle.strokeColor = it.toColor() }
241
- next.fillColor?.let { gmsCircle.fillColor = it.toColor() }
242
- next.zIndex?.let { gmsCircle.zIndex = it.toFloat() } ?: run { gmsCircle.zIndex = 0f }
215
+ circleBuilder.update(circle, next)
243
216
  }
244
217
  }
245
218
  }
246
219
  }
220
+ }
221
+
222
+ override var heatmaps: Array<RNHeatmap>? = null
223
+ set(value) {
224
+ if (field.contentEquals(value)) return
225
+ val prevById = field?.associateBy { it.id } ?: emptyMap()
226
+ val nextById = value?.associateBy { it.id } ?: emptyMap()
247
227
  field = value
228
+ (prevById.keys - nextById.keys).forEach { id ->
229
+ view.removeHeatmap(id)
230
+ }
231
+
232
+ nextById.forEach { (id, next) ->
233
+ view.addHeatmap(id, heatmapBuilder.build(next))
234
+ }
248
235
  }
249
236
 
250
237
  override var locationConfig: RNLocationConfig? = null
251
238
  set(value) {
239
+ if (field == value) return
240
+ field = value
252
241
  view.locationConfig = value
253
242
  }
254
243
 
@@ -261,6 +250,7 @@ class RNGoogleMapsPlusView(
261
250
  set(cb) {
262
251
  view.onMapReady = cb
263
252
  }
253
+
264
254
  override var onLocationUpdate: ((RNLocation) -> Unit)? = null
265
255
  set(cb) {
266
256
  view.onLocationUpdate = cb
@@ -0,0 +1,9 @@
1
+ package com.rngooglemapsplus.extensions
2
+
3
+ import com.google.android.gms.maps.model.LatLng
4
+ import com.google.maps.android.heatmaps.WeightedLatLng
5
+ import com.rngooglemapsplus.RNHeatmapPoint
6
+
7
+ fun RNHeatmapPoint.toWeightedLatLng(): WeightedLatLng = WeightedLatLng(LatLng(latitude, longitude), weight)
8
+
9
+ fun Array<RNHeatmapPoint>.toWeightedLatLngs(): Collection<WeightedLatLng> = map { it.toWeightedLatLng() }