react-native-google-maps-plus 1.7.0-dev.9 → 1.8.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 (71) hide show
  1. package/android/build.gradle +1 -1
  2. package/android/gradle.properties +2 -1
  3. package/android/src/main/java/com/rngooglemapsplus/GoogleMapsViewImpl.kt +120 -124
  4. package/android/src/main/java/com/rngooglemapsplus/MapCircleBuilder.kt +2 -3
  5. package/android/src/main/java/com/rngooglemapsplus/MapMarkerBuilder.kt +83 -53
  6. package/android/src/main/java/com/rngooglemapsplus/MapPolygonBuilder.kt +6 -23
  7. package/android/src/main/java/com/rngooglemapsplus/MapPolylineBuilder.kt.kt +12 -39
  8. package/android/src/main/java/com/rngooglemapsplus/RNGoogleMapsPlusView.kt +30 -12
  9. package/android/src/main/java/com/rngooglemapsplus/extensions/BitmapExtension.kt +35 -0
  10. package/android/src/main/java/com/rngooglemapsplus/extensions/LatLngBoundsExtension.kt +31 -0
  11. package/android/src/main/java/com/rngooglemapsplus/extensions/MapObjectTagExtensions.kt +84 -0
  12. package/android/src/main/java/com/rngooglemapsplus/extensions/RNLineCapTypeExtension.kt +14 -0
  13. package/android/src/main/java/com/rngooglemapsplus/extensions/RNLineJoinTypeExtension.kt +12 -0
  14. package/android/src/main/java/com/rngooglemapsplus/extensions/RNMapCircleExtension.kt +7 -1
  15. package/android/src/main/java/com/rngooglemapsplus/extensions/RNMarkerExtension.kt +54 -17
  16. package/android/src/main/java/com/rngooglemapsplus/extensions/RNPolygonExtension.kt +31 -1
  17. package/android/src/main/java/com/rngooglemapsplus/extensions/RNPolylineExtension.kt +6 -1
  18. package/ios/GoogleMapViewImpl.swift +81 -64
  19. package/ios/MapCircleBuilder.swift +2 -3
  20. package/ios/MapMarkerBuilder.swift +106 -50
  21. package/ios/MapPolygonBuilder.swift +6 -41
  22. package/ios/MapPolylineBuilder.swift +2 -10
  23. package/ios/RNGoogleMapsPlusView.swift +24 -11
  24. package/ios/extensions/MapObjectTag+Extension.swift +93 -0
  25. package/ios/extensions/RNCircle+Extension.swift +14 -5
  26. package/ios/extensions/RNLatLng+Extension.swift +11 -0
  27. package/ios/extensions/RNLineCapType+Extension.swift +10 -0
  28. package/ios/extensions/RNLineJoinType+Extension.swift +11 -0
  29. package/ios/extensions/RNMarker+Extension.swift +43 -12
  30. package/ios/extensions/RNPolygon+Extension.swift.swift +50 -21
  31. package/ios/extensions/RNPolyline+Extension.swift.swift +15 -26
  32. package/ios/extensions/UIImage+Extension.swift +45 -0
  33. package/lib/module/types.js.map +1 -1
  34. package/lib/typescript/src/RNGoogleMapsPlusView.nitro.d.ts +12 -10
  35. package/lib/typescript/src/RNGoogleMapsPlusView.nitro.d.ts.map +1 -1
  36. package/lib/typescript/src/types.d.ts +2 -1
  37. package/lib/typescript/src/types.d.ts.map +1 -1
  38. package/nitrogen/generated/android/RNGoogleMapsPlusOnLoad.cpp +4 -4
  39. package/nitrogen/generated/android/c++/JFunc_void_std__string.hpp +75 -0
  40. package/nitrogen/generated/android/c++/JFunc_void_std__string_RNLatLng.hpp +77 -0
  41. package/nitrogen/generated/android/c++/JHybridRNGoogleMapsPlusViewSpec.cpp +100 -92
  42. package/nitrogen/generated/android/c++/JHybridRNGoogleMapsPlusViewSpec.hpp +22 -20
  43. package/nitrogen/generated/android/c++/JRNInitialProps.hpp +7 -3
  44. package/nitrogen/generated/android/c++/JRNMarker.hpp +7 -7
  45. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/{Func_void_std__optional_std__string_.kt → Func_void_std__string.kt} +12 -12
  46. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/{Func_void_std__optional_std__string__RNLatLng.kt → Func_void_std__string_RNLatLng.kt} +12 -12
  47. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/HybridRNGoogleMapsPlusViewSpec.kt +38 -30
  48. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNInitialProps.kt +6 -3
  49. package/nitrogen/generated/android/kotlin/com/margelo/nitro/rngooglemapsplus/RNMarker.kt +6 -6
  50. package/nitrogen/generated/ios/RNGoogleMapsPlus-Swift-Cxx-Bridge.cpp +16 -8
  51. package/nitrogen/generated/ios/RNGoogleMapsPlus-Swift-Cxx-Bridge.hpp +58 -36
  52. package/nitrogen/generated/ios/c++/HybridRNGoogleMapsPlusViewSpecSwift.hpp +32 -20
  53. package/nitrogen/generated/ios/swift/Func_void_std__optional_std__string_.swift +6 -6
  54. package/nitrogen/generated/ios/swift/Func_void_std__string.swift +47 -0
  55. package/nitrogen/generated/ios/swift/Func_void_std__string_RNLatLng.swift +47 -0
  56. package/nitrogen/generated/ios/swift/HybridRNGoogleMapsPlusViewSpec.swift +12 -10
  57. package/nitrogen/generated/ios/swift/HybridRNGoogleMapsPlusViewSpec_cxx.swift +142 -180
  58. package/nitrogen/generated/ios/swift/RNInitialProps.swift +31 -1
  59. package/nitrogen/generated/ios/swift/RNMarker.swift +24 -31
  60. package/nitrogen/generated/shared/c++/HybridRNGoogleMapsPlusViewSpec.cpp +2 -0
  61. package/nitrogen/generated/shared/c++/HybridRNGoogleMapsPlusViewSpec.hpp +22 -20
  62. package/nitrogen/generated/shared/c++/RNInitialProps.hpp +6 -2
  63. package/nitrogen/generated/shared/c++/RNMarker.hpp +6 -6
  64. package/nitrogen/generated/shared/c++/views/HybridRNGoogleMapsPlusViewComponent.cpp +20 -20
  65. package/nitrogen/generated/shared/c++/views/HybridRNGoogleMapsPlusViewComponent.hpp +10 -10
  66. package/package.json +1 -1
  67. package/src/RNGoogleMapsPlusView.nitro.ts +14 -10
  68. package/src/types.ts +2 -1
  69. package/nitrogen/generated/android/c++/JFunc_void_std__optional_std__string_.hpp +0 -76
  70. package/nitrogen/generated/android/c++/JFunc_void_std__optional_std__string__RNLatLng.hpp +0 -78
  71. package/nitrogen/generated/ios/swift/Func_void_std__optional_std__string__RNLatLng.swift +0 -54
@@ -3,12 +3,18 @@ package com.rngooglemapsplus.extensions
3
3
  import com.rngooglemapsplus.RNCircle
4
4
 
5
5
  fun RNCircle.circleEquals(b: RNCircle): Boolean {
6
+ if (!centerEquals(b)) return false
6
7
  if (zIndex != b.zIndex) return false
7
8
  if (pressable != b.pressable) return false
8
- if (center != b.center) return false
9
9
  if (radius != b.radius) return false
10
10
  if (strokeWidth != b.strokeWidth) return false
11
11
  if (strokeColor != b.strokeColor) return false
12
12
  if (fillColor != b.fillColor) return false
13
13
  return true
14
14
  }
15
+
16
+ fun RNCircle.centerEquals(b: RNCircle): Boolean {
17
+ if (center.latitude != b.center.latitude) return false
18
+ if (center.longitude != b.center.longitude) return false
19
+ return true
20
+ }
@@ -2,24 +2,61 @@ package com.rngooglemapsplus.extensions
2
2
 
3
3
  import com.rngooglemapsplus.RNMarker
4
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
- showInfoWindow == b.showInfoWindow &&
11
- title == b.title &&
12
- snippet == b.snippet &&
13
- opacity == b.opacity &&
14
- flat == b.flat &&
15
- draggable == b.draggable &&
16
- rotation == b.rotation &&
17
- infoWindowAnchor == b.infoWindowAnchor &&
18
- markerStyleEquals(b)
19
-
20
- fun RNMarker.markerStyleEquals(b: RNMarker): Boolean = iconSvg == b.iconSvg
5
+ fun RNMarker.markerEquals(b: RNMarker): Boolean {
6
+ if (id != b.id) return false
7
+ if (zIndex != b.zIndex) return false
8
+ if (!coordinatesEquals(b)) return false
9
+ if (!anchorEquals(b)) return false
10
+ if (!infoWindowAnchorEquals(b)) return false
11
+ if (title != b.title) return false
12
+ if (snippet != b.snippet) return false
13
+ if (opacity != b.opacity) return false
14
+ if (flat != b.flat) return false
15
+ if (draggable != b.draggable) return false
16
+ if (rotation != b.rotation) return false
17
+ if (!markerInfoWindowStyleEquals(b)) return false
18
+ if (!markerStyleEquals(b)) return false
19
+
20
+ return true
21
+ }
22
+
23
+ fun RNMarker.coordinatesEquals(b: RNMarker): Boolean {
24
+ if (coordinate.latitude != b.coordinate.latitude) return false
25
+ if (coordinate.longitude != b.coordinate.longitude) return false
26
+ return true
27
+ }
28
+
29
+ fun RNMarker.anchorEquals(b: RNMarker): Boolean {
30
+ if (anchor?.x != b.anchor?.x) return false
31
+ if (anchor?.y != b.anchor?.y) return false
32
+ return true
33
+ }
34
+
35
+ fun RNMarker.infoWindowAnchorEquals(b: RNMarker): Boolean {
36
+ if (infoWindowAnchor?.x != b.infoWindowAnchor?.x) return false
37
+ if (infoWindowAnchor?.y != b.infoWindowAnchor?.y) return false
38
+ return true
39
+ }
40
+
41
+ fun RNMarker.markerInfoWindowStyleEquals(b: RNMarker): Boolean {
42
+ if (infoWindowIconSvg?.width != b.infoWindowIconSvg?.width) return false
43
+ if (infoWindowIconSvg?.height != b.infoWindowIconSvg?.height) return false
44
+ if (infoWindowIconSvg?.svgString != b.infoWindowIconSvg?.svgString) return false
45
+
46
+ return true
47
+ }
48
+
49
+ fun RNMarker.markerStyleEquals(b: RNMarker): Boolean {
50
+ if (iconSvg?.width != b.iconSvg?.width) return false
51
+ if (iconSvg?.height != b.iconSvg?.height) return false
52
+ if (iconSvg?.svgString != b.iconSvg?.svgString) return false
53
+
54
+ return true
55
+ }
21
56
 
22
57
  fun RNMarker.styleHash(): Int =
23
58
  arrayOf<Any?>(
24
- iconSvg,
59
+ iconSvg?.width,
60
+ iconSvg?.height,
61
+ iconSvg?.svgString,
25
62
  ).contentHashCode()
@@ -1,6 +1,8 @@
1
1
  package com.rngooglemapsplus.extensions
2
2
 
3
+ import com.google.android.gms.maps.model.LatLng
3
4
  import com.rngooglemapsplus.RNPolygon
5
+ import com.rngooglemapsplus.RNPolygonHole
4
6
 
5
7
  fun RNPolygon.polygonEquals(b: RNPolygon): Boolean {
6
8
  if (zIndex != b.zIndex) return false
@@ -9,7 +11,12 @@ fun RNPolygon.polygonEquals(b: RNPolygon): Boolean {
9
11
  if (fillColor != b.fillColor) return false
10
12
  if (strokeColor != b.strokeColor) return false
11
13
  if (geodesic != b.geodesic) return false
12
- if (!holes.contentEquals(b.holes)) return false
14
+ if (!coordinatesEquals(b)) return false
15
+ if (!holesEquals(b)) return false
16
+ return true
17
+ }
18
+
19
+ fun RNPolygon.coordinatesEquals(b: RNPolygon): Boolean {
13
20
  val ac = coordinates
14
21
  val bc = b.coordinates
15
22
  if (ac.size != bc.size) return false
@@ -20,3 +27,26 @@ fun RNPolygon.polygonEquals(b: RNPolygon): Boolean {
20
27
  }
21
28
  return true
22
29
  }
30
+
31
+ fun RNPolygon.holesEquals(b: RNPolygon): Boolean {
32
+ if (holes?.size != b.holes?.size) return false
33
+ if (holes != null && b.holes != null) {
34
+ for (i in holes.indices) {
35
+ val ah = holes[i]
36
+ val bh = b.holes[i]
37
+
38
+ if (ah.coordinates.size != bh.coordinates.size) return false
39
+ for (j in ah.coordinates.indices) {
40
+ val p = ah.coordinates[j]
41
+ val q = bh.coordinates[j]
42
+ if (p.latitude != q.latitude || p.longitude != q.longitude) return false
43
+ }
44
+ }
45
+ }
46
+ return true
47
+ }
48
+
49
+ fun Array<RNPolygonHole>.toMapsPolygonHoles(): List<List<LatLng>> =
50
+ this.map { hole ->
51
+ hole.coordinates.map { it.toLatLng() }
52
+ }
@@ -5,11 +5,16 @@ import com.rngooglemapsplus.RNPolyline
5
5
  fun RNPolyline.polylineEquals(b: RNPolyline): Boolean {
6
6
  if (zIndex != b.zIndex) return false
7
7
  if (pressable != b.pressable) return false
8
- if ((width ?: 0.0) != (b.width ?: 0.0)) return false
8
+ if (width != b.width) return false
9
9
  if (lineCap != b.lineCap) return false
10
10
  if (lineJoin != b.lineJoin) return false
11
11
  if (geodesic != b.geodesic) return false
12
12
  if (color != b.color) return false
13
+ if (!coordinatesEquals(b)) return false
14
+ return true
15
+ }
16
+
17
+ fun RNPolyline.coordinatesEquals(b: RNPolyline): Boolean {
13
18
  val ac = coordinates
14
19
  val bc = b.coordinates
15
20
  if (ac.size != bc.size) return false
@@ -267,24 +267,43 @@ GMSIndoorDisplayDelegate {
267
267
  var onMapPress: ((RNLatLng) -> Void)?
268
268
  var onMapLongPress: ((RNLatLng) -> Void)?
269
269
  var onPoiPress: ((String, String, RNLatLng) -> Void)?
270
- var onMarkerPress: ((String?) -> Void)?
271
- var onPolylinePress: ((String?) -> Void)?
272
- var onPolygonPress: ((String?) -> Void)?
273
- var onCirclePress: ((String?) -> Void)?
274
- var onMarkerDragStart: ((String?, RNLatLng) -> Void)?
275
- var onMarkerDrag: ((String?, RNLatLng) -> Void)?
276
- var onMarkerDragEnd: ((String?, RNLatLng) -> Void)?
270
+ var onMarkerPress: ((String) -> Void)?
271
+ var onPolylinePress: ((String) -> Void)?
272
+ var onPolygonPress: ((String) -> Void)?
273
+ var onCirclePress: ((String) -> Void)?
274
+ var onMarkerDragStart: ((String, RNLatLng) -> Void)?
275
+ var onMarkerDrag: ((String, RNLatLng) -> Void)?
276
+ var onMarkerDragEnd: ((String, RNLatLng) -> Void)?
277
277
  var onIndoorBuildingFocused: ((RNIndoorBuilding) -> Void)?
278
278
  var onIndoorLevelActivated: ((RNIndoorLevel) -> Void)?
279
- var onInfoWindowPress: ((String?) -> Void)?
280
- var onInfoWindowClose: ((String?) -> Void)?
281
- var onInfoWindowLongPress: ((String?) -> Void)?
279
+ var onInfoWindowPress: ((String) -> Void)?
280
+ var onInfoWindowClose: ((String) -> Void)?
281
+ var onInfoWindowLongPress: ((String) -> Void)?
282
282
  var onMyLocationPress: ((RNLocation) -> Void)?
283
283
  var onMyLocationButtonPress: ((Bool) -> Void)?
284
284
  var onCameraChangeStart: ((RNRegion, RNCamera, Bool) -> Void)?
285
285
  var onCameraChange: ((RNRegion, RNCamera, Bool) -> Void)?
286
286
  var onCameraChangeComplete: ((RNRegion, RNCamera, Bool) -> Void)?
287
287
 
288
+ @MainActor
289
+ func showMarkerInfoWindow(id: String) {
290
+ onMain {
291
+ guard let marker = self.markersById[id] else { return }
292
+ self.mapView?.selectedMarker = nil
293
+ self.mapView?.selectedMarker = marker
294
+ }
295
+ }
296
+
297
+ @MainActor
298
+ func hideMarkerInfoWindow(id: String) {
299
+ onMain {
300
+ guard let marker = self.markersById[id] else { return }
301
+ if self.mapView?.selectedMarker == marker {
302
+ self.mapView?.selectedMarker = nil
303
+ }
304
+ }
305
+ }
306
+
288
307
  @MainActor
289
308
  func setCamera(camera: GMSCameraPosition, animated: Bool, durationMs: Double) {
290
309
  if animated {
@@ -380,42 +399,16 @@ GMSIndoorDisplayDelegate {
380
399
  mapView.layer.render(in: ctx.cgContext)
381
400
  }
382
401
 
383
- var finalImage = image
384
-
385
- size.map {
386
- UIGraphicsBeginImageContextWithOptions($0, false, 0.0)
387
- image.draw(in: CGRect(origin: .zero, size: $0))
388
- finalImage = UIGraphicsGetImageFromCurrentImageContext() ?? image
389
- UIGraphicsEndImageContext()
390
- }
391
-
392
- let data: Data?
393
- switch imageFormat {
394
- case .jpeg:
395
- data = finalImage.jpegData(compressionQuality: quality)
396
- case .png:
397
- data = finalImage.pngData()
398
- }
399
-
400
- guard let imageData = data else {
401
- promise.resolve(withResult: nil)
402
- return
403
- }
404
-
405
- if resultIsFile {
406
- let filename =
407
- "map_snapshot_\(Int(Date().timeIntervalSince1970)).\(format)"
408
- let fileURL = URL(fileURLWithPath: NSTemporaryDirectory())
409
- .appendingPathComponent(filename)
410
- do {
411
- try imageData.write(to: fileURL)
412
- promise.resolve(withResult: fileURL.path)
413
- } catch {
414
- promise.resolve(withResult: nil)
415
- }
402
+ if let result = image.encode(
403
+ targetSize: size,
404
+ format: format,
405
+ imageFormat: imageFormat,
406
+ quality: quality,
407
+ resultIsFile: resultIsFile
408
+ ) {
409
+ promise.resolve(withResult: result)
416
410
  } else {
417
- let base64 = imageData.base64EncodedString()
418
- promise.resolve(withResult: "data:image/\(format);base64,\(base64)")
411
+ promise.resolve(withResult: nil)
419
412
  }
420
413
  }
421
414
 
@@ -434,14 +427,19 @@ GMSIndoorDisplayDelegate {
434
427
 
435
428
  @MainActor
436
429
  private func addMarkerInternal(id: String, marker: GMSMarker) {
437
- marker.userData = id
438
430
  marker.map = mapView
439
431
  markersById[id] = marker
440
432
  }
441
433
 
442
434
  @MainActor
443
435
  func updateMarker(id: String, block: @escaping (GMSMarker) -> Void) {
444
- markersById[id].map { block($0) }
436
+ markersById[id].map {
437
+ block($0)
438
+ if let mapView, mapView.selectedMarker == $0 {
439
+ mapView.selectedMarker = nil
440
+ mapView.selectedMarker = $0
441
+ }
442
+ }
445
443
  }
446
444
 
447
445
  @MainActor
@@ -468,8 +466,8 @@ GMSIndoorDisplayDelegate {
468
466
 
469
467
  @MainActor
470
468
  private func addPolylineInternal(id: String, polyline: GMSPolyline) {
469
+ polyline.tagData = PolylineTag(id: id)
471
470
  polyline.map = mapView
472
- polyline.userData = id
473
471
  polylinesById[id] = polyline
474
472
  }
475
473
 
@@ -502,8 +500,8 @@ GMSIndoorDisplayDelegate {
502
500
 
503
501
  @MainActor
504
502
  private func addPolygonInternal(id: String, polygon: GMSPolygon) {
503
+ polygon.tagData = PolygonTag(id: id)
505
504
  polygon.map = mapView
506
- polygon.userData = id
507
505
  polygonsById[id] = polygon
508
506
  }
509
507
 
@@ -536,8 +534,8 @@ GMSIndoorDisplayDelegate {
536
534
 
537
535
  @MainActor
538
536
  private func addCircleInternal(id: String, circle: GMSCircle) {
537
+ circle.tagData = CircleTag(id: id)
539
538
  circle.map = mapView
540
- circle.userData = id
541
539
  circlesById[id] = circle
542
540
  }
543
541
 
@@ -576,7 +574,10 @@ GMSIndoorDisplayDelegate {
576
574
 
577
575
  @MainActor
578
576
  func removeHeatmap(id: String) {
579
- heatmapsById.removeValue(forKey: id).map { $0.map = nil }
577
+ heatmapsById.removeValue(forKey: id).map {
578
+ $0.clearTileCache()
579
+ $0.map = nil
580
+ }
580
581
  }
581
582
 
582
583
  @MainActor
@@ -610,6 +611,7 @@ GMSIndoorDisplayDelegate {
610
611
  geometries: parser.placemarks
611
612
  )
612
613
  renderer.render()
614
+ kmlLayerById[id] = renderer
613
615
  }
614
616
  }
615
617
 
@@ -641,16 +643,23 @@ GMSIndoorDisplayDelegate {
641
643
  urlTileOverlay: GMSURLTileLayer
642
644
  ) {
643
645
  urlTileOverlay.map = mapView
646
+ urlTileOverlays[id] = urlTileOverlay
644
647
  }
645
648
 
646
649
  @MainActor
647
650
  func removeUrlTileOverlay(id: String) {
648
- urlTileOverlays.removeValue(forKey: id).map { $0.map = nil }
651
+ urlTileOverlays.removeValue(forKey: id).map {
652
+ $0.clearTileCache()
653
+ $0.map = nil
654
+ }
649
655
  }
650
656
 
651
657
  @MainActor
652
658
  func clearUrlTileOverlay() {
653
- urlTileOverlays.values.forEach { $0.map = nil }
659
+ urlTileOverlays.values.forEach {
660
+ $0.clearTileCache()
661
+ $0.map = nil
662
+ }
654
663
  urlTileOverlays.removeAll()
655
664
  pendingUrlTileOverlays.removeAll()
656
665
  }
@@ -778,8 +787,7 @@ GMSIndoorDisplayDelegate {
778
787
 
779
788
  func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool {
780
789
  onMain {
781
- mapView.selectedMarker = marker
782
- self.onMarkerPress?(marker.userData as? String, )
790
+ self.onMarkerPress?(marker.idTag)
783
791
  }
784
792
  return uiSettings?.consumeOnMarkerPress ?? false
785
793
  }
@@ -788,13 +796,13 @@ GMSIndoorDisplayDelegate {
788
796
  onMain {
789
797
  switch overlay {
790
798
  case let circle as GMSCircle:
791
- self.onCirclePress?(circle.userData as? String, )
799
+ self.onCirclePress?(circle.idTag)
792
800
 
793
801
  case let polygon as GMSPolygon:
794
- self.onPolygonPress?(polygon.userData as? String, )
802
+ self.onPolygonPress?(polygon.idTag)
795
803
 
796
804
  case let polyline as GMSPolyline:
797
- self.onPolylinePress?(polyline.userData as? String, )
805
+ self.onPolylinePress?(polyline.idTag)
798
806
 
799
807
  default:
800
808
  break
@@ -805,7 +813,7 @@ GMSIndoorDisplayDelegate {
805
813
  func mapView(_ mapView: GMSMapView, didBeginDragging marker: GMSMarker) {
806
814
  onMain {
807
815
  self.onMarkerDragStart?(
808
- marker.userData as? String,
816
+ marker.idTag,
809
817
  marker.position.toRNLatLng()
810
818
  )
811
819
  }
@@ -814,7 +822,7 @@ GMSIndoorDisplayDelegate {
814
822
  func mapView(_ mapView: GMSMapView, didDrag marker: GMSMarker) {
815
823
  onMain {
816
824
  self.onMarkerDrag?(
817
- marker.userData as? String,
825
+ marker.idTag,
818
826
  marker.position.toRNLatLng()
819
827
  )
820
828
  }
@@ -823,7 +831,7 @@ GMSIndoorDisplayDelegate {
823
831
  func mapView(_ mapView: GMSMapView, didEndDragging marker: GMSMarker) {
824
832
  onMain {
825
833
  self.onMarkerDragEnd?(
826
- marker.userData as? String,
834
+ marker.idTag,
827
835
  marker.position.toRNLatLng()
828
836
  )
829
837
  }
@@ -857,13 +865,13 @@ GMSIndoorDisplayDelegate {
857
865
 
858
866
  func mapView(_ mapView: GMSMapView, didTapInfoWindowOf marker: GMSMarker) {
859
867
  onMain {
860
- self.onInfoWindowPress?(marker.userData as? String)
868
+ self.onInfoWindowPress?(marker.idTag)
861
869
  }
862
870
  }
863
871
 
864
872
  func mapView(_ mapView: GMSMapView, didCloseInfoWindowOf marker: GMSMarker) {
865
873
  onMain {
866
- self.onInfoWindowClose?(marker.userData as? String)
874
+ self.onInfoWindowClose?(marker.idTag)
867
875
  }
868
876
  }
869
877
 
@@ -872,7 +880,7 @@ GMSIndoorDisplayDelegate {
872
880
  didLongPressInfoWindowOf marker: GMSMarker
873
881
  ) {
874
882
  onMain {
875
- self.onInfoWindowLongPress?(marker.userData as? String)
883
+ self.onInfoWindowLongPress?(marker.idTag)
876
884
  }
877
885
  }
878
886
 
@@ -893,4 +901,13 @@ GMSIndoorDisplayDelegate {
893
901
  }
894
902
  return uiSettings?.consumeOnMyLocationButtonPress ?? false
895
903
  }
904
+
905
+ func mapView(_ mapView: GMSMapView, markerInfoWindow marker: GMSMarker) -> UIView? {
906
+ return markerBuilder.buildInfoWindow(iconSvg: marker.tagData.iconSvg)
907
+ }
908
+
909
+ func mapView(_ mapView: GMSMapView, markerInfoContents marker: GMSMarker)
910
+ -> UIView? {
911
+ return nil
912
+ }
896
913
  }
@@ -17,13 +17,12 @@ final class MapCircleBuilder {
17
17
 
18
18
  @MainActor
19
19
  func update(_ prev: RNCircle, _ next: RNCircle, _ c: GMSCircle) {
20
- if prev.center.latitude != next.center.latitude
21
- || prev.center.longitude != next.center.longitude {
20
+ if !prev.centerEquals(next) {
22
21
  c.position = next.center.toCLLocationCoordinate2D()
23
22
  }
24
23
 
25
24
  if prev.radius != next.radius {
26
- c.radius = next.radius ?? 0
25
+ c.radius = next.radius
27
26
  }
28
27
 
29
28
  if prev.fillColor != next.fillColor {