UNPKG

@obelism/improve-sdk-react

Version:
2 lines (1 loc) 1.16 kB
import{jsx as e}from"react/jsx-runtime";import{useContext as r,useState as t,useRef as l,useEffect as u,useMemo as n,createContext as a,useCallback as o}from"react";let c={getFlagValue:()=>null,getTestValue:()=>null,postAnalytic:()=>null},i=a("loading"),s=a(c),g=a=>({ImproveProvider:({children:r})=>{let[o,g]=t("loading"),p=l(!1),m=l(null);u(()=>{if(m.current||p.current)return;p.current=!0;let e=!1,r=!1;try{import("@obelism/improve-sdk/client").then(async({ImproveClientSDK:t})=>{!r&&(m.current=new t(a),a.config||await m.current.fetchConfig(),r||(e=!0,g("setup")))})}catch(e){p.current=!1,console.error(e),g("error");return}return()=>{e||(p.current=!1,r=!0)}},[]);let v=n(()=>"setup"===o&&m.current?{getTestValue:m.current.getTestValue,postAnalytic:m.current.postAnalytic,getFlagValue:m.current.getFlagValue}:c,[o]);return e(i.Provider,{value:o,children:e(s.Provider,{value:v,children:r})})},useImproveStatus:()=>r(i),usePostAnalytic:e=>{let{postAnalytic:t}=r(s);return o((r,l)=>t(e,r,l),[t,e])},useTestValue:(e,t)=>{let{getTestValue:l}=r(s);return l(e)||t},useFlagValue:(e,t)=>{let{getFlagValue:l}=r(s);return l(e)||t}});export{g as generateImproveProvider};