@datanova/react
Version:
React SDK for event tracking and A/B testing with Datanova
2 lines • 4.45 kB
JavaScript
import {Datanova,DatanovaExperimentsService,DatanovaEventsService}from'@datanova/browser';export{ConsoleEventsService,DatanovaEventsService,DatanovaExperimentsService,EventType,NoopEventsService,RandomExperimentsService,generateAnonymousId}from'@datanova/browser';import {createContext,useContext,useState,useEffect,isValidElement,cloneElement}from'react';import {jsx,Fragment}from'react/jsx-runtime';import {InView}from'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 Datanova;return typeof e=="string"?t.init({eventsService:new DatanovaEventsService(e),experimentsService:new 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=createContext(null);function _({datanova:e,children:t}){return jsx(l.Provider,{value:e,children:t})}a(_,"DatanovaProvider");function s(){let e=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=useContext(l),[r,i]=useState({isLoading:true,data:void 0,error:null});return 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 useEffect(()=>{r(e,t);},[e,t,r]),null}a(P,"TrackPageView");function b({children:e,eventName:t,properties:r}){let{trackClick:i}=s();if(!isValidElement(e))throw new Error("TrackClick must be used with a valid React element");let n=e.props.onClick;return 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 jsx(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(!isValidElement(e))throw new Error("TrackSubmit must be used with a valid React element");let n=e.props.onSubmit;return 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(!isValidElement(e))throw new Error("TrackChange must be used with a valid React element");let n=e.props.onChange;return 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?jsx(Fragment,{children:i!=null?i:null}):p?jsx(Fragment,{children:n!=null?n:t}):jsx(Fragment,{children:c==="variant"?r:t})}a(V,"Experiment");export{_ as DatanovaProvider,V as Experiment,R as TrackChange,b as TrackClick,C as TrackImpression,P as TrackPageView,y as TrackSubmit,H as createDatanova,s as useDatanova,f as useVariant};//# sourceMappingURL=index.mjs.map
//# sourceMappingURL=index.mjs.map