@thisbefine/analytics 0.2.1 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +161 -3
- package/dist/core/analytics.d.ts +44 -2
- package/dist/core/analytics.d.ts.map +1 -1
- package/dist/core/analytics.js +154 -17
- package/dist/core/analytics.js.map +1 -1
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +3 -2
- package/dist/core/errors.js.map +1 -1
- package/dist/core/logger.d.ts +2 -1
- package/dist/core/logger.d.ts.map +1 -1
- package/dist/core/logger.js +53 -1
- package/dist/core/logger.js.map +1 -1
- package/dist/core/privacy.d.ts +50 -2
- package/dist/core/privacy.d.ts.map +1 -1
- package/dist/core/privacy.js +118 -1
- package/dist/core/privacy.js.map +1 -1
- package/dist/core/queue.d.ts +76 -3
- package/dist/core/queue.d.ts.map +1 -1
- package/dist/core/queue.js +353 -40
- package/dist/core/queue.js.map +1 -1
- package/dist/core/session.d.ts +5 -3
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +20 -5
- package/dist/core/session.js.map +1 -1
- package/dist/core/types.d.ts +150 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +10 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/version.d.ts +1 -1
- package/dist/core/version.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/next.d.ts +2 -0
- package/dist/next.d.ts.map +1 -1
- package/dist/next.js +2 -3
- package/dist/next.js.map +1 -1
- package/dist/react/context.d.ts +95 -0
- package/dist/react/context.d.ts.map +1 -0
- package/dist/react/context.js +120 -0
- package/dist/react/context.js.map +1 -0
- package/dist/react/hooks.d.ts.map +1 -1
- package/dist/react/hooks.js +38 -34
- package/dist/react/hooks.js.map +1 -1
- package/dist/react.d.ts +2 -0
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +1 -0
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { createContext, useContext, useEffect, useMemo, useRef, useState, } from "react";
|
|
4
|
+
import { getAnalytics as getGlobalAnalytics, initAnalytics, } from "../core/analytics";
|
|
5
|
+
/**
|
|
6
|
+
* React Context for Analytics
|
|
7
|
+
*/
|
|
8
|
+
export const AnalyticsContext = createContext({
|
|
9
|
+
analytics: null,
|
|
10
|
+
isReady: false,
|
|
11
|
+
isClient: false,
|
|
12
|
+
});
|
|
13
|
+
/**
|
|
14
|
+
* Analytics Provider - initializes and provides Analytics context
|
|
15
|
+
*
|
|
16
|
+
* Wrap your app with this provider to use analytics hooks.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```tsx
|
|
20
|
+
*
|
|
21
|
+
* import { AnalyticsProvider } from '@thisbefine/analytics/react';
|
|
22
|
+
*
|
|
23
|
+
* export default function RootLayout({ children }) {
|
|
24
|
+
* return (
|
|
25
|
+
* <html>
|
|
26
|
+
* <body>
|
|
27
|
+
* <AnalyticsProvider apiKey="tbf_xxx">
|
|
28
|
+
* {children}
|
|
29
|
+
* </AnalyticsProvider>
|
|
30
|
+
* </body>
|
|
31
|
+
* </html>
|
|
32
|
+
* );
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export const AnalyticsProvider = ({ apiKey, host, debug = false, trackPageviews = true, config, children, }) => {
|
|
37
|
+
const [analytics, setAnalytics] = useState(null);
|
|
38
|
+
const [isReady, setIsReady] = useState(false);
|
|
39
|
+
const [isClient, setIsClient] = useState(false);
|
|
40
|
+
const initialized = useRef(false);
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
setIsClient(true);
|
|
43
|
+
}, []);
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
if (initialized.current)
|
|
46
|
+
return;
|
|
47
|
+
if (typeof window === "undefined")
|
|
48
|
+
return;
|
|
49
|
+
const resolvedApiKey = apiKey ?? process.env.NEXT_PUBLIC_TBF_API_KEY ?? "";
|
|
50
|
+
if (!resolvedApiKey) {
|
|
51
|
+
console.warn("[Thisbefine] No API key provided. Set NEXT_PUBLIC_TBF_API_KEY or pass apiKey prop.");
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const instance = initAnalytics({
|
|
55
|
+
apiKey: resolvedApiKey,
|
|
56
|
+
host,
|
|
57
|
+
debug,
|
|
58
|
+
...config,
|
|
59
|
+
});
|
|
60
|
+
initialized.current = true;
|
|
61
|
+
setAnalytics(instance);
|
|
62
|
+
setIsReady(true);
|
|
63
|
+
if (trackPageviews) {
|
|
64
|
+
instance.page();
|
|
65
|
+
}
|
|
66
|
+
}, [apiKey, host, debug, config, trackPageviews]);
|
|
67
|
+
useEffect(() => {
|
|
68
|
+
if (!trackPageviews || !analytics)
|
|
69
|
+
return;
|
|
70
|
+
if (typeof window === "undefined")
|
|
71
|
+
return;
|
|
72
|
+
const handlePopState = () => {
|
|
73
|
+
analytics.page();
|
|
74
|
+
};
|
|
75
|
+
window.addEventListener("popstate", handlePopState);
|
|
76
|
+
return () => window.removeEventListener("popstate", handlePopState);
|
|
77
|
+
}, [trackPageviews, analytics]);
|
|
78
|
+
const value = useMemo(() => ({ analytics, isReady, isClient }), [analytics, isReady, isClient]);
|
|
79
|
+
return (_jsx(AnalyticsContext.Provider, { value: value, children: children }));
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Hook to access the Analytics context
|
|
83
|
+
*
|
|
84
|
+
* SSR-safe: returns isClient=false and analytics=null during server rendering.
|
|
85
|
+
* Use isReady to check if analytics is initialized.
|
|
86
|
+
*
|
|
87
|
+
* For backward compatibility, falls back to global analytics instance if
|
|
88
|
+
* no AnalyticsProvider is used (e.g., when using the <Analytics /> component).
|
|
89
|
+
*/
|
|
90
|
+
export const useAnalyticsContext = () => {
|
|
91
|
+
const context = useContext(AnalyticsContext);
|
|
92
|
+
if (context.analytics || context.isReady || context.isClient) {
|
|
93
|
+
return context;
|
|
94
|
+
}
|
|
95
|
+
const globalAnalytics = getGlobalAnalytics();
|
|
96
|
+
if (globalAnalytics) {
|
|
97
|
+
return { analytics: globalAnalytics, isReady: true, isClient: true };
|
|
98
|
+
}
|
|
99
|
+
return context;
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Hook to check if we're on the client side
|
|
103
|
+
* Useful for SSR hydration safety
|
|
104
|
+
*/
|
|
105
|
+
export const useIsClient = () => {
|
|
106
|
+
const [isClient, setIsClient] = useState(false);
|
|
107
|
+
useEffect(() => {
|
|
108
|
+
setIsClient(true);
|
|
109
|
+
}, []);
|
|
110
|
+
return isClient;
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* Hook to check if analytics is ready
|
|
114
|
+
* Combines isClient and isReady checks
|
|
115
|
+
*/
|
|
116
|
+
export const useAnalyticsReady = () => {
|
|
117
|
+
const { isReady, isClient } = useAnalyticsContext();
|
|
118
|
+
return isClient && isReady;
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/react/context.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EACN,aAAa,EAEb,UAAU,EACV,SAAS,EACT,OAAO,EACP,MAAM,EACN,QAAQ,GACR,MAAM,OAAO,CAAC;AACf,OAAO,EACN,YAAY,IAAI,kBAAkB,EAClC,aAAa,GACb,MAAM,mBAAmB,CAAC;AAe3B;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAwB;IACpE,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,KAAK;CACf,CAAC,CAAC;AAyCH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EACjC,MAAM,EACN,IAAI,EACJ,KAAK,GAAG,KAAK,EACb,cAAc,GAAG,IAAI,EACrB,MAAM,EACN,QAAQ,GACgB,EAAE,EAAE;IAC5B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAmB,IAAI,CAAC,CAAC;IACnE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAElC,SAAS,CAAC,GAAG,EAAE;QACd,WAAW,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,WAAW,CAAC,OAAO;YAAE,OAAO;QAChC,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAE1C,MAAM,cAAc,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE,CAAC;QAE3E,IAAI,CAAC,cAAc,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CACX,oFAAoF,CACpF,CAAC;YACF,OAAO;QACR,CAAC;QAED,MAAM,QAAQ,GAAG,aAAa,CAAC;YAC9B,MAAM,EAAE,cAAc;YACtB,IAAI;YACJ,KAAK;YACL,GAAG,MAAM;SACT,CAAC,CAAC;QAEH,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;QAC3B,YAAY,CAAC,QAAQ,CAAC,CAAC;QACvB,UAAU,CAAC,IAAI,CAAC,CAAC;QAEjB,IAAI,cAAc,EAAE,CAAC;YACpB,QAAQ,CAAC,IAAI,EAAE,CAAC;QACjB,CAAC;IACF,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IAElD,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,cAAc,IAAI,CAAC,SAAS;YAAE,OAAO;QAC1C,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAE1C,MAAM,cAAc,GAAG,GAAG,EAAE;YAC3B,SAAS,CAAC,IAAI,EAAE,CAAC;QAClB,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QACpD,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IACrE,CAAC,EAAE,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC;IAEhC,MAAM,KAAK,GAAG,OAAO,CACpB,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EACxC,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAC9B,CAAC;IAEF,OAAO,CACN,KAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YACrC,QAAQ,GACkB,CAC5B,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAA0B,EAAE;IAC9D,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAE7C,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC9D,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;IAC7C,IAAI,eAAe,EAAE,CAAC;QACrB,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACtE,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAY,EAAE;IACxC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACd,WAAW,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,QAAQ,CAAC;AACjB,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAY,EAAE;IAC9C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,mBAAmB,EAAE,CAAC;IACpD,OAAO,QAAQ,IAAI,OAAO,CAAC;AAC5B,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/react/hooks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/react/hooks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACX,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACX,0BAA0B,EAC1B,wBAAwB,EACxB,wBAAwB,EACxB,eAAe,EACf,iBAAiB,EACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG1E;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,QAAO,SAU/B,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,QAAQ,GAAI,WAAW,MAAM,mBAI1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,SAKtC,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,WAAW,iBAIb,MAAM,WAAW,UAAU,SAKrC,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,QAAQ,oBAIP,MAAM,WAAW,aAAa,SAK3C,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,OAAO,gBAIV,MAAM,eAAe,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,SAKrD,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,QAAQ,kBAMpB,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,UAAU,gDAMtB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,gBAItB,KAAK,YAAY,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,SAKjD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM,kBAIP,MAAM,SAAS,QAAQ,aAAa,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,SAKtE,CAAC;AAoBF;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,iDAA6C,CAAC;AAEpE;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,gDAA2C,CAAC;AAEjE;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,iDAA6C,CAAC;AAEpE;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,yDAC6B,CAAC;AAE5D;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,8DACkC,CAAC;AAEtE;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,gEACoC,CAAC;AAE1E;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,8DACkC,CAAC;AAEtE;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,uDAC2B,CAAC;AAExD;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,yDAC6B,CAAC;AAE5D;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,uDAC2B,CAAC;AAExD;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,qDAAqD,CAAC;AAEhF;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,qDAAqD,CAAC;AAEhF;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,yDAC6B,CAAC;AAE5D;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,2DAC+B,CAAC"}
|
package/dist/react/hooks.js
CHANGED
|
@@ -1,16 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useCallback } from "react";
|
|
3
|
-
import {
|
|
4
|
-
/**
|
|
5
|
-
* Get the analytics instance, throwing if not initialized
|
|
6
|
-
*/
|
|
7
|
-
const getAnalyticsOrThrow = () => {
|
|
8
|
-
const analytics = getAnalytics();
|
|
9
|
-
if (!analytics) {
|
|
10
|
-
throw new Error("Analytics not initialized. Make sure you have added <Analytics /> to your app.");
|
|
11
|
-
}
|
|
12
|
-
return analytics;
|
|
13
|
-
};
|
|
3
|
+
import { useAnalyticsContext } from "./context";
|
|
14
4
|
/**
|
|
15
5
|
* Hook to access the Analytics instance
|
|
16
6
|
*
|
|
@@ -26,7 +16,11 @@ const getAnalyticsOrThrow = () => {
|
|
|
26
16
|
* ```
|
|
27
17
|
*/
|
|
28
18
|
export const useAnalytics = () => {
|
|
29
|
-
|
|
19
|
+
const { analytics } = useAnalyticsContext();
|
|
20
|
+
if (!analytics) {
|
|
21
|
+
throw new Error("Analytics not initialized. Make sure you have added <AnalyticsProvider> to your app.");
|
|
22
|
+
}
|
|
23
|
+
return analytics;
|
|
30
24
|
};
|
|
31
25
|
/**
|
|
32
26
|
* Hook to get a memoized track function for a specific event
|
|
@@ -48,9 +42,10 @@ export const useAnalytics = () => {
|
|
|
48
42
|
* ```
|
|
49
43
|
*/
|
|
50
44
|
export const useTrack = (eventName) => {
|
|
45
|
+
const { analytics } = useAnalyticsContext();
|
|
51
46
|
return useCallback((properties) => {
|
|
52
|
-
|
|
53
|
-
}, [eventName]);
|
|
47
|
+
analytics?.track(eventName, properties);
|
|
48
|
+
}, [analytics, eventName]);
|
|
54
49
|
};
|
|
55
50
|
/**
|
|
56
51
|
* Hook to identify the current user
|
|
@@ -70,9 +65,10 @@ export const useTrack = (eventName) => {
|
|
|
70
65
|
* ```
|
|
71
66
|
*/
|
|
72
67
|
export const useIdentify = () => {
|
|
68
|
+
const { analytics } = useAnalyticsContext();
|
|
73
69
|
return useCallback((userId, traits) => {
|
|
74
|
-
|
|
75
|
-
}, []);
|
|
70
|
+
analytics?.identify(userId, traits);
|
|
71
|
+
}, [analytics]);
|
|
76
72
|
};
|
|
77
73
|
/**
|
|
78
74
|
* Hook to associate the current user with an account/company
|
|
@@ -92,9 +88,10 @@ export const useIdentify = () => {
|
|
|
92
88
|
* ```
|
|
93
89
|
*/
|
|
94
90
|
export const useGroup = () => {
|
|
91
|
+
const { analytics } = useAnalyticsContext();
|
|
95
92
|
return useCallback((accountId, traits) => {
|
|
96
|
-
|
|
97
|
-
}, []);
|
|
93
|
+
analytics?.group(accountId, traits);
|
|
94
|
+
}, [analytics]);
|
|
98
95
|
};
|
|
99
96
|
/**
|
|
100
97
|
* Hook to track page views
|
|
@@ -111,9 +108,10 @@ export const useGroup = () => {
|
|
|
111
108
|
* ```
|
|
112
109
|
*/
|
|
113
110
|
export const usePage = () => {
|
|
111
|
+
const { analytics } = useAnalyticsContext();
|
|
114
112
|
return useCallback((name, properties) => {
|
|
115
|
-
|
|
116
|
-
}, []);
|
|
113
|
+
analytics?.page(name, properties);
|
|
114
|
+
}, [analytics]);
|
|
117
115
|
};
|
|
118
116
|
/**
|
|
119
117
|
* Hook to reset the analytics session (call on logout)
|
|
@@ -129,9 +127,10 @@ export const usePage = () => {
|
|
|
129
127
|
* ```
|
|
130
128
|
*/
|
|
131
129
|
export const useReset = () => {
|
|
130
|
+
const { analytics } = useAnalyticsContext();
|
|
132
131
|
return useCallback(() => {
|
|
133
|
-
|
|
134
|
-
}, []);
|
|
132
|
+
analytics?.reset();
|
|
133
|
+
}, [analytics]);
|
|
135
134
|
};
|
|
136
135
|
/**
|
|
137
136
|
* Hook to get the current user state
|
|
@@ -147,9 +146,10 @@ export const useReset = () => {
|
|
|
147
146
|
* ```
|
|
148
147
|
*/
|
|
149
148
|
export const useGetUser = () => {
|
|
149
|
+
const { analytics } = useAnalyticsContext();
|
|
150
150
|
return useCallback(() => {
|
|
151
|
-
return
|
|
152
|
-
}, []);
|
|
151
|
+
return analytics?.getUser();
|
|
152
|
+
}, [analytics]);
|
|
153
153
|
};
|
|
154
154
|
/**
|
|
155
155
|
* Hook to capture exceptions
|
|
@@ -164,9 +164,10 @@ export const useGetUser = () => {
|
|
|
164
164
|
* ```
|
|
165
165
|
*/
|
|
166
166
|
export const useCaptureException = () => {
|
|
167
|
+
const { analytics } = useAnalyticsContext();
|
|
167
168
|
return useCallback((error, context) => {
|
|
168
|
-
|
|
169
|
-
}, []);
|
|
169
|
+
analytics?.captureException(error, context);
|
|
170
|
+
}, [analytics]);
|
|
170
171
|
};
|
|
171
172
|
/**
|
|
172
173
|
* Hook to send structured log events
|
|
@@ -179,20 +180,23 @@ export const useCaptureException = () => {
|
|
|
179
180
|
* ```
|
|
180
181
|
*/
|
|
181
182
|
export const useLog = () => {
|
|
183
|
+
const { analytics } = useAnalyticsContext();
|
|
182
184
|
return useCallback((message, level, metadata) => {
|
|
183
|
-
|
|
184
|
-
}, []);
|
|
185
|
+
analytics?.log(message, level, metadata);
|
|
186
|
+
}, [analytics]);
|
|
185
187
|
};
|
|
186
188
|
/**
|
|
187
189
|
* Factory helper to create lifecycle hooks
|
|
188
190
|
*/
|
|
189
191
|
const createLifecycleHook = (method) => {
|
|
190
|
-
return () =>
|
|
191
|
-
const analytics =
|
|
192
|
-
|
|
193
|
-
analytics
|
|
194
|
-
|
|
195
|
-
|
|
192
|
+
return () => {
|
|
193
|
+
const { analytics } = useAnalyticsContext();
|
|
194
|
+
return useCallback((props) => {
|
|
195
|
+
if (analytics && method in analytics) {
|
|
196
|
+
analytics[method]?.(props);
|
|
197
|
+
}
|
|
198
|
+
}, [analytics]);
|
|
199
|
+
};
|
|
196
200
|
};
|
|
197
201
|
/**
|
|
198
202
|
* Hook to track user signups
|
package/dist/react/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/react/hooks.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/react/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/react.d.ts
CHANGED
|
@@ -39,5 +39,7 @@ export type { AnalyticsProps } from "./react/analytics";
|
|
|
39
39
|
export { Analytics } from "./react/analytics";
|
|
40
40
|
export type { BugReportFABProps } from "./react/bug-report-widget";
|
|
41
41
|
export { BugReportFAB } from "./react/bug-report-widget";
|
|
42
|
+
export type { AnalyticsContextValue, AnalyticsProviderProps, } from "./react/context";
|
|
43
|
+
export { AnalyticsContext, AnalyticsProvider, useAnalyticsContext, useAnalyticsReady, useIsClient, } from "./react/context";
|
|
42
44
|
export { useAccountDeleted, useAnalytics, useCaptureException, useFeatureActivated, useGetUser, useGroup, useIdentify, useInviteAccepted, useInviteSent, useLog, useLogin, useLogout, usePage, usePlanDowngraded, usePlanUpgraded, useReset, useSignup, useSubscriptionCancelled, useSubscriptionRenewed, useSubscriptionStarted, useTrack, useTrialEnded, useTrialStarted, } from "./react/hooks";
|
|
43
45
|
//# sourceMappingURL=react.d.ts.map
|
package/dist/react.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,YAAY,EACX,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACX,0BAA0B,EAC1B,wBAAwB,EACxB,wBAAwB,EACxB,eAAe,EACf,iBAAiB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACX,aAAa,EACb,SAAS,IAAI,iBAAiB,EAC9B,eAAe,EACf,SAAS,EACT,UAAU,GACV,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,YAAY,EACX,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACX,0BAA0B,EAC1B,wBAAwB,EACxB,wBAAwB,EACxB,eAAe,EACf,iBAAiB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACX,aAAa,EACb,SAAS,IAAI,iBAAiB,EAC9B,eAAe,EACf,SAAS,EACT,UAAU,GACV,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,YAAY,EACX,qBAAqB,EACrB,sBAAsB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,GACX,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACN,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,UAAU,EACV,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,MAAM,EACN,QAAQ,EACR,SAAS,EACT,OAAO,EACP,iBAAiB,EACjB,eAAe,EACf,QAAQ,EACR,SAAS,EACT,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,QAAQ,EACR,aAAa,EACb,eAAe,GACf,MAAM,eAAe,CAAC"}
|
package/dist/react.js
CHANGED
|
@@ -35,5 +35,6 @@
|
|
|
35
35
|
*/
|
|
36
36
|
export { Analytics } from "./react/analytics";
|
|
37
37
|
export { BugReportFAB } from "./react/bug-report-widget";
|
|
38
|
+
export { AnalyticsContext, AnalyticsProvider, useAnalyticsContext, useAnalyticsReady, useIsClient, } from "./react/context";
|
|
38
39
|
export { useAccountDeleted, useAnalytics, useCaptureException, useFeatureActivated, useGetUser, useGroup, useIdentify, useInviteAccepted, useInviteSent, useLog, useLogin, useLogout, usePage, usePlanDowngraded, usePlanUpgraded, useReset, useSignup, useSubscriptionCancelled, useSubscriptionRenewed, useSubscriptionStarted, useTrack, useTrialEnded, useTrialStarted, } from "./react/hooks";
|
|
39
40
|
//# sourceMappingURL=react.js.map
|
package/dist/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AA2BH,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AA2BH,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAKzD,OAAO,EACN,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,GACX,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACN,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,UAAU,EACV,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,MAAM,EACN,QAAQ,EACR,SAAS,EACT,OAAO,EACP,iBAAiB,EACjB,eAAe,EACf,QAAQ,EACR,SAAS,EACT,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,QAAQ,EACR,aAAa,EACb,eAAe,GACf,MAAM,eAAe,CAAC"}
|
package/package.json
CHANGED