@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.
- package/README.md +21 -3
- package/android/src/main/java/com/luggmaps/LuggMapView.kt +265 -0
- package/android/src/main/java/com/luggmaps/{LuggGoogleMapViewManager.kt → LuggMapViewManager.kt} +75 -36
- package/android/src/main/java/com/luggmaps/LuggMapWrapperView.kt +6 -5
- package/android/src/main/java/com/luggmaps/LuggMarkerView.kt +136 -14
- package/android/src/main/java/com/luggmaps/LuggMarkerViewManager.kt +21 -0
- package/android/src/main/java/com/luggmaps/LuggPackage.kt +1 -4
- package/android/src/main/java/com/luggmaps/LuggPolylineView.kt +16 -0
- package/android/src/main/java/com/luggmaps/LuggPolylineViewManager.kt +22 -0
- package/android/src/main/java/com/luggmaps/{LuggGoogleMapView.kt → core/GoogleMapProvider.kt} +251 -241
- package/android/src/main/java/com/luggmaps/core/MapProviderDelegate.kt +55 -0
- package/android/src/main/java/com/luggmaps/core/PolylineAnimator.kt +163 -52
- package/ios/LuggMapView.h +9 -0
- package/ios/LuggMapView.mm +312 -0
- package/ios/LuggMarkerView.h +9 -0
- package/ios/LuggMarkerView.mm +79 -0
- package/ios/LuggPolylineView.h +4 -0
- package/ios/LuggPolylineView.mm +23 -0
- package/ios/core/AppleMapProvider.h +15 -0
- package/ios/core/AppleMapProvider.mm +664 -0
- package/ios/core/GMSPolylineAnimator.h +3 -0
- package/ios/core/GMSPolylineAnimator.m +175 -40
- package/ios/core/GoogleMapProvider.h +13 -0
- package/ios/core/GoogleMapProvider.mm +513 -0
- package/ios/core/MKPolylineAnimator.h +4 -0
- package/ios/core/MKPolylineAnimator.m +224 -68
- package/ios/core/MapProviderDelegate.h +72 -0
- package/ios/core/PolylineAnimatorBase.h +24 -1
- package/ios/core/PolylineAnimatorBase.m +82 -19
- package/ios/extensions/MKMapView+Zoom.h +2 -0
- package/ios/extensions/MKMapView+Zoom.m +14 -4
- package/lib/module/MapProvider.js +13 -0
- package/lib/module/MapProvider.js.map +1 -0
- package/lib/module/MapProvider.types.js +4 -0
- package/lib/module/MapProvider.types.js.map +1 -0
- package/lib/module/MapProvider.web.js +20 -0
- package/lib/module/MapProvider.web.js.map +1 -0
- package/lib/module/MapView.js +29 -16
- package/lib/module/MapView.js.map +1 -1
- package/lib/module/MapView.web.js +290 -0
- package/lib/module/MapView.web.js.map +1 -0
- package/lib/module/components/Marker.js +19 -2
- package/lib/module/components/Marker.js.map +1 -1
- package/lib/module/components/Marker.web.js +33 -0
- package/lib/module/components/Marker.web.js.map +1 -0
- package/lib/module/components/Polyline.js +17 -4
- package/lib/module/components/Polyline.js.map +1 -1
- package/lib/module/components/Polyline.web.js +229 -0
- package/lib/module/components/Polyline.web.js.map +1 -0
- package/lib/module/components/index.js +2 -2
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/components/index.web.js +5 -0
- package/lib/module/components/index.web.js.map +1 -0
- package/lib/module/fabric/{LuggGoogleMapViewNativeComponent.ts → LuggMapViewNativeComponent.ts} +19 -7
- package/lib/module/fabric/LuggMarkerViewNativeComponent.ts +7 -1
- package/lib/module/fabric/LuggPolylineViewNativeComponent.ts +8 -0
- package/lib/module/index.js +4 -2
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +7 -0
- package/lib/module/index.web.js.map +1 -0
- package/lib/typescript/src/MapProvider.d.ts +8 -0
- package/lib/typescript/src/MapProvider.d.ts.map +1 -0
- package/lib/typescript/src/MapProvider.types.d.ts +16 -0
- package/lib/typescript/src/MapProvider.types.d.ts.map +1 -0
- package/lib/typescript/src/MapProvider.web.d.ts +11 -0
- package/lib/typescript/src/MapProvider.web.d.ts.map +1 -0
- package/lib/typescript/src/MapView.d.ts +4 -4
- package/lib/typescript/src/MapView.d.ts.map +1 -1
- package/lib/typescript/src/MapView.types.d.ts +23 -7
- package/lib/typescript/src/MapView.types.d.ts.map +1 -1
- package/lib/typescript/src/MapView.web.d.ts +3 -0
- package/lib/typescript/src/MapView.web.d.ts.map +1 -0
- package/lib/typescript/src/components/Marker.d.ts +25 -1
- package/lib/typescript/src/components/Marker.d.ts.map +1 -1
- package/lib/typescript/src/components/Marker.web.d.ts +3 -0
- package/lib/typescript/src/components/Marker.web.d.ts.map +1 -0
- package/lib/typescript/src/components/Polyline.d.ts +36 -1
- package/lib/typescript/src/components/Polyline.d.ts.map +1 -1
- package/lib/typescript/src/components/Polyline.web.d.ts +3 -0
- package/lib/typescript/src/components/Polyline.web.d.ts.map +1 -0
- package/lib/typescript/src/components/index.d.ts +4 -2
- package/lib/typescript/src/components/index.d.ts.map +1 -1
- package/lib/typescript/src/components/index.web.d.ts +5 -0
- package/lib/typescript/src/components/index.web.d.ts.map +1 -0
- package/lib/typescript/src/fabric/{LuggGoogleMapViewNativeComponent.d.ts → LuggMapViewNativeComponent.d.ts} +8 -4
- package/lib/typescript/src/fabric/LuggMapViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/fabric/LuggMarkerViewNativeComponent.d.ts +4 -1
- package/lib/typescript/src/fabric/LuggMarkerViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/fabric/LuggPolylineViewNativeComponent.d.ts +7 -0
- package/lib/typescript/src/fabric/LuggPolylineViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +8 -3
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/index.web.d.ts +10 -0
- package/lib/typescript/src/index.web.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +4 -0
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/package.json +17 -3
- package/src/MapProvider.tsx +10 -0
- package/src/MapProvider.types.ts +16 -0
- package/src/MapProvider.web.tsx +14 -0
- package/src/MapView.tsx +28 -26
- package/src/MapView.types.ts +24 -7
- package/src/MapView.web.tsx +364 -0
- package/src/components/Marker.tsx +50 -4
- package/src/components/Marker.web.tsx +33 -0
- package/src/components/Polyline.tsx +51 -2
- package/src/components/Polyline.web.tsx +287 -0
- package/src/components/index.ts +8 -2
- package/src/components/index.web.ts +4 -0
- package/src/fabric/{LuggGoogleMapViewNativeComponent.ts → LuggMapViewNativeComponent.ts} +19 -7
- package/src/fabric/LuggMarkerViewNativeComponent.ts +7 -1
- package/src/fabric/LuggPolylineViewNativeComponent.ts +8 -0
- package/src/index.ts +18 -2
- package/src/index.web.ts +20 -0
- package/src/types.ts +5 -0
- package/ios/LuggAppleMapView.h +0 -16
- package/ios/LuggAppleMapView.mm +0 -580
- package/ios/LuggGoogleMapView.h +0 -13
- package/ios/LuggGoogleMapView.mm +0 -454
- package/lib/module/fabric/LuggAppleMapViewNativeComponent.ts +0 -83
- package/lib/typescript/src/fabric/LuggAppleMapViewNativeComponent.d.ts +0 -54
- package/lib/typescript/src/fabric/LuggAppleMapViewNativeComponent.d.ts.map +0 -1
- package/lib/typescript/src/fabric/LuggGoogleMapViewNativeComponent.d.ts.map +0 -1
- package/src/fabric/LuggAppleMapViewNativeComponent.ts +0 -83
package/README.md
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
# @lugg/maps
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Universal maps for your React Native apps 📍
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
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
|
+
}
|
package/android/src/main/java/com/luggmaps/{LuggGoogleMapViewManager.kt → LuggMapViewManager.kt}
RENAMED
|
@@ -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.
|
|
12
|
-
import com.facebook.react.viewmanagers.
|
|
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 =
|
|
20
|
-
class
|
|
21
|
-
ViewGroupManager<
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
private val delegate: ViewManagerDelegate<
|
|
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<
|
|
26
|
+
override fun getDelegate(): ViewManagerDelegate<LuggMapView> = delegate
|
|
27
27
|
|
|
28
28
|
override fun getName(): String = NAME
|
|
29
29
|
|
|
30
|
-
override fun createViewInstance(context: ThemedReactContext):
|
|
31
|
-
val view =
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
127
|
+
override fun setMaxZoom(view: LuggMapView, value: Double) {
|
|
118
128
|
view.setMaxZoom(value)
|
|
119
129
|
}
|
|
120
130
|
|
|
121
|
-
@ReactProp(name = "
|
|
122
|
-
override fun
|
|
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.
|
|
143
|
+
view.setEdgeInsets(top, left, bottom, right)
|
|
129
144
|
}
|
|
130
145
|
}
|
|
131
146
|
|
|
132
|
-
override fun onDropViewInstance(view:
|
|
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:
|
|
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:
|
|
180
|
+
view: LuggMapView,
|
|
149
181
|
coordinates: ReadableArray?,
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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(
|
|
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 = "
|
|
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
|
|
30
|
-
val
|
|
30
|
+
val w = right - left
|
|
31
|
+
val h = bottom - top
|
|
31
32
|
getChildAt(0)?.let {
|
|
32
33
|
it.measure(
|
|
33
|
-
MeasureSpec.makeMeasureSpec(
|
|
34
|
-
MeasureSpec.makeMeasureSpec(
|
|
34
|
+
MeasureSpec.makeMeasureSpec(w, MeasureSpec.EXACTLY),
|
|
35
|
+
MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY)
|
|
35
36
|
)
|
|
36
|
-
it.layout(0, 0,
|
|
37
|
+
it.layout(0, 0, w, h)
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
40
|
}
|