react-native-netmera 2.0.1 → 2.1.0-alpha01
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/RNNetmera.podspec +1 -1
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/netmera/reactnativesdk/RNNetmera.kt +4 -0
- package/android/src/main/java/com/netmera/reactnativesdk/RNNetmeraConfigHandler.kt +33 -0
- package/android/src/main/java/com/netmera/reactnativesdk/RNNetmeraModule.kt +13 -1
- package/ios/RNNetmera.mm +3 -0
- package/ios/RNNetmera.swift +11 -0
- package/ios/RNNetmeraConfigHandler.swift +28 -0
- package/ios/RNNetmeraRCTEventEmitter.swift +7 -0
- package/lib/commonjs/Netmera.js +277 -0
- package/lib/commonjs/Netmera.js.map +1 -0
- package/lib/commonjs/autotrack/NetmeraAutoTrackProvider.js +406 -0
- package/lib/commonjs/autotrack/NetmeraAutoTrackProvider.js.map +1 -0
- package/lib/commonjs/events/NetmeraEvent.js +13 -0
- package/lib/commonjs/events/NetmeraEvent.js.map +1 -0
- package/lib/commonjs/events/NetmeraEventBannerOpen.js +19 -0
- package/lib/commonjs/events/NetmeraEventBannerOpen.js.map +1 -0
- package/lib/commonjs/events/NetmeraEventBatteryLevel.js +16 -0
- package/lib/commonjs/events/NetmeraEventBatteryLevel.js.map +1 -0
- package/lib/commonjs/events/NetmeraEventCategoryView.js +19 -0
- package/lib/commonjs/events/NetmeraEventCategoryView.js.map +1 -0
- package/lib/commonjs/events/NetmeraEventInAppPurchase.js +34 -0
- package/lib/commonjs/events/NetmeraEventInAppPurchase.js.map +1 -0
- package/lib/commonjs/events/NetmeraEventLogin.js +16 -0
- package/lib/commonjs/events/NetmeraEventLogin.js.map +1 -0
- package/lib/commonjs/events/NetmeraEventRegister.js +16 -0
- package/lib/commonjs/events/NetmeraEventRegister.js.map +1 -0
- package/lib/commonjs/events/NetmeraEventScreenView.js +28 -0
- package/lib/commonjs/events/NetmeraEventScreenView.js.map +1 -0
- package/lib/commonjs/events/NetmeraEventSearch.js +19 -0
- package/lib/commonjs/events/NetmeraEventSearch.js.map +1 -0
- package/lib/commonjs/events/NetmeraEventShare.js +19 -0
- package/lib/commonjs/events/NetmeraEventShare.js.map +1 -0
- package/lib/commonjs/events/commerce/NetmeraEventCartAddProduct.js +19 -0
- package/lib/commonjs/events/commerce/NetmeraEventCartAddProduct.js.map +1 -0
- package/lib/commonjs/events/commerce/NetmeraEventCartRemoveProduct.js +16 -0
- package/lib/commonjs/events/commerce/NetmeraEventCartRemoveProduct.js.map +1 -0
- package/lib/commonjs/events/commerce/NetmeraEventCartView.js +19 -0
- package/lib/commonjs/events/commerce/NetmeraEventCartView.js.map +1 -0
- package/lib/commonjs/events/commerce/NetmeraEventOrderCancel.js +25 -0
- package/lib/commonjs/events/commerce/NetmeraEventOrderCancel.js.map +1 -0
- package/lib/commonjs/events/commerce/NetmeraEventProductComment.js +13 -0
- package/lib/commonjs/events/commerce/NetmeraEventProductComment.js.map +1 -0
- package/lib/commonjs/events/commerce/NetmeraEventProductRate.js +16 -0
- package/lib/commonjs/events/commerce/NetmeraEventProductRate.js.map +1 -0
- package/lib/commonjs/events/commerce/NetmeraEventProductView.js +13 -0
- package/lib/commonjs/events/commerce/NetmeraEventProductView.js.map +1 -0
- package/lib/commonjs/events/commerce/NetmeraEventPurchase.js +40 -0
- package/lib/commonjs/events/commerce/NetmeraEventPurchase.js.map +1 -0
- package/lib/commonjs/events/commerce/NetmeraEventWishList.js +13 -0
- package/lib/commonjs/events/commerce/NetmeraEventWishList.js.map +1 -0
- package/lib/commonjs/events/commerce/NetmeraLineItem.js +14 -0
- package/lib/commonjs/events/commerce/NetmeraLineItem.js.map +1 -0
- package/lib/commonjs/events/commerce/NetmeraProduct.js +51 -0
- package/lib/commonjs/events/commerce/NetmeraProduct.js.map +1 -0
- package/lib/commonjs/events/media/NetmeraEventContent.js +48 -0
- package/lib/commonjs/events/media/NetmeraEventContent.js.map +1 -0
- package/lib/commonjs/events/media/NetmeraEventContentComment.js +12 -0
- package/lib/commonjs/events/media/NetmeraEventContentComment.js.map +1 -0
- package/lib/commonjs/events/media/NetmeraEventContentRate.js +15 -0
- package/lib/commonjs/events/media/NetmeraEventContentRate.js.map +1 -0
- package/lib/commonjs/events/media/NetmeraEventContentView.js +12 -0
- package/lib/commonjs/events/media/NetmeraEventContentView.js.map +1 -0
- package/lib/commonjs/index.js +352 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/models/NMCategoryPreference.js +13 -0
- package/lib/commonjs/models/NMCategoryPreference.js.map +1 -0
- package/lib/commonjs/models/NMInboxStatus.js +15 -0
- package/lib/commonjs/models/NMInboxStatus.js.map +1 -0
- package/lib/commonjs/models/NMInboxStatusCountFilter.js +17 -0
- package/lib/commonjs/models/NMInboxStatusCountFilter.js.map +1 -0
- package/lib/commonjs/models/NetmeraCarouselObject.js +24 -0
- package/lib/commonjs/models/NetmeraCarouselObject.js.map +1 -0
- package/lib/commonjs/models/NetmeraCategory.js +13 -0
- package/lib/commonjs/models/NetmeraCategory.js.map +1 -0
- package/lib/commonjs/models/NetmeraCategoryFilter.js +13 -0
- package/lib/commonjs/models/NetmeraCategoryFilter.js.map +1 -0
- package/lib/commonjs/models/NetmeraCouponObject.js +13 -0
- package/lib/commonjs/models/NetmeraCouponObject.js.map +1 -0
- package/lib/commonjs/models/NetmeraInboxFilter.js +13 -0
- package/lib/commonjs/models/NetmeraInboxFilter.js.map +1 -0
- package/lib/commonjs/models/NetmeraInteractiveAction.js +24 -0
- package/lib/commonjs/models/NetmeraInteractiveAction.js.map +1 -0
- package/lib/commonjs/models/NetmeraProfileAttribute.js +80 -0
- package/lib/commonjs/models/NetmeraProfileAttribute.js.map +1 -0
- package/lib/commonjs/models/NetmeraPushAction.js +31 -0
- package/lib/commonjs/models/NetmeraPushAction.js.map +1 -0
- package/lib/commonjs/models/NetmeraPushObject.js +63 -0
- package/lib/commonjs/models/NetmeraPushObject.js.map +1 -0
- package/lib/commonjs/models/NetmeraUser.js +93 -0
- package/lib/commonjs/models/NetmeraUser.js.map +1 -0
- package/lib/commonjs/models/NetmeraUserProfile.js +63 -0
- package/lib/commonjs/models/NetmeraUserProfile.js.map +1 -0
- package/lib/commonjs/models/NotificationPermissionStatus.js +14 -0
- package/lib/commonjs/models/NotificationPermissionStatus.js.map +1 -0
- package/lib/commonjs/navigation/NetmeraNavigationState.js +31 -0
- package/lib/commonjs/navigation/NetmeraNavigationState.js.map +1 -0
- package/lib/commonjs/navigation/NetmeraNavigationTracker.js +70 -0
- package/lib/commonjs/navigation/NetmeraNavigationTracker.js.map +1 -0
- package/lib/commonjs/navigation/useNetmeraNavigation.js +83 -0
- package/lib/commonjs/navigation/useNetmeraNavigation.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/utils/DeviceUtils.js +16 -0
- package/lib/commonjs/utils/DeviceUtils.js.map +1 -0
- package/lib/commonjs/utils/Optional.js +37 -0
- package/lib/commonjs/utils/Optional.js.map +1 -0
- package/lib/commonjs/utils/RNNetmera.js +19 -0
- package/lib/commonjs/utils/RNNetmera.js.map +1 -0
- package/lib/module/NetmeraAnalyticProvider.js +68 -0
- package/lib/module/NetmeraAnalyticProvider.js.map +1 -0
- package/lib/module/autotracking/NetmeraNavigationState.js +14 -0
- package/lib/module/autotracking/NetmeraNavigationState.js.map +1 -0
- package/lib/module/autotracking/useNavigationTracking.js +103 -0
- package/lib/module/autotracking/useNavigationTracking.js.map +1 -0
- package/lib/module/autotracking/useTapTracking.js +246 -0
- package/lib/module/autotracking/useTapTracking.js.map +1 -0
- package/lib/module/index.js +4 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/NetmeraAnalyticProvider.d.ts +26 -0
- package/lib/typescript/src/NetmeraAnalyticProvider.d.ts.map +1 -0
- package/lib/typescript/src/autotracking/NetmeraNavigationState.d.ts +3 -0
- package/lib/typescript/src/autotracking/NetmeraNavigationState.d.ts.map +1 -0
- package/lib/typescript/src/autotracking/useNavigationTracking.d.ts +13 -0
- package/lib/typescript/src/autotracking/useNavigationTracking.d.ts.map +1 -0
- package/lib/typescript/src/autotracking/useTapTracking.d.ts +6 -0
- package/lib/typescript/src/autotracking/useTapTracking.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +3 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/NetmeraAnalyticProvider.tsx +124 -0
- package/src/autotracking/NetmeraNavigationState.ts +13 -0
- package/src/autotracking/useNavigationTracking.ts +129 -0
- package/src/autotracking/useTapTracking.ts +301 -0
- package/src/index.ts +6 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Copyright (c) 2026 Netmera Research.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import React, { useEffect, useRef, useState } from 'react';
|
|
8
|
+
import { NativeEventEmitter, NativeModules, StyleSheet, View } from 'react-native';
|
|
9
|
+
import { useNavigationTracking } from "./autotracking/useNavigationTracking.js";
|
|
10
|
+
import { useTapTracking } from "./autotracking/useTapTracking.js";
|
|
11
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
|
+
/**
|
|
13
|
+
* Wraps your app to enable automatic screen tracking and tap tracking.
|
|
14
|
+
*
|
|
15
|
+
* <NetmeraAnalyticProvider>
|
|
16
|
+
* <NavigationContainer>…</NavigationContainer>
|
|
17
|
+
* </NetmeraAnalyticProvider>
|
|
18
|
+
*/
|
|
19
|
+
export function NetmeraAnalyticProvider({
|
|
20
|
+
children,
|
|
21
|
+
navigationRef
|
|
22
|
+
}) {
|
|
23
|
+
const viewRef = useRef(null);
|
|
24
|
+
const [config, setConfig] = useState(null);
|
|
25
|
+
const appliedConfigRef = useRef(null);
|
|
26
|
+
const applyConfig = cfg => {
|
|
27
|
+
const prev = appliedConfigRef.current;
|
|
28
|
+
if (prev?.isScreenFlowEnabled === cfg.isScreenFlowEnabled && prev?.isInputActionEnabled === cfg.isInputActionEnabled && prev?.shouldCollectValues === cfg.shouldCollectValues) return;
|
|
29
|
+
appliedConfigRef.current = cfg;
|
|
30
|
+
setConfig(cfg);
|
|
31
|
+
console.log('[NMAutotrack] screen tracking ', cfg.isScreenFlowEnabled ? 'enabled' : 'disabled');
|
|
32
|
+
console.log('[NMAutotrack] input action tracking ', cfg.isInputActionEnabled ? 'enabled' : 'disabled');
|
|
33
|
+
};
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
NativeModules.RNNetmera?.getAutoTrackConfig?.()?.then(cfg => {
|
|
36
|
+
if (cfg) applyConfig(cfg);
|
|
37
|
+
})?.catch(_err => {});
|
|
38
|
+
}, []);
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
const emitter = new NativeEventEmitter(NativeModules.RNNetmeraRCTEventEmitter);
|
|
41
|
+
const subscription = emitter.addListener('onAutoTrackConfigUpdate', cfg => {
|
|
42
|
+
if (cfg) applyConfig(cfg);
|
|
43
|
+
});
|
|
44
|
+
return () => subscription.remove();
|
|
45
|
+
}, []);
|
|
46
|
+
const screenFlowEnabled = config?.isScreenFlowEnabled ?? false;
|
|
47
|
+
const inputActionEnabled = config?.isInputActionEnabled ?? false;
|
|
48
|
+
const shouldCollectValues = config?.shouldCollectValues ?? false;
|
|
49
|
+
const navigationEnabled = screenFlowEnabled || inputActionEnabled;
|
|
50
|
+
useNavigationTracking(viewRef, navigationRef, navigationEnabled, screenFlowEnabled);
|
|
51
|
+
const {
|
|
52
|
+
onTouchStart,
|
|
53
|
+
onTouchEnd
|
|
54
|
+
} = useTapTracking(inputActionEnabled, shouldCollectValues);
|
|
55
|
+
return /*#__PURE__*/_jsx(View, {
|
|
56
|
+
ref: navigationEnabled ? viewRef : undefined,
|
|
57
|
+
style: styles.container,
|
|
58
|
+
onTouchStart: onTouchStart,
|
|
59
|
+
onTouchEnd: onTouchEnd,
|
|
60
|
+
children: children
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
const styles = StyleSheet.create({
|
|
64
|
+
container: {
|
|
65
|
+
flex: 1
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
//# sourceMappingURL=NetmeraAnalyticProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useEffect","useRef","useState","NativeEventEmitter","NativeModules","StyleSheet","View","useNavigationTracking","useTapTracking","jsx","_jsx","NetmeraAnalyticProvider","children","navigationRef","viewRef","config","setConfig","appliedConfigRef","applyConfig","cfg","prev","current","isScreenFlowEnabled","isInputActionEnabled","shouldCollectValues","console","log","RNNetmera","getAutoTrackConfig","then","catch","_err","emitter","RNNetmeraRCTEventEmitter","subscription","addListener","remove","screenFlowEnabled","inputActionEnabled","navigationEnabled","onTouchStart","onTouchEnd","ref","undefined","style","styles","container","create","flex"],"sourceRoot":"../../src","sources":["NetmeraAnalyticProvider.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Copyright (c) 2026 Netmera Research.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
let currentScreen = null;
|
|
8
|
+
export function getCurrentScreen() {
|
|
9
|
+
return currentScreen;
|
|
10
|
+
}
|
|
11
|
+
export function setCurrentScreen(name) {
|
|
12
|
+
currentScreen = name;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=NetmeraNavigationState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["currentScreen","getCurrentScreen","setCurrentScreen","name"],"sourceRoot":"../../../src","sources":["autotracking/NetmeraNavigationState.ts"],"mappings":";;AAAA;AACA;AACA;;AAEA,IAAIA,aAA4B,GAAG,IAAI;AAEvC,OAAO,SAASC,gBAAgBA,CAAA,EAAkB;EAChD,OAAOD,aAAa;AACtB;AAEA,OAAO,SAASE,gBAAgBA,CAACC,IAAY,EAAQ;EACnDH,aAAa,GAAGG,IAAI;AACtB","ignoreList":[]}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Copyright (c) 2026 Netmera Research.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import React, { useEffect, useRef } from 'react';
|
|
8
|
+
import { setCurrentScreen } from "./NetmeraNavigationState.js";
|
|
9
|
+
|
|
10
|
+
// ContextProvider fiber tag — stable React internal constant since React 16.
|
|
11
|
+
const CONTEXT_PROVIDER_TAG = 10;
|
|
12
|
+
const NAV_SEARCH_DEPTH = 25;
|
|
13
|
+
|
|
14
|
+
// Duck-type check: React Navigation v5/v6/v7 all expose this surface on the container ref.
|
|
15
|
+
function isNavContainerRef(value) {
|
|
16
|
+
return value != null && typeof value.addListener === 'function' && typeof value.getCurrentRoute === 'function' && typeof value.isReady === 'function';
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// DFS through child fibers to find NavigationContainerRefContext.Provider.
|
|
20
|
+
// Siblings walk at the same depth — they sit at the same level in the tree.
|
|
21
|
+
function findNavContainerRef(fiber, depth = 0) {
|
|
22
|
+
if (!fiber || depth > NAV_SEARCH_DEPTH) return null;
|
|
23
|
+
if (fiber.tag === CONTEXT_PROVIDER_TAG && isNavContainerRef(fiber.memoizedProps?.value)) {
|
|
24
|
+
return fiber.memoizedProps.value;
|
|
25
|
+
}
|
|
26
|
+
return findNavContainerRef(fiber.child, depth + 1) ?? findNavContainerRef(fiber.sibling, depth);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Subscribes to React Navigation screen changes and keeps NetmeraNavigationState
|
|
31
|
+
* up to date. Resolves the navigation container ref via two paths:
|
|
32
|
+
*
|
|
33
|
+
* - New Arch (Fabric): auto-detected through the fiber tree via viewRef.
|
|
34
|
+
* - Old Arch (Paper): caller passes navigationRef prop explicitly.
|
|
35
|
+
*
|
|
36
|
+
* Silently no-ops if neither path yields a valid ref.
|
|
37
|
+
* Respects the isScreenFlowEnabled flag — screen changes are ignored when disabled.
|
|
38
|
+
*/
|
|
39
|
+
export function useNavigationTracking(viewRef, navigationRef, enabled, screenLogEnabled) {
|
|
40
|
+
// React 18: capture own fiber during render via ReactCurrentOwner.
|
|
41
|
+
// React 19 removed ReactCurrentOwner — this silently yields null, which is fine
|
|
42
|
+
// because the Fabric path (viewRef.__internalInstanceHandle) covers React 19.
|
|
43
|
+
const screenLogEnabledRef = useRef(screenLogEnabled);
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
screenLogEnabledRef.current = screenLogEnabled;
|
|
46
|
+
}, [screenLogEnabled]);
|
|
47
|
+
const selfFiberRef = useRef(null);
|
|
48
|
+
if (selfFiberRef.current === null) {
|
|
49
|
+
try {
|
|
50
|
+
const R = React;
|
|
51
|
+
selfFiberRef.current = R.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED?.ReactCurrentOwner?.current ?? null;
|
|
52
|
+
} catch (_) {}
|
|
53
|
+
}
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
if (!enabled) return;
|
|
56
|
+
let navRef = null;
|
|
57
|
+
|
|
58
|
+
// Path 1 — New Arch: ReactNativeElement exposes its fiber via __internalInstanceHandle.
|
|
59
|
+
// Guard with 'child' in candidate to confirm it's a fiber, not another host object.
|
|
60
|
+
const candidate = viewRef.current?.__internalInstanceHandle;
|
|
61
|
+
const viewFiber = candidate != null && 'child' in candidate ? candidate : selfFiberRef.current?.child ?? null;
|
|
62
|
+
if (viewFiber) {
|
|
63
|
+
navRef = findNavContainerRef(viewFiber);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Path 2 — Old Arch: use the ref passed explicitly via prop.
|
|
67
|
+
if (!navRef && isNavContainerRef(navigationRef?.current)) {
|
|
68
|
+
navRef = navigationRef.current;
|
|
69
|
+
}
|
|
70
|
+
if (!navRef) return;
|
|
71
|
+
const handleChange = () => {
|
|
72
|
+
try {
|
|
73
|
+
const route = navRef.getCurrentRoute();
|
|
74
|
+
if (route?.name) {
|
|
75
|
+
setCurrentScreen(route.name);
|
|
76
|
+
if (screenLogEnabledRef.current) {
|
|
77
|
+
console.log(`[NMAutotrack] screen → "${route.name}"`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
} catch (_) {}
|
|
81
|
+
};
|
|
82
|
+
const unsubState = navRef.addListener('state', handleChange);
|
|
83
|
+
|
|
84
|
+
// NavigationContainer's effects run before ours (child-first), so 'ready' has
|
|
85
|
+
// already fired. isReady() captures the initial screen synchronously; the 'ready'
|
|
86
|
+
// listener is a safety net for async startup (deferred auth, deep links, etc.).
|
|
87
|
+
let unsubReady;
|
|
88
|
+
if (navRef.isReady()) {
|
|
89
|
+
handleChange();
|
|
90
|
+
} else {
|
|
91
|
+
unsubReady = navRef.addListener('ready', () => {
|
|
92
|
+
handleChange();
|
|
93
|
+
unsubReady?.();
|
|
94
|
+
unsubReady = undefined;
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
return () => {
|
|
98
|
+
unsubState?.();
|
|
99
|
+
unsubReady?.();
|
|
100
|
+
};
|
|
101
|
+
}, [enabled]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=useNavigationTracking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useEffect","useRef","setCurrentScreen","CONTEXT_PROVIDER_TAG","NAV_SEARCH_DEPTH","isNavContainerRef","value","addListener","getCurrentRoute","isReady","findNavContainerRef","fiber","depth","tag","memoizedProps","child","sibling","useNavigationTracking","viewRef","navigationRef","enabled","screenLogEnabled","screenLogEnabledRef","current","selfFiberRef","R","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","_","navRef","candidate","__internalInstanceHandle","viewFiber","handleChange","route","name","console","log","unsubState","unsubReady","undefined"],"sourceRoot":"../../../src","sources":["autotracking/useNavigationTracking.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Copyright (c) 2026 Netmera Research.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { useCallback, useEffect, useRef } from 'react';
|
|
8
|
+
import { getCurrentScreen } from "./NetmeraNavigationState.js";
|
|
9
|
+
const MAX_FIBER_DEPTH = 20;
|
|
10
|
+
const MAX_TEXT_DEPTH = 5;
|
|
11
|
+
const TAP_THRESHOLD = 10; // px — above this distance the gesture is a scroll, not a tap
|
|
12
|
+
|
|
13
|
+
// ── Fiber predicates ──────────────────────────────────────────────────────────
|
|
14
|
+
|
|
15
|
+
// Skip onStartShouldSetResponder — it matches ScrollViews, which are not interactive targets.
|
|
16
|
+
function isInteractive(props) {
|
|
17
|
+
return !!(props?.onPress || props?.onClick || props?.onValueChange);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Switch has onValueChange + boolean value, but no onPress/onClick.
|
|
21
|
+
function isSwitch(props) {
|
|
22
|
+
return !!props?.onValueChange && typeof props?.value === 'boolean' && !(props?.onPress || props?.onClick);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// SelectDropdown and similar pickers expose onSelect on an ancestor fiber.
|
|
26
|
+
// Tapping them only opens the picker UI — the real select event fires separately.
|
|
27
|
+
function isInsideSelectionControl(fiber) {
|
|
28
|
+
let node = fiber?.return;
|
|
29
|
+
for (let d = 0; d < 5 && node; d++, node = node.return) {
|
|
30
|
+
if (node?.memoizedProps?.onSelect != null) return true;
|
|
31
|
+
}
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// ── Identifier resolution ─────────────────────────────────────────────────────
|
|
36
|
+
|
|
37
|
+
function textFromChildren(children, depth = 0) {
|
|
38
|
+
if (depth > MAX_TEXT_DEPTH) return undefined;
|
|
39
|
+
if (typeof children === 'string') {
|
|
40
|
+
const t = children.trim();
|
|
41
|
+
return t.length > 0 ? t : undefined;
|
|
42
|
+
}
|
|
43
|
+
if (typeof children === 'number') return String(children);
|
|
44
|
+
if (Array.isArray(children)) {
|
|
45
|
+
for (const child of children) {
|
|
46
|
+
const t = textFromChildren(child, depth + 1);
|
|
47
|
+
if (t) return t;
|
|
48
|
+
}
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
if (children != null && typeof children === 'object' && 'props' in children) {
|
|
52
|
+
return textFromChildren(children.props?.children, depth + 1);
|
|
53
|
+
}
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Priority: accessibilityLabel → testID → placeholder (TextInput) → first child text.
|
|
58
|
+
function resolveIdentifier(props) {
|
|
59
|
+
if (!props) return undefined;
|
|
60
|
+
if (typeof props.accessibilityLabel === 'string' && props.accessibilityLabel.trim()) {
|
|
61
|
+
return props.accessibilityLabel.trim();
|
|
62
|
+
}
|
|
63
|
+
if (typeof props.testID === 'string' && props.testID.trim()) {
|
|
64
|
+
return props.testID.trim();
|
|
65
|
+
}
|
|
66
|
+
if (typeof props.placeholder === 'string' && props.placeholder.trim()) {
|
|
67
|
+
return props.placeholder.trim();
|
|
68
|
+
}
|
|
69
|
+
return textFromChildren(props.children);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// ── List index resolution ─────────────────────────────────────────────────────
|
|
73
|
+
|
|
74
|
+
function resolveListIndex(startFiber) {
|
|
75
|
+
let fiber = startFiber;
|
|
76
|
+
for (let d = 0; d < MAX_FIBER_DEPTH && fiber; d++, fiber = fiber.return) {
|
|
77
|
+
const p = fiber.memoizedProps;
|
|
78
|
+
if (typeof p?.index !== 'number' || typeof p?.cellKey !== 'string' || typeof p?.onUnmount !== 'function') continue;
|
|
79
|
+
const cellKey = p.cellKey;
|
|
80
|
+
|
|
81
|
+
// Prefer stateNode.props.index over memoizedProps.index: both current and alternate
|
|
82
|
+
// fibers share the same class instance, and React writes nextProps to instance.props
|
|
83
|
+
// during reconciliation — so stateNode.props is always current even when _targetInst
|
|
84
|
+
// resolves to the stale alternate fiber (common on iOS after a commit).
|
|
85
|
+
const flatIndex = typeof fiber.stateNode?.props?.index === 'number' ? fiber.stateNode.props.index : p.index;
|
|
86
|
+
|
|
87
|
+
// `sections` Array prop is only present on SectionList; VirtualizedList uses `data`.
|
|
88
|
+
let sections;
|
|
89
|
+
let up = fiber.return;
|
|
90
|
+
for (let i = 0; i < 15 && up; i++, up = up.return) {
|
|
91
|
+
const upProps = up.stateNode?.props ?? up.memoizedProps;
|
|
92
|
+
if (Array.isArray(upProps?.sections)) {
|
|
93
|
+
sections = upProps.sections;
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (sections) {
|
|
98
|
+
if (cellKey.endsWith(':header') || cellKey.endsWith(':footer')) return undefined;
|
|
99
|
+
|
|
100
|
+
// Mirrors VirtualizedSectionList._getItem offset arithmetic:
|
|
101
|
+
// flatIndex 0 → section 0 header
|
|
102
|
+
// flatIndex 1..n → section 0 items (itemIndex = flatIndex - 1)
|
|
103
|
+
// flatIndex n+1 → section 0 footer
|
|
104
|
+
// flatIndex n+2 → section 1 header …
|
|
105
|
+
let idx = flatIndex - 1;
|
|
106
|
+
for (let si = 0; si < sections.length; si++) {
|
|
107
|
+
const count = sections[si].data?.length ?? 0;
|
|
108
|
+
if (idx === -1 || idx === count) return undefined;
|
|
109
|
+
if (idx < count) return {
|
|
110
|
+
type: 'sectionlist',
|
|
111
|
+
sectionIndex: si,
|
|
112
|
+
itemIndex: idx
|
|
113
|
+
};
|
|
114
|
+
idx -= count + 2;
|
|
115
|
+
}
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
type: 'flatlist',
|
|
120
|
+
index: flatIndex
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// ── Log path ──────────────────────────────────────────────────────────────────
|
|
127
|
+
|
|
128
|
+
function buildPath(screen, listType, identifier, indexSuffix, value) {
|
|
129
|
+
const base = listType ? `${screen}|${listType}|${identifier}` : `${screen}|${identifier}`;
|
|
130
|
+
return value !== undefined ? `${base}|${value}${indexSuffix}` : `${base}${indexSuffix}`;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// ── Hook ──────────────────────────────────────────────────────────────────────
|
|
134
|
+
|
|
135
|
+
export function useTapTracking(enabled, shouldCollectValues) {
|
|
136
|
+
const enabledRef = useRef(enabled);
|
|
137
|
+
const shouldCollectValuesRef = useRef(shouldCollectValues);
|
|
138
|
+
const touchStartRef = useRef(null);
|
|
139
|
+
const lastScreenRef = useRef(undefined);
|
|
140
|
+
|
|
141
|
+
// Tracks the last logged value per Switch identifier so we can compute the new
|
|
142
|
+
// state as !lastLogged without re-reading the fiber. memoizedProps.value is
|
|
143
|
+
// unreliable across taps because React's current/alternate swap can expose a
|
|
144
|
+
// stale alternate fiber via _targetInst after any commit.
|
|
145
|
+
const switchLastLoggedRef = useRef(new Map());
|
|
146
|
+
useEffect(() => {
|
|
147
|
+
enabledRef.current = enabled;
|
|
148
|
+
if (!enabled) {
|
|
149
|
+
touchStartRef.current = null;
|
|
150
|
+
lastScreenRef.current = undefined;
|
|
151
|
+
switchLastLoggedRef.current.clear();
|
|
152
|
+
}
|
|
153
|
+
}, [enabled]);
|
|
154
|
+
useEffect(() => {
|
|
155
|
+
shouldCollectValuesRef.current = shouldCollectValues;
|
|
156
|
+
}, [shouldCollectValues]);
|
|
157
|
+
const onTouchStart = useCallback(e => {
|
|
158
|
+
if (!enabledRef.current) return;
|
|
159
|
+
let switchValue;
|
|
160
|
+
try {
|
|
161
|
+
let fiber = e._targetInst;
|
|
162
|
+
for (let d = 0; d < MAX_FIBER_DEPTH && fiber; d++, fiber = fiber.return) {
|
|
163
|
+
if (isSwitch(fiber.memoizedProps)) {
|
|
164
|
+
// Capture the committed value before any event fires — reliable first-tap baseline.
|
|
165
|
+
switchValue = fiber.memoizedProps.value;
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
} catch (_) {}
|
|
170
|
+
touchStartRef.current = {
|
|
171
|
+
x: e.nativeEvent.pageX,
|
|
172
|
+
y: e.nativeEvent.pageY,
|
|
173
|
+
switchValue
|
|
174
|
+
};
|
|
175
|
+
}, []);
|
|
176
|
+
const onTouchEnd = useCallback(e => {
|
|
177
|
+
if (!enabledRef.current) return;
|
|
178
|
+
const start = touchStartRef.current;
|
|
179
|
+
if (start) {
|
|
180
|
+
const dx = Math.abs(e.nativeEvent.pageX - start.x);
|
|
181
|
+
const dy = Math.abs(e.nativeEvent.pageY - start.y);
|
|
182
|
+
if (dx > TAP_THRESHOLD || dy > TAP_THRESHOLD) return;
|
|
183
|
+
}
|
|
184
|
+
try {
|
|
185
|
+
let node = e._targetInst;
|
|
186
|
+
if (!node) return;
|
|
187
|
+
|
|
188
|
+
// Pass 1: walk up to find the first interactive ancestor.
|
|
189
|
+
// e.g. tapping a <Text> inside a <Pressable> yields the Pressable.
|
|
190
|
+
let interactiveNode = null;
|
|
191
|
+
let depth = 0;
|
|
192
|
+
while (node && depth < MAX_FIBER_DEPTH) {
|
|
193
|
+
if (isInteractive(node.memoizedProps)) {
|
|
194
|
+
interactiveNode = node;
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
node = node.return;
|
|
198
|
+
depth++;
|
|
199
|
+
}
|
|
200
|
+
if (!interactiveNode) return;
|
|
201
|
+
|
|
202
|
+
// Pass 2: resolve identifier from the interactive fiber and up to 2 ancestors.
|
|
203
|
+
// The look-ahead handles TouchableOpacity, where the inner Animated.View fiber
|
|
204
|
+
// (where Pass 1 stops) may carry the accessibilityLabel from the parent TO.
|
|
205
|
+
let identifierNode = interactiveNode;
|
|
206
|
+
let identifier;
|
|
207
|
+
for (let i = 0; i < 3 && identifierNode; i++) {
|
|
208
|
+
identifier = resolveIdentifier(identifierNode.memoizedProps);
|
|
209
|
+
if (identifier) break;
|
|
210
|
+
identifierNode = identifierNode.return;
|
|
211
|
+
}
|
|
212
|
+
if (!identifier) return;
|
|
213
|
+
const isSwitchNode = isSwitch(interactiveNode.memoizedProps);
|
|
214
|
+
if (!isSwitchNode && isInsideSelectionControl(interactiveNode)) return;
|
|
215
|
+
const screen = getCurrentScreen();
|
|
216
|
+
if (screen !== lastScreenRef.current) {
|
|
217
|
+
switchLastLoggedRef.current.clear();
|
|
218
|
+
lastScreenRef.current = screen;
|
|
219
|
+
}
|
|
220
|
+
const listIndex = shouldCollectValuesRef.current ? resolveListIndex(interactiveNode) : undefined;
|
|
221
|
+
const listType = listIndex ? listIndex.type === 'sectionlist' ? 'SectionList' : 'FlatList' : null;
|
|
222
|
+
const indexSuffix = listIndex ? listIndex.type === 'sectionlist' ? `|section:${listIndex.sectionIndex},index:${listIndex.itemIndex}` : `|index:${listIndex.index}` : '';
|
|
223
|
+
if (isSwitchNode) {
|
|
224
|
+
const lastLogged = switchLastLoggedRef.current.get(identifier);
|
|
225
|
+
let newValue;
|
|
226
|
+
if (lastLogged !== undefined) {
|
|
227
|
+
newValue = !lastLogged;
|
|
228
|
+
} else {
|
|
229
|
+
const preTapValue = touchStartRef.current?.switchValue;
|
|
230
|
+
newValue = preTapValue !== undefined ? !preTapValue : !interactiveNode.memoizedProps.value;
|
|
231
|
+
}
|
|
232
|
+
switchLastLoggedRef.current.set(identifier, newValue);
|
|
233
|
+
console.log(`[NMAutotrack] tap → "${buildPath(screen, listType, identifier, indexSuffix, newValue)}"`);
|
|
234
|
+
} else {
|
|
235
|
+
console.log(`[NMAutotrack] tap → "${buildPath(screen, listType, identifier, indexSuffix)}"`);
|
|
236
|
+
}
|
|
237
|
+
} catch (_) {
|
|
238
|
+
// Fiber tree is a private React API — fail silently.
|
|
239
|
+
}
|
|
240
|
+
}, []);
|
|
241
|
+
return {
|
|
242
|
+
onTouchStart,
|
|
243
|
+
onTouchEnd
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=useTapTracking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useRef","getCurrentScreen","MAX_FIBER_DEPTH","MAX_TEXT_DEPTH","TAP_THRESHOLD","isInteractive","props","onPress","onClick","onValueChange","isSwitch","value","isInsideSelectionControl","fiber","node","return","d","memoizedProps","onSelect","textFromChildren","children","depth","undefined","t","trim","length","String","Array","isArray","child","resolveIdentifier","accessibilityLabel","testID","placeholder","resolveListIndex","startFiber","p","index","cellKey","onUnmount","flatIndex","stateNode","sections","up","i","upProps","endsWith","idx","si","count","data","type","sectionIndex","itemIndex","buildPath","screen","listType","identifier","indexSuffix","base","useTapTracking","enabled","shouldCollectValues","enabledRef","shouldCollectValuesRef","touchStartRef","lastScreenRef","switchLastLoggedRef","Map","current","clear","onTouchStart","e","switchValue","_targetInst","_","x","nativeEvent","pageX","y","pageY","onTouchEnd","start","dx","Math","abs","dy","interactiveNode","identifierNode","isSwitchNode","listIndex","lastLogged","get","newValue","preTapValue","set","console","log"],"sourceRoot":"../../../src","sources":["autotracking/useTapTracking.ts"],"mappings":";;AAAA;AACA;AACA;;AAEA,SAASA,WAAW,EAAEC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAEtD,SAASC,gBAAgB,QAAQ,6BAA0B;AAE3D,MAAMC,eAAe,GAAG,EAAE;AAC1B,MAAMC,cAAc,GAAG,CAAC;AACxB,MAAMC,aAAa,GAAG,EAAE,CAAC,CAAC;;AAE1B;;AAEA;AACA,SAASC,aAAaA,CAACC,KAAU,EAAW;EAC1C,OAAO,CAAC,EAAEA,KAAK,EAAEC,OAAO,IAAID,KAAK,EAAEE,OAAO,IAAIF,KAAK,EAAEG,aAAa,CAAC;AACrE;;AAEA;AACA,SAASC,QAAQA,CAACJ,KAAU,EAAW;EACrC,OACE,CAAC,CAACA,KAAK,EAAEG,aAAa,IACtB,OAAOH,KAAK,EAAEK,KAAK,KAAK,SAAS,IACjC,EAAEL,KAAK,EAAEC,OAAO,IAAID,KAAK,EAAEE,OAAO,CAAC;AAEvC;;AAEA;AACA;AACA,SAASI,wBAAwBA,CAACC,KAAU,EAAW;EACrD,IAAIC,IAAS,GAAGD,KAAK,EAAEE,MAAM;EAC7B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,IAAIF,IAAI,EAAEE,CAAC,EAAE,EAAEF,IAAI,GAAGA,IAAI,CAACC,MAAM,EAAE;IACtD,IAAID,IAAI,EAAEG,aAAa,EAAEC,QAAQ,IAAI,IAAI,EAAE,OAAO,IAAI;EACxD;EACA,OAAO,KAAK;AACd;;AAEA;;AAEA,SAASC,gBAAgBA,CAACC,QAAa,EAAEC,KAAK,GAAG,CAAC,EAAsB;EACtE,IAAIA,KAAK,GAAGlB,cAAc,EAAE,OAAOmB,SAAS;EAC5C,IAAI,OAAOF,QAAQ,KAAK,QAAQ,EAAE;IAChC,MAAMG,CAAC,GAAGH,QAAQ,CAACI,IAAI,CAAC,CAAC;IACzB,OAAOD,CAAC,CAACE,MAAM,GAAG,CAAC,GAAGF,CAAC,GAAGD,SAAS;EACrC;EACA,IAAI,OAAOF,QAAQ,KAAK,QAAQ,EAAE,OAAOM,MAAM,CAACN,QAAQ,CAAC;EACzD,IAAIO,KAAK,CAACC,OAAO,CAACR,QAAQ,CAAC,EAAE;IAC3B,KAAK,MAAMS,KAAK,IAAIT,QAAQ,EAAE;MAC5B,MAAMG,CAAC,GAAGJ,gBAAgB,CAACU,KAAK,EAAER,KAAK,GAAG,CAAC,CAAC;MAC5C,IAAIE,CAAC,EAAE,OAAOA,CAAC;IACjB;IACA,OAAOD,SAAS;EAClB;EACA,IAAIF,QAAQ,IAAI,IAAI,IAAI,OAAOA,QAAQ,KAAK,QAAQ,IAAI,OAAO,IAAIA,QAAQ,EAAE;IAC3E,OAAOD,gBAAgB,CAAEC,QAAQ,CAASd,KAAK,EAAEc,QAAQ,EAAEC,KAAK,GAAG,CAAC,CAAC;EACvE;EACA,OAAOC,SAAS;AAClB;;AAEA;AACA,SAASQ,iBAAiBA,CAACxB,KAAU,EAAsB;EACzD,IAAI,CAACA,KAAK,EAAE,OAAOgB,SAAS;EAC5B,IACE,OAAOhB,KAAK,CAACyB,kBAAkB,KAAK,QAAQ,IAC5CzB,KAAK,CAACyB,kBAAkB,CAACP,IAAI,CAAC,CAAC,EAC/B;IACA,OAAOlB,KAAK,CAACyB,kBAAkB,CAACP,IAAI,CAAC,CAAC;EACxC;EACA,IAAI,OAAOlB,KAAK,CAAC0B,MAAM,KAAK,QAAQ,IAAI1B,KAAK,CAAC0B,MAAM,CAACR,IAAI,CAAC,CAAC,EAAE;IAC3D,OAAOlB,KAAK,CAAC0B,MAAM,CAACR,IAAI,CAAC,CAAC;EAC5B;EACA,IAAI,OAAOlB,KAAK,CAAC2B,WAAW,KAAK,QAAQ,IAAI3B,KAAK,CAAC2B,WAAW,CAACT,IAAI,CAAC,CAAC,EAAE;IACrE,OAAOlB,KAAK,CAAC2B,WAAW,CAACT,IAAI,CAAC,CAAC;EACjC;EACA,OAAOL,gBAAgB,CAACb,KAAK,CAACc,QAAQ,CAAC;AACzC;;AAEA;;AAMA,SAASc,gBAAgBA,CAACC,UAAe,EAAyB;EAChE,IAAItB,KAAU,GAAGsB,UAAU;EAC3B,KAAK,IAAInB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGd,eAAe,IAAIW,KAAK,EAAEG,CAAC,EAAE,EAAEH,KAAK,GAAGA,KAAK,CAACE,MAAM,EAAE;IACvE,MAAMqB,CAAC,GAAGvB,KAAK,CAACI,aAAa;IAC7B,IACE,OAAOmB,CAAC,EAAEC,KAAK,KAAK,QAAQ,IAC5B,OAAOD,CAAC,EAAEE,OAAO,KAAK,QAAQ,IAC9B,OAAOF,CAAC,EAAEG,SAAS,KAAK,UAAU,EAElC;IAEF,MAAMD,OAAe,GAAGF,CAAC,CAACE,OAAO;;IAEjC;IACA;IACA;IACA;IACA,MAAME,SAAiB,GACrB,OAAO3B,KAAK,CAAC4B,SAAS,EAAEnC,KAAK,EAAE+B,KAAK,KAAK,QAAQ,GAC7CxB,KAAK,CAAC4B,SAAS,CAACnC,KAAK,CAAC+B,KAAK,GAC3BD,CAAC,CAACC,KAAK;;IAEb;IACA,IAAIK,QAA2B;IAC/B,IAAIC,EAAO,GAAG9B,KAAK,CAACE,MAAM;IAC1B,KAAK,IAAI6B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,EAAE,IAAID,EAAE,EAAEC,CAAC,EAAE,EAAED,EAAE,GAAGA,EAAE,CAAC5B,MAAM,EAAE;MACjD,MAAM8B,OAAO,GAAGF,EAAE,CAACF,SAAS,EAAEnC,KAAK,IAAIqC,EAAE,CAAC1B,aAAa;MACvD,IAAIU,KAAK,CAACC,OAAO,CAACiB,OAAO,EAAEH,QAAQ,CAAC,EAAE;QACpCA,QAAQ,GAAGG,OAAO,CAACH,QAAQ;QAC3B;MACF;IACF;IAEA,IAAIA,QAAQ,EAAE;MACZ,IAAIJ,OAAO,CAACQ,QAAQ,CAAC,SAAS,CAAC,IAAIR,OAAO,CAACQ,QAAQ,CAAC,SAAS,CAAC,EAC5D,OAAOxB,SAAS;;MAElB;MACA;MACA;MACA;MACA;MACA,IAAIyB,GAAG,GAAGP,SAAS,GAAG,CAAC;MACvB,KAAK,IAAIQ,EAAE,GAAG,CAAC,EAAEA,EAAE,GAAGN,QAAQ,CAACjB,MAAM,EAAEuB,EAAE,EAAE,EAAE;QAC3C,MAAMC,KAAK,GAAGP,QAAQ,CAACM,EAAE,CAAC,CAACE,IAAI,EAAEzB,MAAM,IAAI,CAAC;QAC5C,IAAIsB,GAAG,KAAK,CAAC,CAAC,IAAIA,GAAG,KAAKE,KAAK,EAAE,OAAO3B,SAAS;QACjD,IAAIyB,GAAG,GAAGE,KAAK,EACb,OAAO;UAAEE,IAAI,EAAE,aAAa;UAAEC,YAAY,EAAEJ,EAAE;UAAEK,SAAS,EAAEN;QAAI,CAAC;QAClEA,GAAG,IAAIE,KAAK,GAAG,CAAC;MAClB;MACA,OAAO3B,SAAS;IAClB;IAEA,OAAO;MAAE6B,IAAI,EAAE,UAAU;MAAEd,KAAK,EAAEG;IAAU,CAAC;EAC/C;EACA,OAAOlB,SAAS;AAClB;;AAEA;;AAEA,SAASgC,SAASA,CAChBC,MAAqB,EACrBC,QAAuB,EACvBC,UAAkB,EAClBC,WAAmB,EACnB/C,KAAe,EACP;EACR,MAAMgD,IAAI,GAAGH,QAAQ,GACjB,GAAGD,MAAM,IAAIC,QAAQ,IAAIC,UAAU,EAAE,GACrC,GAAGF,MAAM,IAAIE,UAAU,EAAE;EAC7B,OAAO9C,KAAK,KAAKW,SAAS,GACtB,GAAGqC,IAAI,IAAIhD,KAAK,GAAG+C,WAAW,EAAE,GAChC,GAAGC,IAAI,GAAGD,WAAW,EAAE;AAC7B;;AAEA;;AAEA,OAAO,SAASE,cAAcA,CAACC,OAAgB,EAAEC,mBAA4B,EAAE;EAC7E,MAAMC,UAAU,GAAG/D,MAAM,CAAC6D,OAAO,CAAC;EAClC,MAAMG,sBAAsB,GAAGhE,MAAM,CAAC8D,mBAAmB,CAAC;EAC1D,MAAMG,aAAa,GAAGjE,MAAM,CAIlB,IAAI,CAAC;EACf,MAAMkE,aAAa,GAAGlE,MAAM,CAA4BsB,SAAS,CAAC;;EAElE;EACA;EACA;EACA;EACA,MAAM6C,mBAAmB,GAAGnE,MAAM,CAAuB,IAAIoE,GAAG,CAAC,CAAC,CAAC;EAEnErE,SAAS,CAAC,MAAM;IACdgE,UAAU,CAACM,OAAO,GAAGR,OAAO;IAC5B,IAAI,CAACA,OAAO,EAAE;MACZI,aAAa,CAACI,OAAO,GAAG,IAAI;MAC5BH,aAAa,CAACG,OAAO,GAAG/C,SAAS;MACjC6C,mBAAmB,CAACE,OAAO,CAACC,KAAK,CAAC,CAAC;IACrC;EACF,CAAC,EAAE,CAACT,OAAO,CAAC,CAAC;EAEb9D,SAAS,CAAC,MAAM;IACdiE,sBAAsB,CAACK,OAAO,GAAGP,mBAAmB;EACtD,CAAC,EAAE,CAACA,mBAAmB,CAAC,CAAC;EAEzB,MAAMS,YAAY,GAAGzE,WAAW,CAAE0E,CAAwB,IAAK;IAC7D,IAAI,CAACT,UAAU,CAACM,OAAO,EAAE;IACzB,IAAII,WAAgC;IACpC,IAAI;MACF,IAAI5D,KAAU,GAAI2D,CAAC,CAASE,WAAW;MACvC,KAAK,IAAI1D,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGd,eAAe,IAAIW,KAAK,EAAEG,CAAC,EAAE,EAAEH,KAAK,GAAGA,KAAK,CAACE,MAAM,EAAE;QACvE,IAAIL,QAAQ,CAACG,KAAK,CAACI,aAAa,CAAC,EAAE;UACjC;UACAwD,WAAW,GAAG5D,KAAK,CAACI,aAAa,CAACN,KAAK;UACvC;QACF;MACF;IACF,CAAC,CAAC,OAAOgE,CAAC,EAAE,CAAC;IACbV,aAAa,CAACI,OAAO,GAAG;MACtBO,CAAC,EAAEJ,CAAC,CAACK,WAAW,CAACC,KAAK;MACtBC,CAAC,EAAEP,CAAC,CAACK,WAAW,CAACG,KAAK;MACtBP;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMQ,UAAU,GAAGnF,WAAW,CAAE0E,CAAwB,IAAK;IAC3D,IAAI,CAACT,UAAU,CAACM,OAAO,EAAE;IACzB,MAAMa,KAAK,GAAGjB,aAAa,CAACI,OAAO;IACnC,IAAIa,KAAK,EAAE;MACT,MAAMC,EAAE,GAAGC,IAAI,CAACC,GAAG,CAACb,CAAC,CAACK,WAAW,CAACC,KAAK,GAAGI,KAAK,CAACN,CAAC,CAAC;MAClD,MAAMU,EAAE,GAAGF,IAAI,CAACC,GAAG,CAACb,CAAC,CAACK,WAAW,CAACG,KAAK,GAAGE,KAAK,CAACH,CAAC,CAAC;MAClD,IAAII,EAAE,GAAG/E,aAAa,IAAIkF,EAAE,GAAGlF,aAAa,EAAE;IAChD;IAEA,IAAI;MACF,IAAIU,IAAS,GAAI0D,CAAC,CAASE,WAAW;MACtC,IAAI,CAAC5D,IAAI,EAAE;;MAEX;MACA;MACA,IAAIyE,eAAoB,GAAG,IAAI;MAC/B,IAAIlE,KAAK,GAAG,CAAC;MACb,OAAOP,IAAI,IAAIO,KAAK,GAAGnB,eAAe,EAAE;QACtC,IAAIG,aAAa,CAACS,IAAI,CAACG,aAAa,CAAC,EAAE;UACrCsE,eAAe,GAAGzE,IAAI;UACtB;QACF;QACAA,IAAI,GAAGA,IAAI,CAACC,MAAM;QAClBM,KAAK,EAAE;MACT;MACA,IAAI,CAACkE,eAAe,EAAE;;MAEtB;MACA;MACA;MACA,IAAIC,cAAmB,GAAGD,eAAe;MACzC,IAAI9B,UAA8B;MAClC,KAAK,IAAIb,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,IAAI4C,cAAc,EAAE5C,CAAC,EAAE,EAAE;QAC5Ca,UAAU,GAAG3B,iBAAiB,CAAC0D,cAAc,CAACvE,aAAa,CAAC;QAC5D,IAAIwC,UAAU,EAAE;QAChB+B,cAAc,GAAGA,cAAc,CAACzE,MAAM;MACxC;MAEA,IAAI,CAAC0C,UAAU,EAAE;MAEjB,MAAMgC,YAAY,GAAG/E,QAAQ,CAAC6E,eAAe,CAACtE,aAAa,CAAC;MAC5D,IAAI,CAACwE,YAAY,IAAI7E,wBAAwB,CAAC2E,eAAe,CAAC,EAAE;MAEhE,MAAMhC,MAAM,GAAGtD,gBAAgB,CAAC,CAAC;MACjC,IAAIsD,MAAM,KAAKW,aAAa,CAACG,OAAO,EAAE;QACpCF,mBAAmB,CAACE,OAAO,CAACC,KAAK,CAAC,CAAC;QACnCJ,aAAa,CAACG,OAAO,GAAGd,MAAM;MAChC;MAEA,MAAMmC,SAAS,GAAG1B,sBAAsB,CAACK,OAAO,GAC5CnC,gBAAgB,CAACqD,eAAe,CAAC,GACjCjE,SAAS;MACb,MAAMkC,QAAQ,GAAGkC,SAAS,GACtBA,SAAS,CAACvC,IAAI,KAAK,aAAa,GAC9B,aAAa,GACb,UAAU,GACZ,IAAI;MACR,MAAMO,WAAW,GAAGgC,SAAS,GACzBA,SAAS,CAACvC,IAAI,KAAK,aAAa,GAC9B,YAAYuC,SAAS,CAACtC,YAAY,UAAUsC,SAAS,CAACrC,SAAS,EAAE,GACjE,UAAUqC,SAAS,CAACrD,KAAK,EAAE,GAC7B,EAAE;MAEN,IAAIoD,YAAY,EAAE;QAChB,MAAME,UAAU,GAAGxB,mBAAmB,CAACE,OAAO,CAACuB,GAAG,CAACnC,UAAU,CAAC;QAC9D,IAAIoC,QAAiB;QACrB,IAAIF,UAAU,KAAKrE,SAAS,EAAE;UAC5BuE,QAAQ,GAAG,CAACF,UAAU;QACxB,CAAC,MAAM;UACL,MAAMG,WAAW,GAAG7B,aAAa,CAACI,OAAO,EAAEI,WAAW;UACtDoB,QAAQ,GACNC,WAAW,KAAKxE,SAAS,GACrB,CAACwE,WAAW,GACZ,CAACP,eAAe,CAACtE,aAAa,CAACN,KAAK;QAC5C;QACAwD,mBAAmB,CAACE,OAAO,CAAC0B,GAAG,CAACtC,UAAU,EAAEoC,QAAQ,CAAC;QACrDG,OAAO,CAACC,GAAG,CACT,wBAAwB3C,SAAS,CAACC,MAAM,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,WAAW,EAAEmC,QAAQ,CAAC,GACxF,CAAC;MACH,CAAC,MAAM;QACLG,OAAO,CAACC,GAAG,CACT,wBAAwB3C,SAAS,CAACC,MAAM,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,WAAW,CAAC,GAC9E,CAAC;MACH;IACF,CAAC,CAAC,OAAOiB,CAAC,EAAE;MACV;IAAA;EAEJ,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IAAEJ,YAAY;IAAEU;EAAW,CAAC;AACrC","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -40,7 +40,10 @@ import { NetmeraProduct } from "./events/commerce/NetmeraProduct.js";
|
|
|
40
40
|
import { NetmeraEventContentComment } from "./events/media/NetmeraEventContentComment.js";
|
|
41
41
|
import { NetmeraEventContentRate } from "./events/media/NetmeraEventContentRate.js";
|
|
42
42
|
import { NetmeraEventContentView } from "./events/media/NetmeraEventContentView.js";
|
|
43
|
+
import { NetmeraAnalyticProvider } from "./NetmeraAnalyticProvider.js";
|
|
43
44
|
export { Netmera, NetmeraCouponObject, NetmeraUser, NetmeraPushObject, NetmeraPushType, NetmeraPushAction, NetmeraPushActionType, NetmeraCarouselObject, NetmeraInteractiveAction, NetmeraInboxFilter, NMInboxStatus, NMInboxStatusCountFilter, NetmeraCategory, NetmeraCategoryFilter, NMCategoryPreference, NotificationPermissionStatus, NetmeraLineItem, NetmeraProduct, NetmeraUserProfile, NetmeraProfileAttribute, NetmeraProfileAttributeCollection, Gender, MaritalStatus,
|
|
44
45
|
// Events
|
|
45
|
-
NetmeraEvent, NetmeraEventBannerOpen, NetmeraEventBatteryLevel, NetmeraEventCategoryView, NetmeraEventInAppPurchase, NetmeraEventLogin, NetmeraEventRegister, NetmeraEventScreenView, NetmeraEventSearch, NetmeraEventShare, NetmeraEventCartAddProduct, NetmeraEventCartRemoveProduct, NetmeraEventCartView, NetmeraEventOrderCancel, NetmeraEventProductComment, NetmeraEventProductRate, NetmeraEventProductView, NetmeraEventPurchase, NetmeraEventWishList, NetmeraEventContentComment, NetmeraEventContentRate, NetmeraEventContentView
|
|
46
|
+
NetmeraEvent, NetmeraEventBannerOpen, NetmeraEventBatteryLevel, NetmeraEventCategoryView, NetmeraEventInAppPurchase, NetmeraEventLogin, NetmeraEventRegister, NetmeraEventScreenView, NetmeraEventSearch, NetmeraEventShare, NetmeraEventCartAddProduct, NetmeraEventCartRemoveProduct, NetmeraEventCartView, NetmeraEventOrderCancel, NetmeraEventProductComment, NetmeraEventProductRate, NetmeraEventProductView, NetmeraEventPurchase, NetmeraEventWishList, NetmeraEventContentComment, NetmeraEventContentRate, NetmeraEventContentView,
|
|
47
|
+
// AutoTracking
|
|
48
|
+
NetmeraAnalyticProvider };
|
|
46
49
|
//# sourceMappingURL=index.js.map
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Netmera","NetmeraCouponObject","NetmeraEvent","NetmeraUser","NetmeraUserProfile","NetmeraProfileAttribute","NetmeraProfileAttributeCollection","Gender","MaritalStatus","NetmeraCategory","NetmeraCategoryFilter","NetmeraPushObject","NetmeraPushType","NetmeraPushAction","NetmeraPushActionType","NetmeraCarouselObject","NetmeraInteractiveAction","NetmeraInboxFilter","NMInboxStatusCountFilter","NMCategoryPreference","NMInboxStatus","NotificationPermissionStatus","NetmeraEventBannerOpen","NetmeraEventBatteryLevel","NetmeraEventCategoryView","NetmeraEventInAppPurchase","NetmeraEventLogin","NetmeraEventRegister","NetmeraEventScreenView","NetmeraEventSearch","NetmeraEventShare","NetmeraEventCartAddProduct","NetmeraEventCartRemoveProduct","NetmeraEventCartView","NetmeraEventOrderCancel","NetmeraEventProductComment","NetmeraEventProductRate","NetmeraEventProductView","NetmeraEventPurchase","NetmeraEventWishList","NetmeraLineItem","NetmeraProduct","NetmeraEventContentComment","NetmeraEventContentRate","NetmeraEventContentView"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,OAAOA,OAAO,MAAM,cAAW;AAC/B,OAAOC,mBAAmB,MAAM,iCAA8B;AAC9D,OAAOC,YAAY,MAAM,0BAAuB;AAChD,OAAOC,WAAW,MAAM,yBAAsB;AAC9C,SAASC,kBAAkB,QAAQ,gCAA6B;AAChE,SACEC,uBAAuB,EACvBC,iCAAiC,EACjCC,MAAM,EACNC,aAAa,QACR,qCAAkC;AACzC,OAAOC,eAAe,MAAM,6BAA0B;AACtD,OAAOC,qBAAqB,MAAM,mCAAgC;AAClE,OAAOC,iBAAiB,IAAIC,eAAe,QAAQ,+BAA4B;AAC/E,OAAOC,iBAAiB,IACtBC,qBAAqB,QAChB,+BAA4B;AACnC,OAAOC,qBAAqB,MAAM,mCAAgC;AAClE,OAAOC,wBAAwB,MAAM,sCAAmC;AACxE,OAAOC,kBAAkB,MAAM,gCAA6B;AAC5D,OAAOC,wBAAwB,MAAM,sCAAmC;AACxE,OAAOC,oBAAoB,MAAM,kCAA+B;AAChE,SAASC,aAAa,QAAQ,2BAAwB;AACtD,SAASC,4BAA4B,QAAQ,0CAAuC;AACpF,SAASC,sBAAsB,QAAQ,oCAAiC;AACxE,SAASC,wBAAwB,QAAQ,sCAAmC;AAC5E,SAASC,wBAAwB,QAAQ,sCAAmC;AAC5E,SAASC,yBAAyB,QAAQ,uCAAoC;AAC9E,SAASC,iBAAiB,QAAQ,+BAA4B;AAC9D,SAASC,oBAAoB,QAAQ,kCAA+B;AACpE,SAASC,sBAAsB,QAAQ,oCAAiC;AACxE,SAASC,kBAAkB,QAAQ,gCAA6B;AAChE,SAASC,iBAAiB,QAAQ,+BAA4B;AAC9D,SAASC,0BAA0B,QAAQ,iDAA8C;AACzF,SAASC,6BAA6B,QAAQ,oDAAiD;AAC/F,SAASC,oBAAoB,QAAQ,2CAAwC;AAC7E,SAASC,uBAAuB,QAAQ,8CAA2C;AACnF,SAASC,0BAA0B,QAAQ,iDAA8C;AACzF,SAASC,uBAAuB,QAAQ,8CAA2C;AACnF,SAASC,uBAAuB,QAAQ,8CAA2C;AACnF,SAASC,oBAAoB,QAAQ,2CAAwC;AAC7E,SAASC,oBAAoB,QAAQ,2CAAwC;AAC7E,SAASC,eAAe,QAAQ,sCAAmC;AACnE,SAASC,cAAc,QAAQ,qCAAkC;AACjE,SAASC,0BAA0B,QAAQ,8CAA2C;AACtF,SAASC,uBAAuB,QAAQ,2CAAwC;AAChF,SAASC,uBAAuB,QAAQ,2CAAwC;
|
|
1
|
+
{"version":3,"names":["Netmera","NetmeraCouponObject","NetmeraEvent","NetmeraUser","NetmeraUserProfile","NetmeraProfileAttribute","NetmeraProfileAttributeCollection","Gender","MaritalStatus","NetmeraCategory","NetmeraCategoryFilter","NetmeraPushObject","NetmeraPushType","NetmeraPushAction","NetmeraPushActionType","NetmeraCarouselObject","NetmeraInteractiveAction","NetmeraInboxFilter","NMInboxStatusCountFilter","NMCategoryPreference","NMInboxStatus","NotificationPermissionStatus","NetmeraEventBannerOpen","NetmeraEventBatteryLevel","NetmeraEventCategoryView","NetmeraEventInAppPurchase","NetmeraEventLogin","NetmeraEventRegister","NetmeraEventScreenView","NetmeraEventSearch","NetmeraEventShare","NetmeraEventCartAddProduct","NetmeraEventCartRemoveProduct","NetmeraEventCartView","NetmeraEventOrderCancel","NetmeraEventProductComment","NetmeraEventProductRate","NetmeraEventProductView","NetmeraEventPurchase","NetmeraEventWishList","NetmeraLineItem","NetmeraProduct","NetmeraEventContentComment","NetmeraEventContentRate","NetmeraEventContentView","NetmeraAnalyticProvider"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,OAAOA,OAAO,MAAM,cAAW;AAC/B,OAAOC,mBAAmB,MAAM,iCAA8B;AAC9D,OAAOC,YAAY,MAAM,0BAAuB;AAChD,OAAOC,WAAW,MAAM,yBAAsB;AAC9C,SAASC,kBAAkB,QAAQ,gCAA6B;AAChE,SACEC,uBAAuB,EACvBC,iCAAiC,EACjCC,MAAM,EACNC,aAAa,QACR,qCAAkC;AACzC,OAAOC,eAAe,MAAM,6BAA0B;AACtD,OAAOC,qBAAqB,MAAM,mCAAgC;AAClE,OAAOC,iBAAiB,IAAIC,eAAe,QAAQ,+BAA4B;AAC/E,OAAOC,iBAAiB,IACtBC,qBAAqB,QAChB,+BAA4B;AACnC,OAAOC,qBAAqB,MAAM,mCAAgC;AAClE,OAAOC,wBAAwB,MAAM,sCAAmC;AACxE,OAAOC,kBAAkB,MAAM,gCAA6B;AAC5D,OAAOC,wBAAwB,MAAM,sCAAmC;AACxE,OAAOC,oBAAoB,MAAM,kCAA+B;AAChE,SAASC,aAAa,QAAQ,2BAAwB;AACtD,SAASC,4BAA4B,QAAQ,0CAAuC;AACpF,SAASC,sBAAsB,QAAQ,oCAAiC;AACxE,SAASC,wBAAwB,QAAQ,sCAAmC;AAC5E,SAASC,wBAAwB,QAAQ,sCAAmC;AAC5E,SAASC,yBAAyB,QAAQ,uCAAoC;AAC9E,SAASC,iBAAiB,QAAQ,+BAA4B;AAC9D,SAASC,oBAAoB,QAAQ,kCAA+B;AACpE,SAASC,sBAAsB,QAAQ,oCAAiC;AACxE,SAASC,kBAAkB,QAAQ,gCAA6B;AAChE,SAASC,iBAAiB,QAAQ,+BAA4B;AAC9D,SAASC,0BAA0B,QAAQ,iDAA8C;AACzF,SAASC,6BAA6B,QAAQ,oDAAiD;AAC/F,SAASC,oBAAoB,QAAQ,2CAAwC;AAC7E,SAASC,uBAAuB,QAAQ,8CAA2C;AACnF,SAASC,0BAA0B,QAAQ,iDAA8C;AACzF,SAASC,uBAAuB,QAAQ,8CAA2C;AACnF,SAASC,uBAAuB,QAAQ,8CAA2C;AACnF,SAASC,oBAAoB,QAAQ,2CAAwC;AAC7E,SAASC,oBAAoB,QAAQ,2CAAwC;AAC7E,SAASC,eAAe,QAAQ,sCAAmC;AACnE,SAASC,cAAc,QAAQ,qCAAkC;AACjE,SAASC,0BAA0B,QAAQ,8CAA2C;AACtF,SAASC,uBAAuB,QAAQ,2CAAwC;AAChF,SAASC,uBAAuB,QAAQ,2CAAwC;AAChF,SAASC,uBAAuB,QAAQ,8BAA2B;AAGnE,SACE7C,OAAO,EACPC,mBAAmB,EACnBE,WAAW,EACXQ,iBAAiB,EACjBC,eAAe,EACfC,iBAAiB,EACjBC,qBAAqB,EACrBC,qBAAqB,EACrBC,wBAAwB,EACxBC,kBAAkB,EAClBG,aAAa,EACbF,wBAAwB,EACxBT,eAAe,EACfC,qBAAqB,EACrBS,oBAAoB,EACpBE,4BAA4B,EAC5BmB,eAAe,EACfC,cAAc,EACdrC,kBAAkB,EAClBC,uBAAuB,EACvBC,iCAAiC,EACjCC,MAAM,EACNC,aAAa;AAEb;AACAN,YAAY,EACZoB,sBAAsB,EACtBC,wBAAwB,EACxBC,wBAAwB,EACxBC,yBAAyB,EACzBC,iBAAiB,EACjBC,oBAAoB,EACpBC,sBAAsB,EACtBC,kBAAkB,EAClBC,iBAAiB,EACjBC,0BAA0B,EAC1BC,6BAA6B,EAC7BC,oBAAoB,EACpBC,uBAAuB,EACvBC,0BAA0B,EAC1BC,uBAAuB,EACvBC,uBAAuB,EACvBC,oBAAoB,EACpBC,oBAAoB,EACpBG,0BAA0B,EAC1BC,uBAAuB,EACvBC,uBAAuB;AAEvB;AACAC,uBAAuB","ignoreList":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface NetmeraAnalyticProviderProps {
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
/**
|
|
5
|
+
* Required on Old Architecture (newArchEnabled=false). Pass your NavigationContainer
|
|
6
|
+
* ref so the provider can subscribe to screen changes.
|
|
7
|
+
*
|
|
8
|
+
* On New Architecture the provider detects the navigation context automatically
|
|
9
|
+
* through the fiber tree — this prop is not needed.
|
|
10
|
+
*
|
|
11
|
+
* const navRef = useRef(null);
|
|
12
|
+
* <NetmeraAnalyticProvider navigationRef={navRef}>
|
|
13
|
+
* <NavigationContainer ref={navRef}>…</NavigationContainer>
|
|
14
|
+
* </NetmeraAnalyticProvider>
|
|
15
|
+
*/
|
|
16
|
+
navigationRef?: React.RefObject<any>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Wraps your app to enable automatic screen tracking and tap tracking.
|
|
20
|
+
*
|
|
21
|
+
* <NetmeraAnalyticProvider>
|
|
22
|
+
* <NavigationContainer>…</NavigationContainer>
|
|
23
|
+
* </NetmeraAnalyticProvider>
|
|
24
|
+
*/
|
|
25
|
+
export declare function NetmeraAnalyticProvider({ children, navigationRef, }: NetmeraAnalyticProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
//# sourceMappingURL=NetmeraAnalyticProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetmeraAnalyticProvider.d.ts","sourceRoot":"","sources":["../../../src/NetmeraAnalyticProvider.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAU3D,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;CACtC;AAQD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,QAAQ,EACR,aAAa,GACd,EAAE,4BAA4B,2CAwE9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetmeraNavigationState.d.ts","sourceRoot":"","sources":["../../../../src/autotracking/NetmeraNavigationState.ts"],"names":[],"mappings":"AAMA,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEnD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Subscribes to React Navigation screen changes and keeps NetmeraNavigationState
|
|
4
|
+
* up to date. Resolves the navigation container ref via two paths:
|
|
5
|
+
*
|
|
6
|
+
* - New Arch (Fabric): auto-detected through the fiber tree via viewRef.
|
|
7
|
+
* - Old Arch (Paper): caller passes navigationRef prop explicitly.
|
|
8
|
+
*
|
|
9
|
+
* Silently no-ops if neither path yields a valid ref.
|
|
10
|
+
* Respects the isScreenFlowEnabled flag — screen changes are ignored when disabled.
|
|
11
|
+
*/
|
|
12
|
+
export declare function useNavigationTracking(viewRef: React.RefObject<any>, navigationRef: React.RefObject<any> | undefined, enabled: boolean, screenLogEnabled: boolean): void;
|
|
13
|
+
//# sourceMappingURL=useNavigationTracking.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useNavigationTracking.d.ts","sourceRoot":"","sources":["../../../../src/autotracking/useNavigationTracking.ts"],"names":[],"mappings":"AAIA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAiCjD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAC7B,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS,EAC/C,OAAO,EAAE,OAAO,EAChB,gBAAgB,EAAE,OAAO,GACxB,IAAI,CA4EN"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { GestureResponderEvent } from 'react-native';
|
|
2
|
+
export declare function useTapTracking(enabled: boolean, shouldCollectValues: boolean): {
|
|
3
|
+
onTouchStart: (e: GestureResponderEvent) => void;
|
|
4
|
+
onTouchEnd: (e: GestureResponderEvent) => void;
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=useTapTracking.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTapTracking.d.ts","sourceRoot":"","sources":["../../../../src/autotracking/useTapTracking.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AA4J1D,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO;sBA6BtC,qBAAqB;oBAoBvB,qBAAqB;EA0FzD"}
|
|
@@ -38,5 +38,7 @@ import { NetmeraProduct } from './events/commerce/NetmeraProduct';
|
|
|
38
38
|
import { NetmeraEventContentComment } from './events/media/NetmeraEventContentComment';
|
|
39
39
|
import { NetmeraEventContentRate } from './events/media/NetmeraEventContentRate';
|
|
40
40
|
import { NetmeraEventContentView } from './events/media/NetmeraEventContentView';
|
|
41
|
-
|
|
41
|
+
import { NetmeraAnalyticProvider } from './NetmeraAnalyticProvider';
|
|
42
|
+
import type { NetmeraAnalyticProviderProps } from './NetmeraAnalyticProvider';
|
|
43
|
+
export { Netmera, NetmeraCouponObject, NetmeraUser, NetmeraPushObject, NetmeraPushType, NetmeraPushAction, NetmeraPushActionType, NetmeraCarouselObject, NetmeraInteractiveAction, NetmeraInboxFilter, NMInboxStatus, NMInboxStatusCountFilter, NetmeraCategory, NetmeraCategoryFilter, NMCategoryPreference, NotificationPermissionStatus, NetmeraLineItem, NetmeraProduct, NetmeraUserProfile, NetmeraProfileAttribute, NetmeraProfileAttributeCollection, Gender, MaritalStatus, NetmeraEvent, NetmeraEventBannerOpen, NetmeraEventBatteryLevel, NetmeraEventCategoryView, NetmeraEventInAppPurchase, NetmeraEventLogin, NetmeraEventRegister, NetmeraEventScreenView, NetmeraEventSearch, NetmeraEventShare, NetmeraEventCartAddProduct, NetmeraEventCartRemoveProduct, NetmeraEventCartView, NetmeraEventOrderCancel, NetmeraEventProductComment, NetmeraEventProductRate, NetmeraEventProductView, NetmeraEventPurchase, NetmeraEventWishList, NetmeraEventContentComment, NetmeraEventContentRate, NetmeraEventContentView, NetmeraAnalyticProvider, type NetmeraAnalyticProviderProps, };
|
|
42
44
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,mBAAmB,MAAM,8BAA8B,CAAC;AAC/D,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EACL,uBAAuB,EACvB,iCAAiC,EACjC,MAAM,EACN,aAAa,EACd,MAAM,kCAAkC,CAAC;AAC1C,OAAO,eAAe,MAAM,0BAA0B,CAAC;AACvD,OAAO,qBAAqB,MAAM,gCAAgC,CAAC;AACnE,OAAO,iBAAiB,EAAE,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,iBAAiB,EAAE,EACxB,qBAAqB,EACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,qBAAqB,MAAM,gCAAgC,CAAC;AACnE,OAAO,wBAAwB,MAAM,mCAAmC,CAAC;AACzE,OAAO,kBAAkB,MAAM,6BAA6B,CAAC;AAC7D,OAAO,wBAAwB,MAAM,mCAAmC,CAAC;AACzE,OAAO,oBAAoB,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAC1F,OAAO,EAAE,6BAA6B,EAAE,MAAM,iDAAiD,CAAC;AAChG,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAC1F,OAAO,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
|