@nethesis/phone-island 0.14.0 → 0.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/App.js +1 -1
- package/dist/App.js.map +1 -1
- package/dist/components/AudioPlayerView/Avatar.js +1 -1
- package/dist/components/AudioPlayerView/Avatar.js.map +1 -1
- package/dist/components/Button.js +1 -1
- package/dist/components/Button.js.map +1 -1
- package/dist/components/CallView/Actions.js +1 -1
- package/dist/components/CallView/Actions.js.map +1 -1
- package/dist/components/CallView/Avatar.js +1 -1
- package/dist/components/CallView/Avatar.js.map +1 -1
- package/dist/components/CallView/DisplayName.js +1 -1
- package/dist/components/CallView/DisplayName.js.map +1 -1
- package/dist/components/CallView/DisplayNameUtils.js +2 -0
- package/dist/components/CallView/DisplayNameUtils.js.map +1 -0
- package/dist/components/ContactView/ContactListView.js +1 -1
- package/dist/components/ContactView/ContactListView.js.map +1 -1
- package/dist/components/ContactView/ListAvatar.js +1 -1
- package/dist/components/ContactView/ListAvatar.js.map +1 -1
- package/dist/components/Hangup.js +1 -1
- package/dist/components/Hangup.js.map +1 -1
- package/dist/components/Island.js +1 -1
- package/dist/components/Island.js.map +1 -1
- package/dist/components/SideView/SideView.js +1 -1
- package/dist/components/SideView/SideView.js.map +1 -1
- package/dist/components/SideView/components/SideViewButton.js +2 -0
- package/dist/components/SideView/components/SideViewButton.js.map +1 -0
- package/dist/components/SideView/hooks/useSideViewLogic.js +2 -0
- package/dist/components/SideView/hooks/useSideViewLogic.js.map +1 -0
- package/dist/components/Socket.js +1 -1
- package/dist/components/Socket.js.map +1 -1
- package/dist/index.css +1 -1
- package/dist/lib/phone/call.js +1 -1
- package/dist/lib/phone/call.js.map +1 -1
- package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js +1 -1
- package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js.map +1 -1
- package/dist/public/locales/en/translation.json.js +1 -1
- package/dist/public/locales/it/translation.json.js +1 -1
- package/dist/services/user.js +1 -1
- package/dist/services/user.js.map +1 -1
- package/package.json +1 -1
package/dist/App.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./node_modules/tslib/tslib.es6.js"),n=require("react"),t=require("./components/Events.js"),s=require("./components/Socket.js"),i=require("./components/WebRTC.js"),o=require("./components/Island.js"),a=require("./components/RestAPI.js"),r=require("./utils/customHooks/useEventListener.js"),c=require("./utils/genericFunctions/eventDispatch.js"),d=require("./utils/genericFunctions/localStorage.js");require("./node_modules/react-redux/es/index.js");var l=require("./store/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 u=require("./node_modules/js-base64/base64.mjs.js"),p=require("./workers/wake_up.js"),h=require("./lib/i18n.js");require("./node_modules/react-tooltip/dist/react-tooltip.min.css.js");var v=require("./lib/webrtc/messages.js"),f=require("./lib/darkTheme.js"),g=require("./services/user.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 L(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 j=L(n),w=function(L){var w=L.dataConfig,D=L.showAlways,b=void 0!==D&&D,q=L.uaType,y=u.Base64.atob(w||"").split(":"),x=y[0],k=y[1],C=y[2],_=y[3],P=y[4],T=y[5],V=y[6],A=n.useState(!1),O=A[0],z=A[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(p.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){v.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",{})})),r.useEventListener("phone-island-audio-output-change",(function(e){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",{})})).catch((function(e){console.error("Default audio output device change error:",e)}))})),r.useEventListener("phone-island-presence-change",(function(e){g.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)}));var B=n.useState(!0),H=B[0],M=B[1],G=n.useState(!0),K=G[0],Q=G[1];n.useEffect((function(){H&&(h.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(){f.checkDarkTheme()}),[]),r.useEventListener("phone-island-theme-change",(function(e){f.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-screen-share-status",(function(){var e=l.store.getState().screenShare;console.log("Screen share status debug information: ",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",{})})),j.default.createElement(j.default.Fragment,null,j.default.createElement(I.default,{store:l.store},j.default.createElement(i.WebRTC,{hostName:x,sipExten:_,sipSecret:P,sipHost:T,sipPort:V,reload:O,reloadedCallback:function(){return F(!0)},uaType:q},j.default.createElement(a.RestAPI,{hostName:x,username:k,authToken:C},j.default.createElement(s.Socket,{hostName:x,username:k,authToken:C,reload:O,reloadedCallback:function(){return J(!0)},uaType:q},j.default.createElement(t.Events,{sipHost:T},j.default.createElement(o.Island,{showAlways:b,uaType:q})))))))};w.displayName="PhoneIsland",exports.PhoneIsland=w;
|
|
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");require("./node_modules/react-redux/es/index.js");var l=require("./store/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 u=require("./node_modules/js-base64/base64.mjs.js"),p=require("./workers/wake_up.js"),h=require("./lib/i18n.js");require("./node_modules/react-tooltip/dist/react-tooltip.min.css.js");var v=require("./lib/webrtc/messages.js"),f=require("./lib/darkTheme.js"),g=require("./services/user.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=u.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(p.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){v.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||(c.eventDispatch("phone-island-call-start",{number:"*43"}),l.store.dispatch.island.setIslandView(null),l.store.dispatch.island.toggleAvoidToShow(!0)),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){g.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&&(h.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(){f.checkDarkTheme()}),[]),r.useEventListener("phone-island-theme-change",(function(e){f.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-screen-share-status",(function(){var e=l.store.getState().screenShare;console.log("Screen share status debug information: ",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;
|
|
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 useEventListener('phone-island-audio-output-change', (data: DeviceInputOutputTypes) => {\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 })\n .catch(function (err) {\n console.error('Default audio output device change error:', err)\n })\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 [firstRenderI18n, setFirstRenderI18n] = useState(true)\n const [firstAudioOutputInit, setFirstAudioOutputInit] = useState(true)\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', { deviceId: defaultAudioOutputDevice })\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-screen-share-status', () => {\n const screenShareInformation = store.getState().screenShare\n console.log('Screen share status debug information: ', screenShareInformation)\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","remoteAudioElement","getState","player","remoteAudio","current","setSinkId","then","console","info","catch","err","error","changeOperatorStatus","viewType","_f","firstRenderI18n","setFirstRenderI18n","_g","firstAudioOutputInit","setFirstAudioOutputInit","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","screenShareInformation","screenShare","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 { 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 eventDispatch('phone-island-call-start', { number: '*43' })\n store.dispatch.island.setIslandView(null)\n store.dispatch.island.toggleAvoidToShow(true)\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-screen-share-status', () => {\n const screenShareInformation = store.getState().screenShare\n console.log('Screen share status debug information: ', screenShareInformation)\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","number","toggleAvoidToShow","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","screenShareInformation","screenShare","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":"+iDA2BaA,EAAoC,SAACC,OAChDC,EAAUD,EAAAC,WACVC,EAAAF,EAAAG,WAAAA,cAAkBD,EAClBE,EAAMJ,EAAAI,OAEAC,EAAmBC,EAAMA,OAACC,KAAKN,GAAc,IAAIO,MAAM,KACvDC,EAAoBJ,EAAO,GAC3BK,EAAmBL,EAAO,GAC1BM,EAAqBN,EAAO,GAC5BO,EAAoBP,EAAO,GAC3BQ,EAAqBR,EAAO,GAC5BS,EAAmBT,EAAO,GAC1BU,EAAmBV,EAAO,GAG1BW,EAAsBC,EAAAA,UAAkB,GAAvCC,EAAMF,EAAA,GAAEG,EAASH,EAAA,GAClBI,EAAsCH,EAAAA,UAAkB,GAAvDI,EAAcD,EAAA,GAAEE,EAAiBF,EAAA,GAClCG,EAAsCN,EAAAA,UAAkB,GAAvDO,EAAcD,EAAA,GAAEE,EAAiBF,EAAA,GAExCG,EAAAA,WAAU,WACR,IAAMC,EAAS,IAAIC,OAAOC,EAAAA,QAAc,CAAEC,KAAM,WAQhD,OAPAH,EAAOI,UAAY,SAACC,GAEC,WAAfA,EAAMC,MACRd,GAAU,EAEd,EAEO,WACLQ,EAAOO,WACT,CACD,GAAE,IAEHR,EAAAA,WAAU,WACJF,GAAkBH,IACpBF,GAAU,GACVG,GAAkB,GAClBG,GAAkB,GAEtB,GAAG,CAACD,EAAgBH,IAEpBc,EAAgBA,iBAAC,uBAAuB,WACtCC,EAAAA,MAAMC,SAASC,OAAOC,cAAa,GACnCC,gBAAc,wBAAyB,CAAA,EACzC,IACAL,EAAgBA,iBAAC,yBAAyB,WACxCC,EAAAA,MAAMC,SAASC,OAAOC,cAAa,GACnCC,gBAAc,0BAA2B,CAAA,EAC3C,IAEAL,EAAgBA,iBAAC,kCAAkC,WACjDC,EAAAA,MAAMC,SAASC,OAAOG,cAAc,QACpCD,gBAAc,kCAAmC,CAAA,EACnD,IACAL,EAAgBA,iBAAC,oCAAoC,WACnDC,EAAAA,MAAMC,SAASC,OAAOG,cAAc,QACpCD,gBAAc,oCAAqC,CAAA,EACrD,IACAL,EAAgBA,iBAAC,gCAAgC,WAC/CC,EAAAA,MAAMC,SAASC,OAAOG,cAAc,MACpCD,gBAAc,gCAAiC,CAAA,EACjD,IACAL,EAAgBA,iBAAC,mCAAmC,WAClDC,EAAAA,MAAMC,SAASC,OAAOG,cAAc,MACpCD,gBAAc,mCAAoC,CAAA,EACpD,IAEAL,mBAAiB,uBAAuB,SAACF,GACvCS,EAAAA,SACAF,gBAAc,wBAAyB,CAAA,EACzC,IAEAL,mBAAiB,mCAAmC,SAACF,GACnDU,EAAWA,YAAC,kCAAmC,CAAEC,SAAUX,EAAKW,WAChEJ,gBAAc,mCAAoC,CAAA,EACpD,IAEAL,mBAAiB,mCAAmC,SAACF,GACnDU,EAAWA,YAAC,kCAAmC,CAAEC,SAAUX,EAAKW,WAChEJ,gBAAc,mCAAoC,CAAA,EACpD,IAEM,IAAAK,EAAwC5B,EAAAA,UAAS,GAAhD6B,EAAeD,EAAA,GAAEE,EAAkBF,EAAA,GACpCG,EAAkD/B,EAAAA,UAAS,GAA1DgC,EAAoBD,EAAA,GAAEE,EAAuBF,EAAA,GAEpDb,mBAAiB,oCAAoC,SAACF,GAC/CgB,IACHT,EAAAA,cAAc,0BAA2B,CAAEW,OAAQ,QACnDf,EAAAA,MAAMC,SAASC,OAAOG,cAAc,MACpCL,EAAAA,MAAMC,SAASC,OAAOc,mBAAkB,IAG1CC,YAAW,WACT,IAAMC,EAA0BlB,EAAKA,MAACmB,WAAWC,OAAOC,YAExDH,SAAAA,EAAoBI,QACjBC,UAAU1B,EAAKW,UACfgB,MAAK,WACJC,QAAQC,KAAK,oDAEbnB,EAAWA,YAAC,mCAAoC,CAAEC,SAAUX,EAAKW,WAGjEJ,gBAAc,oCAAqC,CAAA,GACnDA,gBAAc,wBAAyB,CAAA,GACvCJ,EAAAA,MAAMC,SAASC,OAAOc,mBAAkB,EAC1C,IACCW,OAAM,SAAUC,GACfH,QAAQI,MAAM,4CAA6CD,GAC3DxB,gBAAc,wBAAyB,CAAA,GACvCJ,EAAAA,MAAMC,SAASC,OAAOc,mBAAkB,EAC1C,GACH,GAAE,IACL,IAGAjB,mBAAiB,gCAAgC,SAACF,GAChDiC,EAAoBA,qBAACjC,GACrBO,gBAAc,gCAAiC,CAAA,EACjD,IAEAL,mBAAiB,6BAA6B,SAACF,GAC7C,IAAMkC,EAAWlC,aAAA,EAAAA,EAAMkC,SACvB/B,EAAAA,MAAMC,SAASC,OAAOG,cAAc0B,EACtC,IAGAzC,EAAAA,WAAU,WACJoB,IACFsB,EAAAA,WACArB,GAAmB,GAEvB,GAAG,CAACD,IAEJ,IAAMQ,EAA0BlB,EAAKA,MAACmB,WAAWC,OAAOC,YAiOxD,OA9NA/B,EAAAA,WAAU,iBACR,GAAIuB,GAAwBK,EAAoB,CAC9C,IAAMe,EAEH,QAFmCrE,EAAAsE,EAAWA,YAC/C,2CACC,IAAAtE,OAAA,EAAAA,EAAA4C,SACHJ,EAAAA,cAAc,mCAAoC,CAChDI,SAAUyB,IAEZnB,GAAwB,EACzB,CACH,GAAG,CAACD,EAAsBK,IAE1B5B,EAAAA,WAAU,WACR6C,EAAAA,gBACD,GAAE,IAEHpC,mBAAiB,6BAA6B,SAACqC,GAC7CC,WAASD,eAAAA,EAAOE,cAClB,IAEAvC,mBAAiB,sCAAsC,SAACF,GACtDG,EAAAA,MAAMC,SAASsC,YAAYC,2BAA2B3C,aAAA,EAAAA,EAAM4C,yBAC5DrC,gBAAc,sCAAuC,CAAA,EACvD,IAEAL,mBAAiB,sBAAsB,SAAC2C,GACtC1C,EAAKA,MAACC,SAAS0C,OAAOC,SAASF,EAAUG,WAC3C,IAGA9C,EAAgBA,iBAAC,iCAAiC,WAChD+C,4BAA0BtB,MAAK,SAACuB,GAC1BA,EACF3C,gBAAc,kCAAmC,CAAA,GAEjDA,gBAAc,qCAAsC,CAAA,EAExD,GACF,IAGAd,EAAAA,WAAU,WACR,IAAM0D,EAAaC,aAAY,WAC7BH,4BAA0BtB,MAAK,SAACuB,GAC1BA,EACF3C,gBAAc,kCAAmC,CAAA,GAEjDA,gBAAc,qCAAsC,CAAA,EAExD,GACD,GAAE,KAEH,OAAO,WAAM,OAAA8C,cAAcF,EAAW,CACvC,GAAE,IAEHjD,mBAAiB,8BAA8B,SAACF,eACxCsD,EAAgE,QAA9BvF,EAAAoC,EAAAA,MAAMmB,WAAWoB,mBAAa,IAAA3E,OAAA,EAAAA,EAAAwF,SAChEC,EAAyBrD,EAAAA,MAAMmB,WAAWoB,YAC5Ce,EAAgCD,aAAA,EAAAA,EAAmBE,aACvD,QACiCC,IAA/BL,GAC+B,KAA/BA,IACCM,EAAOA,QAAC5D,EAAKsD,UACqCK,KAAjB,QAAlC1F,EAAA+B,EAAKsD,UAA6B,IAAArF,OAAA,EAAAA,EAAAyF,cAClC,CACA,IAAIG,EAAyD,QAAlC9E,EAAAiB,EAAKsD,UAA6B,IAAAvE,OAAA,EAAAA,EAAA2E,aAC7DvD,EAAKA,MAACC,SAASsC,YAAYoB,mBAAqD,QAAlC3E,EAAAa,EAAKsD,UAA6B,IAAAnE,OAAA,EAAAA,EAAAuE,cAE3C,WADFG,GACgD,WAAlCJ,GAC/ClD,gBAAc,0BAA2B,CAAA,EAE5C,CACH,IAEAL,EAAgBA,iBAAC,4BAA4B,WAC3C,IAAM6D,EAAkB5D,EAAAA,MAAMmB,WAAW0C,YACzCpC,QAAQqC,IAAI,mCAAoCF,EAClD,IAEA7D,EAAgBA,iBAAC,4BAA4B,WAC3C,IAAMgE,EAAkB/D,EAAAA,MAAMmB,WAAWoB,YACzCd,QAAQqC,IAAI,mCAAoCC,EAClD,IAEAhE,EAAgBA,iBAAC,iCAAiC,WAChD,IAAMiE,EAAsBhE,EAAAA,MAAMmB,WAAW8C,MAC7CxC,QAAQqC,IAAI,oCAAqCE,EACnD,IAEAjE,EAAgBA,iBAAC,uBAAuB,WACtC,IAAMmE,EAAyBlE,EAAAA,MAAMmB,WAAWjB,OAChDuB,QAAQqC,IAAI,2CAA4CI,EAC1D,IAEAnE,EAAgBA,iBAAC,8BAA8B,WAC7C,IAAMoE,EAAoBnE,EAAAA,MAAMmB,WAAWiD,OAC3C3C,QAAQqC,IAAI,qCAAsCK,EACpD,IAEApE,EAAgBA,iBAAC,8BAA8B,WAC7C,IAAMsE,EAAoBrE,EAAAA,MAAMmB,WAAWC,OAC3CK,QAAQqC,IAAI,qCAAsCO,EACpD,IAEAtE,EAAgBA,iBAAC,kCAAkC,WACjD,IAAMuE,EAAwBtE,EAAAA,MAAMmB,WAAWoD,WAC/C9C,QAAQqC,IAAI,qCAAsCQ,EACpD,IAEAvE,EAAgBA,iBAAC,oCAAoC,WACnD,IAAMyE,EAAyBxE,EAAAA,MAAMmB,WAAWsD,YAChDhD,QAAQqC,IAAI,0CAA2CU,EACzD,IAEAzE,EAAgBA,iBAAC,kCAAkC,WACjDC,EAAAA,MAAMC,SAASmB,OAAOsD,QACtBjD,QAAQqC,IAAI,8BACd,IAEA/D,EAAgBA,iBAAC,8BAA8B,WAC7CC,EAAAA,MAAMC,SAASC,OAAOyE,uBAAsB,GAC5CvE,gBAAc,+BAAgC,CAAA,EAChD,IAEAL,EAAgBA,iBAAC,+BAA+B,WAC9CC,EAAAA,MAAMC,SAASC,OAAOyE,uBAAsB,GAC5CvE,gBAAc,+BAAgC,CAAA,EAChD,IAEAL,mBAAiB,4BAA4B,SAAC6E,GACpC,IAAAC,EAAsB7E,EAAKA,MAACmB,WAAWjB,OAAM2E,kBAG7CC,EAAoBF,EAAIE,gBAG1BC,EAAsBC,EAAAA,SAAAA,EAAAA,SAAA,CAAA,EACvBF,GAAe,CAClBG,MAAOJ,EAAoB,OAAS,MACpCK,IAAKC,EAAAA,mBAAqB,OAAS,QAErC/E,EAAAA,cAAc,4BAA6B,CAAEgF,MAAOL,GACtD,IAGAhF,EAAgBA,iBAAC,2BAA2B,WAE1C,GAAqB,WADIC,EAAKA,MAACmB,WAAWoB,YAAWgB,aACtB,CAK7BnD,EAAAA,cAAc,2BAA4B,CAAE0E,gBAJf,CAC3BO,MAAO,MACPC,OAAQ,SAGVlF,gBAAc,8BAA+B,CAAA,GAC7CJ,EAAAA,MAAMC,SAASC,OAAOqF,kBACvB,CACH,IAEAxF,EAAgBA,iBAAC,qCAAqC,WACpDC,EAAAA,MAAMC,SAASC,OAAOsF,sBAAqB,GAC3CpF,gBAAc,sCAAuC,CAAA,EACvD,IAEAL,mBAAiB,8BAA8B,SAAC0F,GAEtC,IAAAC,EAAsB1F,EAAAA,MAAMmB,WAAWwB,OAAOgD,OAAMD,kBACtD9H,EAAyBoC,EAAAA,MAAMmB,WAAWjB,OAAxC0F,EAAIhI,EAAAgI,KAAEC,iBACNC,EAAa9F,EAAKA,MAACmB,WAAWoD,WAAUuB,SAC1CC,EAAa/F,EAAKA,MAACmB,WAAWwB,OAAO9C,KACrCgE,EAAc7D,EAAAA,MAAMmB,WAAW0C,YAC7BmC,EAAiCnC,EAAWmC,SAAlCC,EAAuBpC,EAAWoC,SAAxBC,EAAarC,WAGnCnB,EAAY+C,aAAA,EAAAA,EAAkB/F,KAG9ByG,EACJtC,EAAYmC,UACZnC,EAAYoC,UACZpC,EAAYqC,UACmB,KAA/BrC,EAAYuC,eAqBd,KAjBEJ,GACAC,GACAC,GACAR,EAAoB,GACX,WAATE,GACS,aAATA,GACS,0BAATA,GACU,sBAATA,GAAgCE,GACvB,aAATF,GAAuBE,GACd,aAATF,GAAuBE,GACd,aAATF,IAAyC,aAAjBC,GAAgD,WAAjBA,KASlC,IAAtBH,KACEhD,GAAcqD,EAAWrD,KAAeqD,EAAWrD,GAAW2D,UAC/DF,EACD,CAKA/F,EAAAA,cAAc,2BAA4B,CAAE0E,gBAJf,CAC3BO,MAAO,MACPC,OAAQ,SAGVlF,gBAAc,8BAA+B,CAAA,GAC7CJ,EAAAA,MAAMC,SAASC,OAAOqF,kBACvB,CACH,IAEAxF,EAAgBA,iBAAC,sCAAsC,WACrDC,EAAAA,MAAMC,SAASC,OAAOsF,sBAAqB,GAC3CpF,gBAAc,sCAAuC,CAAA,EACvD,IAGEkG,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAAAC,cAACE,EAAAA,QAAQ,CAACzG,MAAOA,EAAAA,OACfsG,EAAAA,QAAAC,cAACG,SACC,CAAAC,SAAUtI,EACVuI,SAAUpI,EACVqI,UAAWpI,EACXqI,QAASpI,EACTqI,QAASpI,EACTG,OAAQA,EACRkI,iBAAkB,WAAM,OAAA9H,GAAkB,IAC1ClB,OAAQA,GAERsI,UAAAC,cAACU,EAAOA,QAAA,CAACN,SAAUtI,EAAW+E,SAAU9E,EAAU4I,UAAW3I,GAC3D+H,UAAAC,cAACY,EAAAA,OAAM,CACLR,SAAUtI,EACV+E,SAAU9E,EACV4I,UAAW3I,EACXO,OAAQA,EACRkI,iBAAkB,WAAM,OAAA3H,GAAkB,EAAlB,EACxBrB,OAAQA,GAERsI,EAAAA,QAAAC,cAACa,EAAAA,OAAM,CAACN,QAASpI,GACf4H,EAAAA,QAAAC,cAACc,SAAO,CAAAtJ,WAAYA,EAAYC,OAAQA,SAQxD,EAEAL,EAAY2J,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),t=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js");require("../../node_modules/react-redux/es/index.js");var o=require("../../node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs.js"),i=require("../../node_modules/react-redux/es/hooks/useSelector.js");function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),t=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js");require("../../node_modules/react-redux/es/index.js");var o=require("../../node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs.js"),i=require("../../node_modules/react-redux/es/hooks/useSelector.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=n(e),a={open:{width:"56px",height:"56px",borderRadius:"26px"},closed:{width:"24px",height:"24px",borderRadius:"26px"}};exports.Avatar=function(n){var u=n.type,d=i.useSelector((function(e){return e.island})).isOpen,c=e.useMemo((function(){switch(u){case"announcement":return t.faBullhorn;case"call_recording":return t.faVoicemail;default:return t.faMusic}}),[u]);return s.default.createElement(o.motion.div,{animate:d?"open":"closed",variants:a,className:"pi-w-12 pi-h-12 pi-bg-secondaryNeutral dark:pi-bg-secondaryNeutralDark pi-rounded-xl pi-flex pi-items-center pi-justify-center pi-flex-shrink-0 pi-flex-grow-0"},s.default.createElement(r.FontAwesomeIcon,{size:d?"2xl":"lg",icon:c,className:"pi-text-gray-50 dark:pi-text-gray-50"}))};
|
|
2
2
|
//# sourceMappingURL=Avatar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.js","sources":["../../../src/components/AudioPlayerView/Avatar.tsx"],"sourcesContent":["// Copyright (C)
|
|
1
|
+
{"version":3,"file":"Avatar.js","sources":["../../../src/components/AudioPlayerView/Avatar.tsx"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useMemo } from 'react'\nimport { type TypeTypes } from '../../types'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faBullhorn, faVoicemail, faMusic, type IconDefinition } from '@fortawesome/free-solid-svg-icons'\nimport { motion } from 'framer-motion'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\n\nconst animationVariants = {\n open: { width: '56px', height: '56px', borderRadius: '26px' },\n closed: { width: '24px', height: '24px', borderRadius: '26px' }\n}\n\nexport const Avatar: FC<AvatarProps> = ({ type }) => {\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n const icon: IconDefinition = useMemo(() => {\n switch(type) {\n case 'announcement': return faBullhorn\n case 'call_recording': return faVoicemail\n default: return faMusic\n }\n }, [type])\n\n return (\n <motion.div\n animate={isOpen ? 'open' : 'closed'}\n variants={animationVariants}\n className='pi-w-12 pi-h-12 pi-bg-secondaryNeutral dark:pi-bg-secondaryNeutralDark pi-rounded-xl pi-flex pi-items-center pi-justify-center pi-flex-shrink-0 pi-flex-grow-0'\n >\n <FontAwesomeIcon\n size={isOpen ? '2xl' : 'lg'}\n icon={icon}\n className='pi-text-gray-50 dark:pi-text-gray-50'\n />\n </motion.div>\n )\n}\n\nexport interface AvatarProps {\n type?: TypeTypes | null\n}\n"],"names":["animationVariants","open","width","height","borderRadius","closed","_a","type","isOpen","useSelector","state","island","icon","useMemo","faBullhorn","faVoicemail","faMusic","React","createElement","motion","div","animate","variants","className","FontAwesomeIcon","size"],"mappings":"kiBAWMA,EAAoB,CACxBC,KAAM,CAAEC,MAAO,OAAQC,OAAQ,OAAQC,aAAc,QACrDC,OAAQ,CAAEH,MAAO,OAAQC,OAAQ,OAAQC,aAAc,wBAGlB,SAACE,GAAE,IAAAC,EAAID,EAAAC,KACpCC,EAAWC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,iBAErDC,EAAuBC,EAAAA,SAAQ,WACnC,OAAON,GACL,IAAK,eAAgB,OAAOO,aAC5B,IAAK,iBAAkB,OAAOC,cAC9B,QAAS,OAAOC,EAAAA,QAEpB,GAAG,CAACT,IAEJ,OACEU,EAAC,QAAAC,cAAAC,SAAOC,KACNC,QAASb,EAAS,OAAS,SAC3Bc,SAAUtB,EACVuB,UAAU,kKAEVN,EAAAA,QAACC,cAAAM,EAAAA,gBACC,CAAAC,KAAMjB,EAAS,MAAQ,KACvBI,KAAMA,EACNW,UAAU,yCAIlB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var r=require("../node_modules/tslib/tslib.es6.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var r=require("../node_modules/tslib/tslib.es6.js"),e=require("react"),i=require("../utils/genericFunctions/classNames.js");function a(r){return r&&"object"==typeof r&&"default"in r?r:{default:r}}var p=a(e);exports.Button=function(e){var a=e.children,n=e.variant,t=e.active,o=void 0!==t&&t,g=e.conference,d=void 0!==g&&g,s=e.className,l=void 0===s?"":s,u=r.__rest(e,["children","variant","active","conference","className"]),c={base:"pi-flex pi-content-center pi-items-center pi-justify-center pi-tracking-wide pi-duration-200 pi-transform pi-outline-none focus:pi-ring-2 focus:pi-z-20 focus:pi-ring-offset-2 disabled:pi-opacity-40 disabled:pi-cursor-not-allowed pi-border pi-border-transparent focus:pi-ring-offset-white dark:focus:pi-ring-offset-black pi-text-sm pi-leading-4 pi-col-start-auto pi-transition-color pi-shrink-0",variant:{red:"pi-bg-phoneIslandClose dark:pi-bg-phoneIslandCloseDark hover:pi-bg-phoneIslandCloseHover dark:hover:pi-bg-phoneIslandCloseHoverDark focus:pi-ring-emerald-500 dark:focus:ring-emerald-300 pi-text-white dark:pi-text-gray-950 pi-h-12 pi-w-12 pi-rounded-full",green:"pi-bg-phoneIslandCall dark:pi-bg-phoneIslandCallDark hover:pi-bg-phoneIslandCallHover dark:hover:pi-bg-phoneIslandCallHoverDark focus:pi-ring-green-500 focus:dark:pi-ring-200 pi-text-white dark:pi-text-gray-950 pi-h-12 pi-w-12 pi-rounded-full",default:"pi-bg-phoneIslandActive dark:pi-bg-phoneIslandActiveDark hover:pi-bg-gray-500 dark:hover:pi-bg-gray-50 focus:pi-ring-emerald-500 dark:focus:pi-ring-emerald-300 pi-text-primaryInvert dark:pi-text-primaryInvertDark pi-h-12 pi-w-12 pi-rounded-full",neutral:"pi-bg-transparent enabled:hover:pi-bg-gray-500 enabled:hover:pi-border-gray-500 pi-border pi-border-gray-700 focus:pi-ring-0 pi-h-12 pi-w-12 pi-rounded-full",transparent:"pi-bg-transparent dark:enabled:hover:pi-bg-gray-700/30 enabled:hover:pi-bg-gray-300/70 focus:pi-ring-offset-gray-200 dark:focus:pi-ring-gray-500 dark:focus:pi-ring-gray-500 focus:pi-ring-gray-400 pi-text-secondaryNeutral dark:pi-text-secondaryNeutralDark pi-h-12 pi-w-12 pi-rounded-full",transparentSideView:"pi-bg-transparent dark:enabled:hover:pi-bg-gray-600 enabled:hover:pi-bg-gray-600 focus:pi-ring-offset-gray-200 dark:focus:pi-ring-gray-500 dark:focus:pi-ring-gray-500 focus:pi-ring-gray-400 pi-h-8 pi-w-8 pi-rounded pi-text-iconWhite dark:pi-text-iconWhiteDark",transparentSettings:"pi-bg-transparent dark:hover:pi-bg-gray-600 hover:pi-bg-gray-300 focus:pi-ring-offset-gray-200 dark:focus:pi-ring-gray-500 dark:focus:pi-ring-gray-500 focus:pi-ring-gray-400 dark:pi-text-white pi-h-8 pi-w-8 pi-rounded",gray:"dark:pi-bg-gray-300 pi-bg-gray-700 hover:pi-bg-gray-800 dark:hover:pi-bg-gray-50 focus:pi-ring-gray-500 dark:focus:ring-gray-300 pi-text-gray-50 dark:pi-text-gray-900 pi-rounded-full pi-py-4 pi-px-4 pi-max-w-56"},background:{base:{default:"pi-bg-gray-700 dark:pi-bg-gray-300"},active:{default:"pi-bg-gray-500 dark:pi-bg-gray-50"}}};return p.default.createElement(p.default.Fragment,null,p.default.createElement("button",r.__assign({"data-stop-propagation":!0,className:i.classNames(o&&c.background.active[n]?c.background.active[n]:c.background.base[n]&&c.background.base[n],c.base,n&&c.variant[n],l&&l,d?"pi-font-medium":"pi-font-light")},u),a))};
|
|
2
2
|
//# sourceMappingURL=Button.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","sources":["../../src/components/Button.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC, ReactNode, ComponentPropsWithRef } from 'react'\nimport { classNames } from '../utils'\n\ninterface ButtonProps extends ComponentPropsWithRef<'button'> {\n children: ReactNode\n variant:\n | 'red'\n | 'green'\n | 'default'\n | 'neutral'\n | 'transparent'\n | 'transparentSideView'\n | 'transparentSettings'\n | 'gray'\n active?: boolean\n conference?: boolean\n}\n\nexport const Button: FC<ButtonProps> = ({\n children,\n variant,\n active = false,\n conference = false,\n className = '',\n ...props\n}) => {\n const classes = {\n base: 'pi-flex pi-content-center pi-items-center pi-justify-center pi-tracking-wide pi-duration-200 pi-transform pi-outline-none focus:pi-ring-2 focus:pi-z-20 focus:pi-ring-offset-2 disabled:pi-opacity-40 disabled:pi-cursor-not-allowed pi-border pi-border-transparent focus:pi-ring-offset-white dark:focus:pi-ring-offset-black pi-text-sm pi-leading-4 pi-col-start-auto pi-transition-color pi-shrink-0',\n variant: {\n red: '
|
|
1
|
+
{"version":3,"file":"Button.js","sources":["../../src/components/Button.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC, ReactNode, ComponentPropsWithRef } from 'react'\nimport { classNames } from '../utils'\n\ninterface ButtonProps extends ComponentPropsWithRef<'button'> {\n children: ReactNode\n variant:\n | 'red'\n | 'green'\n | 'default'\n | 'neutral'\n | 'transparent'\n | 'transparentSideView'\n | 'transparentSettings'\n | 'gray'\n active?: boolean\n conference?: boolean\n}\n\nexport const Button: FC<ButtonProps> = ({\n children,\n variant,\n active = false,\n conference = false,\n className = '',\n ...props\n}) => {\n const classes = {\n base: 'pi-flex pi-content-center pi-items-center pi-justify-center pi-tracking-wide pi-duration-200 pi-transform pi-outline-none focus:pi-ring-2 focus:pi-z-20 focus:pi-ring-offset-2 disabled:pi-opacity-40 disabled:pi-cursor-not-allowed pi-border pi-border-transparent focus:pi-ring-offset-white dark:focus:pi-ring-offset-black pi-text-sm pi-leading-4 pi-col-start-auto pi-transition-color pi-shrink-0',\n variant: {\n red: 'pi-bg-phoneIslandClose dark:pi-bg-phoneIslandCloseDark hover:pi-bg-phoneIslandCloseHover dark:hover:pi-bg-phoneIslandCloseHoverDark focus:pi-ring-emerald-500 dark:focus:ring-emerald-300 pi-text-white dark:pi-text-gray-950 pi-h-12 pi-w-12 pi-rounded-full',\n green:\n 'pi-bg-phoneIslandCall dark:pi-bg-phoneIslandCallDark hover:pi-bg-phoneIslandCallHover dark:hover:pi-bg-phoneIslandCallHoverDark focus:pi-ring-green-500 focus:dark:pi-ring-200 pi-text-white dark:pi-text-gray-950 pi-h-12 pi-w-12 pi-rounded-full',\n default:\n 'pi-bg-phoneIslandActive dark:pi-bg-phoneIslandActiveDark hover:pi-bg-gray-500 dark:hover:pi-bg-gray-50 focus:pi-ring-emerald-500 dark:focus:pi-ring-emerald-300 pi-text-primaryInvert dark:pi-text-primaryInvertDark pi-h-12 pi-w-12 pi-rounded-full',\n neutral:\n 'pi-bg-transparent enabled:hover:pi-bg-gray-500 enabled:hover:pi-border-gray-500 pi-border pi-border-gray-700 focus:pi-ring-0 pi-h-12 pi-w-12 pi-rounded-full',\n transparent:\n 'pi-bg-transparent dark:enabled:hover:pi-bg-gray-700/30 enabled:hover:pi-bg-gray-300/70 focus:pi-ring-offset-gray-200 dark:focus:pi-ring-gray-500 dark:focus:pi-ring-gray-500 focus:pi-ring-gray-400 pi-text-secondaryNeutral dark:pi-text-secondaryNeutralDark pi-h-12 pi-w-12 pi-rounded-full',\n transparentSideView:\n 'pi-bg-transparent dark:enabled:hover:pi-bg-gray-600 enabled:hover:pi-bg-gray-600 focus:pi-ring-offset-gray-200 dark:focus:pi-ring-gray-500 dark:focus:pi-ring-gray-500 focus:pi-ring-gray-400 pi-h-8 pi-w-8 pi-rounded pi-text-iconWhite dark:pi-text-iconWhiteDark',\n transparentSettings:\n 'pi-bg-transparent dark:hover:pi-bg-gray-600 hover:pi-bg-gray-300 focus:pi-ring-offset-gray-200 dark:focus:pi-ring-gray-500 dark:focus:pi-ring-gray-500 focus:pi-ring-gray-400 dark:pi-text-white pi-h-8 pi-w-8 pi-rounded',\n gray: 'dark:pi-bg-gray-300 pi-bg-gray-700 hover:pi-bg-gray-800 dark:hover:pi-bg-gray-50 focus:pi-ring-gray-500 dark:focus:ring-gray-300 pi-text-gray-50 dark:pi-text-gray-900 pi-rounded-full pi-py-4 pi-px-4 pi-max-w-56',\n },\n background: {\n base: {\n default: 'pi-bg-gray-700 dark:pi-bg-gray-300',\n },\n active: {\n default: 'pi-bg-gray-500 dark:pi-bg-gray-50',\n },\n },\n }\n\n return (\n <>\n <button\n data-stop-propagation={true}\n className={classNames(\n active && classes.background.active[variant]\n ? classes.background.active[variant]\n : classes.background.base[variant] && classes.background.base[variant],\n classes.base,\n variant && classes.variant[variant],\n className && className,\n conference ? 'pi-font-medium' : 'pi-font-light',\n )}\n {...props}\n >\n {children}\n </button>\n </>\n )\n}\n"],"names":["_a","children","variant","_b","active","_c","conference","_d","className","props","__rest","classes","base","red","green","default","neutral","transparent","transparentSideView","transparentSettings","gray","background","React","createElement","Fragment","__assign","classNames"],"mappings":"kSAqBuC,SAACA,GACtC,IAAAC,EAAQD,EAAAC,SACRC,EAAOF,EAAAE,QACPC,EAAcH,EAAAI,OAAdA,OAAM,IAAAD,GAAQA,EACdE,EAAkBL,EAAAM,WAAlBA,OAAU,IAAAD,GAAQA,EAClBE,EAAAP,EAAAQ,UAAAA,OAAY,IAAAD,EAAA,GAAEA,EACXE,EAAKC,EAAAA,OAAAV,EAN8B,0DAQhCW,EAAU,CACdC,KAAM,4YACNV,QAAS,CACPW,IAAK,gQACLC,MACE,qPACFC,QACE,uPACFC,QACE,+JACFC,YACE,iSACFC,oBACE,sQACFC,oBACE,4NACFC,KAAM,sNAERC,WAAY,CACVT,KAAM,CACJG,QAAS,sCAEXX,OAAQ,CACNW,QAAS,uCAKf,OACEO,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAAAC,cAAA,SAAAE,EAAAA,SAAA,CAAA,yBACyB,EACvBjB,UAAWkB,EAAAA,WACTtB,GAAUO,EAAQU,WAAWjB,OAAOF,GAChCS,EAAQU,WAAWjB,OAAOF,GAC1BS,EAAQU,WAAWT,KAAKV,IAAYS,EAAQU,WAAWT,KAAKV,GAChES,EAAQC,KACRV,GAAWS,EAAQT,QAAQA,GAC3BM,GAAaA,EACbF,EAAa,iBAAmB,kBAE9BG,GAEHR,GAIT"}
|
|
@@ -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"),n=require("../../lib/phone/call.js"),i=require("../../utils/customHooks/useEventListener.js"),o=require("../../utils/genericFunctions/eventDispatch.js");require("../../node_modules/react-redux/es/index.js");var a=require("../../store/index.js");require("../../node_modules/socket.io-client/build/esm/index.js");var l=require("../../lib/user/default_device.js");require("../../node_modules/mic-check/lib/index.js"),require("../../lib/webrtc/janus.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js");var s=require("../../lib/webrtc/messages.js"),r=require("../../static/outgoing_ringtone.js");require("../Island.js");var c=require("../../services/astproxy.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("react"),n=require("../../lib/phone/call.js"),i=require("../../utils/customHooks/useEventListener.js"),o=require("../../utils/genericFunctions/eventDispatch.js");require("../../node_modules/react-redux/es/index.js");var a=require("../../store/index.js");require("../../node_modules/socket.io-client/build/esm/index.js");var l=require("../../lib/user/default_device.js");require("../../node_modules/mic-check/lib/index.js"),require("../../lib/webrtc/janus.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js");var s=require("../../lib/webrtc/messages.js"),r=require("../../static/outgoing_ringtone.js");require("../Island.js");var c=require("../../services/astproxy.js"),u=require("../Button.js"),d=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),p=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js");require("../../node_modules/i18next/dist/esm/i18next.js");var f=require("../CustomThemedTooltip.js"),m=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 v=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var h=require("../TransferButton.js"),C=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),b=require("../../node_modules/react-redux/es/hooks/useSelector.js");function j(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var g=j(t),T=g.default.memo((function(e){var t=e.active,n=e.onClick,i=e.tooltipId,o=e.tooltipContent,a=e.icon,l=e.activeIcon,s=void 0===l?a:l;return g.default.createElement(u.Button,{variant:"default",active:t,onClick:n,"data-tooltip-id":i,"data-tooltip-content":o},g.default.createElement(d.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:t?s:a}))})),E=g.default.memo((function(){var j,E,k,y,q=v.useTranslation().t,w=C.useDispatch(),x=b.useSelector((function(e){return e.currentCall})),_=x.paused,I=x.muted,D=x.parked,A=x.transferring,P=b.useSelector((function(e){return e.island})),M=P.view,S=P.actionsExpanded,F=P.sideViewIsVisible,L=b.useSelector((function(e){return e.listen})),V=b.useSelector((function(e){return e.conference})),B=V.isActive,N=V.conferenceStartedFrom,R=b.useSelector((function(e){return null==e?void 0:e.currentUser})),U=R.username,O=R.profile,W=t.useRef(!1),G=t.useRef(!1),H=t.useMemo((function(){return""!==U&&N===U}),[U,N]),K=t.useMemo((function(){return B&&!H}),[B,H]),z=t.useMemo((function(){return(null==L?void 0:L.isIntrude)||(null==L?void 0:L.isListen)}),[L]),J=t.useCallback((function(){I?n.unmuteCurrentCall():n.muteCurrentCall()}),[I]),Q=t.useCallback((function(){_?n.unpauseCurrentCall():n.pauseCurrentCall()}),[_]),X=t.useCallback((function(){w.island.setIslandView("keypad"!==M?"keypad":"call"),F&&o.eventDispatch("phone-island-sideview-close",{}),o.eventDispatch("phone-island-call-keypad-opened",{})}),[M,F,w.island]),Y=t.useCallback((function(){var e=!S;w.island.toggleActionsExpanded(e),o.eventDispatch("phone-island-call-actions-".concat(e?"opened":"closed"),{}),e||o.eventDispatch("phone-island-sideview-close",{})}),[S,w.island]),Z=t.useCallback((function(){var e=F?"phone-island-sideview-close":"phone-island-sideview-open";o.eventDispatch(e,{})}),[F]),$=t.useCallback((function(){w.island.setIslandView("transfer"!==M?"transfer":"call"),F&&o.eventDispatch("phone-island-sideview-close",{}),o.eventDispatch("phone-island-call-transfer-opened",{})}),[M,F,w.island]),ee=t.useCallback((function(){o.eventDispatch("phone-island-conference-list-open",{}),w.island.setIslandView("transfer"!==M?"transfer":"call"),F&&o.eventDispatch("phone-island-sideview-close",{})}),[M,F,w.island]),te=t.useCallback((function(){return e.__awaiter(void 0,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return w.island.setIslandView("waitingConference"),[4,n.startConference()];case 1:return e.sent(),[2]}}))}))}),[w.island]),ne=t.useCallback((function(){B?te():ee()}),[B,te,ee]),ie=t.useMemo((function(){return B&&"call"===M&&!S&&!W.current&&H}),[B,M,S,H]),oe=t.useMemo((function(){return B&&"call"===M&&S&&!G.current&&""!==U&&!H}),[B,M,S,U,H]);t.useEffect((function(){ie&&(w.island.toggleActionsExpanded(!0),o.eventDispatch("phone-island-call-actions-opened",{}),W.current=!0)}),[ie,w.island]),t.useEffect((function(){oe&&(w.island.toggleActionsExpanded(!1),o.eventDispatch("phone-island-call-actions-closed",{}),G.current=!0)}),[oe,w.island]);var ae=t.useCallback((function(){var e=l.isWebRTC()?s.sendDTMF:c.sendPhysicalDTMF;e("*"),a.store.getState().player.audioPlayerPlaying||w.player.updateStartAudioPlayer({src:r.default,loop:!0}),setTimeout((function(){e("1"),w.player.stopAudioPlayer(),A&&setTimeout((function(){w.currentCall.updateTransferring(!1)}),500),o.eventDispatch("phone-island-call-transfer-canceled",{})}),500)}),[A,w.player,w.currentCall]);i.useEventListener("phone-island-call-keypad-open",X),i.useEventListener("phone-island-call-transfer-open",$),i.useEventListener("phone-island-call-transfer-cancel",ae),i.useEventListener("phone-island-call-actions-open",(function(){w.island.toggleActionsExpanded(!0),o.eventDispatch("phone-island-call-actions-opened",{})})),i.useEventListener("phone-island-call-actions-close",(function(){w.island.toggleActionsExpanded(!1),o.eventDispatch("phone-island-call-actions-closed",{})}));var le=t.useMemo((function(){return(null==L?void 0:L.isListen)||(null==L?void 0:L.isIntrude)||B&&!H?L.isIntrude?"pi-mb-6 pi-grid pi-grid-cols-1 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center":B&&!H?"pi-flex pi-items-center pi-justify-center pi-gap-4":"pi-hidden":"pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center"}),[L,B,H]);return g.default.createElement(g.default.Fragment,null,g.default.createElement("div",{className:le},!z&&g.default.createElement(T,{active:_,onClick:Q,tooltipId:"tooltip-pause",tooltipContent:q(_?"Tooltip.Play":"Tooltip.Pause"),icon:p.faPause,activeIcon:p.faPlay}),!(null==L?void 0:L.isListen)&&g.default.createElement(T,{active:I,onClick:J,tooltipId:"tooltip-mute",tooltipContent:q(I?"Tooltip.Unmute":"Tooltip.Mute"),icon:p.faMicrophone,activeIcon:p.faMicrophoneSlash}),!K&&g.default.createElement(h.TransferButton,null),!z&&!K&&g.default.createElement(u.Button,{active:S,variant:"transparent",onClick:Y,"data-tooltip-id":"tooltip-expand","data-tooltip-content":q(S?"Tooltip.Collapse":"Tooltip.Expand")},g.default.createElement(d.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:S?p.faAngleUp:p.faAngleDown}))),S&&g.default.createElement("div",{className:"pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center"},g.default.createElement(T,{active:"keypad"===M,onClick:X,tooltipId:"tooltip-keyboard",tooltipContent:q("Tooltip.Keyboard"),icon:m.faGridRound}),g.default.createElement(T,{active:D,onClick:n.parkCurrentCall,tooltipId:"tooltip-park",tooltipContent:q("Tooltip.Park"),icon:p.faSquareParking}),(null===(y=null===(k=null===(E=null===(j=null==O?void 0:O.macro_permissions)||void 0===j?void 0:j.settings)||void 0===E?void 0:E.permissions)||void 0===k?void 0:k.conference)||void 0===y?void 0:y.value)&&g.default.createElement(u.Button,{"data-stop-propagation":!0,variant:"default",onClick:ne,"data-tooltip-id":"tooltip-conference","data-tooltip-content":B?q("Tooltip.Conference")||"":q("Tooltip.Add user to conference")||""},g.default.createElement(d.FontAwesomeIcon,{icon:B?p.faPlus:p.faUserPlus,className:"pi-h-6 pi-w-6"})),g.default.createElement(u.Button,{variant:"default",onClick:Z,"data-tooltip-id":"tooltip-sideView","data-tooltip-content":q("Tooltip.Other actions")||""},g.default.createElement(d.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:F?m.faClose:m.faOpen}))),g.default.createElement(f.CustomThemedTooltip,{id:"tooltip-transfer",place:"bottom"}),g.default.createElement(f.CustomThemedTooltip,{id:"tooltip-pause",place:"bottom"}),g.default.createElement(f.CustomThemedTooltip,{id:"tooltip-mute",place:"bottom"}),g.default.createElement(f.CustomThemedTooltip,{id:"tooltip-expand",place:"bottom"}),g.default.createElement(f.CustomThemedTooltip,{id:"tooltip-keyboard",place:"bottom"}),g.default.createElement(f.CustomThemedTooltip,{id:"tooltip-conference",place:"bottom"}),g.default.createElement(f.CustomThemedTooltip,{id:"tooltip-park",place:"bottom"}),g.default.createElement(f.CustomThemedTooltip,{id:"tooltip-sideView",place:"left"}))}));exports.default=E;
|
|
2
2
|
//# sourceMappingURL=Actions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Actions.js","sources":["../../../src/components/CallView/Actions.tsx"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useMemo, useEffect, useRef } from 'react'\nimport {\n muteCurrentCall,\n unmuteCurrentCall,\n pauseCurrentCall,\n unpauseCurrentCall,\n parkCurrentCall,\n startConference,\n} from '../../lib/phone/call'\nimport { Button } from '../'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faPause,\n faPlay,\n faMicrophone,\n faMicrophoneSlash,\n faSquareParking,\n faChevronDown,\n faChevronUp,\n faUserPlus,\n faPlus,\n} from '@fortawesome/free-solid-svg-icons'\nimport { faClose, faGridRound, faOpen } from '@nethesis/nethesis-solid-svg-icons'\nimport { RootState, Dispatch } from '../../store'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { sendDTMF } from '../../lib/webrtc/messages'\nimport { store } from '../../store'\nimport outgoingRingtone from '../../static/outgoing_ringtone'\nimport { useTranslation } from 'react-i18next'\nimport { useEventListener, eventDispatch } from '../../utils'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\nimport TransferButton from '../TransferButton'\nimport { isWebRTC } from '../../lib/user/default_device'\nimport { sendPhysicalDTMF } from '../../services/astproxy'\n\nconst Actions: FC = () => {\n // Get multiple values from currentCall store\n const { paused, muted, isRecording } = useSelector((state: RootState) => state.currentCall)\n const parked = useSelector((state: RootState) => state.currentCall.parked)\n\n // Get isOpen and view from island store\n const { view, actionsExpanded, sideViewIsVisible, isConferenceList } = useSelector(\n (state: RootState) => state.island,\n )\n const transferring = useSelector((state: RootState) => state.currentCall.transferring)\n const intrudeListenStatus = useSelector((state: RootState) => state.listen)\n const { isActive, conferenceStartedFrom } = useSelector((state: RootState) => state.conference)\n const { username, profile } = useSelector((state: RootState) => state?.currentUser)\n\n const dispatch = useDispatch<Dispatch>()\n\n // Check if the actions should be expanded automatically\n const autoExpandedRef = useRef(false)\n // Check if the actions should be collapsed automatically\n const autoCollapsedRef = useRef(false)\n\n // Check if user has enabled conference and view is different from waitingConference && the owner is the user\n const shouldExpandActions = useMemo(() => {\n return (\n isActive &&\n view === 'call' &&\n !actionsExpanded &&\n !autoExpandedRef.current &&\n username !== '' &&\n conferenceStartedFrom !== '' &&\n conferenceStartedFrom === username\n )\n }, [isActive, view, actionsExpanded, conferenceStartedFrom])\n\n // Check if user is not the owner of the conference\n const shouldCollapseActions = useMemo(() => {\n return (\n isActive &&\n view === 'call' &&\n actionsExpanded &&\n !autoCollapsedRef.current &&\n username !== '' &&\n conferenceStartedFrom !== username\n )\n }, [isActive, view, actionsExpanded, conferenceStartedFrom])\n\n // Automatically expand actions if the user has enabled conference\n useEffect(() => {\n if (shouldExpandActions) {\n dispatch.island.toggleActionsExpanded(true)\n eventDispatch('phone-island-call-actions-opened', {})\n autoExpandedRef.current = true\n }\n }, [shouldExpandActions, dispatch.island])\n\n // Automatically collapse actions if the user is not the owner of the conference\n useEffect(() => {\n if (shouldCollapseActions) {\n dispatch.island.toggleActionsExpanded(false)\n eventDispatch('phone-island-call-actions-closed', {})\n autoCollapsedRef.current = true\n }\n }, [shouldCollapseActions, dispatch.island])\n\n function openKeypad() {\n dispatch.island.setIslandView(view !== 'keypad' ? 'keypad' : 'call')\n // Check if sideView is visible and close it\n if (sideViewIsVisible) {\n eventDispatch('phone-island-sideview-close', {})\n }\n eventDispatch('phone-island-call-keypad-opened', {})\n }\n useEventListener('phone-island-call-keypad-open', () => {\n openKeypad()\n })\n\n function transfer() {\n // Open the transfer view\n dispatch.island.setIslandView(view !== 'transfer' ? 'transfer' : 'call')\n // Check if sideView is visible and close it\n if (sideViewIsVisible) {\n eventDispatch('phone-island-sideview-close', {})\n }\n eventDispatch('phone-island-call-transfer-opened', {})\n }\n\n useEventListener('phone-island-call-transfer-open', () => {\n transfer()\n })\n useEventListener('phone-island-call-transfer-cancel', () => {\n cancelTransfer()\n })\n\n // Cancels the current transfer through dtmfs\n function cancelTransfer() {\n if (isWebRTC()) {\n sendDTMF('*')\n } else {\n sendPhysicalDTMF('*')\n }\n\n const { audioPlayerPlaying } = store.getState().player\n // Check if the local audio is already playing and start playing\n if (!audioPlayerPlaying) {\n dispatch.player.updateStartAudioPlayer({\n src: outgoingRingtone,\n loop: true,\n })\n }\n setTimeout(() => {\n if (isWebRTC()) {\n sendDTMF('1')\n } else {\n sendPhysicalDTMF('1')\n }\n\n dispatch.player.stopAudioPlayer()\n // The workarround to disable transfer because of the wrong conv.connection value from ws\n if (transferring) {\n setTimeout(() => {\n dispatch.currentCall.updateTransferring(false)\n }, 500)\n }\n\n eventDispatch('phone-island-call-transfer-canceled', {})\n }, 500)\n }\n\n useEventListener('phone-island-call-actions-open', () => {\n dispatch.island.toggleActionsExpanded(true)\n eventDispatch('phone-island-call-actions-opened', {})\n })\n useEventListener('phone-island-call-actions-close', () => {\n dispatch.island.toggleActionsExpanded(false)\n eventDispatch('phone-island-call-actions-closed', {})\n })\n function toggleActionsExpanded() {\n if (actionsExpanded) {\n dispatch.island.toggleActionsExpanded(false)\n eventDispatch('phone-island-call-actions-closed', {})\n eventDispatch('phone-island-sideview-close', {})\n } else {\n dispatch.island.toggleActionsExpanded(true)\n eventDispatch('phone-island-call-actions-opened', {})\n }\n }\n\n const beginConference = () => {\n // Update island store and set conference list view to true\n eventDispatch('phone-island-conference-list-open', {})\n // Set the island view to transfer list\n dispatch.island.setIslandView(view !== 'transfer' ? 'transfer' : 'call')\n // Check if sideView is visible and close it\n if (sideViewIsVisible) {\n eventDispatch('phone-island-sideview-close', {})\n }\n }\n\n const addUserToConference = async () => {\n dispatch.island.setIslandView('waitingConference')\n const conferenceStarted = await startConference()\n }\n\n const { t } = useTranslation()\n // Phone island header section\n return (\n <>\n <div\n className={`${\n !intrudeListenStatus?.isListen &&\n !intrudeListenStatus?.isIntrude &&\n (!isActive || (isActive && conferenceStartedFrom === username))\n ? 'pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'\n : intrudeListenStatus.isIntrude\n ? 'pi-mb-6 pi-grid pi-grid-cols-1 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'\n : isActive && conferenceStartedFrom !== username\n ? 'pi-flex pi-items-center pi-justify-center pi-gap-4'\n : 'pi-hidden'\n } `}\n >\n {!(intrudeListenStatus?.isIntrude || intrudeListenStatus?.isListen) && (\n <Button\n variant='default'\n active={paused ? true : false}\n onClick={() => (paused ? unpauseCurrentCall() : pauseCurrentCall())}\n data-tooltip-id='tooltip-pause'\n data-tooltip-content={paused ? `${t('Tooltip.Play')}` : `${t('Tooltip.Pause')}`}\n >\n {paused ? (\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faPlay} />\n ) : (\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faPause} />\n )}\n </Button>\n )}\n {!intrudeListenStatus?.isListen && (\n <Button\n variant='default'\n active={muted ? true : false}\n onClick={() => (muted ? unmuteCurrentCall() : muteCurrentCall())}\n data-tooltip-id='tooltip-mute'\n data-tooltip-content={muted ? `${t('Tooltip.Unmute')}` : `${t('Tooltip.Mute')}`}\n >\n {muted ? (\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faMicrophoneSlash} />\n ) : (\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faMicrophone} />\n )}\n </Button>\n )}\n {/* If user is in conference and is not the owner of the conference, hide the transfer button */}\n {!(isActive && conferenceStartedFrom !== username) && <TransferButton />}\n {!(intrudeListenStatus?.isIntrude || intrudeListenStatus?.isListen) &&\n !(isActive && conferenceStartedFrom !== username) && (\n <Button\n active={actionsExpanded}\n variant='transparent'\n onClick={() => toggleActionsExpanded()}\n data-tooltip-id='tooltip-expand'\n data-tooltip-content={\n actionsExpanded ? `${t('Tooltip.Collapse')}` : `${t('Tooltip.Expand')}`\n }\n >\n {actionsExpanded ? (\n <FontAwesomeIcon\n className='pi-text-gray-700 dark:pi-text-gray-200 pi-h-6 pi-w-6'\n icon={faChevronUp}\n />\n ) : (\n <FontAwesomeIcon\n className='pi-text-gray-700 dark:pi-text-gray-200 pi-h-6 pi-w-6'\n icon={faChevronDown}\n />\n )}\n </Button>\n )}\n </div>\n {/* Actions expanded section */}\n {actionsExpanded ? (\n <>\n {' '}\n <div className='pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'>\n <Button\n active={view === 'keypad'}\n variant='default'\n onClick={openKeypad}\n data-tooltip-id='tooltip-keyboard'\n data-tooltip-content={t('Tooltip.Keyboard') || ''}\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faGridRound} />\n </Button>\n <Button\n active={parked}\n variant='default'\n onClick={parkCurrentCall}\n data-tooltip-id='tooltip-park'\n data-tooltip-content={t('Tooltip.Park') || ''}\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faSquareParking} />\n </Button>\n {profile?.macro_permissions?.settings?.permissions?.conference?.value && (\n <Button\n data-stop-propagation={true}\n variant='default'\n onClick={() => (isActive ? addUserToConference() : beginConference())}\n data-tooltip-id='tooltip-conference'\n data-tooltip-content={\n isActive\n ? t('Tooltip.Conference') || ''\n : t('Tooltip.Add user to conference') || ''\n }\n >\n <FontAwesomeIcon icon={isActive ? faPlus : faUserPlus} className='pi-h-6 pi-w-6' />\n </Button>\n )}\n\n <Button\n variant='default'\n onClick={() =>\n sideViewIsVisible\n ? eventDispatch('phone-island-sideview-close', {})\n : eventDispatch('phone-island-sideview-open', {})\n }\n data-tooltip-id='tooltip-sideView'\n data-tooltip-content={t('Tooltip.Other actions') || ''}\n >\n <FontAwesomeIcon\n className='pi-h-6 pi-w-6'\n icon={sideViewIsVisible ? faClose : faOpen}\n />\n </Button>\n </div>\n </>\n ) : (\n <></>\n )}\n {/* Buttons tooltips */}\n <CustomThemedTooltip id='tooltip-transfer' place='bottom' />\n <CustomThemedTooltip id='tooltip-pause' place='bottom' />\n <CustomThemedTooltip id='tooltip-mute' place='bottom' />\n <CustomThemedTooltip id='tooltip-expand' place='bottom' />\n <CustomThemedTooltip id='tooltip-keyboard' place='bottom' />\n <CustomThemedTooltip id='tooltip-conference' place='bottom' />\n <CustomThemedTooltip id='tooltip-park' place='bottom' />\n <CustomThemedTooltip id='tooltip-sideView' place='left' />\n </>\n )\n}\n\nexport default Actions\n"],"names":["_e","useSelector","state","currentCall","paused","muted","isRecording","parked","_f","island","view","actionsExpanded","sideViewIsVisible","isConferenceList","transferring","intrudeListenStatus","listen","_g","conference","isActive","conferenceStartedFrom","_h","currentUser","username","profile","dispatch","useDispatch","autoExpandedRef","useRef","autoCollapsedRef","shouldExpandActions","useMemo","current","shouldCollapseActions","openKeypad","setIslandView","eventDispatch","useEffect","toggleActionsExpanded","useEventListener","isWebRTC","sendDTMF","sendPhysicalDTMF","store","getState","player","audioPlayerPlaying","updateStartAudioPlayer","src","outgoingRingtone","loop","setTimeout","stopAudioPlayer","updateTransferring","cancelTransfer","t","useTranslation","React","createElement","Fragment","className","concat","isListen","isIntrude","Button","variant","active","onClick","unpauseCurrentCall","pauseCurrentCall","FontAwesomeIcon","icon","faPlay","faPause","unmuteCurrentCall","muteCurrentCall","faMicrophoneSlash","faMicrophone","TransferButton","faChevronUp","faChevronDown","faGridRound","parkCurrentCall","faSquareParking","_d","_c","_b","_a","macro_permissions","settings","permissions","value","__awaiter","startConference","sent","faPlus","faUserPlus","faClose","faOpen","CustomThemedTooltip","id","place"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Actions.js","sources":["../../../src/components/CallView/Actions.tsx"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useMemo, useEffect, useRef, useCallback } from 'react'\nimport {\n muteCurrentCall,\n unmuteCurrentCall,\n pauseCurrentCall,\n unpauseCurrentCall,\n parkCurrentCall,\n startConference,\n} from '../../lib/phone/call'\nimport { Button } from '../'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faPause,\n faPlay,\n faMicrophone,\n faMicrophoneSlash,\n faSquareParking,\n faUserPlus,\n faPlus,\n faAngleDown,\n faAngleUp,\n} from '@fortawesome/free-solid-svg-icons'\nimport { faClose, faGridRound, faOpen } from '@nethesis/nethesis-solid-svg-icons'\nimport { RootState, Dispatch } from '../../store'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { sendDTMF } from '../../lib/webrtc/messages'\nimport { store } from '../../store'\nimport outgoingRingtone from '../../static/outgoing_ringtone'\nimport { useTranslation } from 'react-i18next'\nimport { useEventListener, eventDispatch } from '../../utils'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\nimport TransferButton from '../TransferButton'\nimport { isWebRTC } from '../../lib/user/default_device'\nimport { sendPhysicalDTMF } from '../../services/astproxy'\nimport { IconDefinition } from '@fortawesome/fontawesome-common-types'\n\ninterface ActionButtonProps {\n active: boolean\n onClick: () => void\n tooltipId: string\n tooltipContent: string\n icon: IconDefinition\n activeIcon?: IconDefinition\n}\n\nconst ActionButton: React.FC<ActionButtonProps> = React.memo(\n ({ active, onClick, tooltipId, tooltipContent, icon, activeIcon = icon }) => (\n <Button\n variant='default'\n active={active}\n onClick={onClick}\n data-tooltip-id={tooltipId}\n data-tooltip-content={tooltipContent}\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={active ? activeIcon : icon} />\n </Button>\n ),\n)\n\nconst Actions: FC = () => {\n const { t } = useTranslation()\n const dispatch = useDispatch<Dispatch>()\n\n const { paused, muted, parked, transferring } = useSelector(\n (state: RootState) => state.currentCall,\n )\n const { view, actionsExpanded, sideViewIsVisible } = useSelector(\n (state: RootState) => state.island,\n )\n const intrudeListenStatus = useSelector((state: RootState) => state.listen)\n const { isActive, conferenceStartedFrom } = useSelector((state: RootState) => state.conference)\n const { username, profile } = useSelector((state: RootState) => state?.currentUser)\n\n // Check if the actions should be expanded automatically\n const autoExpandedRef = useRef(false)\n // Check if the actions should be collapsed automatically\n const autoCollapsedRef = useRef(false)\n\n const isOwnerOfConference = useMemo(\n () => username !== '' && conferenceStartedFrom === username,\n [username, conferenceStartedFrom],\n )\n\n const shouldHideTransferButton = useMemo(\n () => isActive && !isOwnerOfConference,\n [isActive, isOwnerOfConference],\n )\n\n const shouldHideButtons = useMemo(\n () => intrudeListenStatus?.isIntrude || intrudeListenStatus?.isListen,\n [intrudeListenStatus],\n )\n\n const toggleMute = useCallback(() => {\n muted ? unmuteCurrentCall() : muteCurrentCall()\n }, [muted])\n\n const togglePause = useCallback(() => {\n paused ? unpauseCurrentCall() : pauseCurrentCall()\n }, [paused])\n\n const openKeypad = useCallback(() => {\n dispatch.island.setIslandView(view !== 'keypad' ? 'keypad' : 'call')\n if (sideViewIsVisible) {\n eventDispatch('phone-island-sideview-close', {})\n }\n eventDispatch('phone-island-call-keypad-opened', {})\n }, [view, sideViewIsVisible, dispatch.island])\n\n const toggleActionsExpanded = useCallback(() => {\n const newState = !actionsExpanded\n dispatch.island.toggleActionsExpanded(newState)\n eventDispatch(`phone-island-call-actions-${newState ? 'opened' : 'closed'}`, {})\n if (!newState) {\n eventDispatch('phone-island-sideview-close', {})\n }\n }, [actionsExpanded, dispatch.island])\n\n const toggleSideView = useCallback(() => {\n const event = sideViewIsVisible ? 'phone-island-sideview-close' : 'phone-island-sideview-open'\n eventDispatch(event, {})\n }, [sideViewIsVisible])\n\n const transfer = useCallback(() => {\n dispatch.island.setIslandView(view !== 'transfer' ? 'transfer' : 'call')\n if (sideViewIsVisible) {\n eventDispatch('phone-island-sideview-close', {})\n }\n eventDispatch('phone-island-call-transfer-opened', {})\n }, [view, sideViewIsVisible, dispatch.island])\n\n const beginConference = useCallback(() => {\n eventDispatch('phone-island-conference-list-open', {})\n dispatch.island.setIslandView(view !== 'transfer' ? 'transfer' : 'call')\n if (sideViewIsVisible) {\n eventDispatch('phone-island-sideview-close', {})\n }\n }, [view, sideViewIsVisible, dispatch.island])\n\n const addUserToConference = useCallback(async () => {\n dispatch.island.setIslandView('waitingConference')\n await startConference()\n }, [dispatch.island])\n\n const handleConferenceAction = useCallback(() => {\n isActive ? addUserToConference() : beginConference()\n }, [isActive, addUserToConference, beginConference])\n\n const shouldExpandActions = useMemo(() => {\n return (\n isActive &&\n view === 'call' &&\n !actionsExpanded &&\n !autoExpandedRef.current &&\n isOwnerOfConference\n )\n }, [isActive, view, actionsExpanded, isOwnerOfConference])\n\n // Check if user is not the owner of the conference\n const shouldCollapseActions = useMemo(() => {\n return (\n isActive &&\n view === 'call' &&\n actionsExpanded &&\n !autoCollapsedRef.current &&\n username !== '' &&\n !isOwnerOfConference\n )\n }, [isActive, view, actionsExpanded, username, isOwnerOfConference])\n\n // Automatically expand actions if the user has enabled conference\n useEffect(() => {\n if (shouldExpandActions) {\n dispatch.island.toggleActionsExpanded(true)\n eventDispatch('phone-island-call-actions-opened', {})\n autoExpandedRef.current = true\n }\n }, [shouldExpandActions, dispatch.island])\n\n // Automatically collapse actions if the user is not the owner of the conference\n useEffect(() => {\n if (shouldCollapseActions) {\n dispatch.island.toggleActionsExpanded(false)\n eventDispatch('phone-island-call-actions-closed', {})\n autoCollapsedRef.current = true\n }\n }, [shouldCollapseActions, dispatch.island])\n\n const cancelTransfer = useCallback(() => {\n const sendDtmfFunc = isWebRTC() ? sendDTMF : sendPhysicalDTMF\n\n sendDtmfFunc('*')\n\n const { audioPlayerPlaying } = store.getState().player\n // Check if the local audio is already playing and start playing\n if (!audioPlayerPlaying) {\n dispatch.player.updateStartAudioPlayer({\n src: outgoingRingtone,\n loop: true,\n })\n }\n\n setTimeout(() => {\n sendDtmfFunc('1')\n dispatch.player.stopAudioPlayer()\n // The workarround to disable transfer because of the wrong conv.connection value from ws\n if (transferring) {\n setTimeout(() => {\n dispatch.currentCall.updateTransferring(false)\n }, 500)\n }\n\n eventDispatch('phone-island-call-transfer-canceled', {})\n }, 500)\n }, [transferring, dispatch.player, dispatch.currentCall])\n\n useEventListener('phone-island-call-keypad-open', openKeypad)\n useEventListener('phone-island-call-transfer-open', transfer)\n useEventListener('phone-island-call-transfer-cancel', cancelTransfer)\n useEventListener('phone-island-call-actions-open', () => {\n dispatch.island.toggleActionsExpanded(true)\n eventDispatch('phone-island-call-actions-opened', {})\n })\n useEventListener('phone-island-call-actions-close', () => {\n dispatch.island.toggleActionsExpanded(false)\n eventDispatch('phone-island-call-actions-closed', {})\n })\n\n const mainGridClassName = useMemo(() => {\n if (\n intrudeListenStatus?.isListen ||\n intrudeListenStatus?.isIntrude ||\n (isActive && !isOwnerOfConference)\n ) {\n if (intrudeListenStatus.isIntrude) {\n return 'pi-mb-6 pi-grid pi-grid-cols-1 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'\n }\n if (isActive && !isOwnerOfConference) {\n return 'pi-flex pi-items-center pi-justify-center pi-gap-4'\n }\n return 'pi-hidden'\n }\n return 'pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'\n }, [intrudeListenStatus, isActive, isOwnerOfConference])\n\n return (\n <>\n <div className={mainGridClassName}>\n {!shouldHideButtons && (\n <ActionButton\n active={paused}\n onClick={togglePause}\n tooltipId='tooltip-pause'\n tooltipContent={paused ? t('Tooltip.Play') : t('Tooltip.Pause')}\n icon={faPause}\n activeIcon={faPlay}\n />\n )}\n\n {!intrudeListenStatus?.isListen && (\n <ActionButton\n active={muted}\n onClick={toggleMute}\n tooltipId='tooltip-mute'\n tooltipContent={muted ? t('Tooltip.Unmute') : t('Tooltip.Mute')}\n icon={faMicrophone}\n activeIcon={faMicrophoneSlash}\n />\n )}\n\n {!shouldHideTransferButton && <TransferButton />}\n\n {!shouldHideButtons && !shouldHideTransferButton && (\n <Button\n active={actionsExpanded}\n variant='transparent'\n onClick={toggleActionsExpanded}\n data-tooltip-id='tooltip-expand'\n data-tooltip-content={actionsExpanded ? t('Tooltip.Collapse') : t('Tooltip.Expand')}\n >\n <FontAwesomeIcon\n className='pi-h-6 pi-w-6'\n icon={actionsExpanded ? faAngleUp : faAngleDown}\n />\n </Button>\n )}\n </div>\n\n {/* Actions expanded section */}\n {actionsExpanded && (\n <div className='pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'>\n <ActionButton\n active={view === 'keypad'}\n onClick={openKeypad}\n tooltipId='tooltip-keyboard'\n tooltipContent={t('Tooltip.Keyboard')}\n icon={faGridRound}\n />\n\n <ActionButton\n active={parked}\n onClick={parkCurrentCall}\n tooltipId='tooltip-park'\n tooltipContent={t('Tooltip.Park')}\n icon={faSquareParking}\n />\n\n {profile?.macro_permissions?.settings?.permissions?.conference?.value && (\n <Button\n data-stop-propagation={true}\n variant='default'\n onClick={handleConferenceAction}\n data-tooltip-id='tooltip-conference'\n data-tooltip-content={\n isActive ? t('Tooltip.Conference') || '' : t('Tooltip.Add user to conference') || ''\n }\n >\n <FontAwesomeIcon icon={isActive ? faPlus : faUserPlus} className='pi-h-6 pi-w-6' />\n </Button>\n )}\n\n <Button\n variant='default'\n onClick={toggleSideView}\n data-tooltip-id='tooltip-sideView'\n data-tooltip-content={t('Tooltip.Other actions') || ''}\n >\n <FontAwesomeIcon\n className='pi-h-6 pi-w-6'\n icon={sideViewIsVisible ? faClose : faOpen}\n />\n </Button>\n </div>\n )}\n {/* Buttons tooltips */}\n <CustomThemedTooltip id='tooltip-transfer' place='bottom' />\n <CustomThemedTooltip id='tooltip-pause' place='bottom' />\n <CustomThemedTooltip id='tooltip-mute' place='bottom' />\n <CustomThemedTooltip id='tooltip-expand' place='bottom' />\n <CustomThemedTooltip id='tooltip-keyboard' place='bottom' />\n <CustomThemedTooltip id='tooltip-conference' place='bottom' />\n <CustomThemedTooltip id='tooltip-park' place='bottom' />\n <CustomThemedTooltip id='tooltip-sideView' place='left' />\n </>\n )\n}\n\nexport default React.memo(Actions)\n"],"names":["ActionButton","React","memo","_a","active","onClick","tooltipId","tooltipContent","icon","_b","activeIcon","createElement","Button","variant","FontAwesomeIcon","className","Actions$1","t","useTranslation","dispatch","useDispatch","_e","useSelector","state","currentCall","paused","muted","parked","transferring","_f","island","view","actionsExpanded","sideViewIsVisible","intrudeListenStatus","listen","_g","conference","isActive","conferenceStartedFrom","_h","currentUser","username","profile","autoExpandedRef","useRef","autoCollapsedRef","isOwnerOfConference","useMemo","shouldHideTransferButton","shouldHideButtons","isIntrude","isListen","toggleMute","useCallback","unmuteCurrentCall","muteCurrentCall","togglePause","unpauseCurrentCall","pauseCurrentCall","openKeypad","setIslandView","eventDispatch","toggleActionsExpanded","newState","concat","toggleSideView","event","transfer","beginConference","addUserToConference","__awaiter","startConference","sent","handleConferenceAction","shouldExpandActions","current","shouldCollapseActions","useEffect","cancelTransfer","sendDtmfFunc","isWebRTC","sendDTMF","sendPhysicalDTMF","store","getState","player","audioPlayerPlaying","updateStartAudioPlayer","src","outgoingRingtone","loop","setTimeout","stopAudioPlayer","updateTransferring","useEventListener","mainGridClassName","Fragment","faPause","faPlay","faMicrophone","faMicrophoneSlash","TransferButton","faAngleUp","faAngleDown","faGridRound","parkCurrentCall","faSquareParking","_d","_c","macro_permissions","settings","permissions","value","faPlus","faUserPlus","faClose","faOpen","CustomThemedTooltip","id","place"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var n=require("../../node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var n=require("../../node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs.js"),r=require("../../node_modules/react-redux/es/hooks/useSelector.js");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=t(e),o={open:{width:"56px",height:"56px",borderRadius:"26px"},closed:{width:"24px",height:"24px",borderRadius:"26px"}};exports.default=function(){var t=r.useSelector((function(e){return e.island})).isOpen,a=r.useSelector((function(e){return e.avatars})).avatars,s=r.useSelector((function(e){return e.users})),u=r.useSelector((function(e){return e.currentCall})),d=u.username,l=u.number,c=u.incoming,p=u.outgoing,m=u.accepted,v=u.transferring,f=e.useMemo((function(){var e;return v?(null==s?void 0:s.extensions)&&(null===(e=s.extensions[l])||void 0===e?void 0:e.username)?null==a?void 0:a[s.extensions[l].username]:void 0:null==a?void 0:a[d]}),[a,d,v,s,l]),g=c||p&&!m;return i.default.createElement(n.motion.div,{className:"pi-relative ".concat(t?"pi--mt-1":""),animate:t?"open":"closed",variants:o},g&&i.default.createElement(n.motion.div,{style:{animationDuration:"2s"},animate:t?"open":"closed",variants:o,className:"pi-rounded-xl pi-bg-gray-600 pi-absolute pi-opacity-60 pi-top-0 pi-left-0 pi-animate-ping pi-h-12 pi-w-12"}),i.default.createElement(n.motion.div,{className:"pi-relative pi-z-30 pi-h-12 pi-w-12 pi-bg-secondaryNeutral dark:pi-bg-secondaryNeutralDark pi-rounded-sm pi-bg-cover",style:{backgroundImage:f?"url(".concat(f,")"):"none",backgroundRepeat:"no-repeat",backgroundSize:"contain"},animate:t?"open":"closed",variants:o}))};
|
|
2
2
|
//# sourceMappingURL=Avatar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.js","sources":["../../../src/components/CallView/Avatar.tsx"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport { motion } from 'framer-motion'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\n\nconst iconVariants = {\n open: {\n width: '56px',\n height: '56px',\n borderRadius: '26px',\n },\n closed: {\n width: '24px',\n height: '24px',\n borderRadius: '26px',\n },\n}\n\nconst Avatar: FC = () => {\n
|
|
1
|
+
{"version":3,"file":"Avatar.js","sources":["../../../src/components/CallView/Avatar.tsx"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useMemo } from 'react'\nimport { motion } from 'framer-motion'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\n\nconst iconVariants = {\n open: {\n width: '56px',\n height: '56px',\n borderRadius: '26px',\n },\n closed: {\n width: '24px',\n height: '24px',\n borderRadius: '26px',\n },\n}\n\nconst Avatar: FC = () => {\n const { isOpen } = useSelector((state: RootState) => state.island)\n const { avatars } = useSelector((state: RootState) => state.avatars)\n const user = useSelector((state: RootState) => state.users)\n const {\n username,\n number,\n incoming,\n outgoing,\n accepted,\n transferring,\n } = useSelector((state: RootState) => state.currentCall)\n\n const avatarUrl = useMemo(() => {\n if (transferring) {\n return user?.extensions && user.extensions[number]?.username\n ? avatars?.[user.extensions[number].username]\n : undefined\n }\n return avatars?.[username]\n }, [avatars, username, transferring, user, number])\n\n const showPulseEffect = incoming || (outgoing && !accepted)\n\n return (\n <motion.div\n className={`pi-relative ${isOpen ? 'pi--mt-1' : ''}`}\n animate={isOpen ? 'open' : 'closed'}\n variants={iconVariants}\n >\n {showPulseEffect && (\n <motion.div\n style={{ animationDuration: '2s' }}\n animate={isOpen ? 'open' : 'closed'}\n variants={iconVariants}\n className='pi-rounded-xl pi-bg-gray-600 pi-absolute pi-opacity-60 pi-top-0 pi-left-0 pi-animate-ping pi-h-12 pi-w-12'\n />\n )}\n <motion.div\n className='pi-relative pi-z-30 pi-h-12 pi-w-12 pi-bg-secondaryNeutral dark:pi-bg-secondaryNeutralDark pi-rounded-sm pi-bg-cover'\n style={{\n backgroundImage: avatarUrl ? `url(${avatarUrl})` : 'none',\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'contain',\n }}\n animate={isOpen ? 'open' : 'closed'}\n variants={iconVariants}\n />\n </motion.div>\n )\n}\n\nexport default Avatar\n"],"names":["iconVariants","open","width","height","borderRadius","closed","isOpen","useSelector","state","island","avatars","user","users","_a","currentCall","username","number","incoming","outgoing","accepted","transferring","avatarUrl","useMemo","extensions","undefined","showPulseEffect","React","createElement","motion","div","className","concat","animate","variants","style","animationDuration","backgroundImage","backgroundRepeat","backgroundSize"],"mappings":"wYAQMA,EAAe,CACnBC,KAAM,CACJC,MAAO,OACPC,OAAQ,OACRC,aAAc,QAEhBC,OAAQ,CACNH,MAAO,OACPC,OAAQ,OACRC,aAAc,yBAIC,WACT,IAAAE,EAAWC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,iBACnDC,EAAYH,eAAY,SAACC,GAAqB,OAAAA,EAAME,mBACtDC,EAAOJ,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMI,KAAN,IACzCC,EAOFN,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMM,WAAN,IANpCC,EAAQF,EAAAE,SACRC,EAAMH,EAAAG,OACNC,aACAC,EAAQL,EAAAK,SACRC,EAAQN,EAAAM,SACRC,iBAGIC,EAAYC,EAAAA,SAAQ,iBACxB,OAAIF,GACKT,aAAA,EAAAA,EAAMY,cAAqC,QAAvBV,EAAAF,EAAKY,WAAWP,UAAO,IAAAH,OAAA,EAAAA,EAAEE,UAChDL,eAAAA,EAAUC,EAAKY,WAAWP,GAAQD,eAClCS,EAECd,aAAO,EAAPA,EAAUK,EACnB,GAAG,CAACL,EAASK,EAAUK,EAAcT,EAAMK,IAErCS,EAAkBR,GAAaC,IAAaC,EAElD,OACEO,EAAAA,QAAAC,cAACC,EAAMA,OAACC,IACN,CAAAC,UAAW,eAAAC,OAAezB,EAAS,WAAa,IAChD0B,QAAS1B,EAAS,OAAS,SAC3B2B,SAAUjC,GAETyB,GACCC,EAAAA,QAACC,cAAAC,EAAMA,OAACC,IAAG,CACTK,MAAO,CAAEC,kBAAmB,MAC5BH,QAAS1B,EAAS,OAAS,SAC3B2B,SAAUjC,EACV8B,UAAU,8GAGdJ,EAAC,QAAAC,cAAAC,SAAOC,IAAG,CACTC,UAAU,uHACVI,MAAO,CACLE,gBAAiBf,EAAY,OAAOU,OAAAV,EAAY,KAAG,OACnDgB,iBAAkB,YAClBC,eAAgB,WAElBN,QAAS1B,EAAS,OAAS,SAC3B2B,SAAUjC,IAIlB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../styles/Island.styles.js");require("../../node_modules/react-redux/es/index.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
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../styles/Island.styles.js");require("../../node_modules/react-redux/es/index.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 i=require("./DisplayNameUtils.js"),n=require("../../node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs.js"),l=require("../../node_modules/react-redux/es/hooks/useSelector.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=o(e),u=function(e){var t,r;return{displayName:null===(t=null==e?void 0:e.currentCall)||void 0===t?void 0:t.displayName,incoming:null===(r=null==e?void 0:e.currentCall)||void 0===r?void 0:r.incoming}},a=function(e){return e.listen},d=e.memo((function(){var o=e.useState(!1),d=o[0],c=o[1],m=e.useRef(null),p=e.useRef(null),f=n.motion(t.StyledName),v=l.useSelector(u),y=v.displayName,j=v.incoming,h=l.useSelector(a),x=r.useTranslation().t;e.useLayoutEffect((function(){var e,t;(null==m?void 0:m.current)&&(null==p?void 0:p.current)&&(null===(e=null==p?void 0:p.current)||void 0===e?void 0:e.clientWidth)-(null===(t=null==m?void 0:m.current)||void 0===t?void 0:t.clientWidth)>5&&c(!0)}),[m,p]);var b=e.useMemo((function(){return i.getTextClassName({intrudeListenStatus:h,animateText:d})}),[h,d]),g=e.useMemo((function(){return i.getDisplayText({intrudeListenStatus:h,displayName:y,incoming:j,t:x})}),[h,y,j,x]);return s.default.createElement(f,{ref:m,className:"pi-whitespace-nowrap pi-relative pi-overflow-hidden"},s.default.createElement("div",{className:b,ref:p},"scroll"===g.type?s.default.createElement(i.MemoizedTextScroll,{text:g.content}):g.content),s.default.createElement("div",{className:"pi-w-6 pi-absolute pi-right-0 pi-top-0 pi-h-full pi-bg-gradient-to-r pi-from-transparent dark:pi-to-gray-950 pi-to-gray-50"}))}));exports.default=d;
|
|
2
2
|
//# sourceMappingURL=DisplayName.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DisplayName.js","sources":["../../../src/components/CallView/DisplayName.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { useState, useRef, useLayoutEffect,
|
|
1
|
+
{"version":3,"file":"DisplayName.js","sources":["../../../src/components/CallView/DisplayName.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { useState, useRef, useLayoutEffect, useMemo, memo } from 'react'\nimport { StyledName } from '../../styles/Island.styles'\nimport { motion } from 'framer-motion'\nimport { RootState } from '../../store'\nimport { useSelector } from 'react-redux'\nimport { useTranslation } from 'react-i18next'\nimport {\n getDisplayText,\n getTextClassName,\n MemoizedTextScroll,\n DisplayTextResult,\n} from './DisplayNameUtils'\n\nconst selectDisplayNameAndIncoming = (state: RootState) => ({\n displayName: state?.currentCall?.displayName,\n incoming: state?.currentCall?.incoming,\n})\n\nconst selectIntrudeListenStatus = (state: RootState) => state.listen\n\nconst DisplayName: React.FC<DisplayNameProps> = () => {\n const [animateText, setAnimateText] = useState<boolean>(false)\n const nameContainer = useRef<null | HTMLDivElement>(null)\n const nameText = useRef<null | HTMLDivElement>(null)\n const NameMotion = motion(StyledName)\n\n const { displayName, incoming } = useSelector(selectDisplayNameAndIncoming)\n const intrudeListenStatus = useSelector(selectIntrudeListenStatus)\n\n const { t } = useTranslation()\n\n useLayoutEffect(() => {\n if (\n nameContainer?.current &&\n nameText?.current &&\n nameText?.current?.clientWidth - nameContainer?.current?.clientWidth > 5\n ) {\n setAnimateText(true)\n }\n }, [nameContainer, nameText])\n\n const textClassName = useMemo(\n () => getTextClassName({ intrudeListenStatus, animateText }),\n [intrudeListenStatus, animateText],\n )\n\n const displayTextResult = useMemo(\n () => getDisplayText({ intrudeListenStatus, displayName, incoming, t }),\n [intrudeListenStatus, displayName, incoming, t],\n )\n\n const renderDisplayContent = () => {\n if (displayTextResult.type === 'scroll') {\n return <MemoizedTextScroll text={displayTextResult.content} />\n }\n return displayTextResult.content\n }\n\n return (\n <NameMotion ref={nameContainer} className='pi-whitespace-nowrap pi-relative pi-overflow-hidden'>\n <div className={textClassName} ref={nameText}>\n {renderDisplayContent()}\n </div>\n <div className='pi-w-6 pi-absolute pi-right-0 pi-top-0 pi-h-full pi-bg-gradient-to-r pi-from-transparent dark:pi-to-gray-950 pi-to-gray-50' />\n </NameMotion>\n )\n}\n\nexport default memo(DisplayName)\n\nexport interface DisplayNameProps {}\n"],"names":["selectDisplayNameAndIncoming","state","displayName","_a","currentCall","incoming","_b","selectIntrudeListenStatus","listen","memo","useState","animateText","setAnimateText","nameContainer","useRef","nameText","NameMotion","motion","StyledName","useSelector","intrudeListenStatus","t","useTranslation","useLayoutEffect","current","clientWidth","textClassName","useMemo","getTextClassName","displayTextResult","getDisplayText","React","createElement","ref","className","type","MemoizedTextScroll","text","content"],"mappings":"68BAgBMA,EAA+B,SAACC,WAAqB,MAAC,CAC1DC,YAA+B,QAAlBC,EAAAF,eAAAA,EAAOG,mBAAW,IAAAD,OAAA,EAAAA,EAAED,YACjCG,SAA4B,QAAlBC,EAAAL,eAAAA,EAAOG,mBAAW,IAAAE,OAAA,EAAAA,EAAED,WAG1BE,EAA4B,SAACN,GAAqB,OAAAA,EAAMO,MAAN,EAkDzCC,EAAAA,EAAAA,MAhDiC,WACxC,IAAAN,EAAgCO,EAAAA,UAAkB,GAAjDC,EAAWR,EAAA,GAAES,EAAcT,EAAA,GAC5BU,EAAgBC,SAA8B,MAC9CC,EAAWD,SAA8B,MACzCE,EAAaC,SAAOC,EAAAA,YAEpBZ,EAA4Ba,cAAYnB,GAAtCE,EAAWI,EAAAJ,YAAEG,EAAQC,EAAAD,SACvBe,EAAsBD,cAAYZ,GAEhCc,EAAMC,qBAEdC,EAAAA,iBAAgB,oBAEZV,aAAA,EAAAA,EAAeW,WACfT,aAAQ,EAARA,EAAUS,WACS,QAAnBrB,EAAAY,aAAQ,EAARA,EAAUS,eAAS,IAAArB,OAAA,EAAAA,EAAAsB,sBAAcnB,EAAAO,aAAA,EAAAA,EAAeW,8BAASC,aAAc,GAEvEb,GAAe,EAEnB,GAAG,CAACC,EAAeE,IAEnB,IAAMW,EAAgBC,EAAAA,SACpB,WAAM,OAAAC,EAAgBA,iBAAC,CAAER,oBAAmBA,EAAET,YAAWA,GAAG,GAC5D,CAACS,EAAqBT,IAGlBkB,EAAoBF,WACxB,WAAM,OAAAG,EAAAA,eAAe,CAAEV,oBAAmBA,EAAElB,YAAWA,EAAEG,SAAQA,EAAEgB,KAAI,GACvE,CAACD,EAAqBlB,EAAaG,EAAUgB,IAU/C,OACEU,EAAAA,QAACC,cAAAhB,EAAW,CAAAiB,IAAKpB,EAAeqB,UAAU,uDACxCH,UAAKC,cAAA,MAAA,CAAAE,UAAWR,EAAeO,IAAKlB,GARP,WAA3Bc,EAAkBM,KACbJ,EAAAA,QAAAC,cAACI,EAAkBA,mBAAC,CAAAC,KAAMR,EAAkBS,UAE9CT,EAAkBS,SAQvBP,EAAA,QAAAC,cAAA,MAAA,CAAKE,UAAU,+HAGrB"}
|