@nethesis/phone-island 0.14.7 → 0.15.1

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 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"),c=require("./utils/genericFunctions/eventDispatch.js"),d=require("./utils/genericFunctions/localStorage.js"),l=require("./store/index.js"),u=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"),S=require("./utils/genericFunctions/isBackCallVisible.js"),I=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 D=w(n),L=function(w){var L=w.dataConfig,j=w.showAlways,b=void 0!==j&&j,q=w.uaType,y=p.Base64.atob(L||"").split(":"),x=y[0],k=y[1],C=y[2],_=y[3],T=y[4],P=y[5],A=y[6],V=n.useState(!1),O=V[0],z=V[1],N=n.useState(!1),U=N[0],F=N[1],R=n.useState(!1),W=R[0],J=R[1];n.useEffect((function(){var e=new Worker(h.default,{type:"module"});return e.onmessage=function(e){"wakeup"===e.data&&z(!0)},function(){e.terminate()}}),[]),n.useEffect((function(){W&&U&&(z(!1),F(!1),J(!1))}),[W,U]),r.useEventListener("phone-island-expand",(function(){l.store.dispatch.island.toggleIsOpen(!0),c.eventDispatch("phone-island-expanded",{})})),r.useEventListener("phone-island-compress",(function(){l.store.dispatch.island.toggleIsOpen(!1),c.eventDispatch("phone-island-compressed",{})})),r.useEventListener("phone-island-call-keypad-close",(function(){l.store.dispatch.island.setIslandView("call"),c.eventDispatch("phone-island-call-keypad-closed",{})})),r.useEventListener("phone-island-call-transfer-close",(function(){l.store.dispatch.island.setIslandView("call"),c.eventDispatch("phone-island-call-transfer-closed",{})})),r.useEventListener("phone-island-recording-close",(function(){l.store.dispatch.island.setIslandView(null),c.eventDispatch("phone-island-recording-closed",{})})),r.useEventListener("phone-island-audio-player-close",(function(){l.store.dispatch.island.setIslandView(null),c.eventDispatch("phone-island-audio-player-closed",{})})),r.useEventListener("phone-island-detach",(function(e){f.detach(),c.eventDispatch("phone-island-detached",{})})),r.useEventListener("phone-island-audio-input-change",(function(e){d.setJSONItem("phone-island-audio-input-device",{deviceId:e.deviceId}),c.eventDispatch("phone-island-audio-input-changed",{})})),r.useEventListener("phone-island-video-input-change",(function(e){d.setJSONItem("phone-island-video-input-device",{deviceId:e.deviceId}),c.eventDispatch("phone-island-video-input-changed",{})}));var B=n.useState(!0),H=B[0],M=B[1],G=n.useState(!0),K=G[0],Q=G[1];r.useEventListener("phone-island-audio-output-change",(function(e){K||(l.store.dispatch.island.setIslandView(null),l.store.dispatch.island.toggleAvoidToShow(!0),c.eventDispatch("phone-island-call-start",{number:"*43"})),setTimeout((function(){var n=l.store.getState().player.remoteAudio;null==n||n.current.setSinkId(e.deviceId).then((function(){console.info("Default audio output device change with success!"),d.setJSONItem("phone-island-audio-output-device",{deviceId:e.deviceId}),c.eventDispatch("phone-island-audio-output-changed",{}),c.eventDispatch("phone-island-call-end",{}),l.store.dispatch.island.toggleAvoidToShow(!1)})).catch((function(e){console.error("Default audio output device change error:",e),c.eventDispatch("phone-island-call-end",{}),l.store.dispatch.island.toggleAvoidToShow(!1)}))}),500)})),r.useEventListener("phone-island-presence-change",(function(e){u.changeOperatorStatus(e),c.eventDispatch("phone-island-presence-changed",{})})),r.useEventListener("phone-island-view-changed",(function(e){var n=null==e?void 0:e.viewType;l.store.dispatch.island.setIslandView(n)})),n.useEffect((function(){H&&(v.initI18n(),M(!1))}),[H]);var X=l.store.getState().player.remoteAudio;return n.useEffect((function(){var e;if(K&&X){var n=null===(e=d.getJSONItem("phone-island-audio-output-device"))||void 0===e?void 0:e.deviceId;c.eventDispatch("phone-island-audio-output-change",{deviceId:n}),Q(!1)}}),[K,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){l.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),c.eventDispatch("phone-island-default-device-changed",{})})),r.useEventListener("phone-island-alert",(function(e){l.store.dispatch.alerts.setAlert(e.toString())})),r.useEventListener("phone-island-check-connection",(function(){E.checkInternetConnection().then((function(e){e?c.eventDispatch("phone-island-internet-connected",{}):c.eventDispatch("phone-island-internet-disconnected",{})}))})),n.useEffect((function(){var e=setInterval((function(){E.checkInternetConnection().then((function(e){e?c.eventDispatch("phone-island-internet-connected",{}):c.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=l.store.getState().currentUser)||void 0===n?void 0:n.username,a=l.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 d=null===(s=e[o])||void 0===s?void 0:s.mainPresence;l.store.dispatch.currentUser.updateMainPresence(null===(i=e[o])||void 0===i?void 0:i.mainPresence),"online"===d&&"online"!==r&&c.eventDispatch("phone-island-call-ended",{})}})),r.useEventListener("phone-island-call-status",(function(){var e=l.store.getState().currentCall;console.log("Call status debug informations: ",e)})),r.useEventListener("phone-island-user-status",(function(){var e=l.store.getState().currentUser;console.log("User status debug informations: ",e)})),r.useEventListener("phone-island-all-users-status",(function(){var e=l.store.getState().users;console.log("Users status debug informations: ",e)})),r.useEventListener("phone-island-status",(function(){var e=l.store.getState().island;console.log("Phone island status debug informations: ",e)})),r.useEventListener("phone-island-webrtc-status",(function(){var e=l.store.getState().webrtc;console.log("Webrtc status debug informations: ",e)})),r.useEventListener("phone-island-player-status",(function(){var e=l.store.getState().player;console.log("Player status debug informations: ",e)})),r.useEventListener("phone-island-conference-status",(function(){var e=l.store.getState().conference;console.log("Webrtc status debug informations: ",e)})),r.useEventListener("phone-island-streaming-status",(function(){var e=l.store.getState().streaming;console.log("Streaming status debug informations: ",e)})),r.useEventListener("phone-island-player-force-stop",(function(){l.store.dispatch.player.reset(),console.log("Audio player is interrupted")})),r.useEventListener("phone-island-sideview-open",(function(){l.store.dispatch.island.toggleSideViewVisible(!0),c.eventDispatch("phone-island-sideview-opened",{})})),r.useEventListener("phone-island-sideview-close",(function(){l.store.dispatch.island.toggleSideViewVisible(!1),c.eventDispatch("phone-island-sideview-closed",{})})),r.useEventListener("phone-island-size-change",(function(n){var t=l.store.getState().island.sideViewIsVisible,s=n.sizeInformation,i=e.__assign(e.__assign({},s),{right:t?"42px":"0px",top:S.isBackCallActive()?"40px":"0px"});c.eventDispatch("phone-island-size-changed",{sizes:i})})),r.useEventListener("phone-island-call-ended",(function(){if("online"===l.store.getState().currentUser.mainPresence){c.eventDispatch("phone-island-size-change",{sizeInformation:{width:"0px",height:"0px"}}),c.eventDispatch("phone-island-sideview-close",{}),l.store.dispatch.island.resetIslandStore()}})),r.useEventListener("phone-island-conference-list-open",(function(){l.store.dispatch.island.toggleConferenceList(!0),c.eventDispatch("phone-island-conference-list-opened",{})})),r.useEventListener("phone-island-alert-removed",(function(e){var n=l.store.getState().alerts.status.activeAlertsCount,t=l.store.getState().island,s=t.view,i=t.previousView,o=l.store.getState().conference.isActive,a=l.store.getState().alerts.data,r=l.store.getState().currentCall,d=r.incoming,u=r.outgoing,p=r.accepted,h=null==e?void 0:e.type,v=r.incoming||r.outgoing||r.accepted||""!==r.conversationId;if(!(d||u||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){c.eventDispatch("phone-island-size-change",{sizeInformation:{width:"0px",height:"0px"}}),c.eventDispatch("phone-island-sideview-close",{}),l.store.dispatch.island.resetIslandStore()}})),r.useEventListener("phone-island-conference-list-close",(function(){l.store.dispatch.island.toggleConferenceList(!1),c.eventDispatch("phone-island-conference-list-closed",{})})),D.default.createElement(D.default.Fragment,null,D.default.createElement(I.default,{store:l.store},D.default.createElement(i.WebRTC,{hostName:x,sipExten:_,sipSecret:T,sipHost:P,sipPort:A,reload:O,reloadedCallback:function(){return F(!0)},uaType:q},D.default.createElement(a.RestAPI,{hostName:x,username:k,authToken:C},D.default.createElement(s.Socket,{hostName:x,username:k,authToken:C,reload:O,reloadedCallback:function(){return J(!0)},uaType:q},D.default.createElement(t.Events,{sipHost:P},D.default.createElement(o.Island,{showAlways:b,uaType:q})))))))};L.displayName="PhoneIsland",exports.PhoneIsland=L;
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),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=Object.keys(e)[0];if(n){var t=e[n].conversations,s=d.store.getState().paramUrl,i=d.store.getState().island.urlOpened;if(!s.hasValidUrl||i)return;if("answered"===s.openParamUrlType&&t&&Object.keys(t).length>0){var o=t[Object.keys(t)[0]];if((null==o?void 0:o.connected)&&"in"===(null==o?void 0:o.direction)){var a=s.onlyQueues||!1;!0===a&&!0===(null==o?void 0:o.throughQueue)?X(o.counterpartNum,o.counterpartName,o.owner,o.uniqueId):!1!==a||!0!==(null==o?void 0:o.throughTrunk)&&!0!==(null==o?void 0:o.throughQueue)||X(o.counterpartNum,o.counterpartName,o.owner,o.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;
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 { 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 [firstRenderI18n, setFirstRenderI18n] = useState(true)\n const [firstAudioOutputInit, setFirstAudioOutputInit] = useState(true)\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 //initialize i18n\n useEffect(() => {\n if (firstRenderI18n) {\n initI18n()\n setFirstRenderI18n(false)\n }\n }, [firstRenderI18n])\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 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-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 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 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","firstRenderI18n","setFirstRenderI18n","_g","firstAudioOutputInit","setFirstAudioOutputInit","toggleAvoidToShow","number","setTimeout","remoteAudioElement","getState","player","remoteAudio","current","setSinkId","then","console","info","catch","err","error","changeOperatorStatus","viewType","initI18n","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","userInformation","allUsersInformation","users","phoneIslandInformation","webrtcInformation","webrtc","playerInformation","conferenceInformation","conference","streamingInformation","streaming","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","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'\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 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\n if (username) {\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,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),t=require("react"),r=require("../services/user.js"),s=require("../lib/avatars/avatars.js");require("../node_modules/react-redux/es/index.js");var n=require("../services/astproxy.js"),u=require("../lib/user/extensions.js"),a=require("../node_modules/react-redux/es/hooks/useDispatch.js"),i=require("../node_modules/react-redux/es/hooks/useSelector.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=o(t);exports.RestAPI=function(o){var f=o.hostName,d=o.username,l=o.authToken,h=o.children,v=a.useDispatch(),_=i.useSelector((function(e){return e.fetchDefaults})).fetchReady;return t.useEffect((function(){d&&l&&f&&(v.fetchDefaults.updateFetchBaseURL("https://".concat(f,"/webrest")),v.fetchDefaults.updateFetchHeaders({Authorization:"".concat(d,":").concat(l)}),v.fetchDefaults.setFetchReady())}),[d,l,f]),t.useEffect((function(){_&&(function(){e.__awaiter(this,void 0,void 0,(function(){var t;return e.__generator(this,(function(s){switch(s.label){case 0:return[4,r.getCurrentUserInfo()];case 1:return(t=s.sent())&&(v.currentUser.updateCurrentUser(t),v.currentUser.setCurrentUserReady(!0),function(){e.__awaiter(this,void 0,void 0,(function(){var t,r;return e.__generator(this,(function(e){switch(e.label){case 0:return[4,n.getAllExtensions()];case 1:return(t=e.sent())&&(v.users.updateExtensions(t),r=u.getExtensionsList(),Object.values(t).filter((function(e){return r.includes(e.exten)})).forEach((function(e){return v.currentUser.updateConversations(e)}))),[2]}}))}))}()),[2]}}))}))}(),function(){e.__awaiter(this,void 0,void 0,(function(){var t;return e.__generator(this,(function(e){switch(e.label){case 0:return[4,r.getAllUsersEndpoints()];case 1:return(t=e.sent())&&v.users.updateEndpoints(t),[2]}}))}))}(),function(){e.__awaiter(this,void 0,void 0,(function(){var t;return e.__generator(this,(function(e){switch(e.label){case 0:return[4,r.getVideoSources()];case 1:return(t=e.sent())&&v.streaming.updateVideoSources(t),[2]}}))}))}())}),[_]),t.useLayoutEffect((function(){d&&_&&s.retrieveAvatars(d)}),[_,d]),c.default.createElement(c.default.Fragment,null,_&&h)};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),t=require("react"),r=require("../services/user.js"),s=require("../lib/avatars/avatars.js");require("../node_modules/react-redux/es/index.js");var n=require("../services/astproxy.js"),u=require("../lib/user/extensions.js"),a=require("../node_modules/react-redux/es/hooks/useDispatch.js"),i=require("../node_modules/react-redux/es/hooks/useSelector.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=o(t);exports.RestAPI=function(o){var l=o.hostName,f=o.username,d=o.authToken,h=o.children,p=a.useDispatch(),v=i.useSelector((function(e){return e.fetchDefaults})).fetchReady;return t.useEffect((function(){f&&d&&l&&(p.fetchDefaults.updateFetchBaseURL("https://".concat(l,"/webrest")),p.fetchDefaults.updateFetchHeaders({Authorization:"".concat(f,":").concat(d)}),p.fetchDefaults.setFetchReady())}),[f,d,l]),t.useEffect((function(){v&&(function(){e.__awaiter(this,void 0,void 0,(function(){var t;return e.__generator(this,(function(s){switch(s.label){case 0:return[4,r.getCurrentUserInfo()];case 1:return(t=s.sent())&&(p.currentUser.updateCurrentUser(t),p.currentUser.setCurrentUserReady(!0),t.settings&&t.settings.open_param_url?p.paramUrl.setOpenParamUrlType(t.settings.open_param_url):p.paramUrl.setOpenParamUrlType("never"),function(){e.__awaiter(this,void 0,void 0,(function(){var t,r;return e.__generator(this,(function(e){switch(e.label){case 0:return[4,n.getAllExtensions()];case 1:return(t=e.sent())&&(p.users.updateExtensions(t),r=u.getExtensionsList(),Object.values(t).filter((function(e){return r.includes(e.exten)})).forEach((function(e){return p.currentUser.updateConversations(e)}))),[2]}}))}))}()),[2]}}))}))}(),function(){e.__awaiter(this,void 0,void 0,(function(){var t;return e.__generator(this,(function(e){switch(e.label){case 0:return[4,r.getAllUsersEndpoints()];case 1:return(t=e.sent())&&p.users.updateEndpoints(t),[2]}}))}))}(),function(){e.__awaiter(this,void 0,void 0,(function(){var t;return e.__generator(this,(function(e){switch(e.label){case 0:return[4,r.getVideoSources()];case 1:return(t=e.sent())&&p.streaming.updateVideoSources(t),[2]}}))}))}())}),[v]),t.useLayoutEffect((function(){f&&v&&s.retrieveAvatars(f)}),[v,f]),c.default.createElement(c.default.Fragment,null,v&&h)};
2
2
  //# sourceMappingURL=RestAPI.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RestAPI.js","sources":["../../src/components/RestAPI.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, type FC, useEffect, useLayoutEffect } from 'react'\nimport { getCurrentUserInfo, getVideoSources } from '../services/user'\nimport { retrieveAvatars } from '../lib/avatars/avatars'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../store'\nimport { getAllExtensions } from '../services/astproxy'\nimport { getAllUsersEndpoints } from '../services/user'\nimport { getExtensionsList } from '../lib/user/extensions'\n\nexport const RestAPI: FC<RestAPIProps> = ({ hostName, username, authToken, children }) => {\n const dispatch = useDispatch<Dispatch>()\n const { fetchReady } = useSelector((state: RootState) => state.fetchDefaults)\n\n useEffect(() => {\n if (username && authToken && hostName) {\n // Initialize API defaults\n dispatch.fetchDefaults.updateFetchBaseURL(`https://${hostName}/webrest`)\n dispatch.fetchDefaults.updateFetchHeaders({\n Authorization: `${username}:${authToken}`,\n })\n dispatch.fetchDefaults.setFetchReady()\n }\n }, [username, authToken, hostName])\n\n useEffect(() => {\n // Get all extensions info and set to store\n async function initExtensions() {\n const extensions = await getAllExtensions()\n if (extensions) {\n dispatch.users.updateExtensions(extensions)\n // Update the current user conversations\n const currentUserExtensionsList = getExtensionsList()\n const extensionsData = Object.values(extensions).filter((extension) =>\n currentUserExtensionsList.includes(extension.exten),\n )\n // Update the user conversations to store\n extensionsData.forEach((extension) => dispatch.currentUser.updateConversations(extension))\n }\n }\n // Get users info and set to store\n async function initCurrentUser() {\n const userInfo = await getCurrentUserInfo()\n if (userInfo) {\n dispatch.currentUser.updateCurrentUser(userInfo)\n dispatch.currentUser.setCurrentUserReady(true)\n // Inizialize all extensions after user initialization\n initExtensions()\n }\n }\n // Get all users and endpoints info and set to store\n async function initUsersEndpoints() {\n const usersEndpoints = await getAllUsersEndpoints()\n if (usersEndpoints) {\n dispatch.users.updateEndpoints(usersEndpoints)\n }\n }\n // Get all streaming source info and set to store\n async function initVideoSources() {\n const videoSources: any = await getVideoSources()\n if (videoSources) {\n dispatch.streaming.updateVideoSources(videoSources)\n }\n }\n // Call the needed APIs on startup\n if (fetchReady) {\n initCurrentUser()\n initUsersEndpoints()\n initVideoSources()\n }\n }, [fetchReady])\n\n useLayoutEffect(() => {\n // Initialize avatars request it or get from storage\n if (username && fetchReady) {\n retrieveAvatars(username)\n }\n }, [fetchReady, username])\n\n return <>{fetchReady && children}</>\n}\n\ninterface RestAPIProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n}\n"],"names":["_a","hostName","username","authToken","children","dispatch","useDispatch","fetchReady","useSelector","state","fetchDefaults","useEffect","updateFetchBaseURL","concat","updateFetchHeaders","Authorization","setFetchReady","getCurrentUserInfo","userInfo","sent","currentUser","updateCurrentUser","setCurrentUserReady","getAllExtensions","extensions","users","updateExtensions","currentUserExtensionsList_1","getExtensionsList","Object","values","filter","extension","includes","exten","forEach","updateConversations","initExtensions","initCurrentUser","getAllUsersEndpoints","usersEndpoints","updateEndpoints","initUsersEndpoints","getVideoSources","videoSources","streaming","updateVideoSources","initVideoSources","useLayoutEffect","retrieveAvatars","React","createElement","Fragment"],"mappings":"2jBAYyC,SAACA,OAAEC,EAAQD,EAAAC,SAAEC,EAAQF,EAAAE,SAAEC,EAASH,EAAAG,UAAEC,EAAQJ,EAAAI,SAC3EC,EAAWC,EAAAA,cACTC,EAAeC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,4BAmE/D,OAjEAC,EAAAA,WAAU,WACJT,GAAYC,GAAaF,IAE3BI,EAASK,cAAcE,mBAAmB,WAAWC,OAAAZ,EAAkB,aACvEI,EAASK,cAAcI,mBAAmB,CACxCC,cAAe,GAAAF,OAAGX,EAAQ,KAAAW,OAAIV,KAEhCE,EAASK,cAAcM,gBAE1B,GAAE,CAACd,EAAUC,EAAWF,IAEzBU,EAAAA,WAAU,WAwCJJ,IAxBJ,0HACmB,MAAM,CAAA,EAAAU,EAAAA,oCAAjBC,EAAWlB,EAA0BmB,UAEzCd,EAASe,YAAYC,kBAAkBH,GACvCb,EAASe,YAAYE,qBAAoB,GAlB7C,4HACqB,MAAM,CAAA,EAAAC,EAAAA,kCAAnBC,EAAaxB,EAAwBmB,UAEzCd,EAASoB,MAAMC,iBAAiBF,GAE1BG,EAA4BC,EAAiBA,oBAC5BC,OAAOC,OAAON,GAAYO,QAAO,SAACC,GACvD,OAAAL,EAA0BM,SAASD,EAAUE,MAA7C,IAGaC,SAAQ,SAACH,GAAc,OAAA3B,EAASe,YAAYgB,oBAAoBJ,EAAzC,eAEzC,CAQGK,cAEH,CAiBCC,GAfF,0HACyB,MAAM,CAAA,EAAAC,EAAAA,sCAAvBC,EAAiBxC,EAA4BmB,SAEjDd,EAASoB,MAAMgB,gBAAgBD,aAElC,CAWCE,GATF,0HAC4B,MAAM,CAAA,EAAAC,EAAAA,iCAA1BC,EAAoB5C,EAAuBmB,SAE/Cd,EAASwC,UAAUC,mBAAmBF,aAEzC,CAKCG,GAEJ,GAAG,CAACxC,IAEJyC,EAAAA,iBAAgB,WAEV9C,GAAYK,GACd0C,EAAeA,gBAAC/C,EAEpB,GAAG,CAACK,EAAYL,IAETgD,EAAAA,QAAGC,cAAAD,EAAA,QAAAE,SAAA,KAAA7C,GAAcH,EAC1B"}
1
+ {"version":3,"file":"RestAPI.js","sources":["../../src/components/RestAPI.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, type FC, useEffect, useLayoutEffect } from 'react'\nimport { getCurrentUserInfo, getVideoSources } from '../services/user'\nimport { retrieveAvatars } from '../lib/avatars/avatars'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../store'\nimport { getAllExtensions } from '../services/astproxy'\nimport { getAllUsersEndpoints } from '../services/user'\nimport { getExtensionsList } from '../lib/user/extensions'\n\nexport const RestAPI: FC<RestAPIProps> = ({ hostName, username, authToken, children }) => {\n const dispatch = useDispatch<Dispatch>()\n const { fetchReady } = useSelector((state: RootState) => state.fetchDefaults)\n\n useEffect(() => {\n if (username && authToken && hostName) {\n // Initialize API defaults\n dispatch.fetchDefaults.updateFetchBaseURL(`https://${hostName}/webrest`)\n dispatch.fetchDefaults.updateFetchHeaders({\n Authorization: `${username}:${authToken}`,\n })\n dispatch.fetchDefaults.setFetchReady()\n }\n }, [username, authToken, hostName])\n\n useEffect(() => {\n // Get all extensions info and set to store\n async function initExtensions() {\n const extensions = await getAllExtensions()\n if (extensions) {\n dispatch.users.updateExtensions(extensions)\n // Update the current user conversations\n const currentUserExtensionsList = getExtensionsList()\n const extensionsData = Object.values(extensions).filter((extension) =>\n currentUserExtensionsList.includes(extension.exten),\n )\n // Update the user conversations to store\n extensionsData.forEach((extension) => dispatch.currentUser.updateConversations(extension))\n }\n }\n // Get users info and set to store\n async function initCurrentUser() {\n const userInfo = await getCurrentUserInfo()\n if (userInfo) {\n dispatch.currentUser.updateCurrentUser(userInfo)\n dispatch.currentUser.setCurrentUserReady(true)\n\n // Update open param URL type if it exists in paramurl store\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 // Inizialize all extensions after user initialization\n initExtensions()\n }\n }\n // Get all users and endpoints info and set to store\n async function initUsersEndpoints() {\n const usersEndpoints = await getAllUsersEndpoints()\n if (usersEndpoints) {\n dispatch.users.updateEndpoints(usersEndpoints)\n }\n }\n // Get all streaming source info and set to store\n async function initVideoSources() {\n const videoSources: any = await getVideoSources()\n if (videoSources) {\n dispatch.streaming.updateVideoSources(videoSources)\n }\n }\n // Call the needed APIs on startup\n if (fetchReady) {\n initCurrentUser()\n initUsersEndpoints()\n initVideoSources()\n }\n }, [fetchReady])\n\n useLayoutEffect(() => {\n // Initialize avatars request it or get from storage\n if (username && fetchReady) {\n retrieveAvatars(username)\n }\n }, [fetchReady, username])\n\n return <>{fetchReady && children}</>\n}\n\ninterface RestAPIProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n}\n"],"names":["_a","hostName","username","authToken","children","dispatch","useDispatch","fetchReady","useSelector","state","fetchDefaults","useEffect","updateFetchBaseURL","concat","updateFetchHeaders","Authorization","setFetchReady","getCurrentUserInfo","userInfo","sent","currentUser","updateCurrentUser","setCurrentUserReady","settings","open_param_url","paramUrl","setOpenParamUrlType","getAllExtensions","extensions","users","updateExtensions","currentUserExtensionsList_1","getExtensionsList","Object","values","filter","extension","includes","exten","forEach","updateConversations","initExtensions","initCurrentUser","getAllUsersEndpoints","usersEndpoints","updateEndpoints","initUsersEndpoints","getVideoSources","videoSources","streaming","updateVideoSources","initVideoSources","useLayoutEffect","retrieveAvatars","React","createElement","Fragment"],"mappings":"2jBAYyC,SAACA,OAAEC,EAAQD,EAAAC,SAAEC,EAAQF,EAAAE,SAAEC,EAASH,EAAAG,UAAEC,EAAQJ,EAAAI,SAC3EC,EAAWC,EAAAA,cACTC,EAAeC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,4BA2E/D,OAzEAC,EAAAA,WAAU,WACJT,GAAYC,GAAaF,IAE3BI,EAASK,cAAcE,mBAAmB,WAAWC,OAAAZ,EAAkB,aACvEI,EAASK,cAAcI,mBAAmB,CACxCC,cAAe,GAAAF,OAAGX,EAAQ,KAAAW,OAAIV,KAEhCE,EAASK,cAAcM,gBAE1B,GAAE,CAACd,EAAUC,EAAWF,IAEzBU,EAAAA,WAAU,WAgDJJ,IAhCJ,0HACmB,MAAM,CAAA,EAAAU,EAAAA,oCAAjBC,EAAWlB,EAA0BmB,UAEzCd,EAASe,YAAYC,kBAAkBH,GACvCb,EAASe,YAAYE,qBAAoB,GAGrCJ,EAASK,UAAYL,EAASK,SAASC,eACzCnB,EAASoB,SAASC,oBAAoBR,EAASK,SAASC,gBAExDnB,EAASoB,SAASC,oBAAoB,SAxB5C,4HACqB,MAAM,CAAA,EAAAC,EAAAA,kCAAnBC,EAAa5B,EAAwBmB,UAEzCd,EAASwB,MAAMC,iBAAiBF,GAE1BG,EAA4BC,EAAiBA,oBAC5BC,OAAOC,OAAON,GAAYO,QAAO,SAACC,GACvD,OAAAL,EAA0BM,SAASD,EAAUE,MAA7C,IAGaC,SAAQ,SAACH,GAAc,OAAA/B,EAASe,YAAYoB,oBAAoBJ,EAAzC,eAEzC,CAgBGK,cAEH,CAiBCC,GAfF,0HACyB,MAAM,CAAA,EAAAC,EAAAA,sCAAvBC,EAAiB5C,EAA4BmB,SAEjDd,EAASwB,MAAMgB,gBAAgBD,aAElC,CAWCE,GATF,0HAC4B,MAAM,CAAA,EAAAC,EAAAA,iCAA1BC,EAAoBhD,EAAuBmB,SAE/Cd,EAAS4C,UAAUC,mBAAmBF,aAEzC,CAKCG,GAEJ,GAAG,CAAC5C,IAEJ6C,EAAAA,iBAAgB,WAEVlD,GAAYK,GACd8C,EAAeA,gBAACnD,EAEpB,GAAG,CAACK,EAAYL,IAEToD,EAAAA,QAAGC,cAAAD,EAAA,QAAAE,SAAA,KAAAjD,GAAcH,EAC1B"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("react");require("../../node_modules/react-redux/es/index.js");var i=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),o=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js");require("../../node_modules/@babel/runtime/helpers/defineProperty.js"),require("../../node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../../node_modules/@babel/runtime/helpers/typeof.js"),require("../../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../../node_modules/react-i18next/dist/es/context.js");var r=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var n=require("../../lib/phone/call.js"),l=require("../CustomThemedTooltip.js"),s=require("./hooks/useSideViewLogic.js"),a=require("./components/SideViewButton.js"),u=require("../../services/user.js"),d=require("../../node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs.js"),c=require("../../node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs.js"),p=require("../../node_modules/react-redux/es/hooks/useSelector.js");function m(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var f=m(t),h={initial:{x:-76},animate:{x:4,transition:{duration:.1,ease:"easeOut"}},exit:{x:-76,transition:{duration:.1,ease:"easeIn"}}},v={borderTopRightRadius:"20px",borderBottomRightRadius:"20px",width:"80px",transformOrigin:"right"},b=t.memo((function(m){var b=m.isVisible,g=m.uaType,_=p.useSelector((function(e){return e.island})).isOpen,j=p.useSelector((function(e){return e.currentCall})).isRecording,x=r.useTranslation().t,T=t.useState(!1),S=T[0],y=T[1],q=t.useState(void 0),C=q[0],k=q[1],w=t.useState(void 0),E=w[0],V=w[1],R=s.useSideViewLogic(g,C,E),B=R.videoInputDevices,I=R.isVideoCallButtonVisible,A=R.canRecord,D=R.canShareScreen,P=R.canSwitchDevice,U=R.showUrlButton,O=R.isUrlButtonEnabled,L=R.goToVideoCall,M=R.goToScreenSharing,N=R.closeSideViewAndLaunchEvent;t.useEffect((function(){b&&e.__awaiter(void 0,void 0,void 0,(function(){var t,i,o,r;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,u.getParamUrl()];case 1:return t=e.sent(),i=(null==t?void 0:t.url)||"",o=i&&""!==i.trim(),y(o),k(null==t?void 0:t.only_queues),V(i),[3,3];case 2:return r=e.sent(),y(!1),k(void 0),V(void 0),console.error("Error fetching URL parameter:",r),[3,3];case 3:return[2]}}))}))}),[b]);var W=t.useCallback((function(){n.recordCurrentCall(j)}),[j]),F=t.useMemo((function(){return[A&&{key:"record",active:j,onClick:W,tooltipId:"tooltip-record",tooltipContent:j?x("Tooltip.Stop recording")||"":x("Tooltip.Record")||"",icon:j?i.faStop:o.faRecord},(null==B?void 0:B.length)>0&&{key:"video",onClick:L,tooltipId:"tooltip-video",tooltipContent:I?x("Tooltip.Enable camera")||"":x("Tooltip.Enable camera permission")||"",disabled:!I,icon:I?i.faVideo:i.faVideoSlash},D&&{key:"screen-share",onClick:M,tooltipId:"tooltip-screen-share",tooltipContent:x("Tooltip.Share screen")||"",icon:i.faDisplay},U&&S&&O&&{key:"url",onClick:function(){return N("openUrl")},tooltipId:"tooltip-open-url",tooltipContent:x("Tooltip.Open url")||"",icon:i.faArrowUpRightFromSquare},P&&{key:"switch-device",onClick:function(){return N("switchDevice")},tooltipId:"tooltip-switch-device",tooltipContent:x("Tooltip.Switch device")||"",icon:o.faArrowsRepeat}].filter((function(e){return Boolean(e)}))}),[A,j,W,x,null==B?void 0:B.length,L,I,D,M,U,S,O,N,P]),z=t.useMemo((function(){return"pi-absolute pi-h-full pi-bg-surfaceSidebar dark:pi-bg-surfaceSidebarDark pi-flex pi-flex-col pi-items-center pi-text-iconWhite dark:pi-text-iconWhiteDark -pi-mr-10 pi-right-0 -pi-z-10 pi-pointer-events-auto ".concat(_?"pi-py-6":"pi-py-4")}),[_]);return f.default.createElement(f.default.Fragment,null,f.default.createElement(d.AnimatePresence,null,b&&f.default.createElement(c.motion.div,e.__assign({className:z,style:v},h),f.default.createElement("div",{className:"pi-flex pi-flex-col pi-items-center pi-gap-3.5 pi-flex-1 pi-ml-9"},F.map((function(t){var i=t.key,o=e.__rest(t,["key"]);return f.default.createElement(a.SideViewButton,e.__assign({key:i},o))}))))),f.default.createElement(l.CustomThemedTooltip,{id:"tooltip-record",place:"left"}),f.default.createElement(l.CustomThemedTooltip,{id:"tooltip-video",place:"left"}),f.default.createElement(l.CustomThemedTooltip,{id:"tooltip-screen-share",place:"left"}),f.default.createElement(l.CustomThemedTooltip,{id:"tooltip-switch-device",place:"left"}),f.default.createElement(l.CustomThemedTooltip,{id:"tooltip-open-url",place:"left"}))}));b.displayName="SideView",exports.default=b;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("react");require("../../node_modules/react-redux/es/index.js");var i=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),o=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js");require("../../node_modules/@babel/runtime/helpers/defineProperty.js"),require("../../node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../../node_modules/@babel/runtime/helpers/typeof.js"),require("../../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../../node_modules/react-i18next/dist/es/context.js");var r=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var n=require("../../lib/phone/call.js"),l=require("../CustomThemedTooltip.js"),s=require("./hooks/useSideViewLogic.js"),a=require("./components/SideViewButton.js"),d=require("../../node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs.js"),u=require("../../node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs.js"),c=require("../../node_modules/react-redux/es/hooks/useSelector.js");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var m=p(t),f={initial:{x:-76},animate:{x:4,transition:{duration:.1,ease:"easeOut"}},exit:{x:-76,transition:{duration:.1,ease:"easeIn"}}},h={borderTopRightRadius:"20px",borderBottomRightRadius:"20px",width:"80px",transformOrigin:"right"},b=t.memo((function(p){var b=p.isVisible,v=p.uaType,x=c.useSelector((function(e){return e.island})).isOpen,T=c.useSelector((function(e){return e.currentCall})).isRecording,g=r.useTranslation().t,j=s.useSideViewLogic(v),y=j.videoInputDevices,C=j.isVideoCallButtonVisible,S=j.canRecord,_=j.canShareScreen,k=j.canSwitchDevice,q=j.isUrlButtonEnabled,w=j.hasValidUrl,E=j.goToVideoCall,V=j.goToScreenSharing,R=j.closeSideViewAndLaunchEvent,I=t.useCallback((function(){n.recordCurrentCall(T)}),[T]),A=t.useMemo((function(){return[S&&{key:"record",active:T,onClick:I,tooltipId:"tooltip-record",tooltipContent:T?g("Tooltip.Stop recording")||"":g("Tooltip.Record")||"",icon:T?i.faStop:o.faRecord},(null==y?void 0:y.length)>0&&{key:"video",onClick:E,tooltipId:"tooltip-video",tooltipContent:C?g("Tooltip.Enable camera")||"":g("Tooltip.Enable camera permission")||"",disabled:!C,icon:C?i.faVideo:i.faVideoSlash},_&&{key:"screen-share",onClick:V,tooltipId:"tooltip-screen-share",tooltipContent:g("Tooltip.Share screen")||"",icon:i.faDisplay},w&&q&&{key:"url",onClick:function(){return R("openUrl")},tooltipId:"tooltip-open-url",tooltipContent:g("Tooltip.Open url")||"",icon:i.faArrowUpRightFromSquare},k&&{key:"switch-device",onClick:function(){return R("switchDevice")},tooltipId:"tooltip-switch-device",tooltipContent:g("Tooltip.Switch device")||"",icon:o.faArrowsRepeat}].filter((function(e){return Boolean(e)}))}),[S,T,I,g,null==y?void 0:y.length,E,C,_,V,w,q,R,k]),B=t.useMemo((function(){return"pi-absolute pi-h-full pi-bg-surfaceSidebar dark:pi-bg-surfaceSidebarDark pi-flex pi-flex-col pi-items-center pi-text-iconWhite dark:pi-text-iconWhiteDark -pi-mr-10 pi-right-0 -pi-z-10 pi-pointer-events-auto ".concat(x?"pi-py-6":"pi-py-4")}),[x]);return m.default.createElement(m.default.Fragment,null,m.default.createElement(d.AnimatePresence,null,b&&m.default.createElement(u.motion.div,e.__assign({className:B,style:h},f),m.default.createElement("div",{className:"pi-flex pi-flex-col pi-items-center pi-gap-3.5 pi-flex-1 pi-ml-9"},A.map((function(t){var i=t.key,o=e.__rest(t,["key"]);return m.default.createElement(a.SideViewButton,e.__assign({key:i},o))}))))),m.default.createElement(l.CustomThemedTooltip,{id:"tooltip-record",place:"left"}),m.default.createElement(l.CustomThemedTooltip,{id:"tooltip-video",place:"left"}),m.default.createElement(l.CustomThemedTooltip,{id:"tooltip-screen-share",place:"left"}),m.default.createElement(l.CustomThemedTooltip,{id:"tooltip-switch-device",place:"left"}),m.default.createElement(l.CustomThemedTooltip,{id:"tooltip-open-url",place:"left"}))}));b.displayName="SideView",exports.default=b;
2
2
  //# sourceMappingURL=SideView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SideView.js","sources":["../../../src/components/SideView/SideView.tsx"],"sourcesContent":["import React, { FC, useCallback, useMemo, memo, useEffect, useState } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { RootState } from '../../store'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport {\n faArrowUpRightFromSquare,\n faDisplay,\n faStop,\n faVideo,\n faVideoSlash,\n} from '@fortawesome/free-solid-svg-icons'\nimport { faArrowsRepeat, faRecord } from '@nethesis/nethesis-solid-svg-icons'\nimport { useTranslation } from 'react-i18next'\nimport { recordCurrentCall } from '../../lib/phone/call'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\nimport { useSideViewLogic } from './hooks/useSideViewLogic'\nimport { SideViewButton } from './components/SideViewButton'\nimport { getParamUrl } from '../../services/user'\n\nconst ANIMATION_CONFIG = {\n initial: { x: -76 },\n animate: { x: 4, transition: { duration: 0.1, ease: 'easeOut' } },\n exit: { x: -76, transition: { duration: 0.1, ease: 'easeIn' } },\n} as const\n\nconst STYLE_CONFIG = {\n borderTopRightRadius: '20px',\n borderBottomRightRadius: '20px',\n width: '80px',\n transformOrigin: 'right',\n} as const\n\ninterface ButtonConfig {\n active?: boolean\n onClick: () => void | Promise<void>\n tooltipId: string\n tooltipContent: string\n icon: any\n disabled?: boolean\n}\n\ninterface ButtonConfigWithKey extends ButtonConfig {\n key: string\n}\n\nconst SideView: FC<SideViewTypes> = memo(({ isVisible, uaType }) => {\n const { isOpen } = useSelector((state: RootState) => state.island)\n const { isRecording } = useSelector((state: RootState) => state.currentCall)\n const { t } = useTranslation()\n const [hasValidUrl, setHasValidUrl] = useState(false)\n const [onlyQueues, setOnlyQueues] = useState<boolean | undefined>(undefined)\n const [urlParam, setUrlParam] = useState<string | undefined>(undefined)\n\n const {\n videoInputDevices,\n isVideoCallButtonVisible,\n canRecord,\n canShareScreen,\n canSwitchDevice,\n showUrlButton,\n isUrlButtonEnabled,\n goToVideoCall,\n goToScreenSharing,\n closeSideViewAndLaunchEvent,\n } = useSideViewLogic(uaType, onlyQueues, urlParam)\n useEffect(() => {\n const checkParamUrl = async () => {\n try {\n const paramUrlResponse: any = await getParamUrl()\n // Verify that the response contains a valid URL (not empty)\n const url = paramUrlResponse?.url || ''\n const isValid = url && url.trim() !== ''\n\n setHasValidUrl(isValid)\n setOnlyQueues(paramUrlResponse?.only_queues)\n setUrlParam(url)\n } catch (error) {\n setHasValidUrl(false)\n setOnlyQueues(undefined)\n setUrlParam(undefined)\n console.error('Error fetching URL parameter:', error)\n }\n }\n\n if (isVisible) {\n checkParamUrl()\n }\n }, [isVisible])\n\n const handleRecordClick = useCallback(() => {\n recordCurrentCall(isRecording)\n }, [isRecording])\n\n const buttonConfigs = useMemo(() => {\n const configs: (ButtonConfigWithKey | false)[] = [\n canRecord && {\n key: 'record',\n active: isRecording,\n onClick: handleRecordClick,\n tooltipId: 'tooltip-record',\n tooltipContent: isRecording ? t('Tooltip.Stop recording') || '' : t('Tooltip.Record') || '',\n icon: isRecording ? faStop : faRecord,\n },\n videoInputDevices?.length > 0 && {\n key: 'video',\n onClick: goToVideoCall,\n tooltipId: 'tooltip-video',\n tooltipContent: isVideoCallButtonVisible\n ? t('Tooltip.Enable camera') || ''\n : t('Tooltip.Enable camera permission') || '',\n disabled: !isVideoCallButtonVisible,\n icon: isVideoCallButtonVisible ? faVideo : faVideoSlash,\n },\n canShareScreen && {\n key: 'screen-share',\n onClick: goToScreenSharing,\n tooltipId: 'tooltip-screen-share',\n tooltipContent: t('Tooltip.Share screen') || '',\n icon: faDisplay,\n },\n showUrlButton &&\n hasValidUrl &&\n isUrlButtonEnabled && {\n key: 'url',\n onClick: () => closeSideViewAndLaunchEvent('openUrl'),\n tooltipId: 'tooltip-open-url',\n tooltipContent: t('Tooltip.Open url') || '',\n icon: faArrowUpRightFromSquare,\n },\n canSwitchDevice && {\n key: 'switch-device',\n onClick: () => closeSideViewAndLaunchEvent('switchDevice'),\n tooltipId: 'tooltip-switch-device',\n tooltipContent: t('Tooltip.Switch device') || '',\n icon: faArrowsRepeat,\n },\n ]\n\n return configs.filter((config): config is ButtonConfigWithKey => Boolean(config))\n }, [\n canRecord,\n isRecording,\n handleRecordClick,\n t,\n videoInputDevices?.length,\n goToVideoCall,\n isVideoCallButtonVisible,\n canShareScreen,\n goToScreenSharing,\n showUrlButton,\n hasValidUrl,\n isUrlButtonEnabled,\n closeSideViewAndLaunchEvent,\n canSwitchDevice,\n ])\n\n const containerClassName = useMemo(\n () =>\n `pi-absolute pi-h-full pi-bg-surfaceSidebar dark:pi-bg-surfaceSidebarDark pi-flex pi-flex-col pi-items-center pi-text-iconWhite dark:pi-text-iconWhiteDark -pi-mr-10 pi-right-0 -pi-z-10 pi-pointer-events-auto ${\n isOpen ? 'pi-py-6' : 'pi-py-4'\n }`,\n [isOpen],\n )\n\n return (\n <>\n <AnimatePresence>\n {isVisible && (\n <motion.div className={containerClassName} style={STYLE_CONFIG} {...ANIMATION_CONFIG}>\n <div className='pi-flex pi-flex-col pi-items-center pi-gap-3.5 pi-flex-1 pi-ml-9'>\n {buttonConfigs.map(({ key, ...config }) => (\n <SideViewButton key={key} {...config} />\n ))}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n\n <CustomThemedTooltip id='tooltip-record' place='left' />\n <CustomThemedTooltip id='tooltip-video' place='left' />\n <CustomThemedTooltip id='tooltip-screen-share' place='left' />\n <CustomThemedTooltip id='tooltip-switch-device' place='left' />\n <CustomThemedTooltip id='tooltip-open-url' place='left' />\n </>\n )\n})\n\nSideView.displayName = 'SideView'\n\nexport default SideView\n\ninterface SideViewTypes {\n isVisible: boolean\n uaType?: string\n}\n"],"names":["ANIMATION_CONFIG","initial","x","animate","transition","duration","ease","exit","STYLE_CONFIG","borderTopRightRadius","borderBottomRightRadius","width","transformOrigin","SideView","memo","_a","isVisible","uaType","isOpen","useSelector","state","island","isRecording","currentCall","t","useTranslation","_b","useState","hasValidUrl","setHasValidUrl","_c","undefined","onlyQueues","setOnlyQueues","_d","urlParam","setUrlParam","_e","useSideViewLogic","videoInputDevices","isVideoCallButtonVisible","canRecord","canShareScreen","canSwitchDevice","showUrlButton","isUrlButtonEnabled","goToVideoCall","goToScreenSharing","closeSideViewAndLaunchEvent","useEffect","__awaiter","getParamUrl","paramUrlResponse","sent","url","isValid","trim","only_queues","console","error","error_1","handleRecordClick","useCallback","recordCurrentCall","buttonConfigs","useMemo","key","active","onClick","tooltipId","tooltipContent","icon","faStop","faRecord","length","disabled","faVideo","faVideoSlash","faDisplay","faArrowUpRightFromSquare","faArrowsRepeat","filter","config","Boolean","containerClassName","concat","React","createElement","Fragment","AnimatePresence","motion","div","__assign","className","style","map","__rest","SideViewButton","CustomThemedTooltip","id","place","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"SideView.js","sources":["../../../src/components/SideView/SideView.tsx"],"sourcesContent":["import React, { FC, useCallback, useMemo, memo, useEffect, useState } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { RootState } from '../../store'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport {\n faArrowUpRightFromSquare,\n faDisplay,\n faStop,\n faVideo,\n faVideoSlash,\n} from '@fortawesome/free-solid-svg-icons'\nimport { faArrowsRepeat, faRecord } from '@nethesis/nethesis-solid-svg-icons'\nimport { useTranslation } from 'react-i18next'\nimport { recordCurrentCall } from '../../lib/phone/call'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\nimport { useSideViewLogic } from './hooks/useSideViewLogic'\nimport { SideViewButton } from './components/SideViewButton'\n\nconst ANIMATION_CONFIG = {\n initial: { x: -76 },\n animate: { x: 4, transition: { duration: 0.1, ease: 'easeOut' } },\n exit: { x: -76, transition: { duration: 0.1, ease: 'easeIn' } },\n} as const\n\nconst STYLE_CONFIG = {\n borderTopRightRadius: '20px',\n borderBottomRightRadius: '20px',\n width: '80px',\n transformOrigin: 'right',\n} as const\n\ninterface ButtonConfig {\n active?: boolean\n onClick: () => void | Promise<void>\n tooltipId: string\n tooltipContent: string\n icon: any\n disabled?: boolean\n}\n\ninterface ButtonConfigWithKey extends ButtonConfig {\n key: string\n}\n\nconst SideView: FC<SideViewTypes> = memo(({ isVisible, uaType }) => {\n const { isOpen } = useSelector((state: RootState) => state.island)\n const { isRecording } = useSelector((state: RootState) => state.currentCall)\n const { t } = useTranslation()\n\n const {\n videoInputDevices,\n isVideoCallButtonVisible,\n canRecord,\n canShareScreen,\n canSwitchDevice,\n isUrlButtonEnabled,\n hasValidUrl,\n goToVideoCall,\n goToScreenSharing,\n closeSideViewAndLaunchEvent,\n } = useSideViewLogic(uaType)\n\n const handleRecordClick = useCallback(() => {\n recordCurrentCall(isRecording)\n }, [isRecording])\n\n const buttonConfigs = useMemo(() => {\n const configs: (ButtonConfigWithKey | false)[] = [\n canRecord && {\n key: 'record',\n active: isRecording,\n onClick: handleRecordClick,\n tooltipId: 'tooltip-record',\n tooltipContent: isRecording ? t('Tooltip.Stop recording') || '' : t('Tooltip.Record') || '',\n icon: isRecording ? faStop : faRecord,\n },\n videoInputDevices?.length > 0 && {\n key: 'video',\n onClick: goToVideoCall,\n tooltipId: 'tooltip-video',\n tooltipContent: isVideoCallButtonVisible\n ? t('Tooltip.Enable camera') || ''\n : t('Tooltip.Enable camera permission') || '',\n disabled: !isVideoCallButtonVisible,\n icon: isVideoCallButtonVisible ? faVideo : faVideoSlash,\n },\n canShareScreen && {\n key: 'screen-share',\n onClick: goToScreenSharing,\n tooltipId: 'tooltip-screen-share',\n tooltipContent: t('Tooltip.Share screen') || '',\n icon: faDisplay,\n },\n hasValidUrl &&\n isUrlButtonEnabled && {\n key: 'url',\n onClick: () => closeSideViewAndLaunchEvent('openUrl'),\n tooltipId: 'tooltip-open-url',\n tooltipContent: t('Tooltip.Open url') || '',\n icon: faArrowUpRightFromSquare,\n },\n canSwitchDevice && {\n key: 'switch-device',\n onClick: () => closeSideViewAndLaunchEvent('switchDevice'),\n tooltipId: 'tooltip-switch-device',\n tooltipContent: t('Tooltip.Switch device') || '',\n icon: faArrowsRepeat,\n },\n ]\n\n return configs.filter((config): config is ButtonConfigWithKey => Boolean(config))\n }, [\n canRecord,\n isRecording,\n handleRecordClick,\n t,\n videoInputDevices?.length,\n goToVideoCall,\n isVideoCallButtonVisible,\n canShareScreen,\n goToScreenSharing,\n hasValidUrl,\n isUrlButtonEnabled,\n closeSideViewAndLaunchEvent,\n canSwitchDevice,\n ])\n\n const containerClassName = useMemo(\n () =>\n `pi-absolute pi-h-full pi-bg-surfaceSidebar dark:pi-bg-surfaceSidebarDark pi-flex pi-flex-col pi-items-center pi-text-iconWhite dark:pi-text-iconWhiteDark -pi-mr-10 pi-right-0 -pi-z-10 pi-pointer-events-auto ${isOpen ? 'pi-py-6' : 'pi-py-4'\n }`,\n [isOpen],\n )\n\n return (\n <>\n <AnimatePresence>\n {isVisible && (\n <motion.div className={containerClassName} style={STYLE_CONFIG} {...ANIMATION_CONFIG}>\n <div className='pi-flex pi-flex-col pi-items-center pi-gap-3.5 pi-flex-1 pi-ml-9'>\n {buttonConfigs.map(({ key, ...config }) => (\n <SideViewButton key={key} {...config} />\n ))}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n\n <CustomThemedTooltip id='tooltip-record' place='left' />\n <CustomThemedTooltip id='tooltip-video' place='left' />\n <CustomThemedTooltip id='tooltip-screen-share' place='left' />\n <CustomThemedTooltip id='tooltip-switch-device' place='left' />\n <CustomThemedTooltip id='tooltip-open-url' place='left' />\n </>\n )\n})\n\nSideView.displayName = 'SideView'\n\nexport default SideView\n\ninterface SideViewTypes {\n isVisible: boolean\n uaType?: string\n}\n"],"names":["ANIMATION_CONFIG","initial","x","animate","transition","duration","ease","exit","STYLE_CONFIG","borderTopRightRadius","borderBottomRightRadius","width","transformOrigin","SideView","memo","_a","isVisible","uaType","isOpen","useSelector","state","island","isRecording","currentCall","t","useTranslation","_b","useSideViewLogic","videoInputDevices","isVideoCallButtonVisible","canRecord","canShareScreen","canSwitchDevice","isUrlButtonEnabled","hasValidUrl","goToVideoCall","goToScreenSharing","closeSideViewAndLaunchEvent","handleRecordClick","useCallback","recordCurrentCall","buttonConfigs","useMemo","key","active","onClick","tooltipId","tooltipContent","icon","faStop","faRecord","length","disabled","faVideo","faVideoSlash","faDisplay","faArrowUpRightFromSquare","faArrowsRepeat","filter","config","Boolean","containerClassName","concat","React","createElement","Fragment","AnimatePresence","motion","div","__assign","className","style","map","__rest","SideViewButton","CustomThemedTooltip","id","place","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"),n=require("react");require("../../../node_modules/react-redux/es/index.js");var i=require("../../../store/index.js"),r=require("../../../utils/deviceUtils.js"),u=require("../../../lib/webrtc/janus.js"),o=require("../../../lib/devices/devices.js"),t=require("../../../utils/genericFunctions/eventDispatch.js"),l=require("../../../node_modules/react-redux/es/hooks/useDispatch.js"),s=require("../../../node_modules/react-redux/es/hooks/useSelector.js");exports.useSideViewLogic=function(d,c,a){var v,h,g,p,f,m,b,_,S=l.useDispatch(),w=s.useSelector((function(e){return e.currentUser})),j=s.useSelector((function(e){return e.users})),k=i.store.select.mediaDevices.videoInputDevices(i.store.getState()),q=n.useRef(u.default),C=s.useSelector((function(e){return e.currentUser.conversations})),D=n.useState([]),V=D[0],T=D[1],I=n.useState(!0),N=I[0],Q=I[1],x=n.useCallback((function(e){if(S.island.toggleSideViewVisible(!1),"openUrl"===e){var n=Object.values(C).find((function(e){return Object.keys(e).length>0})),i=n?Object.values(n)[0]:null;if((null==i?void 0:i.connected)&&"in"===(null==i?void 0:i.direction))if(c&&(null==i?void 0:i.throughQueue)){var r={counterpartNum:i.counterpartNum,counterpartName:i.counterpartName,owner:i.owner,uniqueId:i.uniqueId,throughQueue:i.throughQueue,throughTrunk:i.throughTrunk,direction:i.direction,connected:i.connected,url:a};t.eventDispatch("phone-island-url-parameter-opened",r)}else if(!c&&((null==i?void 0:i.throughTrunk)||(null==i?void 0:i.throughQueue))){r={counterpartNum:i.counterpartNum,counterpartName:i.counterpartName,owner:i.owner,uniqueId:i.uniqueId,throughQueue:i.throughQueue,throughTrunk:i.throughTrunk,direction:i.direction,connected:i.connected,url:a};t.eventDispatch("phone-island-url-parameter-opened",r)}}else null!==e&&S.island.setIslandView(e)}),[S.island,C,c,a]),O=n.useCallback((function(){return e.__awaiter(void 0,void 0,void 0,(function(){var n;return e.__generator(this,(function(e){switch(e.label){case 0:return k.length>0?[4,o.checkWebCamPermission()]:[3,2];case 1:return n=e.sent(),Q(n),[2,n];case 2:return Q(!1),[2,!1]}}))}))}),[k.length]),U=n.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,O()];case 1:return e.sent()&&(x("video"),i.store.dispatch.currentCall.updateCurrentCall({isLocalVideoEnabled:!0,isStartingVideoCall:!0})),[2]}}))}))}),[O,x]),y=n.useCallback((function(){x("video"),i.store.dispatch.screenShare.update({isStartingScreenShare:!0})}),[x]),E=n.useMemo((function(){var e;return(null===(e=null==w?void 0:w.profile)||void 0===e?void 0:e.macro_permissions)||{}}),[null===(v=null==w?void 0:w.profile)||void 0===v?void 0:v.macro_permissions]),M=n.useMemo((function(){var e,n,i,r,u,o,t;return{canRecord:(null===(i=null===(n=null===(e=null==E?void 0:E.settings)||void 0===e?void 0:e.permissions)||void 0===n?void 0:n.recording)||void 0===i?void 0:i.value)||!1,canShareScreen:"safari"!==q.current.webRTCAdapter.browserDetails.browser&&((null===(o=null===(u=null===(r=null==E?void 0:E.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==V?void 0:V.length)>0,showUrlButton:"nethlink"!==(null===(t=null==w?void 0:w.default_device)||void 0===t?void 0:t.type)&&"desktop"===d}}),[null===(p=null===(g=null===(h=null==E?void 0:E.settings)||void 0===h?void 0:h.permissions)||void 0===g?void 0:g.recording)||void 0===p?void 0:p.value,null===(b=null===(m=null===(f=null==E?void 0:E.nethvoice_cti)||void 0===f?void 0:f.permissions)||void 0===m?void 0:m.screen_sharing)||void 0===b?void 0:b.value,null==V?void 0:V.length,null===(_=null==w?void 0:w.default_device)||void 0===_?void 0:_.type,d]),A=n.useMemo((function(){var e=Object.values(C).find((function(e){return Object.keys(e).length>0})),n=e?Object.values(e)[0]:null;return!(!(null==n?void 0:n.connected)||"in"!==(null==n?void 0:n.direction))&&(!(!c||!(null==n?void 0:n.throughQueue))||!(c||!(null==n?void 0:n.throughTrunk)&&!(null==n?void 0:n.throughQueue)))}),[C,c]);return n.useEffect((function(){if(w&&j){var e=r.getAvailableDevices(w,j);T(e)}}),[w,j]),e.__assign(e.__assign({userInformation:w,availableDevices:V,videoInputDevices:k,isVideoCallButtonVisible:N,isUrlButtonEnabled:A},M),{goToVideoCall:U,goToScreenSharing:y,closeSideViewAndLaunchEvent:x})};
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"),t=require("../../../utils/genericFunctions/eventDispatch.js"),l=require("../../../node_modules/react-redux/es/hooks/useDispatch.js"),s=require("../../../node_modules/react-redux/es/hooks/useSelector.js");exports.useSideViewLogic=function(a){var d,c,v,h,f,p,g,b,m=l.useDispatch(),_=s.useSelector((function(e){return e.currentUser})),S=s.useSelector((function(e){return e.users})),j=s.useSelector((function(e){return e.paramUrl})),w=n.store.select.mediaDevices.videoInputDevices(n.store.getState()),k=i.useRef(u.default),q=s.useSelector((function(e){return e.currentUser.conversations})),C=i.useState([]),V=C[0],D=C[1],U=i.useState(!0),y=U[0],T=U[1],x=i.useCallback((function(e){if(m.island.toggleSideViewVisible(!1),"openUrl"===e){var i=Object.values(q).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};t.eventDispatch("phone-island-url-parameter-opened",r)}}else null!==e&&m.island.setIslandView(e)}),[m.island,q]),O=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 w.length>0?[4,o.checkWebCamPermission()]:[3,2];case 1:return i=e.sent(),T(i),[2,i];case 2:return T(!1),[2,!1]}}))}))}),[w.length]),Q=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,O()];case 1:return e.sent()&&(x("video"),n.store.dispatch.currentCall.updateCurrentCall({isLocalVideoEnabled:!0,isStartingVideoCall:!0})),[2]}}))}))}),[O,x]),I=i.useCallback((function(){x("video"),n.store.dispatch.screenShare.update({isStartingScreenShare:!0})}),[x]),P=i.useMemo((function(){var e;return(null===(e=null==_?void 0:_.profile)||void 0===e?void 0:e.macro_permissions)||{}}),[null===(d=null==_?void 0:_.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"!==k.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==V?void 0:V.length)>0}}),[null===(h=null===(v=null===(c=null==P?void 0:P.settings)||void 0===c?void 0:c.permissions)||void 0===v?void 0:v.recording)||void 0===h?void 0:h.value,null===(g=null===(p=null===(f=null==P?void 0:P.nethvoice_cti)||void 0===f?void 0:f.permissions)||void 0===p?void 0:p.screen_sharing)||void 0===g?void 0:g.value,null==V?void 0:V.length,null===(b=null==_?void 0:_.default_device)||void 0===b?void 0:b.type,a]),M=i.useMemo((function(){var e=Object.values(q).find((function(e){return Object.keys(e).length>0})),i=e?Object.values(e)[0]:null;if("never"===j.openParamUrlType)return!1;if(!(null==i?void 0:i.connected)||"in"!==(null==i?void 0:i.direction))return!1;if("button"===j.openParamUrlType){if(j.onlyQueues&&(null==i?void 0:i.throughQueue))return!0;if(!j.onlyQueues&&((null==i?void 0:i.throughTrunk)||(null==i?void 0:i.throughQueue)))return!0}return!1}),[q,j.onlyQueues,j.openParamUrlType]);return i.useEffect((function(){if(_&&S){var e=r.getAvailableDevices(_,S);D(e)}}),[_,S]),e.__assign(e.__assign({userInformation:_,availableDevices:V,videoInputDevices:w,isVideoCallButtonVisible:y,isUrlButtonEnabled:M,hasValidUrl:j.hasValidUrl},E),{goToVideoCall:Q,goToScreenSharing:I,closeSideViewAndLaunchEvent:x})};
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, onlyQueues?: boolean, urlParam?: string) => {\n const dispatch = useDispatch<Dispatch>()\n const userInformation = useSelector((state: RootState) => state.currentUser)\n const allUsersInformation = useSelector((state: RootState) => state.users)\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 if (onlyQueues && conversationData?.throughQueue) {\n // Open URL only for queue calls when onlyQueues is true\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 url: urlParam,\n }\n eventDispatch('phone-island-url-parameter-opened', eventData)\n } else if (\n !onlyQueues &&\n (conversationData?.throughTrunk || conversationData?.throughQueue)\n ) {\n // Open URL for both trunk and queue calls when onlyQueues is false\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 url: urlParam,\n }\n eventDispatch('phone-island-url-parameter-opened', eventData)\n }\n }\n } else if (viewType !== null) {\n dispatch.island.setIslandView(viewType)\n }\n },\n [dispatch.island, conversations, onlyQueues, urlParam],\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 showUrlButton: userInformation?.default_device?.type !== 'nethlink' && uaType === 'desktop',\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 (!conversationData?.connected || conversationData?.direction !== 'in') {\n return false\n }\n\n if (onlyQueues && conversationData?.throughQueue) {\n return true\n } else if (!onlyQueues && (conversationData?.throughTrunk || conversationData?.throughQueue)) {\n return true\n }\n\n return false\n }, [conversations, onlyQueues])\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 ...userCapabilities,\n goToVideoCall,\n goToScreenSharing,\n closeSideViewAndLaunchEvent,\n }\n}\n"],"names":["uaType","onlyQueues","urlParam","dispatch","useDispatch","userInformation","useSelector","state","currentUser","allUsersInformation","users","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","throughQueue","eventData","counterpartNum","counterpartName","owner","uniqueId","throughTrunk","url","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","showUrlButton","_g","default_device","type","_h","isUrlButtonEnabled","useEffect","devices","getAvailableDevices","__assign"],"mappings":"0lBAQgC,SAACA,EAAiBC,EAAsBC,uBAChEC,EAAWC,EAAAA,cACXC,EAAkBC,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMC,WAAN,IACpDC,EAAsBH,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMG,KAAN,IACxDC,EAAoBC,EAAKA,MAACC,OAAOC,aAAaH,kBAAkBC,EAAKA,MAACG,YACtEC,EAAQC,SAAYC,EAAAA,SACpBC,EAAgBb,eAAY,SAACC,GAAqB,OAAAA,EAAMC,YAAYW,aAAlB,IAElDC,EAA0CC,EAAAA,SAAS,IAAlDC,EAAgBF,EAAA,GAAEG,EAAmBH,EAAA,GACtCI,EAA0DH,EAAAA,UAAS,GAAlEI,EAAwBD,EAAA,GAAEE,EAA2BF,EAAA,GAEtDG,EAA8BC,eAClC,SAACC,GAEC,GADA1B,EAAS2B,OAAOC,uBAAsB,GACrB,YAAbF,EAAwB,CAC1B,IAAMG,EAAqBC,OAAOC,OAAOf,GAAegB,MACtD,SAACC,GAAS,OAAAH,OAAOI,KAAKD,GAAME,OAAS,CAAC,IAElCC,EAAmBP,EAAqBC,OAAOC,OAAOF,GAAoB,GAAK,KAErF,IAAIO,aAAA,EAAAA,EAAkBC,YAA6C,QAAhCD,aAAA,EAAAA,EAAkBE,WACnD,GAAIxC,IAAcsC,eAAAA,EAAkBG,cAAc,CAEhD,IAAMC,EAAY,CAChBC,eAAgBL,EAAiBK,eACjCC,gBAAiBN,EAAiBM,gBAClCC,MAAOP,EAAiBO,MACxBC,SAAUR,EAAiBQ,SAC3BL,aAAcH,EAAiBG,aAC/BM,aAAcT,EAAiBS,aAC/BP,UAAWF,EAAiBE,UAC5BD,UAAWD,EAAiBC,UAC5BS,IAAK/C,GAEPgD,gBAAc,oCAAqCP,EACpD,MAAM,IACJ1C,KACAsC,aAAA,EAAAA,EAAkBS,gBAAgBT,aAAA,EAAAA,EAAkBG,eACrD,CAEMC,EAAY,CAChBC,eAAgBL,EAAiBK,eACjCC,gBAAiBN,EAAiBM,gBAClCC,MAAOP,EAAiBO,MACxBC,SAAUR,EAAiBQ,SAC3BL,aAAcH,EAAiBG,aAC/BM,aAAcT,EAAiBS,aAC/BP,UAAWF,EAAiBE,UAC5BD,UAAWD,EAAiBC,UAC5BS,IAAK/C,GAEPgD,gBAAc,oCAAqCP,EACpD,CAEJ,MAAuB,OAAbd,GACT1B,EAAS2B,OAAOqB,cAActB,EAElC,GACA,CAAC1B,EAAS2B,OAAQX,EAAelB,EAAYC,IAGzCkD,EAAwBxB,eAAY,WAAA,OAAAyB,EAAAA,eAAA,OAAA,OAAA,GAAA,+EACpC,OAAA1C,EAAkB2B,OAAS,EACE,CAAA,EAAAgB,EAAqBA,yBADtB,CAAA,EAAA,UAG9B,OAFMC,EAAmBC,EAA6BC,OACtD/B,EAA4B6B,GAC5B,CAAA,EAAOA,UAGP,OADA7B,GAA4B,GAC5B,CAAA,GAAO,MAEV,GAAA,GAAE,CAACf,EAAkB2B,SAEhBoB,EAAgB9B,eAAY,WAAA,OAAAyB,EAAAA,eAAA,OAAA,OAAA,GAAA,yEACP,MAAM,CAAA,EAAAD,mBAANI,EAA6BC,SAEpD9B,EAA4B,SAC5Bf,QAAMT,SAASwD,YAAYC,kBAAkB,CAC3CC,qBAAqB,EACrBC,qBAAqB,YAG1B,GAAA,GAAE,CAACV,EAAuBzB,IAErBoC,EAAoBnC,EAAAA,aAAY,WACpCD,EAA4B,SAC5Bf,QAAMT,SAAS6D,YAAYC,OAAO,CAChCC,uBAAuB,GAE3B,GAAG,CAACvC,IAEEwC,EAAcC,WAClB,iBAAM,OAA0B,QAA1BZ,EAAAnD,aAAe,EAAfA,EAAiBgE,eAAS,IAAAb,OAAA,EAAAA,EAAAc,oBAAqB,CAAA,CAAE,GACvD,CAAyB,QAAxBd,EAAAnD,aAAA,EAAAA,EAAiBgE,eAAO,IAAAb,OAAA,EAAAA,EAAEc,oBAGvBC,EAAmBH,EAAAA,SACvB,6BAAM,MAAC,CACLI,WAA0D,QAA/CC,EAAkC,kBAAlCjB,EAAAW,aAAW,EAAXA,EAAaO,+BAAUP,mBAAW,IAAAQ,OAAA,EAAAA,EAAEC,iBAAW,IAAAH,OAAA,EAAAA,EAAAI,SAAS,EACnEC,eACyD,WAAvD9D,EAAM+D,QAAQC,cAAcC,eAAeC,mBAC1CC,EAAyC,QAAzCC,EAA0B,UAA1BjB,aAAA,EAAAA,EAAakB,qBAAa,IAAAC,OAAA,EAAAA,EAAEnB,mBAAa,IAAAiB,OAAA,EAAAA,EAAAG,qCAAgBV,SAAS,GACrEW,iBAAiBlE,eAAAA,EAAkBgB,QAAS,EAC5CmD,cAAyD,sBAA1CC,EAAArF,aAAA,EAAAA,EAAiBsF,qCAAgBC,OAAkC,YAAX5F,KAEzE,SACEsF,EAAoC,QAApCb,EAAuB,QAAvBE,EAAAR,aAAA,EAAAA,EAAaO,gBAAU,IAAAC,OAAA,EAAAA,EAAAR,mBAAa,IAAAM,OAAA,EAAAA,EAAAG,gCAAWC,cAC/Ca,EAAyC,QAAzCP,EAA4B,QAA5BC,EAAAjB,aAAA,EAAAA,EAAakB,qBAAe,IAAAD,OAAA,EAAAA,EAAAjB,mBAAa,IAAAgB,OAAA,EAAAA,EAAAI,qCAAgBV,MACzDvD,aAAA,EAAAA,EAAkBgB,eAClBuD,EAAAxF,aAAe,EAAfA,EAAiBsF,qCAAgBC,KACjC5F,IAIE8F,EAAqB1B,EAAAA,SAAQ,WACjC,IAAMpC,EAAqBC,OAAOC,OAAOf,GAAegB,MACtD,SAACC,GAAS,OAAAH,OAAOI,KAAKD,GAAME,OAAS,CAAC,IAElCC,EAAmBP,EAAqBC,OAAOC,OAAOF,GAAoB,GAAK,KAErF,UAAKO,aAAA,EAAAA,EAAkBC,YAA6C,QAAhCD,aAAgB,EAAhBA,EAAkBE,iBAIlDxC,KAAcsC,eAAAA,EAAkBG,kBAExBzC,KAAesC,aAAgB,EAAhBA,EAAkBS,iBAAgBT,aAAgB,EAAhBA,EAAkBG,eAKjF,GAAG,CAACvB,EAAelB,IASnB,OAPA8F,EAAAA,WAAU,WACR,GAAI1F,GAAmBI,EAAqB,CAC1C,IAAMuF,EAAUC,EAAAA,oBAAoB5F,EAAiBI,GACrDc,EAAoByE,EACrB,CACH,GAAG,CAAC3F,EAAiBI,IAGnByF,WAAAA,EAAAA,SAAA,CAAA7F,gBAAeA,EACfiB,iBAAgBA,EAChBX,kBAAiBA,EACjBc,yBAAwBA,EACxBqE,mBAAkBA,GACfvB,GAAgB,CACnBb,cAAaA,EACbK,kBAAiBA,EACjBpC,4BAA2BA,GAE/B"}
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,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("../utils/genericFunctions/eventDispatch.js"),i=require("../utils/genericFunctions/withTimeout.js"),c=require("../store/index.js"),s=require("../services/user.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"),v=require("../lib/user/extensions.js"),g=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 b=S(n);exports.Socket=function(S){var y=S.hostName,k=S.username,C=S.authToken,_=S.reload,w=S.reloadedCallback,D=S.children,N=S.uaType,j=h.useDispatch(),x=n.useRef(),q=n.useRef();f.useSelector((function(e){return e.currentUser}));return n.useEffect((function(){var n=function(e){if(e.counterpartNum&&g.isFromStreaming(e.counterpartNum)){j.island.setIsFromStreaming(!0),j.currentCall.updateCurrentCall({streamingSourceNumber:e.counterpartNum});var n=d.getStreamingSourceId(e.counterpartNum);n&&s.subscribe({id:n}).catch((function(e){return console.error("Error subscribing to streaming source:",e)}))}},f=function(e,t){var i=c.store.getState().currentCall,s=i.transferring,a=i.transferSwitching,l=i.transferCalls,d=c.store.getState().island.view;if(Object.keys(t).length>0){if(e.status){var p=c.store.getState().users.extensions,g=c.store.getState().currentUser.default_device,f=c.store.getState().currentUser,h=f.endpoints,S=f.username,b=c.store.getState().currentCall;b.incoming,b.outgoing;var y=function(){if(!p||!S)return!1;var e=Object.values(p).filter((function(e){return(null==e?void 0:e.username)===S}));return null==e?void 0:e.some((function(e){var n=null==h?void 0:h.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":n(t),("mobile"===N&&y()||"desktop"===N&&("webrtc"===(null==g?void 0:g.type)||void 0===(null==g?void 0:g.type)&&!y()||!y()&&"physical"===(null==g?void 0:g.type)))&&(j.currentCall.checkIncomingUpdatePlay({conversationId:t.id,displayName:r.getDisplayName(t),number:"".concat(t.counterpartNum),incomingSocket:!0,incoming:!0,username:"".concat(p&&p[t.counterpartNum]&&p[t.counterpartNum].username)||"",ownerExtension:t.owner}),c.store.dispatch.island.setIslandView("call"),o.eventDispatch("phone-island-call-ringing",{}));break;case"busy":if(n(t),"mobile"===N&&y()||"desktop"===N&&("webrtc"===(null==g?void 0:g.type)||void 0===(null==g?void 0:g.type)&&!y()||!y()&&"physical"===(null==g?void 0:g.type))){if(t&&t.connected)j.currentCall.updateCurrentCall({conversationId:t.id,displayName:r.getDisplayName(t),number:"".concat(t.counterpartNum),ownerExtension:t.owner,username:"".concat(p&&p[t.counterpartNum]&&p[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())}),c.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}),o.eventDispatch("phone-island-call-answered",{}),c.store.dispatch.player.stopAudioPlayer(),c.store.dispatch.player.setAudioPlayerLoop(!1)}(t),"call"===d&&s&&j.currentCall.updateCurrentCall({transferring:!1});if(l.length>1)j.currentCall.deleteTransferCalls();else if(t&&!t.connected){if(s&&!a){var k=l.find((function(e){return e.number===t.counterpartNum}));!t.connected&&k&&(j.currentCall.updateCurrentCall({transferring:!1}),o.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(p&&p[null==t?void 0:t.counterpartNum]&&p[null==t?void 0:t.counterpartNum].username)||""})}break;case"onhold":var C=t.counterpartName,_=t.counterpartNum,w=t.startTime;s&&_&&C&&"<unknown>"!==C&&(j.currentCall.addTransferCalls({type:"destination",displayName:r.getDisplayName(t),number:_,startTime:"".concat(m.getTimestampInSeconds())}),j.currentCall.updateCurrentCall({displayName:r.getDisplayName(t),number:_,startTime:"".concat(w/1e3),conversationId:t.id}),j.island.setIslandView("call"));break;case"busy_ringing":o.eventDispatch("phone-island-call-ringing",{})}}}else"online"==e.status&&v.userTotallyFree()&&(j.player.stopAudioPlayer(),j.currentCall.reset(),j.physicalRecorder.setRecordingTempVariable(!1),j.island.setIsFromStreaming(!1))};return q.current=t.io("https://"+y,{upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3}),j.websocket.update({socket:q.current}),q.current.on("connect",(function(){console.debug("Socket connected sid: ".concat(q.current.id)),o.eventDispatch("phone-island-socket-connected",{})})),q.current.on("disconnect",(function(e){console.debug("Socket disconnect - reason: ".concat(e)),e.includes("server disconnect")?o.eventDispatch("phone-island-server-disconnected",{}):o.eventDispatch("phone-island-socket-disconnected",{})})),q.current.io.on("error",(function(e){console.debug("Socket error: ",e)})),q.current.on("connect_error",(function(e){console.debug("Socket connect_error: ",e)})),q.current.io.on("reconnect",(function(e){o.eventDispatch("phone-island-socket-reconnected",{}),console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(q.current.id,")"))})),q.current.io.on("reconnect_attempt",(function(e){console.debug("Socket reconnect_attempt ".concat(e))})),q.current.io.on("reconnect_error",(function(e){console.debug("Socket reconnect_error: ",e)})),q.current.io.on("reconnect_failed",(function(){console.debug("Socket reconnect_failed")})),x.current=setInterval((function(){q.current.volatile.emit("ping",i.withTimeout((function(){j.alerts.removeAlert("socket_down"),o.eventDispatch("phone-island-alert-removed",{type:"socket_down"}),o.eventDispatch("phone-island-socket-disconnected-popup-close",{})}),(function(){j.alerts.setAlert("socket_down"),o.eventDispatch("phone-island-socket-disconnected-popup-open",{}),console.error("Socket is unreachable!")}),7e3))}),7e3),q.current.on("connect",(function(){console.debug("Socket on: "+y+" is connected!"),q.current.emit("login",{accessKeyId:"".concat(k),token:C,uaType:N})})),q.current.on("authe_ok",(function(){console.debug("Socket authentication success!"),o.eventDispatch("phone-island-socket-authorized",{})})),q.current.on("userMainPresenceUpdate",(function(n){c.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),p.dispatchMainPresence(n)})),q.current.on("extenHangup",(function(e){var n=c.store.getState().currentUser,t=n.endpoints,r=n.username,i=c.store.getState().conference,s=i.isActive,a=i.conferenceStartedFrom,u=c.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(){c.store.dispatch.island.toggleAvoidToShow(!1)}),500),s&&a!==r&&c.store.dispatch.conference.resetConference()):"normal_circuit_congestion"===(null==e?void 0:e.cause)&&s&&a===r?o.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||!s||a===r||c.store.dispatch.conference.resetConference(),"interworking"===(null==e?void 0:e.cause)&&s&&a===r&&"waitingConference"!==u&&o.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})})),q.current.on("extenConnected",(function(e){var n=c.store.getState().currentUser,t=n.default_device,r=n.endpoints,i=((null==r?void 0:r.extension)||[]).find((function(n){return n.id===e.extenConnected})),s=null==i?void 0:i.type;(("webrtc"===(null==t?void 0:t.type)||"nethlink"===(null==t?void 0:t.type))&&s&&("mobile"===s||"physical"===s)||"physical"===(null==t?void 0:t.type)&&s&&"physical"!==s)&&(c.store.dispatch.island.toggleAvoidToShow(!0),o.eventDispatch("phone-island-call-answered",{extensionType:s}))})),q.current.on("extenUpdate",(function(e){j.users.updateExtension(e);var n=c.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 s=t[e.username],a=e.conversations[Object.keys(e.conversations)[0]]||{};if(p.dispatchExtensions(e),l.isEmpty(a)){var u=null==s?void 0:s.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))})),q.current.on("queueUpdate",(function(e){p.dispatchQueueUpdate(e)})),q.current.on("queueMemberUpdate",(function(e){p.dispatchQueueMemberUpdate(e)})),q.current.on("takeOver",(function(){p.dispatchAlreadyLogin()})),q.current.on("serverReloaded",(function(){p.dispatchServerReload()})),q.current.on("parkingUpdate",(function(){p.dispatchParkingUpdate()})),q.current.on("actionNethLink",(function(e,n){p.dispatchUrlCall(e,n)})),q.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)}})),q.current.on("updateDefaultDevice",(function(n){p.dispatchDefaultDeviceUpdate(n);var t=c.store.getState().users.extensions,r=c.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],s=r.extension.find((function(e){return e.id===i.exten}));s&&(i=e.__assign(e.__assign({},i),{type:s.type})),c.store.dispatch.currentUser.updateCurrentDefaultDevice(i),a.checkMediaPermissions()}}})),q.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=c.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}))})),c.store.dispatch.conference.updateConferenceUsersList(i),c.store.dispatch.conference.updateConferenceId(t)}})),q.current.on("confBridgeEnd",(function(e){e&&(null==e?void 0:e.id)&&(c.store.dispatch.conference.resetConference(),o.eventDispatch("phone-island-conference-finished",{}))})),q.current.on("callWebrtc",(function(e){o.eventDispatch("phone-island-call-start",{number:e})})),q.current.on("newVoiceMessageCounter",(function(e){o.eventDispatch("phone-island-voicemail-received",{voicemailInfo:e})})),q.current.on("streamingSourceUpdate",(function(e){o.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){c.store.getState().island.isFromStreaming;var i=c.store.getState().currentCall.streamingSourceNumber;d.getStreamingSourceId(i),j.streaming.updateSourceImage({source:t,image:r})}}})),function(){clearInterval(x.current),q.current.close()}}),[y,k,C,N,j]),n.useEffect((function(){_&&(console.info("websocket reconnection"),q.current.disconnect(),q.current.connect(),w())}),[_]),b.default.createElement(b.default.Fragment,null,D)};
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)};
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 {\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\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 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 store.dispatch.island.setIslandView('call')\n\n eventDispatch('phone-island-call-ringing', {})\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 `${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","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","checkIncomingUpdatePlay","conversationId","displayName","getDisplayName","number","concat","incomingSocket","ownerExtension","owner","setIslandView","eventDispatch","connected","chDest","chSource","checkAcceptedUpdate","acceptedSocket","addTransferCalls","startTime","getTimestampInSeconds","direction","setTimeout","isPhysical","accepted","player","stopAudioPlayer","setAudioPlayerLoop","checkDefaultDeviceConversationActive","deleteTransferCalls","inTransferCalls","item","updateTransferSwitching","counterpartName","physicalRecorder","setRecordingTempVariable","checkOutgoingUpdate","outgoingSocket","outgoing","userTotallyFree","reset","current","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'\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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"}
package/dist/index.css CHANGED
@@ -1 +1 @@
1
- *,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }@supports (-moz-appearance:none){*{scrollbar-color:auto;scrollbar-width:auto}}.pi-pointer-events-none{pointer-events:none}.pi-pointer-events-auto{pointer-events:auto}.pi-fixed{position:fixed}.pi-absolute{position:absolute}.pi-relative{position:relative}.pi-inset-0{inset:0}.-pi-top-0\.5{top:-.125rem}.pi--right-6{right:-1.5rem}.pi-bottom-0{bottom:0}.pi-bottom-14{bottom:3.5rem}.pi-bottom-4{bottom:1rem}.pi-bottom-6{bottom:1.5rem}.pi-left-0{left:0}.pi-left-3{left:.75rem}.pi-right-0{right:0}.pi-right-5{right:1.25rem}.pi-right-6,.pi-right-\[1\.5rem\]{right:1.5rem}.pi-right-\[4\.5rem\]{right:4.5rem}.pi-top-0{top:0}.pi-top-1\/2{top:50%}.pi-top-32{top:8rem}.pi-top-5{top:1.25rem}.-pi-z-10{z-index:-10}.pi-z-1000{z-index:1000}.pi-z-20{z-index:20}.pi-z-30{z-index:30}.pi-z-50{z-index:50}.pi-col-span-2{grid-column:span 2/span 2}.pi-col-start-auto{grid-column-start:auto}.pi-mx-2{margin-left:.5rem;margin-right:.5rem}.pi-mx-auto{margin-left:auto;margin-right:auto}.-pi-mr-10{margin-right:-2.5rem}.-pi-mt-10{margin-top:-2.5rem}.pi--ml-28{margin-left:-7rem}.pi--mt-1{margin-top:-.25rem}.pi-mb-1{margin-bottom:.25rem}.pi-mb-2{margin-bottom:.5rem}.pi-mb-3{margin-bottom:.75rem}.pi-mb-4{margin-bottom:1rem}.pi-mb-5{margin-bottom:1.25rem}.pi-mb-6{margin-bottom:1.5rem}.pi-ml-1{margin-left:.25rem}.pi-ml-16{margin-left:4rem}.pi-ml-2{margin-left:.5rem}.pi-ml-4{margin-left:1rem}.pi-ml-5{margin-left:1.25rem}.pi-ml-6{margin-left:1.5rem}.pi-ml-9{margin-left:2.25rem}.pi-ml-\[1\.49rem\]{margin-left:1.49rem}.pi-ml-\[1\.4rem\]{margin-left:1.4rem}.pi-mr-1{margin-right:.25rem}.pi-mr-2{margin-right:.5rem}.pi-mr-3{margin-right:.75rem}.pi-mr-4{margin-right:1rem}.pi-mr-\[0\.27rem\]{margin-right:.27rem}.pi-mr-\[0\.28rem\]{margin-right:.28rem}.pi-mr-\[0\.42rem\]{margin-right:.42rem}.pi-mr-\[0\.4rem\]{margin-right:.4rem}.pi-mr-\[0\.57rem\]{margin-right:.57rem}.pi-mt-1{margin-top:.25rem}.pi-mt-12{margin-top:3rem}.pi-mt-2{margin-top:.5rem}.pi-mt-4{margin-top:1rem}.pi-mt-6{margin-top:1.5rem}.pi-mt-7{margin-top:1.75rem}.pi-mt-8{margin-top:2rem}.pi-mt-\[-12\.5rem\]{margin-top:-12.5rem}.pi-mt-\[-8\.5rem\]{margin-top:-8.5rem}.pi-mt-auto{margin-top:auto}.pi-block{display:block}.pi-inline-block{display:inline-block}.pi-flex{display:flex}.pi-inline-flex{display:inline-flex}.pi-grid{display:grid}.pi-hidden{display:none}.pi-h-1{height:.25rem}.pi-h-10{height:2.5rem}.pi-h-12{height:3rem}.pi-h-14{height:3.5rem}.pi-h-20{height:5rem}.pi-h-24{height:6rem}.pi-h-3{height:.75rem}.pi-h-32{height:8rem}.pi-h-4{height:1rem}.pi-h-40{height:10rem}.pi-h-5{height:1.25rem}.pi-h-6{height:1.5rem}.pi-h-8{height:2rem}.pi-h-\[10\.5rem\]{height:10.5rem}.pi-h-\[380px\]{height:380px}.pi-h-\[480px\]{height:480px}.pi-h-\[500px\]{height:500px}.pi-h-\[524px\]{height:524px}.pi-h-\[624px\]{height:624px}.pi-h-\[648px\]{height:648px}.pi-h-\[748px\]{height:748px}.pi-h-fit{height:fit-content}.pi-h-full{height:100%}.pi-h-screen{height:100vh}.pi-max-h-32{max-height:8rem}.pi-max-h-48{max-height:12rem}.pi-max-h-\[13\.125rem\]{max-height:13.125rem}.pi-max-h-\[9\.125rem\]{max-height:9.125rem}.pi-min-h-full{min-height:100%}.pi-w-0\.5{width:.125rem}.pi-w-1\/2{width:50%}.pi-w-10{width:2.5rem}.pi-w-12{width:3rem}.pi-w-14{width:3.5rem}.pi-w-16{width:4rem}.pi-w-24{width:6rem}.pi-w-3{width:.75rem}.pi-w-32{width:8rem}.pi-w-4{width:1rem}.pi-w-4\/5{width:80%}.pi-w-44{width:11rem}.pi-w-5{width:1.25rem}.pi-w-52{width:13rem}.pi-w-56{width:14rem}.pi-w-6{width:1.5rem}.pi-w-8{width:2rem}.pi-w-\[110rem\]{width:110rem}.pi-w-\[28\.2rem\]{width:28.2rem}.pi-w-\[600px\]{width:600px}.pi-w-\[780px\]{width:780px}.pi-w-\[936px\]{width:936px}.pi-w-fit{width:fit-content}.pi-w-full{width:100%}.pi-min-w-12{min-width:3rem}.pi-min-w-\[120px\]{min-width:120px}.pi-min-w-full{min-width:100%}.pi-max-w-16{max-width:4rem}.pi-max-w-32{max-width:8rem}.pi-max-w-48{max-width:12rem}.pi-max-w-56{max-width:14rem}.pi-max-w-60{max-width:15rem}.pi-max-w-\[100rem\]{max-width:100rem}.pi-max-w-\[45\%\]{max-width:45%}.pi-max-w-xs{max-width:20rem}.pi-flex-1{flex:1 1 0%}.pi-flex-none{flex:none}.pi-flex-shrink-0,.pi-shrink-0{flex-shrink:0}.pi-flex-grow{flex-grow:1}.pi-flex-grow-0{flex-grow:0}.pi-origin-top-right{transform-origin:top right}.-pi-translate-y-1\/2,.pi--translate-y-1\/2{--tw-translate-y:-50%}.-pi-translate-y-1\/2,.pi--rotate-45,.pi--translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi--rotate-45{--tw-rotate:-45deg}.pi-rotate-135{--tw-rotate:135deg}.pi-rotate-135,.pi-rotate-45{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-45{--tw-rotate:45deg}.pi-rotate-90{--tw-rotate:90deg}.pi-rotate-90,.pi-rotate-\[135deg\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-\[135deg\]{--tw-rotate:135deg}.pi-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pi-ping{75%,to{opacity:0;transform:scale(2)}}.pi-animate-ping{animation:pi-ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pi-pulse{50%{opacity:.5}}.pi-animate-pulse{animation:pi-pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes pi-scroll{0%{transform:translateX(0)}to{transform:translateX(-100%)}}.pi-animate-scroll-text{animation:pi-scroll 10s linear infinite}.pi-cursor-auto{cursor:auto}.pi-cursor-grab{cursor:grab}.pi-cursor-not-allowed{cursor:not-allowed}.pi-cursor-pointer{cursor:pointer}.pi-auto-cols-max{grid-auto-columns:max-content}.pi-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.pi-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.pi-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.pi-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.pi-grid-cols-\[1fr_84px\]{grid-template-columns:1fr 84px}.pi-grid-cols-\[24px_102px\]{grid-template-columns:24px 102px}.pi-grid-cols-\[24px_66px_24px\]{grid-template-columns:24px 66px 24px}.pi-grid-cols-\[256px_114px\]{grid-template-columns:256px 114px}.pi-grid-cols-\[48px_164px_48px\]{grid-template-columns:48px 164px 48px}.pi-grid-cols-\[48px_1fr\]{grid-template-columns:48px 1fr}.pi-grid-cols-\[48px_1fr_1px\]{grid-template-columns:48px 1fr 1px}.pi-grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.pi-grid-rows-\[72px_1fr\]{grid-template-rows:72px 1fr}.pi-flex-col{flex-direction:column}.pi-place-items-center{place-items:center}.pi-content-center{align-content:center}.pi-items-start{align-items:flex-start}.pi-items-center{align-items:center}.pi-justify-start{justify-content:flex-start}.pi-justify-end{justify-content:flex-end}.pi-justify-center{justify-content:center}.pi-justify-between{justify-content:space-between}.pi-justify-items-end{justify-items:end}.pi-justify-items-center{justify-items:center}.pi-gap-0{gap:0}.pi-gap-1{gap:.25rem}.pi-gap-2{gap:.5rem}.pi-gap-3{gap:.75rem}.pi-gap-3\.5{gap:.875rem}.pi-gap-4{gap:1rem}.pi-gap-5{gap:1.25rem}.pi-gap-6{gap:1.5rem}.pi-gap-7{gap:1.75rem}.pi-gap-y-5{row-gap:1.25rem}.pi-gap-y-6{row-gap:1.5rem}.pi--space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.25rem*var(--tw-space-x-reverse))}.pi-space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.25rem*var(--tw-space-x-reverse))}.pi-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.pi-space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-reverse))}.pi-space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.5rem*var(--tw-space-x-reverse))}.pi-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.pi-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.pi-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.pi-self-center{align-self:center}.pi-overflow-hidden{overflow:hidden}.pi-overflow-y-auto{overflow-y:auto}.pi-overflow-x-hidden{overflow-x:hidden}.pi-truncate{overflow:hidden;white-space:nowrap}.pi-text-ellipsis,.pi-truncate{text-overflow:ellipsis}.pi-whitespace-nowrap{white-space:nowrap}.pi-rounded{border-radius:.25rem}.pi-rounded-2xl{border-radius:1rem}.pi-rounded-3xl{border-radius:1.5rem}.pi-rounded-full{border-radius:9999px}.pi-rounded-lg{border-radius:.5rem}.pi-rounded-md{border-radius:.375rem}.pi-rounded-sm{border-radius:.125rem}.pi-rounded-xl{border-radius:.75rem}.pi-rounded-b-3xl{border-bottom-left-radius:1.5rem;border-bottom-right-radius:1.5rem}.pi-rounded-bl-\[20px\]{border-bottom-left-radius:20px}.pi-rounded-br-\[20px\]{border-bottom-right-radius:20px}.pi-rounded-tl-\[20px\]{border-top-left-radius:20px}.pi-rounded-tr-\[20px\]{border-top-right-radius:20px}.pi-border{border-width:1px}.pi-border-2{border-width:2px}.pi-border-4{border-width:4px}.pi-border-l-4{border-left-width:4px}.pi-border-t{border-top-width:1px}.pi-border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.pi-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.pi-border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.pi-border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.pi-border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity,1))}.pi-border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity,1))}.pi-border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity,1))}.pi-border-transparent{border-color:#0000}.pi-border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.pi-bg-black\/30{background-color:#0000004d}.pi-bg-emerald-100{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity,1))}.pi-bg-emerald-700{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity,1))}.pi-bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.pi-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.pi-bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.pi-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.pi-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.pi-bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.pi-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-gray-950{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.pi-bg-gray-950\/65{background-color:#030712a6}.pi-bg-green-200{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity,1))}.pi-bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity,1))}.pi-bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.pi-bg-phoneIslandActive{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-phoneIslandCall{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.pi-bg-phoneIslandClose{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.pi-bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity,1))}.pi-bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.pi-bg-rose-200{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity,1))}.pi-bg-secondaryNeutral{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-surfaceBackground{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.pi-bg-surfaceSidebar{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-transparent{background-color:initial}.pi-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.pi-bg-opacity-\[0\.99\]{--tw-bg-opacity:0.99}.pi-bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.pi-bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.pi-from-gray-100{--tw-gradient-from:#f3f4f6 var(--tw-gradient-from-position);--tw-gradient-to:#f3f4f600 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-from-transparent{--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-to-gray-50{--tw-gradient-to:#f9fafb var(--tw-gradient-to-position)}.pi-to-gray-700{--tw-gradient-to:#374151 var(--tw-gradient-to-position)}.pi-to-transparent{--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.pi-bg-cover{background-size:cover}.pi-fill-white{fill:#fff}.pi-object-cover{object-fit:cover}.pi-p-3{padding:.75rem}.pi-p-4{padding:1rem}.pi-p-6{padding:1.5rem}.pi-p-8{padding:2rem}.pi-px-0\.5{padding-left:.125rem;padding-right:.125rem}.pi-px-2{padding-left:.5rem;padding-right:.5rem}.pi-px-3{padding-left:.75rem;padding-right:.75rem}.pi-px-4{padding-left:1rem;padding-right:1rem}.pi-px-5{padding-left:1.25rem;padding-right:1.25rem}.pi-px-6{padding-left:1.5rem;padding-right:1.5rem}.pi-py-1{padding-bottom:.25rem;padding-top:.25rem}.pi-py-2{padding-bottom:.5rem;padding-top:.5rem}.pi-py-3{padding-bottom:.75rem;padding-top:.75rem}.pi-py-4{padding-bottom:1rem;padding-top:1rem}.pi-py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pi-pb-2{padding-bottom:.5rem}.pi-pb-3{padding-bottom:.75rem}.pi-pb-7{padding-bottom:1.75rem}.pi-pb-9{padding-bottom:2.25rem}.pi-pl-10{padding-left:2.5rem}.pi-pl-4{padding-left:1rem}.pi-pr-2{padding-right:.5rem}.pi-pr-4{padding-right:1rem}.pi-pt-1{padding-top:.25rem}.pi-pt-2{padding-top:.5rem}.pi-pt-3{padding-top:.75rem}.pi-pt-4{padding-top:1rem}.pi-text-center{text-align:center}.pi-font-\[inherit\]{font-family:inherit}.pi-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.pi-text-2xl{font-size:1.5rem;line-height:2rem}.pi-text-3xl{font-size:1.875rem;line-height:2.25rem}.pi-text-4xl{font-size:2.25rem;line-height:2.5rem}.pi-text-base{font-size:1rem;line-height:1.5rem}.pi-text-lg{font-size:1.125rem;line-height:1.75rem}.pi-text-sm{font-size:.875rem;line-height:1.25rem}.pi-text-xl{font-size:1.25rem;line-height:1.75rem}.pi-text-xs{font-size:.75rem;line-height:1rem}.pi-font-bold{font-weight:700}.pi-font-light{font-weight:300}.pi-font-medium{font-weight:500}.pi-font-normal{font-weight:400}.pi-font-semibold{font-weight:600}.pi-leading-4{line-height:1rem}.pi-leading-5{line-height:1.25rem}.pi-leading-6{line-height:1.5rem}.pi-leading-7{line-height:1.75rem}.pi-tracking-wide{letter-spacing:.025em}.pi-text-emerald-50{--tw-text-opacity:1;color:rgb(236 253 245/var(--tw-text-opacity,1))}.pi-text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity,1))}.pi-text-emerald-700{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity,1))}.pi-text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.pi-text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.pi-text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.pi-text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.pi-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.pi-text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.pi-text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.pi-text-gray-950{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity,1))}.pi-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.pi-text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.pi-text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.pi-text-iconWhite{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.pi-text-indigo-800{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity,1))}.pi-text-primaryInvert{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.pi-text-primaryNeutral{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.pi-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.pi-text-rose-700{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity,1))}.pi-text-secondaryNeutral{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.pi-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.pi-placeholder-gray-400::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}.pi-opacity-0{opacity:0}.pi-opacity-100{opacity:1}.pi-opacity-50{opacity:.5}.pi-opacity-60{opacity:.6}.pi-opacity-75{opacity:.75}.pi-shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.pi-shadow,.pi-shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.pi-shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.pi-shadow-md{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.pi-shadow-md,.pi-shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.pi-shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.pi-outline-none{outline:2px solid #0000;outline-offset:2px}.pi-ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.pi-ring-1,.pi-ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.pi-ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.pi-ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity,1))}.pi-ring-gray-700{--tw-ring-opacity:1;--tw-ring-color:rgb(55 65 81/var(--tw-ring-opacity,1))}.pi-ring-opacity-5{--tw-ring-opacity:0.05}.pi-transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-shadow{transition-duration:.15s;transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-duration-200{transition-duration:.2s}.pi-duration-300{transition-duration:.3s}.pi-scrollbar-thin::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}.pi-scrollbar-thin::-webkit-scrollbar-track:hover{background-color:var(--scrollbar-track-hover,var(--scrollbar-track))}.pi-scrollbar-thin::-webkit-scrollbar-track:active{background-color:var(--scrollbar-track-active,var(--scrollbar-track-hover,var(--scrollbar-track)))}.pi-scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}.pi-scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--scrollbar-thumb-hover,var(--scrollbar-thumb))}.pi-scrollbar-thin::-webkit-scrollbar-thumb:active{background-color:var(--scrollbar-thumb-active,var(--scrollbar-thumb-hover,var(--scrollbar-thumb)))}.pi-scrollbar-thin::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}.pi-scrollbar-thin::-webkit-scrollbar-corner:hover{background-color:var(--scrollbar-corner-hover,var(--scrollbar-corner))}.pi-scrollbar-thin::-webkit-scrollbar-corner:active{background-color:var(--scrollbar-corner-active,var(--scrollbar-corner-hover,var(--scrollbar-corner)))}@supports (-moz-appearance:none){.pi-scrollbar-thin{scrollbar-color:var(--scrollbar-thumb,initial) var(--scrollbar-track,initial);scrollbar-width:thin}}.pi-scrollbar-thin::-webkit-scrollbar{display:block;height:8px;width:8px}.pi-scrollbar-track-gray-200{--scrollbar-track:#e5e7eb!important}.pi-scrollbar-thumb-gray-400{--scrollbar-thumb:#9ca3af!important}.pi-scrollbar-track-rounded-full{--scrollbar-track-radius:9999px}.pi-scrollbar-thumb-rounded-full{--scrollbar-thumb-radius:9999px}.hover\:pi-bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.hover\:pi-bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.hover\:pi-bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.hover\:pi-bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.hover\:pi-bg-phoneIslandCallHover:hover{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity,1))}.hover\:pi-bg-phoneIslandCloseHover:hover{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity,1))}.hover\:pi-text-emerald-800:hover{--tw-text-opacity:1;color:rgb(6 95 70/var(--tw-text-opacity,1))}.hover\:pi-text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.hover\:pi-shadow-2xl:hover{--tw-shadow:0 25px 50px -12px #00000040;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:pi-z-20:focus{z-index:20}.focus\:pi-border-emerald-500:focus{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.focus\:pi-outline-0:focus{outline-width:0}.focus\:pi-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-0:focus,.focus\:pi-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:pi-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-emerald-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(16 185 129/var(--tw-ring-opacity,1))}.focus\:pi-ring-gray-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(156 163 175/var(--tw-ring-opacity,1))}.focus\:pi-ring-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.focus\:pi-ring-green-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity,1))}.focus\:pi-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:pi-ring-offset-gray-200:focus{--tw-ring-offset-color:#e5e7eb}.focus\:pi-ring-offset-white:focus{--tw-ring-offset-color:#fff}.active\:pi-border-emerald-500:active{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.enabled\:hover\:pi-border-gray-500:hover:enabled{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity,1))}.enabled\:hover\:pi-bg-gray-200\/70:hover:enabled{background-color:#e5e7ebb3}.enabled\:hover\:pi-bg-gray-300\/70:hover:enabled{background-color:#d1d5dbb3}.enabled\:hover\:pi-bg-gray-500:hover:enabled{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.enabled\:hover\:pi-bg-gray-600:hover:enabled{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.disabled\:pi-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:pi-opacity-40:disabled{opacity:.4}.disabled\:pi-opacity-75:disabled{opacity:.75}@media (min-width:768px){.md\:pi-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.dark\:pi-border-emerald-200:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:pi-border-gray-600:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.dark\:pi-border-gray-700:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.dark\:pi-bg-emerald-500:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.dark\:pi-bg-emerald-600:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-200:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-300:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-50:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-700:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-800:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-900:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-950:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.dark\:pi-bg-green-900:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity,1))}.dark\:pi-bg-phoneIslandActiveDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.dark\:pi-bg-phoneIslandCallDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.dark\:pi-bg-phoneIslandCloseDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.dark\:pi-bg-rose-900:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity,1))}.dark\:pi-bg-secondaryNeutralDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.dark\:pi-bg-surfaceBackgroundDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.dark\:pi-bg-surfaceSidebarDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:pi-bg-opacity-\[0\.99\]:where(.pi-dark,.pi-dark *){--tw-bg-opacity:0.99}.dark\:pi-from-black:where(.pi-dark,.pi-dark *){--tw-gradient-from:#000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.dark\:pi-to-gray-950:where(.pi-dark,.pi-dark *){--tw-gradient-to:#030712 var(--tw-gradient-to-position)}.dark\:pi-text-emerald-500:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity,1))}.dark\:pi-text-gray-100:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.dark\:pi-text-gray-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:pi-text-gray-300:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.dark\:pi-text-gray-400:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.dark\:pi-text-gray-50:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.dark\:pi-text-gray-600:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.dark\:pi-text-gray-900:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.dark\:pi-text-gray-950:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity,1))}.dark\:pi-text-green-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity,1))}.dark\:pi-text-green-400:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.dark\:pi-text-green-500:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.dark\:pi-text-iconWhiteDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:pi-text-indigo-300:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity,1))}.dark\:pi-text-primaryInvertDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.dark\:pi-text-primaryNeutralDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.dark\:pi-text-rose-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity,1))}.dark\:pi-text-secondaryNeutralDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:pi-text-white:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:pi-placeholder-gray-500:where(.pi-dark,.pi-dark *)::placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}.dark\:pi-scrollbar-track-gray-900:where(.pi-dark,.pi-dark *){--scrollbar-track:#111827!important}.dark\:hover\:pi-bg-gray-50:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-gray-600:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-gray-700:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-phoneIslandCallHoverDark:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-phoneIslandCloseHoverDark:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity,1))}.hover\:dark\:pi-bg-gray-800:where(.pi-dark,.pi-dark *):hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:hover\:pi-text-gray-50:hover:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.dark\:focus\:pi-border-emerald-200:focus:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:focus\:pi-ring-emerald-300:focus:where(.pi-dark,.pi-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(110 231 183/var(--tw-ring-opacity,1))}.dark\:focus\:pi-ring-gray-500:focus:where(.pi-dark,.pi-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.dark\:focus\:pi-ring-offset-black:focus:where(.pi-dark,.pi-dark *){--tw-ring-offset-color:#000}.dark\:active\:pi-border-emerald-200:active:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:active\:focus\:pi-border-emerald-200:focus:active:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:enabled\:hover\:pi-bg-gray-600:hover:enabled:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:enabled\:hover\:pi-bg-gray-600\/30:hover:enabled:where(.pi-dark,.pi-dark *){background-color:#4b55634d}.dark\:enabled\:hover\:pi-bg-gray-700\/30:hover:enabled:where(.pi-dark,.pi-dark *){background-color:#3741514d}
1
+ *,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }@supports (-moz-appearance:none){*{scrollbar-color:auto;scrollbar-width:auto}}.pi-pointer-events-none{pointer-events:none}.pi-pointer-events-auto{pointer-events:auto}.pi-fixed{position:fixed}.pi-absolute{position:absolute}.pi-relative{position:relative}.pi-inset-0{inset:0}.-pi-top-0\.5{top:-.125rem}.pi--right-6{right:-1.5rem}.pi-bottom-0{bottom:0}.pi-bottom-14{bottom:3.5rem}.pi-bottom-4{bottom:1rem}.pi-bottom-6{bottom:1.5rem}.pi-left-0{left:0}.pi-left-3{left:.75rem}.pi-right-0{right:0}.pi-right-5{right:1.25rem}.pi-right-6,.pi-right-\[1\.5rem\]{right:1.5rem}.pi-right-\[4\.5rem\]{right:4.5rem}.pi-top-0{top:0}.pi-top-1\/2{top:50%}.pi-top-32{top:8rem}.pi-top-5{top:1.25rem}.-pi-z-10{z-index:-10}.pi-z-1000{z-index:1000}.pi-z-20{z-index:20}.pi-z-30{z-index:30}.pi-z-50{z-index:50}.pi-col-span-2{grid-column:span 2/span 2}.pi-col-start-auto{grid-column-start:auto}.pi-mx-2{margin-left:.5rem;margin-right:.5rem}.pi-mx-auto{margin-left:auto;margin-right:auto}.-pi-mr-10{margin-right:-2.5rem}.-pi-mt-10{margin-top:-2.5rem}.pi--ml-28{margin-left:-7rem}.pi--mt-1{margin-top:-.25rem}.pi-mb-1{margin-bottom:.25rem}.pi-mb-2{margin-bottom:.5rem}.pi-mb-3{margin-bottom:.75rem}.pi-mb-4{margin-bottom:1rem}.pi-mb-5{margin-bottom:1.25rem}.pi-mb-6{margin-bottom:1.5rem}.pi-ml-1{margin-left:.25rem}.pi-ml-16{margin-left:4rem}.pi-ml-2{margin-left:.5rem}.pi-ml-3{margin-left:.75rem}.pi-ml-4{margin-left:1rem}.pi-ml-5{margin-left:1.25rem}.pi-ml-6{margin-left:1.5rem}.pi-ml-9{margin-left:2.25rem}.pi-ml-\[1\.49rem\]{margin-left:1.49rem}.pi-ml-\[1\.4rem\]{margin-left:1.4rem}.pi-mr-1{margin-right:.25rem}.pi-mr-2{margin-right:.5rem}.pi-mr-3{margin-right:.75rem}.pi-mr-4{margin-right:1rem}.pi-mr-\[0\.27rem\]{margin-right:.27rem}.pi-mr-\[0\.28rem\]{margin-right:.28rem}.pi-mr-\[0\.42rem\]{margin-right:.42rem}.pi-mr-\[0\.4rem\]{margin-right:.4rem}.pi-mr-\[0\.57rem\]{margin-right:.57rem}.pi-mt-1{margin-top:.25rem}.pi-mt-12{margin-top:3rem}.pi-mt-2{margin-top:.5rem}.pi-mt-4{margin-top:1rem}.pi-mt-6{margin-top:1.5rem}.pi-mt-7{margin-top:1.75rem}.pi-mt-8{margin-top:2rem}.pi-mt-\[-12\.5rem\]{margin-top:-12.5rem}.pi-mt-\[-8\.5rem\]{margin-top:-8.5rem}.pi-mt-auto{margin-top:auto}.pi-block{display:block}.pi-inline-block{display:inline-block}.pi-flex{display:flex}.pi-inline-flex{display:inline-flex}.pi-grid{display:grid}.pi-hidden{display:none}.pi-h-1{height:.25rem}.pi-h-10{height:2.5rem}.pi-h-12{height:3rem}.pi-h-14{height:3.5rem}.pi-h-20{height:5rem}.pi-h-24{height:6rem}.pi-h-3{height:.75rem}.pi-h-32{height:8rem}.pi-h-4{height:1rem}.pi-h-40{height:10rem}.pi-h-5{height:1.25rem}.pi-h-6{height:1.5rem}.pi-h-8{height:2rem}.pi-h-\[10\.5rem\]{height:10.5rem}.pi-h-\[380px\]{height:380px}.pi-h-\[480px\]{height:480px}.pi-h-\[500px\]{height:500px}.pi-h-\[524px\]{height:524px}.pi-h-\[624px\]{height:624px}.pi-h-\[648px\]{height:648px}.pi-h-\[748px\]{height:748px}.pi-h-fit{height:fit-content}.pi-h-full{height:100%}.pi-h-screen{height:100vh}.pi-max-h-32{max-height:8rem}.pi-max-h-48{max-height:12rem}.pi-max-h-\[13\.125rem\]{max-height:13.125rem}.pi-max-h-\[9\.125rem\]{max-height:9.125rem}.pi-min-h-full{min-height:100%}.pi-w-0\.5{width:.125rem}.pi-w-1\/2{width:50%}.pi-w-10{width:2.5rem}.pi-w-12{width:3rem}.pi-w-14{width:3.5rem}.pi-w-16{width:4rem}.pi-w-24{width:6rem}.pi-w-3{width:.75rem}.pi-w-32{width:8rem}.pi-w-4{width:1rem}.pi-w-4\/5{width:80%}.pi-w-44{width:11rem}.pi-w-5{width:1.25rem}.pi-w-52{width:13rem}.pi-w-56{width:14rem}.pi-w-6{width:1.5rem}.pi-w-8{width:2rem}.pi-w-\[110rem\]{width:110rem}.pi-w-\[28\.2rem\]{width:28.2rem}.pi-w-\[600px\]{width:600px}.pi-w-\[780px\]{width:780px}.pi-w-\[936px\]{width:936px}.pi-w-fit{width:fit-content}.pi-w-full{width:100%}.pi-min-w-12{min-width:3rem}.pi-min-w-\[120px\]{min-width:120px}.pi-min-w-full{min-width:100%}.pi-max-w-16{max-width:4rem}.pi-max-w-32{max-width:8rem}.pi-max-w-48{max-width:12rem}.pi-max-w-56{max-width:14rem}.pi-max-w-60{max-width:15rem}.pi-max-w-\[100rem\]{max-width:100rem}.pi-max-w-\[45\%\]{max-width:45%}.pi-max-w-xs{max-width:20rem}.pi-flex-1{flex:1 1 0%}.pi-flex-none{flex:none}.pi-flex-shrink-0,.pi-shrink-0{flex-shrink:0}.pi-flex-grow{flex-grow:1}.pi-flex-grow-0{flex-grow:0}.pi-origin-top-right{transform-origin:top right}.-pi-translate-y-1\/2,.pi--translate-y-1\/2{--tw-translate-y:-50%}.-pi-translate-y-1\/2,.pi--rotate-45,.pi--translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi--rotate-45{--tw-rotate:-45deg}.pi-rotate-135{--tw-rotate:135deg}.pi-rotate-135,.pi-rotate-45{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-45{--tw-rotate:45deg}.pi-rotate-90{--tw-rotate:90deg}.pi-rotate-90,.pi-rotate-\[135deg\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-\[135deg\]{--tw-rotate:135deg}.pi-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pi-ping{75%,to{opacity:0;transform:scale(2)}}.pi-animate-ping{animation:pi-ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pi-pulse{50%{opacity:.5}}.pi-animate-pulse{animation:pi-pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes pi-scroll{0%{transform:translateX(0)}to{transform:translateX(-100%)}}.pi-animate-scroll-text{animation:pi-scroll 10s linear infinite}.pi-cursor-auto{cursor:auto}.pi-cursor-grab{cursor:grab}.pi-cursor-not-allowed{cursor:not-allowed}.pi-cursor-pointer{cursor:pointer}.pi-auto-cols-max{grid-auto-columns:max-content}.pi-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.pi-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.pi-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.pi-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.pi-grid-cols-\[1fr_84px\]{grid-template-columns:1fr 84px}.pi-grid-cols-\[24px_102px\]{grid-template-columns:24px 102px}.pi-grid-cols-\[24px_66px_24px\]{grid-template-columns:24px 66px 24px}.pi-grid-cols-\[256px_114px\]{grid-template-columns:256px 114px}.pi-grid-cols-\[48px_164px_48px\]{grid-template-columns:48px 164px 48px}.pi-grid-cols-\[48px_1fr\]{grid-template-columns:48px 1fr}.pi-grid-cols-\[48px_1fr_1px\]{grid-template-columns:48px 1fr 1px}.pi-grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.pi-grid-rows-\[72px_1fr\]{grid-template-rows:72px 1fr}.pi-flex-col{flex-direction:column}.pi-place-items-center{place-items:center}.pi-content-center{align-content:center}.pi-items-start{align-items:flex-start}.pi-items-center{align-items:center}.pi-justify-start{justify-content:flex-start}.pi-justify-end{justify-content:flex-end}.pi-justify-center{justify-content:center}.pi-justify-between{justify-content:space-between}.pi-justify-items-end{justify-items:end}.pi-justify-items-center{justify-items:center}.pi-gap-0{gap:0}.pi-gap-1{gap:.25rem}.pi-gap-2{gap:.5rem}.pi-gap-3{gap:.75rem}.pi-gap-3\.5{gap:.875rem}.pi-gap-4{gap:1rem}.pi-gap-5{gap:1.25rem}.pi-gap-6{gap:1.5rem}.pi-gap-7{gap:1.75rem}.pi-gap-y-5{row-gap:1.25rem}.pi-gap-y-6{row-gap:1.5rem}.pi--space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.25rem*var(--tw-space-x-reverse))}.pi-space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.25rem*var(--tw-space-x-reverse))}.pi-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.pi-space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-reverse))}.pi-space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.5rem*var(--tw-space-x-reverse))}.pi-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.pi-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.pi-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.pi-self-center{align-self:center}.pi-overflow-hidden{overflow:hidden}.pi-overflow-y-auto{overflow-y:auto}.pi-overflow-x-hidden{overflow-x:hidden}.pi-truncate{overflow:hidden;white-space:nowrap}.pi-text-ellipsis,.pi-truncate{text-overflow:ellipsis}.pi-whitespace-nowrap{white-space:nowrap}.pi-rounded{border-radius:.25rem}.pi-rounded-2xl{border-radius:1rem}.pi-rounded-3xl{border-radius:1.5rem}.pi-rounded-full{border-radius:9999px}.pi-rounded-lg{border-radius:.5rem}.pi-rounded-md{border-radius:.375rem}.pi-rounded-sm{border-radius:.125rem}.pi-rounded-xl{border-radius:.75rem}.pi-rounded-b-3xl{border-bottom-left-radius:1.5rem;border-bottom-right-radius:1.5rem}.pi-rounded-bl-\[20px\]{border-bottom-left-radius:20px}.pi-rounded-br-\[20px\]{border-bottom-right-radius:20px}.pi-rounded-tl-\[20px\]{border-top-left-radius:20px}.pi-rounded-tr-\[20px\]{border-top-right-radius:20px}.pi-border{border-width:1px}.pi-border-2{border-width:2px}.pi-border-4{border-width:4px}.pi-border-l-4{border-left-width:4px}.pi-border-t{border-top-width:1px}.pi-border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.pi-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.pi-border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.pi-border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.pi-border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity,1))}.pi-border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity,1))}.pi-border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity,1))}.pi-border-transparent{border-color:#0000}.pi-border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.pi-bg-black\/30{background-color:#0000004d}.pi-bg-emerald-100{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity,1))}.pi-bg-emerald-700{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity,1))}.pi-bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.pi-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.pi-bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.pi-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.pi-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.pi-bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.pi-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-gray-950{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.pi-bg-gray-950\/65{background-color:#030712a6}.pi-bg-green-200{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity,1))}.pi-bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity,1))}.pi-bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.pi-bg-phoneIslandActive{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-phoneIslandCall{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.pi-bg-phoneIslandClose{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.pi-bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity,1))}.pi-bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.pi-bg-rose-200{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity,1))}.pi-bg-secondaryNeutral{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-surfaceBackground{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.pi-bg-surfaceSidebar{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-transparent{background-color:initial}.pi-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.pi-bg-opacity-\[0\.99\]{--tw-bg-opacity:0.99}.pi-bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.pi-bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.pi-from-gray-100{--tw-gradient-from:#f3f4f6 var(--tw-gradient-from-position);--tw-gradient-to:#f3f4f600 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-from-transparent{--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-to-gray-50{--tw-gradient-to:#f9fafb var(--tw-gradient-to-position)}.pi-to-gray-700{--tw-gradient-to:#374151 var(--tw-gradient-to-position)}.pi-to-transparent{--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.pi-bg-cover{background-size:cover}.pi-fill-white{fill:#fff}.pi-object-cover{object-fit:cover}.pi-p-3{padding:.75rem}.pi-p-4{padding:1rem}.pi-p-6{padding:1.5rem}.pi-p-8{padding:2rem}.pi-px-0\.5{padding-left:.125rem;padding-right:.125rem}.pi-px-2{padding-left:.5rem;padding-right:.5rem}.pi-px-3{padding-left:.75rem;padding-right:.75rem}.pi-px-4{padding-left:1rem;padding-right:1rem}.pi-px-5{padding-left:1.25rem;padding-right:1.25rem}.pi-px-6{padding-left:1.5rem;padding-right:1.5rem}.pi-py-1{padding-bottom:.25rem;padding-top:.25rem}.pi-py-2{padding-bottom:.5rem;padding-top:.5rem}.pi-py-3{padding-bottom:.75rem;padding-top:.75rem}.pi-py-4{padding-bottom:1rem;padding-top:1rem}.pi-py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pi-pb-2{padding-bottom:.5rem}.pi-pb-3{padding-bottom:.75rem}.pi-pb-7{padding-bottom:1.75rem}.pi-pb-9{padding-bottom:2.25rem}.pi-pl-10{padding-left:2.5rem}.pi-pl-4{padding-left:1rem}.pi-pr-2{padding-right:.5rem}.pi-pr-4{padding-right:1rem}.pi-pt-1{padding-top:.25rem}.pi-pt-2{padding-top:.5rem}.pi-pt-3{padding-top:.75rem}.pi-pt-4{padding-top:1rem}.pi-text-center{text-align:center}.pi-font-\[inherit\]{font-family:inherit}.pi-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.pi-text-2xl{font-size:1.5rem;line-height:2rem}.pi-text-3xl{font-size:1.875rem;line-height:2.25rem}.pi-text-4xl{font-size:2.25rem;line-height:2.5rem}.pi-text-base{font-size:1rem;line-height:1.5rem}.pi-text-lg{font-size:1.125rem;line-height:1.75rem}.pi-text-sm{font-size:.875rem;line-height:1.25rem}.pi-text-xl{font-size:1.25rem;line-height:1.75rem}.pi-text-xs{font-size:.75rem;line-height:1rem}.pi-font-bold{font-weight:700}.pi-font-light{font-weight:300}.pi-font-medium{font-weight:500}.pi-font-normal{font-weight:400}.pi-font-semibold{font-weight:600}.pi-leading-4{line-height:1rem}.pi-leading-5{line-height:1.25rem}.pi-leading-6{line-height:1.5rem}.pi-leading-7{line-height:1.75rem}.pi-tracking-wide{letter-spacing:.025em}.pi-text-emerald-50{--tw-text-opacity:1;color:rgb(236 253 245/var(--tw-text-opacity,1))}.pi-text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity,1))}.pi-text-emerald-700{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity,1))}.pi-text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.pi-text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.pi-text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.pi-text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.pi-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.pi-text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.pi-text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.pi-text-gray-950{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity,1))}.pi-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.pi-text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.pi-text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.pi-text-iconWhite{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.pi-text-indigo-800{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity,1))}.pi-text-primaryInvert{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.pi-text-primaryNeutral{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.pi-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.pi-text-rose-700{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity,1))}.pi-text-secondaryNeutral{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.pi-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.pi-placeholder-gray-400::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}.pi-opacity-0{opacity:0}.pi-opacity-100{opacity:1}.pi-opacity-50{opacity:.5}.pi-opacity-60{opacity:.6}.pi-opacity-75{opacity:.75}.pi-shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.pi-shadow,.pi-shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.pi-shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.pi-shadow-md{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.pi-shadow-md,.pi-shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.pi-shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.pi-outline-none{outline:2px solid #0000;outline-offset:2px}.pi-ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.pi-ring-1,.pi-ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.pi-ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.pi-ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity,1))}.pi-ring-gray-700{--tw-ring-opacity:1;--tw-ring-color:rgb(55 65 81/var(--tw-ring-opacity,1))}.pi-ring-opacity-5{--tw-ring-opacity:0.05}.pi-transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-shadow{transition-duration:.15s;transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-duration-200{transition-duration:.2s}.pi-duration-300{transition-duration:.3s}.pi-scrollbar-thin::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}.pi-scrollbar-thin::-webkit-scrollbar-track:hover{background-color:var(--scrollbar-track-hover,var(--scrollbar-track))}.pi-scrollbar-thin::-webkit-scrollbar-track:active{background-color:var(--scrollbar-track-active,var(--scrollbar-track-hover,var(--scrollbar-track)))}.pi-scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}.pi-scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--scrollbar-thumb-hover,var(--scrollbar-thumb))}.pi-scrollbar-thin::-webkit-scrollbar-thumb:active{background-color:var(--scrollbar-thumb-active,var(--scrollbar-thumb-hover,var(--scrollbar-thumb)))}.pi-scrollbar-thin::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}.pi-scrollbar-thin::-webkit-scrollbar-corner:hover{background-color:var(--scrollbar-corner-hover,var(--scrollbar-corner))}.pi-scrollbar-thin::-webkit-scrollbar-corner:active{background-color:var(--scrollbar-corner-active,var(--scrollbar-corner-hover,var(--scrollbar-corner)))}@supports (-moz-appearance:none){.pi-scrollbar-thin{scrollbar-color:var(--scrollbar-thumb,initial) var(--scrollbar-track,initial);scrollbar-width:thin}}.pi-scrollbar-thin::-webkit-scrollbar{display:block;height:8px;width:8px}.pi-scrollbar-track-gray-200{--scrollbar-track:#e5e7eb!important}.pi-scrollbar-thumb-gray-400{--scrollbar-thumb:#9ca3af!important}.pi-scrollbar-track-rounded-full{--scrollbar-track-radius:9999px}.pi-scrollbar-thumb-rounded-full{--scrollbar-thumb-radius:9999px}.hover\:pi-bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.hover\:pi-bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.hover\:pi-bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.hover\:pi-bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.hover\:pi-bg-phoneIslandCallHover:hover{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity,1))}.hover\:pi-bg-phoneIslandCloseHover:hover{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity,1))}.hover\:pi-text-emerald-800:hover{--tw-text-opacity:1;color:rgb(6 95 70/var(--tw-text-opacity,1))}.hover\:pi-text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.hover\:pi-shadow-2xl:hover{--tw-shadow:0 25px 50px -12px #00000040;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:pi-z-20:focus{z-index:20}.focus\:pi-border-emerald-500:focus{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.focus\:pi-outline-0:focus{outline-width:0}.focus\:pi-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-0:focus,.focus\:pi-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:pi-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-emerald-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(16 185 129/var(--tw-ring-opacity,1))}.focus\:pi-ring-gray-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(156 163 175/var(--tw-ring-opacity,1))}.focus\:pi-ring-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.focus\:pi-ring-green-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity,1))}.focus\:pi-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:pi-ring-offset-gray-200:focus{--tw-ring-offset-color:#e5e7eb}.focus\:pi-ring-offset-white:focus{--tw-ring-offset-color:#fff}.active\:pi-border-emerald-500:active{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.enabled\:hover\:pi-border-gray-500:hover:enabled{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity,1))}.enabled\:hover\:pi-bg-gray-200\/70:hover:enabled{background-color:#e5e7ebb3}.enabled\:hover\:pi-bg-gray-300\/70:hover:enabled{background-color:#d1d5dbb3}.enabled\:hover\:pi-bg-gray-500:hover:enabled{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.enabled\:hover\:pi-bg-gray-600:hover:enabled{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.disabled\:pi-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:pi-opacity-40:disabled{opacity:.4}.disabled\:pi-opacity-75:disabled{opacity:.75}@media (min-width:768px){.md\:pi-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.dark\:pi-border-emerald-200:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:pi-border-gray-600:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.dark\:pi-border-gray-700:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.dark\:pi-bg-emerald-500:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.dark\:pi-bg-emerald-600:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-200:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-300:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-50:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-700:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-800:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-900:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-950:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.dark\:pi-bg-green-900:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity,1))}.dark\:pi-bg-phoneIslandActiveDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.dark\:pi-bg-phoneIslandCallDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.dark\:pi-bg-phoneIslandCloseDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.dark\:pi-bg-rose-900:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity,1))}.dark\:pi-bg-secondaryNeutralDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.dark\:pi-bg-surfaceBackgroundDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.dark\:pi-bg-surfaceSidebarDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:pi-bg-opacity-\[0\.99\]:where(.pi-dark,.pi-dark *){--tw-bg-opacity:0.99}.dark\:pi-from-black:where(.pi-dark,.pi-dark *){--tw-gradient-from:#000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.dark\:pi-to-gray-950:where(.pi-dark,.pi-dark *){--tw-gradient-to:#030712 var(--tw-gradient-to-position)}.dark\:pi-text-emerald-500:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity,1))}.dark\:pi-text-gray-100:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.dark\:pi-text-gray-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:pi-text-gray-300:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.dark\:pi-text-gray-400:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.dark\:pi-text-gray-50:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.dark\:pi-text-gray-600:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.dark\:pi-text-gray-900:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.dark\:pi-text-gray-950:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity,1))}.dark\:pi-text-green-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity,1))}.dark\:pi-text-green-400:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.dark\:pi-text-green-500:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.dark\:pi-text-iconWhiteDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:pi-text-indigo-300:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity,1))}.dark\:pi-text-primaryInvertDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.dark\:pi-text-primaryNeutralDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.dark\:pi-text-rose-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity,1))}.dark\:pi-text-secondaryNeutralDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:pi-text-white:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:pi-placeholder-gray-500:where(.pi-dark,.pi-dark *)::placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}.dark\:pi-scrollbar-track-gray-900:where(.pi-dark,.pi-dark *){--scrollbar-track:#111827!important}.dark\:hover\:pi-bg-gray-50:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-gray-600:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-gray-700:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-phoneIslandCallHoverDark:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-phoneIslandCloseHoverDark:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity,1))}.hover\:dark\:pi-bg-gray-800:where(.pi-dark,.pi-dark *):hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:hover\:pi-text-gray-50:hover:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.dark\:focus\:pi-border-emerald-200:focus:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:focus\:pi-ring-emerald-300:focus:where(.pi-dark,.pi-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(110 231 183/var(--tw-ring-opacity,1))}.dark\:focus\:pi-ring-gray-500:focus:where(.pi-dark,.pi-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.dark\:focus\:pi-ring-offset-black:focus:where(.pi-dark,.pi-dark *){--tw-ring-offset-color:#000}.dark\:active\:pi-border-emerald-200:active:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:active\:focus\:pi-border-emerald-200:focus:active:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:enabled\:hover\:pi-bg-gray-600:hover:enabled:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:enabled\:hover\:pi-bg-gray-600\/30:hover:enabled:where(.pi-dark,.pi-dark *){background-color:#4b55634d}.dark\:enabled\:hover\:pi-bg-gray-700\/30:hover:enabled:where(.pi-dark,.pi-dark *){background-color:#3741514d}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./player.js"),r=require("./webrtc.js"),s=require("./currentCall.js"),a=require("./currentUser.js"),i=require("./fetchDefaults.js"),t=require("./island.js"),c=require("./avatars.js"),u=require("./users.js"),n=require("./alerts.js"),l=require("./motions.js"),o=require("./audioBars.js"),d=require("./recorder.js"),j=require("./listen.js"),q=require("./darkTheme.js"),m=require("./physicalRecorder.js"),h=require("./screenShare.js"),f=require("./websocket.js"),p=require("./mediaDevices.js"),v=require("./conference.js"),b=require("./streaming.js"),y={player:e.player,webrtc:r.webrtc,conference:v.conference,currentCall:s.currentCall,currentUser:a.currentUser,fetchDefaults:i.fetchDefaults,island:t.island,avatars:c.avatars,users:u.users,alerts:n.alerts,motions:l.motions,audioBars:o.audioBars,recorder:d.recorder,listen:j.listen,darkTheme:q.darkTheme,screenShare:h.screenShare,websocket:f.websocket,physicalRecorder:m.physicalRecorder,mediaDevices:p.mediaDevices,streaming:b.streaming};exports.models=y;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./player.js"),r=require("./webrtc.js"),s=require("./currentCall.js"),a=require("./currentUser.js"),i=require("./fetchDefaults.js"),t=require("./island.js"),u=require("./paramUrl.js"),c=require("./avatars.js"),l=require("./users.js"),n=require("./alerts.js"),o=require("./motions.js"),j=require("./audioBars.js"),d=require("./recorder.js"),q=require("./listen.js"),m=require("./darkTheme.js"),h=require("./physicalRecorder.js"),p=require("./screenShare.js"),f=require("./websocket.js"),v=require("./mediaDevices.js"),b=require("./conference.js"),y=require("./streaming.js"),k={player:e.player,webrtc:r.webrtc,conference:b.conference,currentCall:s.currentCall,currentUser:a.currentUser,fetchDefaults:i.fetchDefaults,island:t.island,paramUrl:u.paramUrl,avatars:c.avatars,users:l.users,alerts:n.alerts,motions:o.motions,audioBars:j.audioBars,recorder:d.recorder,listen:q.listen,darkTheme:m.darkTheme,screenShare:p.screenShare,websocket:f.websocket,physicalRecorder:h.physicalRecorder,mediaDevices:v.mediaDevices,streaming:y.streaming};exports.models=k;
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/models/index.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { Models } from '@rematch/core'\nimport { player } from './player'\nimport { webrtc } from './webrtc'\nimport { currentCall } from './currentCall'\nimport { currentUser } from './currentUser'\nimport { fetchDefaults } from './fetchDefaults'\nimport { island } from './island'\nimport { avatars } from './avatars'\nimport { users } from './users'\nimport { alerts } from './alerts'\nimport { motions } from './motions'\nimport { audioBars } from './audioBars'\nimport { recorder } from './recorder'\nimport { listen } from './listen'\nimport { darkTheme } from './darkTheme'\nimport { physicalRecorder } from './physicalRecorder'\nimport { screenShare } from './screenShare'\nimport { websocket } from './websocket'\nimport { mediaDevices } from './mediaDevices'\nimport { conference } from './conference'\nimport { streaming } from './streaming'\n\nexport interface RootModel extends Models<RootModel> {\n player: typeof player\n webrtc: typeof webrtc\n conference: typeof conference\n currentCall: typeof currentCall\n currentUser: typeof currentUser\n fetchDefaults: typeof fetchDefaults\n island: typeof island\n avatars: typeof avatars\n users: typeof users\n alerts: typeof alerts\n motions: typeof motions\n audioBars: typeof audioBars\n recorder: typeof recorder\n listen: typeof listen\n darkTheme: typeof darkTheme\n screenShare: typeof screenShare\n websocket: typeof websocket\n physicalRecorder: typeof physicalRecorder\n mediaDevices: typeof mediaDevices\n streaming: typeof streaming\n}\n\nexport const models: RootModel = {\n player,\n webrtc,\n conference,\n currentCall,\n currentUser,\n fetchDefaults,\n island,\n avatars,\n users,\n alerts,\n motions,\n audioBars,\n recorder,\n listen,\n darkTheme,\n screenShare,\n websocket,\n physicalRecorder,\n mediaDevices,\n streaming,\n}\n"],"names":["models","player","webrtc","conference","currentCall","currentUser","fetchDefaults","island","avatars","users","alerts","motions","audioBars","recorder","listen","darkTheme","screenShare","websocket","physicalRecorder","mediaDevices","streaming"],"mappings":"qnBAgDaA,EAAoB,CAC/BC,OAAMA,EAAAA,OACNC,OAAMA,EAAAA,OACNC,WAAUA,EAAAA,WACVC,YAAWA,EAAAA,YACXC,YAAWA,EAAAA,YACXC,cAAaA,EAAAA,cACbC,OAAMA,EAAAA,OACNC,QAAOA,EAAAA,QACPC,MAAKA,EAAAA,MACLC,OAAMA,EAAAA,OACNC,QAAOA,EAAAA,QACPC,UAASA,EAAAA,UACTC,SAAQA,EAAAA,SACRC,OAAMA,EAAAA,OACNC,UAASA,EAAAA,UACTC,YAAWA,EAAAA,YACXC,UAASA,EAAAA,UACTC,iBAAgBA,EAAAA,iBAChBC,aAAYA,EAAAA,aACZC,UAASA,EAAAA"}
1
+ {"version":3,"file":"index.js","sources":["../../src/models/index.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { Models } from '@rematch/core'\nimport { player } from './player'\nimport { webrtc } from './webrtc'\nimport { currentCall } from './currentCall'\nimport { currentUser } from './currentUser'\nimport { fetchDefaults } from './fetchDefaults'\nimport { island } from './island'\nimport { paramUrl } from './paramUrl'\nimport { avatars } from './avatars'\nimport { users } from './users'\nimport { alerts } from './alerts'\nimport { motions } from './motions'\nimport { audioBars } from './audioBars'\nimport { recorder } from './recorder'\nimport { listen } from './listen'\nimport { darkTheme } from './darkTheme'\nimport { physicalRecorder } from './physicalRecorder'\nimport { screenShare } from './screenShare'\nimport { websocket } from './websocket'\nimport { mediaDevices } from './mediaDevices'\nimport { conference } from './conference'\nimport { streaming } from './streaming'\n\nexport interface RootModel extends Models<RootModel> {\n player: typeof player\n webrtc: typeof webrtc\n conference: typeof conference\n currentCall: typeof currentCall\n currentUser: typeof currentUser\n fetchDefaults: typeof fetchDefaults\n island: typeof island\n paramUrl: typeof paramUrl\n avatars: typeof avatars\n users: typeof users\n alerts: typeof alerts\n motions: typeof motions\n audioBars: typeof audioBars\n recorder: typeof recorder\n listen: typeof listen\n darkTheme: typeof darkTheme\n screenShare: typeof screenShare\n websocket: typeof websocket\n physicalRecorder: typeof physicalRecorder\n mediaDevices: typeof mediaDevices\n streaming: typeof streaming\n}\n\nexport const models: RootModel = {\n player,\n webrtc,\n conference,\n currentCall,\n currentUser,\n fetchDefaults,\n island,\n paramUrl,\n avatars,\n users,\n alerts,\n motions,\n audioBars,\n recorder,\n listen,\n darkTheme,\n screenShare,\n websocket,\n physicalRecorder,\n mediaDevices,\n streaming,\n}\n"],"names":["models","player","webrtc","conference","currentCall","currentUser","fetchDefaults","island","paramUrl","avatars","users","alerts","motions","audioBars","recorder","listen","darkTheme","screenShare","websocket","physicalRecorder","mediaDevices","streaming"],"mappings":"gpBAkDaA,EAAoB,CAC/BC,OAAMA,EAAAA,OACNC,OAAMA,EAAAA,OACNC,WAAUA,EAAAA,WACVC,YAAWA,EAAAA,YACXC,YAAWA,EAAAA,YACXC,cAAaA,EAAAA,cACbC,OAAMA,EAAAA,OACNC,SAAQA,EAAAA,SACRC,QAAOA,EAAAA,QACPC,MAAKA,EAAAA,MACLC,OAAMA,EAAAA,OACNC,QAAOA,EAAAA,QACPC,UAASA,EAAAA,UACTC,SAAQA,EAAAA,SACRC,OAAMA,EAAAA,OACNC,UAASA,EAAAA,UACTC,YAAWA,EAAAA,YACXC,UAASA,EAAAA,UACTC,iBAAgBA,EAAAA,iBAChBC,aAAYA,EAAAA,aACZC,UAASA,EAAAA"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),i=require("../node_modules/@rematch/core/dist/core.esm.js");require("react");var n=require("../utils/genericFunctions/eventDispatch.js");require("../store/index.js");var s={view:null,isOpen:!0,actionsExpanded:!1,startPosition:{x:0,y:0},inputOutputOpened:!1,settingsView:"main",contactListView:"main",sideViewIsVisible:!1,isConferenceList:!1,previousView:null,avoidToShow:!1,isFullScreen:!1,isFromStreaming:!1,isExtraLarge:!1},t=i.createModel()({state:s,reducers:{setIslandView:function(i,n){return n===(null==i?void 0:i.view)?i:e.__assign(e.__assign({},i),{view:n,previousView:null==i?void 0:i.view})},toggleIsOpen:function(i,n){return e.__assign(e.__assign({},i),{isOpen:n})},toggleActionsExpanded:function(e,i){return e.actionsExpanded=i,e},toggleInputOutputOpened:function(e,i){return e.inputOutputOpened=i,e},setSettingsView:function(e,i){e.settingsView=i},setContactListView:function(e,i){e.contactListView=i},toggleSideViewVisible:function(e,i){e.sideViewIsVisible=i},toggleConferenceList:function(e,i){e.isConferenceList=i},toggleAvoidToShow:function(e,i){e.avoidToShow=i},resetSettingsView:function(e){e.settingsView="main"},setFullScreen:function(i,n){return e.__assign(e.__assign({},i),{isFullScreen:n})},setIsFromStreaming:function(i,n){return e.__assign(e.__assign({},i),{isFromStreaming:n})},setExtraLarge:function(i,n){return e.__assign(e.__assign({},i),{isExtraLarge:n})},resetPlayerClose:function(e){return r(e,!1)},resetIslandStore:function(e){return r(e,!0)}},effects:function(e){return{handleToggleIsOpen:function(i,s){s.island.isOpen&&s.alerts.status.activeAlertsCount>0&&!s.currentCall.displayName?(n.eventDispatch("phone-island-expanded",{}),e.island.toggleIsOpen(!0)):(n.eventDispatch("phone-island-"+(s.island.isOpen?"compressed":"expanded"),{}),s.island.isOpen&&n.eventDispatch("phone-island-sideview-close",{}),e.island.toggleIsOpen(!s.island.isOpen))}}}});function r(i,n){var t=i.startPosition,r=["waitingConference"];n&&r.push("recorder");var o=r.includes(i.view)?i.view:s.view,a=i.avoidToShow;return e.__assign(e.__assign({},s),{startPosition:t,view:o,avoidToShow:a,isFromStreaming:!1,previousView:"waitingConference"===i.view?i.previousView:s.previousView})}exports.island=t;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),i=require("../node_modules/@rematch/core/dist/core.esm.js");require("react");var n=require("../utils/genericFunctions/eventDispatch.js");require("../store/index.js");var s={view:null,isOpen:!0,actionsExpanded:!1,startPosition:{x:0,y:0},inputOutputOpened:!1,settingsView:"main",contactListView:"main",sideViewIsVisible:!1,isConferenceList:!1,previousView:null,avoidToShow:!1,isFullScreen:!1,isFromStreaming:!1,isExtraLarge:!1,urlOpened:!1},t=i.createModel()({state:s,reducers:{setIslandView:function(i,n){return n===(null==i?void 0:i.view)?i:e.__assign(e.__assign({},i),{view:n,previousView:null==i?void 0:i.view})},toggleIsOpen:function(i,n){return e.__assign(e.__assign({},i),{isOpen:n})},toggleActionsExpanded:function(e,i){return e.actionsExpanded=i,e},toggleInputOutputOpened:function(e,i){return e.inputOutputOpened=i,e},setSettingsView:function(e,i){e.settingsView=i},setContactListView:function(e,i){e.contactListView=i},toggleSideViewVisible:function(e,i){e.sideViewIsVisible=i},toggleConferenceList:function(e,i){e.isConferenceList=i},toggleAvoidToShow:function(e,i){e.avoidToShow=i},setUrlOpened:function(e,i){return e.urlOpened=i,e},resetSettingsView:function(e){e.settingsView="main"},setFullScreen:function(i,n){return e.__assign(e.__assign({},i),{isFullScreen:n})},setIsFromStreaming:function(i,n){return e.__assign(e.__assign({},i),{isFromStreaming:n})},setExtraLarge:function(i,n){return e.__assign(e.__assign({},i),{isExtraLarge:n})},resetPlayerClose:function(e){return r(e,!1)},resetIslandStore:function(e){return r(e,!0)}},effects:function(e){return{handleToggleIsOpen:function(i,s){s.island.isOpen&&s.alerts.status.activeAlertsCount>0&&!s.currentCall.displayName?(n.eventDispatch("phone-island-expanded",{}),e.island.toggleIsOpen(!0)):(n.eventDispatch("phone-island-"+(s.island.isOpen?"compressed":"expanded"),{}),s.island.isOpen&&n.eventDispatch("phone-island-sideview-close",{}),e.island.toggleIsOpen(!s.island.isOpen))}}}});function r(i,n){var t=i.startPosition,r=["waitingConference"];n&&r.push("recorder");var o=r.includes(i.view)?i.view:s.view,a=i.avoidToShow;return e.__assign(e.__assign({},s),{startPosition:t,view:o,avoidToShow:a,isFromStreaming:!1,previousView:"waitingConference"===i.view?i.previousView:s.previousView})}exports.island=t;
2
2
  //# sourceMappingURL=island.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"island.js","sources":["../../src/models/island.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 '.'\nimport { eventDispatch } from '../utils'\n\nconst defaultState: IslandTypes = {\n view: null,\n isOpen: true,\n actionsExpanded: false,\n startPosition: {\n x: 0,\n y: 0,\n },\n inputOutputOpened: false,\n settingsView: 'main',\n contactListView: 'main',\n sideViewIsVisible: false,\n isConferenceList: false,\n previousView: null,\n avoidToShow: false,\n isFullScreen: false,\n isFromStreaming: false,\n isExtraLarge: false,\n}\n\nexport const island = createModel<RootModel>()({\n state: defaultState,\n reducers: {\n setIslandView: (state, newView: IslandViewType | null) => {\n if (newView === state?.view) {\n // Don't change view if it's the same\n return state\n } else {\n return {\n ...state,\n view: newView,\n previousView: state?.view,\n }\n }\n },\n toggleIsOpen: (state, payload: boolean) => {\n return {\n ...state,\n isOpen: payload,\n }\n },\n toggleActionsExpanded: (state, payload: boolean) => {\n state.actionsExpanded = payload\n return state\n },\n toggleInputOutputOpened: (state, payload: boolean) => {\n state.inputOutputOpened = payload\n return state\n },\n setSettingsView: (state, payload: SettingsViewType) => {\n state.settingsView = payload\n },\n setContactListView: (state, payload: ContactListViewType) => {\n state.contactListView = payload\n },\n toggleSideViewVisible: (state, payload: boolean) => {\n state.sideViewIsVisible = payload\n },\n toggleConferenceList: (state, payload: boolean) => {\n state.isConferenceList = payload\n },\n toggleAvoidToShow: (state, payload: boolean) => {\n state.avoidToShow = payload\n },\n resetSettingsView: (state) => {\n state.settingsView = 'main'\n },\n setFullScreen: (state, payload: boolean) => {\n return {\n ...state,\n isFullScreen: payload,\n }\n },\n setIsFromStreaming: (state, payload: boolean) => {\n return {\n ...state,\n isFromStreaming: payload,\n }\n },\n setExtraLarge: (state, payload: boolean) => {\n return {\n ...state,\n isExtraLarge: payload,\n }\n },\n resetPlayerClose: (state) => {\n return getResetState(state, false)\n },\n resetIslandStore: (state) => {\n return getResetState(state, true)\n },\n },\n effects: (dispatch) => ({\n handleToggleIsOpen: (_: void, rootState) => {\n if (\n rootState.island.isOpen &&\n rootState.alerts.status.activeAlertsCount > 0 &&\n !rootState.currentCall.displayName\n ) {\n eventDispatch('phone-island-expanded', {})\n dispatch.island.toggleIsOpen(true)\n } else {\n eventDispatch('phone-island-' + (rootState.island.isOpen ? 'compressed' : 'expanded'), {})\n if (rootState.island.isOpen) {\n eventDispatch('phone-island-sideview-close', {})\n }\n dispatch.island.toggleIsOpen(!rootState.island.isOpen)\n }\n },\n }),\n})\n\nfunction getResetState(state: IslandTypes, includeRecorder: boolean): IslandTypes {\n // Keep beginning position\n const preservedStartPosition = state.startPosition\n // Determine which view to preserve\n const viewsToPreserve = ['waitingConference']\n if (includeRecorder) {\n viewsToPreserve.push('recorder')\n }\n\n const preservedView = viewsToPreserve.includes(state.view as string)\n ? state.view\n : defaultState.view\n const avoidToShow = state.avoidToShow\n\n return {\n ...defaultState,\n startPosition: preservedStartPosition,\n view: preservedView,\n avoidToShow: avoidToShow,\n isFromStreaming: false,\n // Keep previousView if waitingConference\n previousView:\n state.view === 'waitingConference' ? state.previousView : defaultState.previousView,\n }\n}\n\ntype IslandViewType =\n | 'call'\n | 'keypad'\n | 'player'\n | 'transfer'\n | 'recorder'\n | 'physicalPhoneRecorder'\n | 'settings'\n | 'video'\n | 'conference'\n | 'switchDevice'\n | 'waitingConference'\n | 'streamingAnswer'\ntype SettingsViewType = 'microphone' | 'audioInput' | 'videoInput' | 'theme' | 'main'\ntype ContactListViewType = 'main' | 'selectContactNumber'\n\ninterface IslandTypes {\n view?: IslandViewType | null\n isOpen: boolean\n actionsExpanded: boolean\n startPosition: {\n x: number\n y: number\n }\n inputOutputOpened: boolean\n settingsView: SettingsViewType\n contactListView: ContactListViewType\n sideViewIsVisible: boolean\n isConferenceList: boolean\n previousView?: IslandViewType | null\n avoidToShow?: boolean\n isFullScreen: boolean\n isFromStreaming: boolean\n isExtraLarge: boolean\n}\n"],"names":["defaultState","view","isOpen","actionsExpanded","startPosition","x","y","inputOutputOpened","settingsView","contactListView","sideViewIsVisible","isConferenceList","previousView","avoidToShow","isFullScreen","isFromStreaming","isExtraLarge","island","createModel","state","reducers","setIslandView","newView","__assign","toggleIsOpen","payload","toggleActionsExpanded","toggleInputOutputOpened","setSettingsView","setContactListView","toggleSideViewVisible","toggleConferenceList","toggleAvoidToShow","resetSettingsView","setFullScreen","setIsFromStreaming","setExtraLarge","resetPlayerClose","getResetState","resetIslandStore","effects","dispatch","handleToggleIsOpen","_","rootState","alerts","status","activeAlertsCount","currentCall","displayName","eventDispatch","includeRecorder","preservedStartPosition","viewsToPreserve","push","preservedView","includes"],"mappings":"8RAOA,IAAMA,EAA4B,CAChCC,KAAM,KACNC,QAAQ,EACRC,iBAAiB,EACjBC,cAAe,CACbC,EAAG,EACHC,EAAG,GAELC,mBAAmB,EACnBC,aAAc,OACdC,gBAAiB,OACjBC,mBAAmB,EACnBC,kBAAkB,EAClBC,aAAc,KACdC,aAAa,EACbC,cAAc,EACdC,iBAAiB,EACjBC,cAAc,GAGHC,EAASC,EAAWA,aAAXA,CAAyB,CAC7CC,MAAOnB,EACPoB,SAAU,CACRC,cAAe,SAACF,EAAOG,GACrB,OAAIA,KAAYH,eAAAA,EAAOlB,MAEdkB,EAEPI,EAAAA,SAAAA,EAAAA,SAAA,CAAA,EACKJ,GAAK,CACRlB,KAAMqB,EACNV,aAAcO,aAAK,EAALA,EAAOlB,MAG1B,EACDuB,aAAc,SAACL,EAAOM,GACpB,OAAAF,EAAAA,SAAAA,EAAAA,SAAA,GACKJ,GAAK,CACRjB,OAAQuB,GAEX,EACDC,sBAAuB,SAACP,EAAOM,GAE7B,OADAN,EAAMhB,gBAAkBsB,EACjBN,CACR,EACDQ,wBAAyB,SAACR,EAAOM,GAE/B,OADAN,EAAMZ,kBAAoBkB,EACnBN,CACR,EACDS,gBAAiB,SAACT,EAAOM,GACvBN,EAAMX,aAAeiB,CACtB,EACDI,mBAAoB,SAACV,EAAOM,GAC1BN,EAAMV,gBAAkBgB,CACzB,EACDK,sBAAuB,SAACX,EAAOM,GAC7BN,EAAMT,kBAAoBe,CAC3B,EACDM,qBAAsB,SAACZ,EAAOM,GAC5BN,EAAMR,iBAAmBc,CAC1B,EACDO,kBAAmB,SAACb,EAAOM,GACzBN,EAAMN,YAAcY,CACrB,EACDQ,kBAAmB,SAACd,GAClBA,EAAMX,aAAe,MACtB,EACD0B,cAAe,SAACf,EAAOM,GACrB,OAAAF,EAAAA,SAAAA,EAAAA,SAAA,GACKJ,GAAK,CACRL,aAAcW,GAEjB,EACDU,mBAAoB,SAAChB,EAAOM,GAC1B,OAAAF,EAAAA,SAAAA,EAAAA,SAAA,GACKJ,GAAK,CACRJ,gBAAiBU,GAEpB,EACDW,cAAe,SAACjB,EAAOM,GACrB,OAAAF,EAAAA,SAAAA,EAAAA,SAAA,GACKJ,GAAK,CACRH,aAAcS,GAEjB,EACDY,iBAAkB,SAAClB,GACjB,OAAOmB,EAAcnB,GAAO,EAC7B,EACDoB,iBAAkB,SAACpB,GACjB,OAAOmB,EAAcnB,GAAO,EAC7B,GAEHqB,QAAS,SAACC,GAAa,MAAC,CACtBC,mBAAoB,SAACC,EAASC,GAE1BA,EAAU3B,OAAOf,QACjB0C,EAAUC,OAAOC,OAAOC,kBAAoB,IAC3CH,EAAUI,YAAYC,aAEvBC,gBAAc,wBAAyB,CAAA,GACvCT,EAASxB,OAAOO,cAAa,KAE7B0B,gBAAc,iBAAmBN,EAAU3B,OAAOf,OAAS,aAAe,YAAa,CAAA,GACnF0C,EAAU3B,OAAOf,QACnBgD,gBAAc,8BAA+B,CAAA,GAE/CT,EAASxB,OAAOO,cAAcoB,EAAU3B,OAAOf,QAElD,EACD,IAGJ,SAASoC,EAAcnB,EAAoBgC,GAEzC,IAAMC,EAAyBjC,EAAMf,cAE/BiD,EAAkB,CAAC,qBACrBF,GACFE,EAAgBC,KAAK,YAGvB,IAAMC,EAAgBF,EAAgBG,SAASrC,EAAMlB,MACjDkB,EAAMlB,KACND,EAAaC,KACXY,EAAcM,EAAMN,YAE1B,OAAAU,EAAAA,SAAAA,EAAAA,SAAA,GACKvB,GACH,CAAAI,cAAegD,EACfnD,KAAMsD,EACN1C,YAAaA,EACbE,iBAAiB,EAEjBH,aACiB,sBAAfO,EAAMlB,KAA+BkB,EAAMP,aAAeZ,EAAaY,cAE7E"}
1
+ {"version":3,"file":"island.js","sources":["../../src/models/island.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 '.'\nimport { eventDispatch } from '../utils'\n\nconst defaultState: IslandTypes = {\n view: null,\n isOpen: true,\n actionsExpanded: false,\n startPosition: {\n x: 0,\n y: 0,\n },\n inputOutputOpened: false,\n settingsView: 'main',\n contactListView: 'main',\n sideViewIsVisible: false,\n isConferenceList: false,\n previousView: null,\n avoidToShow: false,\n isFullScreen: false,\n isFromStreaming: false,\n isExtraLarge: false,\n urlOpened: false,\n}\n\nexport const island = createModel<RootModel>()({\n state: defaultState,\n reducers: {\n setIslandView: (state, newView: IslandViewType | null) => {\n if (newView === state?.view) {\n // Don't change view if it's the same\n return state\n } else {\n return {\n ...state,\n view: newView,\n previousView: state?.view,\n }\n }\n },\n toggleIsOpen: (state, payload: boolean) => {\n return {\n ...state,\n isOpen: payload,\n }\n },\n toggleActionsExpanded: (state, payload: boolean) => {\n state.actionsExpanded = payload\n return state\n },\n toggleInputOutputOpened: (state, payload: boolean) => {\n state.inputOutputOpened = payload\n return state\n },\n setSettingsView: (state, payload: SettingsViewType) => {\n state.settingsView = payload\n },\n setContactListView: (state, payload: ContactListViewType) => {\n state.contactListView = payload\n },\n toggleSideViewVisible: (state, payload: boolean) => {\n state.sideViewIsVisible = payload\n },\n toggleConferenceList: (state, payload: boolean) => {\n state.isConferenceList = payload\n },\n toggleAvoidToShow: (state, payload: boolean) => {\n state.avoidToShow = payload\n },\n setUrlOpened: (state, payload: boolean) => {\n state.urlOpened = payload\n return state\n },\n resetSettingsView: (state) => {\n state.settingsView = 'main'\n },\n setFullScreen: (state, payload: boolean) => {\n return {\n ...state,\n isFullScreen: payload,\n }\n },\n setIsFromStreaming: (state, payload: boolean) => {\n return {\n ...state,\n isFromStreaming: payload,\n }\n },\n setExtraLarge: (state, payload: boolean) => {\n return {\n ...state,\n isExtraLarge: payload,\n }\n },\n resetPlayerClose: (state) => {\n return getResetState(state, false)\n },\n resetIslandStore: (state) => {\n return getResetState(state, true)\n },\n },\n effects: (dispatch) => ({\n handleToggleIsOpen: (_: void, rootState) => {\n if (\n rootState.island.isOpen &&\n rootState.alerts.status.activeAlertsCount > 0 &&\n !rootState.currentCall.displayName\n ) {\n eventDispatch('phone-island-expanded', {})\n dispatch.island.toggleIsOpen(true)\n } else {\n eventDispatch('phone-island-' + (rootState.island.isOpen ? 'compressed' : 'expanded'), {})\n if (rootState.island.isOpen) {\n eventDispatch('phone-island-sideview-close', {})\n }\n dispatch.island.toggleIsOpen(!rootState.island.isOpen)\n }\n },\n }),\n})\n\nfunction getResetState(state: IslandTypes, includeRecorder: boolean): IslandTypes {\n // Keep beginning position\n const preservedStartPosition = state.startPosition\n // Determine which view to preserve\n const viewsToPreserve = ['waitingConference']\n if (includeRecorder) {\n viewsToPreserve.push('recorder')\n }\n\n const preservedView = viewsToPreserve.includes(state.view as string)\n ? state.view\n : defaultState.view\n const avoidToShow = state.avoidToShow\n\n return {\n ...defaultState,\n startPosition: preservedStartPosition,\n view: preservedView,\n avoidToShow: avoidToShow,\n isFromStreaming: false,\n // Keep previousView if waitingConference\n previousView:\n state.view === 'waitingConference' ? state.previousView : defaultState.previousView,\n }\n}\n\ntype IslandViewType =\n | 'call'\n | 'keypad'\n | 'player'\n | 'transfer'\n | 'recorder'\n | 'physicalPhoneRecorder'\n | 'settings'\n | 'video'\n | 'conference'\n | 'switchDevice'\n | 'waitingConference'\n | 'streamingAnswer'\ntype SettingsViewType = 'microphone' | 'audioInput' | 'videoInput' | 'theme' | 'main'\ntype ContactListViewType = 'main' | 'selectContactNumber'\n\ninterface IslandTypes {\n view?: IslandViewType | null\n isOpen: boolean\n actionsExpanded: boolean\n startPosition: {\n x: number\n y: number\n }\n inputOutputOpened: boolean\n settingsView: SettingsViewType\n contactListView: ContactListViewType\n sideViewIsVisible: boolean\n isConferenceList: boolean\n previousView?: IslandViewType | null\n avoidToShow?: boolean\n isFullScreen: boolean\n isFromStreaming: boolean\n isExtraLarge: boolean\n urlOpened: boolean\n}\n"],"names":["defaultState","view","isOpen","actionsExpanded","startPosition","x","y","inputOutputOpened","settingsView","contactListView","sideViewIsVisible","isConferenceList","previousView","avoidToShow","isFullScreen","isFromStreaming","isExtraLarge","urlOpened","island","createModel","state","reducers","setIslandView","newView","__assign","toggleIsOpen","payload","toggleActionsExpanded","toggleInputOutputOpened","setSettingsView","setContactListView","toggleSideViewVisible","toggleConferenceList","toggleAvoidToShow","setUrlOpened","resetSettingsView","setFullScreen","setIsFromStreaming","setExtraLarge","resetPlayerClose","getResetState","resetIslandStore","effects","dispatch","handleToggleIsOpen","_","rootState","alerts","status","activeAlertsCount","currentCall","displayName","eventDispatch","includeRecorder","preservedStartPosition","viewsToPreserve","push","preservedView","includes"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),r=require("../node_modules/@rematch/core/dist/core.esm.js"),a={url:"",onlyQueues:!1,hasValidUrl:!1,openParamUrlType:"never"},s=r.createModel()({state:a,reducers:{setParamUrl:function(e,r){return{url:r.url||"",onlyQueues:r.onlyQueues||!1,hasValidUrl:r.hasValidUrl||!1,openParamUrlType:r.openParamUrlType||e.openParamUrlType}},setOpenParamUrlType:function(r,a){return e.__assign(e.__assign({},r),{openParamUrlType:a})},reset:function(){return a}}});exports.paramUrl=s;
2
+ //# sourceMappingURL=paramUrl.js.map
@@ -0,0 +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: { url?: string; onlyQueues?: boolean; hasValidUrl?: boolean; openParamUrlType?: string },\n ) => {\n return {\n url: payload.url || '',\n onlyQueues: payload.onlyQueues || false,\n hasValidUrl: payload.hasValidUrl || false,\n openParamUrlType: payload.openParamUrlType || state.openParamUrlType,\n }\n },\n setOpenParamUrlType: (state, payload: string) => {\n return {\n ...state,\n openParamUrlType: payload,\n }\n },\n reset: () => {\n return defaultState\n },\n },\n})\n\ninterface ParamUrlTypes {\n url: string\n onlyQueues: boolean\n hasValidUrl: boolean\n openParamUrlType: string\n}\n"],"names":["defaultState","url","onlyQueues","hasValidUrl","openParamUrlType","paramUrl","createModel","state","reducers","setParamUrl","payload","setOpenParamUrlType","__assign","reset"],"mappings":"oLAMMA,EAA8B,CAClCC,IAAK,GACLC,YAAY,EACZC,aAAa,EACbC,iBAAkB,SAGPC,EAAWC,EAAWA,aAAXA,CAAyB,CAC/CC,MAAOP,EACPQ,SAAU,CACRC,YAAa,SACXF,EACAG,GAEA,MAAO,CACLT,IAAKS,EAAQT,KAAO,GACpBC,WAAYQ,EAAQR,aAAc,EAClCC,YAAaO,EAAQP,cAAe,EACpCC,iBAAkBM,EAAQN,kBAAoBG,EAAMH,iBAEvD,EACDO,oBAAqB,SAACJ,EAAOG,GAC3B,OAAAE,EAAAA,SAAAA,EAAAA,SAAA,GACKL,GAAK,CACRH,iBAAkBM,GAErB,EACDG,MAAO,WACL,OAAOb,CACR"}
@@ -1 +1 @@
1
- {"version":3,"file":"user.js","sources":["../../src/services/user.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { store } from '../store'\nimport type { UserInfoTypes, AvatarsTypes, UsersEndpointsTypes } from '../types'\n\n/**\n * Get current user info\n */\nexport async function getCurrentUserInfo(): Promise<UserInfoTypes | undefined> {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/user/me`, {\n headers: { ...headers },\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n const data = await response.json()\n return data\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function setDefaultDevice(\n default_type: string,\n extensionNumber: string,\n): Promise<any> {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n\n let webrtcId: any = { id: extensionNumber }\n let physicalId: any = { id: extensionNumber }\n const response = await fetch(`${baseURL}/user/default_device`, {\n method: 'POST',\n headers: { ...headers },\n body: default_type === 'physical' ? JSON.stringify(physicalId) : JSON.stringify(webrtcId),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\n/**\n * Get all avatars\n */\nexport async function getAllAvatars(): Promise<AvatarsTypes | undefined> {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n\n const response = await fetch(`${baseURL}/user/all_avatars`, {\n headers: { ...headers },\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n const data = await response.json()\n return data\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\n/**\n * Get all users endpoints\n */\nexport async function getAllUsersEndpoints(): Promise<UsersEndpointsTypes | undefined> {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/user/endpoints/all`, {\n headers: { ...headers },\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n const data = await response.json()\n return data\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function changeOperatorStatus(obj: any) {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/user/presence`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(obj),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw error\n }\n}\n\nexport async function changeDefaultDevice(obj: any) {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/user/default_device`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(obj),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw error\n }\n}\n\nexport async function setMainDevice(obj: any) {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/user/default_device`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(obj),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw error\n }\n}\n\n/**\n * Get parameter URL information\n */\nexport async function getParamUrl(): Promise<UserInfoTypes | undefined> {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/user/paramurl`, {\n headers: { ...headers },\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n const data = await response.json()\n return data\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function getVideoSources(): Promise<UserInfoTypes | undefined> {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/streaming/sources`, {\n headers: { ...headers },\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n const data = await response.json()\n return data\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function openVideoSource(obj: any) {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/streaming/open`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(obj),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw error\n }\n}\n\nexport async function subscribe(obj: any) {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/streaming/subscribe`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(obj),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw error\n }\n}\n\nexport async function unsubscribe(obj: any) {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/streaming/unsubscribe`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(obj),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw error\n }\n}\n"],"names":["obj","_a","store","getState","fetchDefaults","baseURL","headers","fetch","concat","method","__assign","body","JSON","stringify","response","_b","sent","ok","Error","statusText","json","error_3","error_4","error_1","error_8","error_9"],"mappings":"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"}
1
+ {"version":3,"file":"user.js","sources":["../../src/services/user.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { store } from '../store'\nimport type { UserInfoTypes, AvatarsTypes, UsersEndpointsTypes } from '../types'\n\n/**\n * Get current user info\n */\nexport async function getCurrentUserInfo(): Promise<UserInfoTypes | undefined> {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/user/me`, {\n headers: { ...headers },\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n const data = await response.json()\n return data\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function setDefaultDevice(\n default_type: string,\n extensionNumber: string,\n): Promise<any> {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n\n let webrtcId: any = { id: extensionNumber }\n let physicalId: any = { id: extensionNumber }\n const response = await fetch(`${baseURL}/user/default_device`, {\n method: 'POST',\n headers: { ...headers },\n body: default_type === 'physical' ? JSON.stringify(physicalId) : JSON.stringify(webrtcId),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\n/**\n * Get all avatars\n */\nexport async function getAllAvatars(): Promise<AvatarsTypes | undefined> {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n\n const response = await fetch(`${baseURL}/user/all_avatars`, {\n headers: { ...headers },\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n const data = await response.json()\n return data\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\n/**\n * Get all users endpoints\n */\nexport async function getAllUsersEndpoints(): Promise<UsersEndpointsTypes | undefined> {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/user/endpoints/all`, {\n headers: { ...headers },\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n const data = await response.json()\n return data\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function changeOperatorStatus(obj: any) {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/user/presence`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(obj),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw error\n }\n}\n\nexport async function changeDefaultDevice(obj: any) {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/user/default_device`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(obj),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw error\n }\n}\n\nexport async function setMainDevice(obj: any) {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/user/default_device`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(obj),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw error\n }\n}\n\n/**\n * Get parameter URL information\n */\nexport async function getParamUrl(): Promise<UserInfoTypes | undefined> {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/user/paramurl`, {\n headers: { ...headers },\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n const data = await response.json()\n return data\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function getVideoSources(): Promise<UserInfoTypes | undefined> {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/streaming/sources`, {\n headers: { ...headers },\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n const data = await response.json()\n return data\n } catch (error: any) {\n throw new Error(error)\n }\n}\n\nexport async function openVideoSource(obj: any) {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/streaming/open`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(obj),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw error\n }\n}\n\nexport async function subscribe(obj: any) {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/streaming/subscribe`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(obj),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw error\n }\n}\n\nexport async function unsubscribe(obj: any) {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/streaming/unsubscribe`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(obj),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n return true\n } catch (error: any) {\n throw error\n }\n}\n\nexport async function setIncomingCallsPreference(settingsStatus: any) {\n try {\n const { baseURL, headers } = store.getState().fetchDefaults\n const response = await fetch(`${baseURL}/user/settings`, {\n method: 'POST',\n headers: { ...headers },\n body: JSON.stringify(settingsStatus),\n })\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n\n const contentType = response.headers.get('content-type')\n if (contentType && contentType.includes('application/json')) {\n const text = await response.text()\n return text ? JSON.parse(text) : {}\n }\n\n return { success: true }\n } catch (error: any) {\n console.error('Error updating user settings:', error)\n throw error\n }\n}\n"],"names":["obj","_a","store","getState","fetchDefaults","baseURL","headers","fetch","concat","method","__assign","body","JSON","stringify","response","_b","sent","ok","Error","statusText","json","error_3","error_4","error_1","error_8","error_9"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nethesis/phone-island",
3
3
  "author": "Nethesis",
4
- "version": "0.14.7",
4
+ "version": "0.15.1",
5
5
  "description": "NethVoice CTI Phone Island",
6
6
  "keywords": [
7
7
  "nethserver",
@@ -84,7 +84,7 @@
84
84
  "publish:minor": "npm version minor --allow-same-version -m v%s --force",
85
85
  "publish:major": "npm version major --allow-same-version -m v%s --force",
86
86
  "publish:patch": "npm version patch --allow-same-version -m v%s --force",
87
- "preversion": "npm run build:widget && git add dist-widget/index.widget.js dist-widget/index.widget.css && git commit -m 'chore(widget): release for jsDelivr'",
87
+ "preversion": "rm -rf dist-widget && npm run build:widget && git add dist-widget/index.widget.js dist-widget/index.widget.css && git commit -m 'chore(widget): release for jsDelivr'",
88
88
  "postversion": "git push origin main --tags",
89
89
  "revert-bump": "node revert-bump.js"
90
90
  },