@nethesis/phone-island 0.15.2 → 0.15.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/App.js +1 -1
- package/dist/App.js.map +1 -1
- package/dist/components/SideView/hooks/useSideViewLogic.js +1 -1
- package/dist/components/SideView/hooks/useSideViewLogic.js.map +1 -1
- package/dist/components/Socket.js +1 -1
- package/dist/components/Socket.js.map +1 -1
- package/dist/lib/phone/trunk.js +2 -0
- package/dist/lib/phone/trunk.js.map +1 -0
- package/dist/lib/user/extensions.js.map +1 -1
- package/dist/models/paramUrl.js +1 -1
- package/dist/models/paramUrl.js.map +1 -1
- package/package.json +1 -1
package/dist/App.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./node_modules/tslib/tslib.es6.js"),n=require("react"),t=require("./components/Events.js"),s=require("./components/Socket.js"),i=require("./components/WebRTC.js"),o=require("./components/Island.js"),a=require("./components/RestAPI.js"),r=require("./utils/customHooks/useEventListener.js"),l=require("./utils/genericFunctions/eventDispatch.js"),u=require("./utils/genericFunctions/localStorage.js"),d=require("./store/index.js"),c=require("./services/user.js");require("./node_modules/react-redux/es/index.js"),require("./node_modules/@fortawesome/react-fontawesome/index.es.js"),require("./node_modules/i18next/dist/esm/i18next.js"),require("./node_modules/react-tooltip/dist/react-tooltip.min.mjs.js");var p=require("./node_modules/js-base64/base64.mjs.js"),h=require("./workers/wake_up.js"),v=require("./lib/i18n.js");require("./node_modules/react-tooltip/dist/react-tooltip.min.css.js");var f=require("./lib/webrtc/messages.js"),g=require("./lib/darkTheme.js"),m=require("./utils/genericFunctions/isEmpty.js"),E=require("./utils/genericFunctions/checkConnection.js"),I=require("./utils/genericFunctions/isBackCallVisible.js"),L=require("./node_modules/react-redux/es/components/Provider.js");function S(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("./node_modules/react-redux/node_modules/react-is/index.js"),require("./node_modules/react-redux/es/components/Context.js");var w=S(n),b=function(S){var b=S.dataConfig,y=S.showAlways,D=void 0!==y&&y,U=S.uaType,j=p.Base64.atob(b||"").split(":"),q=j[0],k=j[1],C=j[2],_=j[3],x=j[4],A=j[5],N=j[6],P=n.useState(!1),T=P[0],V=P[1],O=n.useState(!1),R=O[0],Q=O[1],z=n.useState(!1),$=z[0],F=z[1];n.useEffect((function(){var e=new Worker(h.default,{type:"module"});return e.onmessage=function(e){"wakeup"===e.data&&V(!0)},function(){e.terminate()}}),[]),n.useEffect((function(){$&&R&&(V(!1),Q(!1),F(!1))}),[$,R]),r.useEventListener("phone-island-expand",(function(){d.store.dispatch.island.toggleIsOpen(!0),l.eventDispatch("phone-island-expanded",{})})),r.useEventListener("phone-island-compress",(function(){d.store.dispatch.island.toggleIsOpen(!1),l.eventDispatch("phone-island-compressed",{})})),r.useEventListener("phone-island-call-keypad-close",(function(){d.store.dispatch.island.setIslandView("call"),l.eventDispatch("phone-island-call-keypad-closed",{})})),r.useEventListener("phone-island-call-transfer-close",(function(){d.store.dispatch.island.setIslandView("call"),l.eventDispatch("phone-island-call-transfer-closed",{})})),r.useEventListener("phone-island-recording-close",(function(){d.store.dispatch.island.setIslandView(null),l.eventDispatch("phone-island-recording-closed",{})})),r.useEventListener("phone-island-audio-player-close",(function(){d.store.dispatch.island.setIslandView(null),l.eventDispatch("phone-island-audio-player-closed",{})})),r.useEventListener("phone-island-detach",(function(e){f.detach(),l.eventDispatch("phone-island-detached",{})})),r.useEventListener("phone-island-audio-input-change",(function(e){u.setJSONItem("phone-island-audio-input-device",{deviceId:e.deviceId}),l.eventDispatch("phone-island-audio-input-changed",{})})),r.useEventListener("phone-island-video-input-change",(function(e){u.setJSONItem("phone-island-video-input-device",{deviceId:e.deviceId}),l.eventDispatch("phone-island-video-input-changed",{})}));var M=n.useState(!0),W=M[0],B=M[1],J=n.useState(!0),H=J[0],G=J[1];n.useEffect((function(){W&&(v.initI18n(),e.__awaiter(void 0,void 0,void 0,(function(){var n,t,s,i;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,c.getParamUrl()];case 1:return n=e.sent(),t=(null==n?void 0:n.url)||"",s=t&&""!==t.trim(),d.store.dispatch.paramUrl.setParamUrl({url:t,onlyQueues:(null==n?void 0:n.only_queues)||!1,hasValidUrl:s}),[3,3];case 2:return i=e.sent(),console.error("Error fetching URL parameter:",i),d.store.dispatch.paramUrl.setParamUrl({url:"",onlyQueues:!1,hasValidUrl:!1}),[3,3];case 3:return[2]}}))})),B(!1))}),[W]),r.useEventListener("phone-island-audio-output-change",(function(e){H||(d.store.dispatch.island.setIslandView(null),d.store.dispatch.island.toggleAvoidToShow(!0),l.eventDispatch("phone-island-call-start",{number:"*43"})),setTimeout((function(){var n=d.store.getState().player.remoteAudio;null==n||n.current.setSinkId(e.deviceId).then((function(){console.info("Default audio output device change with success!"),u.setJSONItem("phone-island-audio-output-device",{deviceId:e.deviceId}),l.eventDispatch("phone-island-audio-output-changed",{}),l.eventDispatch("phone-island-call-end",{}),d.store.dispatch.island.toggleAvoidToShow(!1)})).catch((function(e){console.error("Default audio output device change error:",e),l.eventDispatch("phone-island-call-end",{}),d.store.dispatch.island.toggleAvoidToShow(!1)}))}),500)})),r.useEventListener("phone-island-presence-change",(function(e){c.changeOperatorStatus(e),l.eventDispatch("phone-island-presence-changed",{})})),r.useEventListener("phone-island-view-changed",(function(e){var n=null==e?void 0:e.viewType;d.store.dispatch.island.setIslandView(n)}));var K=d.store.getState().player.remoteAudio;n.useEffect((function(){var e;if(H&&K){var n=null===(e=u.getJSONItem("phone-island-audio-output-device"))||void 0===e?void 0:e.deviceId;l.eventDispatch("phone-island-audio-output-change",{deviceId:n}),G(!1)}}),[H,K]),n.useEffect((function(){g.checkDarkTheme()}),[]),r.useEventListener("phone-island-theme-change",(function(e){g.setTheme(null==e?void 0:e.selectedTheme)})),r.useEventListener("phone-island-default-device-change",(function(e){d.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),l.eventDispatch("phone-island-default-device-changed",{})})),r.useEventListener("phone-island-alert",(function(e){d.store.dispatch.alerts.setAlert(e.toString())})),r.useEventListener("phone-island-check-connection",(function(){E.checkInternetConnection().then((function(e){e?l.eventDispatch("phone-island-internet-connected",{}):l.eventDispatch("phone-island-internet-disconnected",{})}))})),n.useEffect((function(){var e=setInterval((function(){E.checkInternetConnection().then((function(e){e?l.eventDispatch("phone-island-internet-connected",{}):l.eventDispatch("phone-island-internet-disconnected",{})}))}),5e3);return function(){return clearInterval(e)}}),[]),r.useEventListener("phone-island-main-presence",(function(e){var n,t,s,i,o=null===(n=d.store.getState().currentUser)||void 0===n?void 0:n.username,a=d.store.getState().currentUser,r=null==a?void 0:a.mainPresence;if(void 0!==o&&""!==o&&!m.isEmpty(e[o])&&void 0!==(null===(t=e[o])||void 0===t?void 0:t.mainPresence)){var u=null===(s=e[o])||void 0===s?void 0:s.mainPresence;d.store.dispatch.currentUser.updateMainPresence(null===(i=e[o])||void 0===i?void 0:i.mainPresence),"online"===u&&"online"!==r&&l.eventDispatch("phone-island-call-ended",{})}})),r.useEventListener("phone-island-call-status",(function(){var e=d.store.getState().currentCall;console.log("Call status debug informations: ",e)}));var X=function(e,n,t,s){var i=d.store.getState().paramUrl;if(null==i?void 0:i.hasValidUrl){var o=i.url||"";if(o){var a=d.store.getState().island.urlOpened,r=i.openParamUrlType;if(!a||"button"===r){var u=o;u.includes("$CALLER_NUMBER")&&e&&(u=u.replace(/\$CALLER_NUMBER/g,encodeURIComponent(e))),u.includes("$CALLER_NAME")&&n&&(u=u.replace(/\$CALLER_NAME/g,encodeURIComponent(n))),u.includes("$UNIQUEID")&&s&&(u=u.replace(/\$UNIQUEID/g,encodeURIComponent(s))),u.includes("$CALLED")&&t&&(u=u.replace(/\$CALLED/g,encodeURIComponent(t))),u.includes("{phone}")&&e&&(u=u.replace(/\{phone\}/g,encodeURIComponent(e)));var c=u.startsWith("http")?u:"https://".concat(u);if("mobile"!==U){var p=window.open("about:blank","_blank");p&&(p.location.href=c,d.store.dispatch.island.setUrlOpened(!0))}else l.eventDispatch("phone-island-url-parameter-opened-external",{formattedUrl:c})}}}};return r.useEventListener("phone-island-already-opened-external-page",(function(){d.store.dispatch.island.setUrlOpened(!0)})),r.useEventListener("phone-island-url-parameter-opened",(function(e){var n=d.store.getState().paramUrl;if(n.hasValidUrl&&!d.store.getState().island.urlOpened){var t=n.onlyQueues||!1;"in"===(null==e?void 0:e.direction)&&(!0===t&&!0===(null==e?void 0:e.throughQueue)?X(null==e?void 0:e.counterpartNum,null==e?void 0:e.counterpartName,null==e?void 0:e.owner,null==e?void 0:e.uniqueId):!1!==t||!0!==(null==e?void 0:e.throughTrunk)&&!0!==(null==e?void 0:e.throughQueue)||X(null==e?void 0:e.counterpartNum,null==e?void 0:e.counterpartName,null==e?void 0:e.owner,null==e?void 0:e.uniqueId))}})),r.useEventListener("phone-island-user-status",(function(){var e=d.store.getState().currentUser;console.log("User status debug informations: ",e)})),r.useEventListener("phone-island-all-users-status",(function(){var e=d.store.getState().users;console.log("Users status debug informations: ",e)})),r.useEventListener("phone-island-status",(function(){var e=d.store.getState().island;console.log("Phone island status debug informations: ",e)})),r.useEventListener("phone-island-webrtc-status",(function(){var e=d.store.getState().webrtc;console.log("Webrtc status debug informations: ",e)})),r.useEventListener("phone-island-player-status",(function(){var e=d.store.getState().player;console.log("Player status debug informations: ",e)})),r.useEventListener("phone-island-conference-status",(function(){var e=d.store.getState().conference;console.log("Webrtc status debug informations: ",e)})),r.useEventListener("phone-island-streaming-status",(function(){var e=d.store.getState().streaming;console.log("Streaming status debug informations: ",e)})),r.useEventListener("phone-island-paramurl-status",(function(){var e=d.store.getState().paramUrl;console.log("Paramurl status debug informations: ",e)})),r.useEventListener("phone-island-player-force-stop",(function(){d.store.dispatch.player.reset(),console.log("Audio player is interrupted")})),r.useEventListener("phone-island-sideview-open",(function(){d.store.dispatch.island.toggleSideViewVisible(!0),d.store.dispatch.island.setUrlOpened(!1),l.eventDispatch("phone-island-sideview-opened",{})})),r.useEventListener("phone-island-sideview-close",(function(){d.store.dispatch.island.toggleSideViewVisible(!1),l.eventDispatch("phone-island-sideview-closed",{})})),r.useEventListener("phone-island-size-change",(function(n){var t=d.store.getState().island.sideViewIsVisible,s=n.sizeInformation,i=e.__assign(e.__assign({},s),{right:t?"42px":"0px",top:I.isBackCallActive()?"40px":"0px"});l.eventDispatch("phone-island-size-changed",{sizes:i})})),r.useEventListener("phone-island-call-ended",(function(){if("online"===d.store.getState().currentUser.mainPresence){l.eventDispatch("phone-island-size-change",{sizeInformation:{width:"0px",height:"0px"}}),l.eventDispatch("phone-island-sideview-close",{}),d.store.dispatch.island.resetIslandStore()}})),r.useEventListener("phone-island-conference-list-open",(function(){d.store.dispatch.island.toggleConferenceList(!0),l.eventDispatch("phone-island-conference-list-opened",{})})),r.useEventListener("phone-island-alert-removed",(function(e){var n=d.store.getState().alerts.status.activeAlertsCount,t=d.store.getState().island,s=t.view,i=t.previousView,o=d.store.getState().conference.isActive,a=d.store.getState().alerts.data,r=d.store.getState().currentCall,u=r.incoming,c=r.outgoing,p=r.accepted,h=null==e?void 0:e.type,v=r.incoming||r.outgoing||r.accepted||""!==r.conversationId;if(!(u||c||p||n>0||"player"===s||"recorder"===s||"physicalPhoneRecorder"===s||"waitingConference"===s&&o||"transfer"===s&&o||"settings"===s&&o||"settings"===s&&("recorder"===i||"player"===i))&&0===n&&(!h||a[h]&&!a[h].active)&&!v){l.eventDispatch("phone-island-size-change",{sizeInformation:{width:"0px",height:"0px"}}),l.eventDispatch("phone-island-sideview-close",{}),d.store.dispatch.island.resetIslandStore()}})),r.useEventListener("phone-island-conference-list-close",(function(){d.store.dispatch.island.toggleConferenceList(!1),l.eventDispatch("phone-island-conference-list-closed",{})})),r.useEventListener("phone-island-conversations",(function(e){var n,t=Object.keys(e)[0];if(t===(null===(n=d.store.getState().currentUser)||void 0===n?void 0:n.username)){var s=e[t].conversations,i=d.store.getState().paramUrl,o=d.store.getState().island.urlOpened;if(!i.hasValidUrl||o)return;if("answered"===i.openParamUrlType&&s&&Object.keys(s).length>0){var a=s[Object.keys(s)[0]];if((null==a?void 0:a.connected)&&"in"===(null==a?void 0:a.direction)){var r=i.onlyQueues||!1;!0===r&&!0===(null==a?void 0:a.throughQueue)?X(a.counterpartNum,a.counterpartName,a.owner,a.uniqueId):!1!==r||!0!==(null==a?void 0:a.throughTrunk)&&!0!==(null==a?void 0:a.throughQueue)||X(a.counterpartNum,a.counterpartName,a.owner,a.uniqueId)}}}})),w.default.createElement(w.default.Fragment,null,w.default.createElement(L.default,{store:d.store},w.default.createElement(i.WebRTC,{hostName:q,sipExten:_,sipSecret:x,sipHost:A,sipPort:N,reload:T,reloadedCallback:function(){return Q(!0)},uaType:U},w.default.createElement(a.RestAPI,{hostName:q,username:k,authToken:C},w.default.createElement(s.Socket,{hostName:q,username:k,authToken:C,reload:T,reloadedCallback:function(){return F(!0)},uaType:U},w.default.createElement(t.Events,{sipHost:A},w.default.createElement(o.Island,{showAlways:D,uaType:U})))))))};b.displayName="PhoneIsland",exports.PhoneIsland=b;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./node_modules/tslib/tslib.es6.js"),n=require("react"),t=require("./components/Events.js"),s=require("./components/Socket.js"),i=require("./components/WebRTC.js"),o=require("./components/Island.js"),a=require("./components/RestAPI.js"),r=require("./utils/customHooks/useEventListener.js"),l=require("./utils/genericFunctions/eventDispatch.js"),u=require("./utils/genericFunctions/localStorage.js"),d=require("./store/index.js"),c=require("./services/user.js");require("./node_modules/react-redux/es/index.js"),require("./node_modules/@fortawesome/react-fontawesome/index.es.js"),require("./node_modules/i18next/dist/esm/i18next.js"),require("./node_modules/react-tooltip/dist/react-tooltip.min.mjs.js");var p=require("./node_modules/js-base64/base64.mjs.js"),h=require("./workers/wake_up.js"),v=require("./lib/i18n.js");require("./node_modules/react-tooltip/dist/react-tooltip.min.css.js");var f=require("./lib/webrtc/messages.js"),g=require("./lib/darkTheme.js"),m=require("./utils/genericFunctions/isEmpty.js"),E=require("./utils/genericFunctions/checkConnection.js"),I=require("./utils/genericFunctions/isBackCallVisible.js"),L=require("./lib/phone/trunk.js"),S=require("./node_modules/react-redux/es/components/Provider.js");function w(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("./node_modules/react-redux/node_modules/react-is/index.js"),require("./node_modules/react-redux/es/components/Context.js");var b=w(n),U=function(w){var U=w.dataConfig,y=w.showAlways,D=void 0!==y&&y,j=w.uaType,q=p.Base64.atob(U||"").split(":"),k=q[0],C=q[1],_=q[2],T=q[3],x=q[4],N=q[5],A=q[6],P=n.useState(!1),V=P[0],O=P[1],R=n.useState(!1),Q=R[0],z=R[1],F=n.useState(!1),$=F[0],M=F[1];n.useEffect((function(){var e=new Worker(h.default,{type:"module"});return e.onmessage=function(e){"wakeup"===e.data&&O(!0)},function(){e.terminate()}}),[]),n.useEffect((function(){$&&Q&&(O(!1),z(!1),M(!1))}),[$,Q]),r.useEventListener("phone-island-expand",(function(){d.store.dispatch.island.toggleIsOpen(!0),l.eventDispatch("phone-island-expanded",{})})),r.useEventListener("phone-island-compress",(function(){d.store.dispatch.island.toggleIsOpen(!1),l.eventDispatch("phone-island-compressed",{})})),r.useEventListener("phone-island-call-keypad-close",(function(){d.store.dispatch.island.setIslandView("call"),l.eventDispatch("phone-island-call-keypad-closed",{})})),r.useEventListener("phone-island-call-transfer-close",(function(){d.store.dispatch.island.setIslandView("call"),l.eventDispatch("phone-island-call-transfer-closed",{})})),r.useEventListener("phone-island-recording-close",(function(){d.store.dispatch.island.setIslandView(null),l.eventDispatch("phone-island-recording-closed",{})})),r.useEventListener("phone-island-audio-player-close",(function(){d.store.dispatch.island.setIslandView(null),l.eventDispatch("phone-island-audio-player-closed",{})})),r.useEventListener("phone-island-detach",(function(e){f.detach(),l.eventDispatch("phone-island-detached",{})})),r.useEventListener("phone-island-audio-input-change",(function(e){u.setJSONItem("phone-island-audio-input-device",{deviceId:e.deviceId}),l.eventDispatch("phone-island-audio-input-changed",{})})),r.useEventListener("phone-island-video-input-change",(function(e){u.setJSONItem("phone-island-video-input-device",{deviceId:e.deviceId}),l.eventDispatch("phone-island-video-input-changed",{})}));var W=n.useState(!0),B=W[0],J=W[1],H=n.useState(!0),G=H[0],K=H[1];n.useEffect((function(){B&&(v.initI18n(),e.__awaiter(void 0,void 0,void 0,(function(){var n,t,s,i;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,c.getParamUrl()];case 1:return n=e.sent(),t=(null==n?void 0:n.url)||"",s=t&&""!==t.trim(),d.store.dispatch.paramUrl.setParamUrl({url:t,onlyQueues:(null==n?void 0:n.only_queues)||!1,hasValidUrl:s}),[3,3];case 2:return i=e.sent(),console.error("Error fetching URL parameter:",i),d.store.dispatch.paramUrl.setParamUrl({url:"",onlyQueues:!1,hasValidUrl:!1}),[3,3];case 3:return[2]}}))})),J(!1))}),[B]),r.useEventListener("phone-island-audio-output-change",(function(e){G||(d.store.dispatch.island.setIslandView(null),d.store.dispatch.island.toggleAvoidToShow(!0),l.eventDispatch("phone-island-call-start",{number:"*43"})),setTimeout((function(){var n=d.store.getState().player.remoteAudio;null==n||n.current.setSinkId(e.deviceId).then((function(){console.info("Default audio output device change with success!"),u.setJSONItem("phone-island-audio-output-device",{deviceId:e.deviceId}),l.eventDispatch("phone-island-audio-output-changed",{}),l.eventDispatch("phone-island-call-end",{}),d.store.dispatch.island.toggleAvoidToShow(!1)})).catch((function(e){console.error("Default audio output device change error:",e),l.eventDispatch("phone-island-call-end",{}),d.store.dispatch.island.toggleAvoidToShow(!1)}))}),500)})),r.useEventListener("phone-island-presence-change",(function(e){c.changeOperatorStatus(e),l.eventDispatch("phone-island-presence-changed",{})})),r.useEventListener("phone-island-view-changed",(function(e){var n=null==e?void 0:e.viewType;d.store.dispatch.island.setIslandView(n)}));var X=d.store.getState().player.remoteAudio;n.useEffect((function(){var e;if(G&&X){var n=null===(e=u.getJSONItem("phone-island-audio-output-device"))||void 0===e?void 0:e.deviceId;l.eventDispatch("phone-island-audio-output-change",{deviceId:n}),K(!1)}}),[G,X]),n.useEffect((function(){g.checkDarkTheme()}),[]),r.useEventListener("phone-island-theme-change",(function(e){g.setTheme(null==e?void 0:e.selectedTheme)})),r.useEventListener("phone-island-default-device-change",(function(e){d.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),l.eventDispatch("phone-island-default-device-changed",{})})),r.useEventListener("phone-island-alert",(function(e){d.store.dispatch.alerts.setAlert(e.toString())})),r.useEventListener("phone-island-check-connection",(function(){E.checkInternetConnection().then((function(e){e?l.eventDispatch("phone-island-internet-connected",{}):l.eventDispatch("phone-island-internet-disconnected",{})}))})),n.useEffect((function(){var e=setInterval((function(){E.checkInternetConnection().then((function(e){e?l.eventDispatch("phone-island-internet-connected",{}):l.eventDispatch("phone-island-internet-disconnected",{})}))}),5e3);return function(){return clearInterval(e)}}),[]),r.useEventListener("phone-island-main-presence",(function(e){var n,t,s,i,o=null===(n=d.store.getState().currentUser)||void 0===n?void 0:n.username,a=d.store.getState().currentUser,r=null==a?void 0:a.mainPresence;if(void 0!==o&&""!==o&&!m.isEmpty(e[o])&&void 0!==(null===(t=e[o])||void 0===t?void 0:t.mainPresence)){var u=null===(s=e[o])||void 0===s?void 0:s.mainPresence;d.store.dispatch.currentUser.updateMainPresence(null===(i=e[o])||void 0===i?void 0:i.mainPresence),"online"===u&&"online"!==r&&l.eventDispatch("phone-island-call-ended",{})}})),r.useEventListener("phone-island-call-status",(function(){var e=d.store.getState().currentCall;console.log("Call status debug informations: ",e)}));var Y=function(e,n,t,s){var i=d.store.getState().paramUrl;if(null==i?void 0:i.hasValidUrl){var o=i.url||"";if(o){var a=d.store.getState().island.urlOpened,r=i.openParamUrlType;if(!a||"button"===r){var u=o;u.includes("$CALLER_NUMBER")&&e&&(u=u.replace(/\$CALLER_NUMBER/g,encodeURIComponent(e))),u.includes("$CALLER_NAME")&&n&&(u=u.replace(/\$CALLER_NAME/g,encodeURIComponent(n))),u.includes("$UNIQUEID")&&s&&(u=u.replace(/\$UNIQUEID/g,encodeURIComponent(s))),u.includes("$CALLED")&&t&&(u=u.replace(/\$CALLED/g,encodeURIComponent(t))),u.includes("{phone}")&&e&&(u=u.replace(/\{phone\}/g,encodeURIComponent(e)));var c=u.startsWith("http")?u:"https://".concat(u);if("mobile"!==j){var p=window.open("about:blank","_blank");p&&(p.location.href=c,d.store.dispatch.island.setUrlOpened(!0))}else l.eventDispatch("phone-island-url-parameter-opened-external",{formattedUrl:c})}}}};return r.useEventListener("phone-island-already-opened-external-page",(function(){d.store.dispatch.island.setUrlOpened(!0)})),r.useEventListener("phone-island-url-parameter-opened",(function(e){var n=d.store.getState().paramUrl;if(n.hasValidUrl&&!d.store.getState().island.urlOpened){var t=n.onlyQueues||!1,s=L.isFromTrunk(null==e?void 0:e.counterpartNum);d.store.dispatch.paramUrl.setThroughTrunk(s),"in"===(null==e?void 0:e.direction)&&(!0===t&&!0===(null==e?void 0:e.throughQueue)?Y(null==e?void 0:e.counterpartNum,null==e?void 0:e.counterpartName,null==e?void 0:e.owner,null==e?void 0:e.uniqueId):!1!==t||!0!==s&&!0!==(null==e?void 0:e.throughQueue)||Y(null==e?void 0:e.counterpartNum,null==e?void 0:e.counterpartName,null==e?void 0:e.owner,null==e?void 0:e.uniqueId))}})),r.useEventListener("phone-island-user-status",(function(){var e=d.store.getState().currentUser;console.log("User status debug informations: ",e)})),r.useEventListener("phone-island-all-users-status",(function(){var e=d.store.getState().users;console.log("Users status debug informations: ",e)})),r.useEventListener("phone-island-status",(function(){var e=d.store.getState().island;console.log("Phone island status debug informations: ",e)})),r.useEventListener("phone-island-webrtc-status",(function(){var e=d.store.getState().webrtc;console.log("Webrtc status debug informations: ",e)})),r.useEventListener("phone-island-player-status",(function(){var e=d.store.getState().player;console.log("Player status debug informations: ",e)})),r.useEventListener("phone-island-conference-status",(function(){var e=d.store.getState().conference;console.log("Webrtc status debug informations: ",e)})),r.useEventListener("phone-island-streaming-status",(function(){var e=d.store.getState().streaming;console.log("Streaming status debug informations: ",e)})),r.useEventListener("phone-island-paramurl-status",(function(){var e=d.store.getState().paramUrl;console.log("Paramurl status debug informations: ",e)})),r.useEventListener("phone-island-player-force-stop",(function(){d.store.dispatch.player.reset(),console.log("Audio player is interrupted")})),r.useEventListener("phone-island-sideview-open",(function(){d.store.dispatch.island.toggleSideViewVisible(!0),d.store.dispatch.island.setUrlOpened(!1),l.eventDispatch("phone-island-sideview-opened",{})})),r.useEventListener("phone-island-sideview-close",(function(){d.store.dispatch.island.toggleSideViewVisible(!1),l.eventDispatch("phone-island-sideview-closed",{})})),r.useEventListener("phone-island-size-change",(function(n){var t=d.store.getState().island.sideViewIsVisible,s=n.sizeInformation,i=e.__assign(e.__assign({},s),{right:t?"42px":"0px",top:I.isBackCallActive()?"40px":"0px"});l.eventDispatch("phone-island-size-changed",{sizes:i})})),r.useEventListener("phone-island-call-ended",(function(){if("online"===d.store.getState().currentUser.mainPresence){l.eventDispatch("phone-island-size-change",{sizeInformation:{width:"0px",height:"0px"}}),l.eventDispatch("phone-island-sideview-close",{}),d.store.dispatch.island.resetIslandStore(),d.store.dispatch.paramUrl.setThroughTrunk(!1)}})),r.useEventListener("phone-island-conference-list-open",(function(){d.store.dispatch.island.toggleConferenceList(!0),l.eventDispatch("phone-island-conference-list-opened",{})})),r.useEventListener("phone-island-alert-removed",(function(e){var n=d.store.getState().alerts.status.activeAlertsCount,t=d.store.getState().island,s=t.view,i=t.previousView,o=d.store.getState().conference.isActive,a=d.store.getState().alerts.data,r=d.store.getState().currentCall,u=r.incoming,c=r.outgoing,p=r.accepted,h=null==e?void 0:e.type,v=r.incoming||r.outgoing||r.accepted||""!==r.conversationId;if(!(u||c||p||n>0||"player"===s||"recorder"===s||"physicalPhoneRecorder"===s||"waitingConference"===s&&o||"transfer"===s&&o||"settings"===s&&o||"settings"===s&&("recorder"===i||"player"===i))&&0===n&&(!h||a[h]&&!a[h].active)&&!v){l.eventDispatch("phone-island-size-change",{sizeInformation:{width:"0px",height:"0px"}}),l.eventDispatch("phone-island-sideview-close",{}),d.store.dispatch.island.resetIslandStore()}})),r.useEventListener("phone-island-conference-list-close",(function(){d.store.dispatch.island.toggleConferenceList(!1),l.eventDispatch("phone-island-conference-list-closed",{})})),r.useEventListener("phone-island-conversations",(function(e){var n,t=Object.keys(e)[0];if(t===(null===(n=d.store.getState().currentUser)||void 0===n?void 0:n.username)){var s=e[t].conversations,i=d.store.getState().paramUrl,o=d.store.getState().island.urlOpened;if(!i.hasValidUrl||o)return;if("answered"===i.openParamUrlType&&s&&Object.keys(s).length>0){var a=s[Object.keys(s)[0]];if((null==a?void 0:a.connected)&&"in"===(null==a?void 0:a.direction)){var r=i.onlyQueues||!1,l=L.isFromTrunk(a.counterpartNum);d.store.dispatch.paramUrl.setThroughTrunk(l),!0===r&&!0===(null==a?void 0:a.throughQueue)?Y(a.counterpartNum,a.counterpartName,a.owner,a.uniqueId):!1!==r||!0!==l&&!0!==(null==a?void 0:a.throughQueue)||Y(a.counterpartNum,a.counterpartName,a.owner,a.uniqueId)}}}})),b.default.createElement(b.default.Fragment,null,b.default.createElement(S.default,{store:d.store},b.default.createElement(i.WebRTC,{hostName:k,sipExten:T,sipSecret:x,sipHost:N,sipPort:A,reload:V,reloadedCallback:function(){return z(!0)},uaType:j},b.default.createElement(a.RestAPI,{hostName:k,username:C,authToken:_},b.default.createElement(s.Socket,{hostName:k,username:C,authToken:_,reload:V,reloadedCallback:function(){return M(!0)},uaType:j},b.default.createElement(t.Events,{sipHost:N},b.default.createElement(o.Island,{showAlways:D,uaType:j})))))))};U.displayName="PhoneIsland",exports.PhoneIsland=U;
|
|
2
2
|
//# sourceMappingURL=App.js.map
|
package/dist/App.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.js","sources":["../src/App.tsx"],"sourcesContent":["import React, { type FC, useState, useEffect } from 'react'\nimport { Events, Socket, WebRTC, Island, RestAPI } from './components'\nimport { Provider } from 'react-redux'\nimport { store } from './store'\nimport { Base64 } from 'js-base64'\nimport wakeUpWorker from './workers/wake_up'\nimport { initI18n } from './lib/i18n'\n\nimport 'react-tooltip/dist/react-tooltip.css'\nimport { useEventListener, eventDispatch, setJSONItem, getJSONItem } from './utils'\nimport { detach } from './lib/webrtc/messages'\nimport { checkDarkTheme, setTheme } from './lib/darkTheme'\nimport { changeOperatorStatus } from './services/user'\nimport { getParamUrl } from './services/user'\nimport { isEmpty } from './utils/genericFunctions/isEmpty'\nimport { checkInternetConnection } from './utils/genericFunctions/checkConnection'\nimport { isBackCallActive } from './utils/genericFunctions/isBackCallVisible'\n\ninterface PhoneIslandProps {\n dataConfig: string\n showAlways?: boolean\n uaType: string\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport const PhoneIsland: FC<PhoneIslandProps> = ({\n dataConfig,\n showAlways = false,\n uaType,\n}: PhoneIslandProps) => {\n const CONFIG: string[] = Base64.atob(dataConfig || '').split(':')\n const HOST_NAME: string = CONFIG[0]\n const USERNAME: string = CONFIG[1]\n const AUTH_TOKEN: string = CONFIG[2]\n const SIP_EXTEN: string = CONFIG[3]\n const SIP_SECRET: string = CONFIG[4]\n const SIP_HOST: string = CONFIG[5]\n const SIP_PORT: string = CONFIG[6]\n\n // Initialize the state to manage the reload events\n const [reload, setReload] = useState<boolean>(false)\n const [reloadedWebRTC, setReloadedWebRTC] = useState<boolean>(false)\n const [reloadedSocket, setReloadedSocket] = useState<boolean>(false)\n\n useEffect(() => {\n const worker = new Worker(wakeUpWorker, { type: 'module' })\n worker.onmessage = (event: MessageEvent<string>) => {\n // Handle wakeup message\n if (event.data === 'wakeup') {\n setReload(true)\n }\n }\n\n return () => {\n worker.terminate()\n }\n }, [])\n\n useEffect(() => {\n if (reloadedSocket && reloadedWebRTC) {\n setReload(false)\n setReloadedWebRTC(false)\n setReloadedSocket(false)\n }\n }, [reloadedSocket, reloadedWebRTC])\n\n useEventListener('phone-island-expand', () => {\n store.dispatch.island.toggleIsOpen(true)\n eventDispatch('phone-island-expanded', {})\n })\n useEventListener('phone-island-compress', () => {\n store.dispatch.island.toggleIsOpen(false)\n eventDispatch('phone-island-compressed', {})\n })\n\n useEventListener('phone-island-call-keypad-close', () => {\n store.dispatch.island.setIslandView('call')\n eventDispatch('phone-island-call-keypad-closed', {})\n })\n useEventListener('phone-island-call-transfer-close', () => {\n store.dispatch.island.setIslandView('call')\n eventDispatch('phone-island-call-transfer-closed', {})\n })\n useEventListener('phone-island-recording-close', () => {\n store.dispatch.island.setIslandView(null)\n eventDispatch('phone-island-recording-closed', {})\n })\n useEventListener('phone-island-audio-player-close', () => {\n store.dispatch.island.setIslandView(null)\n eventDispatch('phone-island-audio-player-closed', {})\n })\n\n useEventListener('phone-island-detach', (data) => {\n detach()\n eventDispatch('phone-island-detached', {})\n })\n\n useEventListener('phone-island-audio-input-change', (data: DeviceInputOutputTypes) => {\n setJSONItem('phone-island-audio-input-device', { deviceId: data.deviceId })\n eventDispatch('phone-island-audio-input-changed', {})\n })\n\n useEventListener('phone-island-video-input-change', (data: DeviceInputOutputTypes) => {\n setJSONItem('phone-island-video-input-device', { deviceId: data.deviceId })\n eventDispatch('phone-island-video-input-changed', {})\n })\n\n const [firstRender, setFirstRender] = useState(true)\n const [firstAudioOutputInit, setFirstAudioOutputInit] = useState(true)\n\n // Initialize application on first render\n useEffect(() => {\n const initParamUrl = async () => {\n try {\n const paramUrlResponse: any = await getParamUrl()\n const url = paramUrlResponse?.url || ''\n const isValid = url && url.trim() !== ''\n\n // Save data inside the store\n store.dispatch.paramUrl.setParamUrl({\n url: url,\n onlyQueues: paramUrlResponse?.only_queues || false,\n hasValidUrl: isValid,\n })\n\n } catch (error) {\n console.error('Error fetching URL parameter:', error)\n store.dispatch.paramUrl.setParamUrl({\n url: '',\n onlyQueues: false,\n hasValidUrl: false,\n })\n }\n }\n\n if (firstRender) {\n // Initialize i18n\n initI18n()\n // Initialize param URL\n initParamUrl()\n setFirstRender(false)\n }\n }, [firstRender])\n\n useEventListener('phone-island-audio-output-change', (data: DeviceInputOutputTypes) => {\n if (!firstAudioOutputInit) {\n store.dispatch.island.setIslandView(null)\n store.dispatch.island.toggleAvoidToShow(true)\n eventDispatch('phone-island-call-start', { number: '*43' })\n }\n\n setTimeout(() => {\n const remoteAudioElement: any = store.getState().player.remoteAudio\n // set audio output\n remoteAudioElement?.current\n .setSinkId(data.deviceId)\n .then(function () {\n console.info('Default audio output device change with success!')\n // set device to localstorage\n setJSONItem('phone-island-audio-output-device', { deviceId: data.deviceId })\n\n // dispatch event\n eventDispatch('phone-island-audio-output-changed', {})\n eventDispatch('phone-island-call-end', {})\n store.dispatch.island.toggleAvoidToShow(false)\n })\n .catch(function (err) {\n console.error('Default audio output device change error:', err)\n eventDispatch('phone-island-call-end', {})\n store.dispatch.island.toggleAvoidToShow(false)\n })\n }, 500)\n })\n\n // Listen for the operator status change\n useEventListener('phone-island-presence-change', (data: any) => {\n changeOperatorStatus(data)\n eventDispatch('phone-island-presence-changed', {})\n })\n\n useEventListener('phone-island-view-changed', (data) => {\n const viewType = data?.viewType\n store.dispatch.island.setIslandView(viewType)\n })\n\n const remoteAudioElement: any = store.getState().player.remoteAudio\n\n //get output device from localstorage\n useEffect(() => {\n if (firstAudioOutputInit && remoteAudioElement) {\n const defaultAudioOutputDevice: any = getJSONItem(\n `phone-island-audio-output-device`,\n )?.deviceId\n eventDispatch('phone-island-audio-output-change', {\n deviceId: defaultAudioOutputDevice,\n })\n setFirstAudioOutputInit(false)\n }\n }, [firstAudioOutputInit, remoteAudioElement])\n\n useEffect(() => {\n checkDarkTheme()\n }, [])\n\n useEventListener('phone-island-theme-change', (theme: any) => {\n setTheme(theme?.selectedTheme)\n })\n\n useEventListener('phone-island-default-device-change', (data) => {\n store.dispatch.currentUser.updateCurrentDefaultDevice(data?.deviceInformationObject)\n eventDispatch('phone-island-default-device-changed', {})\n })\n\n useEventListener('phone-island-alert', (alertType: any) => {\n store.dispatch.alerts.setAlert(alertType.toString())\n })\n\n // Manually check if internet connection is enabled or not\n useEventListener('phone-island-check-connection', () => {\n checkInternetConnection().then((internetIsActive) => {\n if (internetIsActive) {\n eventDispatch('phone-island-internet-connected', {})\n } else {\n eventDispatch('phone-island-internet-disconnected', {})\n }\n })\n })\n\n // Check internet connection every 5 seconds\n useEffect(() => {\n const intervalId = setInterval(() => {\n checkInternetConnection().then((internetIsActive) => {\n if (internetIsActive) {\n eventDispatch('phone-island-internet-connected', {})\n } else {\n eventDispatch('phone-island-internet-disconnected', {})\n }\n })\n }, 5000)\n\n return () => clearInterval(intervalId)\n }, [])\n\n useEventListener('phone-island-main-presence', (data: any) => {\n const currentUsernameInformation: any = store.getState().currentUser?.username\n const currentUserObject: any = store.getState().currentUser\n let mainPresenceValueBeforeUpdate = currentUserObject?.mainPresence\n if (\n currentUsernameInformation !== undefined &&\n currentUsernameInformation !== '' &&\n !isEmpty(data[currentUsernameInformation]) &&\n data[currentUsernameInformation]?.mainPresence !== undefined\n ) {\n let newMainPresenceValue = data[currentUsernameInformation]?.mainPresence\n store.dispatch.currentUser.updateMainPresence(data[currentUsernameInformation]?.mainPresence)\n let mainPresenceValueAfterUpdate = newMainPresenceValue\n if (mainPresenceValueAfterUpdate === 'online' && mainPresenceValueBeforeUpdate !== 'online') {\n eventDispatch('phone-island-call-ended', {})\n }\n }\n })\n\n useEventListener('phone-island-call-status', () => {\n const callInformation = store.getState().currentCall\n console.log('Call status debug informations: ', callInformation)\n })\n\n const openParameterizedUrl = (callerNum: any, callerName: any, called: any, uniqueId: any) => {\n const paramUrlInfo = store.getState().paramUrl\n\n if (!paramUrlInfo?.hasValidUrl) {\n return\n }\n\n const paramUrl = paramUrlInfo.url || ''\n\n if (!paramUrl) {\n return\n }\n\n const { urlOpened } = store.getState().island\n const openParamUrlType = paramUrlInfo.openParamUrlType\n\n if (urlOpened && openParamUrlType !== 'button') {\n return\n }\n\n let processedUrl = paramUrl\n\n if (processedUrl.includes('$CALLER_NUMBER') && callerNum) {\n processedUrl = processedUrl.replace(/\\$CALLER_NUMBER/g, encodeURIComponent(callerNum))\n }\n if (processedUrl.includes('$CALLER_NAME') && callerName) {\n processedUrl = processedUrl.replace(/\\$CALLER_NAME/g, encodeURIComponent(callerName))\n }\n if (processedUrl.includes('$UNIQUEID') && uniqueId) {\n processedUrl = processedUrl.replace(/\\$UNIQUEID/g, encodeURIComponent(uniqueId))\n }\n if (processedUrl.includes('$CALLED') && called) {\n processedUrl = processedUrl.replace(/\\$CALLED/g, encodeURIComponent(called))\n }\n if (processedUrl.includes('{phone}') && callerNum) {\n processedUrl = processedUrl.replace(/\\{phone\\}/g, encodeURIComponent(callerNum))\n }\n\n const formattedUrl = processedUrl.startsWith('http') ? processedUrl : `https://${processedUrl}`\n\n if (uaType !== 'mobile') {\n const newWindow = window.open('about:blank', '_blank')\n if (newWindow) {\n newWindow.location.href = formattedUrl\n store.dispatch.island.setUrlOpened(true)\n }\n } else {\n eventDispatch('phone-island-url-parameter-opened-external', { formattedUrl })\n }\n }\n\n useEventListener('phone-island-already-opened-external-page', () => {\n store.dispatch.island.setUrlOpened(true)\n })\n\n useEventListener('phone-island-url-parameter-opened', (data) => {\n const paramUrlInfo = store.getState().paramUrl\n\n if (!paramUrlInfo.hasValidUrl) {\n return\n }\n\n const { urlOpened } = store.getState().island\n if (urlOpened) {\n return\n }\n\n const onlyQueues = paramUrlInfo.onlyQueues || false\n\n if (data?.direction === 'in') {\n if (onlyQueues === true && data?.throughQueue === true) {\n openParameterizedUrl(\n data?.counterpartNum,\n data?.counterpartName,\n data?.owner,\n data?.uniqueId\n )\n } else if (\n onlyQueues === false &&\n (data?.throughTrunk === true || data?.throughQueue === true)\n ) {\n openParameterizedUrl(\n data?.counterpartNum,\n data?.counterpartName,\n data?.owner,\n data?.uniqueId\n )\n }\n }\n })\n\n useEventListener('phone-island-user-status', () => {\n const userInformation = store.getState().currentUser\n console.log('User status debug informations: ', userInformation)\n })\n\n useEventListener('phone-island-all-users-status', () => {\n const allUsersInformation = store.getState().users\n console.log('Users status debug informations: ', allUsersInformation)\n })\n\n useEventListener('phone-island-status', () => {\n const phoneIslandInformation = store.getState().island\n console.log('Phone island status debug informations: ', phoneIslandInformation)\n })\n\n useEventListener('phone-island-webrtc-status', () => {\n const webrtcInformation = store.getState().webrtc\n console.log('Webrtc status debug informations: ', webrtcInformation)\n })\n\n useEventListener('phone-island-player-status', () => {\n const playerInformation = store.getState().player\n console.log('Player status debug informations: ', playerInformation)\n })\n\n useEventListener('phone-island-conference-status', () => {\n const conferenceInformation = store.getState().conference\n console.log('Webrtc status debug informations: ', conferenceInformation)\n })\n\n useEventListener('phone-island-streaming-status', () => {\n const streamingInformation = store.getState().streaming\n console.log('Streaming status debug informations: ', streamingInformation)\n })\n\n useEventListener('phone-island-paramurl-status', () => {\n const paramurl = store.getState().paramUrl\n console.log('Paramurl status debug informations: ', paramurl)\n })\n\n useEventListener('phone-island-player-force-stop', () => {\n store.dispatch.player.reset()\n console.log('Audio player is interrupted')\n })\n\n useEventListener('phone-island-sideview-open', () => {\n store.dispatch.island.toggleSideViewVisible(true)\n store.dispatch.island.setUrlOpened(false)\n eventDispatch('phone-island-sideview-opened', {})\n })\n\n useEventListener('phone-island-sideview-close', () => {\n store.dispatch.island.toggleSideViewVisible(false)\n eventDispatch('phone-island-sideview-closed', {})\n })\n\n useEventListener('phone-island-size-change', (args: any) => {\n const { sideViewIsVisible } = store.getState().island\n\n // Get current dimensions from args\n const { sizeInformation } = args\n\n // // Calculate extra row dimension ( side view and back call )\n const updatedSizeInformation = {\n ...sizeInformation,\n right: sideViewIsVisible ? '42px' : '0px',\n top: isBackCallActive() ? '40px' : '0px',\n }\n eventDispatch('phone-island-size-changed', { sizes: updatedSizeInformation })\n })\n\n // Listen for the call end event and set the island size to 0\n useEventListener('phone-island-call-ended', () => {\n const { mainPresence } = store.getState().currentUser\n if (mainPresence === 'online') {\n const sizeInformation: any = {\n width: '0px',\n height: '0px',\n }\n eventDispatch('phone-island-size-change', { sizeInformation })\n eventDispatch('phone-island-sideview-close', {})\n store.dispatch.island.resetIslandStore()\n }\n })\n\n useEventListener('phone-island-conference-list-open', () => {\n store.dispatch.island.toggleConferenceList(true)\n eventDispatch('phone-island-conference-list-opened', {})\n })\n\n useEventListener('phone-island-alert-removed', (alertRemovedType) => {\n // Get current alerts status\n const { activeAlertsCount } = store.getState().alerts.status\n const { view, previousView } = store.getState().island\n const { isActive } = store.getState().conference\n const alertsData = store.getState().alerts.data\n const currentCall = store.getState().currentCall\n const { incoming, outgoing, accepted } = currentCall\n\n // Check if alert type was provided\n const alertType = alertRemovedType?.type\n\n // Check if user is in a call\n const isInCall =\n currentCall.incoming ||\n currentCall.outgoing ||\n currentCall.accepted ||\n currentCall.conversationId !== ''\n\n // Determine if the island should remain visible\n const shouldKeepVisible =\n incoming ||\n outgoing ||\n accepted ||\n activeAlertsCount > 0 ||\n view === 'player' ||\n view === 'recorder' ||\n view === 'physicalPhoneRecorder' ||\n (view === 'waitingConference' && isActive) ||\n (view === 'transfer' && isActive) ||\n (view === 'settings' && isActive) ||\n (view === 'settings' && (previousView === 'recorder' || previousView === 'player'))\n\n // Reset the island store only if:\n // 1. The island should not remain visible\n // 2. No more active alerts\n // 3. The specific alert is not active anymore\n // 4. User is not currently in a call\n if (\n !shouldKeepVisible &&\n activeAlertsCount === 0 &&\n (!alertType || (alertsData[alertType] && !alertsData[alertType].active)) &&\n !isInCall\n ) {\n const sizeInformation: any = {\n width: '0px',\n height: '0px',\n }\n eventDispatch('phone-island-size-change', { sizeInformation })\n eventDispatch('phone-island-sideview-close', {})\n store.dispatch.island.resetIslandStore()\n }\n })\n\n useEventListener('phone-island-conference-list-close', () => {\n store.dispatch.island.toggleConferenceList(false)\n eventDispatch('phone-island-conference-list-closed', {})\n })\n\n // Listen for conversations updates to handle 'answered' preference for parameterized URL\n useEventListener('phone-island-conversations', (data: any) => {\n // Get the current username (first key in the data object)\n const username = Object.keys(data)[0]\n const currentUsernameInformation: any = store.getState().currentUser?.username\n\n if (username === currentUsernameInformation) {\n const conversations = data[username].conversations\n const paramUrlInfo = store.getState().paramUrl\n const { urlOpened } = store.getState().island\n\n // Only proceed if URL is valid and not already opened\n if (!paramUrlInfo.hasValidUrl || urlOpened) {\n return\n }\n\n // Check if the openParamUrlType is set to 'answered'\n if (paramUrlInfo.openParamUrlType === 'answered') {\n // Check if there are any conversations\n if (conversations && Object.keys(conversations).length > 0) {\n // Get the first conversation (usually there's only one active call)\n const convId = Object.keys(conversations)[0]\n const conv = conversations[convId]\n\n // Check conditions: must be connected and incoming\n if (conv?.connected && conv?.direction === 'in') {\n const onlyQueues = paramUrlInfo.onlyQueues || false\n\n // Check queue conditions based on preferences\n if (onlyQueues === true && conv?.throughQueue === true) {\n // Open URL only for queue calls when onlyQueues is true\n openParameterizedUrl(\n conv.counterpartNum,\n conv.counterpartName,\n conv.owner,\n conv.uniqueId\n )\n } else if (\n onlyQueues === false &&\n (conv?.throughTrunk === true || conv?.throughQueue === true)\n ) {\n // Open URL for both trunk and queue calls when onlyQueues is false\n openParameterizedUrl(\n conv.counterpartNum,\n conv.counterpartName,\n conv.owner,\n conv.uniqueId\n )\n }\n }\n }\n }\n }\n })\n\n return (\n <>\n <Provider store={store}>\n <WebRTC\n hostName={HOST_NAME}\n sipExten={SIP_EXTEN}\n sipSecret={SIP_SECRET}\n sipHost={SIP_HOST}\n sipPort={SIP_PORT}\n reload={reload}\n reloadedCallback={() => setReloadedWebRTC(true)}\n uaType={uaType}\n >\n <RestAPI hostName={HOST_NAME} username={USERNAME} authToken={AUTH_TOKEN}>\n <Socket\n hostName={HOST_NAME}\n username={USERNAME}\n authToken={AUTH_TOKEN}\n reload={reload}\n reloadedCallback={() => setReloadedSocket(true)}\n uaType={uaType}\n >\n <Events sipHost={SIP_HOST}>\n <Island showAlways={showAlways} uaType={uaType} />\n </Events>\n </Socket>\n </RestAPI>\n </WebRTC>\n </Provider>\n </>\n )\n}\n\nPhoneIsland.displayName = 'PhoneIsland'\n"],"names":["PhoneIsland","_a","dataConfig","_b","showAlways","uaType","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","SIP_HOST","SIP_PORT","_c","useState","reload","setReload","_d","reloadedWebRTC","setReloadedWebRTC","_e","reloadedSocket","setReloadedSocket","useEffect","worker","Worker","wakeUpWorker","type","onmessage","event","data","terminate","useEventListener","store","dispatch","island","toggleIsOpen","eventDispatch","setIslandView","detach","setJSONItem","deviceId","_f","firstRender","setFirstRender","_g","firstAudioOutputInit","setFirstAudioOutputInit","initI18n","__awaiter","getParamUrl","paramUrlResponse","sent","url","isValid","trim","paramUrl","setParamUrl","onlyQueues","only_queues","hasValidUrl","console","error","error_1","toggleAvoidToShow","number","setTimeout","remoteAudioElement","getState","player","remoteAudio","current","setSinkId","then","info","catch","err","changeOperatorStatus","viewType","defaultAudioOutputDevice","getJSONItem","checkDarkTheme","theme","setTheme","selectedTheme","currentUser","updateCurrentDefaultDevice","deviceInformationObject","alertType","alerts","setAlert","toString","checkInternetConnection","internetIsActive","intervalId","setInterval","clearInterval","currentUsernameInformation","username","currentUserObject","mainPresenceValueBeforeUpdate","mainPresence","undefined","isEmpty","newMainPresenceValue","updateMainPresence","callInformation","currentCall","log","openParameterizedUrl","callerNum","callerName","called","uniqueId","paramUrlInfo","urlOpened","openParamUrlType","processedUrl","includes","replace","encodeURIComponent","formattedUrl","startsWith","concat","newWindow","window","open","location","href","setUrlOpened","direction","throughQueue","counterpartNum","counterpartName","owner","throughTrunk","userInformation","allUsersInformation","users","phoneIslandInformation","webrtcInformation","webrtc","playerInformation","conferenceInformation","conference","streamingInformation","streaming","paramurl","reset","toggleSideViewVisible","args","sideViewIsVisible","sizeInformation","updatedSizeInformation","__assign","right","top","isBackCallActive","sizes","width","height","resetIslandStore","toggleConferenceList","alertRemovedType","activeAlertsCount","status","view","previousView","isActive","alertsData","incoming","outgoing","accepted","isInCall","conversationId","active","Object","keys","conversations","length","conv","connected","React","createElement","Fragment","Provider","WebRTC","hostName","sipExten","sipSecret","sipHost","sipPort","reloadedCallback","RestAPI","authToken","Socket","Events","Island","displayName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"App.js","sources":["../src/App.tsx"],"sourcesContent":["import React, { type FC, useState, useEffect } from 'react'\nimport { Events, Socket, WebRTC, Island, RestAPI } from './components'\nimport { Provider } from 'react-redux'\nimport { store } from './store'\nimport { Base64 } from 'js-base64'\nimport wakeUpWorker from './workers/wake_up'\nimport { initI18n } from './lib/i18n'\n\nimport 'react-tooltip/dist/react-tooltip.css'\nimport { useEventListener, eventDispatch, setJSONItem, getJSONItem } from './utils'\nimport { detach } from './lib/webrtc/messages'\nimport { checkDarkTheme, setTheme } from './lib/darkTheme'\nimport { changeOperatorStatus } from './services/user'\nimport { getParamUrl } from './services/user'\nimport { isEmpty } from './utils/genericFunctions/isEmpty'\nimport { checkInternetConnection } from './utils/genericFunctions/checkConnection'\nimport { isBackCallActive } from './utils/genericFunctions/isBackCallVisible'\nimport { isFromTrunk } from './lib/user/extensions'\n\ninterface PhoneIslandProps {\n dataConfig: string\n showAlways?: boolean\n uaType: string\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport const PhoneIsland: FC<PhoneIslandProps> = ({\n dataConfig,\n showAlways = false,\n uaType,\n}: PhoneIslandProps) => {\n const CONFIG: string[] = Base64.atob(dataConfig || '').split(':')\n const HOST_NAME: string = CONFIG[0]\n const USERNAME: string = CONFIG[1]\n const AUTH_TOKEN: string = CONFIG[2]\n const SIP_EXTEN: string = CONFIG[3]\n const SIP_SECRET: string = CONFIG[4]\n const SIP_HOST: string = CONFIG[5]\n const SIP_PORT: string = CONFIG[6]\n\n // Initialize the state to manage the reload events\n const [reload, setReload] = useState<boolean>(false)\n const [reloadedWebRTC, setReloadedWebRTC] = useState<boolean>(false)\n const [reloadedSocket, setReloadedSocket] = useState<boolean>(false)\n\n useEffect(() => {\n const worker = new Worker(wakeUpWorker, { type: 'module' })\n worker.onmessage = (event: MessageEvent<string>) => {\n // Handle wakeup message\n if (event.data === 'wakeup') {\n setReload(true)\n }\n }\n\n return () => {\n worker.terminate()\n }\n }, [])\n\n useEffect(() => {\n if (reloadedSocket && reloadedWebRTC) {\n setReload(false)\n setReloadedWebRTC(false)\n setReloadedSocket(false)\n }\n }, [reloadedSocket, reloadedWebRTC])\n\n useEventListener('phone-island-expand', () => {\n store.dispatch.island.toggleIsOpen(true)\n eventDispatch('phone-island-expanded', {})\n })\n useEventListener('phone-island-compress', () => {\n store.dispatch.island.toggleIsOpen(false)\n eventDispatch('phone-island-compressed', {})\n })\n\n useEventListener('phone-island-call-keypad-close', () => {\n store.dispatch.island.setIslandView('call')\n eventDispatch('phone-island-call-keypad-closed', {})\n })\n useEventListener('phone-island-call-transfer-close', () => {\n store.dispatch.island.setIslandView('call')\n eventDispatch('phone-island-call-transfer-closed', {})\n })\n useEventListener('phone-island-recording-close', () => {\n store.dispatch.island.setIslandView(null)\n eventDispatch('phone-island-recording-closed', {})\n })\n useEventListener('phone-island-audio-player-close', () => {\n store.dispatch.island.setIslandView(null)\n eventDispatch('phone-island-audio-player-closed', {})\n })\n\n useEventListener('phone-island-detach', (data) => {\n detach()\n eventDispatch('phone-island-detached', {})\n })\n\n useEventListener('phone-island-audio-input-change', (data: DeviceInputOutputTypes) => {\n setJSONItem('phone-island-audio-input-device', { deviceId: data.deviceId })\n eventDispatch('phone-island-audio-input-changed', {})\n })\n\n useEventListener('phone-island-video-input-change', (data: DeviceInputOutputTypes) => {\n setJSONItem('phone-island-video-input-device', { deviceId: data.deviceId })\n eventDispatch('phone-island-video-input-changed', {})\n })\n\n const [firstRender, setFirstRender] = useState(true)\n const [firstAudioOutputInit, setFirstAudioOutputInit] = useState(true)\n\n // Initialize application on first render\n useEffect(() => {\n const initParamUrl = async () => {\n try {\n const paramUrlResponse: any = await getParamUrl()\n const url = paramUrlResponse?.url || ''\n const isValid = url && url.trim() !== ''\n\n // Save data inside the store\n store.dispatch.paramUrl.setParamUrl({\n url: url,\n onlyQueues: paramUrlResponse?.only_queues || false,\n hasValidUrl: isValid,\n })\n } catch (error) {\n console.error('Error fetching URL parameter:', error)\n store.dispatch.paramUrl.setParamUrl({\n url: '',\n onlyQueues: false,\n hasValidUrl: false,\n })\n }\n }\n\n if (firstRender) {\n // Initialize i18n\n initI18n()\n // Initialize param URL\n initParamUrl()\n setFirstRender(false)\n }\n }, [firstRender])\n\n useEventListener('phone-island-audio-output-change', (data: DeviceInputOutputTypes) => {\n if (!firstAudioOutputInit) {\n store.dispatch.island.setIslandView(null)\n store.dispatch.island.toggleAvoidToShow(true)\n eventDispatch('phone-island-call-start', { number: '*43' })\n }\n\n setTimeout(() => {\n const remoteAudioElement: any = store.getState().player.remoteAudio\n // set audio output\n remoteAudioElement?.current\n .setSinkId(data.deviceId)\n .then(function () {\n console.info('Default audio output device change with success!')\n // set device to localstorage\n setJSONItem('phone-island-audio-output-device', { deviceId: data.deviceId })\n\n // dispatch event\n eventDispatch('phone-island-audio-output-changed', {})\n eventDispatch('phone-island-call-end', {})\n store.dispatch.island.toggleAvoidToShow(false)\n })\n .catch(function (err) {\n console.error('Default audio output device change error:', err)\n eventDispatch('phone-island-call-end', {})\n store.dispatch.island.toggleAvoidToShow(false)\n })\n }, 500)\n })\n\n // Listen for the operator status change\n useEventListener('phone-island-presence-change', (data: any) => {\n changeOperatorStatus(data)\n eventDispatch('phone-island-presence-changed', {})\n })\n\n useEventListener('phone-island-view-changed', (data) => {\n const viewType = data?.viewType\n store.dispatch.island.setIslandView(viewType)\n })\n\n const remoteAudioElement: any = store.getState().player.remoteAudio\n\n //get output device from localstorage\n useEffect(() => {\n if (firstAudioOutputInit && remoteAudioElement) {\n const defaultAudioOutputDevice: any = getJSONItem(\n `phone-island-audio-output-device`,\n )?.deviceId\n eventDispatch('phone-island-audio-output-change', {\n deviceId: defaultAudioOutputDevice,\n })\n setFirstAudioOutputInit(false)\n }\n }, [firstAudioOutputInit, remoteAudioElement])\n\n useEffect(() => {\n checkDarkTheme()\n }, [])\n\n useEventListener('phone-island-theme-change', (theme: any) => {\n setTheme(theme?.selectedTheme)\n })\n\n useEventListener('phone-island-default-device-change', (data) => {\n store.dispatch.currentUser.updateCurrentDefaultDevice(data?.deviceInformationObject)\n eventDispatch('phone-island-default-device-changed', {})\n })\n\n useEventListener('phone-island-alert', (alertType: any) => {\n store.dispatch.alerts.setAlert(alertType.toString())\n })\n\n // Manually check if internet connection is enabled or not\n useEventListener('phone-island-check-connection', () => {\n checkInternetConnection().then((internetIsActive) => {\n if (internetIsActive) {\n eventDispatch('phone-island-internet-connected', {})\n } else {\n eventDispatch('phone-island-internet-disconnected', {})\n }\n })\n })\n\n // Check internet connection every 5 seconds\n useEffect(() => {\n const intervalId = setInterval(() => {\n checkInternetConnection().then((internetIsActive) => {\n if (internetIsActive) {\n eventDispatch('phone-island-internet-connected', {})\n } else {\n eventDispatch('phone-island-internet-disconnected', {})\n }\n })\n }, 5000)\n\n return () => clearInterval(intervalId)\n }, [])\n\n useEventListener('phone-island-main-presence', (data: any) => {\n const currentUsernameInformation: any = store.getState().currentUser?.username\n const currentUserObject: any = store.getState().currentUser\n let mainPresenceValueBeforeUpdate = currentUserObject?.mainPresence\n if (\n currentUsernameInformation !== undefined &&\n currentUsernameInformation !== '' &&\n !isEmpty(data[currentUsernameInformation]) &&\n data[currentUsernameInformation]?.mainPresence !== undefined\n ) {\n let newMainPresenceValue = data[currentUsernameInformation]?.mainPresence\n store.dispatch.currentUser.updateMainPresence(data[currentUsernameInformation]?.mainPresence)\n let mainPresenceValueAfterUpdate = newMainPresenceValue\n if (mainPresenceValueAfterUpdate === 'online' && mainPresenceValueBeforeUpdate !== 'online') {\n eventDispatch('phone-island-call-ended', {})\n }\n }\n })\n\n useEventListener('phone-island-call-status', () => {\n const callInformation = store.getState().currentCall\n console.log('Call status debug informations: ', callInformation)\n })\n\n const openParameterizedUrl = (callerNum: any, callerName: any, called: any, uniqueId: any) => {\n const paramUrlInfo = store.getState().paramUrl\n\n if (!paramUrlInfo?.hasValidUrl) {\n return\n }\n\n const paramUrl = paramUrlInfo.url || ''\n\n if (!paramUrl) {\n return\n }\n\n const { urlOpened } = store.getState().island\n const openParamUrlType = paramUrlInfo.openParamUrlType\n\n if (urlOpened && openParamUrlType !== 'button') {\n return\n }\n\n let processedUrl = paramUrl\n\n if (processedUrl.includes('$CALLER_NUMBER') && callerNum) {\n processedUrl = processedUrl.replace(/\\$CALLER_NUMBER/g, encodeURIComponent(callerNum))\n }\n if (processedUrl.includes('$CALLER_NAME') && callerName) {\n processedUrl = processedUrl.replace(/\\$CALLER_NAME/g, encodeURIComponent(callerName))\n }\n if (processedUrl.includes('$UNIQUEID') && uniqueId) {\n processedUrl = processedUrl.replace(/\\$UNIQUEID/g, encodeURIComponent(uniqueId))\n }\n if (processedUrl.includes('$CALLED') && called) {\n processedUrl = processedUrl.replace(/\\$CALLED/g, encodeURIComponent(called))\n }\n if (processedUrl.includes('{phone}') && callerNum) {\n processedUrl = processedUrl.replace(/\\{phone\\}/g, encodeURIComponent(callerNum))\n }\n\n const formattedUrl = processedUrl.startsWith('http') ? processedUrl : `https://${processedUrl}`\n\n if (uaType !== 'mobile') {\n const newWindow = window.open('about:blank', '_blank')\n if (newWindow) {\n newWindow.location.href = formattedUrl\n store.dispatch.island.setUrlOpened(true)\n }\n } else {\n eventDispatch('phone-island-url-parameter-opened-external', { formattedUrl })\n }\n }\n\n useEventListener('phone-island-already-opened-external-page', () => {\n store.dispatch.island.setUrlOpened(true)\n })\n\n useEventListener('phone-island-url-parameter-opened', (data) => {\n const paramUrlInfo = store.getState().paramUrl\n\n if (!paramUrlInfo.hasValidUrl) {\n return\n }\n\n const { urlOpened } = store.getState().island\n if (urlOpened) {\n return\n }\n\n const onlyQueues = paramUrlInfo.onlyQueues || false\n const throughTrunk = isFromTrunk(data?.counterpartNum)\n store.dispatch.paramUrl.setThroughTrunk(throughTrunk)\n\n if (data?.direction === 'in') {\n if (onlyQueues === true && data?.throughQueue === true) {\n openParameterizedUrl(\n data?.counterpartNum,\n data?.counterpartName,\n data?.owner,\n data?.uniqueId,\n )\n } else if (onlyQueues === false && (throughTrunk === true || data?.throughQueue === true)) {\n openParameterizedUrl(\n data?.counterpartNum,\n data?.counterpartName,\n data?.owner,\n data?.uniqueId,\n )\n }\n }\n })\n\n useEventListener('phone-island-user-status', () => {\n const userInformation = store.getState().currentUser\n console.log('User status debug informations: ', userInformation)\n })\n\n useEventListener('phone-island-all-users-status', () => {\n const allUsersInformation = store.getState().users\n console.log('Users status debug informations: ', allUsersInformation)\n })\n\n useEventListener('phone-island-status', () => {\n const phoneIslandInformation = store.getState().island\n console.log('Phone island status debug informations: ', phoneIslandInformation)\n })\n\n useEventListener('phone-island-webrtc-status', () => {\n const webrtcInformation = store.getState().webrtc\n console.log('Webrtc status debug informations: ', webrtcInformation)\n })\n\n useEventListener('phone-island-player-status', () => {\n const playerInformation = store.getState().player\n console.log('Player status debug informations: ', playerInformation)\n })\n\n useEventListener('phone-island-conference-status', () => {\n const conferenceInformation = store.getState().conference\n console.log('Webrtc status debug informations: ', conferenceInformation)\n })\n\n useEventListener('phone-island-streaming-status', () => {\n const streamingInformation = store.getState().streaming\n console.log('Streaming status debug informations: ', streamingInformation)\n })\n\n useEventListener('phone-island-paramurl-status', () => {\n const paramurl = store.getState().paramUrl\n console.log('Paramurl status debug informations: ', paramurl)\n })\n\n useEventListener('phone-island-player-force-stop', () => {\n store.dispatch.player.reset()\n console.log('Audio player is interrupted')\n })\n\n useEventListener('phone-island-sideview-open', () => {\n store.dispatch.island.toggleSideViewVisible(true)\n store.dispatch.island.setUrlOpened(false)\n eventDispatch('phone-island-sideview-opened', {})\n })\n\n useEventListener('phone-island-sideview-close', () => {\n store.dispatch.island.toggleSideViewVisible(false)\n eventDispatch('phone-island-sideview-closed', {})\n })\n\n useEventListener('phone-island-size-change', (args: any) => {\n const { sideViewIsVisible } = store.getState().island\n\n // Get current dimensions from args\n const { sizeInformation } = args\n\n // // Calculate extra row dimension ( side view and back call )\n const updatedSizeInformation = {\n ...sizeInformation,\n right: sideViewIsVisible ? '42px' : '0px',\n top: isBackCallActive() ? '40px' : '0px',\n }\n eventDispatch('phone-island-size-changed', { sizes: updatedSizeInformation })\n })\n\n // Listen for the call end event and set the island size to 0\n useEventListener('phone-island-call-ended', () => {\n const { mainPresence } = store.getState().currentUser\n if (mainPresence === 'online') {\n const sizeInformation: any = {\n width: '0px',\n height: '0px',\n }\n eventDispatch('phone-island-size-change', { sizeInformation })\n eventDispatch('phone-island-sideview-close', {})\n store.dispatch.island.resetIslandStore()\n store.dispatch.paramUrl.setThroughTrunk(false)\n }\n })\n\n useEventListener('phone-island-conference-list-open', () => {\n store.dispatch.island.toggleConferenceList(true)\n eventDispatch('phone-island-conference-list-opened', {})\n })\n\n useEventListener('phone-island-alert-removed', (alertRemovedType) => {\n // Get current alerts status\n const { activeAlertsCount } = store.getState().alerts.status\n const { view, previousView } = store.getState().island\n const { isActive } = store.getState().conference\n const alertsData = store.getState().alerts.data\n const currentCall = store.getState().currentCall\n const { incoming, outgoing, accepted } = currentCall\n\n // Check if alert type was provided\n const alertType = alertRemovedType?.type\n\n // Check if user is in a call\n const isInCall =\n currentCall.incoming ||\n currentCall.outgoing ||\n currentCall.accepted ||\n currentCall.conversationId !== ''\n\n // Determine if the island should remain visible\n const shouldKeepVisible =\n incoming ||\n outgoing ||\n accepted ||\n activeAlertsCount > 0 ||\n view === 'player' ||\n view === 'recorder' ||\n view === 'physicalPhoneRecorder' ||\n (view === 'waitingConference' && isActive) ||\n (view === 'transfer' && isActive) ||\n (view === 'settings' && isActive) ||\n (view === 'settings' && (previousView === 'recorder' || previousView === 'player'))\n\n // Reset the island store only if:\n // 1. The island should not remain visible\n // 2. No more active alerts\n // 3. The specific alert is not active anymore\n // 4. User is not currently in a call\n if (\n !shouldKeepVisible &&\n activeAlertsCount === 0 &&\n (!alertType || (alertsData[alertType] && !alertsData[alertType].active)) &&\n !isInCall\n ) {\n const sizeInformation: any = {\n width: '0px',\n height: '0px',\n }\n eventDispatch('phone-island-size-change', { sizeInformation })\n eventDispatch('phone-island-sideview-close', {})\n store.dispatch.island.resetIslandStore()\n }\n })\n\n useEventListener('phone-island-conference-list-close', () => {\n store.dispatch.island.toggleConferenceList(false)\n eventDispatch('phone-island-conference-list-closed', {})\n })\n\n // Listen for conversations updates to handle 'answered' preference for parameterized URL\n useEventListener('phone-island-conversations', (data: any) => {\n // Get the current username (first key in the data object)\n const username = Object.keys(data)[0]\n const currentUsernameInformation: any = store.getState().currentUser?.username\n\n if (username === currentUsernameInformation) {\n const conversations = data[username].conversations\n const paramUrlInfo = store.getState().paramUrl\n const { urlOpened } = store.getState().island\n\n // Only proceed if URL is valid and not already opened\n if (!paramUrlInfo.hasValidUrl || urlOpened) {\n return\n }\n\n // Check if the openParamUrlType is set to 'answered'\n if (paramUrlInfo.openParamUrlType === 'answered') {\n // Check if there are any conversations\n if (conversations && Object.keys(conversations).length > 0) {\n // Get the first conversation (usually there's only one active call)\n const convId = Object.keys(conversations)[0]\n const conv = conversations[convId]\n\n // Check conditions: must be connected and incoming\n if (conv?.connected && conv?.direction === 'in') {\n const onlyQueues = paramUrlInfo.onlyQueues || false\n const calculatedThroughTrunk = isFromTrunk(conv.counterpartNum)\n // Update throughTrunk in paramUrl store\n store.dispatch.paramUrl.setThroughTrunk(calculatedThroughTrunk)\n\n // Check queue conditions based on preferences\n if (onlyQueues === true && conv?.throughQueue === true) {\n // Open URL only for queue calls when onlyQueues is true\n openParameterizedUrl(\n conv.counterpartNum,\n conv.counterpartName,\n conv.owner,\n conv.uniqueId,\n )\n } else if (\n onlyQueues === false &&\n (calculatedThroughTrunk === true || conv?.throughQueue === true)\n ) {\n // Open URL for both trunk and queue calls when onlyQueues is false\n openParameterizedUrl(\n conv.counterpartNum,\n conv.counterpartName,\n conv.owner,\n conv.uniqueId,\n )\n }\n }\n }\n }\n }\n })\n\n return (\n <>\n <Provider store={store}>\n <WebRTC\n hostName={HOST_NAME}\n sipExten={SIP_EXTEN}\n sipSecret={SIP_SECRET}\n sipHost={SIP_HOST}\n sipPort={SIP_PORT}\n reload={reload}\n reloadedCallback={() => setReloadedWebRTC(true)}\n uaType={uaType}\n >\n <RestAPI hostName={HOST_NAME} username={USERNAME} authToken={AUTH_TOKEN}>\n <Socket\n hostName={HOST_NAME}\n username={USERNAME}\n authToken={AUTH_TOKEN}\n reload={reload}\n reloadedCallback={() => setReloadedSocket(true)}\n uaType={uaType}\n >\n <Events sipHost={SIP_HOST}>\n <Island showAlways={showAlways} uaType={uaType} />\n </Events>\n </Socket>\n </RestAPI>\n </WebRTC>\n </Provider>\n </>\n )\n}\n\nPhoneIsland.displayName = 'PhoneIsland'\n"],"names":["PhoneIsland","_a","dataConfig","_b","showAlways","uaType","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","SIP_HOST","SIP_PORT","_c","useState","reload","setReload","_d","reloadedWebRTC","setReloadedWebRTC","_e","reloadedSocket","setReloadedSocket","useEffect","worker","Worker","wakeUpWorker","type","onmessage","event","data","terminate","useEventListener","store","dispatch","island","toggleIsOpen","eventDispatch","setIslandView","detach","setJSONItem","deviceId","_f","firstRender","setFirstRender","_g","firstAudioOutputInit","setFirstAudioOutputInit","initI18n","__awaiter","getParamUrl","paramUrlResponse","sent","url","isValid","trim","paramUrl","setParamUrl","onlyQueues","only_queues","hasValidUrl","console","error","error_1","toggleAvoidToShow","number","setTimeout","remoteAudioElement","getState","player","remoteAudio","current","setSinkId","then","info","catch","err","changeOperatorStatus","viewType","defaultAudioOutputDevice","getJSONItem","checkDarkTheme","theme","setTheme","selectedTheme","currentUser","updateCurrentDefaultDevice","deviceInformationObject","alertType","alerts","setAlert","toString","checkInternetConnection","internetIsActive","intervalId","setInterval","clearInterval","currentUsernameInformation","username","currentUserObject","mainPresenceValueBeforeUpdate","mainPresence","undefined","isEmpty","newMainPresenceValue","updateMainPresence","callInformation","currentCall","log","openParameterizedUrl","callerNum","callerName","called","uniqueId","paramUrlInfo","urlOpened","openParamUrlType","processedUrl","includes","replace","encodeURIComponent","formattedUrl","startsWith","concat","newWindow","window","open","location","href","setUrlOpened","throughTrunk","isFromTrunk","counterpartNum","setThroughTrunk","direction","throughQueue","counterpartName","owner","userInformation","allUsersInformation","users","phoneIslandInformation","webrtcInformation","webrtc","playerInformation","conferenceInformation","conference","streamingInformation","streaming","paramurl","reset","toggleSideViewVisible","args","sideViewIsVisible","sizeInformation","updatedSizeInformation","__assign","right","top","isBackCallActive","sizes","width","height","resetIslandStore","toggleConferenceList","alertRemovedType","activeAlertsCount","status","view","previousView","isActive","alertsData","incoming","outgoing","accepted","isInCall","conversationId","active","Object","keys","conversations","length","conv","connected","calculatedThroughTrunk","React","createElement","Fragment","Provider","WebRTC","hostName","sipExten","sipSecret","sipHost","sipPort","reloadedCallback","RestAPI","authToken","Socket","Events","Island","displayName"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../node_modules/tslib/tslib.es6.js"),i=require("react");require("../../../node_modules/react-redux/es/index.js");var n=require("../../../store/index.js"),r=require("../../../utils/deviceUtils.js"),u=require("../../../lib/webrtc/janus.js"),o=require("../../../lib/devices/devices.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../node_modules/tslib/tslib.es6.js"),i=require("react");require("../../../node_modules/react-redux/es/index.js");var n=require("../../../store/index.js"),r=require("../../../utils/deviceUtils.js"),u=require("../../../lib/webrtc/janus.js"),o=require("../../../lib/phone/trunk.js"),t=require("../../../lib/devices/devices.js"),l=require("../../../utils/genericFunctions/eventDispatch.js"),s=require("../../../node_modules/react-redux/es/hooks/useDispatch.js"),a=require("../../../node_modules/react-redux/es/hooks/useSelector.js");exports.useSideViewLogic=function(c){var d,v,h,p,f,g,b,m,_=s.useDispatch(),S=a.useSelector((function(e){return e.currentUser})),j=a.useSelector((function(e){return e.users})),w=a.useSelector((function(e){return e.paramUrl})),k=n.store.select.mediaDevices.videoInputDevices(n.store.getState()),q=i.useRef(u.default),C=a.useSelector((function(e){return e.currentUser.conversations})),V=i.useState([]),D=V[0],U=V[1],y=i.useState(!0),T=y[0],x=y[1],O=i.useCallback((function(e){if(_.island.toggleSideViewVisible(!1),"openUrl"===e){var i=Object.values(C).find((function(e){return Object.keys(e).length>0})),n=i?Object.values(i)[0]:null;if((null==n?void 0:n.connected)&&"in"===(null==n?void 0:n.direction)){var r={counterpartNum:n.counterpartNum,counterpartName:n.counterpartName,owner:n.owner,uniqueId:n.uniqueId,throughQueue:n.throughQueue,throughTrunk:n.throughTrunk,direction:n.direction,connected:n.connected};l.eventDispatch("phone-island-url-parameter-opened",r)}}else null!==e&&_.island.setIslandView(e)}),[_.island,C]),Q=i.useCallback((function(){return e.__awaiter(void 0,void 0,void 0,(function(){var i;return e.__generator(this,(function(e){switch(e.label){case 0:return k.length>0?[4,t.checkWebCamPermission()]:[3,2];case 1:return i=e.sent(),x(i),[2,i];case 2:return x(!1),[2,!1]}}))}))}),[k.length]),I=i.useCallback((function(){return e.__awaiter(void 0,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return[4,Q()];case 1:return e.sent()&&(O("video"),n.store.dispatch.currentCall.updateCurrentCall({isLocalVideoEnabled:!0,isStartingVideoCall:!0})),[2]}}))}))}),[Q,O]),N=i.useCallback((function(){O("video"),n.store.dispatch.screenShare.update({isStartingScreenShare:!0})}),[O]),P=i.useMemo((function(){var e;return(null===(e=null==S?void 0:S.profile)||void 0===e?void 0:e.macro_permissions)||{}}),[null===(d=null==S?void 0:S.profile)||void 0===d?void 0:d.macro_permissions]),E=i.useMemo((function(){var e,i,n,r,u,o;return{canRecord:(null===(n=null===(i=null===(e=null==P?void 0:P.settings)||void 0===e?void 0:e.permissions)||void 0===i?void 0:i.recording)||void 0===n?void 0:n.value)||!1,canShareScreen:"safari"!==q.current.webRTCAdapter.browserDetails.browser&&((null===(o=null===(u=null===(r=null==P?void 0:P.nethvoice_cti)||void 0===r?void 0:r.permissions)||void 0===u?void 0:u.screen_sharing)||void 0===o?void 0:o.value)||!1),canSwitchDevice:(null==D?void 0:D.length)>0}}),[null===(p=null===(h=null===(v=null==P?void 0:P.settings)||void 0===v?void 0:v.permissions)||void 0===h?void 0:h.recording)||void 0===p?void 0:p.value,null===(b=null===(g=null===(f=null==P?void 0:P.nethvoice_cti)||void 0===f?void 0:f.permissions)||void 0===g?void 0:g.screen_sharing)||void 0===b?void 0:b.value,null==D?void 0:D.length,null===(m=null==S?void 0:S.default_device)||void 0===m?void 0:m.type,c]),M=i.useMemo((function(){var e=Object.values(C).find((function(e){return Object.keys(e).length>0})),i=e?Object.values(e)[0]:null;if("never"===w.openParamUrlType)return!1;if(!(null==i?void 0:i.connected)||"in"!==(null==i?void 0:i.direction))return!1;if("button"===w.openParamUrlType){if(w.onlyQueues&&(null==i?void 0:i.throughQueue))return!0;if(!w.onlyQueues&&(o.isFromTrunk(i.counterpartNum)||(null==i?void 0:i.throughQueue)))return!0}return!1}),[C,w.onlyQueues,w.openParamUrlType]);return i.useEffect((function(){if(S&&j){var e=r.getAvailableDevices(S,j);U(e)}}),[S,j]),e.__assign(e.__assign({userInformation:S,availableDevices:D,videoInputDevices:k,isVideoCallButtonVisible:T,isUrlButtonEnabled:M,hasValidUrl:w.hasValidUrl},E),{goToVideoCall:I,goToScreenSharing:N,closeSideViewAndLaunchEvent:O})};
|
|
2
2
|
//# sourceMappingURL=useSideViewLogic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSideViewLogic.js","sources":["../../../../src/components/SideView/hooks/useSideViewLogic.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState, store } from '../../../store'\nimport { getAvailableDevices } from '../../../utils/deviceUtils'\nimport JanusLib from '../../../lib/webrtc/janus.js'\nimport { checkWebCamPermission } from '../../../lib/devices/devices'\nimport { eventDispatch } from '../../../utils'\n\nexport const useSideViewLogic = (uaType?: string) => {\n const dispatch = useDispatch<Dispatch>()\n const userInformation = useSelector((state: RootState) => state.currentUser)\n const allUsersInformation = useSelector((state: RootState) => state.users)\n const paramUrlData = useSelector((state: RootState) => state.paramUrl)\n const videoInputDevices = store.select.mediaDevices.videoInputDevices(store.getState())\n const janus = useRef<any>(JanusLib)\n const conversations = useSelector((state: RootState) => state.currentUser.conversations)\n\n const [availableDevices, setAvailableDevices] = useState([])\n const [isVideoCallButtonVisible, setIsVideoCallButtonVisible] = useState(true)\n\n const closeSideViewAndLaunchEvent = useCallback(\n (viewType: any) => {\n dispatch.island.toggleSideViewVisible(false)\n if (viewType === 'openUrl') {\n const activeConversation = Object.values(conversations).find(\n (conv) => Object.keys(conv).length > 0,\n )\n const conversationData = activeConversation ? Object.values(activeConversation)[0] : null\n\n if (conversationData?.connected && conversationData?.direction === 'in') {\n const eventData = {\n counterpartNum: conversationData.counterpartNum,\n counterpartName: conversationData.counterpartName,\n owner: conversationData.owner,\n uniqueId: conversationData.uniqueId,\n throughQueue: conversationData.throughQueue,\n throughTrunk: conversationData.throughTrunk,\n direction: conversationData.direction,\n connected: conversationData.connected,\n }\n eventDispatch('phone-island-url-parameter-opened', eventData)\n }\n } else if (viewType !== null) {\n dispatch.island.setIslandView(viewType)\n }\n },\n [dispatch.island, conversations],\n )\n\n const checkCameraPermission = useCallback(async () => {\n if (videoInputDevices.length > 0) {\n const isWebCamAccepted = await checkWebCamPermission()\n setIsVideoCallButtonVisible(isWebCamAccepted)\n return isWebCamAccepted\n } else {\n setIsVideoCallButtonVisible(false)\n return false\n }\n }, [videoInputDevices.length])\n\n const goToVideoCall = useCallback(async () => {\n const cameraPermission = await checkCameraPermission()\n if (cameraPermission) {\n closeSideViewAndLaunchEvent('video')\n store.dispatch.currentCall.updateCurrentCall({\n isLocalVideoEnabled: true,\n isStartingVideoCall: true,\n })\n }\n }, [checkCameraPermission, closeSideViewAndLaunchEvent])\n\n const goToScreenSharing = useCallback(() => {\n closeSideViewAndLaunchEvent('video')\n store.dispatch.screenShare.update({\n isStartingScreenShare: true,\n })\n }, [closeSideViewAndLaunchEvent])\n\n const permissions = useMemo(\n () => userInformation?.profile?.macro_permissions || {},\n [userInformation?.profile?.macro_permissions],\n )\n\n const userCapabilities = useMemo(\n () => ({\n canRecord: permissions?.settings?.permissions?.recording?.value || false,\n canShareScreen:\n janus.current.webRTCAdapter.browserDetails.browser !== 'safari' &&\n (permissions?.nethvoice_cti?.permissions?.screen_sharing?.value || false),\n canSwitchDevice: availableDevices?.length > 0,\n }),\n [\n permissions?.settings?.permissions?.recording?.value,\n permissions?.nethvoice_cti?.permissions?.screen_sharing?.value,\n availableDevices?.length,\n userInformation?.default_device?.type,\n uaType,\n ],\n )\n\n const isUrlButtonEnabled = useMemo(() => {\n const activeConversation = Object.values(conversations).find(\n (conv) => Object.keys(conv).length > 0,\n )\n const conversationData = activeConversation ? Object.values(activeConversation)[0] : null\n\n // If param url type is 'never', return false\n if (paramUrlData.openParamUrlType === 'never') {\n return false\n }\n\n if (!conversationData?.connected || conversationData?.direction !== 'in') {\n return false\n }\n\n // open param url type is set to 'button'\n if (paramUrlData.openParamUrlType === 'button') {\n if (paramUrlData.onlyQueues && conversationData?.throughQueue) {\n return true\n } else if (\n !paramUrlData.onlyQueues &&\n (conversationData?.throughTrunk || conversationData?.throughQueue)\n ) {\n return true\n }\n }\n\n return false\n }, [conversations, paramUrlData.onlyQueues, paramUrlData.openParamUrlType])\n\n useEffect(() => {\n if (userInformation && allUsersInformation) {\n const devices = getAvailableDevices(userInformation, allUsersInformation)\n setAvailableDevices(devices)\n }\n }, [userInformation, allUsersInformation])\n\n return {\n userInformation,\n availableDevices,\n videoInputDevices,\n isVideoCallButtonVisible,\n isUrlButtonEnabled,\n hasValidUrl: paramUrlData.hasValidUrl,\n ...userCapabilities,\n goToVideoCall,\n goToScreenSharing,\n closeSideViewAndLaunchEvent,\n }\n}\n"],"names":["uaType","dispatch","useDispatch","userInformation","useSelector","state","currentUser","allUsersInformation","users","paramUrlData","paramUrl","videoInputDevices","store","select","mediaDevices","getState","janus","useRef","JanusLib","conversations","_j","useState","availableDevices","setAvailableDevices","_k","isVideoCallButtonVisible","setIsVideoCallButtonVisible","closeSideViewAndLaunchEvent","useCallback","viewType","island","toggleSideViewVisible","activeConversation","Object","values","find","conv","keys","length","conversationData","connected","direction","eventData","counterpartNum","counterpartName","owner","uniqueId","throughQueue","throughTrunk","eventDispatch","setIslandView","checkCameraPermission","__awaiter","checkWebCamPermission","isWebCamAccepted","_a","sent","goToVideoCall","currentCall","updateCurrentCall","isLocalVideoEnabled","isStartingVideoCall","goToScreenSharing","screenShare","update","isStartingScreenShare","permissions","useMemo","profile","macro_permissions","userCapabilities","canRecord","_c","settings","_b","recording","value","canShareScreen","current","webRTCAdapter","browserDetails","browser","_f","_e","nethvoice_cti","_d","screen_sharing","canSwitchDevice","_g","_h","default_device","type","isUrlButtonEnabled","openParamUrlType","onlyQueues","useEffect","devices","getAvailableDevices","__assign","hasValidUrl"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useSideViewLogic.js","sources":["../../../../src/components/SideView/hooks/useSideViewLogic.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState, store } from '../../../store'\nimport { getAvailableDevices } from '../../../utils/deviceUtils'\nimport JanusLib from '../../../lib/webrtc/janus.js'\nimport { isFromTrunk } from '../../../lib/user/extensions'\nimport { checkWebCamPermission } from '../../../lib/devices/devices'\nimport { eventDispatch } from '../../../utils'\n\nexport const useSideViewLogic = (uaType?: string) => {\n const dispatch = useDispatch<Dispatch>()\n const userInformation = useSelector((state: RootState) => state.currentUser)\n const allUsersInformation = useSelector((state: RootState) => state.users)\n const paramUrlData = useSelector((state: RootState) => state.paramUrl)\n const videoInputDevices = store.select.mediaDevices.videoInputDevices(store.getState())\n const janus = useRef<any>(JanusLib)\n const conversations = useSelector((state: RootState) => state.currentUser.conversations)\n\n const [availableDevices, setAvailableDevices] = useState([])\n const [isVideoCallButtonVisible, setIsVideoCallButtonVisible] = useState(true)\n\n const closeSideViewAndLaunchEvent = useCallback(\n (viewType: any) => {\n dispatch.island.toggleSideViewVisible(false)\n if (viewType === 'openUrl') {\n const activeConversation = Object.values(conversations).find(\n (conv) => Object.keys(conv).length > 0,\n )\n const conversationData = activeConversation ? Object.values(activeConversation)[0] : null\n\n if (conversationData?.connected && conversationData?.direction === 'in') {\n const eventData = {\n counterpartNum: conversationData.counterpartNum,\n counterpartName: conversationData.counterpartName,\n owner: conversationData.owner,\n uniqueId: conversationData.uniqueId,\n throughQueue: conversationData.throughQueue,\n throughTrunk: conversationData.throughTrunk,\n direction: conversationData.direction,\n connected: conversationData.connected,\n }\n eventDispatch('phone-island-url-parameter-opened', eventData)\n }\n } else if (viewType !== null) {\n dispatch.island.setIslandView(viewType)\n }\n },\n [dispatch.island, conversations],\n )\n\n const checkCameraPermission = useCallback(async () => {\n if (videoInputDevices.length > 0) {\n const isWebCamAccepted = await checkWebCamPermission()\n setIsVideoCallButtonVisible(isWebCamAccepted)\n return isWebCamAccepted\n } else {\n setIsVideoCallButtonVisible(false)\n return false\n }\n }, [videoInputDevices.length])\n\n const goToVideoCall = useCallback(async () => {\n const cameraPermission = await checkCameraPermission()\n if (cameraPermission) {\n closeSideViewAndLaunchEvent('video')\n store.dispatch.currentCall.updateCurrentCall({\n isLocalVideoEnabled: true,\n isStartingVideoCall: true,\n })\n }\n }, [checkCameraPermission, closeSideViewAndLaunchEvent])\n\n const goToScreenSharing = useCallback(() => {\n closeSideViewAndLaunchEvent('video')\n store.dispatch.screenShare.update({\n isStartingScreenShare: true,\n })\n }, [closeSideViewAndLaunchEvent])\n\n const permissions = useMemo(\n () => userInformation?.profile?.macro_permissions || {},\n [userInformation?.profile?.macro_permissions],\n )\n\n const userCapabilities = useMemo(\n () => ({\n canRecord: permissions?.settings?.permissions?.recording?.value || false,\n canShareScreen:\n janus.current.webRTCAdapter.browserDetails.browser !== 'safari' &&\n (permissions?.nethvoice_cti?.permissions?.screen_sharing?.value || false),\n canSwitchDevice: availableDevices?.length > 0,\n }),\n [\n permissions?.settings?.permissions?.recording?.value,\n permissions?.nethvoice_cti?.permissions?.screen_sharing?.value,\n availableDevices?.length,\n userInformation?.default_device?.type,\n uaType,\n ],\n )\n\n const isUrlButtonEnabled = useMemo(() => {\n const activeConversation = Object.values(conversations).find(\n (conv) => Object.keys(conv).length > 0,\n )\n const conversationData = activeConversation ? Object.values(activeConversation)[0] : null\n\n // If param url type is 'never', return false\n if (paramUrlData.openParamUrlType === 'never') {\n return false\n }\n\n if (!conversationData?.connected || conversationData?.direction !== 'in') {\n return false\n }\n\n // open param url type is set to 'button'\n if (paramUrlData.openParamUrlType === 'button') {\n if (paramUrlData.onlyQueues && conversationData?.throughQueue) {\n return true\n } else if (\n !paramUrlData.onlyQueues &&\n (isFromTrunk(conversationData.counterpartNum) || conversationData?.throughQueue)\n ) {\n return true\n }\n }\n\n return false\n }, [conversations, paramUrlData.onlyQueues, paramUrlData.openParamUrlType])\n\n useEffect(() => {\n if (userInformation && allUsersInformation) {\n const devices = getAvailableDevices(userInformation, allUsersInformation)\n setAvailableDevices(devices)\n }\n }, [userInformation, allUsersInformation])\n\n return {\n userInformation,\n availableDevices,\n videoInputDevices,\n isVideoCallButtonVisible,\n isUrlButtonEnabled,\n hasValidUrl: paramUrlData.hasValidUrl,\n ...userCapabilities,\n goToVideoCall,\n goToScreenSharing,\n closeSideViewAndLaunchEvent,\n }\n}\n"],"names":["uaType","dispatch","useDispatch","userInformation","useSelector","state","currentUser","allUsersInformation","users","paramUrlData","paramUrl","videoInputDevices","store","select","mediaDevices","getState","janus","useRef","JanusLib","conversations","_j","useState","availableDevices","setAvailableDevices","_k","isVideoCallButtonVisible","setIsVideoCallButtonVisible","closeSideViewAndLaunchEvent","useCallback","viewType","island","toggleSideViewVisible","activeConversation","Object","values","find","conv","keys","length","conversationData","connected","direction","eventData","counterpartNum","counterpartName","owner","uniqueId","throughQueue","throughTrunk","eventDispatch","setIslandView","checkCameraPermission","__awaiter","checkWebCamPermission","isWebCamAccepted","_a","sent","goToVideoCall","currentCall","updateCurrentCall","isLocalVideoEnabled","isStartingVideoCall","goToScreenSharing","screenShare","update","isStartingScreenShare","permissions","useMemo","profile","macro_permissions","userCapabilities","canRecord","_c","settings","_b","recording","value","canShareScreen","current","webRTCAdapter","browserDetails","browser","_f","_e","nethvoice_cti","_d","screen_sharing","canSwitchDevice","_g","_h","default_device","type","isUrlButtonEnabled","openParamUrlType","onlyQueues","isFromTrunk","useEffect","devices","getAvailableDevices","__assign","hasValidUrl"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),n=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),r=require("../lib/phone/conversation.js"),o=require("../services/user.js"),i=require("../utils/genericFunctions/eventDispatch.js"),c=require("../utils/genericFunctions/withTimeout.js"),s=require("../store/index.js");require("../lib/webrtc/janus.js"),require("../node_modules/webrtc-adapter/src/js/adapter_core.js");var a=require("../lib/devices/devices.js"),u=require("../lib/user/default_device.js"),l=require("../utils/genericFunctions/isEmpty.js"),d=require("../utils/streaming/getStreamingSourceId.js"),p=require("../events/SocketEvents.js"),m=require("../utils/genericFunctions/timestamp.js"),g=require("../lib/user/extensions.js"),v=require("../utils/streaming/isFromStreaming.js"),f=require("../node_modules/react-redux/es/hooks/useSelector.js");require("../node_modules/react-redux/es/components/Context.js"),require("../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("../node_modules/react-redux/node_modules/react-is/index.js");var h=require("../node_modules/react-redux/es/hooks/useDispatch.js");function S(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var y=S(n);exports.Socket=function(S){var b=S.hostName,k=S.username,C=S.authToken,_=S.reload,w=S.reloadedCallback,N=S.children,D=S.uaType,j=h.useDispatch(),U=n.useRef(),x=n.useRef(),T=n.useRef(!1);f.useSelector((function(e){return e.currentUser}));return n.useEffect((function(){var n=function(e){if(e.counterpartNum&&v.isFromStreaming(e.counterpartNum)){j.island.setIsFromStreaming(!0),j.currentCall.updateCurrentCall({streamingSourceNumber:e.counterpartNum});var n=d.getStreamingSourceId(e.counterpartNum);n&&o.subscribe({id:n}).catch((function(e){return console.error("Error subscribing to streaming source:",e)}))}},f=function(e,t){var c=s.store.getState().currentCall,a=c.transferring,l=c.transferSwitching,d=c.transferCalls,p=s.store.getState().island.view;if(Object.keys(t).length>0){if(e.status){var v=s.store.getState().users.extensions,f=s.store.getState().currentUser.default_device,h=s.store.getState().currentUser,S=h.endpoints,y=h.username,b=s.store.getState().currentCall;b.incoming,b.outgoing;var k=function(){if(!v||!y)return!1;var e=Object.values(v).filter((function(e){return(null==e?void 0:e.username)===y}));return null==e?void 0:e.some((function(e){var n=null==S?void 0:S.extension.find((function(n){return n.id===(null==e?void 0:e.exten)}));return"nethlink"===(null==n?void 0:n.type)&&"offline"!==(null==e?void 0:e.status)}))};switch(e.status){case"ringing":if(n(t),"mobile"===D&&k()||"desktop"===D&&("webrtc"===(null==f?void 0:f.type)||void 0===(null==f?void 0:f.type)&&!k()||!k()&&"physical"===(null==f?void 0:f.type))){T.current||(T.current=!0,o.getCurrentUserInfo().then((function(e){e&&(j.currentUser.updateCurrentUser(e),e.settings&&e.settings.open_param_url?j.paramUrl.setOpenParamUrlType(e.settings.open_param_url):j.paramUrl.setOpenParamUrlType("never"))})).catch((function(e){console.error("Error getting current user info:",e)})).finally((function(){setTimeout((function(){T.current=!1}),100)}))),j.currentCall.checkIncomingUpdatePlay({conversationId:t.id,displayName:r.getDisplayName(t),number:"".concat(t.counterpartNum),incomingSocket:!0,incoming:!0,username:"".concat(v&&v[t.counterpartNum]&&v[t.counterpartNum].username)||"",ownerExtension:t.owner}),t.id,r.getDisplayName(t),"".concat(t.counterpartNum),t.owner,"".concat(v&&v[t.counterpartNum]&&v[t.counterpartNum].username),null==t||t.chDest,null==t||t.chSource,t.direction,t.inConference,t.linkedId,t.uniqueId,t.throughQueue,t.throughTrunk,t.recording,s.store.dispatch.island.setIslandView("call"),i.eventDispatch("phone-island-call-ringing",{});var C=s.store.getState().paramUrl.openParamUrlType,_=s.store.getState().island.urlOpened;"ringing"!==C||_||(s.store.dispatch.island.setUrlOpened(!1),i.eventDispatch("phone-island-url-parameter-opened",{counterpartNum:t.counterpartNum,counterpartName:r.getDisplayName(t),owner:t.owner,uniqueId:t.uniqueId,throughQueue:t.throughQueue,throughTrunk:t.throughTrunk,direction:t.direction,connected:t.connected}))}break;case"busy":if(n(t),"mobile"===D&&k()||"desktop"===D&&("webrtc"===(null==f?void 0:f.type)||void 0===(null==f?void 0:f.type)&&!k()||!k()&&"physical"===(null==f?void 0:f.type))){if(t&&t.connected)j.currentCall.updateCurrentCall({conversationId:t.id,displayName:r.getDisplayName(t),number:"".concat(t.counterpartNum),ownerExtension:t.owner,username:"".concat(v&&v[t.counterpartNum]&&v[t.counterpartNum].username)||"",chDest:(null==t?void 0:t.chDest)||{},chSource:(null==t?void 0:t.chSource)||{}}),j.currentCall.checkAcceptedUpdate({acceptedSocket:!0}),j.currentCall.addTransferCalls({type:"transferred",displayName:r.getDisplayName(t),number:"".concat(t.counterpartNum),startTime:"".concat(m.getTimestampInSeconds())}),s.store.getState().island.isFromStreaming&&"out"===t.direction&&setTimeout((function(){j.island.setIslandView("streamingAnswer")}),200),u.isPhysical()&&function(e){j.currentCall.updateCurrentCall({conversationId:e.id,accepted:!0,incoming:"in"!==e.direction&&void 0}),i.eventDispatch("phone-island-call-answered",{}),s.store.dispatch.player.stopAudioPlayer(),s.store.dispatch.player.setAudioPlayerLoop(!1)}(t),"call"===p&&a&&j.currentCall.updateCurrentCall({transferring:!1});if(d.length>1)j.currentCall.deleteTransferCalls();else if(t&&!t.connected){if(a&&!l){var w=d.find((function(e){return e.number===t.counterpartNum}));!t.connected&&w&&(j.currentCall.updateCurrentCall({transferring:!1}),i.eventDispatch("phone-island-call-transfer-failed",{}),j.currentCall.updateTransferSwitching(!1))}"REC"===(null==t?void 0:t.counterpartName)&&j.physicalRecorder.setRecordingTempVariable(!0)}t&&!t.connected&&"out"===t.direction&&j.currentCall.checkOutgoingUpdate({outgoingSocket:!0,outgoing:"REC"!==(null==t?void 0:t.counterpartName),displayName:r.getDisplayName(t),number:"".concat(null==t?void 0:t.counterpartNum),username:"".concat(v&&v[null==t?void 0:t.counterpartNum]&&v[null==t?void 0:t.counterpartNum].username)||""})}break;case"onhold":var N=t.counterpartName,U=t.counterpartNum,x=t.startTime;a&&U&&N&&"<unknown>"!==N&&(j.currentCall.addTransferCalls({type:"destination",displayName:r.getDisplayName(t),number:U,startTime:"".concat(m.getTimestampInSeconds())}),j.currentCall.updateCurrentCall({displayName:r.getDisplayName(t),number:U,startTime:"".concat(x/1e3),conversationId:t.id}),j.island.setIslandView("call"));break;case"busy_ringing":i.eventDispatch("phone-island-call-ringing",{})}}}else"online"==e.status&&g.userTotallyFree()&&(j.player.stopAudioPlayer(),j.currentCall.reset(),j.physicalRecorder.setRecordingTempVariable(!1),j.island.setIsFromStreaming(!1))};return x.current=t.io("https://"+b,{upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3}),j.websocket.update({socket:x.current}),x.current.on("connect",(function(){console.debug("Socket connected sid: ".concat(x.current.id)),i.eventDispatch("phone-island-socket-connected",{})})),x.current.on("disconnect",(function(e){console.debug("Socket disconnect - reason: ".concat(e)),e.includes("server disconnect")?i.eventDispatch("phone-island-server-disconnected",{}):i.eventDispatch("phone-island-socket-disconnected",{})})),x.current.io.on("error",(function(e){console.debug("Socket error: ",e)})),x.current.on("connect_error",(function(e){console.debug("Socket connect_error: ",e)})),x.current.io.on("reconnect",(function(e){i.eventDispatch("phone-island-socket-reconnected",{}),console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(x.current.id,")"))})),x.current.io.on("reconnect_attempt",(function(e){console.debug("Socket reconnect_attempt ".concat(e))})),x.current.io.on("reconnect_error",(function(e){console.debug("Socket reconnect_error: ",e)})),x.current.io.on("reconnect_failed",(function(){console.debug("Socket reconnect_failed")})),U.current=setInterval((function(){x.current.volatile.emit("ping",c.withTimeout((function(){j.alerts.removeAlert("socket_down"),i.eventDispatch("phone-island-alert-removed",{type:"socket_down"}),i.eventDispatch("phone-island-socket-disconnected-popup-close",{})}),(function(){j.alerts.setAlert("socket_down"),i.eventDispatch("phone-island-socket-disconnected-popup-open",{}),console.error("Socket is unreachable!")}),7e3))}),7e3),x.current.on("connect",(function(){console.debug("Socket on: "+b+" is connected!"),x.current.emit("login",{accessKeyId:"".concat(k),token:C,uaType:D})})),x.current.on("authe_ok",(function(){console.debug("Socket authentication success!"),i.eventDispatch("phone-island-socket-authorized",{})})),x.current.on("userMainPresenceUpdate",(function(n){s.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),p.dispatchMainPresence(n)})),x.current.on("extenHangup",(function(e){var n=s.store.getState().currentUser,t=n.endpoints,r=n.username,o=s.store.getState().conference,c=o.isActive,a=o.conferenceStartedFrom,u=s.store.getState().island.view,l=((null==t?void 0:t.extension)||[]).find((function(n){return n.id===e.callerNum})),d=null==l?void 0:l.type;"normal_clearing"===e.cause&&("physical"===d||"mobile"===d)||"user_busy"===(null==e?void 0:e.cause)||"not_defined"===(null==e?void 0:e.cause)||"call_rejected"===(null==e?void 0:e.cause)?(setTimeout((function(){s.store.dispatch.island.toggleAvoidToShow(!1)}),500),c&&a!==r&&s.store.dispatch.conference.resetConference()):"normal_circuit_congestion"===(null==e?void 0:e.cause)&&c&&a===r?i.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"}):"normal_clearing"!==e.cause&&"user_busy"!==(null==e?void 0:e.cause)&&"not_defined"!==(null==e?void 0:e.cause)&&"call_rejected"!==(null==e?void 0:e.cause)||"webrtc"!==d&&"nethlink"!==d||!c||a===r||s.store.dispatch.conference.resetConference(),"interworking"===(null==e?void 0:e.cause)&&c&&a===r&&"waitingConference"!==u&&i.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})})),x.current.on("extenConnected",(function(e){var n=s.store.getState().currentUser,t=n.default_device,r=n.endpoints,o=((null==r?void 0:r.extension)||[]).find((function(n){return n.id===e.extenConnected})),c=null==o?void 0:o.type;(("webrtc"===(null==t?void 0:t.type)||"nethlink"===(null==t?void 0:t.type))&&c&&("mobile"===c||"physical"===c)||"physical"===(null==t?void 0:t.type)&&c&&"physical"!==c)&&(s.store.dispatch.island.toggleAvoidToShow(!0),i.eventDispatch("phone-island-call-answered",{extensionType:c}))})),x.current.on("extenUpdate",(function(e){j.users.updateExtension(e);var n=s.store.getState().users.extensions,t={};for(var r in n){var o=n[r].username,i=n[r].exten;t[o]||(t[o]=[]),t[o].push(i)}var c=t[e.username],a=e.conversations[Object.keys(e.conversations)[0]]||{};if(p.dispatchExtensions(e),l.isEmpty(a)){var u=null==c?void 0:c.some((function(e){var t,r=null===(t=n[e])||void 0===t?void 0:t.conversations;return!l.isEmpty(r)}));u||p.dispatchConversations(e)}else p.dispatchConversations(e);e.username===k&&(f(e,a),j.currentUser.updateConversations(e))})),x.current.on("queueUpdate",(function(e){p.dispatchQueueUpdate(e)})),x.current.on("queueMemberUpdate",(function(e){p.dispatchQueueMemberUpdate(e)})),x.current.on("takeOver",(function(){p.dispatchAlreadyLogin()})),x.current.on("serverReloaded",(function(){p.dispatchServerReload()})),x.current.on("parkingUpdate",(function(){p.dispatchParkingUpdate()})),x.current.on("actionNethLink",(function(e,n){p.dispatchUrlCall(e,n)})),x.current.on("message",(function(e){switch(e.message){case"screenSharingStart":j.island.toggleSideViewVisible(!1),j.island.setIslandView("video"),j.screenShare.update({isJoiningScreenShare:!0,room:e.roomId});break;case"screenSharingStop":j.island.toggleSideViewVisible(!1),j.island.setIslandView("video"),j.screenShare.update({isLeavingScreenShare:!0});break;default:console.warn("Socket: unknown message type ",e.message)}})),x.current.on("updateDefaultDevice",(function(n){p.dispatchDefaultDeviceUpdate(n);var t=s.store.getState().users.extensions,r=s.store.getState().currentUser.endpoints;if(t&&r){var o=Object.values(t).filter((function(e){return(null==e?void 0:e.exten)===n}));if(0!==o.length){var i=o[0],c=r.extension.find((function(e){return e.id===i.exten}));c&&(i=e.__assign(e.__assign({},i),{type:c.type})),s.store.dispatch.currentUser.updateCurrentDefaultDevice(i),a.checkMediaPermissions()}}})),x.current.on("confBridgeUpdate",(function(n){if(n&&(null==n?void 0:n.users)){var t=null==n?void 0:n.id,r=null==n?void 0:n.users,o=s.store.getState().conference.usersList,i=e.__assign({},r);o&&Object.keys(i).forEach((function(n){o[n]&&(i[n]=e.__assign(e.__assign({},i[n]),{muted:o[n].muted}))})),s.store.dispatch.conference.updateConferenceUsersList(i),s.store.dispatch.conference.updateConferenceId(t)}})),x.current.on("confBridgeEnd",(function(e){e&&(null==e?void 0:e.id)&&(s.store.dispatch.conference.resetConference(),i.eventDispatch("phone-island-conference-finished",{}))})),x.current.on("callWebrtc",(function(e){i.eventDispatch("phone-island-call-start",{number:e})})),x.current.on("newVoiceMessageCounter",(function(e){i.eventDispatch("phone-island-voicemail-received",{voicemailInfo:e})})),x.current.on("streamingSourceUpdate",(function(e){i.eventDispatch("phone-island-streaming-information-received",{res:e});var n=e.streaming||e.res&&e.res.streaming;if(n){var t=n.source,r=n.image;if(t&&r){s.store.getState().island.isFromStreaming;var o=s.store.getState().currentCall.streamingSourceNumber;d.getStreamingSourceId(o),j.streaming.updateSourceImage({source:t,image:r})}}})),function(){clearInterval(U.current),x.current.close()}}),[b,k,C,D,j]),n.useEffect((function(){_&&(console.info("websocket reconnection"),x.current.disconnect(),x.current.connect(),w())}),[_]),y.default.createElement(y.default.Fragment,null,N)};
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),n=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),r=require("../lib/phone/conversation.js"),o=require("../services/user.js"),i=require("../utils/genericFunctions/eventDispatch.js"),c=require("../utils/genericFunctions/withTimeout.js"),s=require("../store/index.js");require("../lib/webrtc/janus.js"),require("../node_modules/webrtc-adapter/src/js/adapter_core.js");var a=require("../lib/devices/devices.js"),u=require("../lib/user/default_device.js"),l=require("../utils/genericFunctions/isEmpty.js"),d=require("../utils/streaming/getStreamingSourceId.js"),p=require("../events/SocketEvents.js"),m=require("../utils/genericFunctions/timestamp.js"),g=require("../lib/user/extensions.js"),v=require("../utils/streaming/isFromStreaming.js"),f=require("../node_modules/react-redux/es/hooks/useSelector.js");require("../node_modules/react-redux/es/components/Context.js"),require("../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("../node_modules/react-redux/node_modules/react-is/index.js");var h=require("../node_modules/react-redux/es/hooks/useDispatch.js"),S=require("../lib/phone/trunk.js");function y(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var b=y(n);exports.Socket=function(y){var k=y.hostName,C=y.username,_=y.authToken,w=y.reload,N=y.reloadedCallback,D=y.children,j=y.uaType,U=h.useDispatch(),T=n.useRef(),x=n.useRef(),q=n.useRef(!1);f.useSelector((function(e){return e.currentUser}));return n.useEffect((function(){var n=function(e){if(e.counterpartNum&&v.isFromStreaming(e.counterpartNum)){U.island.setIsFromStreaming(!0),U.currentCall.updateCurrentCall({streamingSourceNumber:e.counterpartNum});var n=d.getStreamingSourceId(e.counterpartNum);n&&o.subscribe({id:n}).catch((function(e){return console.error("Error subscribing to streaming source:",e)}))}},f=function(e,t){var c=s.store.getState().currentCall,a=c.transferring,l=c.transferSwitching,d=c.transferCalls,p=s.store.getState().island.view;if(Object.keys(t).length>0){if(e.status){var v=s.store.getState().users.extensions,f=s.store.getState().currentUser.default_device,h=s.store.getState().currentUser,y=h.endpoints,b=h.username,k=s.store.getState().currentCall;k.incoming,k.outgoing;var C=function(){if(!v||!b)return!1;var e=Object.values(v).filter((function(e){return(null==e?void 0:e.username)===b}));return null==e?void 0:e.some((function(e){var n=null==y?void 0:y.extension.find((function(n){return n.id===(null==e?void 0:e.exten)}));return"nethlink"===(null==n?void 0:n.type)&&"offline"!==(null==e?void 0:e.status)}))};switch(e.status){case"ringing":if(n(t),"mobile"===j&&C()||"desktop"===j&&("webrtc"===(null==f?void 0:f.type)||void 0===(null==f?void 0:f.type)&&!C()||!C()&&"physical"===(null==f?void 0:f.type))){q.current||(q.current=!0,o.getCurrentUserInfo().then((function(e){e&&(U.currentUser.updateCurrentUser(e),e.settings&&e.settings.open_param_url?U.paramUrl.setOpenParamUrlType(e.settings.open_param_url):U.paramUrl.setOpenParamUrlType("never"))})).catch((function(e){console.error("Error getting current user info:",e)})).finally((function(){setTimeout((function(){q.current=!1}),100)}))),U.currentCall.checkIncomingUpdatePlay({conversationId:t.id,displayName:r.getDisplayName(t),number:"".concat(t.counterpartNum),incomingSocket:!0,incoming:!0,username:"".concat(v&&v[t.counterpartNum]&&v[t.counterpartNum].username)||"",ownerExtension:t.owner}),t.id,r.getDisplayName(t),"".concat(t.counterpartNum),t.owner,"".concat(v&&v[t.counterpartNum]&&v[t.counterpartNum].username),null==t||t.chDest,null==t||t.chSource,t.direction,t.inConference,t.linkedId,t.uniqueId,t.throughQueue,t.throughTrunk,t.recording,s.store.dispatch.island.setIslandView("call"),i.eventDispatch("phone-island-call-ringing",{});var _=s.store.getState().paramUrl.openParamUrlType,w=s.store.getState().island.urlOpened;if("ringing"===_&&!w){var N=S.isFromTrunk(t.counterpartNum);s.store.dispatch.paramUrl.setThroughTrunk(N),s.store.dispatch.island.setUrlOpened(!1),i.eventDispatch("phone-island-url-parameter-opened",{counterpartNum:t.counterpartNum,counterpartName:r.getDisplayName(t),owner:t.owner,uniqueId:t.uniqueId,throughQueue:t.throughQueue,throughTrunk:N,direction:t.direction,connected:t.connected})}}break;case"busy":if(n(t),"mobile"===j&&C()||"desktop"===j&&("webrtc"===(null==f?void 0:f.type)||void 0===(null==f?void 0:f.type)&&!C()||!C()&&"physical"===(null==f?void 0:f.type))){if(t&&t.connected)U.currentCall.updateCurrentCall({conversationId:t.id,displayName:r.getDisplayName(t),number:"".concat(t.counterpartNum),ownerExtension:t.owner,username:"".concat(v&&v[t.counterpartNum]&&v[t.counterpartNum].username)||"",chDest:(null==t?void 0:t.chDest)||{},chSource:(null==t?void 0:t.chSource)||{}}),U.currentCall.checkAcceptedUpdate({acceptedSocket:!0}),U.currentCall.addTransferCalls({type:"transferred",displayName:r.getDisplayName(t),number:"".concat(t.counterpartNum),startTime:"".concat(m.getTimestampInSeconds())}),s.store.getState().island.isFromStreaming&&"out"===t.direction&&setTimeout((function(){U.island.setIslandView("streamingAnswer")}),200),u.isPhysical()&&function(e){U.currentCall.updateCurrentCall({conversationId:e.id,accepted:!0,incoming:"in"!==e.direction&&void 0}),i.eventDispatch("phone-island-call-answered",{}),s.store.dispatch.player.stopAudioPlayer(),s.store.dispatch.player.setAudioPlayerLoop(!1)}(t),"call"===p&&a&&U.currentCall.updateCurrentCall({transferring:!1});if(d.length>1)U.currentCall.deleteTransferCalls();else if(t&&!t.connected){if(a&&!l){var D=d.find((function(e){return e.number===t.counterpartNum}));!t.connected&&D&&(U.currentCall.updateCurrentCall({transferring:!1}),i.eventDispatch("phone-island-call-transfer-failed",{}),U.currentCall.updateTransferSwitching(!1))}"REC"===(null==t?void 0:t.counterpartName)&&U.physicalRecorder.setRecordingTempVariable(!0)}t&&!t.connected&&"out"===t.direction&&U.currentCall.checkOutgoingUpdate({outgoingSocket:!0,outgoing:"REC"!==(null==t?void 0:t.counterpartName),displayName:r.getDisplayName(t),number:"".concat(null==t?void 0:t.counterpartNum),username:"".concat(v&&v[null==t?void 0:t.counterpartNum]&&v[null==t?void 0:t.counterpartNum].username)||""})}break;case"onhold":var T=t.counterpartName,x=t.counterpartNum,I=t.startTime;a&&x&&T&&"<unknown>"!==T&&(U.currentCall.addTransferCalls({type:"destination",displayName:r.getDisplayName(t),number:x,startTime:"".concat(m.getTimestampInSeconds())}),U.currentCall.updateCurrentCall({displayName:r.getDisplayName(t),number:x,startTime:"".concat(I/1e3),conversationId:t.id}),U.island.setIslandView("call"));break;case"busy_ringing":i.eventDispatch("phone-island-call-ringing",{})}}}else"online"==e.status&&g.userTotallyFree()&&(U.player.stopAudioPlayer(),U.currentCall.reset(),U.physicalRecorder.setRecordingTempVariable(!1),U.island.setIsFromStreaming(!1))};return x.current=t.io("https://"+k,{upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3}),U.websocket.update({socket:x.current}),x.current.on("connect",(function(){console.debug("Socket connected sid: ".concat(x.current.id)),i.eventDispatch("phone-island-socket-connected",{})})),x.current.on("disconnect",(function(e){console.debug("Socket disconnect - reason: ".concat(e)),e.includes("server disconnect")?i.eventDispatch("phone-island-server-disconnected",{}):i.eventDispatch("phone-island-socket-disconnected",{})})),x.current.io.on("error",(function(e){console.debug("Socket error: ",e)})),x.current.on("connect_error",(function(e){console.debug("Socket connect_error: ",e)})),x.current.io.on("reconnect",(function(e){i.eventDispatch("phone-island-socket-reconnected",{}),console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(x.current.id,")"))})),x.current.io.on("reconnect_attempt",(function(e){console.debug("Socket reconnect_attempt ".concat(e))})),x.current.io.on("reconnect_error",(function(e){console.debug("Socket reconnect_error: ",e)})),x.current.io.on("reconnect_failed",(function(){console.debug("Socket reconnect_failed")})),T.current=setInterval((function(){x.current.volatile.emit("ping",c.withTimeout((function(){U.alerts.removeAlert("socket_down"),i.eventDispatch("phone-island-alert-removed",{type:"socket_down"}),i.eventDispatch("phone-island-socket-disconnected-popup-close",{})}),(function(){U.alerts.setAlert("socket_down"),i.eventDispatch("phone-island-socket-disconnected-popup-open",{}),console.error("Socket is unreachable!")}),7e3))}),7e3),x.current.on("connect",(function(){console.debug("Socket on: "+k+" is connected!"),x.current.emit("login",{accessKeyId:"".concat(C),token:_,uaType:j})})),x.current.on("authe_ok",(function(){console.debug("Socket authentication success!"),i.eventDispatch("phone-island-socket-authorized",{})})),x.current.on("userMainPresenceUpdate",(function(n){s.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),p.dispatchMainPresence(n)})),x.current.on("extenHangup",(function(e){var n=s.store.getState().currentUser,t=n.endpoints,r=n.username,o=s.store.getState().conference,c=o.isActive,a=o.conferenceStartedFrom,u=s.store.getState().island.view,l=((null==t?void 0:t.extension)||[]).find((function(n){return n.id===e.callerNum})),d=null==l?void 0:l.type;"normal_clearing"===e.cause&&("physical"===d||"mobile"===d)||"user_busy"===(null==e?void 0:e.cause)||"not_defined"===(null==e?void 0:e.cause)||"call_rejected"===(null==e?void 0:e.cause)?(setTimeout((function(){s.store.dispatch.island.toggleAvoidToShow(!1)}),500),c&&a!==r&&s.store.dispatch.conference.resetConference()):"normal_circuit_congestion"===(null==e?void 0:e.cause)&&c&&a===r?i.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"}):"normal_clearing"!==e.cause&&"user_busy"!==(null==e?void 0:e.cause)&&"not_defined"!==(null==e?void 0:e.cause)&&"call_rejected"!==(null==e?void 0:e.cause)||"webrtc"!==d&&"nethlink"!==d||!c||a===r||s.store.dispatch.conference.resetConference(),"interworking"===(null==e?void 0:e.cause)&&c&&a===r&&"waitingConference"!==u&&i.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})})),x.current.on("extenConnected",(function(e){var n=s.store.getState().currentUser,t=n.default_device,r=n.endpoints,o=((null==r?void 0:r.extension)||[]).find((function(n){return n.id===e.extenConnected})),c=null==o?void 0:o.type;(("webrtc"===(null==t?void 0:t.type)||"nethlink"===(null==t?void 0:t.type))&&c&&("mobile"===c||"physical"===c)||"physical"===(null==t?void 0:t.type)&&c&&"physical"!==c)&&(s.store.dispatch.island.toggleAvoidToShow(!0),i.eventDispatch("phone-island-call-answered",{extensionType:c}))})),x.current.on("extenUpdate",(function(e){U.users.updateExtension(e);var n=s.store.getState().users.extensions,t={};for(var r in n){var o=n[r].username,i=n[r].exten;t[o]||(t[o]=[]),t[o].push(i)}var c=t[e.username],a=e.conversations[Object.keys(e.conversations)[0]]||{};if(p.dispatchExtensions(e),l.isEmpty(a)){var u=null==c?void 0:c.some((function(e){var t,r=null===(t=n[e])||void 0===t?void 0:t.conversations;return!l.isEmpty(r)}));u||p.dispatchConversations(e)}else p.dispatchConversations(e);e.username===C&&(f(e,a),U.currentUser.updateConversations(e))})),x.current.on("queueUpdate",(function(e){p.dispatchQueueUpdate(e)})),x.current.on("queueMemberUpdate",(function(e){p.dispatchQueueMemberUpdate(e)})),x.current.on("takeOver",(function(){p.dispatchAlreadyLogin()})),x.current.on("serverReloaded",(function(){p.dispatchServerReload()})),x.current.on("parkingUpdate",(function(){p.dispatchParkingUpdate()})),x.current.on("actionNethLink",(function(e,n){p.dispatchUrlCall(e,n)})),x.current.on("message",(function(e){switch(e.message){case"screenSharingStart":U.island.toggleSideViewVisible(!1),U.island.setIslandView("video"),U.screenShare.update({isJoiningScreenShare:!0,room:e.roomId});break;case"screenSharingStop":U.island.toggleSideViewVisible(!1),U.island.setIslandView("video"),U.screenShare.update({isLeavingScreenShare:!0});break;default:console.warn("Socket: unknown message type ",e.message)}})),x.current.on("updateDefaultDevice",(function(n){p.dispatchDefaultDeviceUpdate(n);var t=s.store.getState().users.extensions,r=s.store.getState().currentUser.endpoints;if(t&&r){var o=Object.values(t).filter((function(e){return(null==e?void 0:e.exten)===n}));if(0!==o.length){var i=o[0],c=r.extension.find((function(e){return e.id===i.exten}));c&&(i=e.__assign(e.__assign({},i),{type:c.type})),s.store.dispatch.currentUser.updateCurrentDefaultDevice(i),a.checkMediaPermissions()}}})),x.current.on("confBridgeUpdate",(function(n){if(n&&(null==n?void 0:n.users)){var t=null==n?void 0:n.id,r=null==n?void 0:n.users,o=s.store.getState().conference.usersList,i=e.__assign({},r);o&&Object.keys(i).forEach((function(n){o[n]&&(i[n]=e.__assign(e.__assign({},i[n]),{muted:o[n].muted}))})),s.store.dispatch.conference.updateConferenceUsersList(i),s.store.dispatch.conference.updateConferenceId(t)}})),x.current.on("confBridgeEnd",(function(e){e&&(null==e?void 0:e.id)&&(s.store.dispatch.conference.resetConference(),i.eventDispatch("phone-island-conference-finished",{}))})),x.current.on("callWebrtc",(function(e){i.eventDispatch("phone-island-call-start",{number:e})})),x.current.on("newVoiceMessageCounter",(function(e){i.eventDispatch("phone-island-voicemail-received",{voicemailInfo:e})})),x.current.on("streamingSourceUpdate",(function(e){i.eventDispatch("phone-island-streaming-information-received",{res:e});var n=e.streaming||e.res&&e.res.streaming;if(n){var t=n.source,r=n.image;if(t&&r){s.store.getState().island.isFromStreaming;var o=s.store.getState().currentCall.streamingSourceNumber;d.getStreamingSourceId(o),U.streaming.updateSourceImage({source:t,image:r})}}})),function(){clearInterval(T.current),x.current.close()}}),[k,C,_,j,U]),n.useEffect((function(){w&&(console.info("websocket reconnection"),x.current.disconnect(),x.current.connect(),N())}),[w]),b.default.createElement(b.default.Fragment,null,D)};
|
|
2
2
|
//# sourceMappingURL=Socket.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Socket.js","sources":["../../src/components/Socket.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useEffect, useRef } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../store'\nimport { io } from 'socket.io-client'\nimport { getDisplayName } from '../lib/phone/conversation'\nimport { getCurrentUserInfo } from '../services/user'\nimport {\n dispatchMainPresence,\n dispatchConversations,\n dispatchQueueUpdate,\n dispatchQueueMemberUpdate,\n dispatchAlreadyLogin,\n dispatchServerReload,\n dispatchParkingUpdate,\n dispatchExtensions,\n dispatchUrlCall,\n dispatchDefaultDeviceUpdate,\n} from '../events'\nimport { store } from '../store'\nimport { eventDispatch, withTimeout } from '../utils'\nimport type {\n ConversationTypes,\n ExtensionTypes,\n QueuesUpdateTypes,\n QueueUpdateMemberTypes,\n MainPresenceTypes,\n} from '../types'\nimport { getTimestampInSeconds } from '../utils/genericFunctions/timestamp'\nimport { userTotallyFree } from '../lib/user/extensions'\nimport { isEmpty } from '../utils/genericFunctions/isEmpty'\nimport { isPhysical } from '../lib/user/default_device'\nimport { ScreenSharingMessage } from './VideoView'\nimport { checkMediaPermissions } from '../lib/devices/devices'\nimport { isFromStreaming } from '../utils/streaming/isFromStreaming'\nimport { getStreamingSourceId } from '../utils/streaming/getStreamingSourceId'\nimport { subscribe } from '../services/user'\n\ninterface SocketProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n reload: boolean\n reloadedCallback: () => void\n uaType: string\n}\n\nexport const Socket: FC<SocketProps> = ({\n hostName,\n username,\n authToken,\n reload,\n reloadedCallback,\n children,\n uaType,\n}) => {\n const dispatch = useDispatch<Dispatch>()\n const connectionCheckInterval = useRef<any>()\n const socket = useRef<any>()\n const isUpdatingUserInfo = useRef(false)\n\n // get user information\n const userInformation = useSelector((state: RootState) => state.currentUser)\n\n const checkDefaultDeviceConversationActive = (conv: any) => {\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n accepted: true,\n incoming: conv.direction === 'in' ? false : undefined,\n })\n eventDispatch('phone-island-call-answered', {})\n\n // Stop the local audio element ringing\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.player.setAudioPlayerLoop(false)\n }\n\n const checkDefaultDeviceConversationClosed = (conv: any) => {\n // store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\n // store.dispatch.listen.reset()\n }\n\n useEffect(() => {\n /**\n * Helper function to handle streaming source detection and subscription\n */\n const handleStreamingSource = (conv: ConversationTypes) => {\n // Check if the call is from a streaming source\n if (conv.counterpartNum && isFromStreaming(conv.counterpartNum)) {\n // Set isFromStreaming flag to true\n dispatch.island.setIsFromStreaming(true)\n\n // Store the streaming source number in the currentCall state for future reference\n dispatch.currentCall.updateCurrentCall({\n streamingSourceNumber: conv.counterpartNum,\n })\n\n // Find the source ID and subscribe to streaming updates\n const sourceId = getStreamingSourceId(conv.counterpartNum)\n if (sourceId) {\n // Subscribe to streaming updates\n subscribe({ id: sourceId })\n .catch((error) =>\n console.error('Error subscribing to streaming source:', error),\n )\n }\n }\n }\n\n /**\n * Manages event and data for the currentUser\n *\n * @param res The data from the socket\n * @param conv The conversation data\n */\n const handleCurrentUserEvents = (res: ExtensionTypes, conv: ConversationTypes) => {\n // Handle transferring data\n const { transferring, transferSwitching, transferCalls } = store.getState().currentCall\n\n const view = store.getState().island.view\n // Check conversation isn't empty\n if (Object.keys(conv).length > 0) {\n // With conversation\n if (res.status) {\n const { extensions } = store.getState().users\n const { default_device } = store.getState().currentUser\n const { endpoints, username } = store.getState().currentUser\n const { incoming, outgoing } = store.getState().currentCall\n\n const hasOnlineNethlink = () => {\n if (!extensions || !username) return false\n\n // Get all extensions for current user\n const userExtensions: any = Object.values(extensions).filter(\n (ext) => ext?.username === username,\n )\n\n // Check if any extension is nethlink type and online\n return userExtensions?.some((ext) => {\n const endpointExtension = endpoints?.extension.find(\n (endpoint) => endpoint.id === ext?.exten,\n )\n return endpointExtension?.type === 'nethlink' && ext?.status !== 'offline'\n })\n }\n switch (res.status) {\n case 'ringing':\n // Handle streaming source for incoming calls\n handleStreamingSource(conv)\n\n if (\n (uaType === 'mobile' && hasOnlineNethlink()) ||\n (uaType === 'desktop' &&\n (default_device?.type === 'webrtc' ||\n (default_device?.type === undefined && !hasOnlineNethlink()) ||\n (!hasOnlineNethlink() && default_device?.type === 'physical')))\n ) {\n // Get updated user info\n if (!isUpdatingUserInfo.current) {\n isUpdatingUserInfo.current = true\n getCurrentUserInfo().then((userInfo) => {\n if (userInfo) {\n dispatch.currentUser.updateCurrentUser(userInfo)\n if (userInfo.settings && userInfo.settings.open_param_url) {\n dispatch.paramUrl.setOpenParamUrlType(userInfo.settings.open_param_url);\n } else {\n dispatch.paramUrl.setOpenParamUrlType('never');\n }\n }\n }).catch((error) => {\n console.error('Error getting current user info:', error)\n }).finally(() => {\n setTimeout(() => {\n isUpdatingUserInfo.current = false\n }, 100)\n })\n }\n dispatch.currentCall.checkIncomingUpdatePlay({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n incomingSocket: true,\n incoming: true,\n username:\n `${extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n ownerExtension: conv.owner,\n\n })\n let callInformations = {\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n counterpartNum: `${conv.counterpartNum}`,\n ownerExtension: conv.owner,\n username:\n `${extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n chDest: conv?.chDest || {},\n chSource: conv?.chSource || {},\n direction: conv.direction,\n inConference: conv.inConference,\n linkedId: conv.linkedId,\n uniqueId: conv.uniqueId,\n throughQueue: conv.throughQueue,\n throughTrunk: conv.throughTrunk,\n recording: conv.recording,\n }\n store.dispatch.island.setIslandView('call')\n\n eventDispatch('phone-island-call-ringing', {})\n const { openParamUrlType } = store.getState().paramUrl\n const { urlOpened } = store.getState().island\n\n if (openParamUrlType === 'ringing' && !urlOpened) {\n store.dispatch.island.setUrlOpened(false)\n eventDispatch('phone-island-url-parameter-opened', {\n counterpartNum: conv.counterpartNum,\n counterpartName: getDisplayName(conv),\n owner: conv.owner,\n uniqueId: conv.uniqueId,\n throughQueue: conv.throughQueue,\n throughTrunk: conv.throughTrunk,\n direction: conv.direction,\n connected: conv.connected\n })\n }\n }\n break\n // @ts-ignore\n case 'busy':\n // Handle streaming source for outgoing calls\n handleStreamingSource(conv)\n\n if (\n (uaType === 'mobile' && hasOnlineNethlink()) ||\n (uaType === 'desktop' &&\n (default_device?.type === 'webrtc' ||\n (default_device?.type === undefined && !hasOnlineNethlink()) ||\n (!hasOnlineNethlink() && default_device?.type === 'physical')))\n ) {\n if (conv && conv.connected) {\n // Current call accepted and update connected call\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n ownerExtension: conv.owner,\n username:\n `${extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n chDest: conv?.chDest || {},\n chSource: conv?.chSource || {},\n })\n // Update the current call informations for physical devices\n dispatch.currentCall.checkAcceptedUpdate({\n acceptedSocket: true,\n })\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'transferred',\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${getTimestampInSeconds()}`,\n })\n\n // Check if this is a streaming call that was accepted\n const { isFromStreaming } = store.getState().island\n if (isFromStreaming && conv.direction === 'out') {\n // Set view to streamingAnswer for outgoing streaming calls when accepted\n setTimeout(() => {\n dispatch.island.setIslandView('streamingAnswer')\n }, 200)\n }\n\n if (isPhysical()) {\n checkDefaultDeviceConversationActive(conv)\n }\n if (view === 'call' && transferring) {\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n }\n }\n // Delete transfer calls if there are more than one ( in case of call switch after transfer)\n if (transferCalls.length > 1) {\n dispatch.currentCall.deleteTransferCalls()\n }\n // Handle not connected calls\n else if (conv && !conv.connected) {\n if (transferring && !transferSwitching) {\n // Handle hangup during transfer\n const inTransferCalls = transferCalls.find(\n (item) => item.number === conv.counterpartNum,\n )\n if (!conv.connected && inTransferCalls) {\n // Update transferring data for the current call\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n eventDispatch('phone-island-call-transfer-failed', {})\n // Reset transfer switching\n // TODO - It needs to enhance how conversation connections (conv.connected) are updated server side\n // TODO - The transfer end is not handled when the an user hangups or after call switch\n dispatch.currentCall.updateTransferSwitching(false)\n }\n }\n if (conv?.counterpartName === 'REC') {\n dispatch.physicalRecorder.setRecordingTempVariable(true)\n }\n }\n // Handle outgoing call\n if (conv && !conv.connected && conv.direction === 'out') {\n // Update the current outgoing conversation\n dispatch.currentCall.checkOutgoingUpdate({\n outgoingSocket: true,\n outgoing: conv?.counterpartName === 'REC' ? false : true,\n displayName: getDisplayName(conv),\n number: `${conv?.counterpartNum}`,\n username:\n `${extensions &&\n extensions[conv?.counterpartNum] &&\n extensions[conv?.counterpartNum].username\n }` || '',\n })\n }\n }\n break\n\n case 'onhold':\n // The new conversation during transferring\n const { counterpartName, counterpartNum, startTime } = conv\n if (\n transferring &&\n counterpartNum &&\n counterpartName &&\n counterpartName !== '<unknown>'\n ) {\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'destination',\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${getTimestampInSeconds()}`,\n })\n // Set the current call informations\n dispatch.currentCall.updateCurrentCall({\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${startTime / 1000}`,\n conversationId: conv.id,\n })\n // Set the view of the island to call\n dispatch.island.setIslandView('call')\n }\n break\n case 'busy_ringing':\n eventDispatch('phone-island-call-ringing', {})\n break\n default:\n break\n }\n }\n } else {\n // Without conversation for physical phone management\n if (res.status == 'online' && userTotallyFree()) {\n // Stop ringing sounds\n dispatch.player.stopAudioPlayer()\n // Reset current call info\n dispatch.currentCall.reset()\n dispatch.physicalRecorder.setRecordingTempVariable(false)\n // Reset isFromStreaming flag\n dispatch.island.setIsFromStreaming(false)\n }\n }\n }\n\n /**\n * Initialize socket connection and listeners\n */\n const initSocketConnection = () => {\n socket.current = io('https://' + hostName, {\n upgrade: false,\n transports: ['websocket'],\n reconnection: true,\n reconnectionDelay: 2000,\n })\n\n // save websocket to store\n dispatch.websocket.update({ socket: socket.current })\n\n // Handle socket errors\n socket.current.on('connect', () => {\n console.debug(`Socket connected sid: ${socket.current.id}`)\n eventDispatch('phone-island-socket-connected', {})\n })\n socket.current.on('disconnect', (reason) => {\n console.debug(`Socket disconnect - reason: ${reason}`)\n if (reason.includes('server disconnect')) {\n eventDispatch('phone-island-server-disconnected', {})\n } else {\n eventDispatch('phone-island-socket-disconnected', {})\n }\n })\n socket.current.io.on('error', (err) => {\n console.debug(`Socket error: `, err)\n })\n socket.current.on('connect_error', (err) => {\n console.debug(`Socket connect_error: `, err)\n })\n socket.current.io.on('reconnect', (attempt) => {\n eventDispatch('phone-island-socket-reconnected', {})\n console.debug(`Socket reconnect attemp ${attempt} (sid: ${socket.current.id})`)\n })\n socket.current.io.on('reconnect_attempt', (attempt) => {\n console.debug(`Socket reconnect_attempt ${attempt}`)\n })\n socket.current.io.on('reconnect_error', (err) => {\n console.debug(`Socket reconnect_error: `, err)\n })\n socket.current.io.on('reconnect_failed', () => {\n console.debug(`Socket reconnect_failed`)\n })\n\n // Checks if socket is reachable every 5 seconds\n connectionCheckInterval.current = setInterval(() => {\n const start = Date.now()\n socket.current.volatile.emit(\n 'ping',\n withTimeout(\n () => {\n // Remove socket_down alert\n dispatch.alerts.removeAlert('socket_down')\n eventDispatch('phone-island-alert-removed', {\n type: 'socket_down',\n })\n eventDispatch('phone-island-socket-disconnected-popup-close', {})\n },\n () => {\n // Set socket_down alert\n dispatch.alerts.setAlert('socket_down')\n eventDispatch('phone-island-socket-disconnected-popup-open', {})\n console.error('Socket is unreachable!')\n },\n 7 * 1000, // Waits for the response 7 seconds\n ),\n )\n }, 7 * 1000) // Executes a new check every 7 seconds\n\n // Handle connection message\n socket.current.on('connect', () => {\n console.debug('Socket on: ' + hostName + ' is connected!')\n socket.current.emit('login', {\n accessKeyId: `${username}`,\n token: authToken,\n uaType: uaType,\n })\n })\n\n // Handle authentication success message\n socket.current.on('authe_ok', () => {\n console.debug('Socket authentication success!')\n eventDispatch('phone-island-socket-authorized', {})\n })\n\n socket.current.on('userMainPresenceUpdate', (res: MainPresenceTypes) => {\n // Update endpoints store\n store.dispatch.users.updateEndpointMainPresence({ ...res.mainPresence })\n // Dispatch dispatchMainPresence Event\n dispatchMainPresence(res)\n })\n\n socket.current.on('extenHangup', (res: any) => {\n const { endpoints, username } = store.getState().currentUser\n const { isActive, conferenceStartedFrom } = store.getState().conference\n const { view } = store.getState().island\n\n // Get user extensions\n const userExtensions = endpoints?.extension || []\n\n // Find the extension type based on callerNum\n const connectedExtension = userExtensions.find((ext) => ext.id === res.callerNum)\n const extensionType: any = connectedExtension?.type\n\n // If cause is normal_clearing and extension is physical or mobile\n // Clean phone-island visibility also after user_busy ( useful for physical devices )\n if (\n (res.cause === 'normal_clearing' &&\n (extensionType === 'physical' || extensionType === 'mobile')) ||\n res?.cause === 'user_busy' ||\n res?.cause === 'not_defined' ||\n res?.cause === 'call_rejected'\n ) {\n // Reset phone island visibility after 2 seconds to avoid glitches\n setTimeout(() => {\n store.dispatch.island.toggleAvoidToShow(false)\n }, 500)\n if (isActive && conferenceStartedFrom !== username) {\n store.dispatch.conference.resetConference()\n }\n } else if (\n res?.cause === 'normal_circuit_congestion' &&\n isActive &&\n conferenceStartedFrom === username\n ) {\n eventDispatch('phone-island-view-changed', { viewType: 'waitingConference' })\n } else if (\n (res.cause === 'normal_clearing' ||\n res?.cause === 'user_busy' ||\n res?.cause === 'not_defined' ||\n res?.cause === 'call_rejected') &&\n (extensionType === 'webrtc' || extensionType === 'nethlink') &&\n isActive &&\n conferenceStartedFrom !== username\n ) {\n store.dispatch.conference.resetConference()\n }\n // if conference owner call the call with the added user inside conference\n if (\n res?.cause === 'interworking' &&\n isActive &&\n conferenceStartedFrom === username &&\n view !== 'waitingConference'\n ) {\n eventDispatch('phone-island-view-changed', { viewType: 'waitingConference' })\n }\n })\n\n // Avoid to show phone island if call is connected with other extension\n socket.current.on('extenConnected', (res: { extenConnected: string }) => {\n // Get the current user's extensions\n\n const { default_device, endpoints } = store.getState().currentUser\n const userExtensions = endpoints?.extension || []\n\n // Find the extension type\n const connectedExtension = userExtensions.find((ext) => ext.id === res.extenConnected)\n const extensionType: any = connectedExtension?.type\n\n // Reset only if the extension type is not webrtc or nethlink\n // ( avoid to not show phone island if default is physical and extensionType is physical)\n if (\n ((default_device?.type === 'webrtc' || default_device?.type === 'nethlink') &&\n extensionType &&\n (extensionType === 'mobile' || extensionType === 'physical')) ||\n (default_device?.type === 'physical' && extensionType && extensionType !== 'physical')\n ) {\n // Avoid to show phone island in case of answer from physical or mobile device\n store.dispatch.island.toggleAvoidToShow(true)\n // Launch an event to advert the user that the call it's answered from another device\n eventDispatch('phone-island-call-answered', { extensionType })\n }\n })\n\n socket.current.on('extenUpdate', (res: ExtensionTypes) => {\n // Update extensions and conversations in users store\n dispatch.users.updateExtension(res)\n\n //retrieve all extensions from store\n const { extensions }: any = store.getState().users\n const deviceMap: any = {}\n\n // Create a map of extensions for each user\n for (const key in extensions) {\n const user: any = extensions[key].username\n const ext: any = extensions[key].exten\n\n if (!deviceMap[user]) {\n deviceMap[user] = []\n }\n\n deviceMap[user].push(ext)\n }\n\n const associatedExtensions: any = deviceMap[res.username]\n\n // Initialize conversation\n let conv = res.conversations[Object.keys(res.conversations)[0]] || {}\n\n // Update all extensions and send the dispatch event\n dispatchExtensions(res)\n\n // second step update conversation\n\n // Check if conversation is empty\n if (isEmpty(conv)) {\n // Check if there is at least one conversation not empty\n const hasNonEmptyConversation = associatedExtensions?.some((ext: any) => {\n const extConversations = extensions[ext]?.conversations\n\n if (!isEmpty(extConversations)) {\n // not empty conversation found\n return true\n }\n\n return false\n })\n\n if (!hasNonEmptyConversation) {\n // Conversation is empty and there is no conversation for the user\n dispatchConversations(res)\n }\n } else {\n // Dispatch conversation event\n dispatchConversations(res)\n }\n\n // Handle only the events of the user\n if (res.username === username) {\n handleCurrentUserEvents(res, conv)\n // Update the conversations of the user\n dispatch.currentUser.updateConversations(res)\n }\n })\n\n // `queueUpdate` is the socket event when the data of a queue updates\n socket.current.on('queueUpdate', (res: QueuesUpdateTypes) => {\n // Dispatch queueUpdate event\n dispatchQueueUpdate(res)\n })\n\n // `queueMemberUpdate` is the socket event when the data of a queue member changes\n socket.current.on('queueMemberUpdate', (res: QueueUpdateMemberTypes) => {\n // Dispatch queueMemberUpdate event\n dispatchQueueMemberUpdate(res)\n })\n\n // `takeOver` is the socket event when the user does login from another new window\n socket.current.on('takeOver', () => {\n // Dispatch takeOver event\n dispatchAlreadyLogin()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('serverReloaded', () => {\n // Dispatch serverReload event\n dispatchServerReload()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('parkingUpdate', () => {\n // Dispatch serverReload event\n dispatchParkingUpdate()\n })\n\n // `actionNethLink` is the socket event when user make a call or a action from NethLink and has a physical device\n socket.current.on('actionNethLink', (link, urlType) => {\n // Dispatch phone island physical call event with the link and the urlType\n dispatchUrlCall(link, urlType)\n })\n\n socket.current.on('message', (data: any) => {\n switch (data.message) {\n case 'screenSharingStart':\n dispatch.island.toggleSideViewVisible(false)\n dispatch.island.setIslandView('video')\n\n dispatch.screenShare.update({\n isJoiningScreenShare: true,\n room: (data as ScreenSharingMessage).roomId,\n })\n break\n case 'screenSharingStop':\n dispatch.island.toggleSideViewVisible(false)\n dispatch.island.setIslandView('video')\n\n dispatch.screenShare.update({\n isLeavingScreenShare: true,\n })\n break\n default:\n console.warn('Socket: unknown message type ', data.message)\n }\n })\n\n // `updateDefaultDevice` is the socket event when user change the default device\n socket.current.on('updateDefaultDevice', (extension: string) => {\n // Dispatch phone island physical call event with the link and the urlType\n dispatchDefaultDeviceUpdate(extension)\n // Update the internal store\n const { extensions } = store.getState().users\n const { endpoints } = store.getState().currentUser\n if (!extensions || !endpoints) return\n\n const extensionInformations: any = Object.values(extensions).filter(\n (ext) => ext?.exten === extension,\n )\n if (extensionInformations.length === 0) return\n\n let objectComplete = extensionInformations[0]\n const endpointExtension = endpoints.extension.find(\n (endpoint) => endpoint.id === objectComplete.exten,\n )\n if (endpointExtension) {\n objectComplete = { ...objectComplete, type: endpointExtension.type }\n }\n\n store.dispatch.currentUser.updateCurrentDefaultDevice(objectComplete)\n //make sure to check the media permissions\n checkMediaPermissions()\n })\n\n socket.current.on('confBridgeUpdate', (res: any) => {\n if (res && res?.users) {\n // Get User informations\n const conferenceId = res?.id\n const conferenceUsers = res?.users\n\n // Get current users list to preserve mute status\n const { usersList } = store.getState().conference\n\n // Create a copy of the new conference users while preserving mute status\n const updatedConferenceUsers = { ...conferenceUsers }\n\n // Preserve mute status for existing users\n if (usersList) {\n Object.keys(updatedConferenceUsers).forEach((userId) => {\n if (usersList[userId]) {\n // Keep the existing mute status instead of using the server's value\n updatedConferenceUsers[userId] = {\n ...updatedConferenceUsers[userId],\n muted: usersList[userId].muted,\n }\n }\n })\n }\n\n store.dispatch.conference.updateConferenceUsersList(updatedConferenceUsers)\n store.dispatch.conference.updateConferenceId(conferenceId)\n }\n })\n\n socket.current.on('confBridgeEnd', (res: any) => {\n if (res && res?.id) {\n // Reset the conference store when conference ends\n store.dispatch.conference.resetConference()\n eventDispatch('phone-island-conference-finished', {})\n }\n })\n\n socket.current.on('callWebrtc', (res: any) => {\n // On call event from socket dispatch the call start event\n eventDispatch('phone-island-call-start', { number: res })\n })\n\n socket.current.on('newVoiceMessageCounter', (res: any) => {\n eventDispatch('phone-island-voicemail-received', { voicemailInfo: res })\n })\n\n socket.current.on('streamingSourceUpdate', (res: any) => {\n eventDispatch('phone-island-streaming-information-received', { res })\n const streamingData = res.streaming || (res.res && res.res.streaming)\n\n if (streamingData) {\n const { source, image } = streamingData\n if (source && image) {\n const { isFromStreaming } = store.getState().island\n const { streamingSourceNumber } = store.getState().currentCall\n const sourceId = getStreamingSourceId(streamingSourceNumber)\n\n dispatch.streaming.updateSourceImage({\n source: source,\n image: image,\n })\n }\n }\n })\n }\n\n initSocketConnection()\n\n // Stop the check socket interval\n // Close the socket connection\n return () => {\n clearInterval(connectionCheckInterval.current)\n socket.current.close()\n }\n }, [hostName, username, authToken, uaType, dispatch])\n\n // Manage reload events\n useEffect(() => {\n if (reload) {\n console.info('websocket reconnection')\n socket.current.disconnect()\n socket.current.connect()\n reloadedCallback()\n }\n }, [reload])\n\n return <>{children}</>\n}\n"],"names":["_a","hostName","username","authToken","reload","reloadedCallback","children","uaType","dispatch","useDispatch","connectionCheckInterval","useRef","socket","isUpdatingUserInfo","useSelector","state","currentUser","useEffect","handleStreamingSource","conv","counterpartNum","isFromStreaming","island","setIsFromStreaming","currentCall","updateCurrentCall","streamingSourceNumber","sourceId","getStreamingSourceId","subscribe","id","catch","error","console","handleCurrentUserEvents","res","store","getState","transferring","transferSwitching","transferCalls","view","Object","keys","length","status","extensions_1","users","extensions","default_device","_b","endpoints_1","endpoints","username_1","_c","incoming","hasOnlineNethlink","userExtensions","values","filter","ext","some","endpointExtension","extension","find","endpoint","exten","type","undefined","current","getCurrentUserInfo","then","userInfo","updateCurrentUser","settings","open_param_url","paramUrl","setOpenParamUrlType","finally","setTimeout","checkIncomingUpdatePlay","conversationId","displayName","getDisplayName","number","concat","incomingSocket","ownerExtension","owner","chDest","chSource","direction","inConference","linkedId","uniqueId","throughQueue","throughTrunk","recording","setIslandView","eventDispatch","openParamUrlType","urlOpened","setUrlOpened","counterpartName","connected","checkAcceptedUpdate","acceptedSocket","addTransferCalls","startTime","getTimestampInSeconds","isPhysical","accepted","player","stopAudioPlayer","setAudioPlayerLoop","checkDefaultDeviceConversationActive","deleteTransferCalls","inTransferCalls","item","updateTransferSwitching","physicalRecorder","setRecordingTempVariable","checkOutgoingUpdate","outgoingSocket","outgoing","userTotallyFree","reset","io","upgrade","transports","reconnection","reconnectionDelay","websocket","update","on","debug","reason","includes","err","attempt","setInterval","volatile","emit","withTimeout","alerts","removeAlert","setAlert","accessKeyId","token","updateEndpointMainPresence","__assign","mainPresence","dispatchMainPresence","conference","isActive","conferenceStartedFrom","connectedExtension","callerNum","extensionType","cause","toggleAvoidToShow","resetConference","viewType","extenConnected","updateExtension","deviceMap","key","user","push","associatedExtensions","conversations","dispatchExtensions","isEmpty","hasNonEmptyConversation","extConversations","dispatchConversations","updateConversations","dispatchQueueUpdate","dispatchQueueMemberUpdate","dispatchAlreadyLogin","dispatchServerReload","dispatchParkingUpdate","link","urlType","dispatchUrlCall","data","message","toggleSideViewVisible","screenShare","isJoiningScreenShare","room","roomId","isLeavingScreenShare","warn","dispatchDefaultDeviceUpdate","extensionInformations","objectComplete","updateCurrentDefaultDevice","checkMediaPermissions","conferenceId","conferenceUsers","usersList_1","usersList","updatedConferenceUsers_1","forEach","userId","muted","updateConferenceUsersList","updateConferenceId","voicemailInfo","streamingData","streaming","source","image","updateSourceImage","clearInterval","close","info","disconnect","connect","React","createElement","Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Socket.js","sources":["../../src/components/Socket.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useEffect, useRef } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../store'\nimport { io } from 'socket.io-client'\nimport { getDisplayName } from '../lib/phone/conversation'\nimport { getCurrentUserInfo } from '../services/user'\nimport {\n dispatchMainPresence,\n dispatchConversations,\n dispatchQueueUpdate,\n dispatchQueueMemberUpdate,\n dispatchAlreadyLogin,\n dispatchServerReload,\n dispatchParkingUpdate,\n dispatchExtensions,\n dispatchUrlCall,\n dispatchDefaultDeviceUpdate,\n} from '../events'\nimport { store } from '../store'\nimport { eventDispatch, withTimeout } from '../utils'\nimport type {\n ConversationTypes,\n ExtensionTypes,\n QueuesUpdateTypes,\n QueueUpdateMemberTypes,\n MainPresenceTypes,\n} from '../types'\nimport { getTimestampInSeconds } from '../utils/genericFunctions/timestamp'\nimport { userTotallyFree } from '../lib/user/extensions'\nimport { isEmpty } from '../utils/genericFunctions/isEmpty'\nimport { isPhysical } from '../lib/user/default_device'\nimport { ScreenSharingMessage } from './VideoView'\nimport { checkMediaPermissions } from '../lib/devices/devices'\nimport { isFromStreaming } from '../utils/streaming/isFromStreaming'\nimport { getStreamingSourceId } from '../utils/streaming/getStreamingSourceId'\nimport { subscribe } from '../services/user'\nimport { isFromTrunk } from '../lib/user/extensions'\n\ninterface SocketProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n reload: boolean\n reloadedCallback: () => void\n uaType: string\n}\n\nexport const Socket: FC<SocketProps> = ({\n hostName,\n username,\n authToken,\n reload,\n reloadedCallback,\n children,\n uaType,\n}) => {\n const dispatch = useDispatch<Dispatch>()\n const connectionCheckInterval = useRef<any>()\n const socket = useRef<any>()\n const isUpdatingUserInfo = useRef(false)\n\n // get user information\n const userInformation = useSelector((state: RootState) => state.currentUser)\n\n const checkDefaultDeviceConversationActive = (conv: any) => {\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n accepted: true,\n incoming: conv.direction === 'in' ? false : undefined,\n })\n eventDispatch('phone-island-call-answered', {})\n\n // Stop the local audio element ringing\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.player.setAudioPlayerLoop(false)\n }\n\n const checkDefaultDeviceConversationClosed = (conv: any) => {\n // store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\n // store.dispatch.listen.reset()\n }\n\n useEffect(() => {\n /**\n * Helper function to handle streaming source detection and subscription\n */\n const handleStreamingSource = (conv: ConversationTypes) => {\n // Check if the call is from a streaming source\n if (conv.counterpartNum && isFromStreaming(conv.counterpartNum)) {\n // Set isFromStreaming flag to true\n dispatch.island.setIsFromStreaming(true)\n\n // Store the streaming source number in the currentCall state for future reference\n dispatch.currentCall.updateCurrentCall({\n streamingSourceNumber: conv.counterpartNum,\n })\n\n // Find the source ID and subscribe to streaming updates\n const sourceId = getStreamingSourceId(conv.counterpartNum)\n if (sourceId) {\n // Subscribe to streaming updates\n subscribe({ id: sourceId }).catch((error) =>\n console.error('Error subscribing to streaming source:', error),\n )\n }\n }\n }\n\n /**\n * Manages event and data for the currentUser\n *\n * @param res The data from the socket\n * @param conv The conversation data\n */\n const handleCurrentUserEvents = (res: ExtensionTypes, conv: ConversationTypes) => {\n // Handle transferring data\n const { transferring, transferSwitching, transferCalls } = store.getState().currentCall\n\n const view = store.getState().island.view\n // Check conversation isn't empty\n if (Object.keys(conv).length > 0) {\n // With conversation\n if (res.status) {\n const { extensions } = store.getState().users\n const { default_device } = store.getState().currentUser\n const { endpoints, username } = store.getState().currentUser\n const { incoming, outgoing } = store.getState().currentCall\n\n const hasOnlineNethlink = () => {\n if (!extensions || !username) return false\n\n // Get all extensions for current user\n const userExtensions: any = Object.values(extensions).filter(\n (ext) => ext?.username === username,\n )\n\n // Check if any extension is nethlink type and online\n return userExtensions?.some((ext) => {\n const endpointExtension = endpoints?.extension.find(\n (endpoint) => endpoint.id === ext?.exten,\n )\n return endpointExtension?.type === 'nethlink' && ext?.status !== 'offline'\n })\n }\n switch (res.status) {\n case 'ringing':\n // Handle streaming source for incoming calls\n handleStreamingSource(conv)\n\n if (\n (uaType === 'mobile' && hasOnlineNethlink()) ||\n (uaType === 'desktop' &&\n (default_device?.type === 'webrtc' ||\n (default_device?.type === undefined && !hasOnlineNethlink()) ||\n (!hasOnlineNethlink() && default_device?.type === 'physical')))\n ) {\n // Get updated user info\n if (!isUpdatingUserInfo.current) {\n isUpdatingUserInfo.current = true\n getCurrentUserInfo()\n .then((userInfo) => {\n if (userInfo) {\n dispatch.currentUser.updateCurrentUser(userInfo)\n if (userInfo.settings && userInfo.settings.open_param_url) {\n dispatch.paramUrl.setOpenParamUrlType(userInfo.settings.open_param_url)\n } else {\n dispatch.paramUrl.setOpenParamUrlType('never')\n }\n }\n })\n .catch((error) => {\n console.error('Error getting current user info:', error)\n })\n .finally(() => {\n setTimeout(() => {\n isUpdatingUserInfo.current = false\n }, 100)\n })\n }\n dispatch.currentCall.checkIncomingUpdatePlay({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n incomingSocket: true,\n incoming: true,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n ownerExtension: conv.owner,\n })\n let callInformations = {\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n counterpartNum: `${conv.counterpartNum}`,\n ownerExtension: conv.owner,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n chDest: conv?.chDest || {},\n chSource: conv?.chSource || {},\n direction: conv.direction,\n inConference: conv.inConference,\n linkedId: conv.linkedId,\n uniqueId: conv.uniqueId,\n throughQueue: conv.throughQueue,\n throughTrunk: conv.throughTrunk,\n recording: conv.recording,\n }\n store.dispatch.island.setIslandView('call')\n\n eventDispatch('phone-island-call-ringing', {})\n const { openParamUrlType } = store.getState().paramUrl\n const { urlOpened } = store.getState().island\n\n if (openParamUrlType === 'ringing' && !urlOpened) {\n // Calculate throughTrunk based on counterpartNum\n const calculatedThroughTrunk = isFromTrunk(conv.counterpartNum)\n\n // Update throughTrunk in paramUrl store\n store.dispatch.paramUrl.setThroughTrunk(calculatedThroughTrunk)\n\n store.dispatch.island.setUrlOpened(false)\n eventDispatch('phone-island-url-parameter-opened', {\n counterpartNum: conv.counterpartNum,\n counterpartName: getDisplayName(conv),\n owner: conv.owner,\n uniqueId: conv.uniqueId,\n throughQueue: conv.throughQueue,\n throughTrunk: calculatedThroughTrunk,\n direction: conv.direction,\n connected: conv.connected,\n })\n }\n }\n break\n // @ts-ignore\n case 'busy':\n // Handle streaming source for outgoing calls\n handleStreamingSource(conv)\n\n if (\n (uaType === 'mobile' && hasOnlineNethlink()) ||\n (uaType === 'desktop' &&\n (default_device?.type === 'webrtc' ||\n (default_device?.type === undefined && !hasOnlineNethlink()) ||\n (!hasOnlineNethlink() && default_device?.type === 'physical')))\n ) {\n if (conv && conv.connected) {\n // Current call accepted and update connected call\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n ownerExtension: conv.owner,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n chDest: conv?.chDest || {},\n chSource: conv?.chSource || {},\n })\n // Update the current call informations for physical devices\n dispatch.currentCall.checkAcceptedUpdate({\n acceptedSocket: true,\n })\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'transferred',\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${getTimestampInSeconds()}`,\n })\n\n // Check if this is a streaming call that was accepted\n const { isFromStreaming } = store.getState().island\n if (isFromStreaming && conv.direction === 'out') {\n // Set view to streamingAnswer for outgoing streaming calls when accepted\n setTimeout(() => {\n dispatch.island.setIslandView('streamingAnswer')\n }, 200)\n }\n\n if (isPhysical()) {\n checkDefaultDeviceConversationActive(conv)\n }\n if (view === 'call' && transferring) {\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n }\n }\n // Delete transfer calls if there are more than one ( in case of call switch after transfer)\n if (transferCalls.length > 1) {\n dispatch.currentCall.deleteTransferCalls()\n }\n // Handle not connected calls\n else if (conv && !conv.connected) {\n if (transferring && !transferSwitching) {\n // Handle hangup during transfer\n const inTransferCalls = transferCalls.find(\n (item) => item.number === conv.counterpartNum,\n )\n if (!conv.connected && inTransferCalls) {\n // Update transferring data for the current call\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n eventDispatch('phone-island-call-transfer-failed', {})\n // Reset transfer switching\n // TODO - It needs to enhance how conversation connections (conv.connected) are updated server side\n // TODO - The transfer end is not handled when the an user hangups or after call switch\n dispatch.currentCall.updateTransferSwitching(false)\n }\n }\n if (conv?.counterpartName === 'REC') {\n dispatch.physicalRecorder.setRecordingTempVariable(true)\n }\n }\n // Handle outgoing call\n if (conv && !conv.connected && conv.direction === 'out') {\n // Update the current outgoing conversation\n dispatch.currentCall.checkOutgoingUpdate({\n outgoingSocket: true,\n outgoing: conv?.counterpartName === 'REC' ? false : true,\n displayName: getDisplayName(conv),\n number: `${conv?.counterpartNum}`,\n username:\n `${\n extensions &&\n extensions[conv?.counterpartNum] &&\n extensions[conv?.counterpartNum].username\n }` || '',\n })\n }\n }\n break\n\n case 'onhold':\n // The new conversation during transferring\n const { counterpartName, counterpartNum, startTime } = conv\n if (\n transferring &&\n counterpartNum &&\n counterpartName &&\n counterpartName !== '<unknown>'\n ) {\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'destination',\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${getTimestampInSeconds()}`,\n })\n // Set the current call informations\n dispatch.currentCall.updateCurrentCall({\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${startTime / 1000}`,\n conversationId: conv.id,\n })\n // Set the view of the island to call\n dispatch.island.setIslandView('call')\n }\n break\n case 'busy_ringing':\n eventDispatch('phone-island-call-ringing', {})\n break\n default:\n break\n }\n }\n } else {\n // Without conversation for physical phone management\n if (res.status == 'online' && userTotallyFree()) {\n // Stop ringing sounds\n dispatch.player.stopAudioPlayer()\n // Reset current call info\n dispatch.currentCall.reset()\n dispatch.physicalRecorder.setRecordingTempVariable(false)\n // Reset isFromStreaming flag\n dispatch.island.setIsFromStreaming(false)\n }\n }\n }\n\n /**\n * Initialize socket connection and listeners\n */\n const initSocketConnection = () => {\n socket.current = io('https://' + hostName, {\n upgrade: false,\n transports: ['websocket'],\n reconnection: true,\n reconnectionDelay: 2000,\n })\n\n // save websocket to store\n dispatch.websocket.update({ socket: socket.current })\n\n // Handle socket errors\n socket.current.on('connect', () => {\n console.debug(`Socket connected sid: ${socket.current.id}`)\n eventDispatch('phone-island-socket-connected', {})\n })\n socket.current.on('disconnect', (reason) => {\n console.debug(`Socket disconnect - reason: ${reason}`)\n if (reason.includes('server disconnect')) {\n eventDispatch('phone-island-server-disconnected', {})\n } else {\n eventDispatch('phone-island-socket-disconnected', {})\n }\n })\n socket.current.io.on('error', (err) => {\n console.debug(`Socket error: `, err)\n })\n socket.current.on('connect_error', (err) => {\n console.debug(`Socket connect_error: `, err)\n })\n socket.current.io.on('reconnect', (attempt) => {\n eventDispatch('phone-island-socket-reconnected', {})\n console.debug(`Socket reconnect attemp ${attempt} (sid: ${socket.current.id})`)\n })\n socket.current.io.on('reconnect_attempt', (attempt) => {\n console.debug(`Socket reconnect_attempt ${attempt}`)\n })\n socket.current.io.on('reconnect_error', (err) => {\n console.debug(`Socket reconnect_error: `, err)\n })\n socket.current.io.on('reconnect_failed', () => {\n console.debug(`Socket reconnect_failed`)\n })\n\n // Checks if socket is reachable every 5 seconds\n connectionCheckInterval.current = setInterval(() => {\n const start = Date.now()\n socket.current.volatile.emit(\n 'ping',\n withTimeout(\n () => {\n // Remove socket_down alert\n dispatch.alerts.removeAlert('socket_down')\n eventDispatch('phone-island-alert-removed', {\n type: 'socket_down',\n })\n eventDispatch('phone-island-socket-disconnected-popup-close', {})\n },\n () => {\n // Set socket_down alert\n dispatch.alerts.setAlert('socket_down')\n eventDispatch('phone-island-socket-disconnected-popup-open', {})\n console.error('Socket is unreachable!')\n },\n 7 * 1000, // Waits for the response 7 seconds\n ),\n )\n }, 7 * 1000) // Executes a new check every 7 seconds\n\n // Handle connection message\n socket.current.on('connect', () => {\n console.debug('Socket on: ' + hostName + ' is connected!')\n socket.current.emit('login', {\n accessKeyId: `${username}`,\n token: authToken,\n uaType: uaType,\n })\n })\n\n // Handle authentication success message\n socket.current.on('authe_ok', () => {\n console.debug('Socket authentication success!')\n eventDispatch('phone-island-socket-authorized', {})\n })\n\n socket.current.on('userMainPresenceUpdate', (res: MainPresenceTypes) => {\n // Update endpoints store\n store.dispatch.users.updateEndpointMainPresence({ ...res.mainPresence })\n // Dispatch dispatchMainPresence Event\n dispatchMainPresence(res)\n })\n\n socket.current.on('extenHangup', (res: any) => {\n const { endpoints, username } = store.getState().currentUser\n const { isActive, conferenceStartedFrom } = store.getState().conference\n const { view } = store.getState().island\n\n // Get user extensions\n const userExtensions = endpoints?.extension || []\n\n // Find the extension type based on callerNum\n const connectedExtension = userExtensions.find((ext) => ext.id === res.callerNum)\n const extensionType: any = connectedExtension?.type\n\n // If cause is normal_clearing and extension is physical or mobile\n // Clean phone-island visibility also after user_busy ( useful for physical devices )\n if (\n (res.cause === 'normal_clearing' &&\n (extensionType === 'physical' || extensionType === 'mobile')) ||\n res?.cause === 'user_busy' ||\n res?.cause === 'not_defined' ||\n res?.cause === 'call_rejected'\n ) {\n // Reset phone island visibility after 2 seconds to avoid glitches\n setTimeout(() => {\n store.dispatch.island.toggleAvoidToShow(false)\n }, 500)\n if (isActive && conferenceStartedFrom !== username) {\n store.dispatch.conference.resetConference()\n }\n } else if (\n res?.cause === 'normal_circuit_congestion' &&\n isActive &&\n conferenceStartedFrom === username\n ) {\n eventDispatch('phone-island-view-changed', { viewType: 'waitingConference' })\n } else if (\n (res.cause === 'normal_clearing' ||\n res?.cause === 'user_busy' ||\n res?.cause === 'not_defined' ||\n res?.cause === 'call_rejected') &&\n (extensionType === 'webrtc' || extensionType === 'nethlink') &&\n isActive &&\n conferenceStartedFrom !== username\n ) {\n store.dispatch.conference.resetConference()\n }\n // if conference owner call the call with the added user inside conference\n if (\n res?.cause === 'interworking' &&\n isActive &&\n conferenceStartedFrom === username &&\n view !== 'waitingConference'\n ) {\n eventDispatch('phone-island-view-changed', { viewType: 'waitingConference' })\n }\n })\n\n // Avoid to show phone island if call is connected with other extension\n socket.current.on('extenConnected', (res: { extenConnected: string }) => {\n // Get the current user's extensions\n\n const { default_device, endpoints } = store.getState().currentUser\n const userExtensions = endpoints?.extension || []\n\n // Find the extension type\n const connectedExtension = userExtensions.find((ext) => ext.id === res.extenConnected)\n const extensionType: any = connectedExtension?.type\n\n // Reset only if the extension type is not webrtc or nethlink\n // ( avoid to not show phone island if default is physical and extensionType is physical)\n if (\n ((default_device?.type === 'webrtc' || default_device?.type === 'nethlink') &&\n extensionType &&\n (extensionType === 'mobile' || extensionType === 'physical')) ||\n (default_device?.type === 'physical' && extensionType && extensionType !== 'physical')\n ) {\n // Avoid to show phone island in case of answer from physical or mobile device\n store.dispatch.island.toggleAvoidToShow(true)\n // Launch an event to advert the user that the call it's answered from another device\n eventDispatch('phone-island-call-answered', { extensionType })\n }\n })\n\n socket.current.on('extenUpdate', (res: ExtensionTypes) => {\n // Update extensions and conversations in users store\n dispatch.users.updateExtension(res)\n\n //retrieve all extensions from store\n const { extensions }: any = store.getState().users\n const deviceMap: any = {}\n\n // Create a map of extensions for each user\n for (const key in extensions) {\n const user: any = extensions[key].username\n const ext: any = extensions[key].exten\n\n if (!deviceMap[user]) {\n deviceMap[user] = []\n }\n\n deviceMap[user].push(ext)\n }\n\n const associatedExtensions: any = deviceMap[res.username]\n\n // Initialize conversation\n let conv = res.conversations[Object.keys(res.conversations)[0]] || {}\n\n // Update all extensions and send the dispatch event\n dispatchExtensions(res)\n\n // second step update conversation\n\n // Check if conversation is empty\n if (isEmpty(conv)) {\n // Check if there is at least one conversation not empty\n const hasNonEmptyConversation = associatedExtensions?.some((ext: any) => {\n const extConversations = extensions[ext]?.conversations\n\n if (!isEmpty(extConversations)) {\n // not empty conversation found\n return true\n }\n\n return false\n })\n\n if (!hasNonEmptyConversation) {\n // Conversation is empty and there is no conversation for the user\n dispatchConversations(res)\n }\n } else {\n // Dispatch conversation event\n dispatchConversations(res)\n }\n\n // Handle only the events of the user\n if (res.username === username) {\n handleCurrentUserEvents(res, conv)\n // Update the conversations of the user\n dispatch.currentUser.updateConversations(res)\n }\n })\n\n // `queueUpdate` is the socket event when the data of a queue updates\n socket.current.on('queueUpdate', (res: QueuesUpdateTypes) => {\n // Dispatch queueUpdate event\n dispatchQueueUpdate(res)\n })\n\n // `queueMemberUpdate` is the socket event when the data of a queue member changes\n socket.current.on('queueMemberUpdate', (res: QueueUpdateMemberTypes) => {\n // Dispatch queueMemberUpdate event\n dispatchQueueMemberUpdate(res)\n })\n\n // `takeOver` is the socket event when the user does login from another new window\n socket.current.on('takeOver', () => {\n // Dispatch takeOver event\n dispatchAlreadyLogin()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('serverReloaded', () => {\n // Dispatch serverReload event\n dispatchServerReload()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('parkingUpdate', () => {\n // Dispatch serverReload event\n dispatchParkingUpdate()\n })\n\n // `actionNethLink` is the socket event when user make a call or a action from NethLink and has a physical device\n socket.current.on('actionNethLink', (link, urlType) => {\n // Dispatch phone island physical call event with the link and the urlType\n dispatchUrlCall(link, urlType)\n })\n\n socket.current.on('message', (data: any) => {\n switch (data.message) {\n case 'screenSharingStart':\n dispatch.island.toggleSideViewVisible(false)\n dispatch.island.setIslandView('video')\n\n dispatch.screenShare.update({\n isJoiningScreenShare: true,\n room: (data as ScreenSharingMessage).roomId,\n })\n break\n case 'screenSharingStop':\n dispatch.island.toggleSideViewVisible(false)\n dispatch.island.setIslandView('video')\n\n dispatch.screenShare.update({\n isLeavingScreenShare: true,\n })\n break\n default:\n console.warn('Socket: unknown message type ', data.message)\n }\n })\n\n // `updateDefaultDevice` is the socket event when user change the default device\n socket.current.on('updateDefaultDevice', (extension: string) => {\n // Dispatch phone island physical call event with the link and the urlType\n dispatchDefaultDeviceUpdate(extension)\n // Update the internal store\n const { extensions } = store.getState().users\n const { endpoints } = store.getState().currentUser\n if (!extensions || !endpoints) return\n\n const extensionInformations: any = Object.values(extensions).filter(\n (ext) => ext?.exten === extension,\n )\n if (extensionInformations.length === 0) return\n\n let objectComplete = extensionInformations[0]\n const endpointExtension = endpoints.extension.find(\n (endpoint) => endpoint.id === objectComplete.exten,\n )\n if (endpointExtension) {\n objectComplete = { ...objectComplete, type: endpointExtension.type }\n }\n\n store.dispatch.currentUser.updateCurrentDefaultDevice(objectComplete)\n //make sure to check the media permissions\n checkMediaPermissions()\n })\n\n socket.current.on('confBridgeUpdate', (res: any) => {\n if (res && res?.users) {\n // Get User informations\n const conferenceId = res?.id\n const conferenceUsers = res?.users\n\n // Get current users list to preserve mute status\n const { usersList } = store.getState().conference\n\n // Create a copy of the new conference users while preserving mute status\n const updatedConferenceUsers = { ...conferenceUsers }\n\n // Preserve mute status for existing users\n if (usersList) {\n Object.keys(updatedConferenceUsers).forEach((userId) => {\n if (usersList[userId]) {\n // Keep the existing mute status instead of using the server's value\n updatedConferenceUsers[userId] = {\n ...updatedConferenceUsers[userId],\n muted: usersList[userId].muted,\n }\n }\n })\n }\n\n store.dispatch.conference.updateConferenceUsersList(updatedConferenceUsers)\n store.dispatch.conference.updateConferenceId(conferenceId)\n }\n })\n\n socket.current.on('confBridgeEnd', (res: any) => {\n if (res && res?.id) {\n // Reset the conference store when conference ends\n store.dispatch.conference.resetConference()\n eventDispatch('phone-island-conference-finished', {})\n }\n })\n\n socket.current.on('callWebrtc', (res: any) => {\n // On call event from socket dispatch the call start event\n eventDispatch('phone-island-call-start', { number: res })\n })\n\n socket.current.on('newVoiceMessageCounter', (res: any) => {\n eventDispatch('phone-island-voicemail-received', { voicemailInfo: res })\n })\n\n socket.current.on('streamingSourceUpdate', (res: any) => {\n eventDispatch('phone-island-streaming-information-received', { res })\n const streamingData = res.streaming || (res.res && res.res.streaming)\n\n if (streamingData) {\n const { source, image } = streamingData\n if (source && image) {\n const { isFromStreaming } = store.getState().island\n const { streamingSourceNumber } = store.getState().currentCall\n const sourceId = getStreamingSourceId(streamingSourceNumber)\n\n dispatch.streaming.updateSourceImage({\n source: source,\n image: image,\n })\n }\n }\n })\n }\n\n initSocketConnection()\n\n // Stop the check socket interval\n // Close the socket connection\n return () => {\n clearInterval(connectionCheckInterval.current)\n socket.current.close()\n }\n }, [hostName, username, authToken, uaType, dispatch])\n\n // Manage reload events\n useEffect(() => {\n if (reload) {\n console.info('websocket reconnection')\n socket.current.disconnect()\n socket.current.connect()\n reloadedCallback()\n }\n }, [reload])\n\n return <>{children}</>\n}\n"],"names":["_a","hostName","username","authToken","reload","reloadedCallback","children","uaType","dispatch","useDispatch","connectionCheckInterval","useRef","socket","isUpdatingUserInfo","useSelector","state","currentUser","useEffect","handleStreamingSource","conv","counterpartNum","isFromStreaming","island","setIsFromStreaming","currentCall","updateCurrentCall","streamingSourceNumber","sourceId","getStreamingSourceId","subscribe","id","catch","error","console","handleCurrentUserEvents","res","store","getState","transferring","transferSwitching","transferCalls","view","Object","keys","length","status","extensions_1","users","extensions","default_device","_b","endpoints_1","endpoints","username_1","_c","incoming","hasOnlineNethlink","userExtensions","values","filter","ext","some","endpointExtension","extension","find","endpoint","exten","type","undefined","current","getCurrentUserInfo","then","userInfo","updateCurrentUser","settings","open_param_url","paramUrl","setOpenParamUrlType","finally","setTimeout","checkIncomingUpdatePlay","conversationId","displayName","getDisplayName","number","concat","incomingSocket","ownerExtension","owner","chDest","chSource","direction","inConference","linkedId","uniqueId","throughQueue","throughTrunk","recording","setIslandView","eventDispatch","openParamUrlType","urlOpened","calculatedThroughTrunk","isFromTrunk","setThroughTrunk","setUrlOpened","counterpartName","connected","checkAcceptedUpdate","acceptedSocket","addTransferCalls","startTime","getTimestampInSeconds","isPhysical","accepted","player","stopAudioPlayer","setAudioPlayerLoop","checkDefaultDeviceConversationActive","deleteTransferCalls","inTransferCalls","item","updateTransferSwitching","physicalRecorder","setRecordingTempVariable","checkOutgoingUpdate","outgoingSocket","outgoing","userTotallyFree","reset","io","upgrade","transports","reconnection","reconnectionDelay","websocket","update","on","debug","reason","includes","err","attempt","setInterval","volatile","emit","withTimeout","alerts","removeAlert","setAlert","accessKeyId","token","updateEndpointMainPresence","__assign","mainPresence","dispatchMainPresence","conference","isActive","conferenceStartedFrom","connectedExtension","callerNum","extensionType","cause","toggleAvoidToShow","resetConference","viewType","extenConnected","updateExtension","deviceMap","key","user","push","associatedExtensions","conversations","dispatchExtensions","isEmpty","hasNonEmptyConversation","extConversations","dispatchConversations","updateConversations","dispatchQueueUpdate","dispatchQueueMemberUpdate","dispatchAlreadyLogin","dispatchServerReload","dispatchParkingUpdate","link","urlType","dispatchUrlCall","data","message","toggleSideViewVisible","screenShare","isJoiningScreenShare","room","roomId","isLeavingScreenShare","warn","dispatchDefaultDeviceUpdate","extensionInformations","objectComplete","updateCurrentDefaultDevice","checkMediaPermissions","conferenceId","conferenceUsers","usersList_1","usersList","updatedConferenceUsers_1","forEach","userId","muted","updateConferenceUsersList","updateConferenceId","voicemailInfo","streamingData","streaming","source","image","updateSourceImage","clearInterval","close","info","disconnect","connect","React","createElement","Fragment"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trunk.js","sources":["../../../src/lib/phone/trunk.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { store } from '../../store'\n\n/**\n * Checks if a number is from an external source (trunk) by verifying\n * if it's not an internal extension\n *\n * @param counterpartNum The number to check\n * @returns true if the call is from trunk (external), false if internal extension\n */\nexport function isFromTrunk(counterpartNum: string): boolean {\n const { extensions } = store.getState().users\n\n if (!extensions || !counterpartNum) {\n return false\n }\n\n // Check if the counterpartNum exists as an extension\n const isInternalExtension = Object.keys(extensions).includes(counterpartNum)\n\n // If it's not an internal extension, it's from trunk (external)\n return !isInternalExtension\n}\n"],"names":["counterpartNum","extensions","store","getState","users","Object","keys","includes"],"mappings":"8HAYM,SAAsBA,GAClB,IAAAC,EAAeC,EAAKA,MAACC,WAAWC,MAAKH,WAE7C,SAAKA,IAAeD,KAKQK,OAAOC,KAAKL,GAAYM,SAASP,EAI/D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extensions.js","sources":["../../../src/lib/user/extensions.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { UserExtensionTypes } from '../../types'\nimport { store } from '../../store'\nimport { ExtensionTypes } from '../../types'\n\n/**\n * Retrive the webrtc extensions for currentUser extensions\n *\n * @returns An extension object, an array of extension objects or null\n */\nexport function getWebrtcExtensions(): UserExtensionTypes | UserExtensionTypes[] | null {\n // Get endpoints currentUser store\n const { endpoints } = store.getState().currentUser\n if (endpoints?.extension && endpoints.extension.length > 0) {\n const webrtcExtensions = endpoints?.extension.filter((extension) => extension?.type === 'webrtc' || extension?.type === 'nethlink')\n return webrtcExtensions.length === 1\n ? webrtcExtensions[0]\n : webrtcExtensions.length > 1\n ? webrtcExtensions\n : null\n }\n return null\n}\n\n/**\n * Retrieve the data of the id extension passed as parameter\n *\n * @param id The extension id\n * @return The extension data with conversations\n */\nexport function getExtensionData(id: string): ExtensionTypes | null {\n const { extensions } = store.getState().users\n return extensions && extensions[id] ? extensions[id] : null\n}\n\n/**\n * Checks if all the extensions are free\n */\nexport function userTotallyFree() {\n const { extensions } = store.getState().users\n const { endpoints } = store.getState().currentUser\n // Check all extensions for conversations\n if (extensions && endpoints) {\n for (const extension of endpoints.extension) {\n if (extensions[extension.id] && extensions[extension.id].conversations) {\n if (Object.keys(extensions[extension.id].conversations).length > 0) {\n return false\n }\n }\n }\n }\n return true\n}\n\n/**\n * Retrieve the list of the extensions of the current user\n */\nexport function getExtensionsList(): string[] {\n const { endpoints } = store.getState().currentUser\n return endpoints?.extension.map((extension) => extension.id) || []\n}\n"],"names":["id","extensions","store","getState","users","endpoints","currentUser","extension","map","length","webrtcExtensions","filter","type","_i","_a","conversations","Object","keys"],"mappings":"
|
|
1
|
+
{"version":3,"file":"extensions.js","sources":["../../../src/lib/user/extensions.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { UserExtensionTypes } from '../../types'\nimport { store } from '../../store'\nimport { ExtensionTypes } from '../../types'\nimport { isFromTrunk } from '../phone/trunk'\n\n/**\n * Retrive the webrtc extensions for currentUser extensions\n *\n * @returns An extension object, an array of extension objects or null\n */\nexport function getWebrtcExtensions(): UserExtensionTypes | UserExtensionTypes[] | null {\n // Get endpoints currentUser store\n const { endpoints } = store.getState().currentUser\n if (endpoints?.extension && endpoints.extension.length > 0) {\n const webrtcExtensions = endpoints?.extension.filter(\n (extension) => extension?.type === 'webrtc' || extension?.type === 'nethlink',\n )\n return webrtcExtensions.length === 1\n ? webrtcExtensions[0]\n : webrtcExtensions.length > 1\n ? webrtcExtensions\n : null\n }\n return null\n}\n\n/**\n * Retrieve the data of the id extension passed as parameter\n *\n * @param id The extension id\n * @return The extension data with conversations\n */\nexport function getExtensionData(id: string): ExtensionTypes | null {\n const { extensions } = store.getState().users\n return extensions && extensions[id] ? extensions[id] : null\n}\n\n/**\n * Checks if all the extensions are free\n */\nexport function userTotallyFree() {\n const { extensions } = store.getState().users\n const { endpoints } = store.getState().currentUser\n // Check all extensions for conversations\n if (extensions && endpoints) {\n for (const extension of endpoints.extension) {\n if (extensions[extension.id] && extensions[extension.id].conversations) {\n if (Object.keys(extensions[extension.id].conversations).length > 0) {\n return false\n }\n }\n }\n }\n return true\n}\n\n/**\n * Retrieve the list of the extensions of the current user\n */\nexport function getExtensionsList(): string[] {\n const { endpoints } = store.getState().currentUser\n return endpoints?.extension.map((extension) => extension.id) || []\n}\n\nexport { isFromTrunk }\n"],"names":["id","extensions","store","getState","users","endpoints","currentUser","extension","map","length","webrtcExtensions","filter","type","_i","_a","conversations","Object","keys"],"mappings":"mIAmCM,SAA2BA,GACvB,IAAAC,EAAeC,EAAKA,MAACC,WAAWC,MAAKH,WAC7C,OAAOA,GAAcA,EAAWD,GAAMC,EAAWD,GAAM,IACzD,uCAyBU,IAAAK,EAAcH,EAAKA,MAACC,WAAWG,YAAWD,UAClD,OAAOA,eAAAA,EAAWE,UAAUC,KAAI,SAACD,GAAc,OAAAA,EAAUP,QAAO,EAClE,yCAlDU,IAAAK,EAAcH,EAAKA,MAACC,WAAWG,YAAWD,UAClD,IAAIA,aAAS,EAATA,EAAWE,YAAaF,EAAUE,UAAUE,OAAS,EAAG,CAC1D,IAAMC,EAAmBL,aAAS,EAATA,EAAWE,UAAUI,QAC5C,SAACJ,GAAc,MAAoB,YAApBA,aAAA,EAAAA,EAAWK,OAAyC,cAApBL,aAAA,EAAAA,EAAWK,KAA3C,IAEjB,OAAmC,IAA5BF,EAAiBD,OACpBC,EAAiB,GACjBA,EAAiBD,OAAS,EAC1BC,EACA,IACL,CACD,OAAO,IACT,qCAiBU,IAAAT,EAAeC,EAAKA,MAACC,WAAWC,MAAKH,WACrCI,EAAcH,EAAKA,MAACC,WAAWG,YAAWD,UAElD,GAAIJ,GAAcI,EAChB,IAAwB,IAAAQ,EAAA,EAAAC,EAAAT,EAAUE,UAAVM,EAAAC,EAAAL,OAAAI,IAAqB,CAAxC,IAAMN,EAASO,EAAAD,GAClB,GAAIZ,EAAWM,EAAUP,KAAOC,EAAWM,EAAUP,IAAIe,eACnDC,OAAOC,KAAKhB,EAAWM,EAAUP,IAAIe,eAAeN,OAAS,EAC/D,OAAO,CAGZ,CAEH,OAAO,CACT"}
|
package/dist/models/paramUrl.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var r=require("../node_modules/tslib/tslib.es6.js"),e=require("../node_modules/@rematch/core/dist/core.esm.js"),u={url:"",onlyQueues:!1,hasValidUrl:!1,openParamUrlType:"never",throughTrunk:!1},n=e.createModel()({state:u,reducers:{setParamUrl:function(r,e){return{url:e.url||"",onlyQueues:e.onlyQueues||!1,hasValidUrl:e.hasValidUrl||!1,openParamUrlType:e.openParamUrlType||r.openParamUrlType,throughTrunk:void 0!==e.throughTrunk?e.throughTrunk:r.throughTrunk}},setOpenParamUrlType:function(e,u){return r.__assign(r.__assign({},e),{openParamUrlType:u})},setThroughTrunk:function(e,u){return r.__assign(r.__assign({},e),{throughTrunk:u})},reset:function(){return r.__assign({},u)}}});exports.paramUrl=n;
|
|
2
2
|
//# sourceMappingURL=paramUrl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paramUrl.js","sources":["../../src/models/paramUrl.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { createModel } from '@rematch/core'\nimport type { RootModel } from '.'\n\nconst defaultState: ParamUrlTypes = {\n url: '',\n onlyQueues: false,\n hasValidUrl: false,\n openParamUrlType: 'never',\n}\n\nexport const paramUrl = createModel<RootModel>()({\n state: defaultState,\n reducers: {\n setParamUrl: (\n state,\n payload: {
|
|
1
|
+
{"version":3,"file":"paramUrl.js","sources":["../../src/models/paramUrl.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { createModel } from '@rematch/core'\nimport type { RootModel } from '.'\n\nconst defaultState: ParamUrlTypes = {\n url: '',\n onlyQueues: false,\n hasValidUrl: false,\n openParamUrlType: 'never',\n throughTrunk: false,\n}\n\nexport const paramUrl = createModel<RootModel>()({\n state: defaultState,\n reducers: {\n setParamUrl: (\n state,\n payload: {\n url?: string\n onlyQueues?: boolean\n hasValidUrl?: boolean\n openParamUrlType?: string\n throughTrunk?: boolean\n },\n ) => {\n return {\n url: payload.url || '',\n onlyQueues: payload.onlyQueues || false,\n hasValidUrl: payload.hasValidUrl || false,\n openParamUrlType: payload.openParamUrlType || state.openParamUrlType,\n throughTrunk:\n payload.throughTrunk !== undefined ? payload.throughTrunk : state.throughTrunk,\n }\n },\n setOpenParamUrlType: (state, payload: string) => {\n return {\n ...state,\n openParamUrlType: payload,\n }\n },\n setThroughTrunk: (state, payload: boolean) => {\n return {\n ...state,\n throughTrunk: payload,\n }\n },\n reset: () => {\n return {\n ...defaultState,\n }\n },\n },\n})\n\ninterface ParamUrlTypes {\n url: string\n onlyQueues: boolean\n hasValidUrl: boolean\n openParamUrlType: string\n throughTrunk: boolean\n}\n"],"names":["defaultState","url","onlyQueues","hasValidUrl","openParamUrlType","throughTrunk","paramUrl","createModel","state","reducers","setParamUrl","payload","undefined","setOpenParamUrlType","__assign","setThroughTrunk","reset"],"mappings":"oLAMMA,EAA8B,CAClCC,IAAK,GACLC,YAAY,EACZC,aAAa,EACbC,iBAAkB,QAClBC,cAAc,GAGHC,EAAWC,EAAWA,aAAXA,CAAyB,CAC/CC,MAAOR,EACPS,SAAU,CACRC,YAAa,SACXF,EACAG,GAQA,MAAO,CACLV,IAAKU,EAAQV,KAAO,GACpBC,WAAYS,EAAQT,aAAc,EAClCC,YAAaQ,EAAQR,cAAe,EACpCC,iBAAkBO,EAAQP,kBAAoBI,EAAMJ,iBACpDC,kBAC2BO,IAAzBD,EAAQN,aAA6BM,EAAQN,aAAeG,EAAMH,aAEvE,EACDQ,oBAAqB,SAACL,EAAOG,GAC3B,OAAAG,EAAAA,SAAAA,EAAAA,SAAA,GACKN,GAAK,CACRJ,iBAAkBO,GAErB,EACDI,gBAAiB,SAACP,EAAOG,GACvB,OAAAG,EAAAA,SAAAA,EAAAA,SAAA,GACKN,GAAK,CACRH,aAAcM,GAEjB,EACDK,MAAO,WACL,OAAAF,EAAAA,SAAA,GACKd,EAEN"}
|