UNPKG

@unleash/proxy-client-react

Version:
5 lines (4 loc) 3.96 kB
(function(u,i){typeof exports=="object"&&typeof module<"u"?i(exports,require("unleash-proxy-client"),require("react")):typeof define=="function"&&define.amd?define(["exports","unleash-proxy-client","react"],i):(u=typeof globalThis<"u"?globalThis:u||self,i(u.UnleashReact={},u.unleashProxyClient,u.react))})(this,function(u,i,o){"use strict";const g=o.createContext(null),m={bootstrap:[],disableRefresh:!0,disableMetrics:!0,url:"http://localhost",appName:"offline",clientKey:"not-used"},x=o["startTransition"]||(e=>e()),E=({config:e,children:t,unleashClient:r,startClient:c=!0,stopClient:f=!0,startTransition:l=x})=>{var S,P,T;const a=e||m,n=o.useRef(r||new i.UnleashClient(a)),[s,h]=o.useState(!!(r?e!=null&&e.bootstrap&&(e==null?void 0:e.bootstrapOverride)!==!1||(S=r.isReady)!=null&&S.call(r):a.bootstrap&&a.bootstrapOverride!==!1)),[F,y]=o.useState(((T=(P=n.current).getError)==null?void 0:T.call(P))||null);o.useEffect(()=>{!a&&!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=v=>{l(()=>{y(A=>A||v)})},b=v=>{l(()=>{y(null)})};let p=null;const U=()=>{p=setTimeout(()=>{l(()=>{h(!0)})},0)};return n.current.on("ready",U),n.current.on("error",d),n.current.on("recovered",b),c&&(n.current.stop(),n.current.start()),function(){n.current&&(n.current.off("error",d),n.current.off("ready",U),n.current.off("recovered",b),f&&n.current.stop()),p&&clearTimeout(p)}},[]);const q=o.useMemo(()=>({on:(d,b,p)=>n.current.on(d,b,p),off:(d,b)=>n.current.off(d,b),updateContext:async d=>await n.current.updateContext(d),isEnabled:d=>n.current.isEnabled(d),getVariant:d=>n.current.getVariant(d),client:n.current,flagsReady:s,flagsError:F,setFlagsReady:h,setFlagsError:y}),[s,F]);return o.createElement(g.Provider,{value:q},t)},M=e=>{const{isEnabled:t,client:r}=o.useContext(g),[c,f]=o.useState(!!t(e)),l=o.useRef();return l.current=c,o.useEffect(()=>{if(!r)return;const a=()=>{const s=t(e);s!==l.current&&(l.current=s,f(!!s))},n=()=>{const s=t(e);l.current=s,f(s)};return r.on("update",a),r.on("ready",n),()=>{r.off("update",a),r.off("ready",n)}},[r]),c},O=()=>{const{client:e}=o.useContext(g),[t,r]=o.useState(e.getAllToggles());return o.useEffect(()=>{const c=()=>{r(e.getAllToggles())};return e.on("update",c),()=>{e.off("update",c)}},[]),t},_=()=>{const{flagsReady:e,flagsError:t}=o.useContext(g);return{flagsReady:e,flagsError:t}},j=(e,t)=>{var c,f,l,a;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)&&((c=e.payload)==null?void 0:c.type)===((f=t==null?void 0:t.payload)==null?void 0:f.type)&&((l=e.payload)==null?void 0:l.value)===((a=t==null?void 0:t.payload)==null?void 0:a.value))},C=e=>{const{getVariant:t,client:r}=o.useContext(g),[c,f]=o.useState(t(e)),l=o.useRef({name:c.name,enabled:c.enabled});return l.current=c,o.useEffect(()=>{if(!r)return;const a=()=>{const s=t(e);j(l.current,s)&&(f(s),l.current=s)},n=()=>{const s=t(e);l.current.name=s==null?void 0:s.name,l.current.enabled=s==null?void 0:s.enabled,f(s)};return r.on("update",a),r.on("ready",n),()=>{r.off("update",a),r.off("ready",n)}},[r]),c||{}},H=()=>{const{updateContext:e}=o.useContext(g);return e},k=()=>{const{client:e}=o.useContext(g);return e};Object.defineProperty(u,"InMemoryStorageProvider",{enumerable:!0,get:()=>i.InMemoryStorageProvider}),Object.defineProperty(u,"LocalStorageProvider",{enumerable:!0,get:()=>i.LocalStorageProvider}),Object.defineProperty(u,"UnleashClient",{enumerable:!0,get:()=>i.UnleashClient}),u.FlagContext=g,u.FlagProvider=E,u.default=E,u.useFlag=M,u.useFlags=O,u.useFlagsStatus=_,u.useUnleashClient=k,u.useUnleashContext=H,u.useVariant=C,Object.defineProperties(u,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}); //# sourceMappingURL=unleash-react.umd.cjs.map