@lugg/maps 0.2.0-alpha.3 → 0.2.0-alpha.30

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 (124) hide show
  1. package/README.md +21 -3
  2. package/android/src/main/java/com/luggmaps/LuggMapView.kt +265 -0
  3. package/android/src/main/java/com/luggmaps/{LuggGoogleMapViewManager.kt → LuggMapViewManager.kt} +75 -36
  4. package/android/src/main/java/com/luggmaps/LuggMapWrapperView.kt +6 -5
  5. package/android/src/main/java/com/luggmaps/LuggMarkerView.kt +136 -14
  6. package/android/src/main/java/com/luggmaps/LuggMarkerViewManager.kt +21 -0
  7. package/android/src/main/java/com/luggmaps/LuggPackage.kt +1 -4
  8. package/android/src/main/java/com/luggmaps/LuggPolylineView.kt +16 -0
  9. package/android/src/main/java/com/luggmaps/LuggPolylineViewManager.kt +22 -0
  10. package/android/src/main/java/com/luggmaps/{LuggGoogleMapView.kt → core/GoogleMapProvider.kt} +251 -241
  11. package/android/src/main/java/com/luggmaps/core/MapProviderDelegate.kt +55 -0
  12. package/android/src/main/java/com/luggmaps/core/PolylineAnimator.kt +163 -52
  13. package/ios/LuggMapView.h +9 -0
  14. package/ios/LuggMapView.mm +312 -0
  15. package/ios/LuggMarkerView.h +9 -0
  16. package/ios/LuggMarkerView.mm +79 -0
  17. package/ios/LuggPolylineView.h +4 -0
  18. package/ios/LuggPolylineView.mm +23 -0
  19. package/ios/core/AppleMapProvider.h +15 -0
  20. package/ios/core/AppleMapProvider.mm +664 -0
  21. package/ios/core/GMSPolylineAnimator.h +3 -0
  22. package/ios/core/GMSPolylineAnimator.m +175 -40
  23. package/ios/core/GoogleMapProvider.h +13 -0
  24. package/ios/core/GoogleMapProvider.mm +513 -0
  25. package/ios/core/MKPolylineAnimator.h +4 -0
  26. package/ios/core/MKPolylineAnimator.m +224 -68
  27. package/ios/core/MapProviderDelegate.h +72 -0
  28. package/ios/core/PolylineAnimatorBase.h +24 -1
  29. package/ios/core/PolylineAnimatorBase.m +82 -19
  30. package/ios/extensions/MKMapView+Zoom.h +2 -0
  31. package/ios/extensions/MKMapView+Zoom.m +14 -4
  32. package/lib/module/MapProvider.js +13 -0
  33. package/lib/module/MapProvider.js.map +1 -0
  34. package/lib/module/MapProvider.types.js +4 -0
  35. package/lib/module/MapProvider.types.js.map +1 -0
  36. package/lib/module/MapProvider.web.js +20 -0
  37. package/lib/module/MapProvider.web.js.map +1 -0
  38. package/lib/module/MapView.js +29 -16
  39. package/lib/module/MapView.js.map +1 -1
  40. package/lib/module/MapView.web.js +290 -0
  41. package/lib/module/MapView.web.js.map +1 -0
  42. package/lib/module/components/Marker.js +19 -2
  43. package/lib/module/components/Marker.js.map +1 -1
  44. package/lib/module/components/Marker.web.js +33 -0
  45. package/lib/module/components/Marker.web.js.map +1 -0
  46. package/lib/module/components/Polyline.js +17 -4
  47. package/lib/module/components/Polyline.js.map +1 -1
  48. package/lib/module/components/Polyline.web.js +229 -0
  49. package/lib/module/components/Polyline.web.js.map +1 -0
  50. package/lib/module/components/index.js +2 -2
  51. package/lib/module/components/index.js.map +1 -1
  52. package/lib/module/components/index.web.js +5 -0
  53. package/lib/module/components/index.web.js.map +1 -0
  54. package/lib/module/fabric/{LuggGoogleMapViewNativeComponent.ts → LuggMapViewNativeComponent.ts} +19 -7
  55. package/lib/module/fabric/LuggMarkerViewNativeComponent.ts +7 -1
  56. package/lib/module/fabric/LuggPolylineViewNativeComponent.ts +8 -0
  57. package/lib/module/index.js +4 -2
  58. package/lib/module/index.js.map +1 -1
  59. package/lib/module/index.web.js +7 -0
  60. package/lib/module/index.web.js.map +1 -0
  61. package/lib/typescript/src/MapProvider.d.ts +8 -0
  62. package/lib/typescript/src/MapProvider.d.ts.map +1 -0
  63. package/lib/typescript/src/MapProvider.types.d.ts +16 -0
  64. package/lib/typescript/src/MapProvider.types.d.ts.map +1 -0
  65. package/lib/typescript/src/MapProvider.web.d.ts +11 -0
  66. package/lib/typescript/src/MapProvider.web.d.ts.map +1 -0
  67. package/lib/typescript/src/MapView.d.ts +4 -4
  68. package/lib/typescript/src/MapView.d.ts.map +1 -1
  69. package/lib/typescript/src/MapView.types.d.ts +23 -7
  70. package/lib/typescript/src/MapView.types.d.ts.map +1 -1
  71. package/lib/typescript/src/MapView.web.d.ts +3 -0
  72. package/lib/typescript/src/MapView.web.d.ts.map +1 -0
  73. package/lib/typescript/src/components/Marker.d.ts +25 -1
  74. package/lib/typescript/src/components/Marker.d.ts.map +1 -1
  75. package/lib/typescript/src/components/Marker.web.d.ts +3 -0
  76. package/lib/typescript/src/components/Marker.web.d.ts.map +1 -0
  77. package/lib/typescript/src/components/Polyline.d.ts +36 -1
  78. package/lib/typescript/src/components/Polyline.d.ts.map +1 -1
  79. package/lib/typescript/src/components/Polyline.web.d.ts +3 -0
  80. package/lib/typescript/src/components/Polyline.web.d.ts.map +1 -0
  81. package/lib/typescript/src/components/index.d.ts +4 -2
  82. package/lib/typescript/src/components/index.d.ts.map +1 -1
  83. package/lib/typescript/src/components/index.web.d.ts +5 -0
  84. package/lib/typescript/src/components/index.web.d.ts.map +1 -0
  85. package/lib/typescript/src/fabric/{LuggGoogleMapViewNativeComponent.d.ts → LuggMapViewNativeComponent.d.ts} +8 -4
  86. package/lib/typescript/src/fabric/LuggMapViewNativeComponent.d.ts.map +1 -0
  87. package/lib/typescript/src/fabric/LuggMarkerViewNativeComponent.d.ts +4 -1
  88. package/lib/typescript/src/fabric/LuggMarkerViewNativeComponent.d.ts.map +1 -1
  89. package/lib/typescript/src/fabric/LuggPolylineViewNativeComponent.d.ts +7 -0
  90. package/lib/typescript/src/fabric/LuggPolylineViewNativeComponent.d.ts.map +1 -1
  91. package/lib/typescript/src/index.d.ts +8 -3
  92. package/lib/typescript/src/index.d.ts.map +1 -1
  93. package/lib/typescript/src/index.web.d.ts +10 -0
  94. package/lib/typescript/src/index.web.d.ts.map +1 -0
  95. package/lib/typescript/src/types.d.ts +4 -0
  96. package/lib/typescript/src/types.d.ts.map +1 -1
  97. package/package.json +17 -3
  98. package/src/MapProvider.tsx +10 -0
  99. package/src/MapProvider.types.ts +16 -0
  100. package/src/MapProvider.web.tsx +14 -0
  101. package/src/MapView.tsx +28 -26
  102. package/src/MapView.types.ts +24 -7
  103. package/src/MapView.web.tsx +364 -0
  104. package/src/components/Marker.tsx +50 -4
  105. package/src/components/Marker.web.tsx +33 -0
  106. package/src/components/Polyline.tsx +51 -2
  107. package/src/components/Polyline.web.tsx +287 -0
  108. package/src/components/index.ts +8 -2
  109. package/src/components/index.web.ts +4 -0
  110. package/src/fabric/{LuggGoogleMapViewNativeComponent.ts → LuggMapViewNativeComponent.ts} +19 -7
  111. package/src/fabric/LuggMarkerViewNativeComponent.ts +7 -1
  112. package/src/fabric/LuggPolylineViewNativeComponent.ts +8 -0
  113. package/src/index.ts +18 -2
  114. package/src/index.web.ts +20 -0
  115. package/src/types.ts +5 -0
  116. package/ios/LuggAppleMapView.h +0 -16
  117. package/ios/LuggAppleMapView.mm +0 -580
  118. package/ios/LuggGoogleMapView.h +0 -13
  119. package/ios/LuggGoogleMapView.mm +0 -454
  120. package/lib/module/fabric/LuggAppleMapViewNativeComponent.ts +0 -83
  121. package/lib/typescript/src/fabric/LuggAppleMapViewNativeComponent.d.ts +0 -54
  122. package/lib/typescript/src/fabric/LuggAppleMapViewNativeComponent.d.ts.map +0 -1
  123. package/lib/typescript/src/fabric/LuggGoogleMapViewNativeComponent.d.ts.map +0 -1
  124. package/src/fabric/LuggAppleMapViewNativeComponent.ts +0 -83
package/README.md CHANGED
@@ -1,9 +1,11 @@
1
1
  # @lugg/maps
2
2
 
3
- React Native Fabric maps library for iOS and Android.
3
+ Universal maps for your React Native apps 📍
4
4
 
5
- - Google Maps (iOS & Android)
6
- - Apple Maps (iOS only)
5
+ <img alt="@lugg/maps" src="docs/preview.gif" width="720" />
6
+
7
+ > [!IMPORTANT]
8
+ > This library is currently under heavy development. APIs may change without notice.
7
9
 
8
10
  ## Installation
9
11
 
@@ -56,6 +58,22 @@ Add your Google Maps API key to `AndroidManifest.xml`:
56
58
  </application>
57
59
  ```
58
60
 
61
+ ### Web
62
+
63
+ Wrap your app with `MapProvider` and pass your Google Maps API key:
64
+
65
+ ```tsx
66
+ import { MapProvider } from '@lugg/maps';
67
+
68
+ function App() {
69
+ return (
70
+ <MapProvider apiKey="YOUR_WEB_API_KEY">
71
+ {/* Your app */}
72
+ </MapProvider>
73
+ );
74
+ }
75
+ ```
76
+
59
77
  ## Usage
60
78
 
61
79
  ```tsx
@@ -0,0 +1,265 @@
1
+ package com.luggmaps
2
+
3
+ import android.annotation.SuppressLint
4
+ import android.view.View
5
+ import android.view.View.VISIBLE
6
+ import com.facebook.react.uimanager.ThemedReactContext
7
+ import com.facebook.react.util.RNLog
8
+ import com.facebook.react.views.view.ReactViewGroup
9
+ import com.google.android.gms.maps.model.LatLng
10
+ import com.luggmaps.core.EdgeInsets
11
+ import com.luggmaps.core.GoogleMapProvider
12
+ import com.luggmaps.core.MapProvider
13
+ import com.luggmaps.core.MapProviderDelegate
14
+
15
+ interface LuggMapViewEventDelegate {
16
+ fun onCameraMove(
17
+ view: LuggMapView,
18
+ latitude: Double,
19
+ longitude: Double,
20
+ zoom: Float,
21
+ gesture: Boolean
22
+ )
23
+ fun onCameraIdle(
24
+ view: LuggMapView,
25
+ latitude: Double,
26
+ longitude: Double,
27
+ zoom: Float,
28
+ gesture: Boolean
29
+ )
30
+ fun onReady(view: LuggMapView)
31
+ }
32
+
33
+ @SuppressLint("ViewConstructor")
34
+ class LuggMapView(private val reactContext: ThemedReactContext) :
35
+ ReactViewGroup(reactContext),
36
+ MapProviderDelegate {
37
+
38
+ var eventDelegate: LuggMapViewEventDelegate? = null
39
+ private var provider: MapProvider? = null
40
+ private var mapWrapperView: LuggMapWrapperView? = null
41
+
42
+ // Cached props (applied during initializeProvider)
43
+ private var mapId: String = GoogleMapProvider.DEMO_MAP_ID
44
+ private var initialLatitude: Double = 37.78
45
+ private var initialLongitude: Double = -122.43
46
+ private var initialZoom: Float = 14f
47
+ private var theme: String = "system"
48
+ private var zoomEnabled: Boolean = true
49
+ private var scrollEnabled: Boolean = true
50
+ private var rotateEnabled: Boolean = true
51
+ private var pitchEnabled: Boolean = true
52
+ private var userLocationEnabled: Boolean = false
53
+ private var userLocationButtonEnabled: Boolean = false
54
+ private var minZoom: Double? = null
55
+ private var maxZoom: Double? = null
56
+ private var edgeInsets: EdgeInsets = EdgeInsets()
57
+
58
+ // region View Lifecycle
59
+
60
+ override fun addView(child: View?, index: Int) {
61
+ super.addView(child, index)
62
+ when (child) {
63
+ is LuggMapWrapperView -> mapWrapperView = child
64
+ is LuggMarkerView -> provider?.addMarkerView(child)
65
+ is LuggPolylineView -> provider?.addPolylineView(child)
66
+ }
67
+ }
68
+
69
+ override fun removeViewAt(index: Int) {
70
+ val view = getChildAt(index)
71
+ when (view) {
72
+ is LuggMarkerView -> provider?.removeMarkerView(view)
73
+ is LuggPolylineView -> provider?.removePolylineView(view)
74
+ }
75
+ super.removeViewAt(index)
76
+ }
77
+
78
+ override fun onAttachedToWindow() {
79
+ super.onAttachedToWindow()
80
+ if (provider == null && mapWrapperView != null) {
81
+ initializeProvider()
82
+ }
83
+ }
84
+
85
+ override fun onWindowVisibilityChanged(visibility: Int) {
86
+ super.onWindowVisibilityChanged(visibility)
87
+ if (visibility == VISIBLE) {
88
+ provider?.resumeAnimations()
89
+ } else {
90
+ provider?.pauseAnimations()
91
+ }
92
+ }
93
+
94
+ fun onDropViewInstance() {
95
+ provider?.destroy()
96
+ provider = null
97
+ mapWrapperView = null
98
+ }
99
+
100
+ // endregion
101
+
102
+ // region Provider Initialization
103
+
104
+ private fun initializeProvider() {
105
+ if (provider != null || mapWrapperView == null) return
106
+
107
+ val google = GoogleMapProvider(context)
108
+ google.mapId = mapId
109
+ google.delegate = this
110
+ provider = google
111
+
112
+ applyProps()
113
+
114
+ google.initializeMap(mapWrapperView!!, initialLatitude, initialLongitude, initialZoom)
115
+
116
+ // Flush children mounted before provider was created
117
+ for (i in 0 until childCount) {
118
+ when (val child = getChildAt(i)) {
119
+ is LuggMarkerView -> google.addMarkerView(child)
120
+ is LuggPolylineView -> google.addPolylineView(child)
121
+ }
122
+ }
123
+ }
124
+
125
+ // endregion
126
+
127
+ // region MapProviderDelegate
128
+
129
+ override fun mapProviderDidReady() {
130
+ eventDelegate?.onReady(this)
131
+ }
132
+
133
+ override fun mapProviderDidMoveCamera(latitude: Double, longitude: Double, zoom: Float, gesture: Boolean) {
134
+ eventDelegate?.onCameraMove(this, latitude, longitude, zoom, gesture)
135
+ }
136
+
137
+ override fun mapProviderDidIdleCamera(latitude: Double, longitude: Double, zoom: Float, gesture: Boolean) {
138
+ eventDelegate?.onCameraIdle(this, latitude, longitude, zoom, gesture)
139
+ }
140
+
141
+ // endregion
142
+
143
+ // region Property Setters
144
+
145
+ private fun applyProps() {
146
+ provider?.setZoomEnabled(zoomEnabled)
147
+ provider?.setScrollEnabled(scrollEnabled)
148
+ provider?.setRotateEnabled(rotateEnabled)
149
+ provider?.setPitchEnabled(pitchEnabled)
150
+ provider?.setUserLocationEnabled(userLocationEnabled)
151
+ provider?.setUserLocationButtonEnabled(userLocationButtonEnabled)
152
+ provider?.setTheme(theme)
153
+ minZoom?.let { provider?.setMinZoom(it) }
154
+ maxZoom?.let { provider?.setMaxZoom(it) }
155
+ provider?.setEdgeInsets(edgeInsets)
156
+ }
157
+
158
+ fun setProvider(value: String?) {
159
+ if (value != null && value != "google") {
160
+ RNLog.w(reactContext, "LuggMapView: Only Google Maps is supported on Android")
161
+ }
162
+ }
163
+
164
+ fun setMapId(value: String?) {
165
+ if (value.isNullOrEmpty()) return
166
+ mapId = value
167
+ }
168
+
169
+ fun setInitialCoordinate(latitude: Double, longitude: Double) {
170
+ initialLatitude = latitude
171
+ initialLongitude = longitude
172
+ }
173
+
174
+ fun setInitialZoom(zoom: Double) {
175
+ initialZoom = zoom.toFloat()
176
+ }
177
+
178
+ fun setZoomEnabled(enabled: Boolean) {
179
+ if (zoomEnabled == enabled) return
180
+ zoomEnabled = enabled
181
+ provider?.setZoomEnabled(enabled)
182
+ }
183
+
184
+ fun setScrollEnabled(enabled: Boolean) {
185
+ if (scrollEnabled == enabled) return
186
+ scrollEnabled = enabled
187
+ provider?.setScrollEnabled(enabled)
188
+ }
189
+
190
+ fun setRotateEnabled(enabled: Boolean) {
191
+ if (rotateEnabled == enabled) return
192
+ rotateEnabled = enabled
193
+ provider?.setRotateEnabled(enabled)
194
+ }
195
+
196
+ fun setPitchEnabled(enabled: Boolean) {
197
+ if (pitchEnabled == enabled) return
198
+ pitchEnabled = enabled
199
+ provider?.setPitchEnabled(enabled)
200
+ }
201
+
202
+ fun setUserLocationEnabled(enabled: Boolean) {
203
+ if (userLocationEnabled == enabled) return
204
+ userLocationEnabled = enabled
205
+ provider?.setUserLocationEnabled(enabled)
206
+ }
207
+
208
+ fun setUserLocationButtonEnabled(enabled: Boolean) {
209
+ if (userLocationButtonEnabled == enabled) return
210
+ userLocationButtonEnabled = enabled
211
+ provider?.setUserLocationButtonEnabled(enabled)
212
+ }
213
+
214
+ fun setMinZoom(zoom: Double) {
215
+ if (minZoom == zoom) return
216
+ minZoom = zoom
217
+ provider?.setMinZoom(zoom)
218
+ }
219
+
220
+ fun setMaxZoom(zoom: Double) {
221
+ if (maxZoom == zoom) return
222
+ maxZoom = zoom
223
+ provider?.setMaxZoom(zoom)
224
+ }
225
+
226
+ fun setTheme(value: String) {
227
+ if (theme == value) return
228
+ theme = value
229
+ provider?.setTheme(value)
230
+ }
231
+
232
+ fun setEdgeInsets(
233
+ top: Int,
234
+ left: Int,
235
+ bottom: Int,
236
+ right: Int,
237
+ duration: Int = 0
238
+ ) {
239
+ val newEdgeInsets = EdgeInsets(top, left, bottom, right)
240
+ if (edgeInsets == newEdgeInsets) return
241
+ edgeInsets = newEdgeInsets
242
+ provider?.setEdgeInsets(edgeInsets, duration)
243
+ }
244
+
245
+ // endregion
246
+
247
+ // region Commands
248
+
249
+ fun moveCamera(latitude: Double, longitude: Double, zoom: Double, duration: Int) {
250
+ provider?.moveCamera(latitude, longitude, zoom, duration)
251
+ }
252
+
253
+ fun fitCoordinates(
254
+ coordinates: List<LatLng>,
255
+ edgeInsetsTop: Int,
256
+ edgeInsetsLeft: Int,
257
+ edgeInsetsBottom: Int,
258
+ edgeInsetsRight: Int,
259
+ duration: Int
260
+ ) {
261
+ provider?.fitCoordinates(coordinates, edgeInsetsTop, edgeInsetsLeft, edgeInsetsBottom, edgeInsetsRight, duration)
262
+ }
263
+
264
+ // endregion
265
+ }
@@ -8,27 +8,27 @@ import com.facebook.react.uimanager.ThemedReactContext
8
8
  import com.facebook.react.uimanager.ViewGroupManager
9
9
  import com.facebook.react.uimanager.ViewManagerDelegate
10
10
  import com.facebook.react.uimanager.annotations.ReactProp
11
- import com.facebook.react.viewmanagers.LuggGoogleMapViewManagerDelegate
12
- import com.facebook.react.viewmanagers.LuggGoogleMapViewManagerInterface
11
+ import com.facebook.react.viewmanagers.LuggMapViewManagerDelegate
12
+ import com.facebook.react.viewmanagers.LuggMapViewManagerInterface
13
13
  import com.google.android.gms.maps.model.LatLng
14
14
  import com.luggmaps.events.CameraIdleEvent
15
15
  import com.luggmaps.events.CameraMoveEvent
16
16
  import com.luggmaps.events.ReadyEvent
17
17
  import com.luggmaps.extensions.dispatchEvent
18
18
 
19
- @ReactModule(name = LuggGoogleMapViewManager.NAME)
20
- class LuggGoogleMapViewManager :
21
- ViewGroupManager<LuggGoogleMapView>(),
22
- LuggGoogleMapViewManagerInterface<LuggGoogleMapView>,
23
- LuggGoogleMapViewEventDelegate {
24
- private val delegate: ViewManagerDelegate<LuggGoogleMapView> = LuggGoogleMapViewManagerDelegate(this)
19
+ @ReactModule(name = LuggMapViewManager.NAME)
20
+ class LuggMapViewManager :
21
+ ViewGroupManager<LuggMapView>(),
22
+ LuggMapViewManagerInterface<LuggMapView>,
23
+ LuggMapViewEventDelegate {
24
+ private val delegate: ViewManagerDelegate<LuggMapView> = LuggMapViewManagerDelegate(this)
25
25
 
26
- override fun getDelegate(): ViewManagerDelegate<LuggGoogleMapView> = delegate
26
+ override fun getDelegate(): ViewManagerDelegate<LuggMapView> = delegate
27
27
 
28
28
  override fun getName(): String = NAME
29
29
 
30
- override fun createViewInstance(context: ThemedReactContext): LuggGoogleMapView {
31
- val view = LuggGoogleMapView(context)
30
+ override fun createViewInstance(context: ThemedReactContext): LuggMapView {
31
+ val view = LuggMapView(context)
32
32
  view.eventDelegate = this
33
33
  return view
34
34
  }
@@ -41,7 +41,7 @@ class LuggGoogleMapViewManager :
41
41
  )
42
42
 
43
43
  override fun onCameraMove(
44
- view: LuggGoogleMapView,
44
+ view: LuggMapView,
45
45
  latitude: Double,
46
46
  longitude: Double,
47
47
  zoom: Float,
@@ -51,7 +51,7 @@ class LuggGoogleMapViewManager :
51
51
  }
52
52
 
53
53
  override fun onCameraIdle(
54
- view: LuggGoogleMapView,
54
+ view: LuggMapView,
55
55
  latitude: Double,
56
56
  longitude: Double,
57
57
  zoom: Float,
@@ -60,17 +60,22 @@ class LuggGoogleMapViewManager :
60
60
  view.dispatchEvent(CameraIdleEvent(view, latitude, longitude, zoom, gesture))
61
61
  }
62
62
 
63
- override fun onReady(view: LuggGoogleMapView) {
63
+ override fun onReady(view: LuggMapView) {
64
64
  view.dispatchEvent(ReadyEvent(view))
65
65
  }
66
66
 
67
+ @ReactProp(name = "provider")
68
+ override fun setProvider(view: LuggMapView, value: String?) {
69
+ view.setProvider(value)
70
+ }
71
+
67
72
  @ReactProp(name = "mapId")
68
- override fun setMapId(view: LuggGoogleMapView, value: String?) {
73
+ override fun setMapId(view: LuggMapView, value: String?) {
69
74
  view.setMapId(value)
70
75
  }
71
76
 
72
77
  @ReactProp(name = "initialCoordinate")
73
- override fun setInitialCoordinate(view: LuggGoogleMapView, value: ReadableMap?) {
78
+ override fun setInitialCoordinate(view: LuggMapView, value: ReadableMap?) {
74
79
  value?.let {
75
80
  val latitude = if (it.hasKey("latitude")) it.getDouble("latitude") else 0.0
76
81
  val longitude = if (it.hasKey("longitude")) it.getDouble("longitude") else 0.0
@@ -79,63 +84,73 @@ class LuggGoogleMapViewManager :
79
84
  }
80
85
 
81
86
  @ReactProp(name = "initialZoom", defaultDouble = 10.0)
82
- override fun setInitialZoom(view: LuggGoogleMapView, value: Double) {
87
+ override fun setInitialZoom(view: LuggMapView, value: Double) {
83
88
  view.setInitialZoom(value)
84
89
  }
85
90
 
86
91
  @ReactProp(name = "zoomEnabled", defaultBoolean = true)
87
- override fun setZoomEnabled(view: LuggGoogleMapView, value: Boolean) {
92
+ override fun setZoomEnabled(view: LuggMapView, value: Boolean) {
88
93
  view.setZoomEnabled(value)
89
94
  }
90
95
 
91
96
  @ReactProp(name = "scrollEnabled", defaultBoolean = true)
92
- override fun setScrollEnabled(view: LuggGoogleMapView, value: Boolean) {
97
+ override fun setScrollEnabled(view: LuggMapView, value: Boolean) {
93
98
  view.setScrollEnabled(value)
94
99
  }
95
100
 
96
101
  @ReactProp(name = "rotateEnabled", defaultBoolean = true)
97
- override fun setRotateEnabled(view: LuggGoogleMapView, value: Boolean) {
102
+ override fun setRotateEnabled(view: LuggMapView, value: Boolean) {
98
103
  view.setRotateEnabled(value)
99
104
  }
100
105
 
101
106
  @ReactProp(name = "pitchEnabled", defaultBoolean = true)
102
- override fun setPitchEnabled(view: LuggGoogleMapView, value: Boolean) {
107
+ override fun setPitchEnabled(view: LuggMapView, value: Boolean) {
103
108
  view.setPitchEnabled(value)
104
109
  }
105
110
 
106
111
  @ReactProp(name = "userLocationEnabled", defaultBoolean = false)
107
- override fun setUserLocationEnabled(view: LuggGoogleMapView, value: Boolean) {
112
+ override fun setUserLocationEnabled(view: LuggMapView, value: Boolean) {
108
113
  view.setUserLocationEnabled(value)
109
114
  }
110
115
 
116
+ @ReactProp(name = "userLocationButtonEnabled", defaultBoolean = false)
117
+ override fun setUserLocationButtonEnabled(view: LuggMapView, value: Boolean) {
118
+ view.setUserLocationButtonEnabled(value)
119
+ }
120
+
111
121
  @ReactProp(name = "minZoom")
112
- override fun setMinZoom(view: LuggGoogleMapView, value: Double) {
122
+ override fun setMinZoom(view: LuggMapView, value: Double) {
113
123
  view.setMinZoom(value)
114
124
  }
115
125
 
116
126
  @ReactProp(name = "maxZoom")
117
- override fun setMaxZoom(view: LuggGoogleMapView, value: Double) {
127
+ override fun setMaxZoom(view: LuggMapView, value: Double) {
118
128
  view.setMaxZoom(value)
119
129
  }
120
130
 
121
- @ReactProp(name = "padding")
122
- override fun setPadding(view: LuggGoogleMapView, value: ReadableMap?) {
131
+ @ReactProp(name = "theme")
132
+ override fun setTheme(view: LuggMapView, value: String?) {
133
+ view.setTheme(value ?: "system")
134
+ }
135
+
136
+ @ReactProp(name = "edgeInsets")
137
+ override fun setEdgeInsets(view: LuggMapView, value: ReadableMap?) {
123
138
  value?.let {
124
139
  val top = if (it.hasKey("top")) it.getDouble("top").toFloat().dpToPx().toInt() else 0
125
140
  val left = if (it.hasKey("left")) it.getDouble("left").toFloat().dpToPx().toInt() else 0
126
141
  val bottom = if (it.hasKey("bottom")) it.getDouble("bottom").toFloat().dpToPx().toInt() else 0
127
142
  val right = if (it.hasKey("right")) it.getDouble("right").toFloat().dpToPx().toInt() else 0
128
- view.setMapPadding(top, left, bottom, right)
143
+ view.setEdgeInsets(top, left, bottom, right)
129
144
  }
130
145
  }
131
146
 
132
- override fun onDropViewInstance(view: LuggGoogleMapView) {
147
+ override fun onDropViewInstance(view: LuggMapView) {
133
148
  super.onDropViewInstance(view)
134
149
  view.onDropViewInstance()
135
150
  }
136
151
 
137
152
  override fun moveCamera(
138
- view: LuggGoogleMapView,
153
+ view: LuggMapView,
139
154
  latitude: Double,
140
155
  longitude: Double,
141
156
  zoom: Double,
@@ -144,13 +159,30 @@ class LuggGoogleMapViewManager :
144
159
  view.moveCamera(latitude, longitude, zoom, duration.toInt())
145
160
  }
146
161
 
162
+ override fun setEdgeInsets(
163
+ view: LuggMapView,
164
+ top: Double,
165
+ left: Double,
166
+ bottom: Double,
167
+ right: Double,
168
+ duration: Double
169
+ ) {
170
+ view.setEdgeInsets(
171
+ top.toFloat().dpToPx().toInt(),
172
+ left.toFloat().dpToPx().toInt(),
173
+ bottom.toFloat().dpToPx().toInt(),
174
+ right.toFloat().dpToPx().toInt(),
175
+ duration.toInt()
176
+ )
177
+ }
178
+
147
179
  override fun fitCoordinates(
148
- view: LuggGoogleMapView,
180
+ view: LuggMapView,
149
181
  coordinates: ReadableArray?,
150
- paddingTop: Double,
151
- paddingLeft: Double,
152
- paddingBottom: Double,
153
- paddingRight: Double,
182
+ edgeInsetsTop: Double,
183
+ edgeInsetsLeft: Double,
184
+ edgeInsetsBottom: Double,
185
+ edgeInsetsRight: Double,
154
186
  duration: Double
155
187
  ) {
156
188
  val coords = mutableListOf<LatLng>()
@@ -162,10 +194,17 @@ class LuggGoogleMapViewManager :
162
194
  coords.add(LatLng(lat, lng))
163
195
  }
164
196
  }
165
- view.fitCoordinates(coords, paddingTop.toInt(), paddingLeft.toInt(), paddingBottom.toInt(), paddingRight.toInt(), duration.toInt())
197
+ view.fitCoordinates(
198
+ coords,
199
+ edgeInsetsTop.toInt(),
200
+ edgeInsetsLeft.toInt(),
201
+ edgeInsetsBottom.toInt(),
202
+ edgeInsetsRight.toInt(),
203
+ duration.toInt()
204
+ )
166
205
  }
167
206
 
168
207
  companion object {
169
- const val NAME = "LuggGoogleMapView"
208
+ const val NAME = "LuggMapView"
170
209
  }
171
210
  }
@@ -1,6 +1,7 @@
1
1
  package com.luggmaps
2
2
 
3
3
  import android.annotation.SuppressLint
4
+ import android.util.Log
4
5
  import com.facebook.react.uimanager.ThemedReactContext
5
6
  import com.facebook.react.views.view.ReactViewGroup
6
7
 
@@ -26,14 +27,14 @@ class LuggMapWrapperView(context: ThemedReactContext) : ReactViewGroup(context)
26
27
  bottom: Int
27
28
  ) {
28
29
  super.onLayout(changed, left, top, right, bottom)
29
- val width = right - left
30
- val height = bottom - top
30
+ val w = right - left
31
+ val h = bottom - top
31
32
  getChildAt(0)?.let {
32
33
  it.measure(
33
- MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
34
- MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
34
+ MeasureSpec.makeMeasureSpec(w, MeasureSpec.EXACTLY),
35
+ MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY)
35
36
  )
36
- it.layout(0, 0, width, height)
37
+ it.layout(0, 0, w, h)
37
38
  }
38
39
  }
39
40
  }