@rnmapbox/maps 10.1.0-beta.5 → 10.1.0-beta.7

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 (184) hide show
  1. package/android/install.md +14 -0
  2. package/android/src/main/java/com/rnmapbox/rnmbx/RNMBXPackage.kt +182 -0
  3. package/android/src/main/java/com/rnmapbox/rnmbx/components/camera/RNMBXCamera.kt +5 -3
  4. package/android/src/main/java/com/rnmapbox/rnmbx/components/mapview/NativeMapViewModule.kt +14 -18
  5. package/android/src/main/java/com/rnmapbox/rnmbx/components/mapview/RNMBXAndroidTextureMapViewManager.kt +4 -2
  6. package/android/src/main/java/com/rnmapbox/rnmbx/components/mapview/RNMBXMapView.kt +39 -1
  7. package/android/src/main/java/com/rnmapbox/rnmbx/components/mapview/RNMBXMapViewManager.kt +9 -1
  8. package/android/src/main/java/com/rnmapbox/rnmbx/components/styles/RNMBXStyleImport.kt +37 -0
  9. package/android/src/main/java/com/rnmapbox/rnmbx/components/styles/RNMBXStyleImportManager.kt +57 -0
  10. package/android/src/main/java/com/rnmapbox/rnmbx/components/styles/RNMBXStyleValue.kt +2 -2
  11. package/android/src/main/java/com/rnmapbox/rnmbx/utils/ViewTagResolver.kt +68 -0
  12. package/android/src/main/java/com/rnmapbox/rnmbx/utils/extensions/Dynamic.kt +57 -0
  13. package/android/src/main/mapbox-v11-compat/v10/com/mapbox/rnmbx/v11compat/style.kt +9 -0
  14. package/android/src/main/mapbox-v11-compat/v11/com/mapbox/rnmbx/v11compat/style.kt +2 -0
  15. package/android/src/main/old-arch/com/facebook/react/viewmanagers/RNMBXAndroidTextureMapViewManagerDelegate.java +2 -1
  16. package/android/src/main/old-arch/com/facebook/react/viewmanagers/RNMBXAndroidTextureMapViewManagerInterface.java +2 -1
  17. package/android/src/main/old-arch/com/facebook/react/viewmanagers/RNMBXMapViewManagerDelegate.java +2 -1
  18. package/android/src/main/old-arch/com/facebook/react/viewmanagers/RNMBXMapViewManagerInterface.java +2 -1
  19. package/android/src/main/old-arch/com/facebook/react/viewmanagers/RNMBXStyleImportManagerDelegate.java +38 -0
  20. package/android/src/main/old-arch/com/facebook/react/viewmanagers/RNMBXStyleImportManagerInterface.java +20 -0
  21. package/android/src/main/old-arch/com/{mapbox → rnmapbox}/rnmbx/NativeMapViewModuleSpec.java +2 -1
  22. package/ios/RNMBX/RNMBXMapViewComponentView.mm +1 -7
  23. package/ios/RNMBX/RNMBXMapViewModule.mm +1 -9
  24. package/ios/RNMBX/RNMBXStyleImport.swift +42 -0
  25. package/ios/RNMBX/RNMBXStyleImportComponentView.h +17 -0
  26. package/ios/RNMBX/RNMBXStyleImportComponentView.mm +40 -0
  27. package/ios/RNMBX/RNMBXStyleImportManager.m +10 -0
  28. package/ios/RNMBX/RNMBXStyleImportManager.swift +12 -0
  29. package/ios/RNMBX/rnmapbox_maps-Swift.h.pre +9 -0
  30. package/ios/install.md +4 -0
  31. package/lib/commonjs/Mapbox.js +11 -6
  32. package/lib/commonjs/Mapbox.js.map +1 -1
  33. package/lib/commonjs/classes/AnimatedCoordinatesArray.js +1 -2
  34. package/lib/commonjs/classes/AnimatedCoordinatesArray.js.map +1 -1
  35. package/lib/commonjs/classes/AnimatedExtractCoordinateFromArray.js +1 -2
  36. package/lib/commonjs/classes/AnimatedExtractCoordinateFromArray.js.map +1 -1
  37. package/lib/commonjs/classes/AnimatedPoint.js +1 -2
  38. package/lib/commonjs/classes/AnimatedPoint.js.map +1 -1
  39. package/lib/commonjs/classes/AnimatedRouteCoordinatesArray.js +1 -2
  40. package/lib/commonjs/classes/AnimatedRouteCoordinatesArray.js.map +1 -1
  41. package/lib/commonjs/classes/AnimatedShape.js +1 -2
  42. package/lib/commonjs/classes/AnimatedShape.js.map +1 -1
  43. package/lib/commonjs/components/AbstractLayer.js +1 -2
  44. package/lib/commonjs/components/AbstractLayer.js.map +1 -1
  45. package/lib/commonjs/components/AbstractSource.js +1 -2
  46. package/lib/commonjs/components/AbstractSource.js.map +1 -1
  47. package/lib/commonjs/components/Annotation.js +1 -2
  48. package/lib/commonjs/components/Annotation.js.map +1 -1
  49. package/lib/commonjs/components/Atmosphere.js +2 -4
  50. package/lib/commonjs/components/Atmosphere.js.map +1 -1
  51. package/lib/commonjs/components/BackgroundLayer.js +2 -4
  52. package/lib/commonjs/components/BackgroundLayer.js.map +1 -1
  53. package/lib/commonjs/components/Callout.js +2 -4
  54. package/lib/commonjs/components/Callout.js.map +1 -1
  55. package/lib/commonjs/components/Camera.js +4 -6
  56. package/lib/commonjs/components/Camera.js.map +1 -1
  57. package/lib/commonjs/components/CircleLayer.js +2 -4
  58. package/lib/commonjs/components/CircleLayer.js.map +1 -1
  59. package/lib/commonjs/components/FillExtrusionLayer.js +2 -4
  60. package/lib/commonjs/components/FillExtrusionLayer.js.map +1 -1
  61. package/lib/commonjs/components/FillLayer.js +2 -4
  62. package/lib/commonjs/components/FillLayer.js.map +1 -1
  63. package/lib/commonjs/components/HeadingIndicator.js +1 -2
  64. package/lib/commonjs/components/HeadingIndicator.js.map +1 -1
  65. package/lib/commonjs/components/HeatmapLayer.js +2 -4
  66. package/lib/commonjs/components/HeatmapLayer.js.map +1 -1
  67. package/lib/commonjs/components/Image.js +2 -4
  68. package/lib/commonjs/components/Image.js.map +1 -1
  69. package/lib/commonjs/components/ImageSource.js +2 -4
  70. package/lib/commonjs/components/ImageSource.js.map +1 -1
  71. package/lib/commonjs/components/Images.js +2 -4
  72. package/lib/commonjs/components/Images.js.map +1 -1
  73. package/lib/commonjs/components/Light.js +2 -4
  74. package/lib/commonjs/components/Light.js.map +1 -1
  75. package/lib/commonjs/components/LineLayer.js +2 -4
  76. package/lib/commonjs/components/LineLayer.js.map +1 -1
  77. package/lib/commonjs/components/MapView.js +11 -7
  78. package/lib/commonjs/components/MapView.js.map +1 -1
  79. package/lib/commonjs/components/MarkerView.js +2 -4
  80. package/lib/commonjs/components/MarkerView.js.map +1 -1
  81. package/lib/commonjs/components/NativeBridgeComponent.js +1 -2
  82. package/lib/commonjs/components/NativeBridgeComponent.js.map +1 -1
  83. package/lib/commonjs/components/NativeUserLocation.js +1 -2
  84. package/lib/commonjs/components/NativeUserLocation.js.map +1 -1
  85. package/lib/commonjs/components/PointAnnotation.js +2 -4
  86. package/lib/commonjs/components/PointAnnotation.js.map +1 -1
  87. package/lib/commonjs/components/RasterDemSource.js +2 -4
  88. package/lib/commonjs/components/RasterDemSource.js.map +1 -1
  89. package/lib/commonjs/components/RasterLayer.js +2 -4
  90. package/lib/commonjs/components/RasterLayer.js.map +1 -1
  91. package/lib/commonjs/components/RasterSource.js +2 -4
  92. package/lib/commonjs/components/RasterSource.js.map +1 -1
  93. package/lib/commonjs/components/ShapeSource.js +1 -2
  94. package/lib/commonjs/components/ShapeSource.js.map +1 -1
  95. package/lib/commonjs/components/SkyLayer.js +2 -4
  96. package/lib/commonjs/components/SkyLayer.js.map +1 -1
  97. package/lib/commonjs/components/Style.js +1 -2
  98. package/lib/commonjs/components/Style.js.map +1 -1
  99. package/lib/commonjs/components/StyleImport.js +15 -0
  100. package/lib/commonjs/components/StyleImport.js.map +1 -0
  101. package/lib/commonjs/components/SymbolLayer.js +1 -2
  102. package/lib/commonjs/components/SymbolLayer.js.map +1 -1
  103. package/lib/commonjs/components/Terrain.js +2 -4
  104. package/lib/commonjs/components/Terrain.js.map +1 -1
  105. package/lib/commonjs/components/UserLocation.js +2 -4
  106. package/lib/commonjs/components/UserLocation.js.map +1 -1
  107. package/lib/commonjs/components/VectorSource.js +3 -4
  108. package/lib/commonjs/components/VectorSource.js.map +1 -1
  109. package/lib/commonjs/index.js +1 -2
  110. package/lib/commonjs/index.js.map +1 -1
  111. package/lib/commonjs/modules/location/locationManager.js +3 -4
  112. package/lib/commonjs/modules/location/locationManager.js.map +1 -1
  113. package/lib/commonjs/modules/offline/OfflineCreatePackOptions.js +1 -2
  114. package/lib/commonjs/modules/offline/OfflineCreatePackOptions.js.map +1 -1
  115. package/lib/commonjs/modules/offline/OfflinePack.js +1 -2
  116. package/lib/commonjs/modules/offline/OfflinePack.js.map +1 -1
  117. package/lib/commonjs/modules/offline/offlineManager.js +2 -4
  118. package/lib/commonjs/modules/offline/offlineManager.js.map +1 -1
  119. package/lib/commonjs/modules/snapshot/SnapshotOptions.js +1 -2
  120. package/lib/commonjs/modules/snapshot/SnapshotOptions.js.map +1 -1
  121. package/lib/commonjs/modules/snapshot/snapshotManager.js +1 -2
  122. package/lib/commonjs/modules/snapshot/snapshotManager.js.map +1 -1
  123. package/lib/commonjs/specs/NativeMapViewModule.js +1 -2
  124. package/lib/commonjs/specs/NativeMapViewModule.js.map +1 -1
  125. package/lib/commonjs/specs/RNMBXAndroidTextureMapViewNativeComponent.js +1 -2
  126. package/lib/commonjs/specs/RNMBXAndroidTextureMapViewNativeComponent.js.map +1 -1
  127. package/lib/commonjs/specs/RNMBXMapViewNativeComponent.js +1 -2
  128. package/lib/commonjs/specs/RNMBXMapViewNativeComponent.js.map +1 -1
  129. package/lib/commonjs/specs/RNMBXStyleImportNativeComponent.js +10 -0
  130. package/lib/commonjs/specs/RNMBXStyleImportNativeComponent.js.map +1 -0
  131. package/lib/commonjs/utils/Logger.js +1 -2
  132. package/lib/commonjs/utils/Logger.js.map +1 -1
  133. package/lib/commonjs/utils/animated/Animated.js +1 -2
  134. package/lib/commonjs/utils/animated/Animated.js.map +1 -1
  135. package/lib/commonjs/utils/geoUtils.js +5 -10
  136. package/lib/commonjs/utils/geoUtils.js.map +1 -1
  137. package/lib/commonjs/utils/styleMap.js +2 -4
  138. package/lib/commonjs/utils/styleMap.js.map +1 -1
  139. package/lib/commonjs/web/MapContext.js +1 -2
  140. package/lib/commonjs/web/MapContext.js.map +1 -1
  141. package/lib/commonjs/web/MapboxModule.js +1 -2
  142. package/lib/commonjs/web/MapboxModule.js.map +1 -1
  143. package/lib/commonjs/web/UnimplementedComponent.js +1 -2
  144. package/lib/commonjs/web/UnimplementedComponent.js.map +1 -1
  145. package/lib/commonjs/web/components/Camera.js +1 -2
  146. package/lib/commonjs/web/components/Camera.js.map +1 -1
  147. package/lib/commonjs/web/components/MapView.js +1 -2
  148. package/lib/commonjs/web/components/MapView.js.map +1 -1
  149. package/lib/commonjs/web/index.js +1 -2
  150. package/lib/commonjs/web/index.js.map +1 -1
  151. package/lib/commonjs/web/utils/Logger.js +1 -2
  152. package/lib/commonjs/web/utils/Logger.js.map +1 -1
  153. package/lib/module/Mapbox.js +1 -0
  154. package/lib/module/Mapbox.js.map +1 -1
  155. package/lib/module/components/MapView.js +9 -3
  156. package/lib/module/components/MapView.js.map +1 -1
  157. package/lib/module/components/StyleImport.js +6 -0
  158. package/lib/module/components/StyleImport.js.map +1 -0
  159. package/lib/module/specs/RNMBXStyleImportNativeComponent.js +3 -0
  160. package/lib/module/specs/RNMBXStyleImportNativeComponent.js.map +1 -0
  161. package/lib/typescript/Mapbox.d.ts +1 -0
  162. package/lib/typescript/Mapbox.d.ts.map +1 -1
  163. package/lib/typescript/components/MapView.d.ts +2 -2
  164. package/lib/typescript/components/MapView.d.ts.map +1 -1
  165. package/lib/typescript/components/StyleImport.d.ts +11 -0
  166. package/lib/typescript/components/StyleImport.d.ts.map +1 -0
  167. package/lib/typescript/specs/RNMBXAndroidTextureMapViewNativeComponent.d.ts +4 -4
  168. package/lib/typescript/specs/RNMBXAndroidTextureMapViewNativeComponent.d.ts.map +1 -1
  169. package/lib/typescript/specs/RNMBXMapViewNativeComponent.d.ts +4 -4
  170. package/lib/typescript/specs/RNMBXMapViewNativeComponent.d.ts.map +1 -1
  171. package/lib/typescript/specs/RNMBXStyleImportNativeComponent.d.ts +12 -0
  172. package/lib/typescript/specs/RNMBXStyleImportNativeComponent.d.ts.map +1 -0
  173. package/lib/typescript/specs/codegenUtils.d.ts +1 -1
  174. package/lib/typescript/specs/codegenUtils.d.ts.map +1 -1
  175. package/package.json +1 -1
  176. package/setup-jest.js +2 -0
  177. package/src/Mapbox.ts +1 -0
  178. package/src/components/MapView.tsx +7 -4
  179. package/src/components/StyleImport.tsx +17 -0
  180. package/src/specs/RNMBXAndroidTextureMapViewNativeComponent.ts +4 -4
  181. package/src/specs/RNMBXMapViewNativeComponent.ts +4 -4
  182. package/src/specs/RNMBXStyleImportNativeComponent.ts +14 -0
  183. package/src/specs/codegenUtils.ts +1 -1
  184. package/android/src/main/java/com/rnmapbox/rnmbx/RNMBXPackage.java +0 -215
@@ -35,6 +35,20 @@ allprojects {
35
35
  }
36
36
  ```
37
37
 
38
+ ### Setting Mapbox implementation
39
+
40
+ Note 10.1 or later only supports mapbox 10 and 11 implementations. So you no longer need to set this variable:
41
+
42
+ Set `RNMapboxMapsImpl` in `android/build.gradle > buildscript > ext` section
43
+
44
+ ```groovy
45
+ buildscript {
46
+ ext {
47
+ RNMapboxMapsImpl = 'mapbox'
48
+ }
49
+ }
50
+ ```
51
+
38
52
  ### Using non default mapbox version
39
53
 
40
54
  *Warning*: If you set a custom version, make sure you revisit, any time you update @rnmapbox/maps. Setting it to earlier version than what we exepect will likely result in a build error.
@@ -0,0 +1,182 @@
1
+ package com.rnmapbox.rnmbx
2
+
3
+ import com.facebook.react.TurboReactPackage
4
+ import com.facebook.react.bridge.JavaScriptModule
5
+ import com.facebook.react.bridge.NativeModule
6
+ import com.facebook.react.bridge.ReactApplicationContext
7
+ import com.facebook.react.module.model.ReactModuleInfo
8
+ import com.facebook.react.module.model.ReactModuleInfoProvider
9
+ import com.facebook.react.uimanager.ViewManager
10
+ import com.rnmapbox.rnmbx.components.annotation.RNMBXCalloutManager
11
+ import com.rnmapbox.rnmbx.components.annotation.RNMBXMarkerViewManager
12
+ import com.rnmapbox.rnmbx.components.annotation.RNMBXPointAnnotationManager
13
+ import com.rnmapbox.rnmbx.components.camera.RNMBXCameraManager
14
+ import com.rnmapbox.rnmbx.components.images.RNMBXImageManager
15
+ import com.rnmapbox.rnmbx.components.images.RNMBXImagesManager
16
+ import com.rnmapbox.rnmbx.components.location.RNMBXNativeUserLocationManager
17
+ import com.rnmapbox.rnmbx.components.mapview.NativeMapViewModule
18
+ import com.rnmapbox.rnmbx.components.mapview.RNMBXAndroidTextureMapViewManager
19
+ import com.rnmapbox.rnmbx.components.mapview.RNMBXMapView
20
+ import com.rnmapbox.rnmbx.components.mapview.RNMBXMapViewManager
21
+ import com.rnmapbox.rnmbx.components.styles.RNMBXStyleImportManager
22
+ import com.rnmapbox.rnmbx.components.styles.atmosphere.RNMBXAtmosphereManager
23
+ import com.rnmapbox.rnmbx.components.styles.layers.RNMBXBackgroundLayerManager
24
+ import com.rnmapbox.rnmbx.components.styles.layers.RNMBXCircleLayerManager
25
+ import com.rnmapbox.rnmbx.components.styles.layers.RNMBXFillExtrusionLayerManager
26
+ import com.rnmapbox.rnmbx.components.styles.layers.RNMBXFillLayerManager
27
+ import com.rnmapbox.rnmbx.components.styles.layers.RNMBXHeatmapLayerManager
28
+ import com.rnmapbox.rnmbx.components.styles.layers.RNMBXLineLayerManager
29
+ import com.rnmapbox.rnmbx.components.styles.layers.RNMBXRasterLayerManager
30
+ import com.rnmapbox.rnmbx.components.styles.layers.RNMBXSkyLayerManager
31
+ import com.rnmapbox.rnmbx.components.styles.layers.RNMBXSymbolLayerManager
32
+ import com.rnmapbox.rnmbx.components.styles.light.RNMBXLightManager
33
+ import com.rnmapbox.rnmbx.components.styles.sources.RNMBXImageSourceManager
34
+ import com.rnmapbox.rnmbx.components.styles.sources.RNMBXRasterDemSourceManager
35
+ import com.rnmapbox.rnmbx.components.styles.sources.RNMBXRasterSourceManager
36
+ import com.rnmapbox.rnmbx.components.styles.sources.RNMBXShapeSourceManager
37
+ import com.rnmapbox.rnmbx.components.styles.sources.RNMBXVectorSourceManager
38
+ import com.rnmapbox.rnmbx.components.styles.terrain.RNMBXTerrainManager
39
+ import com.rnmapbox.rnmbx.modules.RNMBXLocationModule
40
+ import com.rnmapbox.rnmbx.modules.RNMBXLogging
41
+ import com.rnmapbox.rnmbx.modules.RNMBXModule
42
+ import com.rnmapbox.rnmbx.modules.RNMBXOfflineModule
43
+ import com.rnmapbox.rnmbx.modules.RNMBXSnapshotModule
44
+ import com.rnmapbox.rnmbx.utils.ViewTagResolver
45
+
46
+ class RNMBXPackage : TurboReactPackage() {
47
+
48
+ var mapViewTagResolver: ViewTagResolver<RNMBXMapView>? = null
49
+ fun getMapViewTagResolver(context: ReactApplicationContext) : ViewTagResolver<RNMBXMapView> {
50
+ val viewTagResolver = mapViewTagResolver
51
+ if (viewTagResolver == null) {
52
+ val viewTagResolver = ViewTagResolver<RNMBXMapView>(context)
53
+ mapViewTagResolver = viewTagResolver
54
+ return viewTagResolver
55
+ }
56
+ return viewTagResolver
57
+ }
58
+
59
+ override fun getModule(
60
+ s: String,
61
+ reactApplicationContext: ReactApplicationContext
62
+ ): NativeModule? {
63
+ when (s) {
64
+ RNMBXModule.REACT_CLASS -> return RNMBXModule(reactApplicationContext)
65
+ RNMBXLocationModule.REACT_CLASS -> return RNMBXLocationModule(reactApplicationContext)
66
+ RNMBXOfflineModule.REACT_CLASS -> return RNMBXOfflineModule(reactApplicationContext)
67
+ RNMBXSnapshotModule.REACT_CLASS -> return RNMBXSnapshotModule(reactApplicationContext)
68
+ RNMBXLogging.REACT_CLASS -> return RNMBXLogging(reactApplicationContext)
69
+ NativeMapViewModule.NAME -> return NativeMapViewModule(reactApplicationContext, getMapViewTagResolver(reactApplicationContext))
70
+ }
71
+ return null
72
+ }
73
+
74
+ @Deprecated("")
75
+ fun createJSModules(): List<Class<out JavaScriptModule?>> {
76
+ return emptyList()
77
+ }
78
+
79
+ override fun createViewManagers(reactApplicationContext: ReactApplicationContext): List<ViewManager<*, *>> {
80
+ val managers: MutableList<ViewManager<*, *>> = ArrayList()
81
+
82
+ // components
83
+ managers.add(RNMBXCameraManager(reactApplicationContext))
84
+ managers.add(RNMBXAndroidTextureMapViewManager(reactApplicationContext, getMapViewTagResolver(reactApplicationContext)))
85
+ managers.add(RNMBXMapViewManager(reactApplicationContext, getMapViewTagResolver(reactApplicationContext)))
86
+ managers.add(RNMBXStyleImportManager(reactApplicationContext))
87
+
88
+ // annotations
89
+ managers.add(RNMBXMarkerViewManager(reactApplicationContext))
90
+ managers.add(RNMBXPointAnnotationManager(reactApplicationContext))
91
+ managers.add(RNMBXCalloutManager())
92
+ managers.add(RNMBXNativeUserLocationManager())
93
+
94
+ // sources
95
+ managers.add(RNMBXVectorSourceManager(reactApplicationContext))
96
+ managers.add(RNMBXShapeSourceManager(reactApplicationContext))
97
+ managers.add(RNMBXRasterDemSourceManager(reactApplicationContext))
98
+ managers.add(RNMBXRasterSourceManager(reactApplicationContext))
99
+ managers.add(RNMBXImageSourceManager())
100
+
101
+ // images
102
+ managers.add(RNMBXImagesManager(reactApplicationContext))
103
+ managers.add(RNMBXImageManager(reactApplicationContext))
104
+
105
+ // layers
106
+ managers.add(RNMBXFillLayerManager())
107
+ managers.add(RNMBXFillExtrusionLayerManager())
108
+ managers.add(RNMBXHeatmapLayerManager())
109
+ managers.add(RNMBXLineLayerManager())
110
+ managers.add(RNMBXCircleLayerManager())
111
+ managers.add(RNMBXSymbolLayerManager())
112
+ managers.add(RNMBXRasterLayerManager())
113
+ managers.add(RNMBXSkyLayerManager())
114
+ managers.add(RNMBXTerrainManager())
115
+ managers.add(RNMBXAtmosphereManager())
116
+ managers.add(RNMBXBackgroundLayerManager())
117
+ managers.add(RNMBXLightManager())
118
+ return managers
119
+ }
120
+
121
+ override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
122
+ return ReactModuleInfoProvider {
123
+ val moduleInfos: MutableMap<String, ReactModuleInfo> = HashMap()
124
+ val isTurboModule = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
125
+ moduleInfos[RNMBXModule.REACT_CLASS] = ReactModuleInfo(
126
+ RNMBXModule.REACT_CLASS,
127
+ RNMBXModule.REACT_CLASS,
128
+ false, // canOverrideExistingModule
129
+ false, // needsEagerInit
130
+ true, // hasConstants
131
+ false, // isCxxModule
132
+ false // isTurboModule
133
+ )
134
+ moduleInfos[RNMBXLocationModule.REACT_CLASS] = ReactModuleInfo(
135
+ RNMBXLocationModule.REACT_CLASS,
136
+ RNMBXLocationModule.REACT_CLASS,
137
+ false, // canOverrideExistingModule
138
+ false, // needsEagerInit
139
+ true, // hasConstants
140
+ false, // isCxxModule
141
+ false // isTurboModule
142
+ )
143
+ moduleInfos[RNMBXOfflineModule.REACT_CLASS] = ReactModuleInfo(
144
+ RNMBXOfflineModule.REACT_CLASS,
145
+ RNMBXOfflineModule.REACT_CLASS,
146
+ false, // canOverrideExistingModule
147
+ false, // needsEagerInit
148
+ true, // hasConstants
149
+ false, // isCxxModule
150
+ false // isTurboModule
151
+ )
152
+ moduleInfos[RNMBXSnapshotModule.REACT_CLASS] = ReactModuleInfo(
153
+ RNMBXSnapshotModule.REACT_CLASS,
154
+ RNMBXSnapshotModule.REACT_CLASS,
155
+ false, // canOverrideExistingModule
156
+ false, // needsEagerInit
157
+ true, // hasConstants
158
+ false, // isCxxModule
159
+ false // isTurboModule
160
+ )
161
+ moduleInfos[RNMBXLogging.REACT_CLASS] = ReactModuleInfo(
162
+ RNMBXLogging.REACT_CLASS,
163
+ RNMBXLogging.REACT_CLASS,
164
+ false, // canOverrideExistingModule
165
+ false, // needsEagerInit
166
+ true, // hasConstants
167
+ false, // isCxxModule
168
+ false // isTurboModule
169
+ )
170
+ moduleInfos[NativeMapViewModule.NAME] = ReactModuleInfo(
171
+ NativeMapViewModule.NAME,
172
+ NativeMapViewModule.NAME,
173
+ false, // canOverrideExistingModule
174
+ false, // needsEagerInit
175
+ false, // hasConstants
176
+ false, // isCxxModule
177
+ isTurboModule // isTurboModule
178
+ )
179
+ moduleInfos
180
+ }
181
+ }
182
+ }
@@ -91,9 +91,11 @@ class RNMBXCamera(private val mContext: Context, private val mManager: RNMBXCame
91
91
 
92
92
  override fun addToMap(mapView: RNMBXMapView) {
93
93
  super.addToMap(mapView)
94
- setInitialCamera()
95
- updateMaxBounds()
96
- mCameraStop?.let { updateCamera(it) }
94
+ mapView.callIfAttachedToWindow {
95
+ setInitialCamera()
96
+ updateMaxBounds()
97
+ mCameraStop?.let { updateCamera(it) }
98
+ }
97
99
  _observeViewportState(mapView.mapView)
98
100
  _updateViewportState()
99
101
  }
@@ -1,38 +1,34 @@
1
1
  package com.rnmapbox.rnmbx.components.mapview
2
2
 
3
+ import android.util.Log
3
4
  import com.facebook.react.bridge.Promise
4
5
  import com.facebook.react.bridge.ReactApplicationContext
5
6
  import com.facebook.react.bridge.ReadableArray
7
+ import com.facebook.react.bridge.UIManager
6
8
  import com.facebook.react.bridge.WritableMap
7
9
  import com.facebook.react.bridge.WritableNativeMap
10
+ import com.facebook.react.uimanager.IllegalViewOperationException
8
11
  import com.facebook.react.uimanager.UIManagerHelper
9
12
  import com.facebook.react.uimanager.common.UIManagerType
10
13
  import com.rnmapbox.rnmbx.BuildConfig
11
14
  import com.rnmapbox.rnmbx.NativeMapViewModuleSpec
12
15
  import com.rnmapbox.rnmbx.utils.ConvertUtils
13
16
  import com.rnmapbox.rnmbx.utils.ExpressionParser
17
+ import com.rnmapbox.rnmbx.utils.Logger
18
+ import com.rnmapbox.rnmbx.utils.ViewTagResolver
14
19
  import com.rnmapbox.rnmbx.utils.extensions.toCoordinate
15
20
  import com.rnmapbox.rnmbx.utils.extensions.toScreenCoordinate
16
21
 
17
- class NativeMapViewModule(context: ReactApplicationContext) : NativeMapViewModuleSpec(context) {
18
- private fun withMapViewOnUIThread(viewRef: Double?, promise: Promise, fn: (RNMBXMapView) -> Unit) {
22
+ class NativeMapViewModule(context: ReactApplicationContext, val viewTagResolver: ViewTagResolver<RNMBXMapView>) : NativeMapViewModuleSpec(context) {
23
+ private fun withMapViewOnUIThread(
24
+ viewRef: Double?,
25
+ reject: Promise,
26
+ fn: (RNMBXMapView) -> Unit
27
+ ) {
19
28
  if (viewRef == null) {
20
- return
21
- }
22
-
23
- reactApplicationContext.runOnUiQueueThread {
24
- val manager = if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED)
25
- UIManagerHelper.getUIManager(reactApplicationContext, UIManagerType.FABRIC)
26
- else
27
- UIManagerHelper.getUIManager(reactApplicationContext, UIManagerType.DEFAULT)
28
-
29
- val view = manager?.resolveView(viewRef.toInt()) as? RNMBXMapView
30
-
31
- if (view != null) {
32
- fn(view)
33
- } else {
34
- promise.reject(Exception("cannot find map view for tag ${viewRef.toInt()}"))
35
- }
29
+ reject.reject(Exception("viewRef is null"))
30
+ } else {
31
+ viewTagResolver.withViewResolved(viewRef.toInt(), reject, fn)
36
32
  }
37
33
  }
38
34
 
@@ -7,9 +7,11 @@ import com.facebook.react.viewmanagers.RNMBXAndroidTextureMapViewManagerDelegate
7
7
  import com.facebook.react.viewmanagers.RNMBXAndroidTextureMapViewManagerInterface
8
8
  import com.facebook.react.viewmanagers.RNMBXMapViewManagerDelegate
9
9
  import com.mapbox.maps.MapInitOptions
10
+ import com.rnmapbox.rnmbx.utils.ViewTagResolver
10
11
 
11
- class RNMBXAndroidTextureMapViewManager(context: ReactApplicationContext) : RNMBXMapViewManager(
12
- context
12
+ class RNMBXAndroidTextureMapViewManager(context: ReactApplicationContext, viewTagResolver: ViewTagResolver<RNMBXMapView>) : RNMBXMapViewManager(
13
+ context,
14
+ viewTagResolver
13
15
  ), RNMBXAndroidTextureMapViewManagerInterface<RNMBXMapView> {
14
16
  private val mDelegate: ViewManagerDelegate<RNMBXMapView>
15
17
 
@@ -4,6 +4,8 @@ import android.content.Context
4
4
  import android.graphics.BitmapFactory
5
5
  import android.graphics.PointF
6
6
  import android.graphics.RectF
7
+ import android.os.Handler
8
+ import android.os.Looper
7
9
  import android.util.Log
8
10
  import android.view.Gravity
9
11
  import android.view.View
@@ -102,6 +104,10 @@ interface RNMBXLifeCycleOwner : LifecycleOwner {
102
104
  fun handleLifecycleEvent(event: Lifecycle.Event)
103
105
  }
104
106
 
107
+ fun interface Cancelable {
108
+ fun cancel()
109
+ }
110
+
105
111
  class RNMBXLifeCycle {
106
112
  private var lifecycleOwner : RNMBXLifeCycleOwner? = null
107
113
 
@@ -150,6 +156,25 @@ class RNMBXLifeCycle {
150
156
  fun getState() : Lifecycle.State {
151
157
  return lifecycleOwner?.lifecycle?.currentState ?: Lifecycle.State.INITIALIZED;
152
158
  }
159
+
160
+ var attachedToWindowWaiters : MutableList<()-> Unit> = mutableListOf()
161
+
162
+ fun callIfAttachedToWindow(callback: () -> Unit) : com.rnmapbox.rnmbx.components.mapview.Cancelable {
163
+ if (getState() == Lifecycle.State.STARTED) {
164
+ callback()
165
+ return com.rnmapbox.rnmbx.components.mapview.Cancelable {}
166
+ } else {
167
+ attachedToWindowWaiters.add(callback)
168
+ return com.rnmapbox.rnmbx.components.mapview.Cancelable {
169
+ attachedToWindowWaiters.removeIf { it === callback }
170
+ }
171
+ }
172
+ }
173
+
174
+ fun afterAttachFromLooper() {
175
+ attachedToWindowWaiters.forEach { it() }
176
+ attachedToWindowWaiters.clear()
177
+ }
153
178
  }
154
179
 
155
180
  data class FeatureEntry(val feature: AbstractMapFeature?, val view: View?, var addedToMap: Boolean = false) {
@@ -215,6 +240,11 @@ open class RNMBXMapView(private val mContext: Context, var mManager: RNMBXMapVie
215
240
  return mapView.getMapboxMap()
216
241
  }
217
242
 
243
+ override fun setId(id: Int) {
244
+ super.setId(id)
245
+ mManager.tagAssigned(id)
246
+ }
247
+
218
248
  val pointAnnotationManager: PointAnnotationManager?
219
249
  get() {
220
250
  if (mPointAnnotationManager == null) {
@@ -438,6 +468,8 @@ open class RNMBXMapView(private val mContext: Context, var mManager: RNMBXMapVie
438
468
  feature = childView
439
469
  } else if (childView is RCTLayer<*>) {
440
470
  feature = childView as AbstractMapFeature?
471
+ } else if (childView is AbstractMapFeature) {
472
+ feature = childView as AbstractMapFeature
441
473
  } else if (childView is ViewGroup) {
442
474
  val children = childView
443
475
  Logger.w(LOG_TAG, "Adding non map components as a child of a map is deprecated!")
@@ -448,7 +480,6 @@ open class RNMBXMapView(private val mContext: Context, var mManager: RNMBXMapVie
448
480
 
449
481
  val addToMap = styleLoaded
450
482
 
451
-
452
483
  var entry = FeatureEntry(feature, childView, false)
453
484
  if (addToMap) {
454
485
  feature?.addToMap(this)
@@ -1412,6 +1443,13 @@ open class RNMBXMapView(private val mContext: Context, var mManager: RNMBXMapVie
1412
1443
  override fun onAttachedToWindow() {
1413
1444
  lifecycle.onAttachedToWindow(this)
1414
1445
  super.onAttachedToWindow()
1446
+ Handler(Looper.getMainLooper()).post {
1447
+ lifecycle.afterAttachFromLooper()
1448
+ }
1449
+ }
1450
+
1451
+ fun callIfAttachedToWindow(callback: () -> Unit) {
1452
+ lifecycle.callIfAttachedToWindow(callback)
1415
1453
  }
1416
1454
 
1417
1455
  override fun onLayoutChange(
@@ -22,6 +22,7 @@ import com.rnmapbox.rnmbx.events.AndroidCallbackEvent
22
22
  import com.rnmapbox.rnmbx.utils.ConvertUtils
23
23
  import com.rnmapbox.rnmbx.utils.ExpressionParser
24
24
  import com.rnmapbox.rnmbx.utils.Logger
25
+ import com.rnmapbox.rnmbx.utils.ViewTagResolver
25
26
  import com.rnmapbox.rnmbx.utils.extensions.toCoordinate
26
27
  import com.rnmapbox.rnmbx.utils.extensions.toRectF
27
28
  import com.rnmapbox.rnmbx.utils.extensions.toScreenCoordinate
@@ -46,7 +47,7 @@ interface CommandResponse {
46
47
  fun error(message: String)
47
48
  }
48
49
 
49
- open class RNMBXMapViewManager(context: ReactApplicationContext) :
50
+ open class RNMBXMapViewManager(context: ReactApplicationContext, val viewTagResolver: ViewTagResolver<RNMBXMapView>) :
50
51
  AbstractEventEmitter<RNMBXMapView>(context), RNMBXMapViewManagerInterface<RNMBXMapView> {
51
52
  private val mViews: MutableMap<Int, RNMBXMapView>
52
53
 
@@ -107,6 +108,9 @@ open class RNMBXMapViewManager(context: ReactApplicationContext) :
107
108
 
108
109
  override fun onDropViewInstance(mapView: RNMBXMapView) {
109
110
  val reactTag = mapView.id
111
+
112
+ viewTagResolver.viewRemoved(reactTag)
113
+
110
114
  if (mViews.containsKey(reactTag)) {
111
115
  mViews.remove(reactTag)
112
116
  }
@@ -118,6 +122,10 @@ open class RNMBXMapViewManager(context: ReactApplicationContext) :
118
122
  return mViews[reactTag]
119
123
  }
120
124
 
125
+ fun tagAssigned(reactTag: Int) {
126
+ return viewTagResolver.tagAssigned(reactTag)
127
+ }
128
+
121
129
  // region React Props
122
130
  @ReactProp(name = "projection")
123
131
  override fun setProjection(mapView: RNMBXMapView, projection: String?) {
@@ -0,0 +1,37 @@
1
+ package com.rnmapbox.rnmbx.components.styles
2
+
3
+ import android.content.Context
4
+ import android.view.ViewGroup
5
+ import com.mapbox.bindgen.Value
6
+ import com.rnmapbox.rnmbx.components.AbstractMapFeature
7
+ import com.rnmapbox.rnmbx.components.mapview.RNMBXMapView
8
+
9
+ import com.rnmapbox.rnmbx.v11compat.style.*
10
+
11
+ class RNMBXStyleImport(context: Context) : AbstractMapFeature(context) {
12
+ var id: String? = null;
13
+
14
+ var config: HashMap<String, Value> = hashMapOf()
15
+ set(value: HashMap<String, Value>) {
16
+ field = value
17
+ if (mMapView != null) { updateConfig() }
18
+ }
19
+
20
+ override fun addToMap(mapView: RNMBXMapView) {
21
+ super.addToMap(mapView)
22
+ updateConfig()
23
+ }
24
+
25
+ fun updateConfig() {
26
+ withMapView {mapView ->
27
+ id?.let { id ->
28
+ val config = this.config
29
+ if (config.isNotEmpty()) {
30
+ mapView.mapView.getMapboxMap().getStyle()
31
+ ?.setStyleImportConfigProperties(id, config)
32
+ }
33
+ }
34
+ }
35
+
36
+ }
37
+ }
@@ -0,0 +1,57 @@
1
+ package com.rnmapbox.rnmbx.components.styles
2
+
3
+ import com.facebook.react.bridge.Dynamic
4
+ import com.facebook.react.bridge.ReactApplicationContext
5
+ import com.facebook.react.bridge.ReadableMap
6
+ import com.facebook.react.bridge.ReadableType
7
+ import com.facebook.react.common.MapBuilder
8
+ import com.facebook.react.uimanager.ThemedReactContext
9
+ import com.facebook.react.uimanager.annotations.ReactProp
10
+ import com.facebook.react.viewmanagers.RNMBXStyleImportManagerInterface
11
+ import com.rnmapbox.rnmbx.components.AbstractEventEmitter
12
+ import com.rnmapbox.rnmbx.components.mapview.RNMBXMapView
13
+ import com.mapbox.bindgen.Value
14
+ import com.rnmapbox.rnmbx.utils.Logger
15
+ import com.rnmapbox.rnmbx.utils.extensions.toValueHashMap
16
+ import org.json.JSONObject
17
+
18
+ class RNMBXStyleImportManager(context: ReactApplicationContext) :
19
+ AbstractEventEmitter<RNMBXStyleImport>(context),
20
+ RNMBXStyleImportManagerInterface<RNMBXStyleImport> {
21
+ override fun customEvents(): Map<String, String>? {
22
+ return MapBuilder.builder<String, String>().build()
23
+ }
24
+
25
+ override fun getName(): String {
26
+ return REACT_CLASS
27
+ }
28
+
29
+ override fun createViewInstance(context: ThemedReactContext): RNMBXStyleImport {
30
+ return RNMBXStyleImport(context)
31
+ }
32
+
33
+ companion object {
34
+ const val REACT_CLASS = "RNMBXStyleImport"
35
+ }
36
+
37
+ @ReactProp(name = "id")
38
+ override fun setId(view: RNMBXStyleImport, value: String?) {
39
+ if (value != null) {
40
+ view.id = value
41
+ }
42
+ }
43
+
44
+ @ReactProp(name = "existing")
45
+ override fun setExisting(view: RNMBXStyleImport, value: Boolean) {
46
+
47
+ }
48
+
49
+ @ReactProp(name = "config")
50
+ override fun setConfig(view: RNMBXStyleImport, value: Dynamic) {
51
+ if (value.type != ReadableType.Map) {
52
+ Logger.e(REACT_CLASS, "config expected Map but received: ${value.type}")
53
+ } else {
54
+ view.config = value.asMap().toValueHashMap()
55
+ }
56
+ }
57
+ }
@@ -169,12 +169,12 @@ class RNMBXStyleValue(config: ReadableMap) {
169
169
  config.getMap("enablePlacementTransitions")!!.getBoolean("value")
170
170
  }
171
171
  var duration = 300
172
- val delay = 0
172
+ var delay = 0
173
173
  if (config.hasKey("duration") && ReadableType.Map == config.getType("duration")) {
174
174
  duration = config.getMap("duration")!!.getInt("value")
175
175
  }
176
176
  if (config.hasKey("delay") && ReadableType.Map == config.getType("delay")) {
177
- duration = config.getMap("delay")!!.getInt("value")
177
+ delay = config.getMap("delay")!!.getInt("value")
178
178
  }
179
179
  return Builder().duration(duration.toLong()).delay(delay.toLong()).build()
180
180
  }
@@ -0,0 +1,68 @@
1
+ package com.rnmapbox.rnmbx.utils
2
+
3
+ import com.facebook.react.bridge.Promise
4
+ import com.facebook.react.bridge.ReactApplicationContext
5
+ import com.facebook.react.bridge.UIManager
6
+ import com.facebook.react.uimanager.IllegalViewOperationException
7
+ import com.facebook.react.uimanager.UIManagerHelper
8
+ import com.facebook.react.uimanager.common.UIManagerType
9
+ import com.rnmapbox.rnmbx.BuildConfig
10
+
11
+ data class ViewTagWaiter<V>(
12
+ val fn: (V) -> Unit,
13
+ val reject: Promise?
14
+ )
15
+
16
+ // see https://github.com/rnmapbox/maps/pull/3074
17
+ open class ViewTagResolver<V>(val context: ReactApplicationContext) {
18
+ private val createdViews: HashSet<Int> = hashSetOf<Int>()
19
+ private val viewWaiters: HashMap<Int, MutableList<ViewTagWaiter<V>>> = hashMapOf()
20
+
21
+ // to be called from view.setId
22
+ fun tagAssigned(viewTag: Int) {
23
+ createdViews.add(viewTag)
24
+
25
+ val list = viewWaiters[viewTag]
26
+ if (list != null) {
27
+ context.runOnUiQueueThread {
28
+ try {
29
+ val view = manager.resolveView(viewTag) as V
30
+
31
+ list.forEach { it.fn(view) }
32
+ } catch (err: IllegalViewOperationException) {
33
+ list.forEach { it.reject?.reject(err) }
34
+ }
35
+ viewWaiters.remove(viewTag)
36
+ }
37
+ }
38
+ }
39
+
40
+ fun viewRemoved(viewTag: Int) {
41
+ viewWaiters.remove(viewTag)
42
+ createdViews.remove(viewTag)
43
+ }
44
+
45
+ private val manager : UIManager
46
+ get() =
47
+ if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
48
+ UIManagerHelper.getUIManager(context, UIManagerType.FABRIC)!!
49
+ } else {
50
+ UIManagerHelper.getUIManager(context, UIManagerType.DEFAULT)!!
51
+ }
52
+
53
+ // calls on UiQueueThread with resolved view
54
+ fun withViewResolved(viewTag: Int, reject: Promise? = null, fn: (V) -> Unit) {
55
+ context.runOnUiQueueThread() {
56
+ try {
57
+ val view = manager.resolveView(viewTag) as V
58
+ fn(view)
59
+ } catch (err: IllegalViewOperationException) {
60
+ if (!createdViews.contains(viewTag)) {
61
+ viewWaiters.getOrPut(viewTag) { mutableListOf<ViewTagWaiter<V>>() }.add(ViewTagWaiter(fn, reject))
62
+ } else {
63
+ reject?.reject(err)
64
+ }
65
+ }
66
+ }
67
+ }
68
+ }
@@ -0,0 +1,57 @@
1
+ package com.rnmapbox.rnmbx.utils.extensions
2
+
3
+ import com.facebook.react.bridge.Dynamic;
4
+ import com.facebook.react.bridge.ReadableArray
5
+ import com.facebook.react.bridge.ReadableMap
6
+ import com.facebook.react.bridge.ReadableType
7
+ import com.mapbox.bindgen.Value
8
+
9
+ fun ReadableMap.toValueHashMap(): HashMap<String, Value> {
10
+ var result = hashMapOf<String, Value>()
11
+ var iterator = keySetIterator()
12
+ while (iterator.hasNextKey()) {
13
+ val i = iterator.nextKey()
14
+
15
+ result[i] = when (getType(i)) {
16
+ ReadableType.Null -> Value.nullValue()
17
+ ReadableType.Boolean -> Value.valueOf(getBoolean(i))
18
+ ReadableType.Number -> Value.valueOf(getDouble(i))
19
+ ReadableType.String -> Value.valueOf(getString(i)!!)
20
+ ReadableType.Array -> getArray(i)!!.toValue()
21
+ ReadableType.Map -> getMap(i)!!.toValue()
22
+ }
23
+ }
24
+ return result
25
+ }
26
+
27
+ fun ReadableMap.toValue() : Value {
28
+ return Value.valueOf(toValueHashMap())
29
+ }
30
+
31
+ fun ReadableArray.toValue(): Value {
32
+ var result = ArrayList<Value>(size())
33
+
34
+ for (i in 0 until size()) {
35
+ result.add(
36
+ when (getType(i)) {
37
+ ReadableType.Null -> Value.nullValue()
38
+ ReadableType.Boolean -> Value.valueOf(getBoolean(i))
39
+ ReadableType.Number -> Value.valueOf(getDouble(i))
40
+ ReadableType.String -> Value.valueOf(getString(i))
41
+ ReadableType.Array -> getArray(i).toValue()
42
+ ReadableType.Map -> getMap(i).toValue()
43
+ })
44
+ }
45
+ return Value.valueOf(result)
46
+ }
47
+
48
+ fun Dynamic.toValue(): Value {
49
+ return when (type) {
50
+ ReadableType.Null -> Value.nullValue()
51
+ ReadableType.Boolean -> Value.valueOf(asBoolean())
52
+ ReadableType.Number -> Value.valueOf(asDouble())
53
+ ReadableType.String -> Value.valueOf(asString())
54
+ ReadableType.Array -> asArray().toValue()
55
+ ReadableType.Map -> asMap().toValue()
56
+ }
57
+ }
@@ -0,0 +1,9 @@
1
+ package com.rnmapbox.rnmbx.v11compat.style;
2
+
3
+ import com.mapbox.bindgen.Value
4
+ import com.mapbox.maps.Style
5
+ import com.rnmapbox.rnmbx.utils.Logger
6
+
7
+ fun Style?.setStyleImportConfigProperties(id: String, config: HashMap<String, Value>) {
8
+ Logger.w("RNBMXStyleImport", "Style imports only supported on mapbox v11")
9
+ }
@@ -0,0 +1,2 @@
1
+ package com.rnmapbox.rnmbx.v11compat.style;
2
+
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
3
  *
4
- * This file should be updated after modifying `RNMBXAndroidTextureMapViewNativeComponent.ts`.
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
5
6
  *
6
7
  * @generated by codegen project: GeneratePropsJavaDelegate.js
7
8
  */