@granite-js/naver-map 1.0.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 (104) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/GraniteNaverMap.podspec +81 -0
  3. package/android/build.gradle +160 -0
  4. package/android/gradle.properties +5 -0
  5. package/android/src/builtinProvider/java/run/granite/navermap/builtinProvider/BuiltInGraniteNaverMapProvider.kt +549 -0
  6. package/android/src/main/AndroidManifest.xml +3 -0
  7. package/android/src/main/java/run/granite/navermap/GraniteNaverMapEvents.kt +91 -0
  8. package/android/src/main/java/run/granite/navermap/GraniteNaverMapPackage.kt +16 -0
  9. package/android/src/main/java/run/granite/navermap/GraniteNaverMapProvider.kt +242 -0
  10. package/android/src/main/java/run/granite/navermap/GraniteNaverMapRegistry.kt +116 -0
  11. package/android/src/main/java/run/granite/navermap/GraniteNaverMapView.kt +732 -0
  12. package/android/src/newarch/java/run/granite/navermap/GraniteNaverMapViewManager.kt +446 -0
  13. package/android/src/oldarch/java/run/granite/navermap/GraniteNaverMapViewManager.kt +249 -0
  14. package/dist/module/NaverMapView.js +110 -0
  15. package/dist/module/NaverMapView.js.map +1 -0
  16. package/dist/module/index.js +6 -0
  17. package/dist/module/index.js.map +1 -0
  18. package/dist/module/internals/colorUtils.js +624 -0
  19. package/dist/module/internals/colorUtils.js.map +1 -0
  20. package/dist/module/internals/context.js +8 -0
  21. package/dist/module/internals/context.js.map +1 -0
  22. package/dist/module/internals/id.js +10 -0
  23. package/dist/module/internals/id.js.map +1 -0
  24. package/dist/module/internals/useMapOverlay.js +44 -0
  25. package/dist/module/internals/useMapOverlay.js.map +1 -0
  26. package/dist/module/internals/usePreservedReference.js +36 -0
  27. package/dist/module/internals/usePreservedReference.js.map +1 -0
  28. package/dist/module/overlays/ArrowheadPath.js +37 -0
  29. package/dist/module/overlays/ArrowheadPath.js.map +1 -0
  30. package/dist/module/overlays/Circle.js +35 -0
  31. package/dist/module/overlays/Circle.js.map +1 -0
  32. package/dist/module/overlays/GroundOverlay.js +30 -0
  33. package/dist/module/overlays/GroundOverlay.js.map +1 -0
  34. package/dist/module/overlays/InfoWindow.js +32 -0
  35. package/dist/module/overlays/InfoWindow.js.map +1 -0
  36. package/dist/module/overlays/Marker.js +37 -0
  37. package/dist/module/overlays/Marker.js.map +1 -0
  38. package/dist/module/overlays/Path.js +41 -0
  39. package/dist/module/overlays/Path.js.map +1 -0
  40. package/dist/module/overlays/Polygon.js +51 -0
  41. package/dist/module/overlays/Polygon.js.map +1 -0
  42. package/dist/module/overlays/Polyline.js +60 -0
  43. package/dist/module/overlays/Polyline.js.map +1 -0
  44. package/dist/module/overlays/index.js +11 -0
  45. package/dist/module/overlays/index.js.map +1 -0
  46. package/dist/module/package.json +1 -0
  47. package/dist/module/specs/GraniteNaverMapViewNativeComponent.ts +352 -0
  48. package/dist/module/types/Coord.js +2 -0
  49. package/dist/module/types/Coord.js.map +1 -0
  50. package/dist/module/types/index.js +29 -0
  51. package/dist/module/types/index.js.map +1 -0
  52. package/dist/typescript/NaverMapView.d.ts +41 -0
  53. package/dist/typescript/index.d.ts +3 -0
  54. package/dist/typescript/internals/colorUtils.d.ts +10 -0
  55. package/dist/typescript/internals/context.d.ts +8 -0
  56. package/dist/typescript/internals/id.d.ts +1 -0
  57. package/dist/typescript/internals/useMapOverlay.d.ts +15 -0
  58. package/dist/typescript/internals/usePreservedReference.d.ts +6 -0
  59. package/dist/typescript/overlays/ArrowheadPath.d.ts +11 -0
  60. package/dist/typescript/overlays/Circle.d.ts +10 -0
  61. package/dist/typescript/overlays/GroundOverlay.d.ts +11 -0
  62. package/dist/typescript/overlays/InfoWindow.d.ts +14 -0
  63. package/dist/typescript/overlays/Marker.d.ts +16 -0
  64. package/dist/typescript/overlays/Path.d.ts +15 -0
  65. package/dist/typescript/overlays/Polygon.d.ts +10 -0
  66. package/dist/typescript/overlays/Polyline.d.ts +11 -0
  67. package/dist/typescript/overlays/index.d.ts +16 -0
  68. package/dist/typescript/specs/GraniteNaverMapViewNativeComponent.d.ts +92 -0
  69. package/dist/typescript/types/Coord.d.ts +4 -0
  70. package/dist/typescript/types/index.d.ts +55 -0
  71. package/ios/GraniteNaverMap-Bridging-Header.h +20 -0
  72. package/ios/GraniteNaverMapProvider.swift +312 -0
  73. package/ios/GraniteNaverMapRegistry.swift +91 -0
  74. package/ios/GraniteNaverMapView.h +15 -0
  75. package/ios/GraniteNaverMapView.mm +390 -0
  76. package/ios/GraniteNaverMapViewImpl.swift +496 -0
  77. package/ios/GraniteNaverMapViewManager.m +67 -0
  78. package/ios/GraniteNaverMapViewManager.swift +133 -0
  79. package/ios/GraniteNaverMapViewWrapper.swift +215 -0
  80. package/ios/builtinProvider/BuiltInNaverMapProvider.swift +489 -0
  81. package/ios/builtinProvider/GraniteNaverMapMarkerData.swift +66 -0
  82. package/ios/builtinProvider/NMFMarker+Extension.swift +65 -0
  83. package/ios/builtinProvider/RCTConvert+NMFMapView.h +17 -0
  84. package/ios/builtinProvider/RCTConvert+NMFMapView.m +67 -0
  85. package/package.json +103 -0
  86. package/src/NaverMapView.tsx +168 -0
  87. package/src/index.tsx +3 -0
  88. package/src/internals/colorUtils.ts +697 -0
  89. package/src/internals/context.ts +14 -0
  90. package/src/internals/id.ts +9 -0
  91. package/src/internals/useMapOverlay.ts +59 -0
  92. package/src/internals/usePreservedReference.ts +41 -0
  93. package/src/overlays/ArrowheadPath.ts +71 -0
  94. package/src/overlays/Circle.ts +68 -0
  95. package/src/overlays/GroundOverlay.ts +62 -0
  96. package/src/overlays/InfoWindow.ts +68 -0
  97. package/src/overlays/Marker.ts +83 -0
  98. package/src/overlays/Path.ts +87 -0
  99. package/src/overlays/Polygon.ts +83 -0
  100. package/src/overlays/Polyline.ts +93 -0
  101. package/src/overlays/index.ts +23 -0
  102. package/src/specs/GraniteNaverMapViewNativeComponent.ts +352 -0
  103. package/src/types/Coord.ts +4 -0
  104. package/src/types/index.ts +78 -0
@@ -0,0 +1,446 @@
1
+ package run.granite.navermap
2
+
3
+ import android.util.Log
4
+ import com.facebook.react.bridge.ReadableArray
5
+ import com.facebook.react.bridge.ReadableMap
6
+ import com.facebook.react.module.annotations.ReactModule
7
+ import com.facebook.react.uimanager.SimpleViewManager
8
+ import com.facebook.react.uimanager.ThemedReactContext
9
+ import com.facebook.react.uimanager.ViewManagerDelegate
10
+ import com.facebook.react.uimanager.annotations.ReactProp
11
+ import com.facebook.react.viewmanagers.GraniteNaverMapViewManagerDelegate
12
+ import com.facebook.react.viewmanagers.GraniteNaverMapViewManagerInterface
13
+
14
+ @ReactModule(name = GraniteNaverMapViewManager.NAME)
15
+ class GraniteNaverMapViewManager : SimpleViewManager<GraniteNaverMapView>(),
16
+ GraniteNaverMapViewManagerInterface<GraniteNaverMapView> {
17
+
18
+ private val delegate = GraniteNaverMapViewManagerDelegate(this)
19
+
20
+ override fun getDelegate(): ViewManagerDelegate<GraniteNaverMapView> = delegate
21
+
22
+ override fun getName(): String = NAME
23
+
24
+ override fun createViewInstance(reactContext: ThemedReactContext): GraniteNaverMapView {
25
+ Log.d(NAME, "Creating GraniteNaverMapView instance")
26
+ return GraniteNaverMapView(reactContext)
27
+ }
28
+
29
+ override fun getExportedCustomDirectEventTypeConstants(): Map<String, Any>? {
30
+ return mapOf(
31
+ "onInitialized" to mapOf("registrationName" to "onInitialized"),
32
+ "onCameraChange" to mapOf("registrationName" to "onCameraChange"),
33
+ "onTouch" to mapOf("registrationName" to "onTouch"),
34
+ "onMapClick" to mapOf("registrationName" to "onMapClick"),
35
+ "onMarkerClick" to mapOf("registrationName" to "onMarkerClick")
36
+ )
37
+ }
38
+
39
+ // Props
40
+ @ReactProp(name = "center")
41
+ override fun setCenter(view: GraniteNaverMapView, center: ReadableMap?) {
42
+ center?.let {
43
+ val lat = it.getDouble("latitude")
44
+ val lng = it.getDouble("longitude")
45
+ val zoom = if (it.hasKey("zoom")) it.getDouble("zoom") else 10.0
46
+ val tilt = if (it.hasKey("tilt")) it.getDouble("tilt") else 0.0
47
+ val bearing = if (it.hasKey("bearing")) it.getDouble("bearing") else 0.0
48
+ view.setCenter(lat, lng, zoom, tilt, bearing)
49
+ }
50
+ }
51
+
52
+ @ReactProp(name = "showsMyLocationButton")
53
+ override fun setShowsMyLocationButton(view: GraniteNaverMapView, show: Boolean) {
54
+ view.setShowsMyLocationButton(show)
55
+ }
56
+
57
+ @ReactProp(name = "compass")
58
+ override fun setCompass(view: GraniteNaverMapView, show: Boolean) {
59
+ view.setCompass(show)
60
+ }
61
+
62
+ @ReactProp(name = "scaleBar")
63
+ override fun setScaleBar(view: GraniteNaverMapView, show: Boolean) {
64
+ view.setScaleBar(show)
65
+ }
66
+
67
+ @ReactProp(name = "zoomControl")
68
+ override fun setZoomControl(view: GraniteNaverMapView, show: Boolean) {
69
+ view.setZoomControl(show)
70
+ }
71
+
72
+ @ReactProp(name = "mapType")
73
+ override fun setMapType(view: GraniteNaverMapView, mapType: Int) {
74
+ view.setMapType(mapType)
75
+ }
76
+
77
+ @ReactProp(name = "buildingHeight", defaultFloat = 1f)
78
+ override fun setBuildingHeight(view: GraniteNaverMapView, height: Float) {
79
+ view.setBuildingHeight(height)
80
+ }
81
+
82
+ @ReactProp(name = "nightMode")
83
+ override fun setNightMode(view: GraniteNaverMapView, enabled: Boolean) {
84
+ view.setNightMode(enabled)
85
+ }
86
+
87
+ @ReactProp(name = "minZoomLevel", defaultDouble = 0.0)
88
+ override fun setMinZoomLevel(view: GraniteNaverMapView, level: Double) {
89
+ view.setMinZoomLevel(level)
90
+ }
91
+
92
+ @ReactProp(name = "maxZoomLevel", defaultDouble = 21.0)
93
+ override fun setMaxZoomLevel(view: GraniteNaverMapView, level: Double) {
94
+ view.setMaxZoomLevel(level)
95
+ }
96
+
97
+ @ReactProp(name = "scrollGesturesEnabled", defaultBoolean = true)
98
+ override fun setScrollGesturesEnabled(view: GraniteNaverMapView, enabled: Boolean) {
99
+ view.setScrollGesturesEnabled(enabled)
100
+ }
101
+
102
+ @ReactProp(name = "zoomGesturesEnabled", defaultBoolean = true)
103
+ override fun setZoomGesturesEnabled(view: GraniteNaverMapView, enabled: Boolean) {
104
+ view.setZoomGesturesEnabled(enabled)
105
+ }
106
+
107
+ @ReactProp(name = "tiltGesturesEnabled", defaultBoolean = true)
108
+ override fun setTiltGesturesEnabled(view: GraniteNaverMapView, enabled: Boolean) {
109
+ view.setTiltGesturesEnabled(enabled)
110
+ }
111
+
112
+ @ReactProp(name = "rotateGesturesEnabled", defaultBoolean = true)
113
+ override fun setRotateGesturesEnabled(view: GraniteNaverMapView, enabled: Boolean) {
114
+ view.setRotateGesturesEnabled(enabled)
115
+ }
116
+
117
+ @ReactProp(name = "stopGesturesEnabled", defaultBoolean = true)
118
+ override fun setStopGesturesEnabled(view: GraniteNaverMapView, enabled: Boolean) {
119
+ view.setStopGesturesEnabled(enabled)
120
+ }
121
+
122
+ @ReactProp(name = "locationTrackingMode")
123
+ override fun setLocationTrackingMode(view: GraniteNaverMapView, mode: Int) {
124
+ view.setLocationTrackingMode(mode)
125
+ }
126
+
127
+ @ReactProp(name = "mapPadding")
128
+ override fun setMapPadding(view: GraniteNaverMapView, padding: ReadableMap?) {
129
+ padding?.let {
130
+ val top = if (it.hasKey("top")) it.getInt("top") else 0
131
+ val left = if (it.hasKey("left")) it.getInt("left") else 0
132
+ val bottom = if (it.hasKey("bottom")) it.getInt("bottom") else 0
133
+ val right = if (it.hasKey("right")) it.getInt("right") else 0
134
+ view.setMapPadding(top, left, bottom, right)
135
+ }
136
+ }
137
+
138
+ // Commands
139
+ override fun animateToCoordinate(view: GraniteNaverMapView, latitude: Double, longitude: Double) {
140
+ view.animateToCoordinate(latitude, longitude)
141
+ }
142
+
143
+ override fun animateToTwoCoordinates(
144
+ view: GraniteNaverMapView,
145
+ lat1: Double,
146
+ lng1: Double,
147
+ lat2: Double,
148
+ lng2: Double
149
+ ) {
150
+ view.animateToTwoCoordinates(lat1, lng1, lat2, lng2)
151
+ }
152
+
153
+ override fun animateToRegion(
154
+ view: GraniteNaverMapView,
155
+ latitude: Double,
156
+ longitude: Double,
157
+ latitudeDelta: Double,
158
+ longitudeDelta: Double
159
+ ) {
160
+ view.animateToRegion(latitude, longitude, latitudeDelta, longitudeDelta)
161
+ }
162
+
163
+ override fun setLayerGroupEnabled(view: GraniteNaverMapView, group: String, enabled: Boolean) {
164
+ view.setLayerGroupEnabled(group, enabled)
165
+ }
166
+
167
+ override fun addMarker(
168
+ view: GraniteNaverMapView,
169
+ identifier: String,
170
+ latitude: Double,
171
+ longitude: Double,
172
+ width: Int,
173
+ height: Int,
174
+ zIndex: Int,
175
+ rotation: Float,
176
+ flat: Boolean,
177
+ alpha: Float,
178
+ pinColor: Int,
179
+ image: String
180
+ ) {
181
+ Log.d(NAME, "addMarker called: id=$identifier, lat=$latitude, lng=$longitude")
182
+ view.addMarkerNew(identifier, latitude, longitude, width, height, zIndex, rotation, flat, alpha, pinColor, image)
183
+ }
184
+
185
+ override fun updateMarker(
186
+ view: GraniteNaverMapView,
187
+ identifier: String,
188
+ latitude: Double,
189
+ longitude: Double,
190
+ width: Int,
191
+ height: Int,
192
+ zIndex: Int,
193
+ rotation: Float,
194
+ flat: Boolean,
195
+ alpha: Float,
196
+ pinColor: Int,
197
+ image: String
198
+ ) {
199
+ view.updateMarkerNew(identifier, latitude, longitude, width, height, zIndex, rotation, flat, alpha, pinColor, image)
200
+ }
201
+
202
+ override fun removeMarker(view: GraniteNaverMapView, identifier: String) {
203
+ view.removeMarker(identifier)
204
+ }
205
+
206
+ // Polyline Commands
207
+ override fun addPolyline(
208
+ view: GraniteNaverMapView,
209
+ identifier: String,
210
+ coordsJson: String,
211
+ strokeWidth: Float,
212
+ strokeColor: Int,
213
+ zIndex: Int,
214
+ lineCap: Int,
215
+ lineJoin: Int,
216
+ patternJson: String
217
+ ) {
218
+ view.addPolyline(identifier, coordsJson, strokeWidth, strokeColor, zIndex, lineCap, lineJoin, patternJson)
219
+ }
220
+
221
+ override fun updatePolyline(
222
+ view: GraniteNaverMapView,
223
+ identifier: String,
224
+ coordsJson: String,
225
+ strokeWidth: Float,
226
+ strokeColor: Int,
227
+ zIndex: Int,
228
+ lineCap: Int,
229
+ lineJoin: Int,
230
+ patternJson: String
231
+ ) {
232
+ view.updatePolyline(identifier, coordsJson, strokeWidth, strokeColor, zIndex, lineCap, lineJoin, patternJson)
233
+ }
234
+
235
+ override fun removePolyline(view: GraniteNaverMapView, identifier: String) {
236
+ view.removePolyline(identifier)
237
+ }
238
+
239
+ // Polygon Commands
240
+ override fun addPolygon(
241
+ view: GraniteNaverMapView,
242
+ identifier: String,
243
+ coordsJson: String,
244
+ holesJson: String,
245
+ fillColor: Int,
246
+ strokeColor: Int,
247
+ strokeWidth: Float,
248
+ zIndex: Int
249
+ ) {
250
+ view.addPolygon(identifier, coordsJson, holesJson, fillColor, strokeColor, strokeWidth, zIndex)
251
+ }
252
+
253
+ override fun updatePolygon(
254
+ view: GraniteNaverMapView,
255
+ identifier: String,
256
+ coordsJson: String,
257
+ holesJson: String,
258
+ fillColor: Int,
259
+ strokeColor: Int,
260
+ strokeWidth: Float,
261
+ zIndex: Int
262
+ ) {
263
+ view.updatePolygon(identifier, coordsJson, holesJson, fillColor, strokeColor, strokeWidth, zIndex)
264
+ }
265
+
266
+ override fun removePolygon(view: GraniteNaverMapView, identifier: String) {
267
+ view.removePolygon(identifier)
268
+ }
269
+
270
+ // Circle Commands
271
+ override fun addCircle(
272
+ view: GraniteNaverMapView,
273
+ identifier: String,
274
+ latitude: Double,
275
+ longitude: Double,
276
+ radius: Double,
277
+ fillColor: Int,
278
+ strokeColor: Int,
279
+ strokeWidth: Float,
280
+ zIndex: Int
281
+ ) {
282
+ view.addCircle(identifier, latitude, longitude, radius, fillColor, strokeColor, strokeWidth, zIndex)
283
+ }
284
+
285
+ override fun updateCircle(
286
+ view: GraniteNaverMapView,
287
+ identifier: String,
288
+ latitude: Double,
289
+ longitude: Double,
290
+ radius: Double,
291
+ fillColor: Int,
292
+ strokeColor: Int,
293
+ strokeWidth: Float,
294
+ zIndex: Int
295
+ ) {
296
+ view.updateCircle(identifier, latitude, longitude, radius, fillColor, strokeColor, strokeWidth, zIndex)
297
+ }
298
+
299
+ override fun removeCircle(view: GraniteNaverMapView, identifier: String) {
300
+ view.removeCircle(identifier)
301
+ }
302
+
303
+ // Path Commands
304
+ override fun addPath(
305
+ view: GraniteNaverMapView,
306
+ identifier: String,
307
+ coordsJson: String,
308
+ width: Float,
309
+ outlineWidth: Float,
310
+ color: Int,
311
+ outlineColor: Int,
312
+ passedColor: Int,
313
+ passedOutlineColor: Int,
314
+ patternImage: String,
315
+ patternInterval: Int,
316
+ progress: Float,
317
+ zIndex: Int
318
+ ) {
319
+ view.addPath(identifier, coordsJson, width, outlineWidth, color, outlineColor, passedColor, passedOutlineColor, patternImage, patternInterval, progress, zIndex)
320
+ }
321
+
322
+ override fun updatePath(
323
+ view: GraniteNaverMapView,
324
+ identifier: String,
325
+ coordsJson: String,
326
+ width: Float,
327
+ outlineWidth: Float,
328
+ color: Int,
329
+ outlineColor: Int,
330
+ passedColor: Int,
331
+ passedOutlineColor: Int,
332
+ patternImage: String,
333
+ patternInterval: Int,
334
+ progress: Float,
335
+ zIndex: Int
336
+ ) {
337
+ view.updatePath(identifier, coordsJson, width, outlineWidth, color, outlineColor, passedColor, passedOutlineColor, patternImage, patternInterval, progress, zIndex)
338
+ }
339
+
340
+ override fun removePath(view: GraniteNaverMapView, identifier: String) {
341
+ view.removePath(identifier)
342
+ }
343
+
344
+ // ArrowheadPath Commands
345
+ override fun addArrowheadPath(
346
+ view: GraniteNaverMapView,
347
+ identifier: String,
348
+ coordsJson: String,
349
+ width: Float,
350
+ outlineWidth: Float,
351
+ color: Int,
352
+ outlineColor: Int,
353
+ headSizeRatio: Float,
354
+ zIndex: Int
355
+ ) {
356
+ view.addArrowheadPath(identifier, coordsJson, width, outlineWidth, color, outlineColor, headSizeRatio, zIndex)
357
+ }
358
+
359
+ override fun updateArrowheadPath(
360
+ view: GraniteNaverMapView,
361
+ identifier: String,
362
+ coordsJson: String,
363
+ width: Float,
364
+ outlineWidth: Float,
365
+ color: Int,
366
+ outlineColor: Int,
367
+ headSizeRatio: Float,
368
+ zIndex: Int
369
+ ) {
370
+ view.updateArrowheadPath(identifier, coordsJson, width, outlineWidth, color, outlineColor, headSizeRatio, zIndex)
371
+ }
372
+
373
+ override fun removeArrowheadPath(view: GraniteNaverMapView, identifier: String) {
374
+ view.removeArrowheadPath(identifier)
375
+ }
376
+
377
+ // GroundOverlay Commands
378
+ override fun addGroundOverlay(
379
+ view: GraniteNaverMapView,
380
+ identifier: String,
381
+ swLat: Double,
382
+ swLng: Double,
383
+ neLat: Double,
384
+ neLng: Double,
385
+ image: String,
386
+ alpha: Float,
387
+ zIndex: Int
388
+ ) {
389
+ view.addGroundOverlay(identifier, swLat, swLng, neLat, neLng, image, alpha, zIndex)
390
+ }
391
+
392
+ override fun updateGroundOverlay(
393
+ view: GraniteNaverMapView,
394
+ identifier: String,
395
+ swLat: Double,
396
+ swLng: Double,
397
+ neLat: Double,
398
+ neLng: Double,
399
+ image: String,
400
+ alpha: Float,
401
+ zIndex: Int
402
+ ) {
403
+ view.updateGroundOverlay(identifier, swLat, swLng, neLat, neLng, image, alpha, zIndex)
404
+ }
405
+
406
+ override fun removeGroundOverlay(view: GraniteNaverMapView, identifier: String) {
407
+ view.removeGroundOverlay(identifier)
408
+ }
409
+
410
+ // InfoWindow Commands
411
+ override fun addInfoWindow(
412
+ view: GraniteNaverMapView,
413
+ identifier: String,
414
+ latitude: Double,
415
+ longitude: Double,
416
+ text: String,
417
+ alpha: Float,
418
+ zIndex: Int,
419
+ offsetX: Int,
420
+ offsetY: Int
421
+ ) {
422
+ view.addInfoWindow(identifier, latitude, longitude, text, alpha, zIndex, offsetX, offsetY)
423
+ }
424
+
425
+ override fun updateInfoWindow(
426
+ view: GraniteNaverMapView,
427
+ identifier: String,
428
+ latitude: Double,
429
+ longitude: Double,
430
+ text: String,
431
+ alpha: Float,
432
+ zIndex: Int,
433
+ offsetX: Int,
434
+ offsetY: Int
435
+ ) {
436
+ view.updateInfoWindow(identifier, latitude, longitude, text, alpha, zIndex, offsetX, offsetY)
437
+ }
438
+
439
+ override fun removeInfoWindow(view: GraniteNaverMapView, identifier: String) {
440
+ view.removeInfoWindow(identifier)
441
+ }
442
+
443
+ companion object {
444
+ const val NAME = "GraniteNaverMapView"
445
+ }
446
+ }
@@ -0,0 +1,249 @@
1
+ package run.granite.navermap
2
+
3
+ import android.graphics.Color
4
+ import com.facebook.react.bridge.ReadableArray
5
+ import com.facebook.react.bridge.ReadableMap
6
+ import com.facebook.react.common.MapBuilder
7
+ import com.facebook.react.uimanager.SimpleViewManager
8
+ import com.facebook.react.uimanager.ThemedReactContext
9
+ import com.facebook.react.uimanager.annotations.ReactProp
10
+
11
+ /**
12
+ * Old Architecture ViewManager (no direct NMapsMap dependency)
13
+ */
14
+ class GraniteNaverMapViewManager : SimpleViewManager<GraniteNaverMapView>() {
15
+
16
+ override fun getName(): String = "GraniteNaverMapView"
17
+
18
+ override fun createViewInstance(reactContext: ThemedReactContext): GraniteNaverMapView {
19
+ return GraniteNaverMapView(reactContext)
20
+ }
21
+
22
+ override fun getExportedCustomDirectEventTypeConstants(): Map<String, Any>? {
23
+ return MapBuilder.builder<String, Any>()
24
+ .put("onInitialized", MapBuilder.of("registrationName", "onInitialized"))
25
+ .put("onCameraChange", MapBuilder.of("registrationName", "onCameraChange"))
26
+ .put("onTouch", MapBuilder.of("registrationName", "onTouch"))
27
+ .put("onMapClick", MapBuilder.of("registrationName", "onMapClick"))
28
+ .put("onMarkerClick", MapBuilder.of("registrationName", "onMarkerClick"))
29
+ .build()
30
+ }
31
+
32
+ override fun getCommandsMap(): Map<String, Int>? {
33
+ return MapBuilder.builder<String, Int>()
34
+ .put("animateToCoordinate", COMMAND_ANIMATE_TO_COORDINATE)
35
+ .put("animateToTwoCoordinates", COMMAND_ANIMATE_TO_TWO_COORDINATES)
36
+ .put("animateToRegion", COMMAND_ANIMATE_TO_REGION)
37
+ .put("setLayerGroupEnabled", COMMAND_SET_LAYER_GROUP_ENABLED)
38
+ .put("addMarker", COMMAND_ADD_MARKER)
39
+ .put("updateMarker", COMMAND_UPDATE_MARKER)
40
+ .put("removeMarker", COMMAND_REMOVE_MARKER)
41
+ .put("addPolyline", COMMAND_ADD_POLYLINE)
42
+ .put("updatePolyline", COMMAND_UPDATE_POLYLINE)
43
+ .put("removePolyline", COMMAND_REMOVE_POLYLINE)
44
+ .put("addPolygon", COMMAND_ADD_POLYGON)
45
+ .put("updatePolygon", COMMAND_UPDATE_POLYGON)
46
+ .put("removePolygon", COMMAND_REMOVE_POLYGON)
47
+ .put("addCircle", COMMAND_ADD_CIRCLE)
48
+ .put("updateCircle", COMMAND_UPDATE_CIRCLE)
49
+ .put("removeCircle", COMMAND_REMOVE_CIRCLE)
50
+ .put("addPath", COMMAND_ADD_PATH)
51
+ .put("updatePath", COMMAND_UPDATE_PATH)
52
+ .put("removePath", COMMAND_REMOVE_PATH)
53
+ .put("addArrowheadPath", COMMAND_ADD_ARROWHEAD_PATH)
54
+ .put("updateArrowheadPath", COMMAND_UPDATE_ARROWHEAD_PATH)
55
+ .put("removeArrowheadPath", COMMAND_REMOVE_ARROWHEAD_PATH)
56
+ .put("addGroundOverlay", COMMAND_ADD_GROUND_OVERLAY)
57
+ .put("updateGroundOverlay", COMMAND_UPDATE_GROUND_OVERLAY)
58
+ .put("removeGroundOverlay", COMMAND_REMOVE_GROUND_OVERLAY)
59
+ .put("addInfoWindow", COMMAND_ADD_INFO_WINDOW)
60
+ .put("updateInfoWindow", COMMAND_UPDATE_INFO_WINDOW)
61
+ .put("removeInfoWindow", COMMAND_REMOVE_INFO_WINDOW)
62
+ .build()
63
+ }
64
+
65
+ override fun receiveCommand(view: GraniteNaverMapView, commandId: Int, args: ReadableArray?) {
66
+ when (commandId) {
67
+ COMMAND_ANIMATE_TO_COORDINATE -> {
68
+ val coord = args?.getMap(0)
69
+ coord?.let {
70
+ val lat = it.getDouble("latitude")
71
+ val lng = it.getDouble("longitude")
72
+ view.animateToCoordinate(lat, lng)
73
+ }
74
+ }
75
+ COMMAND_ANIMATE_TO_TWO_COORDINATES -> {
76
+ val coord1 = args?.getMap(0)
77
+ val coord2 = args?.getMap(1)
78
+ if (coord1 != null && coord2 != null) {
79
+ view.animateToTwoCoordinates(
80
+ coord1.getDouble("latitude"), coord1.getDouble("longitude"),
81
+ coord2.getDouble("latitude"), coord2.getDouble("longitude")
82
+ )
83
+ }
84
+ }
85
+ COMMAND_ANIMATE_TO_REGION -> {
86
+ val region = args?.getMap(0)
87
+ region?.let {
88
+ val lat = it.getDouble("latitude")
89
+ val lng = it.getDouble("longitude")
90
+ val latDelta = it.getDouble("latitudeDelta")
91
+ val lngDelta = it.getDouble("longitudeDelta")
92
+ view.animateToRegion(lat, lng, latDelta, lngDelta)
93
+ }
94
+ }
95
+ COMMAND_SET_LAYER_GROUP_ENABLED -> {
96
+ val group = args?.getString(0)
97
+ val enabled = args?.getBoolean(1) ?: false
98
+ group?.let { view.setLayerGroupEnabled(it, enabled) }
99
+ }
100
+ COMMAND_ADD_MARKER -> {
101
+ val identifier = args?.getString(0)
102
+ val markerData = args?.getMap(1)
103
+ if (identifier != null && markerData != null) {
104
+ view.addMarker(identifier, markerData)
105
+ }
106
+ }
107
+ COMMAND_UPDATE_MARKER -> {
108
+ val identifier = args?.getString(0)
109
+ val markerData = args?.getMap(1)
110
+ if (identifier != null && markerData != null) {
111
+ view.updateMarker(identifier, markerData)
112
+ }
113
+ }
114
+ COMMAND_REMOVE_MARKER -> {
115
+ val identifier = args?.getString(0)
116
+ identifier?.let { view.removeMarker(it) }
117
+ }
118
+ }
119
+ }
120
+
121
+ @ReactProp(name = "center")
122
+ fun setCenter(view: GraniteNaverMapView, center: ReadableMap?) {
123
+ center?.let {
124
+ val lat = it.getDouble("latitude")
125
+ val lng = it.getDouble("longitude")
126
+ val zoom = if (it.hasKey("zoom")) it.getDouble("zoom") else 10.0
127
+ val tilt = if (it.hasKey("tilt")) it.getDouble("tilt") else 0.0
128
+ val bearing = if (it.hasKey("bearing")) it.getDouble("bearing") else 0.0
129
+ view.setCenter(lat, lng, zoom, tilt, bearing)
130
+ }
131
+ }
132
+
133
+ @ReactProp(name = "showsMyLocationButton")
134
+ fun setShowsMyLocationButton(view: GraniteNaverMapView, show: Boolean) {
135
+ view.setShowsMyLocationButton(show)
136
+ }
137
+
138
+ @ReactProp(name = "compass")
139
+ fun setCompass(view: GraniteNaverMapView, show: Boolean) {
140
+ view.setCompass(show)
141
+ }
142
+
143
+ @ReactProp(name = "scaleBar")
144
+ fun setScaleBar(view: GraniteNaverMapView, show: Boolean) {
145
+ view.setScaleBar(show)
146
+ }
147
+
148
+ @ReactProp(name = "zoomControl")
149
+ fun setZoomControl(view: GraniteNaverMapView, show: Boolean) {
150
+ view.setZoomControl(show)
151
+ }
152
+
153
+ @ReactProp(name = "mapType")
154
+ fun setMapType(view: GraniteNaverMapView, mapType: Int) {
155
+ view.setMapType(mapType)
156
+ }
157
+
158
+ @ReactProp(name = "buildingHeight", defaultFloat = 1f)
159
+ fun setBuildingHeight(view: GraniteNaverMapView, height: Float) {
160
+ view.setBuildingHeight(height)
161
+ }
162
+
163
+ @ReactProp(name = "nightMode")
164
+ fun setNightMode(view: GraniteNaverMapView, enabled: Boolean) {
165
+ view.setNightMode(enabled)
166
+ }
167
+
168
+ @ReactProp(name = "minZoomLevel", defaultDouble = 0.0)
169
+ fun setMinZoomLevel(view: GraniteNaverMapView, level: Double) {
170
+ view.setMinZoomLevel(level)
171
+ }
172
+
173
+ @ReactProp(name = "maxZoomLevel", defaultDouble = 21.0)
174
+ fun setMaxZoomLevel(view: GraniteNaverMapView, level: Double) {
175
+ view.setMaxZoomLevel(level)
176
+ }
177
+
178
+ @ReactProp(name = "scrollGesturesEnabled", defaultBoolean = true)
179
+ fun setScrollGesturesEnabled(view: GraniteNaverMapView, enabled: Boolean) {
180
+ view.setScrollGesturesEnabled(enabled)
181
+ }
182
+
183
+ @ReactProp(name = "zoomGesturesEnabled", defaultBoolean = true)
184
+ fun setZoomGesturesEnabled(view: GraniteNaverMapView, enabled: Boolean) {
185
+ view.setZoomGesturesEnabled(enabled)
186
+ }
187
+
188
+ @ReactProp(name = "tiltGesturesEnabled", defaultBoolean = true)
189
+ fun setTiltGesturesEnabled(view: GraniteNaverMapView, enabled: Boolean) {
190
+ view.setTiltGesturesEnabled(enabled)
191
+ }
192
+
193
+ @ReactProp(name = "rotateGesturesEnabled", defaultBoolean = true)
194
+ fun setRotateGesturesEnabled(view: GraniteNaverMapView, enabled: Boolean) {
195
+ view.setRotateGesturesEnabled(enabled)
196
+ }
197
+
198
+ @ReactProp(name = "stopGesturesEnabled", defaultBoolean = true)
199
+ fun setStopGesturesEnabled(view: GraniteNaverMapView, enabled: Boolean) {
200
+ view.setStopGesturesEnabled(enabled)
201
+ }
202
+
203
+ @ReactProp(name = "locationTrackingMode")
204
+ fun setLocationTrackingMode(view: GraniteNaverMapView, mode: Int) {
205
+ view.setLocationTrackingMode(mode)
206
+ }
207
+
208
+ @ReactProp(name = "mapPadding")
209
+ fun setMapPadding(view: GraniteNaverMapView, padding: ReadableMap?) {
210
+ padding?.let {
211
+ val top = if (it.hasKey("top")) it.getInt("top") else 0
212
+ val left = if (it.hasKey("left")) it.getInt("left") else 0
213
+ val bottom = if (it.hasKey("bottom")) it.getInt("bottom") else 0
214
+ val right = if (it.hasKey("right")) it.getInt("right") else 0
215
+ view.setMapPadding(top, left, bottom, right)
216
+ }
217
+ }
218
+
219
+ companion object {
220
+ private const val COMMAND_ANIMATE_TO_COORDINATE = 1
221
+ private const val COMMAND_ANIMATE_TO_TWO_COORDINATES = 2
222
+ private const val COMMAND_ANIMATE_TO_REGION = 3
223
+ private const val COMMAND_SET_LAYER_GROUP_ENABLED = 4
224
+ private const val COMMAND_ADD_MARKER = 5
225
+ private const val COMMAND_UPDATE_MARKER = 6
226
+ private const val COMMAND_REMOVE_MARKER = 7
227
+ private const val COMMAND_ADD_POLYLINE = 8
228
+ private const val COMMAND_UPDATE_POLYLINE = 9
229
+ private const val COMMAND_REMOVE_POLYLINE = 10
230
+ private const val COMMAND_ADD_POLYGON = 11
231
+ private const val COMMAND_UPDATE_POLYGON = 12
232
+ private const val COMMAND_REMOVE_POLYGON = 13
233
+ private const val COMMAND_ADD_CIRCLE = 14
234
+ private const val COMMAND_UPDATE_CIRCLE = 15
235
+ private const val COMMAND_REMOVE_CIRCLE = 16
236
+ private const val COMMAND_ADD_PATH = 17
237
+ private const val COMMAND_UPDATE_PATH = 18
238
+ private const val COMMAND_REMOVE_PATH = 19
239
+ private const val COMMAND_ADD_ARROWHEAD_PATH = 20
240
+ private const val COMMAND_UPDATE_ARROWHEAD_PATH = 21
241
+ private const val COMMAND_REMOVE_ARROWHEAD_PATH = 22
242
+ private const val COMMAND_ADD_GROUND_OVERLAY = 23
243
+ private const val COMMAND_UPDATE_GROUND_OVERLAY = 24
244
+ private const val COMMAND_REMOVE_GROUND_OVERLAY = 25
245
+ private const val COMMAND_ADD_INFO_WINDOW = 26
246
+ private const val COMMAND_UPDATE_INFO_WINDOW = 27
247
+ private const val COMMAND_REMOVE_INFO_WINDOW = 28
248
+ }
249
+ }