react-native-acoustic-connect-beta 18.0.19 → 18.0.21

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.
@@ -85,6 +85,71 @@ def updateTealeafBasicConfig(mp, json) {
85
85
  println("Updating:$propertiesFile")
86
86
  }
87
87
 
88
+ def updateConnectBasicConfig(mp, json) {
89
+ def propertiesFile = "$mp/src/main/assets/ConnectBasicConfig.properties"
90
+ FileInputStream _file = new FileInputStream(propertiesFile);
91
+ Properties properties = new Properties();
92
+ properties.load(_file);
93
+ _file.close();
94
+
95
+ FileOutputStream out = new FileOutputStream(propertiesFile);
96
+
97
+ json.each { key, value ->
98
+ if(key != "Connect"){ return }
99
+
100
+ println("Update/Add the following key/values:")
101
+ value.each { config_key, config_value ->
102
+ if(config_value.getClass() != java.lang.String
103
+ && config_value.getClass() != java.lang.Boolean
104
+ && config_value.getClass() != java.lang.Integer){
105
+ return
106
+ }
107
+ // Just update the following items
108
+ if (config_key == "AppKey" ||
109
+ config_key == "PostMessageUrl" ||
110
+ config_key == "KillSwitchUrl" ||
111
+ config_key == "KillSwitchEnabled" ||
112
+ config_key == "KillSwitchMaxNumberOfTries" ||
113
+ config_key == "KillSwitchTimeInterval" ||
114
+ config_key == "UseWhiteList" ||
115
+ config_key == "WhiteListParam" ||
116
+ config_key == "UseRandomSample" ||
117
+ config_key == "RandomSampleParam" ||
118
+ config_key == "PrintScreen" ||
119
+ config_key == "Connection" ||
120
+ config_key == "MaxStringsLength" ||
121
+ config_key == "CookieUrl" ||
122
+ config_key == "CookieParam" ||
123
+ config_key == "CookiePath" ||
124
+ config_key == "CookieDomain" ||
125
+ config_key == "CookieExpires" ||
126
+ config_key == "CookieSecure" ||
127
+ config_key == "CookieExpiresFormat" ||
128
+ config_key == "SessionTimeout" ||
129
+ config_key == "SessionTimeoutKillSwitch" ||
130
+ config_key == "disableTLTDID" ||
131
+ config_key == "ScreenshotFormat" ||
132
+ config_key == "PercentOfScreenshotsSize" ||
133
+ config_key == "PercentToCompressImage" ||
134
+ config_key == "ScreenShotPixelDensity" ||
135
+ config_key == "LogViewLayoutOnScreenTransition" ||
136
+ config_key == "GetImageDataOnScreenLayout" ||
137
+ config_key == "SetGestureDetector" ||
138
+ config_key == "CaptureNativeGesturesOnWebview" ||
139
+ config_key == "LogLocationEnabled" ||
140
+ config_key == "LogLocationTries" ||
141
+ config_key == "LogLocationTimeout" ) {
142
+ println(config_key + "=" + config_value)
143
+ properties.setProperty(config_key, config_value.toString())
144
+ }
145
+ }
146
+ }
147
+
148
+ properties.store(out, null);
149
+ out.close();
150
+ println("Updating:$propertiesFile")
151
+ }
152
+
88
153
  def updateLayoutConfig(mp, json){
89
154
  def layoutConfigPath = "$mp/src/main/assets/TealeafLayoutConfig.json"
90
155
  def layoutConfigDefaultPath = "$mp/src/main/assets/TealeafLayoutConfigDefault.json"
@@ -299,14 +364,16 @@ try {
299
364
  println("Step 2:")
300
365
  updateTealeafBasicConfig(module_path, configJSONData)
301
366
  println("Step 3:")
302
- updateLayoutConfig(module_path, configJSONData)
367
+ updateConnectBasicConfig(module_path, configJSONData)
303
368
  println("Step 4:")
304
- updateTealeafAdvConfig(module_path, configJSONData)
369
+ updateLayoutConfig(module_path, configJSONData)
305
370
  println("Step 5:")
306
- updateEOCoreBasicConfig(module_path, configJSONData)
371
+ updateTealeafAdvConfig(module_path, configJSONData)
307
372
  println("Step 6:")
308
- updateEOCoreAdvConfig(module_path, configJSONData)
373
+ updateEOCoreBasicConfig(module_path, configJSONData)
309
374
  println("Step 7:")
375
+ updateEOCoreAdvConfig(module_path, configJSONData)
376
+ println("Step 8:")
310
377
  updateGradle(module_path, configJSONData)
311
378
  println("*********************************************************************************************")
312
379
  } catch (FileNotFoundException e) {
@@ -24,7 +24,7 @@
24
24
  "IpPlaceholder": "N/A",
25
25
  "KillSwitchAsync": true,
26
26
  "KillSwitchDelay": 300,
27
- "LibraryVersion": "11.0.7-beta",
27
+ "LibraryVersion": "11.0.9-beta",
28
28
  "LogFullRequestResponsePayloads": true,
29
29
  "MessageTypeHeader": "WorklightHit",
30
30
  "MessageTypes": "4,5",
@@ -0,0 +1,35 @@
1
+ #Fri Apr 24 05:22:50 PDT 2026
2
+ UseWhiteList=true
3
+ PrintScreen=3
4
+ UseRandomSample=false
5
+ CookieDomain=.straussandplesser.com
6
+ PostMessageUrl=https\://lib-us-2.brilliantcollector.com/collector/collectorPost
7
+ SessionTimeout=30
8
+ PercentToCompressImage=80
9
+ CookieExpires=false
10
+ AppKey=b6c3709b7a4c479bb4b5a9fb8fec324c
11
+ KillSwitchEnabled=false
12
+ ScreenShotPixelDensity=1.5
13
+ CookieExpiresFormat=ASCTIME
14
+ RandomSampleParam=
15
+ SessionTimeoutKillSwitch=false
16
+ PercentOfScreenshotsSize=40
17
+ SetGestureDetector=true
18
+ disableTLTDID=false
19
+ GetImageDataOnScreenLayout=false
20
+ CookieUrl=http\://m.straussandplesser.com
21
+ ScreenshotFormat=JPG
22
+ Connection=3
23
+ CookiePath=/
24
+ KillSwitchUrl=https\://lib-us-2.brilliantcollector.com/collector/switch/b6c3709b7a4c479bb4b5a9fb8fec324c
25
+ LogLocationEnabled=true
26
+ LogLocationTimeout=30
27
+ KillSwitchTimeInterval=5
28
+ MaxStringsLength=300
29
+ CookieParam=TLTSID
30
+ CookieSecure=true
31
+ LogViewLayoutOnScreenTransition=true
32
+ KillSwitchMaxNumberOfTries=3
33
+ WhiteListParam=id
34
+ CaptureNativeGesturesOnWebview=false
35
+ LogLocationTries=3
@@ -24,7 +24,7 @@
24
24
  "IpPlaceholder": "N/A",
25
25
  "KillSwitchAsync": true,
26
26
  "KillSwitchDelay": 300,
27
- "LibraryVersion": "10.4.26-beta",
27
+ "LibraryVersion": "10.4.28-beta",
28
28
  "LogFullRequestResponsePayloads": true,
29
29
  "MessageTypeHeader": "WorklightHit",
30
30
  "MessageTypes": "4,5",
@@ -12,10 +12,35 @@
12
12
 
13
13
  import Foundation
14
14
  import Connect
15
- import EOCore
16
- import Tealeaf
17
15
  import NitroModules
18
16
 
17
+ // Single compat entry point for the config-item store. Works against every
18
+ // shipping iOS SDK variant (Release with separate EOCore/Tealeaf, current merged
19
+ // Debug 2.1.2, future merged-only) because `ConnectApplicationHelper` ships with
20
+ // each of them. Not importing `EOCore`/`Tealeaf` avoids a link dependency on
21
+ // frameworks that aren't always packaged into the app bundle.
22
+ private enum ConnectConfigStore {
23
+ @discardableResult
24
+ static func set(_ key: String, value: Any) -> Bool {
25
+ return ConnectApplicationHelper.sharedInstance().setConfigurableItem(key, value: value)
26
+ }
27
+
28
+ static func bool(forKey key: String, default def: Bool) -> Bool {
29
+ let raw = ConnectApplicationHelper.sharedInstance().value(forConfigurableItem: key)
30
+ if let n = raw as? NSNumber { return n.boolValue }
31
+ if let s = raw as? String { return (s as NSString).boolValue }
32
+ return def
33
+ }
34
+
35
+ static func string(forKey key: String, default def: String) -> String? {
36
+ return (ConnectApplicationHelper.sharedInstance().value(forConfigurableItem: key) as? String) ?? def
37
+ }
38
+
39
+ static func number(forKey key: String, default def: Double) -> Double {
40
+ return (ConnectApplicationHelper.sharedInstance().value(forConfigurableItem: key) as? NSNumber)?.doubleValue ?? def
41
+ }
42
+ }
43
+
19
44
  class HybridAcousticConnectRN: HybridAcousticConnectRNSpec {
20
45
 
21
46
  // Constructor
@@ -92,17 +117,15 @@ class HybridAcousticConnectRN: HybridAcousticConnectRNSpec {
92
117
  if let jsonData = jsonData,
93
118
  let connectData = jsonData["Connect"] as? [String: Any] {
94
119
  for (key, value) in connectData {
95
- if tealeafKeys.contains(key) {
96
- EOApplicationHelper.sharedInstance().setConfigItem(key, value: value, forModuleName: kTLFCoreModule)
97
- } else if eocoreKeys.contains(key) {
98
- EOApplicationHelper.sharedInstance().setConfigItem(key, value: value, forModuleName: kEOCoreModule)
120
+ if tealeafKeys.contains(key) || eocoreKeys.contains(key) {
121
+ ConnectConfigStore.set(key, value: value)
99
122
  } else if key == "layoutConfig",
100
123
  let layoutConfig = value as? [String: Any] {
101
124
  if let autoLayout = layoutConfig["AutoLayout"] {
102
- EOApplicationHelper.sharedInstance().setConfigItem("AutoLayout", value: autoLayout, forModuleName: kTLFCoreModule)
125
+ ConnectConfigStore.set("AutoLayout", value: autoLayout)
103
126
  }
104
127
  if let appendMapIds = layoutConfig["AppendMapIds"] {
105
- EOApplicationHelper.sharedInstance().setConfigItem("AppendMapIds", value: appendMapIds, forModuleName: kTLFCoreModule)
128
+ ConnectConfigStore.set("AppendMapIds", value: appendMapIds)
106
129
  }
107
130
  }
108
131
  }
@@ -116,8 +139,7 @@ class HybridAcousticConnectRN: HybridAcousticConnectRNSpec {
116
139
  /// - moduleName: The name of the module to be updated. For EOCore settings, please use 'EOCore' which can be found the following files EOCoreBasicConfig.plist, EOCoreBasicConfig.properties or EOCoreAdvancedConfig.json and 'Connect' for Connect which can be found the following files ConnectBasicConfig.plist, ConnectBasicConfig.properties or ConnectAdvancedConfig.json.
117
140
  /// - Returns: Whether it was able to set the value as Boolean value.
118
141
  func setBooleanConfigItemForKey(key: String, value: Bool, moduleName: String) throws -> Bool {
119
- let result = EOApplicationHelper().setConfigItem(key, value: value, forModuleName: moduleName)
120
- return result
142
+ return ConnectConfigStore.set(key, value: value)
121
143
  }
122
144
 
123
145
  /// Sets the module's configuration item from AdvancedConfig.json or BasicConfig.plist that matches the specified key as a NString value.
@@ -127,8 +149,7 @@ class HybridAcousticConnectRN: HybridAcousticConnectRNSpec {
127
149
  /// - moduleName: The name of the module to be updated. For EOCore settings, please use 'EOCore' which can be found the following files EOCoreBasicConfig.plist, EOCoreBasicConfig.properties or EOCoreAdvancedConfig.json and 'Connect' for Connect which can be found the following files ConnectBasicConfig.plist, ConnectBasicConfig.properties or ConnectAdvancedConfig.json.
128
150
  /// - Returns: Whether it was able to set the value as Boolean value.
129
151
  func setStringItemForKey(key: String, value: String, moduleName: String) throws -> Bool {
130
- let result = EOApplicationHelper().setConfigItem(key, value: value, forModuleName: moduleName)
131
- return result
152
+ return ConnectConfigStore.set(key, value: value)
132
153
  }
133
154
 
134
155
  /// Sets the module's configuration item from AdvancedConfig.json or BasicConfig.plist that matches the specified key as a NSNumber value.
@@ -138,8 +159,7 @@ class HybridAcousticConnectRN: HybridAcousticConnectRNSpec {
138
159
  /// - moduleName: The name of the module to be updated. For EOCore settings, please use 'EOCore' which can be found the following files EOCoreBasicConfig.plist, EOCoreBasicConfig.properties or EOCoreAdvancedConfig.json and 'Connect' for Connect which can be found the following files ConnectBasicConfig.plist, ConnectBasicConfig.properties or ConnectAdvancedConfig.json.
139
160
  /// - Returns: Whether it was able to set the value as Boolean value.
140
161
  func setNumberItemForKey(key: String, value: Double, moduleName: String) throws -> Bool {
141
- let result = EOApplicationHelper().setConfigItem(key, value: value, forModuleName: moduleName)
142
- return result
162
+ return ConnectConfigStore.set(key, value: value)
143
163
  }
144
164
 
145
165
 
@@ -150,8 +170,7 @@ class HybridAcousticConnectRN: HybridAcousticConnectRNSpec {
150
170
  /// - moduleName: The name of the module to be updated. For EOCore settings, please use 'EOCore' which can be found the following files EOCoreBasicConfig.plist, EOCoreBasicConfig.properties or EOCoreAdvancedConfig.json and 'Connect' for Connect which can be found the following files ConnectBasicConfig.plist, ConnectBasicConfig.properties or ConnectAdvancedConfig.json.
151
171
  /// - Returns: Whether it was able to set the value.
152
172
  func setConfigItemForKey(key: String, value: Variant_Bool_String_Double, moduleName: String) throws -> Bool {
153
- var result = EOApplicationHelper().setConfigItem(key, value: convertVariantToAny(value), forModuleName: moduleName)
154
- return true
173
+ return ConnectConfigStore.set(key, value: convertVariantToAny(value))
155
174
  }
156
175
 
157
176
  /// Gets the module's configuration item from AdvancedConfig.json or BasicConfig.plist that matches the specified key as a BOOL value.
@@ -161,8 +180,7 @@ class HybridAcousticConnectRN: HybridAcousticConnectRNSpec {
161
180
  /// - moduleName: The name of the module to be updated. For EOCore settings, please use 'EOCore' which can be found the following files EOCoreBasicConfig.plist, EOCoreBasicConfig.properties or EOCoreAdvancedConfig.json and 'Connect' for Connect which can be found the following files ConnectBasicConfig.plist, ConnectBasicConfig.properties or ConnectAdvancedConfig.json.
162
181
  /// - Returns: The value of the configuration item key as a BOOL value.
163
182
  func getBooleanConfigItemForKey(theDefault: Bool, key: String, moduleName: String) throws -> Bool {
164
- var result = EOApplicationHelper().getBOOLconfigItem(forKey: key, withDefault: theDefault, forModuleName: moduleName)
165
- return result
183
+ return ConnectConfigStore.bool(forKey: key, default: theDefault)
166
184
  }
167
185
 
168
186
  /// Gets the module's configuration item from AdvancedConfig.json or BasicConfig.plist that matches the specified key as a NString value.
@@ -172,7 +190,7 @@ class HybridAcousticConnectRN: HybridAcousticConnectRNSpec {
172
190
  /// - moduleName: The name of the module to be updated. For EOCore settings, please use 'EOCore' which can be found the following files EOCoreBasicConfig.plist, EOCoreBasicConfig.properties or EOCoreAdvancedConfig.json and 'Connect' for Connect which can be found the following files ConnectBasicConfig.plist, ConnectBasicConfig.properties or ConnectAdvancedConfig.json.
173
191
  /// - Returns: The value of the configuration item key as a NString value.
174
192
  func getStringItemForKey(theDefault: String, key: String, moduleName: String) throws -> Variant_NullType_String? {
175
- let result = EOApplicationHelper().getStringItem(forKey: key, withDefault: theDefault, forModuleName: moduleName)
193
+ let result = ConnectConfigStore.string(forKey: key, default: theDefault)
176
194
  return result.map { .second($0) }
177
195
  }
178
196
 
@@ -183,8 +201,7 @@ class HybridAcousticConnectRN: HybridAcousticConnectRNSpec {
183
201
  /// - moduleName: The name of the module to be updated. For EOCore settings, please use 'EOCore' which can be found the following files EOCoreBasicConfig.plist, EOCoreBasicConfig.properties or EOCoreAdvancedConfig.json and 'Connect' for Connect which can be found the following files ConnectBasicConfig.plist, ConnectBasicConfig.properties or ConnectAdvancedConfig.json.
184
202
  /// - Returns: The value of the configuration item key as a NSNumber value.
185
203
  func getNumberItemForKey(theDefault: Double, key: String, moduleName: String) throws -> Double {
186
- let result = EOApplicationHelper().getNumberItem(forKey: key, withDefault: theDefault as NSNumber, forModuleName: moduleName) as! Double
187
- return result
204
+ return ConnectConfigStore.number(forKey: key, default: theDefault)
188
205
  }
189
206
 
190
207
  /// Log custom event.
@@ -25,10 +25,19 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
25
25
  const Connect = ({
26
26
  children,
27
27
  captureKeyboardEvents,
28
- captureDialogEvents = false
28
+ captureDialogEvents = false,
29
+ navigationRef
29
30
  }) => {
30
31
  const child = children;
31
- const navigation = child.props?.ref ?? child.ref;
32
+ const childProvidedRef = child?.props?.ref ?? child?.ref;
33
+ const internalRef = (0, _react.useRef)(null);
34
+
35
+ // Resolution order (explicit → legacy child ref → auto-injected fallback).
36
+ // The chosen ref flows through the same mount-effect / touch / layout
37
+ // guards, so any path that fails to resolve a usable navigation container
38
+ // simply disables tracking rather than breaking host-app gestures.
39
+ const navigation = navigationRef ?? childProvidedRef ?? internalRef;
40
+ const shouldInjectRef = !navigationRef && !childProvidedRef && /*#__PURE__*/_react.default.isValidElement(child);
32
41
  const currentRoute = (0, _react.useRef)(undefined);
33
42
  const initial = (0, _react.useRef)(false);
34
43
  (0, _react.useEffect)(() => {
@@ -38,8 +47,8 @@ const Connect = ({
38
47
  _TLTRN.default.interceptDialogEvents(captureDialogEvents);
39
48
  }, [captureDialogEvents]);
40
49
  (0, _react.useEffect)(() => {
41
- if (!navigation || typeof navigation.current.addListener !== "function" || typeof navigation.current.getCurrentRoute !== "function") {
42
- console.warn("Connect: The Connect component's first child must be a NavigationContainer with a ref.");
50
+ if (!navigation || !navigation.current || typeof navigation.current.addListener !== "function" || typeof navigation.current.getCurrentRoute !== "function") {
51
+ console.warn("Connect: navigation tracking disabled no usable NavigationContainer ref resolved. " + "Pass `navigationRef` (from useNavigationContainerRef()) or ensure the direct child is a NavigationContainer.");
43
52
  return;
44
53
  }
45
54
 
@@ -61,24 +70,27 @@ const Connect = ({
61
70
  };
62
71
  }, [navigation]);
63
72
  const onStartShouldSetResponderCapture = (0, _react.useCallback)(event => {
64
- currentRoute.current = extractName(navigation) || navigation.current.getCurrentRoute()?.name;
65
- if (currentRoute && currentRoute.current) {
66
- _TLTRN.default.logScreenViewPageName(currentRoute.current);
73
+ if (navigation?.current?.getCurrentRoute) {
74
+ currentRoute.current = extractName(navigation) || navigation.current.getCurrentRoute()?.name;
75
+ if (currentRoute.current) {
76
+ _TLTRN.default.logScreenViewPageName(currentRoute.current);
77
+ }
67
78
  }
68
79
  _TLTRN.default.logClickEvent(event);
69
- return false; // Must be false; true means this component becomes the touch responder and events don't bubble
70
- }, []);
71
- const onLayout = (0, _react.useCallback)(event => {
80
+ return false; // Must remain false so events bubble to the host app's handlers
81
+ }, [navigation]);
82
+ const onLayout = (0, _react.useCallback)(_event => {
72
83
  if (initial.current) {
73
84
  return false;
74
85
  }
75
86
  initial.current = true;
76
- console.log("event - ", event.nativeEvent);
77
- currentRoute.current = navigation.current.getCurrentRoute()?.name;
78
- if (_reactNative.Platform.OS === "ios" && currentRoute && currentRoute.current) {
79
- _TLTRN.default.logScreenViewPageName(currentRoute.current);
80
- } else if (_reactNative.Platform.OS === "android") {
81
- _TLTRN.default.logScreenLayout(currentRoute.current);
87
+ if (navigation?.current?.getCurrentRoute) {
88
+ currentRoute.current = navigation.current.getCurrentRoute()?.name;
89
+ if (_reactNative.Platform.OS === "ios" && currentRoute.current) {
90
+ _TLTRN.default.logScreenViewPageName(currentRoute.current);
91
+ } else if (_reactNative.Platform.OS === "android") {
92
+ _TLTRN.default.logScreenLayout(currentRoute.current);
93
+ }
82
94
  }
83
95
  return true;
84
96
  }, [navigation]);
@@ -86,11 +98,13 @@ const Connect = ({
86
98
  style: styles.connect_main,
87
99
  onLayout: onLayout,
88
100
  onStartShouldSetResponderCapture: onStartShouldSetResponderCapture,
89
- children: children
101
+ children: shouldInjectRef ? /*#__PURE__*/_react.default.cloneElement(child, {
102
+ ref: internalRef
103
+ }) : children
90
104
  });
91
105
  };
92
106
  function extractName(navigation) {
93
- const routeParams = navigation.current.getCurrentRoute()?.params;
107
+ const routeParams = navigation?.current?.getCurrentRoute?.()?.params;
94
108
  if (routeParams) {
95
109
  const {
96
110
  name
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_TLTRN","_interopRequireDefault","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","Connect","children","captureKeyboardEvents","captureDialogEvents","child","navigation","props","ref","currentRoute","useRef","undefined","initial","useEffect","TLTRN","interceptKeyboardEvents","interceptDialogEvents","current","addListener","getCurrentRoute","console","warn","unsubscribeState","extractName","name","log","Platform","OS","logScreenViewPageName","logScreenLayout","onStartShouldSetResponderCapture","useCallback","event","logClickEvent","onLayout","nativeEvent","jsx","View","style","styles","connect_main","routeParams","params","_default","exports","StyleSheet","create","flex"],"sourceRoot":"../../../src","sources":["components/Connect.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_TLTRN","_interopRequireDefault","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","Connect","children","captureKeyboardEvents","captureDialogEvents","navigationRef","child","childProvidedRef","props","ref","internalRef","useRef","navigation","shouldInjectRef","React","isValidElement","currentRoute","undefined","initial","useEffect","TLTRN","interceptKeyboardEvents","interceptDialogEvents","current","addListener","getCurrentRoute","console","warn","unsubscribeState","extractName","name","log","Platform","OS","logScreenViewPageName","logScreenLayout","onStartShouldSetResponderCapture","useCallback","event","logClickEvent","onLayout","_event","jsx","View","style","styles","connect_main","cloneElement","routeParams","params","_default","exports","StyleSheet","create","flex"],"sourceRoot":"../../../src","sources":["components/Connect.tsx"],"mappings":"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","ignoreList":[]}
@@ -17,10 +17,19 @@ import { jsx as _jsx } from "react/jsx-runtime";
17
17
  const Connect = ({
18
18
  children,
19
19
  captureKeyboardEvents,
20
- captureDialogEvents = false
20
+ captureDialogEvents = false,
21
+ navigationRef
21
22
  }) => {
22
23
  const child = children;
23
- const navigation = child.props?.ref ?? child.ref;
24
+ const childProvidedRef = child?.props?.ref ?? child?.ref;
25
+ const internalRef = useRef(null);
26
+
27
+ // Resolution order (explicit → legacy child ref → auto-injected fallback).
28
+ // The chosen ref flows through the same mount-effect / touch / layout
29
+ // guards, so any path that fails to resolve a usable navigation container
30
+ // simply disables tracking rather than breaking host-app gestures.
31
+ const navigation = navigationRef ?? childProvidedRef ?? internalRef;
32
+ const shouldInjectRef = !navigationRef && !childProvidedRef && /*#__PURE__*/React.isValidElement(child);
24
33
  const currentRoute = useRef(undefined);
25
34
  const initial = useRef(false);
26
35
  useEffect(() => {
@@ -30,8 +39,8 @@ const Connect = ({
30
39
  TLTRN.interceptDialogEvents(captureDialogEvents);
31
40
  }, [captureDialogEvents]);
32
41
  useEffect(() => {
33
- if (!navigation || typeof navigation.current.addListener !== "function" || typeof navigation.current.getCurrentRoute !== "function") {
34
- console.warn("Connect: The Connect component's first child must be a NavigationContainer with a ref.");
42
+ if (!navigation || !navigation.current || typeof navigation.current.addListener !== "function" || typeof navigation.current.getCurrentRoute !== "function") {
43
+ console.warn("Connect: navigation tracking disabled no usable NavigationContainer ref resolved. " + "Pass `navigationRef` (from useNavigationContainerRef()) or ensure the direct child is a NavigationContainer.");
35
44
  return;
36
45
  }
37
46
 
@@ -53,24 +62,27 @@ const Connect = ({
53
62
  };
54
63
  }, [navigation]);
55
64
  const onStartShouldSetResponderCapture = useCallback(event => {
56
- currentRoute.current = extractName(navigation) || navigation.current.getCurrentRoute()?.name;
57
- if (currentRoute && currentRoute.current) {
58
- TLTRN.logScreenViewPageName(currentRoute.current);
65
+ if (navigation?.current?.getCurrentRoute) {
66
+ currentRoute.current = extractName(navigation) || navigation.current.getCurrentRoute()?.name;
67
+ if (currentRoute.current) {
68
+ TLTRN.logScreenViewPageName(currentRoute.current);
69
+ }
59
70
  }
60
71
  TLTRN.logClickEvent(event);
61
- return false; // Must be false; true means this component becomes the touch responder and events don't bubble
62
- }, []);
63
- const onLayout = useCallback(event => {
72
+ return false; // Must remain false so events bubble to the host app's handlers
73
+ }, [navigation]);
74
+ const onLayout = useCallback(_event => {
64
75
  if (initial.current) {
65
76
  return false;
66
77
  }
67
78
  initial.current = true;
68
- console.log("event - ", event.nativeEvent);
69
- currentRoute.current = navigation.current.getCurrentRoute()?.name;
70
- if (Platform.OS === "ios" && currentRoute && currentRoute.current) {
71
- TLTRN.logScreenViewPageName(currentRoute.current);
72
- } else if (Platform.OS === "android") {
73
- TLTRN.logScreenLayout(currentRoute.current);
79
+ if (navigation?.current?.getCurrentRoute) {
80
+ currentRoute.current = navigation.current.getCurrentRoute()?.name;
81
+ if (Platform.OS === "ios" && currentRoute.current) {
82
+ TLTRN.logScreenViewPageName(currentRoute.current);
83
+ } else if (Platform.OS === "android") {
84
+ TLTRN.logScreenLayout(currentRoute.current);
85
+ }
74
86
  }
75
87
  return true;
76
88
  }, [navigation]);
@@ -78,11 +90,13 @@ const Connect = ({
78
90
  style: styles.connect_main,
79
91
  onLayout: onLayout,
80
92
  onStartShouldSetResponderCapture: onStartShouldSetResponderCapture,
81
- children: children
93
+ children: shouldInjectRef ? /*#__PURE__*/React.cloneElement(child, {
94
+ ref: internalRef
95
+ }) : children
82
96
  });
83
97
  };
84
98
  function extractName(navigation) {
85
- const routeParams = navigation.current.getCurrentRoute()?.params;
99
+ const routeParams = navigation?.current?.getCurrentRoute?.()?.params;
86
100
  if (routeParams) {
87
101
  const {
88
102
  name
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useEffect","useRef","View","StyleSheet","Platform","TLTRN","jsx","_jsx","Connect","children","captureKeyboardEvents","captureDialogEvents","child","navigation","props","ref","currentRoute","undefined","initial","interceptKeyboardEvents","interceptDialogEvents","current","addListener","getCurrentRoute","console","warn","unsubscribeState","extractName","name","log","OS","logScreenViewPageName","logScreenLayout","onStartShouldSetResponderCapture","event","logClickEvent","onLayout","nativeEvent","style","styles","connect_main","routeParams","params","create","flex"],"sourceRoot":"../../../src","sources":["components/Connect.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useCallback","useEffect","useRef","View","StyleSheet","Platform","TLTRN","jsx","_jsx","Connect","children","captureKeyboardEvents","captureDialogEvents","navigationRef","child","childProvidedRef","props","ref","internalRef","navigation","shouldInjectRef","isValidElement","currentRoute","undefined","initial","interceptKeyboardEvents","interceptDialogEvents","current","addListener","getCurrentRoute","console","warn","unsubscribeState","extractName","name","log","OS","logScreenViewPageName","logScreenLayout","onStartShouldSetResponderCapture","event","logClickEvent","onLayout","_event","style","styles","connect_main","cloneElement","routeParams","params","create","flex"],"sourceRoot":"../../../src","sources":["components/Connect.tsx"],"mappings":"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","ignoreList":[]}
@@ -12,6 +12,18 @@ interface ConnectProps {
12
12
  children: React.ReactNode;
13
13
  captureKeyboardEvents: boolean;
14
14
  captureDialogEvents?: boolean;
15
+ /**
16
+ * Preferred: an explicit NavigationContainer ref obtained from
17
+ * `useNavigationContainerRef()`. Using this prop decouples <Connect> from
18
+ * any assumption about the children structure and is the recommended
19
+ * integration path.
20
+ *
21
+ * If omitted, <Connect> falls back to (a) inspecting the direct child's
22
+ * own ref, then (b) auto-injecting an internal ref via cloneElement.
23
+ * Every path degrades gracefully — if no usable ref is resolved,
24
+ * screen-name tracking is disabled but touches still reach host components.
25
+ */
26
+ navigationRef?: React.RefObject<any>;
15
27
  }
16
28
  declare const Connect: React.FC<ConnectProps>;
17
29
  export default Connect;
@@ -1 +1 @@
1
- {"version":3,"file":"Connect.d.ts","sourceRoot":"","sources":["../../../../src/components/Connect.tsx"],"names":[],"mappings":"AAAA;;;;;;;;6FAQ6F;AAC7F,OAAO,KAAqD,MAAM,OAAO,CAAC;AAK1E,UAAU,YAAY;IAClB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,QAAA,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAgFnC,CAAC;AAWF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"Connect.d.ts","sourceRoot":"","sources":["../../../../src/components/Connect.tsx"],"names":[],"mappings":"AAAA;;;;;;;;6FAQ6F;AAC7F,OAAO,KAAyC,MAAM,OAAO,CAAC;AAK9D,UAAU,YAAY;IAClB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;;;;OAUG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;CACxC;AAED,QAAA,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAsGnC,CAAC;AAWF,eAAe,OAAO,CAAC"}
package/package.json CHANGED
@@ -192,7 +192,7 @@
192
192
  "source": "src/index",
193
193
  "summary": "react-native ios android tealeaf connect cxa wxca er enhanced-replay",
194
194
  "types": "./lib/typescript/src/index.d.ts",
195
- "version": "18.0.19",
195
+ "version": "18.0.21",
196
196
  "workspaces": [
197
197
  "example"
198
198
  ]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "Connect": {
3
- "AndroidVersion": "11.0.7-beta",
3
+ "AndroidVersion": "11.0.9-beta",
4
4
  "AppKey": "b6c3709b7a4c479bb4b5a9fb8fec324c",
5
5
  "KillSwitchUrl": "https://lib-us-2.brilliantcollector.com/collector/switch/b6c3709b7a4c479bb4b5a9fb8fec324c",
6
6
  "PostMessageUrl": "https://lib-us-2.brilliantcollector.com/collector/collectorPost",
@@ -7,8 +7,8 @@
7
7
  * Acoustic, L.P. Any unauthorized copying or distribution of content from this file is
8
8
  * prohibited.
9
9
  ********************************************************************************************/
10
- import React, { useCallback, useEffect, useRef, forwardRef } from "react";
11
- import { View, StyleSheet, Platform, NativeModules, findNodeHandle } from "react-native";
10
+ import React, { useCallback, useEffect, useRef } from "react";
11
+ import { View, StyleSheet, Platform } from "react-native";
12
12
  import type { LayoutChangeEvent } from "react-native"; // Use type-only import for LayoutChangeEvent
13
13
  import TLTRN from '../TLTRN';
14
14
 
@@ -16,11 +16,38 @@ interface ConnectProps {
16
16
  children: React.ReactNode;
17
17
  captureKeyboardEvents: boolean;
18
18
  captureDialogEvents?: boolean; // New prop for dialog event capture
19
+ /**
20
+ * Preferred: an explicit NavigationContainer ref obtained from
21
+ * `useNavigationContainerRef()`. Using this prop decouples <Connect> from
22
+ * any assumption about the children structure and is the recommended
23
+ * integration path.
24
+ *
25
+ * If omitted, <Connect> falls back to (a) inspecting the direct child's
26
+ * own ref, then (b) auto-injecting an internal ref via cloneElement.
27
+ * Every path degrades gracefully — if no usable ref is resolved,
28
+ * screen-name tracking is disabled but touches still reach host components.
29
+ */
30
+ navigationRef?: React.RefObject<any>;
19
31
  }
20
32
 
21
- const Connect: React.FC<ConnectProps> = ({ children, captureKeyboardEvents, captureDialogEvents = false }) => {
33
+ const Connect: React.FC<ConnectProps> = ({
34
+ children,
35
+ captureKeyboardEvents,
36
+ captureDialogEvents = false,
37
+ navigationRef,
38
+ }) => {
22
39
  const child = children as any;
23
- const navigation = child.props?.ref ?? child.ref;
40
+ const childProvidedRef = child?.props?.ref ?? child?.ref;
41
+ const internalRef = useRef<any>(null);
42
+
43
+ // Resolution order (explicit → legacy child ref → auto-injected fallback).
44
+ // The chosen ref flows through the same mount-effect / touch / layout
45
+ // guards, so any path that fails to resolve a usable navigation container
46
+ // simply disables tracking rather than breaking host-app gestures.
47
+ const navigation = navigationRef ?? childProvidedRef ?? internalRef;
48
+ const shouldInjectRef =
49
+ !navigationRef && !childProvidedRef && React.isValidElement(child);
50
+
24
51
  const currentRoute = useRef<string | undefined>(undefined);
25
52
  const initial = useRef<boolean>(false);
26
53
 
@@ -35,11 +62,13 @@ const Connect: React.FC<ConnectProps> = ({ children, captureKeyboardEvents, capt
35
62
  useEffect(() => {
36
63
  if (
37
64
  !navigation ||
65
+ !navigation.current ||
38
66
  typeof navigation.current.addListener !== "function" ||
39
67
  typeof navigation.current.getCurrentRoute !== "function"
40
68
  ) {
41
69
  console.warn(
42
- "Connect: The Connect component's first child must be a NavigationContainer with a ref."
70
+ "Connect: navigation tracking disabled no usable NavigationContainer ref resolved. " +
71
+ "Pass `navigationRef` (from useNavigationContainerRef()) or ensure the direct child is a NavigationContainer."
43
72
  );
44
73
  return;
45
74
  }
@@ -64,29 +93,32 @@ const Connect: React.FC<ConnectProps> = ({ children, captureKeyboardEvents, capt
64
93
  }, [navigation]);
65
94
 
66
95
  const onStartShouldSetResponderCapture = useCallback((event: any) => {
67
- currentRoute.current = extractName(navigation) || navigation.current.getCurrentRoute()?.name;
68
- if (currentRoute && currentRoute.current) {
69
- TLTRN.logScreenViewPageName(currentRoute.current);
96
+ if (navigation?.current?.getCurrentRoute) {
97
+ currentRoute.current =
98
+ extractName(navigation) || navigation.current.getCurrentRoute()?.name;
99
+ if (currentRoute.current) {
100
+ TLTRN.logScreenViewPageName(currentRoute.current);
101
+ }
70
102
  }
71
103
  TLTRN.logClickEvent(event);
72
- return false; // Must be false; true means this component becomes the touch responder and events don't bubble
73
- }, []);
104
+ return false; // Must remain false so events bubble to the host app's handlers
105
+ }, [navigation]);
74
106
 
75
- const onLayout = useCallback((event: LayoutChangeEvent) => {
107
+ const onLayout = useCallback((_event: LayoutChangeEvent) => {
76
108
  if (initial.current) {
77
109
  return false;
78
110
  }
79
111
  initial.current = true;
80
112
 
81
- console.log("event - ", event.nativeEvent);
82
-
83
- currentRoute.current = navigation.current.getCurrentRoute()?.name;
84
- if (Platform.OS === "ios" && currentRoute && currentRoute.current) {
85
- TLTRN.logScreenViewPageName(currentRoute.current);
86
- } else if (Platform.OS === "android") {
87
- TLTRN.logScreenLayout(currentRoute.current);
113
+ if (navigation?.current?.getCurrentRoute) {
114
+ currentRoute.current = navigation.current.getCurrentRoute()?.name;
115
+ if (Platform.OS === "ios" && currentRoute.current) {
116
+ TLTRN.logScreenViewPageName(currentRoute.current);
117
+ } else if (Platform.OS === "android") {
118
+ TLTRN.logScreenLayout(currentRoute.current);
119
+ }
88
120
  }
89
- return true
121
+ return true;
90
122
  }, [navigation]);
91
123
 
92
124
  return (
@@ -95,13 +127,15 @@ const Connect: React.FC<ConnectProps> = ({ children, captureKeyboardEvents, capt
95
127
  onLayout={onLayout}
96
128
  onStartShouldSetResponderCapture={onStartShouldSetResponderCapture}
97
129
  >
98
- {children}
130
+ {shouldInjectRef
131
+ ? React.cloneElement(child as React.ReactElement<any>, { ref: internalRef })
132
+ : children}
99
133
  </View>
100
134
  );
101
135
  };
102
136
 
103
137
  function extractName(navigation: any): string {
104
- const routeParams = navigation.current.getCurrentRoute()?.params;
138
+ const routeParams = navigation?.current?.getCurrentRoute?.()?.params;
105
139
  if (routeParams) {
106
140
  const { name } = routeParams;
107
141
  return name ? name : navigation.current?.getCurrentRoute()?.name || "";