@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 +133 -0
- package/lib/UsermavenContext.d.ts +4 -0
- package/lib/UsermavenContext.js +5 -0
- package/lib/UsermavenProvider.d.ts +8 -0
- package/lib/UsermavenProvider.js +9 -0
- package/lib/client.d.ts +3 -0
- package/lib/client.js +7 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.es.js +2627 -0
- package/lib/index.js +15 -0
- package/lib/middlewareEnv.d.ts +13 -0
- package/lib/middlewareEnv.js +51 -0
- package/lib/usePageView.d.ts +7 -0
- package/lib/usePageView.js +22 -0
- package/lib/useUsermaven.d.ts +5 -0
- package/lib/useUsermaven.js +21 -0
- package/package.json +47 -0
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,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;
|
package/lib/client.d.ts
ADDED
package/lib/client.js
ADDED
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';
|