@shware/analytics 2.18.0 → 3.0.0
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/dist/hooks/use-app-analytics.cjs +1 -3
- package/dist/hooks/use-app-analytics.cjs.map +1 -1
- package/dist/hooks/use-app-analytics.d.cts +1 -1
- package/dist/hooks/use-app-analytics.d.ts +1 -1
- package/dist/hooks/use-app-analytics.mjs +1 -3
- package/dist/hooks/use-app-analytics.mjs.map +1 -1
- package/package.json +3 -7
|
@@ -23,7 +23,6 @@ __export(use_app_analytics_exports, {
|
|
|
23
23
|
useAppAnalytics: () => useAppAnalytics
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(use_app_analytics_exports);
|
|
26
|
-
var import_expo_router = require("expo-router");
|
|
27
26
|
var import_react = require("react");
|
|
28
27
|
var import_react_native = require("react-native");
|
|
29
28
|
var import_setup = require("../setup/index.cjs");
|
|
@@ -42,8 +41,7 @@ function sendUserEngagement() {
|
|
|
42
41
|
if (engagement_time_msec <= 0) return;
|
|
43
42
|
(0, import_track.track)("user_engagement", { engagement_time_msec }, { enableThirdPartyTracking: false });
|
|
44
43
|
}
|
|
45
|
-
function useAppAnalytics() {
|
|
46
|
-
const pathname = (0, import_expo_router.usePathname)();
|
|
44
|
+
function useAppAnalytics(pathname) {
|
|
47
45
|
const prevPathname = (0, import_use_previous.usePrevious)(pathname);
|
|
48
46
|
(0, import_react.useEffect)(() => {
|
|
49
47
|
sendFirstOpen(pathname);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/use-app-analytics.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/use-app-analytics.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { AppState } from 'react-native';\nimport { config } from '../setup/index';\nimport { session } from '../setup/session';\nimport { track } from '../track/index';\nimport { usePrevious } from './use-previous';\n\nfunction sendFirstOpen(pathname: string) {\n const key = 'first_open_time';\n if (config.storage.getItem(key)) return;\n const properties = { screen_name: pathname, screen_class: pathname };\n track('first_open', properties, { enableThirdPartyTracking: false });\n config.storage.setItem(key, new Date().toISOString());\n}\n\nfunction sendUserEngagement() {\n const engagement_time_msec = session.flush();\n if (engagement_time_msec <= 0) return;\n track('user_engagement', { engagement_time_msec }, { enableThirdPartyTracking: false });\n}\n\nexport function useAppAnalytics(pathname: string) {\n const prevPathname = usePrevious(pathname);\n\n useEffect(() => {\n sendFirstOpen(pathname);\n track('session_start', undefined, { enableThirdPartyTracking: false });\n\n const subscription = AppState.addEventListener('change', (state) => {\n session.updateAccumulator();\n // when returning to the foreground from the background\n if (state === 'active' && !session.isActive()) {\n session.updateActive(true);\n }\n // when entering the background\n else if (state !== 'active' && session.isActive()) {\n session.updateActive(false);\n sendUserEngagement();\n }\n });\n\n return () => subscription.remove();\n }, []);\n\n // when the screen is switched, the engagement time of the previous screen is recorded\n useEffect(() => {\n track('screen_view', {\n screen_name: pathname,\n screen_class: pathname,\n previous_screen_class: prevPathname ?? undefined,\n engagement_time_msec: prevPathname ? session.flush() : undefined,\n });\n }, [pathname]);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA0B;AAC1B,0BAAyB;AACzB,mBAAuB;AACvB,qBAAwB;AACxB,mBAAsB;AACtB,0BAA4B;AAE5B,SAAS,cAAc,UAAkB;AACvC,QAAM,MAAM;AACZ,MAAI,oBAAO,QAAQ,QAAQ,GAAG,EAAG;AACjC,QAAM,aAAa,EAAE,aAAa,UAAU,cAAc,SAAS;AACnE,0BAAM,cAAc,YAAY,EAAE,0BAA0B,MAAM,CAAC;AACnE,sBAAO,QAAQ,QAAQ,MAAK,oBAAI,KAAK,GAAE,YAAY,CAAC;AACtD;AAEA,SAAS,qBAAqB;AAC5B,QAAM,uBAAuB,uBAAQ,MAAM;AAC3C,MAAI,wBAAwB,EAAG;AAC/B,0BAAM,mBAAmB,EAAE,qBAAqB,GAAG,EAAE,0BAA0B,MAAM,CAAC;AACxF;AAEO,SAAS,gBAAgB,UAAkB;AAChD,QAAM,mBAAe,iCAAY,QAAQ;AAEzC,8BAAU,MAAM;AACd,kBAAc,QAAQ;AACtB,4BAAM,iBAAiB,QAAW,EAAE,0BAA0B,MAAM,CAAC;AAErE,UAAM,eAAe,6BAAS,iBAAiB,UAAU,CAAC,UAAU;AAClE,6BAAQ,kBAAkB;AAE1B,UAAI,UAAU,YAAY,CAAC,uBAAQ,SAAS,GAAG;AAC7C,+BAAQ,aAAa,IAAI;AAAA,MAC3B,WAES,UAAU,YAAY,uBAAQ,SAAS,GAAG;AACjD,+BAAQ,aAAa,KAAK;AAC1B,2BAAmB;AAAA,MACrB;AAAA,IACF,CAAC;AAED,WAAO,MAAM,aAAa,OAAO;AAAA,EACnC,GAAG,CAAC,CAAC;AAGL,8BAAU,MAAM;AACd,4BAAM,eAAe;AAAA,MACnB,aAAa;AAAA,MACb,cAAc;AAAA,MACd,uBAAuB,gBAAgB;AAAA,MACvC,sBAAsB,eAAe,uBAAQ,MAAM,IAAI;AAAA,IACzD,CAAC;AAAA,EACH,GAAG,CAAC,QAAQ,CAAC;AACf;","names":[]}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
// src/hooks/use-app-analytics.ts
|
|
2
|
-
import { usePathname } from "expo-router";
|
|
3
2
|
import { useEffect } from "react";
|
|
4
3
|
import { AppState } from "react-native";
|
|
5
4
|
import { config } from "../setup/index.mjs";
|
|
@@ -18,8 +17,7 @@ function sendUserEngagement() {
|
|
|
18
17
|
if (engagement_time_msec <= 0) return;
|
|
19
18
|
track("user_engagement", { engagement_time_msec }, { enableThirdPartyTracking: false });
|
|
20
19
|
}
|
|
21
|
-
function useAppAnalytics() {
|
|
22
|
-
const pathname = usePathname();
|
|
20
|
+
function useAppAnalytics(pathname) {
|
|
23
21
|
const prevPathname = usePrevious(pathname);
|
|
24
22
|
useEffect(() => {
|
|
25
23
|
sendFirstOpen(pathname);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/use-app-analytics.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/use-app-analytics.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { AppState } from 'react-native';\nimport { config } from '../setup/index';\nimport { session } from '../setup/session';\nimport { track } from '../track/index';\nimport { usePrevious } from './use-previous';\n\nfunction sendFirstOpen(pathname: string) {\n const key = 'first_open_time';\n if (config.storage.getItem(key)) return;\n const properties = { screen_name: pathname, screen_class: pathname };\n track('first_open', properties, { enableThirdPartyTracking: false });\n config.storage.setItem(key, new Date().toISOString());\n}\n\nfunction sendUserEngagement() {\n const engagement_time_msec = session.flush();\n if (engagement_time_msec <= 0) return;\n track('user_engagement', { engagement_time_msec }, { enableThirdPartyTracking: false });\n}\n\nexport function useAppAnalytics(pathname: string) {\n const prevPathname = usePrevious(pathname);\n\n useEffect(() => {\n sendFirstOpen(pathname);\n track('session_start', undefined, { enableThirdPartyTracking: false });\n\n const subscription = AppState.addEventListener('change', (state) => {\n session.updateAccumulator();\n // when returning to the foreground from the background\n if (state === 'active' && !session.isActive()) {\n session.updateActive(true);\n }\n // when entering the background\n else if (state !== 'active' && session.isActive()) {\n session.updateActive(false);\n sendUserEngagement();\n }\n });\n\n return () => subscription.remove();\n }, []);\n\n // when the screen is switched, the engagement time of the previous screen is recorded\n useEffect(() => {\n track('screen_view', {\n screen_name: pathname,\n screen_class: pathname,\n previous_screen_class: prevPathname ?? undefined,\n engagement_time_msec: prevPathname ? session.flush() : undefined,\n });\n }, [pathname]);\n}\n"],"mappings":";AAAA,SAAS,iBAAiB;AAC1B,SAAS,gBAAgB;AACzB,SAAS,cAAc;AACvB,SAAS,eAAe;AACxB,SAAS,aAAa;AACtB,SAAS,mBAAmB;AAE5B,SAAS,cAAc,UAAkB;AACvC,QAAM,MAAM;AACZ,MAAI,OAAO,QAAQ,QAAQ,GAAG,EAAG;AACjC,QAAM,aAAa,EAAE,aAAa,UAAU,cAAc,SAAS;AACnE,QAAM,cAAc,YAAY,EAAE,0BAA0B,MAAM,CAAC;AACnE,SAAO,QAAQ,QAAQ,MAAK,oBAAI,KAAK,GAAE,YAAY,CAAC;AACtD;AAEA,SAAS,qBAAqB;AAC5B,QAAM,uBAAuB,QAAQ,MAAM;AAC3C,MAAI,wBAAwB,EAAG;AAC/B,QAAM,mBAAmB,EAAE,qBAAqB,GAAG,EAAE,0BAA0B,MAAM,CAAC;AACxF;AAEO,SAAS,gBAAgB,UAAkB;AAChD,QAAM,eAAe,YAAY,QAAQ;AAEzC,YAAU,MAAM;AACd,kBAAc,QAAQ;AACtB,UAAM,iBAAiB,QAAW,EAAE,0BAA0B,MAAM,CAAC;AAErE,UAAM,eAAe,SAAS,iBAAiB,UAAU,CAAC,UAAU;AAClE,cAAQ,kBAAkB;AAE1B,UAAI,UAAU,YAAY,CAAC,QAAQ,SAAS,GAAG;AAC7C,gBAAQ,aAAa,IAAI;AAAA,MAC3B,WAES,UAAU,YAAY,QAAQ,SAAS,GAAG;AACjD,gBAAQ,aAAa,KAAK;AAC1B,2BAAmB;AAAA,MACrB;AAAA,IACF,CAAC;AAED,WAAO,MAAM,aAAa,OAAO;AAAA,EACnC,GAAG,CAAC,CAAC;AAGL,YAAU,MAAM;AACd,UAAM,eAAe;AAAA,MACnB,aAAa;AAAA,MACb,cAAc;AAAA,MACd,uBAAuB,gBAAgB;AAAA,MACvC,sBAAsB,eAAe,QAAQ,MAAM,IAAI;AAAA,IACzD,CAAC;AAAA,EACH,GAAG,CAAC,QAAQ,CAAC;AACf;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shware/analytics",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -70,8 +70,8 @@
|
|
|
70
70
|
"@types/node": "^24.10.2",
|
|
71
71
|
"@types/react": "^19.2.7",
|
|
72
72
|
"typescript": "^5.9.3",
|
|
73
|
-
"@repo/
|
|
74
|
-
"@repo/
|
|
73
|
+
"@repo/eslint-config": "0.0.10",
|
|
74
|
+
"@repo/typescript-config": "0.0.0"
|
|
75
75
|
},
|
|
76
76
|
"peerDependencies": {
|
|
77
77
|
"@react-native-firebase/analytics": "^23.3.1",
|
|
@@ -80,7 +80,6 @@
|
|
|
80
80
|
"expo-crypto": "^15.0.7",
|
|
81
81
|
"expo-device": "^8.0.9",
|
|
82
82
|
"expo-localization": "^17.0.7",
|
|
83
|
-
"expo-router": "^6.0.13",
|
|
84
83
|
"expo-sqlite": "^16.0.8",
|
|
85
84
|
"expo-tracking-transparency": "^6.0.7",
|
|
86
85
|
"facebook-nodejs-business-sdk": "^23",
|
|
@@ -110,9 +109,6 @@
|
|
|
110
109
|
"expo-localization": {
|
|
111
110
|
"optional": true
|
|
112
111
|
},
|
|
113
|
-
"expo-router": {
|
|
114
|
-
"optional": true
|
|
115
|
-
},
|
|
116
112
|
"expo-sqlite": {
|
|
117
113
|
"optional": true
|
|
118
114
|
},
|