@lugg/maps 1.0.0-beta.3 → 1.0.0-beta.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 (112) hide show
  1. package/README.md +3 -0
  2. package/android/src/main/java/com/luggmaps/LuggCircleView.kt +85 -0
  3. package/android/src/main/java/com/luggmaps/LuggCircleViewManager.kt +79 -0
  4. package/android/src/main/java/com/luggmaps/LuggGroundOverlayView.kt +81 -0
  5. package/android/src/main/java/com/luggmaps/LuggGroundOverlayViewManager.kt +82 -0
  6. package/android/src/main/java/com/luggmaps/LuggMapView.kt +9 -0
  7. package/android/src/main/java/com/luggmaps/LuggPackage.kt +4 -1
  8. package/android/src/main/java/com/luggmaps/LuggTileOverlayView.kt +92 -0
  9. package/android/src/main/java/com/luggmaps/LuggTileOverlayViewManager.kt +80 -0
  10. package/android/src/main/java/com/luggmaps/core/GoogleMapProvider.kt +289 -0
  11. package/android/src/main/java/com/luggmaps/core/MapProviderDelegate.kt +9 -0
  12. package/android/src/main/java/com/luggmaps/events/CirclePressEvent.kt +12 -0
  13. package/android/src/main/java/com/luggmaps/events/GroundOverlayPressEvent.kt +12 -0
  14. package/android/src/main/java/com/luggmaps/events/TileOverlayPressEvent.kt +12 -0
  15. package/ios/LuggCircleView.h +31 -0
  16. package/ios/LuggCircleView.mm +133 -0
  17. package/ios/LuggGroundOverlayView.h +30 -0
  18. package/ios/LuggGroundOverlayView.mm +125 -0
  19. package/ios/LuggMapView.mm +43 -0
  20. package/ios/LuggTileOverlayView.h +31 -0
  21. package/ios/LuggTileOverlayView.mm +130 -0
  22. package/ios/core/AppleMapProvider.mm +398 -1
  23. package/ios/core/GoogleMapProvider.mm +299 -10
  24. package/ios/core/MapProviderDelegate.h +12 -0
  25. package/ios/events/CirclePressEvent.h +20 -0
  26. package/ios/events/GroundOverlayPressEvent.h +20 -0
  27. package/ios/events/TileOverlayPressEvent.h +20 -0
  28. package/lib/module/components/Circle.js +46 -0
  29. package/lib/module/components/Circle.js.map +1 -0
  30. package/lib/module/components/Circle.types.js +4 -0
  31. package/lib/module/components/Circle.types.js.map +1 -0
  32. package/lib/module/components/Circle.web.js +79 -0
  33. package/lib/module/components/Circle.web.js.map +1 -0
  34. package/lib/module/components/GroundOverlay.js +45 -0
  35. package/lib/module/components/GroundOverlay.js.map +1 -0
  36. package/lib/module/components/GroundOverlay.types.js +4 -0
  37. package/lib/module/components/GroundOverlay.types.js.map +1 -0
  38. package/lib/module/components/GroundOverlay.web.js +77 -0
  39. package/lib/module/components/GroundOverlay.web.js.map +1 -0
  40. package/lib/module/components/Marker.js +5 -1
  41. package/lib/module/components/Marker.js.map +1 -1
  42. package/lib/module/components/TileOverlay.js +44 -0
  43. package/lib/module/components/TileOverlay.js.map +1 -0
  44. package/lib/module/components/TileOverlay.types.js +4 -0
  45. package/lib/module/components/TileOverlay.types.js.map +1 -0
  46. package/lib/module/components/TileOverlay.web.js +69 -0
  47. package/lib/module/components/TileOverlay.web.js.map +1 -0
  48. package/lib/module/components/index.js +3 -0
  49. package/lib/module/components/index.js.map +1 -1
  50. package/lib/module/components/index.web.js +3 -0
  51. package/lib/module/components/index.web.js.map +1 -1
  52. package/lib/module/fabric/LuggCircleViewNativeComponent.ts +25 -0
  53. package/lib/module/fabric/LuggGroundOverlayViewNativeComponent.ts +29 -0
  54. package/lib/module/fabric/LuggTileOverlayViewNativeComponent.ts +30 -0
  55. package/lib/module/index.js +3 -0
  56. package/lib/module/index.js.map +1 -1
  57. package/lib/module/index.web.js +3 -0
  58. package/lib/module/index.web.js.map +1 -1
  59. package/lib/typescript/src/components/Circle.d.ts +10 -0
  60. package/lib/typescript/src/components/Circle.d.ts.map +1 -0
  61. package/lib/typescript/src/components/Circle.types.d.ts +33 -0
  62. package/lib/typescript/src/components/Circle.types.d.ts.map +1 -0
  63. package/lib/typescript/src/components/Circle.web.d.ts +3 -0
  64. package/lib/typescript/src/components/Circle.web.d.ts.map +1 -0
  65. package/lib/typescript/src/components/GroundOverlay.d.ts +10 -0
  66. package/lib/typescript/src/components/GroundOverlay.d.ts.map +1 -0
  67. package/lib/typescript/src/components/GroundOverlay.types.d.ts +35 -0
  68. package/lib/typescript/src/components/GroundOverlay.types.d.ts.map +1 -0
  69. package/lib/typescript/src/components/GroundOverlay.web.d.ts +3 -0
  70. package/lib/typescript/src/components/GroundOverlay.web.d.ts.map +1 -0
  71. package/lib/typescript/src/components/Marker.d.ts.map +1 -1
  72. package/lib/typescript/src/components/Marker.types.d.ts +4 -1
  73. package/lib/typescript/src/components/Marker.types.d.ts.map +1 -1
  74. package/lib/typescript/src/components/TileOverlay.d.ts +10 -0
  75. package/lib/typescript/src/components/TileOverlay.d.ts.map +1 -0
  76. package/lib/typescript/src/components/TileOverlay.types.d.ts +36 -0
  77. package/lib/typescript/src/components/TileOverlay.types.d.ts.map +1 -0
  78. package/lib/typescript/src/components/TileOverlay.web.d.ts +3 -0
  79. package/lib/typescript/src/components/TileOverlay.web.d.ts.map +1 -0
  80. package/lib/typescript/src/components/index.d.ts +6 -0
  81. package/lib/typescript/src/components/index.d.ts.map +1 -1
  82. package/lib/typescript/src/components/index.web.d.ts +6 -0
  83. package/lib/typescript/src/components/index.web.d.ts.map +1 -1
  84. package/lib/typescript/src/fabric/LuggCircleViewNativeComponent.d.ts +18 -0
  85. package/lib/typescript/src/fabric/LuggCircleViewNativeComponent.d.ts.map +1 -0
  86. package/lib/typescript/src/fabric/LuggGroundOverlayViewNativeComponent.d.ts +21 -0
  87. package/lib/typescript/src/fabric/LuggGroundOverlayViewNativeComponent.d.ts.map +1 -0
  88. package/lib/typescript/src/fabric/LuggTileOverlayViewNativeComponent.d.ts +21 -0
  89. package/lib/typescript/src/fabric/LuggTileOverlayViewNativeComponent.d.ts.map +1 -0
  90. package/lib/typescript/src/index.d.ts +6 -0
  91. package/lib/typescript/src/index.d.ts.map +1 -1
  92. package/lib/typescript/src/index.web.d.ts +6 -0
  93. package/lib/typescript/src/index.web.d.ts.map +1 -1
  94. package/package.json +5 -2
  95. package/src/components/Circle.tsx +52 -0
  96. package/src/components/Circle.types.ts +33 -0
  97. package/src/components/Circle.web.tsx +93 -0
  98. package/src/components/GroundOverlay.tsx +47 -0
  99. package/src/components/GroundOverlay.types.ts +36 -0
  100. package/src/components/GroundOverlay.web.tsx +85 -0
  101. package/src/components/Marker.tsx +4 -1
  102. package/src/components/Marker.types.ts +4 -1
  103. package/src/components/TileOverlay.tsx +44 -0
  104. package/src/components/TileOverlay.types.ts +37 -0
  105. package/src/components/TileOverlay.web.tsx +95 -0
  106. package/src/components/index.ts +9 -0
  107. package/src/components/index.web.ts +9 -0
  108. package/src/fabric/LuggCircleViewNativeComponent.ts +25 -0
  109. package/src/fabric/LuggGroundOverlayViewNativeComponent.ts +29 -0
  110. package/src/fabric/LuggTileOverlayViewNativeComponent.ts +30 -0
  111. package/src/index.ts +6 -0
  112. package/src/index.web.ts +12 -0
package/README.md CHANGED
@@ -116,7 +116,10 @@ import { MapView, Marker, Polyline, Polygon } from '@lugg/maps';
116
116
  - [Marker](docs/MARKER.md) - Map markers with callout support
117
117
  - [Polyline](docs/POLYLINE.md) - Draw lines on the map
118
118
  - [Polygon](docs/POLYGON.md) - Draw filled shapes on the map
119
+ - [Circle](docs/CIRCLE.md) - Draw circular overlays on the map
119
120
  - [GeoJson](docs/GEOJSON.md) - Render GeoJSON data on the map
121
+ - [GroundOverlay](docs/GROUND_OVERLAY.md) - Display images on the map
122
+ - [TileOverlay](docs/TILE_OVERLAY.md) - Display custom tile layers on the map
120
123
 
121
124
  ## Types
122
125
 
@@ -0,0 +1,85 @@
1
+ package com.luggmaps
2
+
3
+ import android.content.Context
4
+ import android.graphics.Color
5
+ import com.facebook.react.views.view.ReactViewGroup
6
+ import com.google.android.gms.maps.model.Circle
7
+ import com.google.android.gms.maps.model.LatLng
8
+ import com.luggmaps.events.CirclePressEvent
9
+ import com.luggmaps.extensions.dispatchEvent
10
+
11
+ interface LuggCircleViewDelegate {
12
+ fun circleViewDidUpdate(circleView: LuggCircleView)
13
+ }
14
+
15
+ class LuggCircleView(context: Context) : ReactViewGroup(context) {
16
+ var center: LatLng = LatLng(0.0, 0.0)
17
+ private set
18
+
19
+ var radius: Double = 0.0
20
+ private set
21
+
22
+ var strokeColor: Int = Color.BLACK
23
+ private set
24
+
25
+ var fillColor: Int = Color.argb(77, 0, 0, 0)
26
+ private set
27
+
28
+ var strokeWidth: Float = 1f
29
+ private set
30
+
31
+ var zIndex: Float = 0f
32
+ private set
33
+
34
+ var tappable: Boolean = false
35
+ private set
36
+
37
+ var delegate: LuggCircleViewDelegate? = null
38
+ var circle: Circle? = null
39
+
40
+ init {
41
+ visibility = GONE
42
+ }
43
+
44
+ fun setCenter(value: LatLng) {
45
+ center = value
46
+ }
47
+
48
+ fun setRadius(value: Double) {
49
+ radius = value
50
+ }
51
+
52
+ fun setStrokeColor(color: Int) {
53
+ strokeColor = color
54
+ }
55
+
56
+ fun setFillColor(color: Int) {
57
+ fillColor = color
58
+ }
59
+
60
+ fun setStrokeWidth(width: Float) {
61
+ strokeWidth = width
62
+ }
63
+
64
+ fun setZIndex(value: Float) {
65
+ zIndex = value
66
+ }
67
+
68
+ fun setTappable(value: Boolean) {
69
+ tappable = value
70
+ }
71
+
72
+ fun emitPressEvent() {
73
+ dispatchEvent(CirclePressEvent(this))
74
+ }
75
+
76
+ fun onAfterUpdateTransaction() {
77
+ delegate?.circleViewDidUpdate(this)
78
+ }
79
+
80
+ fun onDropViewInstance() {
81
+ delegate = null
82
+ circle?.remove()
83
+ circle = null
84
+ }
85
+ }
@@ -0,0 +1,79 @@
1
+ package com.luggmaps
2
+
3
+ import com.facebook.react.bridge.ReadableMap
4
+ import com.facebook.react.module.annotations.ReactModule
5
+ import com.facebook.react.uimanager.ThemedReactContext
6
+ import com.facebook.react.uimanager.ViewGroupManager
7
+ import com.facebook.react.uimanager.ViewManagerDelegate
8
+ import com.facebook.react.uimanager.annotations.ReactProp
9
+ import com.facebook.react.viewmanagers.LuggCircleViewManagerDelegate
10
+ import com.facebook.react.viewmanagers.LuggCircleViewManagerInterface
11
+ import com.google.android.gms.maps.model.LatLng
12
+
13
+ @ReactModule(name = LuggCircleViewManager.NAME)
14
+ class LuggCircleViewManager :
15
+ ViewGroupManager<LuggCircleView>(),
16
+ LuggCircleViewManagerInterface<LuggCircleView> {
17
+ private val delegate: ViewManagerDelegate<LuggCircleView> = LuggCircleViewManagerDelegate(this)
18
+
19
+ override fun getDelegate(): ViewManagerDelegate<LuggCircleView> = delegate
20
+ override fun getName(): String = NAME
21
+ override fun createViewInstance(context: ThemedReactContext): LuggCircleView = LuggCircleView(context)
22
+
23
+ override fun getExportedCustomDirectEventTypeConstants(): Map<String, Any> =
24
+ mapOf("topCirclePress" to mapOf("registrationName" to "onCirclePress"))
25
+
26
+ override fun onDropViewInstance(view: LuggCircleView) {
27
+ super.onDropViewInstance(view)
28
+ view.onDropViewInstance()
29
+ }
30
+
31
+ override fun onAfterUpdateTransaction(view: LuggCircleView) {
32
+ super.onAfterUpdateTransaction(view)
33
+ view.onAfterUpdateTransaction()
34
+ }
35
+
36
+ @ReactProp(name = "center")
37
+ override fun setCenter(view: LuggCircleView, value: ReadableMap?) {
38
+ value?.let { map ->
39
+ val lat = map.getDouble("latitude")
40
+ val lng = map.getDouble("longitude")
41
+ view.setCenter(LatLng(lat, lng))
42
+ }
43
+ }
44
+
45
+ @ReactProp(name = "radius", defaultDouble = 0.0)
46
+ override fun setRadius(view: LuggCircleView, value: Double) {
47
+ view.setRadius(value)
48
+ }
49
+
50
+ @ReactProp(name = "strokeColor", customType = "Color")
51
+ override fun setStrokeColor(view: LuggCircleView, value: Int?) {
52
+ view.setStrokeColor(value ?: android.graphics.Color.BLACK)
53
+ }
54
+
55
+ @ReactProp(name = "fillColor", customType = "Color")
56
+ override fun setFillColor(view: LuggCircleView, value: Int?) {
57
+ view.setFillColor(value ?: android.graphics.Color.argb(77, 0, 0, 0))
58
+ }
59
+
60
+ @ReactProp(name = "strokeWidth", defaultDouble = 1.0)
61
+ override fun setStrokeWidth(view: LuggCircleView, value: Double) {
62
+ view.setStrokeWidth(value.toFloat())
63
+ }
64
+
65
+ @ReactProp(name = "tappable")
66
+ override fun setTappable(view: LuggCircleView, value: Boolean) {
67
+ view.setTappable(value)
68
+ }
69
+
70
+ @ReactProp(name = "zIndex", defaultFloat = 0f)
71
+ override fun setZIndex(view: LuggCircleView, value: Float) {
72
+ super.setZIndex(view, value)
73
+ view.setZIndex(value)
74
+ }
75
+
76
+ companion object {
77
+ const val NAME = "LuggCircleView"
78
+ }
79
+ }
@@ -0,0 +1,81 @@
1
+ package com.luggmaps
2
+
3
+ import android.content.Context
4
+ import com.facebook.react.views.view.ReactViewGroup
5
+ import com.google.android.gms.maps.model.GroundOverlay
6
+ import com.google.android.gms.maps.model.LatLng
7
+ import com.luggmaps.events.GroundOverlayPressEvent
8
+ import com.luggmaps.extensions.dispatchEvent
9
+
10
+ interface LuggGroundOverlayViewDelegate {
11
+ fun groundOverlayViewDidUpdate(groundOverlayView: LuggGroundOverlayView)
12
+ }
13
+
14
+ class LuggGroundOverlayView(context: Context) : ReactViewGroup(context) {
15
+ var imageUri: String = ""
16
+ private set
17
+
18
+ var northeast: LatLng = LatLng(0.0, 0.0)
19
+ private set
20
+
21
+ var southwest: LatLng = LatLng(0.0, 0.0)
22
+ private set
23
+
24
+ var overlayOpacity: Float = 1f
25
+ private set
26
+
27
+ var bearing: Float = 0f
28
+ private set
29
+
30
+ var zIndex: Float = 0f
31
+ private set
32
+
33
+ var tappable: Boolean = false
34
+ private set
35
+
36
+ var delegate: LuggGroundOverlayViewDelegate? = null
37
+ var groundOverlay: GroundOverlay? = null
38
+
39
+ init {
40
+ visibility = GONE
41
+ }
42
+
43
+ fun setImageUri(value: String) {
44
+ imageUri = value
45
+ }
46
+
47
+ fun setBounds(ne: LatLng, sw: LatLng) {
48
+ northeast = ne
49
+ southwest = sw
50
+ }
51
+
52
+ fun setOverlayOpacity(value: Float) {
53
+ overlayOpacity = value
54
+ }
55
+
56
+ fun setBearing(value: Float) {
57
+ bearing = value
58
+ }
59
+
60
+ fun setZIndex(value: Float) {
61
+ zIndex = value
62
+ }
63
+
64
+ fun setTappable(value: Boolean) {
65
+ tappable = value
66
+ }
67
+
68
+ fun emitPressEvent() {
69
+ dispatchEvent(GroundOverlayPressEvent(this))
70
+ }
71
+
72
+ fun onAfterUpdateTransaction() {
73
+ delegate?.groundOverlayViewDidUpdate(this)
74
+ }
75
+
76
+ fun onDropViewInstance() {
77
+ delegate = null
78
+ groundOverlay?.remove()
79
+ groundOverlay = null
80
+ }
81
+ }
@@ -0,0 +1,82 @@
1
+ package com.luggmaps
2
+
3
+ import com.facebook.react.bridge.ReadableMap
4
+ import com.facebook.react.module.annotations.ReactModule
5
+ import com.facebook.react.uimanager.ThemedReactContext
6
+ import com.facebook.react.uimanager.ViewGroupManager
7
+ import com.facebook.react.uimanager.ViewManagerDelegate
8
+ import com.facebook.react.uimanager.annotations.ReactProp
9
+ import com.facebook.react.viewmanagers.LuggGroundOverlayViewManagerDelegate
10
+ import com.facebook.react.viewmanagers.LuggGroundOverlayViewManagerInterface
11
+ import com.google.android.gms.maps.model.LatLng
12
+
13
+ @ReactModule(name = LuggGroundOverlayViewManager.NAME)
14
+ class LuggGroundOverlayViewManager :
15
+ ViewGroupManager<LuggGroundOverlayView>(),
16
+ LuggGroundOverlayViewManagerInterface<LuggGroundOverlayView> {
17
+ private val delegate: ViewManagerDelegate<LuggGroundOverlayView> = LuggGroundOverlayViewManagerDelegate(this)
18
+
19
+ override fun getDelegate(): ViewManagerDelegate<LuggGroundOverlayView> = delegate
20
+ override fun getName(): String = NAME
21
+ override fun createViewInstance(context: ThemedReactContext): LuggGroundOverlayView = LuggGroundOverlayView(context)
22
+
23
+ override fun getExportedCustomDirectEventTypeConstants(): Map<String, Any> =
24
+ mapOf("topGroundOverlayPress" to mapOf("registrationName" to "onGroundOverlayPress"))
25
+
26
+ override fun onDropViewInstance(view: LuggGroundOverlayView) {
27
+ super.onDropViewInstance(view)
28
+ view.onDropViewInstance()
29
+ }
30
+
31
+ override fun onAfterUpdateTransaction(view: LuggGroundOverlayView) {
32
+ super.onAfterUpdateTransaction(view)
33
+ view.onAfterUpdateTransaction()
34
+ }
35
+
36
+ @ReactProp(name = "image")
37
+ override fun setImage(view: LuggGroundOverlayView, value: String?) {
38
+ view.setImageUri(value ?: "")
39
+ }
40
+
41
+ @ReactProp(name = "bounds")
42
+ override fun setBounds(view: LuggGroundOverlayView, value: ReadableMap?) {
43
+ value?.let { map ->
44
+ val ne = map.getMap("northeast")
45
+ val sw = map.getMap("southwest")
46
+ val northeast = LatLng(
47
+ ne?.getDouble("latitude") ?: 0.0,
48
+ ne?.getDouble("longitude") ?: 0.0
49
+ )
50
+ val southwest = LatLng(
51
+ sw?.getDouble("latitude") ?: 0.0,
52
+ sw?.getDouble("longitude") ?: 0.0
53
+ )
54
+ view.setBounds(northeast, southwest)
55
+ }
56
+ }
57
+
58
+ @ReactProp(name = "opacity", defaultDouble = 1.0)
59
+ override fun setOpacity(view: LuggGroundOverlayView, value: Double) {
60
+ view.setOverlayOpacity(value.toFloat())
61
+ }
62
+
63
+ @ReactProp(name = "bearing", defaultDouble = 0.0)
64
+ override fun setBearing(view: LuggGroundOverlayView, value: Double) {
65
+ view.setBearing(value.toFloat())
66
+ }
67
+
68
+ @ReactProp(name = "tappable")
69
+ override fun setTappable(view: LuggGroundOverlayView, value: Boolean) {
70
+ view.setTappable(value)
71
+ }
72
+
73
+ @ReactProp(name = "zIndex", defaultFloat = 0f)
74
+ override fun setZIndex(view: LuggGroundOverlayView, value: Float) {
75
+ super.setZIndex(view, value)
76
+ view.setZIndex(value)
77
+ }
78
+
79
+ companion object {
80
+ const val NAME = "LuggGroundOverlayView"
81
+ }
82
+ }
@@ -78,6 +78,9 @@ class LuggMapView(private val reactContext: ThemedReactContext) :
78
78
  is LuggMarkerView -> provider?.addMarkerView(child)
79
79
  is LuggPolylineView -> provider?.addPolylineView(child)
80
80
  is LuggPolygonView -> provider?.addPolygonView(child)
81
+ is LuggCircleView -> provider?.addCircleView(child)
82
+ is LuggGroundOverlayView -> provider?.addGroundOverlayView(child)
83
+ is LuggTileOverlayView -> provider?.addTileOverlayView(child)
81
84
  }
82
85
  }
83
86
 
@@ -87,6 +90,9 @@ class LuggMapView(private val reactContext: ThemedReactContext) :
87
90
  is LuggMarkerView -> provider?.removeMarkerView(view)
88
91
  is LuggPolylineView -> provider?.removePolylineView(view)
89
92
  is LuggPolygonView -> provider?.removePolygonView(view)
93
+ is LuggCircleView -> provider?.removeCircleView(view)
94
+ is LuggGroundOverlayView -> provider?.removeGroundOverlayView(view)
95
+ is LuggTileOverlayView -> provider?.removeTileOverlayView(view)
90
96
  }
91
97
  super.removeViewAt(index)
92
98
  }
@@ -135,6 +141,9 @@ class LuggMapView(private val reactContext: ThemedReactContext) :
135
141
  is LuggMarkerView -> google.addMarkerView(child)
136
142
  is LuggPolylineView -> google.addPolylineView(child)
137
143
  is LuggPolygonView -> google.addPolygonView(child)
144
+ is LuggCircleView -> google.addCircleView(child)
145
+ is LuggGroundOverlayView -> google.addGroundOverlayView(child)
146
+ is LuggTileOverlayView -> google.addTileOverlayView(child)
138
147
  }
139
148
  }
140
149
  }
@@ -12,6 +12,9 @@ class LuggPackage : ReactPackage {
12
12
  LuggCalloutViewManager(),
13
13
  LuggMapWrapperViewManager(),
14
14
  LuggPolylineViewManager(),
15
- LuggPolygonViewManager()
15
+ LuggPolygonViewManager(),
16
+ LuggCircleViewManager(),
17
+ LuggGroundOverlayViewManager(),
18
+ LuggTileOverlayViewManager()
16
19
  )
17
20
  }
@@ -0,0 +1,92 @@
1
+ package com.luggmaps
2
+
3
+ import android.content.Context
4
+ import com.facebook.react.views.view.ReactViewGroup
5
+ import com.google.android.gms.maps.model.TileOverlay
6
+ import com.luggmaps.events.TileOverlayPressEvent
7
+ import com.luggmaps.extensions.dispatchEvent
8
+
9
+ interface LuggTileOverlayViewDelegate {
10
+ fun tileOverlayViewDidUpdate(tileOverlayView: LuggTileOverlayView)
11
+ }
12
+
13
+ class LuggTileOverlayView(context: Context) : ReactViewGroup(context) {
14
+ var urlTemplate: String = ""
15
+ private set
16
+
17
+ var tileSize: Int = 256
18
+ private set
19
+
20
+ var overlayOpacity: Float = 1f
21
+ private set
22
+
23
+ var hasBounds: Boolean = false
24
+ private set
25
+ var boundsSwLat: Double = 0.0
26
+ private set
27
+ var boundsSwLng: Double = 0.0
28
+ private set
29
+ var boundsNeLat: Double = 0.0
30
+ private set
31
+ var boundsNeLng: Double = 0.0
32
+ private set
33
+
34
+ var zIndex: Float = 0f
35
+ private set
36
+
37
+ var tappable: Boolean = false
38
+ private set
39
+
40
+ var delegate: LuggTileOverlayViewDelegate? = null
41
+ var tileOverlay: TileOverlay? = null
42
+
43
+ init {
44
+ visibility = GONE
45
+ }
46
+
47
+ fun setUrlTemplate(value: String) {
48
+ urlTemplate = value
49
+ }
50
+
51
+ fun setTileSize(value: Int) {
52
+ tileSize = value
53
+ }
54
+
55
+ fun setOverlayOpacity(value: Float) {
56
+ overlayOpacity = value
57
+ }
58
+
59
+ fun setZIndex(value: Float) {
60
+ zIndex = value
61
+ }
62
+
63
+ fun setBounds(swLat: Double, swLng: Double, neLat: Double, neLng: Double) {
64
+ hasBounds = true
65
+ boundsSwLat = swLat
66
+ boundsSwLng = swLng
67
+ boundsNeLat = neLat
68
+ boundsNeLng = neLng
69
+ }
70
+
71
+ fun clearBounds() {
72
+ hasBounds = false
73
+ }
74
+
75
+ fun setTappable(value: Boolean) {
76
+ tappable = value
77
+ }
78
+
79
+ fun emitPressEvent() {
80
+ dispatchEvent(TileOverlayPressEvent(this))
81
+ }
82
+
83
+ fun onAfterUpdateTransaction() {
84
+ delegate?.tileOverlayViewDidUpdate(this)
85
+ }
86
+
87
+ fun onDropViewInstance() {
88
+ delegate = null
89
+ tileOverlay?.remove()
90
+ tileOverlay = null
91
+ }
92
+ }
@@ -0,0 +1,80 @@
1
+ package com.luggmaps
2
+
3
+ import com.facebook.react.bridge.ReadableMap
4
+ import com.facebook.react.module.annotations.ReactModule
5
+ import com.facebook.react.uimanager.ThemedReactContext
6
+ import com.facebook.react.uimanager.ViewGroupManager
7
+ import com.facebook.react.uimanager.ViewManagerDelegate
8
+ import com.facebook.react.uimanager.annotations.ReactProp
9
+ import com.facebook.react.viewmanagers.LuggTileOverlayViewManagerDelegate
10
+ import com.facebook.react.viewmanagers.LuggTileOverlayViewManagerInterface
11
+
12
+ @ReactModule(name = LuggTileOverlayViewManager.NAME)
13
+ class LuggTileOverlayViewManager :
14
+ ViewGroupManager<LuggTileOverlayView>(),
15
+ LuggTileOverlayViewManagerInterface<LuggTileOverlayView> {
16
+ private val delegate: ViewManagerDelegate<LuggTileOverlayView> = LuggTileOverlayViewManagerDelegate(this)
17
+
18
+ override fun getDelegate(): ViewManagerDelegate<LuggTileOverlayView> = delegate
19
+ override fun getName(): String = NAME
20
+ override fun createViewInstance(context: ThemedReactContext): LuggTileOverlayView = LuggTileOverlayView(context)
21
+
22
+ override fun getExportedCustomDirectEventTypeConstants(): Map<String, Any> =
23
+ mapOf("topTileOverlayPress" to mapOf("registrationName" to "onTileOverlayPress"))
24
+
25
+ override fun onDropViewInstance(view: LuggTileOverlayView) {
26
+ super.onDropViewInstance(view)
27
+ view.onDropViewInstance()
28
+ }
29
+
30
+ override fun onAfterUpdateTransaction(view: LuggTileOverlayView) {
31
+ super.onAfterUpdateTransaction(view)
32
+ view.onAfterUpdateTransaction()
33
+ }
34
+
35
+ @ReactProp(name = "urlTemplate")
36
+ override fun setUrlTemplate(view: LuggTileOverlayView, value: String?) {
37
+ view.setUrlTemplate(value ?: "")
38
+ }
39
+
40
+ @ReactProp(name = "tileSize", defaultInt = 256)
41
+ override fun setTileSize(view: LuggTileOverlayView, value: Int) {
42
+ view.setTileSize(value)
43
+ }
44
+
45
+ @ReactProp(name = "opacity", defaultDouble = 1.0)
46
+ override fun setOpacity(view: LuggTileOverlayView, value: Double) {
47
+ view.setOverlayOpacity(value.toFloat())
48
+ }
49
+
50
+ @ReactProp(name = "bounds")
51
+ override fun setBounds(view: LuggTileOverlayView, value: ReadableMap?) {
52
+ if (value == null) {
53
+ view.clearBounds()
54
+ return
55
+ }
56
+ val ne = value.getMap("northeast")
57
+ val sw = value.getMap("southwest")
58
+ view.setBounds(
59
+ sw?.getDouble("latitude") ?: 0.0,
60
+ sw?.getDouble("longitude") ?: 0.0,
61
+ ne?.getDouble("latitude") ?: 0.0,
62
+ ne?.getDouble("longitude") ?: 0.0
63
+ )
64
+ }
65
+
66
+ @ReactProp(name = "tappable")
67
+ override fun setTappable(view: LuggTileOverlayView, value: Boolean) {
68
+ view.setTappable(value)
69
+ }
70
+
71
+ @ReactProp(name = "zIndex", defaultFloat = 0f)
72
+ override fun setZIndex(view: LuggTileOverlayView, value: Float) {
73
+ super.setZIndex(view, value)
74
+ view.setZIndex(value)
75
+ }
76
+
77
+ companion object {
78
+ const val NAME = "LuggTileOverlayView"
79
+ }
80
+ }