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.
- package/README.md +58 -0
- package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +2 -2
- package/android/build.gradle +23 -2
- package/android/src/main/java/com/reactnativemap4dmap/Map4dMapModule.java +39 -27
- package/ios/Map4dMap.h +12 -3
- package/ios/Map4dMap.m +108 -3
- package/ios/Map4dMapTurbo.mm +16 -0
- package/ios/RMFCircleManager.m +40 -68
- package/ios/RMFDirectionsRendererManager.m +26 -24
- package/ios/RMFMapViewManager.m +64 -149
- package/ios/RMFMarkerManager.m +36 -64
- package/ios/RMFPOIManager.m +40 -74
- package/ios/RMFPolygonManager.m +38 -60
- package/ios/RMFPolylineManager.m +36 -58
- package/ios/building/RMFBuildingManager.m +36 -64
- package/lib/commonjs/components/MFBanDoSo/constants.js +30 -0
- package/lib/commonjs/components/MFBanDoSo/constants.js.map +1 -0
- package/lib/commonjs/components/MFBanDoSo/helpers.js +200 -0
- package/lib/commonjs/components/MFBanDoSo/helpers.js.map +1 -0
- package/lib/commonjs/components/MFBanDoSo/propTypes.js +18 -0
- package/lib/commonjs/components/MFBanDoSo/propTypes.js.map +1 -0
- package/lib/commonjs/components/MFBanDoSo/styles.js +334 -0
- package/lib/commonjs/components/MFBanDoSo/styles.js.map +1 -0
- package/lib/commonjs/components/MFBanDoSo/ui.js +231 -0
- package/lib/commonjs/components/MFBanDoSo/ui.js.map +1 -0
- package/lib/commonjs/components/MFBanDoSo.js +201 -73
- package/lib/commonjs/components/MFBanDoSo.js.map +1 -1
- package/lib/commonjs/components/MFBuilding.js +15 -90
- package/lib/commonjs/components/MFBuilding.js.map +1 -1
- package/lib/commonjs/components/MFCircle.js +20 -88
- package/lib/commonjs/components/MFCircle.js.map +1 -1
- package/lib/commonjs/components/MFDirectionsRenderer.js +15 -93
- package/lib/commonjs/components/MFDirectionsRenderer.js.map +1 -1
- package/lib/commonjs/components/MFMapView.js +50 -147
- package/lib/commonjs/components/MFMapView.js.map +1 -1
- package/lib/commonjs/components/MFMarker.js +15 -101
- package/lib/commonjs/components/MFMarker.js.map +1 -1
- package/lib/commonjs/components/MFPOI.js +17 -92
- package/lib/commonjs/components/MFPOI.js.map +1 -1
- package/lib/commonjs/components/MFPolygon.js +15 -87
- package/lib/commonjs/components/MFPolygon.js.map +1 -1
- package/lib/commonjs/components/MFPolyline.js +17 -87
- package/lib/commonjs/components/MFPolyline.js.map +1 -1
- package/lib/commonjs/components/MFTileOverlay.js +7 -15
- package/lib/commonjs/components/MFTileOverlay.js.map +1 -1
- package/lib/commonjs/components/Map4dMapView.js +1 -4
- package/lib/commonjs/components/Map4dMapView.js.map +1 -1
- package/lib/commonjs/components/extends/AreaFocusManager.js +4 -38
- package/lib/commonjs/components/extends/AreaFocusManager.js.map +1 -1
- package/lib/commonjs/components/extends/AreaFocuser.js +1 -17
- package/lib/commonjs/components/extends/AreaFocuser.js.map +1 -1
- package/lib/commonjs/components/extends/BoundHelper.js +0 -6
- package/lib/commonjs/components/extends/BoundHelper.js.map +1 -1
- package/lib/commonjs/components/extends/area/AreaFocusAreas.js +0 -37
- package/lib/commonjs/components/extends/area/AreaFocusAreas.js.map +1 -1
- package/lib/commonjs/components/extends/area/AreaFocusGeometryUtils.js +1 -35
- package/lib/commonjs/components/extends/area/AreaFocusGeometryUtils.js.map +1 -1
- package/lib/commonjs/components/extends/area/AreaFocusSession.js +0 -18
- package/lib/commonjs/components/extends/area/AreaFocusSession.js.map +1 -1
- package/lib/commonjs/components/extends/area/AreaFocusTypes.js +2 -3
- package/lib/commonjs/components/extends/area/AreaFocusTypes.js.map +1 -1
- package/lib/commonjs/components/internal/DefaultRoadmapStyle.js +1 -2
- package/lib/commonjs/components/internal/DefaultRoadmapStyle.js.map +1 -1
- package/lib/commonjs/components/internal/GeojsonStyleUtils.js +20 -31
- package/lib/commonjs/components/internal/GeojsonStyleUtils.js.map +1 -1
- package/lib/commonjs/index.js +0 -11
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/native/Map4dMapNativeModule.js +10 -0
- package/lib/commonjs/native/Map4dMapNativeModule.js.map +1 -0
- package/lib/commonjs/native/NativeModuleResolver.js +35 -0
- package/lib/commonjs/native/NativeModuleResolver.js.map +1 -0
- package/lib/commonjs/native/ViewManagerCommand.js +67 -0
- package/lib/commonjs/native/ViewManagerCommand.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/specs/NativeMap4dMap.js +9 -0
- package/lib/commonjs/specs/NativeMap4dMap.js.map +1 -0
- package/lib/module/components/MFBanDoSo/constants.js +25 -0
- package/lib/module/components/MFBanDoSo/constants.js.map +1 -0
- package/lib/module/components/MFBanDoSo/helpers.js +188 -0
- package/lib/module/components/MFBanDoSo/helpers.js.map +1 -0
- package/lib/module/components/MFBanDoSo/propTypes.js +14 -0
- package/lib/module/components/MFBanDoSo/propTypes.js.map +1 -0
- package/lib/module/components/MFBanDoSo/styles.js +332 -0
- package/lib/module/components/MFBanDoSo/styles.js.map +1 -0
- package/lib/module/components/MFBanDoSo/ui.js +224 -0
- package/lib/module/components/MFBanDoSo/ui.js.map +1 -0
- package/lib/module/components/MFBanDoSo.js +203 -63
- package/lib/module/components/MFBanDoSo.js.map +1 -1
- package/lib/module/components/MFBuilding.js +17 -82
- package/lib/module/components/MFBuilding.js.map +1 -1
- package/lib/module/components/MFCircle.js +22 -80
- package/lib/module/components/MFCircle.js.map +1 -1
- package/lib/module/components/MFDirectionsRenderer.js +16 -85
- package/lib/module/components/MFDirectionsRenderer.js.map +1 -1
- package/lib/module/components/MFMapView.js +51 -136
- package/lib/module/components/MFMapView.js.map +1 -1
- package/lib/module/components/MFMarker.js +17 -92
- package/lib/module/components/MFMarker.js.map +1 -1
- package/lib/module/components/MFPOI.js +19 -84
- package/lib/module/components/MFPOI.js.map +1 -1
- package/lib/module/components/MFPolygon.js +17 -79
- package/lib/module/components/MFPolygon.js.map +1 -1
- package/lib/module/components/MFPolyline.js +19 -79
- package/lib/module/components/MFPolyline.js.map +1 -1
- package/lib/module/components/MFTileOverlay.js +10 -9
- package/lib/module/components/MFTileOverlay.js.map +1 -1
- package/lib/module/components/Map4dMapView.js +2 -0
- package/lib/module/components/Map4dMapView.js.map +1 -1
- package/lib/module/components/extends/AreaFocusManager.js +6 -32
- package/lib/module/components/extends/AreaFocusManager.js.map +1 -1
- package/lib/module/components/extends/AreaFocuser.js +3 -15
- package/lib/module/components/extends/AreaFocuser.js.map +1 -1
- package/lib/module/components/extends/BoundHelper.js +2 -5
- package/lib/module/components/extends/BoundHelper.js.map +1 -1
- package/lib/module/components/extends/area/AreaFocusAreas.js +2 -33
- package/lib/module/components/extends/area/AreaFocusAreas.js.map +1 -1
- package/lib/module/components/extends/area/AreaFocusGeometryUtils.js +2 -32
- package/lib/module/components/extends/area/AreaFocusGeometryUtils.js.map +1 -1
- package/lib/module/components/extends/area/AreaFocusSession.js +2 -17
- package/lib/module/components/extends/area/AreaFocusSession.js.map +1 -1
- package/lib/module/components/extends/area/AreaFocusTypes.js +3 -0
- package/lib/module/components/extends/area/AreaFocusTypes.js.map +1 -1
- package/lib/module/components/internal/DefaultRoadmapStyle.js +2 -0
- package/lib/module/components/internal/DefaultRoadmapStyle.js.map +1 -1
- package/lib/module/components/internal/GeojsonStyleUtils.js +21 -28
- package/lib/module/components/internal/GeojsonStyleUtils.js.map +1 -1
- package/lib/module/index.js +2 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/native/Map4dMapNativeModule.js +5 -0
- package/lib/module/native/Map4dMapNativeModule.js.map +1 -0
- package/lib/module/native/NativeModuleResolver.js +29 -0
- package/lib/module/native/NativeModuleResolver.js.map +1 -0
- package/lib/module/native/ViewManagerCommand.js +61 -0
- package/lib/module/native/ViewManagerCommand.js.map +1 -0
- package/lib/module/specs/NativeMap4dMap.js +5 -0
- package/lib/module/specs/NativeMap4dMap.js.map +1 -0
- package/lib/typescript/components/MFBanDoSo/constants.d.ts +11 -0
- package/lib/typescript/components/MFBanDoSo/constants.d.ts.map +1 -0
- package/lib/typescript/components/MFBanDoSo/helpers.d.ts +14 -0
- package/lib/typescript/components/MFBanDoSo/helpers.d.ts.map +1 -0
- package/lib/typescript/components/MFBanDoSo/propTypes.d.ts +2 -0
- package/lib/typescript/components/MFBanDoSo/propTypes.d.ts.map +1 -0
- package/lib/typescript/components/MFBanDoSo/styles.d.ts +336 -0
- package/lib/typescript/components/MFBanDoSo/styles.d.ts.map +1 -0
- package/lib/typescript/components/MFBanDoSo/ui.d.ts +32 -0
- package/lib/typescript/components/MFBanDoSo/ui.d.ts.map +1 -0
- package/lib/typescript/components/MFBanDoSo.d.ts +38 -0
- package/lib/typescript/components/MFBanDoSo.d.ts.map +1 -0
- package/lib/typescript/components/MFBuilding.d.ts +24 -0
- package/lib/typescript/components/MFBuilding.d.ts.map +1 -0
- package/lib/typescript/components/MFCircle.d.ts +24 -0
- package/lib/typescript/components/MFCircle.d.ts.map +1 -0
- package/lib/typescript/components/MFDirectionsRenderer.d.ts +19 -0
- package/lib/typescript/components/MFDirectionsRenderer.d.ts.map +1 -0
- package/lib/typescript/components/MFMapView.d.ts +66 -0
- package/lib/typescript/components/MFMapView.d.ts.map +1 -0
- package/lib/typescript/components/MFMarker.d.ts +26 -0
- package/lib/typescript/components/MFMarker.d.ts.map +1 -0
- package/lib/typescript/components/MFPOI.d.ts +24 -0
- package/lib/typescript/components/MFPOI.d.ts.map +1 -0
- package/lib/typescript/components/MFPolygon.d.ts +24 -0
- package/lib/typescript/components/MFPolygon.d.ts.map +1 -0
- package/lib/typescript/components/MFPolyline.d.ts +24 -0
- package/lib/typescript/components/MFPolyline.d.ts.map +1 -0
- package/lib/typescript/components/MFTileOverlay.d.ts +12 -0
- package/lib/typescript/components/MFTileOverlay.d.ts.map +1 -0
- package/lib/typescript/components/Map4dMapView.d.ts +8 -7
- package/lib/typescript/components/Map4dMapView.d.ts.map +1 -0
- package/lib/typescript/components/extends/AreaFocusManager.d.ts +34 -0
- package/lib/typescript/components/extends/AreaFocusManager.d.ts.map +1 -0
- package/lib/typescript/components/extends/AreaFocuser.d.ts +15 -0
- package/lib/typescript/components/extends/AreaFocuser.d.ts.map +1 -0
- package/lib/typescript/components/extends/BoundHelper.d.ts +11 -0
- package/lib/typescript/components/extends/BoundHelper.d.ts.map +1 -0
- package/lib/typescript/components/extends/area/AreaFocusAreas.d.ts +58 -0
- package/lib/typescript/components/extends/area/AreaFocusAreas.d.ts.map +1 -0
- package/lib/typescript/components/extends/area/AreaFocusGeometryUtils.d.ts +19 -0
- package/lib/typescript/components/extends/area/AreaFocusGeometryUtils.d.ts.map +1 -0
- package/lib/typescript/components/extends/area/AreaFocusSession.d.ts +14 -0
- package/lib/typescript/components/extends/area/AreaFocusSession.d.ts.map +1 -0
- package/lib/typescript/components/extends/area/AreaFocusTypes.d.ts +40 -0
- package/lib/typescript/components/extends/area/AreaFocusTypes.d.ts.map +1 -0
- package/lib/typescript/components/internal/DefaultRoadmapStyle.d.ts +820 -0
- package/lib/typescript/components/internal/DefaultRoadmapStyle.d.ts.map +1 -0
- package/lib/typescript/components/internal/GeojsonStyleUtils.d.ts +3 -0
- package/lib/typescript/components/internal/GeojsonStyleUtils.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +13 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/native/Map4dMapNativeModule.d.ts +2 -0
- package/lib/typescript/native/Map4dMapNativeModule.d.ts.map +1 -0
- package/lib/typescript/native/NativeModuleResolver.d.ts +3 -0
- package/lib/typescript/native/NativeModuleResolver.d.ts.map +1 -0
- package/lib/typescript/native/ViewManagerCommand.d.ts +11 -0
- package/lib/typescript/native/ViewManagerCommand.d.ts.map +1 -0
- package/package.json +27 -11
- package/src/components/MFBanDoSo/constants.js +38 -0
- package/src/components/MFBanDoSo/helpers.js +273 -0
- package/src/components/MFBanDoSo/propTypes.js +14 -0
- package/src/components/MFBanDoSo/styles.js +323 -0
- package/src/components/MFBanDoSo/ui.js +261 -0
- package/src/components/MFBanDoSo.js +280 -78
- package/src/components/MFBuilding.js +8 -48
- package/src/components/MFCircle.js +8 -48
- package/src/components/MFDirectionsRenderer.js +8 -47
- package/src/components/MFMapView.js +31 -53
- package/src/components/MFMarker.js +9 -50
- package/src/components/MFPOI.js +8 -48
- package/src/components/MFPolygon.js +8 -48
- package/src/components/MFPolyline.js +8 -48
- package/src/components/internal/GeojsonStyleUtils.js +3 -0
- package/src/native/Map4dMapNativeModule.js +3 -0
- package/src/native/NativeModuleResolver.js +33 -0
- package/src/native/ViewManagerCommand.js +82 -0
- package/src/specs/NativeMap4dMap.js +12 -0
- 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`.
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
#
|
|
2
|
-
gradle.version=9
|
|
1
|
+
#Fri Jul 24 17:11:04 ICT 2026
|
|
2
|
+
gradle.version=8.9
|
package/android/build.gradle
CHANGED
|
@@ -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',
|
|
33
|
+
compileSdkVersion safeExtGet('Map4dMap_compileSdkVersion', 33)
|
|
22
34
|
defaultConfig {
|
|
23
35
|
minSdkVersion safeExtGet('Map4dMap_minSdkVersion', 21)
|
|
24
|
-
targetSdkVersion safeExtGet('Map4dMap_targetSdkVersion',
|
|
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
|
-
|
|
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
|
-
|
|
45
|
-
uiManager
|
|
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
|
-
|
|
178
|
-
uiManager.addUIBlock(new UIBlock()
|
|
179
|
-
{
|
|
202
|
+
getView(tag, new ResolveViewCallback() {
|
|
180
203
|
@Override
|
|
181
|
-
public void
|
|
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
|
-
|
|
209
|
-
uiManager.addUIBlock(new UIBlock()
|
|
210
|
-
{
|
|
228
|
+
getView(tag, new ResolveViewCallback() {
|
|
211
229
|
@Override
|
|
212
|
-
public void
|
|
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
|
-
|
|
239
|
-
{
|
|
252
|
+
getView(tag, new ResolveViewCallback() {
|
|
240
253
|
@Override
|
|
241
|
-
public void
|
|
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
|
-
|
|
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
|
-
|
|
16
|
+
- (void)withMapViewForTag:(nonnull NSNumber *)reactTag
|
|
17
|
+
rejecter:(RCTPromiseRejectBlock)reject
|
|
18
|
+
handler:(void (^)(RMFMapView *mapView))handler
|
|
9
19
|
{
|
|
10
|
-
|
|
11
|
-
|
|
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
|
package/ios/RMFCircleManager.m
CHANGED
|
@@ -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
|
|
41
|
-
|
|
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
|
|
55
|
-
|
|
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
|
|
69
|
-
|
|
70
|
-
if (
|
|
71
|
-
|
|
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
|
|
86
|
-
|
|
87
|
-
if (
|
|
88
|
-
|
|
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
|
|
103
|
-
|
|
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
|
|
117
|
-
|
|
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
|
|
131
|
-
|
|
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
|
|
145
|
-
|
|
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
|
|
46
|
-
|
|
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
|
|
60
|
-
|
|
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
|
|
74
|
-
|
|
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
|
|