@usermaven/nextjs 1.4.4 → 1.5.1-rc.91

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.
@@ -1,5 +1,5 @@
1
1
  import { NextRequest, NextResponse } from "next/server";
2
- import { ClientProperties } from "@usermaven/sdk-js/src/interface";
2
+ import { ClientProperties } from "@usermaven/sdk-js";
3
3
  declare function middlewareEnv(req: NextRequest, res: NextResponse, opts?: {
4
4
  disableCookies?: boolean;
5
5
  }): {
@@ -1,7 +1,8 @@
1
1
  import { EventPayload, UsermavenClient } from "@usermaven/sdk-js";
2
- declare function usePageView(usermaven: UsermavenClient, opts?: {
2
+ interface UsePageViewOptions {
3
3
  before?: (usermaven: UsermavenClient) => void;
4
4
  typeName?: string;
5
5
  payload?: EventPayload;
6
- }): UsermavenClient;
6
+ }
7
+ declare function usePageView(usermaven: UsermavenClient | null, opts?: UsePageViewOptions): UsermavenClient | null;
7
8
  export default usePageView;
@@ -1,22 +1,63 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const react_1 = require("react");
4
- const router_1 = require("next/router");
5
- function usePageView(usermaven, opts = {}) {
6
- const router = (0, router_1.useRouter)();
4
+ function useUrlChange() {
5
+ const [url, setUrl] = (0, react_1.useState)('');
6
+ const isClient = typeof window !== 'undefined';
7
7
  (0, react_1.useEffect)(() => {
8
- const handleRouteChange = () => {
9
- if (opts.before) {
10
- opts.before(usermaven);
11
- }
12
- usermaven.track((opts === null || opts === void 0 ? void 0 : opts.typeName) || 'pageview', opts.payload);
8
+ if (!isClient)
9
+ return;
10
+ setUrl(window.location.href);
11
+ const handleUrlChange = () => {
12
+ setUrl(window.location.href);
13
+ };
14
+ const history = window.history;
15
+ const originalPushState = history.pushState.bind(history);
16
+ const originalReplaceState = history.replaceState.bind(history);
17
+ const wrapHistoryMethod = (original) => {
18
+ return function (...args) {
19
+ const result = original.apply(this, args);
20
+ handleUrlChange();
21
+ return result;
22
+ };
13
23
  };
14
- handleRouteChange();
15
- router.events.on('routeChangeComplete', handleRouteChange);
24
+ history.pushState = wrapHistoryMethod(originalPushState);
25
+ history.replaceState = wrapHistoryMethod(originalReplaceState);
26
+ window.addEventListener('popstate', handleUrlChange);
16
27
  return () => {
17
- router.events.off('routeChangeComplete', handleRouteChange);
28
+ window.removeEventListener('popstate', handleUrlChange);
29
+ history.pushState = originalPushState;
30
+ history.replaceState = originalReplaceState;
18
31
  };
19
- }, [router.events, usermaven.track, opts.payload, opts.before]);
32
+ }, [isClient]);
33
+ return url;
34
+ }
35
+ function usePageView(usermaven, opts = {}) {
36
+ const url = useUrlChange();
37
+ const isClient = typeof window !== 'undefined';
38
+ const lastTrackedUrl = (0, react_1.useRef)('');
39
+ const trackPageView = (0, react_1.useCallback)(() => {
40
+ if (!isClient || !usermaven)
41
+ return;
42
+ const currentUrl = window.location.href;
43
+ if (lastTrackedUrl.current === currentUrl)
44
+ return;
45
+ lastTrackedUrl.current = currentUrl;
46
+ if (opts.before) {
47
+ opts.before(usermaven);
48
+ }
49
+ try {
50
+ usermaven.track((opts === null || opts === void 0 ? void 0 : opts.typeName) || 'pageview', Object.assign(Object.assign({}, opts.payload), { url: currentUrl, path: window.location.pathname, referrer: document.referrer || '', title: document.title, timestamp: new Date().toISOString() }));
51
+ }
52
+ catch (error) {
53
+ console.warn('Usermaven pageview tracking error:', error);
54
+ }
55
+ }, [usermaven, opts.before, opts.typeName, opts.payload, isClient]);
56
+ (0, react_1.useEffect)(() => {
57
+ if (url) {
58
+ trackPageView();
59
+ }
60
+ }, [url, trackPageView]);
20
61
  return usermaven;
21
62
  }
22
63
  exports.default = usePageView;
@@ -1,5 +1,17 @@
1
- import { UsermavenClient } from "@usermaven/sdk-js";
2
- declare function useUsermaven(): UsermavenClient & {
3
- trackPageView: () => Promise<void>;
1
+ import { EventPayload, UserProps } from "@usermaven/sdk-js";
2
+ export type UsermavenClient = {
3
+ trackPageView: () => void;
4
+ id: (userData: UserProps, doNotSendEvent?: boolean) => Promise<void>;
5
+ track: (typeName: string, payload?: EventPayload) => void;
6
+ rawTrack: (payload: any) => void;
7
+ set: (properties: Record<string, any>, opts?: {
8
+ eventType?: string;
9
+ persist?: boolean;
10
+ }) => void;
11
+ unset: (propertyName: string, opts?: {
12
+ eventType?: string;
13
+ persist?: boolean;
14
+ }) => void;
4
15
  };
16
+ declare function useUsermaven(): UsermavenClient;
5
17
  export default useUsermaven;
@@ -1,21 +1,40 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
12
  const react_1 = require("react");
4
13
  const UsermavenContext_1 = require("./UsermavenContext");
14
+ const createNoopClient = () => ({
15
+ trackPageView: () => { },
16
+ id: () => __awaiter(void 0, void 0, void 0, function* () { }),
17
+ track: () => { },
18
+ rawTrack: () => { },
19
+ set: () => { },
20
+ unset: () => { },
21
+ });
5
22
  function useUsermaven() {
6
23
  const client = (0, react_1.useContext)(UsermavenContext_1.default);
7
24
  if (!client) {
8
- throw new Error("Before calling useUsermaven() hook, please wrap your component into <JitsuProvider />. Read more in https://usermaven.com/docs/integrations/next");
25
+ return createNoopClient();
9
26
  }
10
- const id = (0, react_1.useCallback)((userData, doNotSendEvent) => client === null || client === void 0 ? void 0 : client.id(userData, doNotSendEvent), [client]);
11
- const trackPageView = (0, react_1.useCallback)(() => client === null || client === void 0 ? void 0 : client.track('pageview'), [client]);
12
- const track = (0, react_1.useCallback)((typeName, payload) => client === null || client === void 0 ? void 0 : client.track(typeName, payload), [client]);
13
- const rawTrack = (0, react_1.useCallback)((payload) => client === null || client === void 0 ? void 0 : client.rawTrack(payload), [client]);
14
- const interceptAnalytics = (0, react_1.useCallback)((analytics) => client === null || client === void 0 ? void 0 : client.interceptAnalytics(analytics), [client]);
27
+ const id = (0, react_1.useCallback)((userData, doNotSendEvent) => client.id(userData, doNotSendEvent), [client]);
28
+ const trackPageView = (0, react_1.useCallback)(() => client.track('pageview'), [client]);
29
+ const track = (0, react_1.useCallback)((typeName, payload) => client.track(typeName, payload), [client]);
30
+ const rawTrack = (0, react_1.useCallback)((payload) => client.rawTrack(payload), [client]);
31
+ const set = (0, react_1.useCallback)((properties, opts) => client.set(properties, opts), [client]);
32
+ const unset = (0, react_1.useCallback)((propertyName, opts) => client.unset(propertyName, opts), [client]);
15
33
  return Object.assign(Object.assign({}, client), { id,
16
34
  track,
17
35
  trackPageView,
18
36
  rawTrack,
19
- interceptAnalytics });
37
+ set,
38
+ unset });
20
39
  }
21
40
  exports.default = useUsermaven;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@usermaven/nextjs",
3
- "version": "1.4.4",
3
+ "version": "1.5.1-rc.91",
4
4
  "description": "Usermaven JavaScript SDK for NextJS",
5
5
  "author": "Usermaven <hello@usermaven.com>",
6
6
  "license": "MIT",
@@ -18,7 +18,7 @@
18
18
  "access": "public"
19
19
  },
20
20
  "dependencies": {
21
- "@usermaven/sdk-js": "^1.2.5",
21
+ "@usermaven/sdk-js": "1.5.1-rc.91",
22
22
  "cookie": "^0.5.0"
23
23
  },
24
24
  "peerDependencies": {
@@ -33,15 +33,16 @@
33
33
  "next": "^12.1.5",
34
34
  "react": "^17.0.2",
35
35
  "rollup": "^2.70.1",
36
- "rollup-plugin-peer-deps-external": "^2.2.4"
37
- },
38
- "scripts": {
39
- "build": "rollup -c && tsc",
40
- "test": "echo \"Error: run tests from root\" && exit 1"
36
+ "rollup-plugin-peer-deps-external": "^2.2.4",
37
+ "tslib": "^2.3.1"
41
38
  },
42
39
  "repository": {
43
40
  "type": "git",
44
41
  "url": "https://github.com/usermaven/usermaven-js",
45
42
  "directory": "packages/nextjs"
43
+ },
44
+ "scripts": {
45
+ "build": "rollup -c && tsc",
46
+ "test": "echo \"Error: run tests from root\" && exit 1"
46
47
  }
47
- }
48
+ }