UNPKG

@unleash/proxy-client-react

Version:
4 lines 5.1 kB
(function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("unleash-proxy-client"),require("react"),require("use-sync-external-store/shim"),require("use-sync-external-store/shim/with-selector")):typeof define==`function`&&define.amd?define([`exports`,`unleash-proxy-client`,`react`,`use-sync-external-store/shim`,`use-sync-external-store/shim/with-selector`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.UnleashReact={},e.unleash_proxy_client,e.react,e.use_sync_external_store_shim,e.use_sync_external_store_shim_with_selector))})(this,function(e,t,n,r,i){Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});var a=Object.create,o=Object.defineProperty,s=Object.getOwnPropertyDescriptor,c=Object.getOwnPropertyNames,l=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty,d=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=c(t),a=0,l=i.length,d;a<l;a++)d=i[a],!u.call(e,d)&&d!==n&&o(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(r=s(t,d))||r.enumerable});return e};n=((e,t,n)=>(n=e==null?{}:a(l(e)),d(t||!e||!e.__esModule?o(n,`default`,{value:e,enumerable:!0}):n,e)))(n,1);var f=n.default.createContext(null),p={bootstrap:[],disableRefresh:!0,disableMetrics:!0,url:`http://localhost`,appName:`offline`,clientKey:`not-used`},m=n.default.startTransition||(e=>e()),h=({config:e,children:r,unleashClient:i,startClient:a=!0,stopClient:o=!0,startTransition:s=m})=>{let c=e||p,l=n.default.useRef(i||new t.UnleashClient(c)),[u,d]=n.default.useState(!!(i?e?.bootstrap&&e?.bootstrapOverride!==!1||i.isReady?.():c.bootstrap&&c.bootstrapOverride!==!1)),[h,g]=(0,n.useState)(l.current.getError?.()||null);(0,n.useEffect)(()=>{!c&&!i&&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.`);let e=e=>{s(()=>{g(t=>t||e)})},t=e=>{s(()=>{g(null)})},n=null,r=()=>{n=setTimeout(()=>{s(()=>{d(!0)})},0)};return l.current.on(`ready`,r),l.current.on(`error`,e),l.current.on(`recovered`,t),a&&(l.current.stop(),l.current.start()),function(){l.current&&(l.current.off(`error`,e),l.current.off(`ready`,r),l.current.off(`recovered`,t),o&&l.current.stop()),n&&clearTimeout(n)}},[]);let _=(0,n.useMemo)(()=>({on:(...e)=>l.current.on(...e),off:(...e)=>l.current.off(...e),isEnabled:(...e)=>l.current.isEnabled(...e),updateContext:async(...e)=>await l.current.updateContext(...e),getVariant:(...e)=>l.current.getVariant(...e),client:l.current,flagsReady:u,flagsError:h,setFlagsReady:d,setFlagsError:g}),[u,h]);return n.default.createElement(f.Provider,{value:_},r)},g={on:(e,t,n)=>(console.error(`on() must be used within a FlagProvider`),_),off:(e,t)=>(console.error(`off() must be used within a FlagProvider`),_),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})},_={...g,toggles:[],impressionDataAll:{},context:{},storage:{},start:()=>{},stop:()=>{},isReady:()=>!1,getError:()=>null,getAllToggles:()=>[]},v={...g,client:_,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 y(){return(0,n.useContext)(f)||(console.error(`useFlagContext() must be used within a FlagProvider`),v)}var b=e=>(0,n.useCallback)(t=>e?(e.on(`update`,t),e.on(`ready`,t),()=>{e.off(`update`,t),e.off(`ready`,t)}):()=>{},[e]),x=e=>{let{isEnabled:t,client:n}=y(),i=b(n),a=()=>t(e);return(0,r.useSyncExternalStore)(i,a,a)},S=(e,t)=>e?.name===t?.name&&e?.enabled===t?.enabled&&e?.feature_enabled===t?.feature_enabled&&e?.payload?.type===t?.payload?.type&&e?.payload?.value===t?.payload?.value,C=(e,t)=>e.length===t.length&&e.every((e,n)=>{let r=t[n];return!!r&&e.name===r.name&&e.enabled===r.enabled&&S(e.variant,r.variant)}),w=e=>e,T=()=>{let{client:e}=y(),t=b(e),r=(0,n.useCallback)(()=>e?.getAllToggles()??[],[e]);return(0,i.useSyncExternalStoreWithSelector)(t,r,r,w,C)},E=()=>{let{flagsReady:e,flagsError:t}=y();return{flagsReady:e,flagsError:t}},D=e=>e,O=e=>{let{getVariant:t,client:r}=y(),a=b(r),o=(0,n.useCallback)(()=>t(e),[t,e]);return(0,i.useSyncExternalStoreWithSelector)(a,o,o,D,S)||{}},k=()=>{let{updateContext:e}=y();return e},A=()=>{let{client:e}=y();return e},j=h;e.FlagContext=f,e.FlagProvider=h,Object.defineProperty(e,"InMemoryStorageProvider",{enumerable:!0,get:function(){return t.InMemoryStorageProvider}}),Object.defineProperty(e,"LocalStorageProvider",{enumerable:!0,get:function(){return t.LocalStorageProvider}}),Object.defineProperty(e,"UnleashClient",{enumerable:!0,get:function(){return t.UnleashClient}}),e.default=j,e.useFlag=x,e.useFlags=T,e.useFlagsStatus=E,e.useUnleashClient=A,e.useUnleashContext=k,e.useVariant=O}); //# sourceMappingURL=unleash-react.umd.cjs.map