react-native-pointr 9.1.0 → 9.3.1

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 (78) hide show
  1. package/API_REFERENCE.md +887 -0
  2. package/CHANGELOG.md +35 -0
  3. package/EXTENDING.md +419 -0
  4. package/README.md +221 -117
  5. package/WAYFINDING_EVENTS.md +243 -0
  6. package/android/build.gradle +3 -16
  7. package/android/src/main/java/com/pointr/PTRCoreExtensions.kt +126 -0
  8. package/android/src/main/java/com/pointr/PTRMapWidgetCommandType.kt +3 -1
  9. package/android/src/main/java/com/pointr/PTRMapWidgetManager.kt +160 -11
  10. package/android/src/main/java/com/pointr/PointrModule.kt +106 -3
  11. package/example/pointr_rn_demo/.bundle/config +2 -0
  12. package/example/pointr_rn_demo/.eslintrc.js +4 -0
  13. package/example/pointr_rn_demo/.prettierrc.js +5 -0
  14. package/example/pointr_rn_demo/.watchmanconfig +1 -0
  15. package/example/pointr_rn_demo/App.tsx +323 -0
  16. package/example/pointr_rn_demo/Gemfile +16 -0
  17. package/example/pointr_rn_demo/Gemfile.lock +111 -0
  18. package/example/pointr_rn_demo/README.md +188 -0
  19. package/example/pointr_rn_demo/__tests__/App.test.tsx +13 -0
  20. package/example/pointr_rn_demo/android/app/build.gradle +119 -0
  21. package/example/pointr_rn_demo/android/app/debug.keystore +0 -0
  22. package/example/pointr_rn_demo/android/app/proguard-rules.pro +10 -0
  23. package/example/pointr_rn_demo/android/app/src/main/AndroidManifest.xml +27 -0
  24. package/example/pointr_rn_demo/android/app/src/main/java/com/pointr_rn_demo/MainActivity.kt +22 -0
  25. package/example/pointr_rn_demo/android/app/src/main/java/com/pointr_rn_demo/MainApplication.kt +27 -0
  26. package/example/pointr_rn_demo/android/app/src/main/res/drawable/rn_edit_text_material.xml +37 -0
  27. package/example/pointr_rn_demo/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  28. package/example/pointr_rn_demo/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
  29. package/example/pointr_rn_demo/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  30. package/example/pointr_rn_demo/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
  31. package/example/pointr_rn_demo/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  32. package/example/pointr_rn_demo/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
  33. package/example/pointr_rn_demo/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  34. package/example/pointr_rn_demo/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  35. package/example/pointr_rn_demo/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  36. package/example/pointr_rn_demo/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  37. package/example/pointr_rn_demo/android/app/src/main/res/values/strings.xml +3 -0
  38. package/example/pointr_rn_demo/android/app/src/main/res/values/styles.xml +9 -0
  39. package/example/pointr_rn_demo/android/build.gradle +32 -0
  40. package/example/pointr_rn_demo/android/gradle.properties +44 -0
  41. package/example/pointr_rn_demo/android/settings.gradle +6 -0
  42. package/example/pointr_rn_demo/app.json +4 -0
  43. package/example/pointr_rn_demo/babel.config.js +3 -0
  44. package/example/pointr_rn_demo/index.js +16 -0
  45. package/example/pointr_rn_demo/ios/.xcode.env +11 -0
  46. package/example/pointr_rn_demo/ios/Podfile +40 -0
  47. package/example/pointr_rn_demo/ios/Podfile.lock +2767 -0
  48. package/example/pointr_rn_demo/ios/pointr_rn_demo/AppDelegate.swift +48 -0
  49. package/example/pointr_rn_demo/ios/pointr_rn_demo/Images.xcassets/AppIcon.appiconset/Contents.json +53 -0
  50. package/example/pointr_rn_demo/ios/pointr_rn_demo/Images.xcassets/Contents.json +6 -0
  51. package/example/pointr_rn_demo/ios/pointr_rn_demo/Info.plist +63 -0
  52. package/example/pointr_rn_demo/ios/pointr_rn_demo/LaunchScreen.storyboard +47 -0
  53. package/example/pointr_rn_demo/ios/pointr_rn_demo/PrivacyInfo.xcprivacy +37 -0
  54. package/example/pointr_rn_demo/ios/pointr_rn_demo.xcodeproj/project.pbxproj +496 -0
  55. package/example/pointr_rn_demo/ios/pointr_rn_demo.xcodeproj/xcshareddata/xcschemes/pointr_rn_demo.xcscheme +88 -0
  56. package/example/pointr_rn_demo/ios/pointr_rn_demo.xcworkspace/contents.xcworkspacedata +10 -0
  57. package/example/pointr_rn_demo/jest.config.js +3 -0
  58. package/example/pointr_rn_demo/metro.config.js +22 -0
  59. package/example/pointr_rn_demo/package-lock.json +11747 -0
  60. package/example/pointr_rn_demo/package.json +46 -0
  61. package/example/pointr_rn_demo/prepare-demo-distribution.sh +103 -0
  62. package/example/pointr_rn_demo/tsconfig.json +5 -0
  63. package/ios/PTRMapWidgetContainerView.swift +59 -7
  64. package/ios/PTRMapWidgetManager-Bridging.m +65 -1
  65. package/ios/PTRMapWidgetManager.swift +185 -144
  66. package/ios/PTRNativeLibrary-Bridging.m +4 -0
  67. package/ios/PTRNativeLibrary.swift +244 -18
  68. package/package.json +16 -2
  69. package/prepare-distribution.sh +84 -0
  70. package/react-native-pointr.podspec +1 -1
  71. package/src/PTRCommand.ts +34 -1
  72. package/src/PTRMapWidgetUtils.ts +105 -5
  73. package/src/PTRPoiManager.ts +20 -0
  74. package/src/index.tsx +40 -1
  75. package/src/types/PTRGeometry.ts +70 -0
  76. package/src/types/PTRPoi.ts +49 -0
  77. package/src/types/PTRPosition.ts +22 -0
  78. package/src/types/PTRWayfindingEvent.ts +18 -0
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "pointr_rn_demo",
3
+ "version": "9.3.1",
4
+ "private": true,
5
+ "scripts": {
6
+ "clean": "watchman watch-del-all || true && rm -rf node_modules ios/Pods ios/Podfile.lock ios/build android/.gradle android/app/build android/build",
7
+ "reset": "npm run clean && npm install && cd ios && pod install && cd ..",
8
+ "start": "npx react-native start",
9
+ "start:clean": "npx react-native start --reset-cache",
10
+ "android": "npx react-native run-android",
11
+ "ios": "npx react-native run-ios",
12
+ "lint": "eslint .",
13
+ "test": "jest",
14
+ "prepare-dist": "chmod +x prepare-demo-distribution.sh && ./prepare-demo-distribution.sh"
15
+ },
16
+ "dependencies": {
17
+ "@react-native/new-app-screen": "0.82.1",
18
+ "react": "19.1.1",
19
+ "react-native": "0.82.1",
20
+ "react-native-pointr": "file:../../../react-native-pointr",
21
+ "react-native-safe-area-context": "^5.6.2"
22
+ },
23
+ "devDependencies": {
24
+ "@babel/core": "^7.25.2",
25
+ "@babel/preset-env": "^7.25.3",
26
+ "@babel/runtime": "^7.25.0",
27
+ "@react-native-community/cli": "20.0.0",
28
+ "@react-native-community/cli-platform-android": "20.0.0",
29
+ "@react-native-community/cli-platform-ios": "20.0.0",
30
+ "@react-native/babel-preset": "0.82.1",
31
+ "@react-native/eslint-config": "0.82.1",
32
+ "@react-native/metro-config": "0.82.1",
33
+ "@react-native/typescript-config": "0.82.1",
34
+ "@types/jest": "^29.5.13",
35
+ "@types/react": "^19.1.1",
36
+ "@types/react-test-renderer": "^19.1.0",
37
+ "eslint": "^8.19.0",
38
+ "jest": "^29.6.3",
39
+ "prettier": "2.8.8",
40
+ "react-test-renderer": "19.1.1",
41
+ "typescript": "^5.8.3"
42
+ },
43
+ "engines": {
44
+ "node": ">=20"
45
+ }
46
+ }
@@ -0,0 +1,103 @@
1
+ #!/bin/bash
2
+
3
+ # Script to prepare pointr_rn_demo project for distribution
4
+ # This script cleans build artifacts, removes sensitive information, and creates a compressed archive
5
+
6
+ set -e # Exit on error
7
+
8
+ PROJECT_NAME="pointr_rn_demo"
9
+ VERSION=$(grep -o '"version": "[^"]*"' package.json | head -1 | sed 's/"version": "\(.*\)"/\1/')
10
+ OUTPUT_NAME="${PROJECT_NAME}-${VERSION}.zip"
11
+ TEMP_DIR="${PROJECT_NAME}-${VERSION}"
12
+ DIST_DIR="../../dist"
13
+
14
+ # Create dist directory if it doesn't exist and get absolute path
15
+ mkdir -p "${DIST_DIR}"
16
+ DIST_DIR_ABS=$(cd "${DIST_DIR}" && pwd)
17
+
18
+ echo "🧹 Starting demo project cleanup and preparation..."
19
+ echo "📌 Project version: ${VERSION}"
20
+
21
+ # Create a temporary copy of the project
22
+ echo "📦 Creating temporary copy..."
23
+ rsync -a --exclude="node_modules" \
24
+ --exclude="ios/Pods" \
25
+ --exclude="ios/build" \
26
+ --exclude="ios/Podfile.lock" \
27
+ --exclude="android/build" \
28
+ --exclude="android/app/build" \
29
+ --exclude="android/.gradle" \
30
+ --exclude="android/local.properties" \
31
+ --exclude=".DS_Store" \
32
+ --exclude="*.log" \
33
+ --exclude=".git" \
34
+ --exclude="prepare-demo-distribution.sh" \
35
+ ./ "../${TEMP_DIR}/"
36
+
37
+ cd "../${TEMP_DIR}"
38
+
39
+ # Remove sensitive information from App.tsx
40
+ echo "🔒 Removing sensitive information..."
41
+ if [ -f "App.tsx" ]; then
42
+ # Replace credentials with placeholder values
43
+ sed -i '' 's/"1ee58e56-fc35-4ec4-b32e-5d49e65fb52d"/"YOUR_CLIENT_ID"/g' App.tsx
44
+ sed -i '' 's/"af5d9431-56a3-46a9-ae0a-65d9757528d1"/"YOUR_LICENSE_KEY"/g' App.tsx
45
+ sed -i '' 's|"https://sample-app-v9.pointr.cloud"|"https://your-instance.pointr.cloud"|g' App.tsx
46
+ echo "✓ Replaced credentials in App.tsx"
47
+ fi
48
+
49
+ # Remove sensitive information from Android build.gradle
50
+ if [ -f "android/build.gradle" ]; then
51
+ sed -i '' "s/username 'discover'/username 'YOUR_MAVEN_USERNAME'/g" android/build.gradle
52
+ sed -i '' "s/password 'AKCp5ejy2i3iwwJbXZzCTvtgcarhYWLztx1TCxXzBdhhMK4Qjhp945jz7JwtMK5SBoARGLkdF'/password 'YOUR_MAVEN_PASSWORD'/g" android/build.gradle
53
+ echo "✓ Replaced Maven credentials in android/build.gradle"
54
+ fi
55
+
56
+ # Remove sensitive information from iOS Podfile
57
+ if [ -f "ios/Podfile" ]; then
58
+ sed -i '' "s|ENV\['POINTR_SDK_TOKEN'\] = 'sv=2023-01-03&st=2024-10-23T06%3A40%3A13Z&se=2035-11-08T06%3A40%3A00Z&sr=c&sp=r&sig=WaCbhxt4pMqf9Oqzgf%2FnDj1SbdvyzwCtFdsWLW4KFqA%3D'|ENV['POINTR_SDK_TOKEN'] = 'YOUR_POINTR_SDK_TOKEN'|g" ios/Podfile
59
+ echo "✓ Replaced Pointr SDK token in ios/Podfile"
60
+ fi
61
+
62
+ # Clean any remaining build artifacts
63
+ echo "🤖 Cleaning build artifacts..."
64
+ rm -rf node_modules
65
+ rm -rf ios/Pods ios/build ios/Podfile.lock
66
+ rm -rf android/build android/app/build android/.gradle
67
+ rm -f android/local.properties
68
+ rm -rf .gradle
69
+ rm -f .DS_Store
70
+ rm -f *.log npm-debug.log* yarn-debug.log* yarn-error.log*
71
+ rm -f package-lock.json yarn.lock
72
+
73
+ # Remove IDE and development files
74
+ echo "🗑️ Removing development files..."
75
+ rm -rf .vscode .idea
76
+ rm -rf .git .gitignore .github
77
+ rm -f .watchmanconfig
78
+
79
+ # Create the zip archive
80
+ echo "📦 Creating compressed archive..."
81
+ cd ..
82
+ zip -r "${OUTPUT_NAME}" "${TEMP_DIR}" -x "*.DS_Store" -q
83
+
84
+ # Move the archive to dist directory
85
+ mv "${OUTPUT_NAME}" "${DIST_DIR_ABS}/"
86
+
87
+ # Clean up temporary directory
88
+ echo "🧼 Cleaning up temporary files..."
89
+ rm -rf "${TEMP_DIR}"
90
+
91
+ cd "${PROJECT_NAME}"
92
+
93
+ echo "✅ Demo distribution package created successfully!"
94
+ echo "📦 Output file: ${OUTPUT_NAME}"
95
+ echo "📍 Location: ${DIST_DIR_ABS}/${OUTPUT_NAME}"
96
+ echo ""
97
+ echo "⚠️ Note: All sensitive credentials have been replaced with placeholders:"
98
+ echo " • App.tsx: YOUR_CLIENT_ID, YOUR_LICENSE_KEY, your-instance.pointr.cloud"
99
+ echo " • android/build.gradle: YOUR_MAVEN_USERNAME, YOUR_MAVEN_PASSWORD"
100
+ echo " • ios/Podfile: YOUR_POINTR_SDK_TOKEN"
101
+ echo ""
102
+ echo " Recipients must configure all credentials before running the app."
103
+ echo " See README.md in the package for detailed setup instructions."
@@ -0,0 +1,5 @@
1
+ {
2
+ "extends": "@react-native/typescript-config",
3
+ "include": ["**/*.ts", "**/*.tsx"],
4
+ "exclude": ["**/node_modules", "**/Pods"]
5
+ }
@@ -1,28 +1,79 @@
1
1
  import UIKit
2
2
  import PointrKit
3
3
 
4
- @objc class PTRMapWidgetContainerView: UIView, PTRSiteManagerDelegate, PTRDataManagerDelegate, PTRWayfindingManagerDelegate {
4
+ @objc class PTRMapWidgetContainerView: UIView, PTRSiteManagerDelegate, PTRDataManagerDelegate, PTRWayfindingManagerDelegate, PTRMapWidgetEventsListener {
5
5
 
6
6
  @objc var onMapWidgetDidEndLoading: RCTBubblingEventBlock?
7
+
8
+ @objc var onWayfindingEvent: RCTBubblingEventBlock?
7
9
 
8
10
  private(set) var mapWidget: PTRMapWidgetViewController?
9
11
  var semaphore: DispatchSemaphore?
10
12
  var site: PTRSite?
11
13
 
14
+ // Adapter to bridge PTRWayfindingEventsHandler (class) to our container callbacks
15
+ private class WayfindingEventsAdapter: PTRWayfindingEventsHandler {
16
+ weak var container: PTRMapWidgetContainerView?
17
+
18
+ init(container: PTRMapWidgetContainerView, mapWidget: PTRMapWidgetViewController) {
19
+ self.container = container
20
+ super.init(mapWidget: mapWidget)
21
+ }
22
+
23
+ override func wayfindingDidTapCancel(destination: PTRFeature) {
24
+ print("PTRMapWidget - wayfinding cancelled")
25
+ super.wayfindingDidTapCancel(destination: destination)
26
+ container?.ptrWayfindingEvent(withParameters: ["type": -1, "poi": destination.dict])
27
+ }
28
+
29
+ override func wayfindingDidTapClose(destination: PTRFeature) {
30
+ print("PTRMapWidget - wayfinding ended")
31
+ super.wayfindingDidTapClose(destination: destination)
32
+ container?.ptrWayfindingEvent(withParameters: ["type": 1, "poi": destination.dict])
33
+ }
34
+ }
35
+
36
+ func mapWidgetWillPresentWayfinding(_ mapWidget: PTRMapWidgetViewController) {
37
+ switch (mapWidget.layoutState) {
38
+ case .staticWayfinding(_, let destination, _):
39
+ print("PTRMapWidget - wayfinding started. Static path")
40
+ ptrWayfindingEvent(withParameters: ["type": 0, "poi": destination.dict])
41
+ case .wayfinding(let destination, _):
42
+ print("PTRMapWidget - wayfinding started. Dynamic path")
43
+ ptrWayfindingEvent(withParameters: ["type": 0, "poi": destination.dict])
44
+ default:
45
+ print("PTRMapWidget - Widget presented without wayfinding")
46
+ }
47
+ }
48
+
49
+ private var wayfindingEventsAdapter: WayfindingEventsAdapter?
50
+
12
51
  private let kLayerStaticPath = "static-path"
13
52
 
14
53
  @objc func ptrMapWidgetDidEndLoading(withParameters parameters: [String: Any]) {
15
54
  onMapWidgetDidEndLoading?(parameters)
16
55
  }
56
+
57
+ @objc func ptrWayfindingEvent(withParameters parameters: [String: Any]) {
58
+ print("PTRMapWidget - Sending wayfinding event \(parameters)")
59
+ onWayfindingEvent?(parameters)
60
+ }
17
61
 
18
62
  @objc func getMapWidget(_ action: PTRMapWidgetAction) -> PTRMapWidgetViewController {
19
- if waitForPointrState() != .running {
20
- print("Pointr is not running")
63
+ if PTRNativeLibrary.mapWidgetConfiguration.sdkParams == nil {
64
+ if waitForPointrState() != .running {
65
+ print("PTRMapWidget - Pointr is not running")
66
+ }
21
67
  }
22
-
23
- print("initializing map widget")
24
- mapWidget = PTRMapWidgetViewController(action: action, configuration: PTRNativeLibrary.mapWidgetConfiguration)
25
- return mapWidget!
68
+ print("PTRMapWidget - initializing map widget")
69
+ let mapWidget = PTRMapWidgetViewController(action: action, configuration: PTRNativeLibrary.mapWidgetConfiguration)
70
+ self.mapWidget?.removeListener(self)
71
+ self.mapWidget = mapWidget
72
+ let adapter = WayfindingEventsAdapter(container: self, mapWidget: mapWidget)
73
+ self.wayfindingEventsAdapter = adapter
74
+ mapWidget.wayfindingEventsHandler = adapter
75
+ mapWidget.addListener(self)
76
+ return mapWidget
26
77
  }
27
78
 
28
79
  @objc func present(_ mapWidget: PTRMapWidgetViewController) {
@@ -245,3 +296,4 @@ import PointrKit
245
296
  return Pointr.shared.state
246
297
  }
247
298
  }
299
+
@@ -4,7 +4,7 @@
4
4
  #import <React/RCTLog.h>
5
5
  //
6
6
  // PTRMapWidgetManager-Bridging.m
7
- //
7
+ //
8
8
  // This file provides Objective-C bridge methods for PTRMapWidgetManager
9
9
  //
10
10
 
@@ -15,6 +15,8 @@
15
15
 
16
16
  RCT_EXPORT_VIEW_PROPERTY(onMapWidgetDidEndLoading, RCTBubblingEventBlock)
17
17
 
18
+ RCT_EXPORT_VIEW_PROPERTY(onWayfindingEvent, RCTBubblingEventBlock)
19
+
18
20
  RCT_EXTERN_METHOD(site:(nonnull NSNumber *)reactTag
19
21
  siteExternalIdentifier:(NSString *)siteExternalIdentifier)
20
22
  RCT_EXTERN_METHOD(building:(nonnull NSNumber *)reactTag
@@ -39,6 +41,11 @@ RCT_EXTERN_METHOD(staticPath:(nonnull NSNumber *)reactTag
39
41
  fromPoiExternalIdentifier:(NSString *)fromPoiExternalIdentifier
40
42
  toPoiExternalIdentifier:(NSString *)toPoiExternalIdentifier)
41
43
 
44
+ RCT_EXTERN_METHOD(staticWayfinding:(nonnull NSNumber *)reactTag
45
+ siteExternalIdentifier:(NSString *)siteExternalIdentifier
46
+ sourcePoiExternalIdentifier:(NSString *)sourcePoiExternalIdentifier
47
+ destinationPoiExternalIdentifier:(NSString *)destinationPoiExternalIdentifier)
48
+
42
49
  RCT_EXTERN_METHOD(markMyCarForLevel:(nonnull NSNumber *)reactTag
43
50
  siteExternalIdentifier:(NSString *)siteExternalIdentifier
44
51
  buildingExternalIdentifier:(NSString *)buildingExternalIdentifier
@@ -54,6 +61,63 @@ RCT_EXTERN_METHOD(markMyCarForSite:(nonnull NSNumber *)reactTag
54
61
  RCT_EXTERN_METHOD(myCarForSite:(nonnull NSNumber *)reactTag
55
62
  siteExternalIdentifier:(NSString *)siteExternalIdentifier
56
63
  animationType:(NSInteger)animationType)
64
+
65
+ RCT_EXTERN_METHOD(startAndFocus:(nonnull NSNumber *)reactTag
66
+ clientId:(NSString *)clientId
67
+ licenseKey:(NSString *)licenseKey
68
+ baseUrl:(NSString *)baseUrl
69
+ logLevel:(NSInteger)logLevel
70
+ focusType:(nonnull NSString *)focusType
71
+ siteExternalIdentifier:(NSString *)siteExternalIdentifier
72
+ )
73
+
74
+ RCT_EXTERN_METHOD(startAndFocus:(nonnull NSNumber *)reactTag
75
+ clientId:(NSString *)clientId
76
+ licenseKey:(NSString *)licenseKey
77
+ baseUrl:(NSString *)baseUrl
78
+ focusType:(nonnull NSString *)focusType
79
+ siteExternalIdentifier:(NSString *)siteExternalIdentifier
80
+ )
81
+
82
+ RCT_EXTERN_METHOD(startAndFocus:(nonnull NSNumber *)reactTag
83
+ clientId:(NSString *)clientId
84
+ licenseKey:(NSString *)licenseKey
85
+ baseUrl:(NSString *)baseUrl
86
+ focusType:(nonnull NSString *)focusType
87
+ siteExternalIdentifier:(NSString *)siteExternalIdentifier
88
+ param1:(NSString *)param1
89
+ )
90
+
91
+ RCT_EXTERN_METHOD(startAndFocus:(nonnull NSNumber *)reactTag
92
+ clientId:(NSString *)clientId
93
+ licenseKey:(NSString *)licenseKey
94
+ baseUrl:(NSString *)baseUrl
95
+ focusType:(nonnull NSString *)focusType
96
+ siteExternalIdentifier:(NSString *)siteExternalIdentifier
97
+ param1:(NSString *)param1
98
+ levelIndex:(NSInteger)levelIndex
99
+ )
100
+
101
+ RCT_EXTERN_METHOD(startAndFocus:(nonnull NSNumber *)reactTag
102
+ clientId:(NSString *)clientId
103
+ licenseKey:(NSString *)licenseKey
104
+ baseUrl:(NSString *)baseUrl
105
+ logLevel:(NSInteger)logLevel
106
+ focusType:(nonnull NSString *)focusType
107
+ siteExternalIdentifier:(NSString *)siteExternalIdentifier
108
+ param1:(NSString *)param1
109
+ )
110
+
111
+ RCT_EXTERN_METHOD(startAndFocus:(nonnull NSNumber *)reactTag
112
+ clientId:(NSString *)clientId
113
+ licenseKey:(NSString *)licenseKey
114
+ baseUrl:(NSString *)baseUrl
115
+ logLevel:(NSInteger)logLevel
116
+ focusType:(nonnull NSString *)focusType
117
+ siteExternalIdentifier:(NSString *)siteExternalIdentifier
118
+ param1:(NSString *)param1
119
+ levelIndex:(NSInteger)levelIndex
120
+ )
57
121
  @end
58
122
 
59
123
  // No additional methods are needed here as the PTRMapWidgetManager is implemented in Objective-C