react-use-opentok
Version:
React Hook for @opentok/client SDK
3 lines (2 loc) • 7.87 kB
JavaScript
import e from"@babel/runtime/helpers/defineProperty";import n from"@babel/runtime/regenerator";import r from"@babel/runtime/helpers/asyncToGenerator";import t from"@babel/runtime/helpers/slicedToArray";import{useReducer as o,useMemo as s,useEffect as i,useCallback as c}from"react";import a from"@babel/runtime/helpers/toConsumableArray";import u from"@opentok/client";function p(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}function f(n){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?p(Object(t),!0).forEach((function(r){e(n,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):p(Object(t)).forEach((function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}))}return n}var l={isSessionInitialized:!1,connectionId:void 0,isSessionConnected:!1,session:void 0,connections:[],streams:[],subscribers:[],publisher:{}},b=function(n,r){var t=r.type,o=r.payload;switch(t){case"UPDATE":return f(f({},n),o);case"ADD_CONNECTION":return f(f({},n),{},{connections:[].concat(a(n.connections),[o])});case"REMOVE_CONNECTION":return f(f({},n),{},{connections:a(n.connections.filter((function(e){return e.connectionId!==o.connectionId})))});case"ADD_STREAM":return f(f({},n),{},{streams:[].concat(a(n.streams),[o])});case"REMOVE_STREAM":return f(f({},n),{},{streams:a(n.streams.filter((function(e){return e.streamId!==o.streamId})))});case"SET_PUBLISHER":var s=o.name,i=o.publisher;return f(f({},n),{},{publisher:f(f({},n.publisher),{},e({},s,i))});case"REMOVE_PUBLISHER":var c=o.name;return f(f({},n),{},{publisher:f(f({},n.publisher),{},e({},c,null))});case"ADD_SUBSCRIBER":return f(f({},n),{},{subscribers:[].concat(a(n.subscribers),[o])});case"REMOVE_SUBSCRIBER":return f(f({},n),{},{subscribers:a(n.subscribers.filter((function(e){return e.streamId!==o.streamId})))});default:return n}},d=["archiveStarted","archiveStopped","connectionCreated","connectionDestroyed","sessionConnected","sessionDisconnected","sessionReconnected","sessionReconnecting","signal","streamCreated","streamDestroyed","streamPropertyChanged"],m=function(e,n,r){if(!d.some((function(n){return e.startsWith(n)})))throw new Error("[ReactUseOpenTok] useSessionEventHandler: The event type is NOT supported");if("function"!=typeof n)throw new Error("[ReactUseOpenTok] useSessionEventHandler: Incorrect value or type of callback");i((function(){if("string"==typeof(r||{}).sessionId)return r.on(e,n),function(){r.off(e,n)}}),[r,e,n])};function h(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}function O(n){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?h(Object(t),!0).forEach((function(r){e(n,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):h(Object(t)).forEach((function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}))}return n}var y={insertMode:"append",width:"100%",height:"100%"};export default function(){var e=function(){var e=o(b,l),n=t(e,2),r=n[0],i=n[1];return[r,s((function(){return{update:function(e){i({type:"UPDATE",payload:e})},addConnection:function(e){i({type:"ADD_CONNECTION",payload:e})},removeConnection:function(e){i({type:"REMOVE_CONNECTION",payload:e})},addStream:function(e){i({type:"ADD_STREAM",payload:e})},removeStream:function(e){i({type:"REMOVE_STREAM",payload:e})},setPublisher:function(e){var n=e.name,r=e.publisher;i({type:"SET_PUBLISHER",payload:{name:n,publisher:r}})},removePublisher:function(e){var n=e.name;i({type:"REMOVE_PUBLISHER",payload:{name:n}})},addSubscriber:function(e){i({type:"ADD_SUBSCRIBER",payload:e})},removeSubscriber:function(e){i({type:"REMOVE_SUBSCRIBER",payload:e})}}}),[])]}(),i=t(e,2),a=i[0],p=i[1],f=a.isSessionConnected,d=a.session,h=a.subscribers,v=a.publisher,E=a.streams,S=c((function(e){p.addConnection(e.connection)}),[p]),P=c((function(e){p.removeConnection(e.connection)}),[p]),w=c((function(e){p.addStream(e.stream)}),[p]),R=c((function(e){p.removeStream(e.stream)}),[p]),I=c((function(e){var n=e.apiKey,r=e.sessionId,t=e.sessionOptions;return new Promise((function(e){var o=u.initSession(n,r,t);p.update({session:o,isSessionInitialized:!0}),e(o)}))}),[p]),T=c((function(e,n){return new Promise((function(r,t){return e?n?void n.connect(e,(function(e){if(e)t(e);else{var o=n.connection.connectionId;p.update({connectionId:o,isSessionConnected:!0}),r(o)}})):t("[ReactUseOpenTok] session does not exist."):t("[ReactUseOpenTok] token does not exist.")}))}),[p]),C=c(function(){var e=r(n.mark((function e(r){var t,o,s,i,c;return n.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=r.apiKey,o=r.sessionId,s=r.token,i=r.sessionOptions,e.next=3,I({apiKey:t,sessionId:o,sessionOptions:i});case 3:return c=e.sent,e.next=6,T(s,c);case 6:case"end":return e.stop()}}),e)})));return function(n){return e.apply(this,arguments)}}(),[T,I]),D=c((function(){d.disconnect(),p.update({connectionId:null,isSessionConnected:!1})}),[p,d]),g=c((function(e){var n=e.name,r=e.element,t=e.options;if(v[n])throw new Error("[ReactUseOpenTok] initPublisher: The publisher(".concat(n,") is already existed"));return new Promise((function(e,o){var s=u.initPublisher(r,O(O({},y),t),(function(e){e&&o(e)}));p.setPublisher({name:n,publisher:s}),e(s)}))}),[p,d,v]),j=c((function(e){var n=e.name;if(!v[n])throw new Error("[ReactUseOpenTok] removePublisher: The publisher(".concat(n,") is not existed"));if(E.some((function(e){return e.streamId===v[n].stream.streamId})))throw new Error("[ReactUseOpenTok] removePublisher: can NOT remove published publisher, please use unpublish instead.");v[n].destroy(),p.removePublisher({name:n})}),[p,E,v]),U=c((function(e){var n=e.name;if(!v[n])throw new Error("[ReactUseOpenTok] publishPublisher: The publisher(".concat(n,") is not existed"));return new Promise((function(e,r){d.publish(v[n],(function(t){t?r(t):(p.addStream(v[n].stream),e(v[n].stream))}))}))}),[p,d,v]),k=c((function(e){var n=e.name,r=e.element,t=e.options;if(v[n])throw new Error("[ReactUseOpenTok] publish: The publisher(".concat(n,") is already existed"));return new Promise((function(e,n){e(u.initPublisher(r,O(O({},y),t),(function(e){e&&n(e)})))})).then((function(e){return new Promise((function(r,t){d.publish(e,(function(o){o?t(o):(p.setPublisher({name:n,publisher:e}),p.addStream(e.stream),r(e.stream))}))}))}))}),[p,v,d]),_=c((function(e){var n=e.name;if(!v||!v[n])throw new Error("[ReactUseOpenTok] unpublish: publisher[".concat(n,"] is undefined"));var r=v&&v[n]&&v[n].stream;d.unpublish(v[n]),p.removePublisher({name:n}),p.removeStream(r)}),[p,v,d]),A=c((function(e){var n=e.stream,r=e.element,t=e.options,o=d.subscribe(n,r,O(O({},y),t));return p.addSubscriber(o),o}),[p,d]),N=c((function(e){var n=e.stream.streamId,r=h.find((function(e){return e.streamId===n}));d.unsubscribe(r),p.removeSubscriber(r)}),[p,d,h]),M=c((function(e){var n=e.type,r=e.data,t=e.to,o=e.completionHandler;if(!f)throw new Error("[ReactUseOpenTok] sendSignal: Session is not connected");var s=O(O({data:r},n&&{type:n}),t&&{to:t});d.signal(s,(function(e){if(e)throw new Error("[ReactUseOpenTok] sendSignal error: "+e.message);"function"==typeof o&&o()}))}),[f,d]);return m("connectionCreated",S,d),m("connectionDestroyed",P,d),m("streamCreated",w,d),m("streamDestroyed",R,d),[a,{initSessionAndConnect:C,initSession:I,connectSession:T,disconnectSession:D,initPublisher:g,removePublisher:j,publishPublisher:U,publish:k,unpublish:_,subscribe:A,unsubscribe:N,sendSignal:M}]}
//# sourceMappingURL=react-use-opentok.esm.min.js.map