@usermaven/nextjs 1.2.5

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 ADDED
@@ -0,0 +1,133 @@
1
+ # Official Usermaven SDK for NextJS
2
+
3
+
4
+ ## General
5
+
6
+ This package is a wrapper around `@usermaven/sdk-js`, with added functionality related to NextJS.
7
+
8
+ ## Installation
9
+
10
+ With NextJS there're several ways on how to add Usermaven tracking
11
+
12
+ ## Client Side Tracking
13
+
14
+ First, create or update your `_app.js` following this code
15
+ ```jsx
16
+ import { createClient, UsermavenProvider } from "@usermaven/nextjs";
17
+
18
+ // initialize Usermaven client
19
+ const usermavenClient = createClient({
20
+ tracking_host: "__USERMAVEN_HOST__",
21
+ key: "__API_KET__",
22
+ // See Usermaven SDK parameters section for more options
23
+ });
24
+
25
+ // wrap our app with Usermaven provider
26
+ function MyApp({Component, pageProps}) {
27
+ return <UsermavenProvider client={usermavenClient}>
28
+ <Component {...pageProps} />
29
+ </UsermavenProvider>
30
+ }
31
+
32
+ export default MyApp
33
+ ```
34
+ See [parameters list](https://usermaven.com/docs/sending-data/js-sdk/parameters-reference) for `createClient()` call.
35
+
36
+ After usermaven client and provider are configured you will be able to use `useUsermaven` hook in your components
37
+ ```jsx
38
+ import { useUsermaven } from "@usermaven/nextjs";
39
+
40
+ const Main = () => {
41
+ const {id, trackPageView, track} = useUsermaven(); // import methods from useUsermaven hook
42
+
43
+ useEffect(() => {
44
+ id({id: '__USER_ID__', email: '__USER_EMAIL__'}); // identify current user for all events
45
+ trackPageView() // send pageview event
46
+ }, [])
47
+
48
+ const onClick = (btnName) => {
49
+ track('btn_click', {btn: btnName}); // send btn_click event with button name payload on click
50
+ }
51
+
52
+ return (
53
+ <button onClick="() => onClick('test_btn')">Test button</button>
54
+ )
55
+ }
56
+ ```
57
+ Please note, that `useUsermaven` uses `useEffect()` with related side effects.
58
+
59
+ \
60
+ To enable automatic pageview tracking, add `usePageView()` hook to your `_app.js`. This hook will send pageview each time
61
+ user loads a new page. This hook relies on [NextJS Router](https://nextjs.org/docs/api-reference/next/router)
62
+ ```jsx
63
+ import { createClient, UsermavenProvider } from "@usermaven/nextjs";
64
+
65
+ // initialize Usermaven client
66
+ const usermavenClient = createClient({
67
+ tracking_host: "__USERMAVEN_HOST__",
68
+ key: "__API_KET__",
69
+ // See Usermaven SDK parameters section for more options
70
+ });
71
+
72
+ function MyApp({Component, pageProps}) {
73
+ usePageView(usermavenClient); // this hook will send pageview track event on router change
74
+
75
+ // wrap our app with Usermaven provider
76
+ return <UsermavenProvider client={usermavenClient}>
77
+ <Component {...pageProps} />
78
+ </UsermavenProvider>
79
+ }
80
+
81
+ export default MyApp
82
+ ```
83
+ If you need to pre-configure usermaven event - for example, identify a user, it's possible to do via `before` callback:
84
+ ```javascript
85
+ usePageView(usermavenClient, {before: (usermaven) => usermaven.id({id: '__USER_ID__', email: '__USER_EMAIL__'})})
86
+ ```
87
+
88
+ ## Server Side Tracking
89
+
90
+ Usermaven can track events on server-side:
91
+ * **Pros:** this method is 100% reliable and ad-block resistant
92
+ * **Cons:** static rendering will not be possible; `next export` will not work; fewer data points will be collected - attributes such as screen-size, device
93
+
94
+ ### Manual tracking
95
+
96
+ For manual tracking you need to initialize Usermaven client
97
+ ```javascript
98
+ import { createClient } from "@usermaven/nextjs";
99
+
100
+ // initialize Usermaven client
101
+ const usermavenClient = createClient({
102
+ tracking_host: "__USERMAVEN_HOST__",
103
+ key: "__API_KET__",
104
+ // See Usermaven SDK parameters section for more options
105
+ });
106
+ ```
107
+ after that, you will be able to user [Usermaven client](https://usermaven.com/docs/sending-data/js-sdk/methods-reference), for example, in `getServerSideProps`
108
+ ```
109
+ export async function getServerSideProps() {
110
+ usermaven.track("page_view", {page: req.page})
111
+
112
+ return { props: {} }
113
+ }
114
+ ```
115
+
116
+ ### Automated page view tracking
117
+
118
+ Usermaven could track page views automatically via use of `_middleware.js` which has been introduced in NextJS 12
119
+
120
+ ```javascript
121
+ export function middleware(req, ev) {
122
+ const {page} = req
123
+ if ( !page?.name ) {
124
+ return;
125
+ }
126
+ usermaven.track("page_view", {page: req.page})
127
+ }
128
+ ```
129
+
130
+
131
+ ## Example app
132
+
133
+ You can find example app [here](https://github.com/usermaven/usermaven-next-example).
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ import { UsermavenClient } from "@usermaven/sdk-js";
3
+ declare const UsermavenContext: import("react").Context<UsermavenClient>;
4
+ export default UsermavenContext;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const react_1 = require("react");
4
+ const UsermavenContext = (0, react_1.createContext)(null);
5
+ exports.default = UsermavenContext;
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ import { UsermavenClient } from "@usermaven/sdk-js";
3
+ import { PropsWithChildren } from "react";
4
+ export interface JitsuProviderProps {
5
+ client: UsermavenClient;
6
+ }
7
+ declare const JitsuProvider: React.FC<PropsWithChildren<JitsuProviderProps>>;
8
+ export default JitsuProvider;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const React = require("react");
4
+ const UsermavenContext_1 = require("./UsermavenContext");
5
+ const JitsuProvider = function ({ children, client }) {
6
+ const Context = UsermavenContext_1.default;
7
+ return React.createElement(Context.Provider, { value: client }, children);
8
+ };
9
+ exports.default = JitsuProvider;
@@ -0,0 +1,3 @@
1
+ import { UsermavenClient, UsermavenOptions } from "@usermaven/sdk-js";
2
+ declare function createClient(params: UsermavenOptions): UsermavenClient;
3
+ export default createClient;
package/lib/client.js ADDED
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const sdk_js_1 = require("@usermaven/sdk-js");
4
+ function createClient(params) {
5
+ return (0, sdk_js_1.usermavenClient)(params);
6
+ }
7
+ exports.default = createClient;
package/lib/index.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export { default as UsermavenContext } from './UsermavenContext';
2
+ export { default as UsermavenProvider } from './UsermavenProvider';
3
+ export { default as createClient } from './client';
4
+ export { default as useUsermaven } from './useUsermaven';
5
+ export { default as usePageView } from './usePageView';
6
+ export { default as middlewareEnv } from './middlewareEnv';