UNPKG

@unleash/proxy-client-react

Version:
5 lines (4 loc) 4.84 kB
(function(s,f){typeof exports=="object"&&typeof module<"u"?f(exports,require("unleash-proxy-client"),require("react")):typeof define=="function"&&define.amd?define(["exports","unleash-proxy-client","react"],f):(s=typeof globalThis<"u"?globalThis:s||self,f(s.UnleashReact={},s.unleashProxyClient,s.react))})(this,function(s,f,l){"use strict";const b=l.createContext(null),A={bootstrap:[],disableRefresh:!0,disableMetrics:!0,url:"http://localhost",appName:"offline",clientKey:"not-used"},C=l["startTransition"]||(e=>e()),h=({config:e,children:t,unleashClient:r,startClient:u=!0,stopClient:i=!0,startTransition:a=C})=>{var S,x,T;const c=e||A,n=l.useRef(r||new f.UnleashClient(c)),[o,m]=l.useState(!!(r?e!=null&&e.bootstrap&&(e==null?void 0:e.bootstrapOverride)!==!1||(S=r.isReady)!=null&&S.call(r):c.bootstrap&&c.bootstrapOverride!==!1)),[P,p]=l.useState(((T=(x=n.current).getError)==null?void 0:T.call(x))||null);l.useEffect(()=>{!c&&!r&&console.error(`You must provide either a config or an unleash client to the flag provider. If you are initializing the client in useEffect, you can avoid this warning by checking if the client exists before rendering.`);const d=F=>{a(()=>{p(B=>B||F)})},U=F=>{a(()=>{p(null)})};let v=null;const k=()=>{v=setTimeout(()=>{a(()=>{m(!0)})},0)};return n.current.on("ready",k),n.current.on("error",d),n.current.on("recovered",U),u&&(n.current.stop(),n.current.start()),function(){n.current&&(n.current.off("error",d),n.current.off("ready",k),n.current.off("recovered",U),i&&n.current.stop()),v&&clearTimeout(v)}},[]);const z=l.useMemo(()=>({on:(...d)=>n.current.on(...d),off:(...d)=>n.current.off(...d),isEnabled:(...d)=>n.current.isEnabled(...d),updateContext:async(...d)=>await n.current.updateContext(...d),getVariant:(...d)=>n.current.getVariant(...d),client:n.current,flagsReady:o,flagsError:P,setFlagsReady:m,setFlagsError:p}),[o,P]);return l.createElement(b.Provider,{value:z},t)},E={on:(e,t,r)=>(console.error("on() must be used within a FlagProvider"),y),off:(e,t)=>(console.error("off() must be used within a FlagProvider"),y),updateContext:async()=>{console.error("updateContext() must be used within a FlagProvider")},isEnabled:()=>(console.error("isEnabled() must be used within a FlagProvider"),!1),getVariant:()=>(console.error("getVariant() must be used within a FlagProvider"),{name:"disabled",enabled:!1})},y={...E,toggles:[],impressionDataAll:{},context:{},storage:{},start:()=>{},stop:()=>{},isReady:()=>!1,getError:()=>null,getAllToggles:()=>[]},M={...E,client:y,flagsReady:!1,setFlagsReady:()=>{console.error("setFlagsReady() must be used within a FlagProvider")},flagsError:null,setFlagsError:()=>{console.error("setFlagsError() must be used within a FlagProvider")}};function g(){const e=l.useContext(b);return e||(console.error("useFlagContext() must be used within a FlagProvider"),M)}const O=e=>{const{isEnabled:t,client:r}=g(),[u,i]=l.useState(!!t(e)),a=l.useRef();return a.current=u,l.useEffect(()=>{if(!r)return;const c=()=>{const o=t(e);o!==a.current&&(a.current=o,i(!!o))},n=()=>{const o=t(e);a.current=o,i(o)};return r.on("update",c),r.on("ready",n),()=>{r.off("update",c),r.off("ready",n)}},[r]),u},_=()=>{const{client:e}=g(),[t,r]=l.useState(e.getAllToggles());return l.useEffect(()=>{const u=()=>{r(e.getAllToggles())};return e.on("update",u),()=>{e.off("update",u)}},[]),t},j=()=>{const{flagsReady:e,flagsError:t}=g();return{flagsReady:e,flagsError:t}},H=(e,t)=>{var u,i,a,c;return!(e.name===(t==null?void 0:t.name)&&e.enabled===(t==null?void 0:t.enabled)&&e.feature_enabled===(t==null?void 0:t.feature_enabled)&&((u=e.payload)==null?void 0:u.type)===((i=t==null?void 0:t.payload)==null?void 0:i.type)&&((a=e.payload)==null?void 0:a.value)===((c=t==null?void 0:t.payload)==null?void 0:c.value))},q=e=>{const{getVariant:t,client:r}=g(),[u,i]=l.useState(t(e)),a=l.useRef({name:u.name,enabled:u.enabled});return a.current=u,l.useEffect(()=>{if(!r)return;const c=()=>{const o=t(e);H(a.current,o)&&(i(o),a.current=o)},n=()=>{const o=t(e);a.current.name=o==null?void 0:o.name,a.current.enabled=o==null?void 0:o.enabled,i(o)};return r.on("update",c),r.on("ready",n),()=>{r.off("update",c),r.off("ready",n)}},[r]),u||{}},I=()=>{const{updateContext:e}=g();return e},L=()=>{const{client:e}=g();return e};Object.defineProperty(s,"InMemoryStorageProvider",{enumerable:!0,get:()=>f.InMemoryStorageProvider}),Object.defineProperty(s,"LocalStorageProvider",{enumerable:!0,get:()=>f.LocalStorageProvider}),Object.defineProperty(s,"UnleashClient",{enumerable:!0,get:()=>f.UnleashClient}),s.FlagContext=b,s.FlagProvider=h,s.default=h,s.useFlag=O,s.useFlags=_,s.useFlagsStatus=j,s.useUnleashClient=L,s.useUnleashContext=I,s.useVariant=q,Object.defineProperties(s,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}); //# sourceMappingURL=unleash-react.umd.cjs.map