UNPKG

@interopio/react-hooks

Version:

React Hooks Wrapper for IO Connect Desktop and Browser

2 lines (1 loc) 1.85 kB
!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?o(exports,require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["exports","react","prop-types"],o):o(((e="undefined"!=typeof globalThis?globalThis:e||self)["io-connect-hooks"]=e["io-connect-hooks"]||{},e["io-connect-hooks"].min={}),e.React,e.PropTypes)}(this,function(e,o,r){"use strict";const t=(e,r)=>{const[t,n]=o.useState(null);return o.useEffect(()=>{(async()=>{try{if(e.browser&&e.browserPlatform)throw new Error("Cannot initialize, because the settings are over-specified: defined are both browser and browserPlatform. Please set one or the other");if(void 0!==window.glue42gd||void 0!==window.iodesktop){const o=e.desktop?.factory||e.browser?.factory||e.browserPlatform?.factory||window.Glue,r=e.desktop?.config||e.browser?.config||e.browserPlatform?.config,t=await o(r);return void n(t.io||t.glue||t)}const o=e.browser?.config||e.browserPlatform?.config,r=e.browser?.factory||e.browserPlatform?.factory||window.IOBrowser||window.IOBrowserPlatform,t=await r(o);n(t.io||t.glue||t)}catch(e){console.error(e),r?.(e instanceof Error?e:new Error((e=>{const o=e.message?JSON.stringify(e.message):JSON.stringify(e);return"string"==typeof e?e:o})(e)))}})()},[]),t},n=o.createContext(null),s=o.memo(({children:e,fallback:r=null,settings:s={},onInitError:i})=>{const c=t(s,i);return c?o.createElement(n.Provider,{value:c},e):o.createElement(o.Fragment,null,r)});s.propTypes={children:r.node,settings:r.object,fallback:r.node},s.displayName="IOConnectProvider";e.IOConnectContext=n,e.IOConnectProvider=s,e.useIOConnect=(e,r=[])=>{const[t,s]=o.useState(),i=o.useContext(n);return o.useEffect(()=>{i&&(async()=>{try{const o=await e(i,...r);void 0!==o&&s("function"==typeof o?()=>o:o)}catch(e){console.error(e)}})()},[i,...r]),t},e.useIOConnectInit=t});