react-native-google-maps-plus 1.1.0-dev.1 → 1.1.0-dev.3

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