react-native-map4d-map-dtqg 0.1.4 → 0.1.6

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 (217) hide show
  1. package/README.md +58 -0
  2. package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
  3. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  4. package/android/.gradle/buildOutputCleanup/cache.properties +2 -2
  5. package/android/build.gradle +23 -2
  6. package/android/src/main/java/com/reactnativemap4dmap/Map4dMapModule.java +39 -27
  7. package/ios/Map4dMap.h +12 -3
  8. package/ios/Map4dMap.m +108 -3
  9. package/ios/Map4dMapTurbo.mm +16 -0
  10. package/ios/RMFCircleManager.m +40 -68
  11. package/ios/RMFDirectionsRendererManager.m +26 -24
  12. package/ios/RMFMapViewManager.m +64 -149
  13. package/ios/RMFMarkerManager.m +36 -64
  14. package/ios/RMFPOIManager.m +40 -74
  15. package/ios/RMFPolygonManager.m +38 -60
  16. package/ios/RMFPolylineManager.m +36 -58
  17. package/ios/building/RMFBuildingManager.m +36 -64
  18. package/lib/commonjs/components/MFBanDoSo/constants.js +30 -0
  19. package/lib/commonjs/components/MFBanDoSo/constants.js.map +1 -0
  20. package/lib/commonjs/components/MFBanDoSo/helpers.js +200 -0
  21. package/lib/commonjs/components/MFBanDoSo/helpers.js.map +1 -0
  22. package/lib/commonjs/components/MFBanDoSo/propTypes.js +18 -0
  23. package/lib/commonjs/components/MFBanDoSo/propTypes.js.map +1 -0
  24. package/lib/commonjs/components/MFBanDoSo/styles.js +334 -0
  25. package/lib/commonjs/components/MFBanDoSo/styles.js.map +1 -0
  26. package/lib/commonjs/components/MFBanDoSo/ui.js +231 -0
  27. package/lib/commonjs/components/MFBanDoSo/ui.js.map +1 -0
  28. package/lib/commonjs/components/MFBanDoSo.js +201 -73
  29. package/lib/commonjs/components/MFBanDoSo.js.map +1 -1
  30. package/lib/commonjs/components/MFBuilding.js +15 -90
  31. package/lib/commonjs/components/MFBuilding.js.map +1 -1
  32. package/lib/commonjs/components/MFCircle.js +20 -88
  33. package/lib/commonjs/components/MFCircle.js.map +1 -1
  34. package/lib/commonjs/components/MFDirectionsRenderer.js +15 -93
  35. package/lib/commonjs/components/MFDirectionsRenderer.js.map +1 -1
  36. package/lib/commonjs/components/MFMapView.js +50 -147
  37. package/lib/commonjs/components/MFMapView.js.map +1 -1
  38. package/lib/commonjs/components/MFMarker.js +15 -101
  39. package/lib/commonjs/components/MFMarker.js.map +1 -1
  40. package/lib/commonjs/components/MFPOI.js +17 -92
  41. package/lib/commonjs/components/MFPOI.js.map +1 -1
  42. package/lib/commonjs/components/MFPolygon.js +15 -87
  43. package/lib/commonjs/components/MFPolygon.js.map +1 -1
  44. package/lib/commonjs/components/MFPolyline.js +17 -87
  45. package/lib/commonjs/components/MFPolyline.js.map +1 -1
  46. package/lib/commonjs/components/MFTileOverlay.js +7 -15
  47. package/lib/commonjs/components/MFTileOverlay.js.map +1 -1
  48. package/lib/commonjs/components/Map4dMapView.js +1 -4
  49. package/lib/commonjs/components/Map4dMapView.js.map +1 -1
  50. package/lib/commonjs/components/extends/AreaFocusManager.js +4 -38
  51. package/lib/commonjs/components/extends/AreaFocusManager.js.map +1 -1
  52. package/lib/commonjs/components/extends/AreaFocuser.js +1 -17
  53. package/lib/commonjs/components/extends/AreaFocuser.js.map +1 -1
  54. package/lib/commonjs/components/extends/BoundHelper.js +0 -6
  55. package/lib/commonjs/components/extends/BoundHelper.js.map +1 -1
  56. package/lib/commonjs/components/extends/area/AreaFocusAreas.js +0 -37
  57. package/lib/commonjs/components/extends/area/AreaFocusAreas.js.map +1 -1
  58. package/lib/commonjs/components/extends/area/AreaFocusGeometryUtils.js +1 -35
  59. package/lib/commonjs/components/extends/area/AreaFocusGeometryUtils.js.map +1 -1
  60. package/lib/commonjs/components/extends/area/AreaFocusSession.js +0 -18
  61. package/lib/commonjs/components/extends/area/AreaFocusSession.js.map +1 -1
  62. package/lib/commonjs/components/extends/area/AreaFocusTypes.js +2 -3
  63. package/lib/commonjs/components/extends/area/AreaFocusTypes.js.map +1 -1
  64. package/lib/commonjs/components/internal/DefaultRoadmapStyle.js +1 -2
  65. package/lib/commonjs/components/internal/DefaultRoadmapStyle.js.map +1 -1
  66. package/lib/commonjs/components/internal/GeojsonStyleUtils.js +20 -31
  67. package/lib/commonjs/components/internal/GeojsonStyleUtils.js.map +1 -1
  68. package/lib/commonjs/index.js +0 -11
  69. package/lib/commonjs/index.js.map +1 -1
  70. package/lib/commonjs/native/Map4dMapNativeModule.js +10 -0
  71. package/lib/commonjs/native/Map4dMapNativeModule.js.map +1 -0
  72. package/lib/commonjs/native/NativeModuleResolver.js +35 -0
  73. package/lib/commonjs/native/NativeModuleResolver.js.map +1 -0
  74. package/lib/commonjs/native/ViewManagerCommand.js +67 -0
  75. package/lib/commonjs/native/ViewManagerCommand.js.map +1 -0
  76. package/lib/commonjs/package.json +1 -0
  77. package/lib/commonjs/specs/NativeMap4dMap.js +9 -0
  78. package/lib/commonjs/specs/NativeMap4dMap.js.map +1 -0
  79. package/lib/module/components/MFBanDoSo/constants.js +25 -0
  80. package/lib/module/components/MFBanDoSo/constants.js.map +1 -0
  81. package/lib/module/components/MFBanDoSo/helpers.js +188 -0
  82. package/lib/module/components/MFBanDoSo/helpers.js.map +1 -0
  83. package/lib/module/components/MFBanDoSo/propTypes.js +14 -0
  84. package/lib/module/components/MFBanDoSo/propTypes.js.map +1 -0
  85. package/lib/module/components/MFBanDoSo/styles.js +332 -0
  86. package/lib/module/components/MFBanDoSo/styles.js.map +1 -0
  87. package/lib/module/components/MFBanDoSo/ui.js +224 -0
  88. package/lib/module/components/MFBanDoSo/ui.js.map +1 -0
  89. package/lib/module/components/MFBanDoSo.js +203 -63
  90. package/lib/module/components/MFBanDoSo.js.map +1 -1
  91. package/lib/module/components/MFBuilding.js +17 -82
  92. package/lib/module/components/MFBuilding.js.map +1 -1
  93. package/lib/module/components/MFCircle.js +22 -80
  94. package/lib/module/components/MFCircle.js.map +1 -1
  95. package/lib/module/components/MFDirectionsRenderer.js +16 -85
  96. package/lib/module/components/MFDirectionsRenderer.js.map +1 -1
  97. package/lib/module/components/MFMapView.js +51 -136
  98. package/lib/module/components/MFMapView.js.map +1 -1
  99. package/lib/module/components/MFMarker.js +17 -92
  100. package/lib/module/components/MFMarker.js.map +1 -1
  101. package/lib/module/components/MFPOI.js +19 -84
  102. package/lib/module/components/MFPOI.js.map +1 -1
  103. package/lib/module/components/MFPolygon.js +17 -79
  104. package/lib/module/components/MFPolygon.js.map +1 -1
  105. package/lib/module/components/MFPolyline.js +19 -79
  106. package/lib/module/components/MFPolyline.js.map +1 -1
  107. package/lib/module/components/MFTileOverlay.js +10 -9
  108. package/lib/module/components/MFTileOverlay.js.map +1 -1
  109. package/lib/module/components/Map4dMapView.js +2 -0
  110. package/lib/module/components/Map4dMapView.js.map +1 -1
  111. package/lib/module/components/extends/AreaFocusManager.js +6 -32
  112. package/lib/module/components/extends/AreaFocusManager.js.map +1 -1
  113. package/lib/module/components/extends/AreaFocuser.js +3 -15
  114. package/lib/module/components/extends/AreaFocuser.js.map +1 -1
  115. package/lib/module/components/extends/BoundHelper.js +2 -5
  116. package/lib/module/components/extends/BoundHelper.js.map +1 -1
  117. package/lib/module/components/extends/area/AreaFocusAreas.js +2 -33
  118. package/lib/module/components/extends/area/AreaFocusAreas.js.map +1 -1
  119. package/lib/module/components/extends/area/AreaFocusGeometryUtils.js +2 -32
  120. package/lib/module/components/extends/area/AreaFocusGeometryUtils.js.map +1 -1
  121. package/lib/module/components/extends/area/AreaFocusSession.js +2 -17
  122. package/lib/module/components/extends/area/AreaFocusSession.js.map +1 -1
  123. package/lib/module/components/extends/area/AreaFocusTypes.js +3 -0
  124. package/lib/module/components/extends/area/AreaFocusTypes.js.map +1 -1
  125. package/lib/module/components/internal/DefaultRoadmapStyle.js +2 -0
  126. package/lib/module/components/internal/DefaultRoadmapStyle.js.map +1 -1
  127. package/lib/module/components/internal/GeojsonStyleUtils.js +21 -28
  128. package/lib/module/components/internal/GeojsonStyleUtils.js.map +1 -1
  129. package/lib/module/index.js +2 -0
  130. package/lib/module/index.js.map +1 -1
  131. package/lib/module/native/Map4dMapNativeModule.js +5 -0
  132. package/lib/module/native/Map4dMapNativeModule.js.map +1 -0
  133. package/lib/module/native/NativeModuleResolver.js +29 -0
  134. package/lib/module/native/NativeModuleResolver.js.map +1 -0
  135. package/lib/module/native/ViewManagerCommand.js +61 -0
  136. package/lib/module/native/ViewManagerCommand.js.map +1 -0
  137. package/lib/module/specs/NativeMap4dMap.js +5 -0
  138. package/lib/module/specs/NativeMap4dMap.js.map +1 -0
  139. package/lib/typescript/components/MFBanDoSo/constants.d.ts +11 -0
  140. package/lib/typescript/components/MFBanDoSo/constants.d.ts.map +1 -0
  141. package/lib/typescript/components/MFBanDoSo/helpers.d.ts +14 -0
  142. package/lib/typescript/components/MFBanDoSo/helpers.d.ts.map +1 -0
  143. package/lib/typescript/components/MFBanDoSo/propTypes.d.ts +2 -0
  144. package/lib/typescript/components/MFBanDoSo/propTypes.d.ts.map +1 -0
  145. package/lib/typescript/components/MFBanDoSo/styles.d.ts +336 -0
  146. package/lib/typescript/components/MFBanDoSo/styles.d.ts.map +1 -0
  147. package/lib/typescript/components/MFBanDoSo/ui.d.ts +32 -0
  148. package/lib/typescript/components/MFBanDoSo/ui.d.ts.map +1 -0
  149. package/lib/typescript/components/MFBanDoSo.d.ts +38 -0
  150. package/lib/typescript/components/MFBanDoSo.d.ts.map +1 -0
  151. package/lib/typescript/components/MFBuilding.d.ts +24 -0
  152. package/lib/typescript/components/MFBuilding.d.ts.map +1 -0
  153. package/lib/typescript/components/MFCircle.d.ts +24 -0
  154. package/lib/typescript/components/MFCircle.d.ts.map +1 -0
  155. package/lib/typescript/components/MFDirectionsRenderer.d.ts +19 -0
  156. package/lib/typescript/components/MFDirectionsRenderer.d.ts.map +1 -0
  157. package/lib/typescript/components/MFMapView.d.ts +66 -0
  158. package/lib/typescript/components/MFMapView.d.ts.map +1 -0
  159. package/lib/typescript/components/MFMarker.d.ts +26 -0
  160. package/lib/typescript/components/MFMarker.d.ts.map +1 -0
  161. package/lib/typescript/components/MFPOI.d.ts +24 -0
  162. package/lib/typescript/components/MFPOI.d.ts.map +1 -0
  163. package/lib/typescript/components/MFPolygon.d.ts +24 -0
  164. package/lib/typescript/components/MFPolygon.d.ts.map +1 -0
  165. package/lib/typescript/components/MFPolyline.d.ts +24 -0
  166. package/lib/typescript/components/MFPolyline.d.ts.map +1 -0
  167. package/lib/typescript/components/MFTileOverlay.d.ts +12 -0
  168. package/lib/typescript/components/MFTileOverlay.d.ts.map +1 -0
  169. package/lib/typescript/components/Map4dMapView.d.ts +8 -7
  170. package/lib/typescript/components/Map4dMapView.d.ts.map +1 -0
  171. package/lib/typescript/components/extends/AreaFocusManager.d.ts +34 -0
  172. package/lib/typescript/components/extends/AreaFocusManager.d.ts.map +1 -0
  173. package/lib/typescript/components/extends/AreaFocuser.d.ts +15 -0
  174. package/lib/typescript/components/extends/AreaFocuser.d.ts.map +1 -0
  175. package/lib/typescript/components/extends/BoundHelper.d.ts +11 -0
  176. package/lib/typescript/components/extends/BoundHelper.d.ts.map +1 -0
  177. package/lib/typescript/components/extends/area/AreaFocusAreas.d.ts +58 -0
  178. package/lib/typescript/components/extends/area/AreaFocusAreas.d.ts.map +1 -0
  179. package/lib/typescript/components/extends/area/AreaFocusGeometryUtils.d.ts +19 -0
  180. package/lib/typescript/components/extends/area/AreaFocusGeometryUtils.d.ts.map +1 -0
  181. package/lib/typescript/components/extends/area/AreaFocusSession.d.ts +14 -0
  182. package/lib/typescript/components/extends/area/AreaFocusSession.d.ts.map +1 -0
  183. package/lib/typescript/components/extends/area/AreaFocusTypes.d.ts +40 -0
  184. package/lib/typescript/components/extends/area/AreaFocusTypes.d.ts.map +1 -0
  185. package/lib/typescript/components/internal/DefaultRoadmapStyle.d.ts +820 -0
  186. package/lib/typescript/components/internal/DefaultRoadmapStyle.d.ts.map +1 -0
  187. package/lib/typescript/components/internal/GeojsonStyleUtils.d.ts +3 -0
  188. package/lib/typescript/components/internal/GeojsonStyleUtils.d.ts.map +1 -0
  189. package/lib/typescript/index.d.ts +13 -0
  190. package/lib/typescript/index.d.ts.map +1 -0
  191. package/lib/typescript/native/Map4dMapNativeModule.d.ts +2 -0
  192. package/lib/typescript/native/Map4dMapNativeModule.d.ts.map +1 -0
  193. package/lib/typescript/native/NativeModuleResolver.d.ts +3 -0
  194. package/lib/typescript/native/NativeModuleResolver.d.ts.map +1 -0
  195. package/lib/typescript/native/ViewManagerCommand.d.ts +11 -0
  196. package/lib/typescript/native/ViewManagerCommand.d.ts.map +1 -0
  197. package/package.json +27 -11
  198. package/src/components/MFBanDoSo/constants.js +38 -0
  199. package/src/components/MFBanDoSo/helpers.js +273 -0
  200. package/src/components/MFBanDoSo/propTypes.js +14 -0
  201. package/src/components/MFBanDoSo/styles.js +323 -0
  202. package/src/components/MFBanDoSo/ui.js +261 -0
  203. package/src/components/MFBanDoSo.js +280 -78
  204. package/src/components/MFBuilding.js +8 -48
  205. package/src/components/MFCircle.js +8 -48
  206. package/src/components/MFDirectionsRenderer.js +8 -47
  207. package/src/components/MFMapView.js +31 -53
  208. package/src/components/MFMarker.js +9 -50
  209. package/src/components/MFPOI.js +8 -48
  210. package/src/components/MFPolygon.js +8 -48
  211. package/src/components/MFPolyline.js +8 -48
  212. package/src/components/internal/GeojsonStyleUtils.js +3 -0
  213. package/src/native/Map4dMapNativeModule.js +3 -0
  214. package/src/native/NativeModuleResolver.js +33 -0
  215. package/src/native/ViewManagerCommand.js +82 -0
  216. package/src/specs/NativeMap4dMap.js +12 -0
  217. package/ios/Map4dMapViewManager.m +0 -34
package/README.md CHANGED
@@ -8,6 +8,18 @@ Map4dMap DTQG SDK for React Native
8
8
  npm install react-native-map4d-map-dtqg
9
9
  ```
10
10
 
11
+ ## TurboModule compatibility
12
+
13
+ This library supports React Native New Architecture module resolution for `Map4dMap` by using `TurboModuleRegistry` with automatic fallback to `NativeModules`.
14
+
15
+ The package now also includes a TurboModule codegen spec (`src/specs/NativeMap4dMap.js`) and `codegenConfig` in `package.json` so React Native apps can generate module bindings in New Architecture builds.
16
+
17
+ What this means:
18
+ - On React Native apps with New Architecture enabled, map native module lookup works with TurboModule resolution.
19
+ - On older React Native versions, the library keeps using legacy bridge resolution.
20
+ - No public JavaScript API changes are required for existing apps.
21
+ - Native `Map4dMap` APIs (`getCamera`, `getBounds`, `getMyLocation`, `pointForCoordinate`, `coordinateForPoint`, `cameraForBounds`) are implemented in both Android and iOS modules to align with the TurboModule spec.
22
+
11
23
  ## Usage
12
24
 
13
25
  ```javascript
@@ -131,3 +143,49 @@ Examples:
131
143
  - `focusArea({ type: 'freeTradeZone', id: 10 })`
132
144
  - `focusArea({ type: IndustrialEconomicType.NON_TARIFF_ZONE, id: 11 })`
133
145
  - `clearFocusedArea()` to clear current focus
146
+
147
+ ## MFBanDoSo usage
148
+
149
+ `MFBanDoSo` extends `MFMapView`. It fetches a category config from a fixed internal URL, lets the user toggle which categories are shown, and syncs the resulting GeoJSON style to the map against a fixed internal vector tile source. Both URLs are internal to the SDK (only the `/staging` path segment can be toggled via `isStaging`) and are not otherwise configurable via props. It renders its own layer-selector and legend UI on top of the map — there is no prop to disable or reposition this UI.
150
+
151
+ ```javascript
152
+ import {MFBanDoSo} from 'react-native-map4d-map-dtqg';
153
+ import React from 'react';
154
+ import {SafeAreaView, StyleSheet} from 'react-native';
155
+
156
+ const INITIAL_CAMERA = {
157
+ center: {latitude: 16.157436, longitude: 106.243699},
158
+ zoom: 6,
159
+ bearing: 0,
160
+ tilt: 0,
161
+ };
162
+
163
+ function App() {
164
+ const onDataSourceFeaturePress = async (e) => {
165
+ console.log('Press Data Source Feature:', e.nativeEvent);
166
+ };
167
+
168
+ return (
169
+ <SafeAreaView style={styles.safeView}>
170
+ <MFBanDoSo
171
+ style={styles.container}
172
+ camera={INITIAL_CAMERA}
173
+ mapType="roadmap"
174
+ onDataSourceFeaturePress={onDataSourceFeaturePress}
175
+ />
176
+ </SafeAreaView>
177
+ );
178
+ }
179
+
180
+ const styles = StyleSheet.create({
181
+ safeView: {flex: 1},
182
+ container: {flex: 1},
183
+ });
184
+
185
+ export default App;
186
+ ```
187
+
188
+ Props:
189
+ - `isStaging`: optional `boolean`, default `true`. Selects between the staging and production API for both the category config and vector tile source (toggles the `/staging` path segment on the fixed internal host). Pass `isStaging={false}` to use production.
190
+ - Otherwise no `MFBanDoSo`-specific props — the category config URL and vector tile source URL are fixed internally by the SDK.
191
+ - All `MFMapView` props (`camera`, `mapType`, `mapStyle`, `onDataSourceFeaturePress`, etc.) and children (e.g. `MFBuilding`, `MFMarker`) are supported the same way as on `MFMapView`.
@@ -1,2 +1,2 @@
1
- #Wed Jul 08 09:44:56 ICT 2026
2
- gradle.version=9.2.0
1
+ #Fri Jul 24 17:11:04 ICT 2026
2
+ gradle.version=8.9
@@ -11,17 +11,29 @@ buildscript {
11
11
  }
12
12
  }
13
13
 
14
+ def isNewArchitectureEnabled() {
15
+ // To opt-in for the New Architecture, you can either:
16
+ // - Set `newArchEnabled` to true inside the `gradle.properties` file
17
+ // - Invoke gradle with `-newArchEnabled=true`
18
+ // - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true`
19
+ return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true"
20
+ }
21
+
14
22
  apply plugin: 'com.android.library'
15
23
 
24
+ if (isNewArchitectureEnabled()) {
25
+ apply plugin: "com.facebook.react"
26
+ }
27
+
16
28
  def safeExtGet(prop, fallback) {
17
29
  rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
18
30
  }
19
31
 
20
32
  android {
21
- compileSdkVersion safeExtGet('Map4dMap_compileSdkVersion', 30)
33
+ compileSdkVersion safeExtGet('Map4dMap_compileSdkVersion', 33)
22
34
  defaultConfig {
23
35
  minSdkVersion safeExtGet('Map4dMap_minSdkVersion', 21)
24
- targetSdkVersion safeExtGet('Map4dMap_targetSdkVersion', 30)
36
+ targetSdkVersion safeExtGet('Map4dMap_targetSdkVersion', 33)
25
37
  versionCode 1
26
38
  versionName "1.0"
27
39
 
@@ -39,6 +51,15 @@ android {
39
51
  sourceCompatibility JavaVersion.VERSION_1_8
40
52
  targetCompatibility JavaVersion.VERSION_1_8
41
53
  }
54
+ sourceSets.main {
55
+ java {
56
+ if (isNewArchitectureEnabled()) {
57
+ srcDirs += [
58
+ "${project.buildDir}/generated/source/codegen/java"
59
+ ]
60
+ }
61
+ }
62
+ }
42
63
  }
43
64
 
44
65
  repositories {
@@ -5,10 +5,13 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule;
5
5
  import com.facebook.react.bridge.Promise;
6
6
  import com.facebook.react.bridge.ReactMethod;
7
7
  import com.facebook.react.bridge.ReadableMap;
8
+ import com.facebook.react.bridge.UIManager;
9
+ import com.facebook.react.bridge.UiThreadUtil;
8
10
  import com.facebook.react.bridge.WritableMap;
9
11
  import com.facebook.react.bridge.WritableNativeMap;
10
12
  import com.facebook.react.uimanager.NativeViewHierarchyManager;
11
13
  import com.facebook.react.uimanager.UIBlock;
14
+ import com.facebook.react.uimanager.UIManagerHelper;
12
15
  import com.facebook.react.uimanager.UIManagerModule;
13
16
 
14
17
  import android.view.View;
@@ -26,6 +29,8 @@ interface ResolveViewCallback {
26
29
 
27
30
  public class Map4dMapModule extends ReactContextBaseJavaModule {
28
31
 
32
+ public static final String NAME = "Map4dMap";
33
+
29
34
  private final ReactApplicationContext reactContext;
30
35
 
31
36
  public Map4dMapModule(ReactApplicationContext reactContext) {
@@ -35,14 +40,35 @@ public class Map4dMapModule extends ReactContextBaseJavaModule {
35
40
 
36
41
  @Override
37
42
  public String getName() {
38
- return "Map4dMap";
43
+ return NAME;
39
44
  }
40
45
 
41
46
  private void getView(final int tag, final ResolveViewCallback callback) {
42
47
  final ReactApplicationContext context = getReactApplicationContext();
43
48
 
44
- UIManagerModule uiManager = context.getNativeModule(UIManagerModule.class);
45
- uiManager.addUIBlock(new UIBlock()
49
+ final UIManager uiManager = UIManagerHelper.getUIManagerForReactTag(context, tag);
50
+ if (uiManager != null) {
51
+ UiThreadUtil.runOnUiThread(new Runnable() {
52
+ @Override
53
+ public void run() {
54
+ View view = uiManager.resolveView(tag);
55
+ if (view == null) {
56
+ Log.e(getName(), "View with tag: " + tag + " was not found");
57
+ }
58
+ callback.found(view);
59
+ }
60
+ });
61
+ return;
62
+ }
63
+
64
+ UIManagerModule legacyUIManager = context.getNativeModule(UIManagerModule.class);
65
+ if (legacyUIManager == null) {
66
+ Log.e(getName(), "Could not get UIManager to resolve tag: " + tag);
67
+ callback.found(null);
68
+ return;
69
+ }
70
+
71
+ legacyUIManager.addUIBlock(new UIBlock()
46
72
  {
47
73
  @Override
48
74
  public void execute(NativeViewHierarchyManager nvhm)
@@ -152,6 +178,7 @@ public class Map4dMapModule extends ReactContextBaseJavaModule {
152
178
  });
153
179
  }
154
180
 
181
+ @ReactMethod
155
182
  public void isMyLocationButtonEnabled(final int tag, final Promise promise) {
156
183
  getView(tag, new ResolveViewCallback(){
157
184
  @Override
@@ -167,20 +194,15 @@ public class Map4dMapModule extends ReactContextBaseJavaModule {
167
194
 
168
195
  @ReactMethod
169
196
  public void pointForCoordinate(final int tag, ReadableMap coordinate, final Promise promise) {
170
- final ReactApplicationContext context = getReactApplicationContext();
171
-
172
197
  final MFLocationCoordinate coord = new MFLocationCoordinate(
173
198
  coordinate.hasKey("latitude") ? coordinate.getDouble("latitude") : 0.0,
174
199
  coordinate.hasKey("longitude") ? coordinate.getDouble("longitude") : 0.0
175
200
  );
176
201
 
177
- UIManagerModule uiManager = context.getNativeModule(UIManagerModule.class);
178
- uiManager.addUIBlock(new UIBlock()
179
- {
202
+ getView(tag, new ResolveViewCallback() {
180
203
  @Override
181
- public void execute(NativeViewHierarchyManager nvhm)
182
- {
183
- RMFMapView mapView = (RMFMapView) nvhm.resolveView(tag);
204
+ public void found(View view) {
205
+ RMFMapView mapView = (RMFMapView) view;
184
206
  if (!validateMapView(mapView, promise)) {
185
207
  return;
186
208
  }
@@ -198,20 +220,15 @@ public class Map4dMapModule extends ReactContextBaseJavaModule {
198
220
 
199
221
  @ReactMethod
200
222
  public void coordinateForPoint(final int tag, ReadableMap point, final Promise promise) {
201
- final ReactApplicationContext context = getReactApplicationContext();
202
-
203
223
  final Point pt = new Point(
204
224
  point.hasKey("x") ? (int)(point.getDouble("x")) : 0,
205
225
  point.hasKey("y") ? (int)(point.getDouble("y")) : 0
206
226
  );
207
227
 
208
- UIManagerModule uiManager = context.getNativeModule(UIManagerModule.class);
209
- uiManager.addUIBlock(new UIBlock()
210
- {
228
+ getView(tag, new ResolveViewCallback() {
211
229
  @Override
212
- public void execute(NativeViewHierarchyManager nvhm)
213
- {
214
- RMFMapView mapView = (RMFMapView) nvhm.resolveView(tag);
230
+ public void found(View view) {
231
+ RMFMapView mapView = (RMFMapView) view;
215
232
  if (!validateMapView(mapView, promise)) {
216
233
  return;
217
234
  }
@@ -229,18 +246,13 @@ public class Map4dMapModule extends ReactContextBaseJavaModule {
229
246
 
230
247
  @ReactMethod
231
248
  public void cameraForBounds(final int tag, ReadableMap boundData, final Promise promise) {
232
- final ReactApplicationContext context = getReactApplicationContext();
233
- UIManagerModule uiManager = context.getNativeModule(UIManagerModule.class);
234
-
235
249
  final ReadableMap bounds = boundData.getMap("bounds");
236
250
  final ReadableMap padding = boundData.getMap("padding");
237
251
 
238
- uiManager.addUIBlock(new UIBlock()
239
- {
252
+ getView(tag, new ResolveViewCallback() {
240
253
  @Override
241
- public void execute(NativeViewHierarchyManager nvhm)
242
- {
243
- RMFMapView mapView = (RMFMapView) nvhm.resolveView(tag);
254
+ public void found(View view) {
255
+ RMFMapView mapView = (RMFMapView) view;
244
256
  if (!validateMapView(mapView, promise)) {
245
257
  return;
246
258
  }
package/ios/Map4dMap.h CHANGED
@@ -1,7 +1,16 @@
1
1
  #import <React/RCTBridgeModule.h>
2
- #import "RMFMapViewManager.h"
3
- #import "RMFMarkerManager.h"
4
2
 
5
- @interface Map4dMap : NSObject <RCTBridgeModule>
3
+ #if defined(RCT_NEW_ARCH_ENABLED) && __has_include("Map4dMapSpec.h")
4
+ #import "Map4dMapSpec.h"
5
+ #define MAP4D_HAS_NEW_ARCH_SPEC 1
6
+ #else
7
+ #define MAP4D_HAS_NEW_ARCH_SPEC 0
8
+ #endif
9
+
10
+ @interface Map4dMap : NSObject <RCTBridgeModule
11
+ #if MAP4D_HAS_NEW_ARCH_SPEC
12
+ , NativeMap4dMapSpec
13
+ #endif
14
+ >
6
15
 
7
16
  @end
package/ios/Map4dMap.m CHANGED
@@ -1,14 +1,119 @@
1
1
  #import "Map4dMap.h"
2
+ #import <Foundation/Foundation.h>
3
+ #import <React/RCTBridge.h>
4
+ #import <React/RCTLog.h>
5
+ #import <React/RCTUIManager.h>
6
+ #import <React/RCTConvert+CoreLocation.h>
7
+ #import "RCTConvert+Map4dMap.h"
8
+ #import "RMFEventResponse.h"
9
+ #import "RMFMapView.h"
2
10
 
3
11
 
4
12
  @implementation Map4dMap
5
13
 
6
14
  RCT_EXPORT_MODULE()
7
15
 
8
- RCT_EXPORT_METHOD(sampleMethod:(NSString *)stringArgument numberParameter:(nonnull NSNumber *)numberArgument callback:(RCTResponseSenderBlock)callback)
16
+ - (void)withMapViewForTag:(nonnull NSNumber *)reactTag
17
+ rejecter:(RCTPromiseRejectBlock)reject
18
+ handler:(void (^)(RMFMapView *mapView))handler
9
19
  {
10
- // TODO: Implement some actually useful functionality
11
- callback(@[[NSString stringWithFormat: @"numberArgument: %@ stringArgument: %@", numberArgument, stringArgument]]);
20
+ RCTUIManager *uiManager = self.bridge.uiManager;
21
+ if (uiManager == nil) {
22
+ if (reject) {
23
+ reject(@"E_UI_MANAGER_UNAVAILABLE", @"UIManager is unavailable on iOS runtime", nil);
24
+ } else {
25
+ RCTLogError(@"UIManager is unavailable on iOS runtime");
26
+ }
27
+ return;
28
+ }
29
+
30
+ [uiManager addUIBlock:^(__unused RCTUIManager *manager,
31
+ NSDictionary<NSNumber *, UIView *> *viewRegistry) {
32
+ id view = viewRegistry[reactTag];
33
+ if (![view isKindOfClass:[RMFMapView class]]) {
34
+ if (reject) {
35
+ reject(@"E_INVALID_VIEW",
36
+ [NSString stringWithFormat:@"Invalid view returned from registry, expecting RMFMapView, got: %@", view],
37
+ nil);
38
+ } else {
39
+ RCTLogError(@"Invalid view returned from registry, expecting RMFMapView, got: %@", view);
40
+ }
41
+ return;
42
+ }
43
+
44
+ handler((RMFMapView *)view);
45
+ }];
46
+ }
47
+
48
+ RCT_EXPORT_METHOD(getCamera:(nonnull NSNumber *)reactTag
49
+ resolver:(RCTPromiseResolveBlock)resolve
50
+ rejecter:(RCTPromiseRejectBlock)reject)
51
+ {
52
+ [self withMapViewForTag:reactTag rejecter:reject handler:^(RMFMapView *mapView) {
53
+ resolve([RMFEventResponse fromCameraPosition:[mapView camera]]);
54
+ }];
55
+ }
56
+
57
+ RCT_EXPORT_METHOD(getBounds:(nonnull NSNumber *)reactTag
58
+ resolver:(RCTPromiseResolveBlock)resolve
59
+ rejecter:(RCTPromiseRejectBlock)reject)
60
+ {
61
+ [self withMapViewForTag:reactTag rejecter:reject handler:^(RMFMapView *mapView) {
62
+ resolve([RMFEventResponse fromCoordinateBounds:[mapView getBounds]]);
63
+ }];
64
+ }
65
+
66
+ RCT_EXPORT_METHOD(getMyLocation:(nonnull NSNumber *)reactTag
67
+ resolver:(RCTPromiseResolveBlock)resolve
68
+ rejecter:(RCTPromiseRejectBlock)reject)
69
+ {
70
+ [self withMapViewForTag:reactTag rejecter:reject handler:^(RMFMapView *mapView) {
71
+ resolve([RMFEventResponse fromCLLocation:[mapView getMyLocation]]);
72
+ }];
73
+ }
74
+
75
+ RCT_EXPORT_METHOD(pointForCoordinate:(nonnull NSNumber *)reactTag
76
+ coordinate:(id)json
77
+ resolver:(RCTPromiseResolveBlock)resolve
78
+ rejecter:(RCTPromiseRejectBlock)reject)
79
+ {
80
+ [self withMapViewForTag:reactTag rejecter:reject handler:^(RMFMapView *mapView) {
81
+ CGPoint point = [mapView.projection pointForCoordinate:[RCTConvert CLLocationCoordinate2D:json]];
82
+ resolve([RMFEventResponse fromCGPoint:point]);
83
+ }];
84
+ }
85
+
86
+ RCT_EXPORT_METHOD(coordinateForPoint:(nonnull NSNumber *)reactTag
87
+ point:(id)json
88
+ resolver:(RCTPromiseResolveBlock)resolve
89
+ rejecter:(RCTPromiseRejectBlock)reject)
90
+ {
91
+ [self withMapViewForTag:reactTag rejecter:reject handler:^(RMFMapView *mapView) {
92
+ CLLocationCoordinate2D coordinate = [mapView.projection coordinateForPoint:[RCTConvert CGPoint:json]];
93
+ resolve([RMFEventResponse fromCoordinate:coordinate]);
94
+ }];
95
+ }
96
+
97
+ RCT_EXPORT_METHOD(cameraForBounds:(nonnull NSNumber *)reactTag
98
+ boundsData:(id)json
99
+ resolver:(RCTPromiseResolveBlock)resolve
100
+ rejecter:(RCTPromiseRejectBlock)reject)
101
+ {
102
+ [self withMapViewForTag:reactTag rejecter:reject handler:^(RMFMapView *mapView) {
103
+ MFCameraPosition *camera = nil;
104
+ id data = [RCTConvert NSDictionary:json];
105
+ if (data[@"bounds"]) {
106
+ MFCoordinateBounds *bounds = [RCTConvert MFCoordinateBounds:data[@"bounds"]];
107
+ if (data[@"padding"]) {
108
+ UIEdgeInsets insets = [RCTConvert UIEdgeInsets:data[@"padding"]];
109
+ camera = [mapView cameraForBounds:bounds insets:insets];
110
+ } else {
111
+ camera = [mapView cameraForBounds:bounds];
112
+ }
113
+ }
114
+
115
+ resolve([RMFEventResponse fromCameraPosition:camera]);
116
+ }];
12
117
  }
13
118
 
14
119
  @end
@@ -0,0 +1,16 @@
1
+ #import "Map4dMap.h"
2
+
3
+ #if defined(RCT_NEW_ARCH_ENABLED) && __has_include("Map4dMapSpec.h")
4
+ #import "Map4dMapSpec.h"
5
+ #import <ReactCommon/RCTTurboModule.h>
6
+ #import <memory>
7
+
8
+ @implementation Map4dMap (TurboModule)
9
+
10
+ - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const facebook::react::ObjCTurboModule::InitParams &)params
11
+ {
12
+ return std::make_shared<facebook::react::NativeMap4dMapSpecJSI>(params);
13
+ }
14
+
15
+ @end
16
+ #endif
@@ -17,6 +17,26 @@
17
17
 
18
18
  RCT_EXPORT_MODULE(RMFCircle)
19
19
 
20
+ - (void)withCircleForTag:(nonnull NSNumber *)reactTag
21
+ handler:(void (^)(RMFCircle *circle))handler
22
+ {
23
+ RCTUIManager *uiManager = self.bridge.uiManager;
24
+ if (uiManager == nil) {
25
+ RCTLogError(@"UIManager is unavailable on iOS runtime");
26
+ return;
27
+ }
28
+
29
+ [uiManager addUIBlock:^(__unused RCTUIManager *manager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
30
+ id view = viewRegistry[reactTag];
31
+ if (![view isKindOfClass:[RMFCircle class]]) {
32
+ RCTLogError(@"Invalid view returned from registry, expecting RMFCircle, got: %@", view);
33
+ return;
34
+ }
35
+
36
+ handler((RMFCircle *)view);
37
+ }];
38
+ }
39
+
20
40
  - (UIView *)view {
21
41
  RMFCircle * circle = [[RMFCircle alloc] init];
22
42
  return circle;
@@ -37,44 +57,26 @@ RCT_EXPORT_VIEW_PROPERTY(onPress, RCTBubblingEventBlock)
37
57
  RCT_EXPORT_METHOD(setCenter:(nonnull NSNumber *)reactTag
38
58
  withCoordinate:(id)coordinate)
39
59
  {
40
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
41
- id view = viewRegistry[reactTag];
42
- if (![view isKindOfClass:[RMFCircle class]]) {
43
- RCTLogError(@"Invalid view returned from registry, expecting RMFCircle, got: %@", view);
44
- } else {
45
- RMFCircle *circle = (RMFCircle *)view;
46
- [circle setCenterCoordinate:[RCTConvert CLLocationCoordinate2D:coordinate]];
47
- }
60
+ [self withCircleForTag:reactTag handler:^(RMFCircle *circle) {
61
+ [circle setCenterCoordinate:[RCTConvert CLLocationCoordinate2D:coordinate]];
48
62
  }];
49
63
  }
50
64
 
51
65
  RCT_EXPORT_METHOD(setRadius:(nonnull NSNumber *)reactTag
52
66
  withRadius:(double)radius)
53
67
  {
54
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
55
- id view = viewRegistry[reactTag];
56
- if (![view isKindOfClass:[RMFCircle class]]) {
57
- RCTLogError(@"Invalid view returned from registry, expecting RMFCircle, got: %@", view);
58
- } else {
59
- RMFCircle *circle = (RMFCircle *)view;
60
- [circle setRadius:radius];
61
- }
68
+ [self withCircleForTag:reactTag handler:^(RMFCircle *circle) {
69
+ [circle setRadius:radius];
62
70
  }];
63
71
  }
64
72
 
65
73
  RCT_EXPORT_METHOD(setFillColor:(nonnull NSNumber *)reactTag
66
74
  color:(id)color)
67
75
  {
68
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
69
- id view = viewRegistry[reactTag];
70
- if (![view isKindOfClass:[RMFCircle class]]) {
71
- RCTLogError(@"Invalid view returned from registry, expecting RMFCircle, got: %@", view);
72
- } else {
73
- RMFCircle *circle = (RMFCircle *)view;
74
- UIColor* fillCorlor = [RCTConvert UIColor:color];
75
- if (fillCorlor != nil) {
76
- [circle setFillColor:fillCorlor];
77
- }
76
+ [self withCircleForTag:reactTag handler:^(RMFCircle *circle) {
77
+ UIColor* fillCorlor = [RCTConvert UIColor:color];
78
+ if (fillCorlor != nil) {
79
+ [circle setFillColor:fillCorlor];
78
80
  }
79
81
  }];
80
82
  }
@@ -82,16 +84,10 @@ RCT_EXPORT_METHOD(setFillColor:(nonnull NSNumber *)reactTag
82
84
  RCT_EXPORT_METHOD(setStrokeColor:(nonnull NSNumber *)reactTag
83
85
  color:(id)color)
84
86
  {
85
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
86
- id view = viewRegistry[reactTag];
87
- if (![view isKindOfClass:[RMFCircle class]]) {
88
- RCTLogError(@"Invalid view returned from registry, expecting RMFCircle, got: %@", view);
89
- } else {
90
- RMFCircle *circle = (RMFCircle *)view;
91
- UIColor* strokeColor = [RCTConvert UIColor:color];
92
- if (strokeColor != nil) {
93
- [circle setStrokeColor:strokeColor];
94
- }
87
+ [self withCircleForTag:reactTag handler:^(RMFCircle *circle) {
88
+ UIColor* strokeColor = [RCTConvert UIColor:color];
89
+ if (strokeColor != nil) {
90
+ [circle setStrokeColor:strokeColor];
95
91
  }
96
92
  }];
97
93
  }
@@ -99,56 +95,32 @@ RCT_EXPORT_METHOD(setStrokeColor:(nonnull NSNumber *)reactTag
99
95
  RCT_EXPORT_METHOD(setStrokeWidth:(nonnull NSNumber *)reactTag
100
96
  width:(double)width)
101
97
  {
102
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
103
- id view = viewRegistry[reactTag];
104
- if (![view isKindOfClass:[RMFCircle class]]) {
105
- RCTLogError(@"Invalid view returned from registry, expecting RMFCircle, got: %@", view);
106
- } else {
107
- RMFCircle *circle = (RMFCircle *)view;
108
- [circle setStrokeWidth:width];
109
- }
98
+ [self withCircleForTag:reactTag handler:^(RMFCircle *circle) {
99
+ [circle setStrokeWidth:width];
110
100
  }];
111
101
  }
112
102
 
113
103
  RCT_EXPORT_METHOD(setZIndex:(nonnull NSNumber *)reactTag
114
104
  zIndex:(float)zIndex)
115
105
  {
116
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
117
- id view = viewRegistry[reactTag];
118
- if (![view isKindOfClass:[RMFCircle class]]) {
119
- RCTLogError(@"Invalid view returned from registry, expecting RMFCircle, got: %@", view);
120
- } else {
121
- RMFCircle *circle = (RMFCircle *)view;
122
- [circle setZIndex:zIndex];
123
- }
106
+ [self withCircleForTag:reactTag handler:^(RMFCircle *circle) {
107
+ [circle setZIndex:zIndex];
124
108
  }];
125
109
  }
126
110
 
127
111
  RCT_EXPORT_METHOD(setVisible:(nonnull NSNumber *)reactTag
128
112
  visible:(BOOL)visible)
129
113
  {
130
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
131
- id view = viewRegistry[reactTag];
132
- if (![view isKindOfClass:[RMFCircle class]]) {
133
- RCTLogError(@"Invalid view returned from registry, expecting RMFCircle, got: %@", view);
134
- } else {
135
- RMFCircle *circle = (RMFCircle *)view;
136
- [circle setVisible:visible];
137
- }
114
+ [self withCircleForTag:reactTag handler:^(RMFCircle *circle) {
115
+ [circle setVisible:visible];
138
116
  }];
139
117
  }
140
118
 
141
119
  RCT_EXPORT_METHOD(setUserData:(nonnull NSNumber *)reactTag
142
120
  userData:(id)json)
143
121
  {
144
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
145
- id view = viewRegistry[reactTag];
146
- if (![view isKindOfClass:[RMFCircle class]]) {
147
- RCTLogError(@"Invalid view returned from registry, expecting RMFCircle, got: %@", view);
148
- } else {
149
- RMFCircle *circle = (RMFCircle *)view;
150
- [circle setUserData:[RCTConvert NSDictionary:json]];
151
- }
122
+ [self withCircleForTag:reactTag handler:^(RMFCircle *circle) {
123
+ [circle setUserData:[RCTConvert NSDictionary:json]];
152
124
  }];
153
125
  }
154
126
 
@@ -15,6 +15,26 @@
15
15
 
16
16
  RCT_EXPORT_MODULE(RMFDirectionsRenderer)
17
17
 
18
+ - (void)withRendererForTag:(nonnull NSNumber *)reactTag
19
+ handler:(void (^)(RMFDirectionsRenderer *renderer))handler
20
+ {
21
+ RCTUIManager *uiManager = self.bridge.uiManager;
22
+ if (uiManager == nil) {
23
+ RCTLogError(@"UIManager is unavailable on iOS runtime");
24
+ return;
25
+ }
26
+
27
+ [uiManager addUIBlock:^(__unused RCTUIManager *manager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
28
+ id view = viewRegistry[reactTag];
29
+ if (![view isKindOfClass:[RMFDirectionsRenderer class]]) {
30
+ RCTLogError(@"Invalid view returned from registry, expecting RMFDirectionsRenderer, got: %@", view);
31
+ return;
32
+ }
33
+
34
+ handler((RMFDirectionsRenderer *)view);
35
+ }];
36
+ }
37
+
18
38
  - (UIView*)view {
19
39
  RMFDirectionsRenderer* renderer = [[RMFDirectionsRenderer alloc] init];
20
40
  return renderer;
@@ -42,42 +62,24 @@ RCT_EXPORT_VIEW_PROPERTY(onPress, RCTBubblingEventBlock)
42
62
  RCT_EXPORT_METHOD(setActivedIndex:(nonnull NSNumber *)reactTag
43
63
  withRouteIndex:(NSUInteger)routeIndex)
44
64
  {
45
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
46
- id view = viewRegistry[reactTag];
47
- if (![view isKindOfClass:[RMFDirectionsRenderer class]]) {
48
- RCTLogError(@"Invalid view returned from registry, expecting RMFCircle, got: %@", view);
49
- } else {
50
- RMFDirectionsRenderer* renderer = (RMFDirectionsRenderer*)view;
51
- renderer.activedIndex = routeIndex;
52
- }
65
+ [self withRendererForTag:reactTag handler:^(RMFDirectionsRenderer *renderer) {
66
+ renderer.activedIndex = routeIndex;
53
67
  }];
54
68
  }
55
69
 
56
70
  RCT_EXPORT_METHOD(setRoutes:(nonnull NSNumber *)reactTag
57
71
  withRoutes:(id)routes)
58
72
  {
59
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
60
- id view = viewRegistry[reactTag];
61
- if (![view isKindOfClass:[RMFDirectionsRenderer class]]) {
62
- RCTLogError(@"Invalid view returned from registry, expecting RMFPolygon, got: %@", view);
63
- } else {
64
- RMFDirectionsRenderer* renderer = (RMFDirectionsRenderer*)view;
65
- [renderer setRoutes:[RCTConvert RMFCoordinateArrayArray:routes]];
66
- }
73
+ [self withRendererForTag:reactTag handler:^(RMFDirectionsRenderer *renderer) {
74
+ [renderer setRoutes:[RCTConvert RMFCoordinateArrayArray:routes]];
67
75
  }];
68
76
  }
69
77
 
70
78
  RCT_EXPORT_METHOD(setDirections:(nonnull NSNumber *)reactTag
71
79
  withDirections:(NSString*)directions)
72
80
  {
73
- [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
74
- id view = viewRegistry[reactTag];
75
- if (![view isKindOfClass:[RMFDirectionsRenderer class]]) {
76
- RCTLogError(@"Invalid view returned from registry, expecting RMFMarker, got: %@", view);
77
- } else {
78
- RMFDirectionsRenderer* renderer = (RMFDirectionsRenderer*)view;
79
- [renderer.map4dDirectionsRenderer setRoutesWithJson:directions];
80
- }
81
+ [self withRendererForTag:reactTag handler:^(RMFDirectionsRenderer *renderer) {
82
+ [renderer.map4dDirectionsRenderer setRoutesWithJson:directions];
81
83
  }];
82
84
  }
83
85