react-native-radar 3.23.5 → 3.23.6-beta.2
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/Radar.podspec +1 -1
- package/android/build.gradle +1 -1
- package/android/src/newarch/java/com/radar/RadarModule.kt +1 -1
- package/android/src/oldarch/java/com/radar/RadarModule.java +1 -1
- package/dist/@types/types.d.ts +0 -15
- package/dist/index.d.ts +0 -3
- package/dist/index.js +1 -3
- package/dist/ui/styles.d.ts +0 -19
- package/dist/ui/styles.js +0 -14
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/ios/RNRadar.mm +1 -1
- package/package.json +1 -5
- package/plugin/build/withRadarAndroid.js +42 -1
- package/src/@types/types.ts +0 -17
- package/src/index.tsx +0 -5
- package/src/ui/styles.js +0 -14
- package/src/version.ts +1 -1
- package/dist/ui/map.d.ts +0 -21
- package/dist/ui/map.js +0 -18
- package/dist/ui/map.jsx +0 -139
- package/src/ui/map.jsx +0 -139
- package/src/ui/map.tsx +0 -28
package/Radar.podspec
CHANGED
package/android/build.gradle
CHANGED
|
@@ -143,7 +143,7 @@ class RadarModule(reactContext: ReactApplicationContext) :
|
|
|
143
143
|
override fun initialize(publishableKey: String, fraud: Boolean): Unit {
|
|
144
144
|
val editor = reactApplicationContext.getSharedPreferences("RadarSDK", Context.MODE_PRIVATE).edit()
|
|
145
145
|
editor.putString("x_platform_sdk_type", "ReactNative")
|
|
146
|
-
editor.putString("x_platform_sdk_version", "3.23.
|
|
146
|
+
editor.putString("x_platform_sdk_version", "3.23.6-beta.2")
|
|
147
147
|
editor.apply()
|
|
148
148
|
|
|
149
149
|
Radar.initialize(reactApplicationContext, publishableKey, radarReceiver, Radar.RadarLocationServicesProvider.GOOGLE, fraud, null, radarInAppMessageReceiver, currentActivity)
|
|
@@ -102,7 +102,7 @@ public class RadarModule extends ReactContextBaseJavaModule implements Permissio
|
|
|
102
102
|
this.fraud = fraud;
|
|
103
103
|
SharedPreferences.Editor editor = getReactApplicationContext().getSharedPreferences("RadarSDK", Context.MODE_PRIVATE).edit();
|
|
104
104
|
editor.putString("x_platform_sdk_type", "ReactNative");
|
|
105
|
-
editor.putString("x_platform_sdk_version", "3.23.
|
|
105
|
+
editor.putString("x_platform_sdk_version", "3.23.6-beta.2");
|
|
106
106
|
editor.apply();
|
|
107
107
|
Radar.initialize(getReactApplicationContext(), publishableKey, receiver, Radar.RadarLocationServicesProvider.GOOGLE, fraud, null, inAppMessageReceiver, getCurrentActivity());
|
|
108
108
|
if (fraud) {
|
package/dist/@types/types.d.ts
CHANGED
|
@@ -541,18 +541,3 @@ export interface RadarTrackingOptionsForegroundService {
|
|
|
541
541
|
iconColor?: string;
|
|
542
542
|
}
|
|
543
543
|
export type RadarTripStatus = "unknown" | "started" | "approaching" | "arrived" | "expired" | "completed" | "canceled";
|
|
544
|
-
export interface RadarMapOptions {
|
|
545
|
-
mapStyle?: string;
|
|
546
|
-
showUserLocation?: boolean;
|
|
547
|
-
onRegionDidChange?: (feature: RadarMapRegionChangeEvent) => void;
|
|
548
|
-
onDidFinishLoadingMap?: () => void;
|
|
549
|
-
onWillStartLoadingMap?: () => void;
|
|
550
|
-
onDidFailLoadingMap?: () => void;
|
|
551
|
-
}
|
|
552
|
-
export interface RadarMapRegionChangeEvent {
|
|
553
|
-
center: [number, number];
|
|
554
|
-
zoom: number;
|
|
555
|
-
bounds?: [number, number, number, number];
|
|
556
|
-
bearing?: number;
|
|
557
|
-
pitch?: number;
|
|
558
|
-
}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,8 +5,5 @@ declare let RadarRNWeb: any;
|
|
|
5
5
|
export { RadarRNWeb };
|
|
6
6
|
declare let Autocomplete: any;
|
|
7
7
|
export { Autocomplete };
|
|
8
|
-
declare let Map: any;
|
|
9
|
-
export { Map };
|
|
10
|
-
export type { RadarMapProps } from "./ui/map";
|
|
11
8
|
export * from "./@types/types";
|
|
12
9
|
export * from "./@types/RadarNativeInterface";
|
package/dist/index.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.
|
|
17
|
+
exports.Autocomplete = exports.RadarRNWeb = void 0;
|
|
18
18
|
const react_native_1 = require("react-native");
|
|
19
19
|
let nativeModule;
|
|
20
20
|
nativeModule =
|
|
@@ -26,7 +26,5 @@ let RadarRNWeb = react_native_1.Platform.OS === "web" ? require("./index.web").d
|
|
|
26
26
|
exports.RadarRNWeb = RadarRNWeb;
|
|
27
27
|
let Autocomplete = react_native_1.Platform.OS !== "web" ? require("./ui/autocomplete").default : {};
|
|
28
28
|
exports.Autocomplete = Autocomplete;
|
|
29
|
-
let Map = react_native_1.Platform.OS !== "web" ? require("./ui/map").default : {};
|
|
30
|
-
exports.Map = Map;
|
|
31
29
|
__exportStar(require("./@types/types"), exports);
|
|
32
30
|
__exportStar(require("./@types/RadarNativeInterface"), exports);
|
package/dist/ui/styles.d.ts
CHANGED
|
@@ -150,23 +150,4 @@ declare namespace styles {
|
|
|
150
150
|
export { height_5 as height };
|
|
151
151
|
export let resizeMode: "contain";
|
|
152
152
|
}
|
|
153
|
-
namespace mapContainer {
|
|
154
|
-
let flex_2: number;
|
|
155
|
-
export { flex_2 as flex };
|
|
156
|
-
}
|
|
157
|
-
namespace map {
|
|
158
|
-
let flex_3: number;
|
|
159
|
-
export { flex_3 as flex };
|
|
160
|
-
}
|
|
161
|
-
namespace mapLogo {
|
|
162
|
-
export let position: "absolute";
|
|
163
|
-
export let bottom: number;
|
|
164
|
-
export let left: number;
|
|
165
|
-
let width_9: number;
|
|
166
|
-
export { width_9 as width };
|
|
167
|
-
let height_6: number;
|
|
168
|
-
export { height_6 as height };
|
|
169
|
-
let resizeMode_1: "contain";
|
|
170
|
-
export { resizeMode_1 as resizeMode };
|
|
171
|
-
}
|
|
172
153
|
}
|
package/dist/ui/styles.js
CHANGED
|
@@ -107,19 +107,5 @@ const styles = react_native_1.StyleSheet.create({
|
|
|
107
107
|
height: 15,
|
|
108
108
|
resizeMode: 'contain',
|
|
109
109
|
},
|
|
110
|
-
mapContainer: {
|
|
111
|
-
flex: 1,
|
|
112
|
-
},
|
|
113
|
-
map: {
|
|
114
|
-
flex: 1,
|
|
115
|
-
},
|
|
116
|
-
mapLogo: {
|
|
117
|
-
position: 'absolute',
|
|
118
|
-
bottom: -10,
|
|
119
|
-
left: 5,
|
|
120
|
-
width: 50,
|
|
121
|
-
height: 50,
|
|
122
|
-
resizeMode: 'contain',
|
|
123
|
-
},
|
|
124
110
|
});
|
|
125
111
|
exports.default = styles;
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "3.23.
|
|
1
|
+
export declare const VERSION = "3.23.6-beta.2";
|
package/dist/version.js
CHANGED
|
@@ -3,4 +3,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.VERSION = void 0;
|
|
4
4
|
// This file contains the version of the react-native-radar package
|
|
5
5
|
// It should be updated to match the version in package.json
|
|
6
|
-
exports.VERSION = '3.23.
|
|
6
|
+
exports.VERSION = '3.23.6-beta.2';
|
package/ios/RNRadar.mm
CHANGED
|
@@ -186,7 +186,7 @@ RCT_EXPORT_MODULE()
|
|
|
186
186
|
|
|
187
187
|
RCT_EXPORT_METHOD(initialize:(NSString *)publishableKey fraud:(BOOL)fraud) {
|
|
188
188
|
[[NSUserDefaults standardUserDefaults] setObject:@"ReactNative" forKey:@"radar-xPlatformSDKType"];
|
|
189
|
-
[[NSUserDefaults standardUserDefaults] setObject:@"3.23.
|
|
189
|
+
[[NSUserDefaults standardUserDefaults] setObject:@"3.23.6-beta.2" forKey:@"radar-xPlatformSDKVersion"];
|
|
190
190
|
[Radar initializeWithPublishableKey:publishableKey];
|
|
191
191
|
}
|
|
192
192
|
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "React Native module for Radar, the leading geofencing and location tracking platform",
|
|
4
4
|
"homepage": "https://radar.com",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
|
-
"version": "3.23.
|
|
6
|
+
"version": "3.23.6-beta.2",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"files": [
|
|
9
9
|
"dist",
|
|
@@ -56,15 +56,11 @@
|
|
|
56
56
|
]
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
|
-
"@maplibre/maplibre-react-native": ">=10.2.1",
|
|
60
59
|
"expo": ">=43.0.5",
|
|
61
60
|
"react": ">= 16.8.6",
|
|
62
61
|
"react-native": ">= 0.60.0"
|
|
63
62
|
},
|
|
64
63
|
"peerDependenciesMeta": {
|
|
65
|
-
"@maplibre/maplibre-react-native": {
|
|
66
|
-
"optional": true
|
|
67
|
-
},
|
|
68
64
|
"expo": {
|
|
69
65
|
"optional": true
|
|
70
66
|
}
|
|
@@ -45,6 +45,7 @@ const withRadarAndroid = (config, args) => {
|
|
|
45
45
|
return withAppBuildGradle(config, (config) => {
|
|
46
46
|
if (config.modResults.language === "groovy") {
|
|
47
47
|
config.modResults.contents = modifyAppBuildGradle(config.modResults.contents, args.androidFraud ?? false);
|
|
48
|
+
config.modResults.contents = addCoreLibraryDesugaring(config.modResults.contents);
|
|
48
49
|
}
|
|
49
50
|
else {
|
|
50
51
|
throw new Error("Cannot configure Sentry in the app gradle because the build.gradle is not groovy");
|
|
@@ -91,5 +92,45 @@ function modifyAppBuildGradle(buildGradle, androidFraud) {
|
|
|
91
92
|
replacementString +=
|
|
92
93
|
"\n\n" + ' implementation "com.google.android.play:integrity:1.2.0"';
|
|
93
94
|
}
|
|
94
|
-
|
|
95
|
+
buildGradle = buildGradle.replace(pattern, (match) => match + replacementString);
|
|
96
|
+
return buildGradle;
|
|
97
|
+
}
|
|
98
|
+
function addCoreLibraryDesugaring(buildGradle) {
|
|
99
|
+
if (buildGradle.includes('coreLibraryDesugaringEnabled true')) {
|
|
100
|
+
return buildGradle;
|
|
101
|
+
}
|
|
102
|
+
const androidBlockRegex = /android\s*\{([\s\S]*?)^\}/m;
|
|
103
|
+
const compileOptionsRegex = /compileOptions\s*\{([\s\S]*?)^\s*\}/m;
|
|
104
|
+
const androidMatch = buildGradle.match(androidBlockRegex);
|
|
105
|
+
if (androidMatch) {
|
|
106
|
+
const androidBlock = androidMatch[0];
|
|
107
|
+
const androidBlockContent = androidMatch[1];
|
|
108
|
+
const compileOptionsMatch = androidBlockContent.match(compileOptionsRegex);
|
|
109
|
+
if (compileOptionsMatch) {
|
|
110
|
+
if (!/coreLibraryDesugaringEnabled\s+true/.test(compileOptionsMatch[0])) {
|
|
111
|
+
const updatedCompileOptions = compileOptionsMatch[0].replace(/^\s*\}/m, ' coreLibraryDesugaringEnabled true\n }');
|
|
112
|
+
const updatedAndroidBlock = androidBlock.replace(compileOptionsMatch[0], updatedCompileOptions);
|
|
113
|
+
buildGradle = buildGradle.replace(androidBlock, updatedAndroidBlock);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
const insertIndex = buildGradle.indexOf(androidMatch[0]) + androidMatch[0].indexOf('{') + 1;
|
|
118
|
+
buildGradle =
|
|
119
|
+
buildGradle.slice(0, insertIndex) +
|
|
120
|
+
'\n compileOptions {\n coreLibraryDesugaringEnabled true\n }\n' +
|
|
121
|
+
buildGradle.slice(insertIndex);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (!buildGradle.includes('coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:2.1.5"')) {
|
|
125
|
+
const dependenciesPattern = '\ndependencies {\n';
|
|
126
|
+
const dependenciesIndex = buildGradle.indexOf(dependenciesPattern);
|
|
127
|
+
if (dependenciesIndex !== -1) {
|
|
128
|
+
const dependenciesPivot = dependenciesIndex + dependenciesPattern.length;
|
|
129
|
+
buildGradle =
|
|
130
|
+
buildGradle.slice(0, dependenciesPivot) +
|
|
131
|
+
' coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:2.1.5"\n\n' +
|
|
132
|
+
buildGradle.slice(dependenciesPivot);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return buildGradle;
|
|
95
136
|
}
|
package/src/@types/types.ts
CHANGED
|
@@ -846,20 +846,3 @@ export type RadarTripStatus =
|
|
|
846
846
|
| "expired"
|
|
847
847
|
| "completed"
|
|
848
848
|
| "canceled";
|
|
849
|
-
|
|
850
|
-
export interface RadarMapOptions {
|
|
851
|
-
mapStyle?: string;
|
|
852
|
-
showUserLocation?: boolean;
|
|
853
|
-
onRegionDidChange?: (feature: RadarMapRegionChangeEvent) => void;
|
|
854
|
-
onDidFinishLoadingMap?: () => void;
|
|
855
|
-
onWillStartLoadingMap?: () => void;
|
|
856
|
-
onDidFailLoadingMap?: () => void;
|
|
857
|
-
}
|
|
858
|
-
|
|
859
|
-
export interface RadarMapRegionChangeEvent {
|
|
860
|
-
center: [number, number];
|
|
861
|
-
zoom: number;
|
|
862
|
-
bounds?: [number, number, number, number];
|
|
863
|
-
bearing?: number;
|
|
864
|
-
pitch?: number;
|
|
865
|
-
}
|
package/src/index.tsx
CHANGED
|
@@ -18,10 +18,5 @@ let Autocomplete =
|
|
|
18
18
|
Platform.OS !== "web" ? require("./ui/autocomplete").default : {};
|
|
19
19
|
export { Autocomplete };
|
|
20
20
|
|
|
21
|
-
let Map = Platform.OS !== "web" ? require("./ui/map").default : {};
|
|
22
|
-
export { Map };
|
|
23
|
-
|
|
24
|
-
export type { RadarMapProps } from "./ui/map";
|
|
25
|
-
|
|
26
21
|
export * from "./@types/types";
|
|
27
22
|
export * from "./@types/RadarNativeInterface";
|
package/src/ui/styles.js
CHANGED
|
@@ -106,20 +106,6 @@ const styles = StyleSheet.create({
|
|
|
106
106
|
height: 15,
|
|
107
107
|
resizeMode: 'contain',
|
|
108
108
|
},
|
|
109
|
-
mapContainer: {
|
|
110
|
-
flex: 1,
|
|
111
|
-
},
|
|
112
|
-
map: {
|
|
113
|
-
flex: 1,
|
|
114
|
-
},
|
|
115
|
-
mapLogo: {
|
|
116
|
-
position: 'absolute',
|
|
117
|
-
bottom: -10,
|
|
118
|
-
left: 5,
|
|
119
|
-
width: 50,
|
|
120
|
-
height: 50,
|
|
121
|
-
resizeMode: 'contain',
|
|
122
|
-
},
|
|
123
109
|
});
|
|
124
110
|
|
|
125
111
|
export default styles;
|
package/src/version.ts
CHANGED
package/dist/ui/map.d.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { RadarMapOptions } from '../@types/types';
|
|
3
|
-
export interface RadarMapProps {
|
|
4
|
-
/**
|
|
5
|
-
* Configuration options for the RadarMap component
|
|
6
|
-
*/
|
|
7
|
-
mapOptions?: RadarMapOptions;
|
|
8
|
-
/**
|
|
9
|
-
* Child components to render within the map
|
|
10
|
-
*/
|
|
11
|
-
children?: React.ReactNode;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* TypeScript wrapper for the RadarMap component that provides type safety
|
|
15
|
-
* while delegating the implementation to the JavaScript version.
|
|
16
|
-
*
|
|
17
|
-
* @param props - The props for the RadarMap component
|
|
18
|
-
* @returns The RadarMap component with proper TypeScript typing
|
|
19
|
-
*/
|
|
20
|
-
declare const RadarMap: React.FC<RadarMapProps>;
|
|
21
|
-
export default RadarMap;
|
package/dist/ui/map.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const react_1 = __importDefault(require("react"));
|
|
7
|
-
const RadarMapJS = require('./map.jsx').default;
|
|
8
|
-
/**
|
|
9
|
-
* TypeScript wrapper for the RadarMap component that provides type safety
|
|
10
|
-
* while delegating the implementation to the JavaScript version.
|
|
11
|
-
*
|
|
12
|
-
* @param props - The props for the RadarMap component
|
|
13
|
-
* @returns The RadarMap component with proper TypeScript typing
|
|
14
|
-
*/
|
|
15
|
-
const RadarMap = (props) => {
|
|
16
|
-
return react_1.default.createElement(RadarMapJS, props);
|
|
17
|
-
};
|
|
18
|
-
exports.default = RadarMap;
|
package/dist/ui/map.jsx
DELETED
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import React, { useState, useEffect } from 'react';
|
|
2
|
-
import { View, Image } from 'react-native';
|
|
3
|
-
import Radar from '../index.native';
|
|
4
|
-
import { getHost, getPublishableKey } from '../helpers';
|
|
5
|
-
import styles from './styles';
|
|
6
|
-
|
|
7
|
-
let MapLibreGL;
|
|
8
|
-
try {
|
|
9
|
-
MapLibreGL = require('@maplibre/maplibre-react-native');
|
|
10
|
-
} catch (e) {
|
|
11
|
-
MapLibreGL = null;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const DEFAULT_STYLE = 'radar-default-v1';
|
|
15
|
-
|
|
16
|
-
const createStyleURL = async (style = DEFAULT_STYLE) => {
|
|
17
|
-
const host = await getHost();
|
|
18
|
-
const publishableKey = await getPublishableKey();
|
|
19
|
-
return `${host}/maps/styles/${style}?publishableKey=${publishableKey}`;
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* RadarMap component for displaying maps with Radar integration
|
|
24
|
-
* @param {Object} props - Component props
|
|
25
|
-
* @param {Object} [props.mapOptions] - Map configuration options
|
|
26
|
-
* @param {string} [props.mapOptions.mapStyle] - Map style identifier (defaults to 'radar-default-v1')
|
|
27
|
-
* @param {boolean} [props.mapOptions.showUserLocation] - Whether to show the user's location on the map (default: true)
|
|
28
|
-
* @param {function} [props.mapOptions.onRegionDidChange] - Callback fired when the map region changes
|
|
29
|
-
* @param {Object} props.mapOptions.onRegionDidChange.feature - The region feature data
|
|
30
|
-
* @param {function} [props.mapOptions.onDidFinishLoadingMap] - Callback fired when the map finishes loading
|
|
31
|
-
* @param {function} [props.mapOptions.onWillStartLoadingMap] - Callback fired when the map starts loading
|
|
32
|
-
* @param {function} [props.mapOptions.onDidFailLoadingMap] - Callback fired when the map fails to load
|
|
33
|
-
* @param {React.ReactNode} [props.children] - Child components to render within the map
|
|
34
|
-
* @returns {React.Component|null} The RadarMap component or null if dependencies are missing
|
|
35
|
-
*/
|
|
36
|
-
|
|
37
|
-
const RadarMap = ({ mapOptions, children }) => {
|
|
38
|
-
const [styleURL, setStyleURL] = useState(null);
|
|
39
|
-
const [userLocation, setUserLocation] = useState(null);
|
|
40
|
-
|
|
41
|
-
useEffect(() => {
|
|
42
|
-
createStyleURL(mapOptions?.mapStyle || DEFAULT_STYLE).then((result) => {
|
|
43
|
-
setStyleURL(result);
|
|
44
|
-
});
|
|
45
|
-
}, [mapOptions]);
|
|
46
|
-
|
|
47
|
-
useEffect(() => {
|
|
48
|
-
Radar.getLocation().then((result) => {
|
|
49
|
-
if (result?.location?.latitude && result?.location?.longitude) {
|
|
50
|
-
setUserLocation({
|
|
51
|
-
latitude: result.location.latitude,
|
|
52
|
-
longitude: result.location.longitude,
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
}).catch((err) => {
|
|
56
|
-
// eslint-disable-next-line no-console
|
|
57
|
-
console.warn(`Radar SDK: Failed to get location: ${err}`);
|
|
58
|
-
});
|
|
59
|
-
}, [mapOptions]);
|
|
60
|
-
|
|
61
|
-
if (!styleURL) {
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (!MapLibreGL) {
|
|
66
|
-
return null;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const geoJSONUserLocation = {
|
|
70
|
-
type: 'FeatureCollection',
|
|
71
|
-
features: userLocation?.longitude !== undefined ? [
|
|
72
|
-
{
|
|
73
|
-
type: 'Feature',
|
|
74
|
-
geometry: {
|
|
75
|
-
type: 'Point',
|
|
76
|
-
coordinates: [userLocation.longitude, userLocation.latitude],
|
|
77
|
-
},
|
|
78
|
-
},
|
|
79
|
-
] : [],
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
const userLocationMapIndicator = (
|
|
83
|
-
<MapLibreGL.ShapeSource
|
|
84
|
-
id="user-location"
|
|
85
|
-
shape={geoJSONUserLocation}
|
|
86
|
-
>
|
|
87
|
-
<MapLibreGL.CircleLayer
|
|
88
|
-
id="user-location-inner"
|
|
89
|
-
style={{
|
|
90
|
-
circleRadius: 15,
|
|
91
|
-
circleColor: '#000257',
|
|
92
|
-
circleOpacity: 0.2,
|
|
93
|
-
circlePitchAlignment: 'map',
|
|
94
|
-
}}
|
|
95
|
-
/>
|
|
96
|
-
<MapLibreGL.CircleLayer
|
|
97
|
-
id="user-location-middle"
|
|
98
|
-
style={{
|
|
99
|
-
circleRadius: 9,
|
|
100
|
-
circleColor: '#fff',
|
|
101
|
-
circlePitchAlignment: 'map',
|
|
102
|
-
}}
|
|
103
|
-
/>
|
|
104
|
-
<MapLibreGL.CircleLayer
|
|
105
|
-
id="user-location-outer"
|
|
106
|
-
style={{
|
|
107
|
-
circleRadius: 6,
|
|
108
|
-
circleColor: '#000257',
|
|
109
|
-
circlePitchAlignment: 'map',
|
|
110
|
-
}}
|
|
111
|
-
/>
|
|
112
|
-
</MapLibreGL.ShapeSource>
|
|
113
|
-
);
|
|
114
|
-
|
|
115
|
-
return (
|
|
116
|
-
<View style={styles.mapContainer}>
|
|
117
|
-
<MapLibreGL.MapView
|
|
118
|
-
style={styles.map}
|
|
119
|
-
pitchEnabled={false}
|
|
120
|
-
compassEnabled={false}
|
|
121
|
-
logoEnabled={false}
|
|
122
|
-
attributionEnabled
|
|
123
|
-
onRegionDidChange={mapOptions?.onRegionDidChange ? mapOptions.onRegionDidChange : null}
|
|
124
|
-
onDidFinishLoadingMap={mapOptions?.onDidFinishLoadingMap ? mapOptions.onDidFinishLoadingMap : null}
|
|
125
|
-
onWillStartLoadingMap={mapOptions?.onWillStartLoadingMap ? mapOptions.onWillStartLoadingMap : null}
|
|
126
|
-
onDidFailLoadingMap={mapOptions?.onDidFailLoadingMap ? mapOptions.onDidFailLoadingMap : null}
|
|
127
|
-
mapStyle={styleURL}>
|
|
128
|
-
{mapOptions?.showUserLocation !== false && userLocationMapIndicator}
|
|
129
|
-
{children}
|
|
130
|
-
</MapLibreGL.MapView>
|
|
131
|
-
<Image
|
|
132
|
-
source={require('./map-logo.png')}
|
|
133
|
-
style={styles.mapLogo}
|
|
134
|
-
/>
|
|
135
|
-
</View>
|
|
136
|
-
);
|
|
137
|
-
};
|
|
138
|
-
|
|
139
|
-
export default RadarMap;
|
package/src/ui/map.jsx
DELETED
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import React, { useState, useEffect } from 'react';
|
|
2
|
-
import { View, Image } from 'react-native';
|
|
3
|
-
import Radar from '../index.native';
|
|
4
|
-
import { getHost, getPublishableKey } from '../helpers';
|
|
5
|
-
import styles from './styles';
|
|
6
|
-
|
|
7
|
-
let MapLibreGL;
|
|
8
|
-
try {
|
|
9
|
-
MapLibreGL = require('@maplibre/maplibre-react-native');
|
|
10
|
-
} catch (e) {
|
|
11
|
-
MapLibreGL = null;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const DEFAULT_STYLE = 'radar-default-v1';
|
|
15
|
-
|
|
16
|
-
const createStyleURL = async (style = DEFAULT_STYLE) => {
|
|
17
|
-
const host = await getHost();
|
|
18
|
-
const publishableKey = await getPublishableKey();
|
|
19
|
-
return `${host}/maps/styles/${style}?publishableKey=${publishableKey}`;
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* RadarMap component for displaying maps with Radar integration
|
|
24
|
-
* @param {Object} props - Component props
|
|
25
|
-
* @param {Object} [props.mapOptions] - Map configuration options
|
|
26
|
-
* @param {string} [props.mapOptions.mapStyle] - Map style identifier (defaults to 'radar-default-v1')
|
|
27
|
-
* @param {boolean} [props.mapOptions.showUserLocation] - Whether to show the user's location on the map (default: true)
|
|
28
|
-
* @param {function} [props.mapOptions.onRegionDidChange] - Callback fired when the map region changes
|
|
29
|
-
* @param {Object} props.mapOptions.onRegionDidChange.feature - The region feature data
|
|
30
|
-
* @param {function} [props.mapOptions.onDidFinishLoadingMap] - Callback fired when the map finishes loading
|
|
31
|
-
* @param {function} [props.mapOptions.onWillStartLoadingMap] - Callback fired when the map starts loading
|
|
32
|
-
* @param {function} [props.mapOptions.onDidFailLoadingMap] - Callback fired when the map fails to load
|
|
33
|
-
* @param {React.ReactNode} [props.children] - Child components to render within the map
|
|
34
|
-
* @returns {React.Component|null} The RadarMap component or null if dependencies are missing
|
|
35
|
-
*/
|
|
36
|
-
|
|
37
|
-
const RadarMap = ({ mapOptions, children }) => {
|
|
38
|
-
const [styleURL, setStyleURL] = useState(null);
|
|
39
|
-
const [userLocation, setUserLocation] = useState(null);
|
|
40
|
-
|
|
41
|
-
useEffect(() => {
|
|
42
|
-
createStyleURL(mapOptions?.mapStyle || DEFAULT_STYLE).then((result) => {
|
|
43
|
-
setStyleURL(result);
|
|
44
|
-
});
|
|
45
|
-
}, [mapOptions]);
|
|
46
|
-
|
|
47
|
-
useEffect(() => {
|
|
48
|
-
Radar.getLocation().then((result) => {
|
|
49
|
-
if (result?.location?.latitude && result?.location?.longitude) {
|
|
50
|
-
setUserLocation({
|
|
51
|
-
latitude: result.location.latitude,
|
|
52
|
-
longitude: result.location.longitude,
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
}).catch((err) => {
|
|
56
|
-
// eslint-disable-next-line no-console
|
|
57
|
-
console.warn(`Radar SDK: Failed to get location: ${err}`);
|
|
58
|
-
});
|
|
59
|
-
}, [mapOptions]);
|
|
60
|
-
|
|
61
|
-
if (!styleURL) {
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (!MapLibreGL) {
|
|
66
|
-
return null;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const geoJSONUserLocation = {
|
|
70
|
-
type: 'FeatureCollection',
|
|
71
|
-
features: userLocation?.longitude !== undefined ? [
|
|
72
|
-
{
|
|
73
|
-
type: 'Feature',
|
|
74
|
-
geometry: {
|
|
75
|
-
type: 'Point',
|
|
76
|
-
coordinates: [userLocation.longitude, userLocation.latitude],
|
|
77
|
-
},
|
|
78
|
-
},
|
|
79
|
-
] : [],
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
const userLocationMapIndicator = (
|
|
83
|
-
<MapLibreGL.ShapeSource
|
|
84
|
-
id="user-location"
|
|
85
|
-
shape={geoJSONUserLocation}
|
|
86
|
-
>
|
|
87
|
-
<MapLibreGL.CircleLayer
|
|
88
|
-
id="user-location-inner"
|
|
89
|
-
style={{
|
|
90
|
-
circleRadius: 15,
|
|
91
|
-
circleColor: '#000257',
|
|
92
|
-
circleOpacity: 0.2,
|
|
93
|
-
circlePitchAlignment: 'map',
|
|
94
|
-
}}
|
|
95
|
-
/>
|
|
96
|
-
<MapLibreGL.CircleLayer
|
|
97
|
-
id="user-location-middle"
|
|
98
|
-
style={{
|
|
99
|
-
circleRadius: 9,
|
|
100
|
-
circleColor: '#fff',
|
|
101
|
-
circlePitchAlignment: 'map',
|
|
102
|
-
}}
|
|
103
|
-
/>
|
|
104
|
-
<MapLibreGL.CircleLayer
|
|
105
|
-
id="user-location-outer"
|
|
106
|
-
style={{
|
|
107
|
-
circleRadius: 6,
|
|
108
|
-
circleColor: '#000257',
|
|
109
|
-
circlePitchAlignment: 'map',
|
|
110
|
-
}}
|
|
111
|
-
/>
|
|
112
|
-
</MapLibreGL.ShapeSource>
|
|
113
|
-
);
|
|
114
|
-
|
|
115
|
-
return (
|
|
116
|
-
<View style={styles.mapContainer}>
|
|
117
|
-
<MapLibreGL.MapView
|
|
118
|
-
style={styles.map}
|
|
119
|
-
pitchEnabled={false}
|
|
120
|
-
compassEnabled={false}
|
|
121
|
-
logoEnabled={false}
|
|
122
|
-
attributionEnabled
|
|
123
|
-
onRegionDidChange={mapOptions?.onRegionDidChange ? mapOptions.onRegionDidChange : null}
|
|
124
|
-
onDidFinishLoadingMap={mapOptions?.onDidFinishLoadingMap ? mapOptions.onDidFinishLoadingMap : null}
|
|
125
|
-
onWillStartLoadingMap={mapOptions?.onWillStartLoadingMap ? mapOptions.onWillStartLoadingMap : null}
|
|
126
|
-
onDidFailLoadingMap={mapOptions?.onDidFailLoadingMap ? mapOptions.onDidFailLoadingMap : null}
|
|
127
|
-
mapStyle={styleURL}>
|
|
128
|
-
{mapOptions?.showUserLocation !== false && userLocationMapIndicator}
|
|
129
|
-
{children}
|
|
130
|
-
</MapLibreGL.MapView>
|
|
131
|
-
<Image
|
|
132
|
-
source={require('./map-logo.png')}
|
|
133
|
-
style={styles.mapLogo}
|
|
134
|
-
/>
|
|
135
|
-
</View>
|
|
136
|
-
);
|
|
137
|
-
};
|
|
138
|
-
|
|
139
|
-
export default RadarMap;
|
package/src/ui/map.tsx
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { RadarMapOptions } from '../@types/types';
|
|
3
|
-
|
|
4
|
-
const RadarMapJS = require('./map.jsx').default;
|
|
5
|
-
|
|
6
|
-
export interface RadarMapProps {
|
|
7
|
-
/**
|
|
8
|
-
* Configuration options for the RadarMap component
|
|
9
|
-
*/
|
|
10
|
-
mapOptions?: RadarMapOptions;
|
|
11
|
-
/**
|
|
12
|
-
* Child components to render within the map
|
|
13
|
-
*/
|
|
14
|
-
children?: React.ReactNode;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* TypeScript wrapper for the RadarMap component that provides type safety
|
|
19
|
-
* while delegating the implementation to the JavaScript version.
|
|
20
|
-
*
|
|
21
|
-
* @param props - The props for the RadarMap component
|
|
22
|
-
* @returns The RadarMap component with proper TypeScript typing
|
|
23
|
-
*/
|
|
24
|
-
const RadarMap: React.FC<RadarMapProps> = (props) => {
|
|
25
|
-
return React.createElement(RadarMapJS, props);
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
export default RadarMap;
|