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