@jitsu/jitsu-react 1.0.0-canary-20230219230011 → 1.1.0-canary.14.20230602211353
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 +19 -90
- package/dist/JitsuContext.d.ts +1 -17
- package/dist/index.js +23 -41
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +23 -41
- package/dist/index.modern.js.map +1 -1
- package/dist/useJitsu.d.ts +1 -0
- package/package.json +5 -9
package/README.md
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# jitsu-react
|
|
2
2
|
|
|
3
|
-
>
|
|
4
3
|
|
|
5
|
-
[](https://www.npmjs.com/package/@jitsu/jitsu-react)
|
|
6
5
|
|
|
7
6
|
## Install
|
|
8
7
|
|
|
@@ -13,111 +12,41 @@ npm install --save @jitsu/jitsu-react
|
|
|
13
12
|
## Usage
|
|
14
13
|
|
|
15
14
|
To setup Jitsu-React library you need to add `JitsuProvider` component close to the root level of your app:
|
|
16
|
-
```tsx
|
|
17
|
-
import React, { Component } from 'react'
|
|
18
|
-
import { JitsuProvider } from "@jitsu/jitsu-react";
|
|
19
|
-
|
|
20
|
-
class Example extends Component {
|
|
21
|
-
render() {
|
|
22
|
-
return <JitsuProvider options={{ host: "https://mysiteid.d.jitsu.com" }} >
|
|
23
|
-
<App />
|
|
24
|
-
</JitsuProvider>
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
```
|
|
28
15
|
|
|
29
|
-
Then use `useJitsu` hook in components where you want to track events.
|
|
30
16
|
```tsx
|
|
31
|
-
import
|
|
32
|
-
import {
|
|
17
|
+
import React from "react";
|
|
18
|
+
import { JitsuProvider } from "@jitsu/jitsu-react";
|
|
33
19
|
|
|
34
20
|
export default function App() {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
return (
|
|
40
|
-
<div>
|
|
41
|
-
...
|
|
42
|
-
</div>
|
|
43
|
-
);
|
|
21
|
+
return <JitsuProvider options={{ host: "https://<id>.d.jitsu.com" }}>
|
|
22
|
+
<Page />
|
|
23
|
+
</JitsuProvider>;
|
|
44
24
|
}
|
|
45
25
|
```
|
|
46
26
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
### For react-router:
|
|
50
|
-
To enable auto page tracking with react-router, pass `useLocation` hook from `react-router-dom` to `autoPageTracking` option:
|
|
51
|
-
```tsx
|
|
52
|
-
import * as React from "react";
|
|
53
|
-
import { useLocation } from "react-router-dom";
|
|
54
|
-
import { useJitsu } from "@jitsu/jitsu-react";
|
|
55
|
-
|
|
56
|
-
export default function App() {
|
|
57
|
-
useJitsu({
|
|
58
|
-
// Enable auto page tracking with react-router
|
|
59
|
-
autoPageTracking: {
|
|
60
|
-
reactRouter: useLocation
|
|
61
|
-
},
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
return (
|
|
65
|
-
<div>
|
|
66
|
-
...
|
|
67
|
-
</div>
|
|
68
|
-
);
|
|
69
|
-
}
|
|
70
|
-
```
|
|
27
|
+
Then use `useJitsu` hook in components where you want to track events.
|
|
71
28
|
|
|
72
|
-
### For Next.JS router:
|
|
73
|
-
To enable auto page tracking with Next.JS router, pass `useRouter` hook from `next/router` to `autoPageTracking` option:
|
|
74
29
|
```tsx
|
|
75
30
|
import * as React from "react";
|
|
76
|
-
import { useRouter } from "next/router";
|
|
77
31
|
import { useJitsu } from "@jitsu/jitsu-react";
|
|
32
|
+
import { useEffect } from "react";
|
|
78
33
|
|
|
79
|
-
export default function
|
|
80
|
-
useJitsu(
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
});
|
|
34
|
+
export default function Page() {
|
|
35
|
+
const { analytics } = useJitsu();
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
// Track page view
|
|
38
|
+
analytics.track("event", { prop: "value" });
|
|
39
|
+
}, [location]);
|
|
86
40
|
|
|
87
41
|
return (
|
|
88
42
|
<div>
|
|
89
|
-
|
|
43
|
+
<button onClick={() => analytics.track("button-click")}>Click me!</button>
|
|
90
44
|
</div>
|
|
91
45
|
);
|
|
92
46
|
}
|
|
93
47
|
```
|
|
94
48
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
Partial snippet:
|
|
101
|
-
```tsx
|
|
102
|
-
export default function App() {
|
|
103
|
-
const user = useUser();
|
|
104
|
-
|
|
105
|
-
useJitsu({
|
|
106
|
-
autoPageTracking: {
|
|
107
|
-
reactRouter: useLocation,
|
|
108
|
-
before: function (analytics) {
|
|
109
|
-
if (user && user.id) {
|
|
110
|
-
analytics.identify(user.id, { name: user.name, email: user.email });
|
|
111
|
-
}
|
|
112
|
-
},
|
|
113
|
-
beforeDeps: [user],
|
|
114
|
-
},
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
return (
|
|
118
|
-
<div>
|
|
119
|
-
...
|
|
120
|
-
</div>
|
|
121
|
-
);
|
|
122
|
-
}
|
|
123
|
-
```
|
|
49
|
+
As `location` you should use an value that changes on every navigation. Examples:
|
|
50
|
+
* React Router: `useLocationHook()`
|
|
51
|
+
* Next.js: `const rounter = useRouter()`; then `router.asPath`
|
|
52
|
+
* Others: `[window.location.pathname, window.location.search, window.location.hash]`
|
package/dist/JitsuContext.d.ts
CHANGED
|
@@ -1,23 +1,7 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { AnalyticsInterface } from "@jitsu/js";
|
|
3
|
-
import { ExtendedJitsuOptions } from "./useJitsu";
|
|
4
|
-
/**
|
|
5
|
-
* An instance if Jitsu that is kept in the context. It's one of:
|
|
6
|
-
* - AnalyticsInterface - for CSR, if Jitsu is initialized in browser
|
|
7
|
-
* - ExtendedJitsuOptions - for SSR, if provider can't access context
|
|
8
|
-
*/
|
|
9
3
|
export declare type JitsuInstance = {
|
|
10
4
|
analytics: AnalyticsInterface;
|
|
11
|
-
initOptions?: never;
|
|
12
|
-
} | {
|
|
13
|
-
analytics?: never;
|
|
14
|
-
initOptions: ExtendedJitsuOptions;
|
|
15
5
|
};
|
|
16
|
-
declare const JitsuContext: import("react").Context<
|
|
17
|
-
analytics: AnalyticsInterface;
|
|
18
|
-
initOptions?: undefined;
|
|
19
|
-
} | {
|
|
20
|
-
analytics?: undefined;
|
|
21
|
-
initOptions: ExtendedJitsuOptions;
|
|
22
|
-
} | null>;
|
|
6
|
+
declare const JitsuContext: import("react").Context<JitsuInstance | null>;
|
|
23
7
|
export default JitsuContext;
|
package/dist/index.js
CHANGED
|
@@ -4,46 +4,33 @@ var js = require('@jitsu/js');
|
|
|
4
4
|
var JitsuContext = React.createContext(null);
|
|
5
5
|
|
|
6
6
|
var JitsuProvider = function JitsuProvider(props) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
7
|
+
var instance = React.useMemo(function () {
|
|
8
|
+
if (props.options.disabled) {
|
|
9
|
+
return {
|
|
10
|
+
analytics: js.emptyAnalytics
|
|
11
|
+
};
|
|
12
|
+
} else if (!props.options.host) {
|
|
13
|
+
var msg = "<JitsuProvider />. Jitsu host is not defined. Jitsu will not be initialized";
|
|
14
|
+
console.error("%c" + msg, "color: red; font-weight: bold;");
|
|
15
|
+
return {
|
|
16
|
+
analytics: js.emptyAnalytics
|
|
17
|
+
};
|
|
18
|
+
} else {
|
|
19
|
+
return {
|
|
20
|
+
analytics: js.jitsuAnalytics(props.options)
|
|
21
|
+
};
|
|
21
22
|
}
|
|
23
|
+
}, [props.options.disabled, props.options.host]);
|
|
24
|
+
return React.createElement(JitsuContext.Provider, {
|
|
25
|
+
value: instance
|
|
22
26
|
}, props.children);
|
|
23
27
|
};
|
|
24
28
|
|
|
25
|
-
var emptyAnalytics = {
|
|
26
|
-
track: function track() {
|
|
27
|
-
return Promise.resolve();
|
|
28
|
-
},
|
|
29
|
-
page: function page() {
|
|
30
|
-
return Promise.resolve();
|
|
31
|
-
},
|
|
32
|
-
user: function user() {
|
|
33
|
-
return {};
|
|
34
|
-
},
|
|
35
|
-
identify: function identify() {
|
|
36
|
-
return Promise.resolve({});
|
|
37
|
-
},
|
|
38
|
-
reset: function reset() {
|
|
39
|
-
return Promise.resolve({});
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
29
|
function useJitsu(opts) {
|
|
43
30
|
var jitsuInstance = React.useContext(JitsuContext);
|
|
44
31
|
if (opts !== null && opts !== void 0 && opts.disabled) {
|
|
45
32
|
return {
|
|
46
|
-
analytics: emptyAnalytics
|
|
33
|
+
analytics: js.emptyAnalytics
|
|
47
34
|
};
|
|
48
35
|
}
|
|
49
36
|
if (!jitsuInstance) {
|
|
@@ -53,22 +40,17 @@ function useJitsu(opts) {
|
|
|
53
40
|
};
|
|
54
41
|
} else {
|
|
55
42
|
var msg = "Before calling useJitsu() hook, please wrap your component into <JitsuProvider />. Read more in http://jitsu.com/docs/sending-data/js-sdk/react";
|
|
56
|
-
console.error("%c" + msg, "color: red; font-
|
|
43
|
+
console.error("%c" + msg, "color: red; font-weight: bold;");
|
|
57
44
|
return {
|
|
58
|
-
analytics: emptyAnalytics
|
|
45
|
+
analytics: js.emptyAnalytics
|
|
59
46
|
};
|
|
60
47
|
}
|
|
61
48
|
} else if (opts !== null && opts !== void 0 && opts.host || opts !== null && opts !== void 0 && opts.echoEvents) {
|
|
62
49
|
throw new Error("Jitsu client already set up with <JitsuProvider /> and cannot be overridden. Read more in http://jitsu.com/docs/sending-data/js-sdk/react");
|
|
63
50
|
} else if (jitsuInstance.analytics) {
|
|
64
|
-
return
|
|
65
|
-
analytics: jitsuInstance.analytics
|
|
66
|
-
};
|
|
51
|
+
return jitsuInstance;
|
|
67
52
|
} else {
|
|
68
|
-
|
|
69
|
-
return {
|
|
70
|
-
analytics: analytics
|
|
71
|
-
};
|
|
53
|
+
throw new Error("<JitsuProvider /> is not initialized with undefined analytics instance");
|
|
72
54
|
}
|
|
73
55
|
}
|
|
74
56
|
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/JitsuContext.tsx","../src/JitsuProvider.tsx","../src/useJitsu.ts"],"sourcesContent":["import { createContext } from \"react\";\nimport { AnalyticsInterface } from \"@jitsu/js\";\
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/JitsuContext.tsx","../src/JitsuProvider.tsx","../src/useJitsu.ts"],"sourcesContent":["import { createContext } from \"react\";\nimport { AnalyticsInterface } from \"@jitsu/js\";\n\nexport type JitsuInstance = { analytics: AnalyticsInterface };\n\nconst JitsuContext = createContext<JitsuInstance | null>(null);\n\nexport default JitsuContext;\n","import * as React from \"react\";\nimport { PropsWithChildren, useMemo } from \"react\";\nimport JitsuContext, { JitsuInstance } from \"./JitsuContext\";\nimport { emptyAnalytics, jitsuAnalytics } from \"@jitsu/js\";\nimport { ExtendedJitsuOptions } from \"./useJitsu\";\n\nconst JitsuProvider: React.FC<PropsWithChildren<{ options: ExtendedJitsuOptions }>> = props => {\n const instance: JitsuInstance = useMemo(() => {\n if (props.options.disabled) {\n return { analytics: emptyAnalytics };\n } else if (!props.options.host) {\n const msg = \"<JitsuProvider />. Jitsu host is not defined. Jitsu will not be initialized\";\n console.error(`%c${msg}`, \"color: red; font-weight: bold;\");\n return { analytics: emptyAnalytics };\n } else {\n return { analytics: jitsuAnalytics(props.options) };\n }\n }, [props.options.disabled, props.options.host]);\n return <JitsuContext.Provider value={instance}>{props.children}</JitsuContext.Provider>;\n};\n\nexport default JitsuProvider;\n","import { useContext } from \"react\";\nimport JitsuContext from \"./JitsuContext\";\n\nimport { AnalyticsInterface, jitsuAnalytics, JitsuOptions, emptyAnalytics } from \"@jitsu/js\";\n\nexport interface BeforeEffect {\n effect: (analytics: AnalyticsInterface) => any;\n deps: any[];\n}\n\nexport type ExtendedJitsuOptions =\n | (Omit<JitsuOptions, \"host\"> & { host: string } & {\n disabled?: false | undefined;\n echoEvents?: boolean;\n })\n | { disabled: true; host?: undefined };\n\n/**\n * See for details http://jitsu.com/docs/sending-data/js-sdk/react\n */\nfunction useJitsu(opts?: ExtendedJitsuOptions): { analytics: AnalyticsInterface } {\n let jitsuInstance = useContext(JitsuContext);\n if (opts?.disabled) {\n return { analytics: emptyAnalytics };\n }\n if (!jitsuInstance) {\n if (opts?.host || opts?.echoEvents) {\n return { analytics: jitsuAnalytics(opts) };\n } else {\n const msg =\n \"Before calling useJitsu() hook, please wrap your component into <JitsuProvider />. Read more in http://jitsu.com/docs/sending-data/js-sdk/react\";\n console.error(`%c${msg}`, \"color: red; font-weight: bold;\");\n return { analytics: emptyAnalytics };\n }\n } else if (opts?.host || opts?.echoEvents) {\n throw new Error(\n \"Jitsu client already set up with <JitsuProvider /> and cannot be overridden. Read more in http://jitsu.com/docs/sending-data/js-sdk/react\"\n );\n //Jitsu analytics is initialized inside provider\n } else if (jitsuInstance.analytics) {\n return jitsuInstance;\n } else {\n throw new Error(`<JitsuProvider /> is not initialized with undefined analytics instance`);\n }\n}\n\nexport default useJitsu;\nexport { AnalyticsInterface, JitsuOptions };\n"],"names":["JitsuContext","createContext","JitsuProvider","props","instance","useMemo","options","disabled","analytics","emptyAnalytics","host","msg","console","error","jitsuAnalytics","React","Provider","value","children","useJitsu","opts","jitsuInstance","useContext","echoEvents","Error"],"mappings":";;;AAKA,IAAMA,YAAY,GAAGC,mBAAa,CAAuB,IAAI,CAAC;;ACC9D,IAAMC,aAAa,GAAmE,SAAhFA,aAAaA,CAAmEC,KAAK;EACzF,IAAMC,QAAQ,GAAkBC,aAAO,CAAC;IACtC,IAAIF,KAAK,CAACG,OAAO,CAACC,QAAQ,EAAE;MAC1B,OAAO;QAAEC,SAAS,EAAEC;OAAgB;KACrC,MAAM,IAAI,CAACN,KAAK,CAACG,OAAO,CAACI,IAAI,EAAE;MAC9B,IAAMC,GAAG,GAAG,6EAA6E;MACzFC,OAAO,CAACC,KAAK,QAAMF,GAAG,EAAI,gCAAgC,CAAC;MAC3D,OAAO;QAAEH,SAAS,EAAEC;OAAgB;KACrC,MAAM;MACL,OAAO;QAAED,SAAS,EAAEM,iBAAc,CAACX,KAAK,CAACG,OAAO;OAAG;;GAEtD,EAAE,CAACH,KAAK,CAACG,OAAO,CAACC,QAAQ,EAAEJ,KAAK,CAACG,OAAO,CAACI,IAAI,CAAC,CAAC;EAChD,OAAOK,oBAACf,YAAY,CAACgB,QAAQ;IAACC,KAAK,EAAEb;KAAWD,KAAK,CAACe,QAAQ,CAAyB;AACzF,CAAC;;ACCD,SAASC,QAAQA,CAACC,IAA2B;EAC3C,IAAIC,aAAa,GAAGC,gBAAU,CAACtB,YAAY,CAAC;EAC5C,IAAIoB,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEb,QAAQ,EAAE;IAClB,OAAO;MAAEC,SAAS,EAAEC;KAAgB;;EAEtC,IAAI,CAACY,aAAa,EAAE;IAClB,IAAID,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEV,IAAI,IAAIU,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEG,UAAU,EAAE;MAClC,OAAO;QAAEf,SAAS,EAAEM,iBAAc,CAACM,IAAI;OAAG;KAC3C,MAAM;MACL,IAAMT,GAAG,GACP,iJAAiJ;MACnJC,OAAO,CAACC,KAAK,QAAMF,GAAG,EAAI,gCAAgC,CAAC;MAC3D,OAAO;QAAEH,SAAS,EAAEC;OAAgB;;GAEvC,MAAM,IAAIW,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEV,IAAI,IAAIU,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEG,UAAU,EAAE;IACzC,MAAM,IAAIC,KAAK,CACb,2IAA2I,CAC5I;GAEF,MAAM,IAAIH,aAAa,CAACb,SAAS,EAAE;IAClC,OAAOa,aAAa;GACrB,MAAM;IACL,MAAM,IAAIG,KAAK,0EAA0E;;AAE7F;;;;;;"}
|
package/dist/index.modern.js
CHANGED
|
@@ -1,44 +1,31 @@
|
|
|
1
|
-
import { createContext,
|
|
2
|
-
import {
|
|
1
|
+
import { createContext, useMemo, createElement, useContext } from 'react';
|
|
2
|
+
import { emptyAnalytics, jitsuAnalytics } from '@jitsu/js';
|
|
3
3
|
|
|
4
4
|
var JitsuContext = createContext(null);
|
|
5
5
|
|
|
6
6
|
var JitsuProvider = function JitsuProvider(props) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
7
|
+
var instance = useMemo(function () {
|
|
8
|
+
if (props.options.disabled) {
|
|
9
|
+
return {
|
|
10
|
+
analytics: emptyAnalytics
|
|
11
|
+
};
|
|
12
|
+
} else if (!props.options.host) {
|
|
13
|
+
var msg = "<JitsuProvider />. Jitsu host is not defined. Jitsu will not be initialized";
|
|
14
|
+
console.error("%c" + msg, "color: red; font-weight: bold;");
|
|
15
|
+
return {
|
|
16
|
+
analytics: emptyAnalytics
|
|
17
|
+
};
|
|
18
|
+
} else {
|
|
19
|
+
return {
|
|
20
|
+
analytics: jitsuAnalytics(props.options)
|
|
21
|
+
};
|
|
21
22
|
}
|
|
23
|
+
}, [props.options.disabled, props.options.host]);
|
|
24
|
+
return createElement(JitsuContext.Provider, {
|
|
25
|
+
value: instance
|
|
22
26
|
}, props.children);
|
|
23
27
|
};
|
|
24
28
|
|
|
25
|
-
var emptyAnalytics = {
|
|
26
|
-
track: function track() {
|
|
27
|
-
return Promise.resolve();
|
|
28
|
-
},
|
|
29
|
-
page: function page() {
|
|
30
|
-
return Promise.resolve();
|
|
31
|
-
},
|
|
32
|
-
user: function user() {
|
|
33
|
-
return {};
|
|
34
|
-
},
|
|
35
|
-
identify: function identify() {
|
|
36
|
-
return Promise.resolve({});
|
|
37
|
-
},
|
|
38
|
-
reset: function reset() {
|
|
39
|
-
return Promise.resolve({});
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
29
|
function useJitsu(opts) {
|
|
43
30
|
var jitsuInstance = useContext(JitsuContext);
|
|
44
31
|
if (opts !== null && opts !== void 0 && opts.disabled) {
|
|
@@ -53,7 +40,7 @@ function useJitsu(opts) {
|
|
|
53
40
|
};
|
|
54
41
|
} else {
|
|
55
42
|
var msg = "Before calling useJitsu() hook, please wrap your component into <JitsuProvider />. Read more in http://jitsu.com/docs/sending-data/js-sdk/react";
|
|
56
|
-
console.error("%c" + msg, "color: red; font-
|
|
43
|
+
console.error("%c" + msg, "color: red; font-weight: bold;");
|
|
57
44
|
return {
|
|
58
45
|
analytics: emptyAnalytics
|
|
59
46
|
};
|
|
@@ -61,14 +48,9 @@ function useJitsu(opts) {
|
|
|
61
48
|
} else if (opts !== null && opts !== void 0 && opts.host || opts !== null && opts !== void 0 && opts.echoEvents) {
|
|
62
49
|
throw new Error("Jitsu client already set up with <JitsuProvider /> and cannot be overridden. Read more in http://jitsu.com/docs/sending-data/js-sdk/react");
|
|
63
50
|
} else if (jitsuInstance.analytics) {
|
|
64
|
-
return
|
|
65
|
-
analytics: jitsuInstance.analytics
|
|
66
|
-
};
|
|
51
|
+
return jitsuInstance;
|
|
67
52
|
} else {
|
|
68
|
-
|
|
69
|
-
return {
|
|
70
|
-
analytics: analytics
|
|
71
|
-
};
|
|
53
|
+
throw new Error("<JitsuProvider /> is not initialized with undefined analytics instance");
|
|
72
54
|
}
|
|
73
55
|
}
|
|
74
56
|
|
package/dist/index.modern.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.modern.js","sources":["../src/JitsuContext.tsx","../src/JitsuProvider.tsx","../src/useJitsu.ts"],"sourcesContent":["import { createContext } from \"react\";\nimport { AnalyticsInterface } from \"@jitsu/js\";\
|
|
1
|
+
{"version":3,"file":"index.modern.js","sources":["../src/JitsuContext.tsx","../src/JitsuProvider.tsx","../src/useJitsu.ts"],"sourcesContent":["import { createContext } from \"react\";\nimport { AnalyticsInterface } from \"@jitsu/js\";\n\nexport type JitsuInstance = { analytics: AnalyticsInterface };\n\nconst JitsuContext = createContext<JitsuInstance | null>(null);\n\nexport default JitsuContext;\n","import * as React from \"react\";\nimport { PropsWithChildren, useMemo } from \"react\";\nimport JitsuContext, { JitsuInstance } from \"./JitsuContext\";\nimport { emptyAnalytics, jitsuAnalytics } from \"@jitsu/js\";\nimport { ExtendedJitsuOptions } from \"./useJitsu\";\n\nconst JitsuProvider: React.FC<PropsWithChildren<{ options: ExtendedJitsuOptions }>> = props => {\n const instance: JitsuInstance = useMemo(() => {\n if (props.options.disabled) {\n return { analytics: emptyAnalytics };\n } else if (!props.options.host) {\n const msg = \"<JitsuProvider />. Jitsu host is not defined. Jitsu will not be initialized\";\n console.error(`%c${msg}`, \"color: red; font-weight: bold;\");\n return { analytics: emptyAnalytics };\n } else {\n return { analytics: jitsuAnalytics(props.options) };\n }\n }, [props.options.disabled, props.options.host]);\n return <JitsuContext.Provider value={instance}>{props.children}</JitsuContext.Provider>;\n};\n\nexport default JitsuProvider;\n","import { useContext } from \"react\";\nimport JitsuContext from \"./JitsuContext\";\n\nimport { AnalyticsInterface, jitsuAnalytics, JitsuOptions, emptyAnalytics } from \"@jitsu/js\";\n\nexport interface BeforeEffect {\n effect: (analytics: AnalyticsInterface) => any;\n deps: any[];\n}\n\nexport type ExtendedJitsuOptions =\n | (Omit<JitsuOptions, \"host\"> & { host: string } & {\n disabled?: false | undefined;\n echoEvents?: boolean;\n })\n | { disabled: true; host?: undefined };\n\n/**\n * See for details http://jitsu.com/docs/sending-data/js-sdk/react\n */\nfunction useJitsu(opts?: ExtendedJitsuOptions): { analytics: AnalyticsInterface } {\n let jitsuInstance = useContext(JitsuContext);\n if (opts?.disabled) {\n return { analytics: emptyAnalytics };\n }\n if (!jitsuInstance) {\n if (opts?.host || opts?.echoEvents) {\n return { analytics: jitsuAnalytics(opts) };\n } else {\n const msg =\n \"Before calling useJitsu() hook, please wrap your component into <JitsuProvider />. Read more in http://jitsu.com/docs/sending-data/js-sdk/react\";\n console.error(`%c${msg}`, \"color: red; font-weight: bold;\");\n return { analytics: emptyAnalytics };\n }\n } else if (opts?.host || opts?.echoEvents) {\n throw new Error(\n \"Jitsu client already set up with <JitsuProvider /> and cannot be overridden. Read more in http://jitsu.com/docs/sending-data/js-sdk/react\"\n );\n //Jitsu analytics is initialized inside provider\n } else if (jitsuInstance.analytics) {\n return jitsuInstance;\n } else {\n throw new Error(`<JitsuProvider /> is not initialized with undefined analytics instance`);\n }\n}\n\nexport default useJitsu;\nexport { AnalyticsInterface, JitsuOptions };\n"],"names":["JitsuContext","createContext","JitsuProvider","props","instance","useMemo","options","disabled","analytics","emptyAnalytics","host","msg","console","error","jitsuAnalytics","React","Provider","value","children","useJitsu","opts","jitsuInstance","useContext","echoEvents","Error"],"mappings":";;;AAKA,IAAMA,YAAY,GAAGC,aAAa,CAAuB,IAAI,CAAC;;ACC9D,IAAMC,aAAa,GAAmE,SAAhFA,aAAaA,CAAmEC,KAAK;EACzF,IAAMC,QAAQ,GAAkBC,OAAO,CAAC;IACtC,IAAIF,KAAK,CAACG,OAAO,CAACC,QAAQ,EAAE;MAC1B,OAAO;QAAEC,SAAS,EAAEC;OAAgB;KACrC,MAAM,IAAI,CAACN,KAAK,CAACG,OAAO,CAACI,IAAI,EAAE;MAC9B,IAAMC,GAAG,GAAG,6EAA6E;MACzFC,OAAO,CAACC,KAAK,QAAMF,GAAG,EAAI,gCAAgC,CAAC;MAC3D,OAAO;QAAEH,SAAS,EAAEC;OAAgB;KACrC,MAAM;MACL,OAAO;QAAED,SAAS,EAAEM,cAAc,CAACX,KAAK,CAACG,OAAO;OAAG;;GAEtD,EAAE,CAACH,KAAK,CAACG,OAAO,CAACC,QAAQ,EAAEJ,KAAK,CAACG,OAAO,CAACI,IAAI,CAAC,CAAC;EAChD,OAAOK,cAACf,YAAY,CAACgB,QAAQ;IAACC,KAAK,EAAEb;KAAWD,KAAK,CAACe,QAAQ,CAAyB;AACzF,CAAC;;ACCD,SAASC,QAAQA,CAACC,IAA2B;EAC3C,IAAIC,aAAa,GAAGC,UAAU,CAACtB,YAAY,CAAC;EAC5C,IAAIoB,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEb,QAAQ,EAAE;IAClB,OAAO;MAAEC,SAAS,EAAEC;KAAgB;;EAEtC,IAAI,CAACY,aAAa,EAAE;IAClB,IAAID,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEV,IAAI,IAAIU,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEG,UAAU,EAAE;MAClC,OAAO;QAAEf,SAAS,EAAEM,cAAc,CAACM,IAAI;OAAG;KAC3C,MAAM;MACL,IAAMT,GAAG,GACP,iJAAiJ;MACnJC,OAAO,CAACC,KAAK,QAAMF,GAAG,EAAI,gCAAgC,CAAC;MAC3D,OAAO;QAAEH,SAAS,EAAEC;OAAgB;;GAEvC,MAAM,IAAIW,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEV,IAAI,IAAIU,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEG,UAAU,EAAE;IACzC,MAAM,IAAIC,KAAK,CACb,2IAA2I,CAC5I;GAEF,MAAM,IAAIH,aAAa,CAACb,SAAS,EAAE;IAClC,OAAOa,aAAa;GACrB,MAAM;IACL,MAAM,IAAIG,KAAK,0EAA0E;;AAE7F;;;;"}
|
package/dist/useJitsu.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jitsu/jitsu-react",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0-canary.14.20230602211353",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -11,20 +11,16 @@
|
|
|
11
11
|
"node": ">=10"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@jitsu/js": "1.
|
|
14
|
+
"@jitsu/js": "1.1.0-canary.14.20230602211353"
|
|
15
15
|
},
|
|
16
16
|
"peerDependencies": {
|
|
17
17
|
"react": "15.x || 16.x || 17.x || 18.x",
|
|
18
18
|
"@types/react": "15.x || 16.x || 17.x || 18.x",
|
|
19
|
-
"react-router-dom": "5.x || 6.x"
|
|
20
|
-
"next": "12.x || 13.x"
|
|
19
|
+
"react-router-dom": "5.x || 6.x"
|
|
21
20
|
},
|
|
22
21
|
"peerDependenciesMeta": {
|
|
23
22
|
"react-router-dom": {
|
|
24
23
|
"optional": true
|
|
25
|
-
},
|
|
26
|
-
"next": {
|
|
27
|
-
"optional": true
|
|
28
24
|
}
|
|
29
25
|
},
|
|
30
26
|
"devDependencies": {
|
|
@@ -35,8 +31,8 @@
|
|
|
35
31
|
"@types/jest": "^29.2.3",
|
|
36
32
|
"@types/node": "^18.11.9",
|
|
37
33
|
"microbundle-crl": "^0.13.11",
|
|
38
|
-
"typescript": "^4.9.
|
|
39
|
-
"@
|
|
34
|
+
"typescript": "^4.9.5",
|
|
35
|
+
"@babel/plugin-transform-regenerator": "^7.20.5"
|
|
40
36
|
},
|
|
41
37
|
"files": [
|
|
42
38
|
"dist"
|