UNPKG

@datanova/react

Version:

React SDK for event tracking and A/B testing with Datanova

2 lines 5.29 kB
'use strict';var browser=require('@datanova/browser'),react=require('react'),jsxRuntime=require('react/jsx-runtime'),reactIntersectionObserver=require('react-intersection-observer');var h=Object.defineProperty,N=Object.defineProperties;var I=Object.getOwnPropertyDescriptors;var x=Object.getOwnPropertySymbols;var L=Object.prototype.hasOwnProperty,M=Object.prototype.propertyIsEnumerable;var E=(e,t,r)=>t in e?h(e,t,{enumerable:true,configurable:true,writable:true,value:r}):e[t]=r,w=(e,t)=>{for(var r in t||(t={}))L.call(t,r)&&E(e,r,t[r]);if(x)for(var r of x(t))M.call(t,r)&&E(e,r,t[r]);return e},S=(e,t)=>N(e,I(t)),a=(e,t)=>h(e,"name",{value:t,configurable:true});var T=(e,t,r)=>new Promise((i,n)=>{var c=m=>{try{p(r.next(m));}catch(u){n(u);}},o=m=>{try{p(r.throw(m));}catch(u){n(u);}},p=m=>m.done?i(m.value):Promise.resolve(m.value).then(c,o);p((r=r.apply(e,t)).next());});var v="@datanova/react",d="2.0.0";function H(e){let t=new browser.Datanova;return typeof e=="string"?t.init({eventsService:new browser.DatanovaEventsService(e),experimentsService:new browser.DatanovaExperimentsService(e),context:{library:{name:v,version:d}}}):t.init({eventsService:e.eventsService,experimentsService:e.experimentsService,context:{library:{name:v,version:d}}}),t}a(H,"createDatanova");var l=react.createContext(null);function _({datanova:e,children:t}){return jsxRuntime.jsx(l.Provider,{value:e,children:t})}a(_,"DatanovaProvider");function s(){let e=react.useContext(l);if(!e)throw new Error("useDatanova must be used within a DatanovaProvider");return {trackClick:e.trackClick,trackPageView:e.trackPageView,trackImpression:e.trackImpression,trackSubmit:e.trackSubmit,trackChange:e.trackChange,identify:e.identify,reset:e.reset}}a(s,"useDatanova");function f({experimentId:e}){let t=react.useContext(l),[r,i]=react.useState({isLoading:true,data:void 0,error:null});return react.useEffect(()=>{if(!t){i({isLoading:false,data:"control",error:new Error("useVariant must be used within a DatanovaProvider")});return}let n=false;function c(){return T(this,null,function*(){try{i({isLoading:!0,data:void 0,error:null});let o=yield t.getVariant(e);n||i({isLoading:!1,data:o,error:null});}catch(o){n||i({isLoading:false,data:"control",error:o instanceof Error?o:new Error("Failed to load experiment")});}})}return a(c,"fetchVariant"),typeof window!="undefined"?c():i({isLoading:false,data:"control",error:null}),()=>{n=true;}},[e,t]),r}a(f,"useVariant");function P({eventName:e,properties:t}){let{trackPageView:r}=s();return react.useEffect(()=>{r(e,t);},[e,t,r]),null}a(P,"TrackPageView");function b({children:e,eventName:t,properties:r}){let{trackClick:i}=s();if(!react.isValidElement(e))throw new Error("TrackClick must be used with a valid React element");let n=e.props.onClick;return react.cloneElement(e,{onClick:a(o=>{i(t,r),n&&n(o);},"handleClick")})}a(b,"TrackClick");function C({children:e,eventName:t,properties:r,threshold:i=.5,triggerOnce:n=true}){let{trackImpression:c}=s();return jsxRuntime.jsx(reactIntersectionObserver.InView,{onChange:o=>{o&&c(t,r);},threshold:i,triggerOnce:n,children:e})}a(C,"TrackImpression");function y({children:e,eventName:t,properties:r}){let{trackSubmit:i}=s();if(!react.isValidElement(e))throw new Error("TrackSubmit must be used with a valid React element");let n=e.props.onSubmit;return react.cloneElement(e,{onSubmit:a(o=>{i(t,r),n==null||n(o);},"handleSubmit")})}a(y,"TrackSubmit");function R({children:e,eventName:t,properties:r}){let{trackChange:i}=s();if(!react.isValidElement(e))throw new Error("TrackChange must be used with a valid React element");let n=e.props.onChange;return react.cloneElement(e,{onChange:a(o=>{let p;o&&typeof o=="object"&&"target"in o?p=o.target.value:p=o,i(t,S(w({},r),{value:p})),n==null||n(o);},"handleChange")})}a(R,"TrackChange");function V({experimentId:e,control:t,variant:r,loading:i,error:n}){let{data:c,isLoading:o,error:p}=f({experimentId:e});return o?jsxRuntime.jsx(jsxRuntime.Fragment,{children:i!=null?i:null}):p?jsxRuntime.jsx(jsxRuntime.Fragment,{children:n!=null?n:t}):jsxRuntime.jsx(jsxRuntime.Fragment,{children:c==="variant"?r:t})}a(V,"Experiment");Object.defineProperty(exports,"ConsoleEventsService",{enumerable:true,get:function(){return browser.ConsoleEventsService}});Object.defineProperty(exports,"DatanovaEventsService",{enumerable:true,get:function(){return browser.DatanovaEventsService}});Object.defineProperty(exports,"DatanovaExperimentsService",{enumerable:true,get:function(){return browser.DatanovaExperimentsService}});Object.defineProperty(exports,"EventType",{enumerable:true,get:function(){return browser.EventType}});Object.defineProperty(exports,"NoopEventsService",{enumerable:true,get:function(){return browser.NoopEventsService}});Object.defineProperty(exports,"RandomExperimentsService",{enumerable:true,get:function(){return browser.RandomExperimentsService}});Object.defineProperty(exports,"generateAnonymousId",{enumerable:true,get:function(){return browser.generateAnonymousId}});exports.DatanovaProvider=_;exports.Experiment=V;exports.TrackChange=R;exports.TrackClick=b;exports.TrackImpression=C;exports.TrackPageView=P;exports.TrackSubmit=y;exports.createDatanova=H;exports.useDatanova=s;exports.useVariant=f;//# sourceMappingURL=index.js.map //# sourceMappingURL=index.js.map