@nethesis/phone-island 0.10.1 → 0.11.0

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.
Files changed (67) hide show
  1. package/dist/App.js +1 -1
  2. package/dist/App.js.map +1 -1
  3. package/dist/_virtual/janus.js +2 -0
  4. package/dist/_virtual/janus.js.map +1 -0
  5. package/dist/components/AudioBars.js +1 -1
  6. package/dist/components/AudioBars.js.map +1 -1
  7. package/dist/components/CallView/Actions.js +1 -1
  8. package/dist/components/CallView/Actions.js.map +1 -1
  9. package/dist/components/CallView/Timer.js.map +1 -1
  10. package/dist/components/Hangup.js +1 -1
  11. package/dist/components/Hangup.js.map +1 -1
  12. package/dist/components/Island.js +1 -1
  13. package/dist/components/Island.js.map +1 -1
  14. package/dist/components/IslandMotion.js +1 -1
  15. package/dist/components/IslandMotion.js.map +1 -1
  16. package/dist/components/KeypadView/index.js +1 -1
  17. package/dist/components/KeypadView/index.js.map +1 -1
  18. package/dist/components/SettingsView/AudioView.js +1 -1
  19. package/dist/components/SettingsView/AudioView.js.map +1 -1
  20. package/dist/components/SettingsView/MicrophoneView.js +1 -1
  21. package/dist/components/SettingsView/MicrophoneView.js.map +1 -1
  22. package/dist/components/SettingsView/SettingsHeader.js +1 -1
  23. package/dist/components/SettingsView/SettingsHeader.js.map +1 -1
  24. package/dist/components/SettingsView/VideoInputView.js +2 -0
  25. package/dist/components/SettingsView/VideoInputView.js.map +1 -0
  26. package/dist/components/SettingsView/index.js +1 -1
  27. package/dist/components/SettingsView/index.js.map +1 -1
  28. package/dist/components/SideView/SideView.js +1 -1
  29. package/dist/components/SideView/SideView.js.map +1 -1
  30. package/dist/components/Socket.js +1 -1
  31. package/dist/components/Socket.js.map +1 -1
  32. package/dist/components/TransferButton.js +2 -0
  33. package/dist/components/TransferButton.js.map +1 -0
  34. package/dist/components/TransferView/TransferList.js +1 -1
  35. package/dist/components/TransferView/TransferList.js.map +1 -1
  36. package/dist/components/VideoView/index.js +1 -1
  37. package/dist/components/VideoView/index.js.map +1 -1
  38. package/dist/components/WebRTC.js +1 -1
  39. package/dist/components/WebRTC.js.map +1 -1
  40. package/dist/index.css +1 -1
  41. package/dist/lib/devices/devices.js +1 -1
  42. package/dist/lib/devices/devices.js.map +1 -1
  43. package/dist/lib/i18n.js.map +1 -1
  44. package/dist/lib/island/island.js +1 -1
  45. package/dist/lib/island/island.js.map +1 -1
  46. package/dist/lib/webrtc/janus.js +1 -1
  47. package/dist/lib/webrtc/janus.js.map +1 -1
  48. package/dist/lib/webrtc/messages.js +1 -1
  49. package/dist/lib/webrtc/messages.js.map +1 -1
  50. package/dist/models/currentCall.js +1 -1
  51. package/dist/models/currentCall.js.map +1 -1
  52. package/dist/models/island.js +1 -1
  53. package/dist/models/island.js.map +1 -1
  54. package/dist/models/motions.js +1 -1
  55. package/dist/models/motions.js.map +1 -1
  56. package/dist/models/player.js.map +1 -1
  57. package/dist/models/webrtc.js +1 -1
  58. package/dist/models/webrtc.js.map +1 -1
  59. package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js +1 -1
  60. package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js.map +1 -1
  61. package/dist/public/locales/en/translation.json.js +1 -1
  62. package/dist/public/locales/it/translation.json.js +1 -1
  63. package/dist/utils/deviceUtils.js +1 -1
  64. package/dist/utils/deviceUtils.js.map +1 -1
  65. package/dist/utils/genericFunctions/isBackCallVisible.js +1 -1
  66. package/dist/utils/genericFunctions/isBackCallVisible.js.map +1 -1
  67. 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"),u=require("./utils/genericFunctions/localStorage.js");require("./node_modules/react-redux/es/index.js");var d=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 l=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"),m=require("./services/user.js"),g=require("./utils/genericFunctions/isEmpty.js"),E=require("./utils/genericFunctions/checkConnection.js"),j=require("./utils/genericFunctions/isBackCallVisible.js"),I=require("./node_modules/react-redux/es/components/Provider.js");function b(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 q=b(n),w=function(b){var w=b.dataConfig,L=b.showAlways,S=void 0!==L&&L,D=b.uaType,y=l.Base64.atob(w||"").split(":"),k=y[0],x=y[1],_=y[2],C=y[3],P=y[4],T=y[5],V=y[6],A=n.useState(!1),O=A[0],N=A[1],U=n.useState(!1),z=U[0],F=U[1],R=n.useState(!1),W=R[0],B=R[1];n.useEffect((function(){var e=new Worker(p.default,{type:"module"});return e.onmessage=function(e){"wakeup"===e.data&&N(!0)},function(){e.terminate()}}),[]),n.useEffect((function(){W&&z&&(N(!1),F(!1),B(!1))}),[W,z]),r.useEventListener("phone-island-expand",(function(){d.store.dispatch.island.toggleIsOpen(!0),c.eventDispatch("phone-island-expanded",{})})),r.useEventListener("phone-island-compress",(function(){d.store.dispatch.island.toggleIsOpen(!1),c.eventDispatch("phone-island-compressed",{})})),r.useEventListener("phone-island-call-keypad-close",(function(){d.store.dispatch.island.setIslandView("call"),c.eventDispatch("phone-island-call-keypad-closed",{})})),r.useEventListener("phone-island-call-transfer-close",(function(){d.store.dispatch.island.setIslandView("call"),c.eventDispatch("phone-island-call-transfer-closed",{})})),r.useEventListener("phone-island-recording-close",(function(){d.store.dispatch.island.setIslandView(null),c.eventDispatch("phone-island-recording-closed",{})})),r.useEventListener("phone-island-audio-player-close",(function(){d.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){u.setJSONItem("phone-island-audio-input-device",{deviceId:e.deviceId}),c.eventDispatch("phone-island-audio-input-changed",{})})),r.useEventListener("phone-island-audio-output-change",(function(e){var n=d.store.getState().player.remoteAudio;null==n||n.current.setSinkId(e.deviceId).then((function(){console.info("Default audio output device change with success!"),u.setJSONItem("phone-island-audio-output-device",{deviceId:e.deviceId}),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){m.changeOperatorStatus(e),c.eventDispatch("phone-island-presence-changed",{})})),r.useEventListener("phone-island-view-changed",(function(e){var n=null==e?void 0:e.viewType;d.store.dispatch.island.setIslandView(n)}));var H=n.useState(!0),J=H[0],M=H[1],G=n.useState(!0),K=G[0],Q=G[1];n.useEffect((function(){J&&(h.initI18n(),M(!1))}),[J]);var X=d.store.getState().player.remoteAudio;return n.useEffect((function(){var e;if(K&&X){var n=null===(e=u.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){d.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),c.eventDispatch("phone-island-default-device-changed",{})})),r.useEventListener("phone-island-alert",(function(e){d.store.dispatch.alerts.setAlert(e.toString())})),r.useEventListener("phone-island-check-connection",(function(){E.checkInternetConnection().then((function(e){e?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=d.store.getState().currentUser)||void 0===n?void 0:n.username,a=d.store.getState().currentUser,r=null==a?void 0:a.mainPresence;if(void 0!==o&&""!==o&&!g.isEmpty(e[o])&&void 0!==(null===(t=e[o])||void 0===t?void 0:t.mainPresence)){var u=null===(s=e[o])||void 0===s?void 0:s.mainPresence;d.store.dispatch.currentUser.updateMainPresence(null===(i=e[o])||void 0===i?void 0:i.mainPresence),"online"===u&&"online"!==r&&c.eventDispatch("phone-island-call-ended",{})}})),r.useEventListener("phone-island-call-status",(function(){var e=d.store.getState().currentCall;console.log("Call status debug informations: ",e)})),r.useEventListener("phone-island-user-status",(function(){var e=d.store.getState().currentUser;console.log("User status debug informations: ",e)})),r.useEventListener("phone-island-all-users-status",(function(){var e=d.store.getState().users;console.log("Users status debug informations: ",e)})),r.useEventListener("phone-island-status",(function(){var e=d.store.getState().island;console.log("Phone island status debug informations: ",e)})),r.useEventListener("phone-island-webrtc-status",(function(){var e=d.store.getState().webrtc;console.log("Webrtc status debug informations: ",e)})),r.useEventListener("phone-island-player-status",(function(){var e=d.store.getState().player;console.log("Player status debug informations: ",e)})),r.useEventListener("phone-island-player-force-stop",(function(){d.store.dispatch.player.reset(),console.log("Audio player is interrupted")})),r.useEventListener("phone-island-sideview-open",(function(){d.store.dispatch.island.toggleSideViewVisible(!0),c.eventDispatch("phone-island-sideview-opened",{})})),r.useEventListener("phone-island-sideview-close",(function(){d.store.dispatch.island.toggleSideViewVisible(!1),c.eventDispatch("phone-island-sideview-closed",{})})),r.useEventListener("phone-island-size-change",(function(n){var t=d.store.getState().island.sideViewIsVisible,s=n.sizeInformation,i=e.__assign(e.__assign({},s),{right:t?"42px":"0px",top:j.isBackCallActive()?"40px":"0px"});c.eventDispatch("phone-island-size-changed",{sizes:i})})),r.useEventListener("phone-island-call-ended",(function(){c.eventDispatch("phone-island-size-change",{sizeInformation:{width:"0px",height:"0px"}})})),q.default.createElement(q.default.Fragment,null,q.default.createElement(I.default,{store:d.store},q.default.createElement(i.WebRTC,{hostName:k,sipExten:C,sipSecret:P,sipHost:T,sipPort:V,reload:O,reloadedCallback:function(){return F(!0)},uaType:D},q.default.createElement(a.RestAPI,{hostName:k,username:x,authToken:_},q.default.createElement(s.Socket,{hostName:k,username:x,authToken:_,reload:O,reloadedCallback:function(){return B(!0)},uaType:D},q.default.createElement(t.Events,{sipHost:T},q.default.createElement(o.Island,{showAlways:S})))))))};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"),d=require("./utils/genericFunctions/eventDispatch.js"),c=require("./utils/genericFunctions/localStorage.js");require("./node_modules/react-redux/es/index.js");var u=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 l=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"),m=require("./services/user.js"),g=require("./utils/genericFunctions/isEmpty.js"),E=require("./utils/genericFunctions/checkConnection.js"),I=require("./utils/genericFunctions/isBackCallVisible.js"),j=require("./node_modules/react-redux/es/components/Provider.js");function w(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("./node_modules/react-redux/node_modules/react-is/index.js"),require("./node_modules/react-redux/es/components/Context.js");var b=w(n),q=function(w){var q=w.dataConfig,D=w.showAlways,L=void 0!==D&&D,S=w.uaType,y=l.Base64.atob(q||"").split(":"),k=y[0],x=y[1],_=y[2],C=y[3],P=y[4],T=y[5],V=y[6],A=n.useState(!1),O=A[0],N=A[1],U=n.useState(!1),z=U[0],F=U[1],J=n.useState(!1),R=J[0],W=J[1];n.useEffect((function(){var e=new Worker(p.default,{type:"module"});return e.onmessage=function(e){"wakeup"===e.data&&N(!0)},function(){e.terminate()}}),[]),n.useEffect((function(){R&&z&&(N(!1),F(!1),W(!1))}),[R,z]),r.useEventListener("phone-island-expand",(function(){u.store.dispatch.island.toggleIsOpen(!0),d.eventDispatch("phone-island-expanded",{})})),r.useEventListener("phone-island-compress",(function(){u.store.dispatch.island.toggleIsOpen(!1),d.eventDispatch("phone-island-compressed",{})})),r.useEventListener("phone-island-call-keypad-close",(function(){u.store.dispatch.island.setIslandView("call"),d.eventDispatch("phone-island-call-keypad-closed",{})})),r.useEventListener("phone-island-call-transfer-close",(function(){u.store.dispatch.island.setIslandView("call"),d.eventDispatch("phone-island-call-transfer-closed",{})})),r.useEventListener("phone-island-recording-close",(function(){u.store.dispatch.island.setIslandView(null),d.eventDispatch("phone-island-recording-closed",{})})),r.useEventListener("phone-island-audio-player-close",(function(){u.store.dispatch.island.setIslandView(null),d.eventDispatch("phone-island-audio-player-closed",{})})),r.useEventListener("phone-island-detach",(function(e){v.detach(),d.eventDispatch("phone-island-detached",{})})),r.useEventListener("phone-island-audio-input-change",(function(e){c.setJSONItem("phone-island-audio-input-device",{deviceId:e.deviceId}),d.eventDispatch("phone-island-audio-input-changed",{})})),r.useEventListener("phone-island-video-input-change",(function(e){c.setJSONItem("phone-island-video-input-device",{deviceId:e.deviceId}),d.eventDispatch("phone-island-video-input-changed",{})})),r.useEventListener("phone-island-audio-output-change",(function(e){var n=u.store.getState().player.remoteAudio;null==n||n.current.setSinkId(e.deviceId).then((function(){console.info("Default audio output device change with success!"),c.setJSONItem("phone-island-audio-output-device",{deviceId:e.deviceId}),d.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){m.changeOperatorStatus(e),d.eventDispatch("phone-island-presence-changed",{})})),r.useEventListener("phone-island-view-changed",(function(e){var n=null==e?void 0:e.viewType;u.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=u.store.getState().player.remoteAudio;return n.useEffect((function(){var e;if(K&&X){var n=null===(e=c.getJSONItem("phone-island-audio-output-device"))||void 0===e?void 0:e.deviceId;d.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){u.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),d.eventDispatch("phone-island-default-device-changed",{})})),r.useEventListener("phone-island-alert",(function(e){u.store.dispatch.alerts.setAlert(e.toString())})),r.useEventListener("phone-island-check-connection",(function(){E.checkInternetConnection().then((function(e){e?d.eventDispatch("phone-island-internet-connected",{}):d.eventDispatch("phone-island-internet-disconnected",{})}))})),n.useEffect((function(){var e=setInterval((function(){E.checkInternetConnection().then((function(e){e?d.eventDispatch("phone-island-internet-connected",{}):d.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=u.store.getState().currentUser)||void 0===n?void 0:n.username,a=u.store.getState().currentUser,r=null==a?void 0:a.mainPresence;if(void 0!==o&&""!==o&&!g.isEmpty(e[o])&&void 0!==(null===(t=e[o])||void 0===t?void 0:t.mainPresence)){var c=null===(s=e[o])||void 0===s?void 0:s.mainPresence;u.store.dispatch.currentUser.updateMainPresence(null===(i=e[o])||void 0===i?void 0:i.mainPresence),"online"===c&&"online"!==r&&d.eventDispatch("phone-island-call-ended",{})}})),r.useEventListener("phone-island-call-status",(function(){var e=u.store.getState().currentCall;console.log("Call status debug informations: ",e)})),r.useEventListener("phone-island-user-status",(function(){var e=u.store.getState().currentUser;console.log("User status debug informations: ",e)})),r.useEventListener("phone-island-all-users-status",(function(){var e=u.store.getState().users;console.log("Users status debug informations: ",e)})),r.useEventListener("phone-island-status",(function(){var e=u.store.getState().island;console.log("Phone island status debug informations: ",e)})),r.useEventListener("phone-island-webrtc-status",(function(){var e=u.store.getState().webrtc;console.log("Webrtc status debug informations: ",e)})),r.useEventListener("phone-island-player-status",(function(){var e=u.store.getState().player;console.log("Player status debug informations: ",e)})),r.useEventListener("phone-island-player-force-stop",(function(){u.store.dispatch.player.reset(),console.log("Audio player is interrupted")})),r.useEventListener("phone-island-sideview-open",(function(){u.store.dispatch.island.toggleSideViewVisible(!0),d.eventDispatch("phone-island-sideview-opened",{})})),r.useEventListener("phone-island-sideview-close",(function(){u.store.dispatch.island.toggleSideViewVisible(!1),d.eventDispatch("phone-island-sideview-closed",{})})),r.useEventListener("phone-island-size-change",(function(n){var t=u.store.getState().island.sideViewIsVisible,s=n.sizeInformation,i=e.__assign(e.__assign({},s),{right:t?"42px":"0px",top:I.isBackCallActive()?"40px":"0px"});d.eventDispatch("phone-island-size-changed",{sizes:i})})),r.useEventListener("phone-island-call-ended",(function(){d.eventDispatch("phone-island-size-change",{sizeInformation:{width:"0px",height:"0px"}}),d.eventDispatch("phone-island-sideview-close",{})})),b.default.createElement(b.default.Fragment,null,b.default.createElement(j.default,{store:u.store},b.default.createElement(i.WebRTC,{hostName:k,sipExten:C,sipSecret:P,sipHost:T,sipPort:V,reload:O,reloadedCallback:function(){return F(!0)},uaType:S},b.default.createElement(a.RestAPI,{hostName:k,username:x,authToken:_},b.default.createElement(s.Socket,{hostName:k,username:x,authToken:_,reload:O,reloadedCallback:function(){return W(!0)},uaType:S},b.default.createElement(t.Events,{sipHost:T},b.default.createElement(o.Island,{showAlways:L})))))))};q.displayName="PhoneIsland",exports.PhoneIsland=q;
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-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-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 sizeInformation: any = {\n width: '0px',\n height: '0px',\n }\n eventDispatch('phone-island-size-change', { sizeInformation })\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} />\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","reset","toggleSideViewVisible","args","sideViewIsVisible","sizeInformation","updatedSizeInformation","__assign","right","top","isBackCallActive","sizes","width","height","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'\nimport { JanusTrack } from './types/webrtc'\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-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 sizeInformation: any = {\n width: '0px',\n height: '0px',\n }\n eventDispatch('phone-island-size-change', { sizeInformation })\n eventDispatch('phone-island-sideview-close', {})\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} />\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","reset","toggleSideViewVisible","args","sideViewIsVisible","sizeInformation","updatedSizeInformation","__assign","right","top","isBackCallActive","sizes","width","height","React","createElement","Fragment","Provider","WebRTC","hostName","sipExten","sipSecret","sipHost","sipPort","reloadedCallback","RestAPI","authToken","Socket","Events","Island","displayName"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.janus={exports:{}};
2
+ //# sourceMappingURL=janus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"janus.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -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 r=require("../store/index.js"),t=require("../node_modules/react-redux/es/hooks/useDispatch.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=n(e),c={0:4,1:3,2:2,3:1,4:1,5:2,6:3,7:4},a={0:2,1:1,2:1,3:2};exports.AudioBars=function(n){var i=n.audioStream,o=void 0===i?null:i,s=n.audioElement,l=void 0===s?null:s,d=n.paused,f=n.size,m=e.useRef(null),p=e.useRef(null),v="large"===f?c:a,y=e.useRef(null),h=e.useRef(null),A=e.useRef(null),E=t.useDispatch();function x(){var e;if(h&&h.current){var r=new Uint8Array(h.current.frequencyBinCount);h.current.getByteFrequencyData(r);var t=Object.values(r),n=null===(e=m.current)||void 0===e?void 0:e.children;if(n&&(null==n?void 0:n.length)>0){for(var u=0;u<Object.keys(v).length;++u){var c=t[v[u]]/255,a=n&&n[u]&&n[u].style;a&&c>0&&(a.height="".concat(100*c,"%"))}g()}}}function g(){var e,r=requestAnimationFrame(x);(e=r)&&(p.current=e)}return e.useEffect((function(){var e=r.store.getState().audioBars,t=e.audioElementContext,n=e.audioElementAnalyser,u=e.audioElementSource,c=e.isReady;return l&&c?(y.current=t,h.current=n,A.current=u):(y.current=new AudioContext,h.current=y.current.createAnalyser(),h.current.smoothingTimeConstant=.8,h.current.fftSize=32,o?A.current=y.current.createMediaStreamSource(o):l&&(A.current=y.current.createMediaElementSource(l),E.audioBars.setAudioElementContext(y.current),E.audioBars.setAudioElementAnalyser(h.current),E.audioBars.setAudioElementSource(A.current),E.audioBars.setIsReady(!0))),h.current&&A.current&&A.current.connect(h.current),l&&y.current&&h.current&&h.current.connect(y.current.destination),g(),function(){var e;p.current&&cancelAnimationFrame(p.current),null===(e=A.current)||void 0===e||e.disconnect()}}),[]),e.useEffect((function(){p.current&&(d?cancelAnimationFrame(p.current):(cancelAnimationFrame(p.current),g()))}),[f,d]),u.default.createElement("div",{className:"".concat("small"===f?"pi-h-6 pi-w-6":"pi-h-12 pi-w-12"," pi-flex pi-justify-center pi-items-center")},u.default.createElement("div",{className:"".concat("small"===f?"pi-h-6":"pi-h-8"," pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden"),ref:m},(o||l)&&Object.keys(v).map((function(e){return u.default.createElement("span",{key:e,className:"pi-bg-emerald-700 dark:pi-bg-emerald-600 pi-w-0.5 pi-rounded-sm"})}))))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var r=require("../store/index.js"),t=require("../node_modules/react-redux/es/hooks/useDispatch.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=n(e),i={large:{0:4,1:3,2:2,3:1,4:1,5:2,6:3,7:4},small:{0:2,1:1,2:1,3:2}};exports.AudioBars=function(n){var a=n.audioStream,c=void 0===a?null:a,o=n.audioElement,s=void 0===o?null:o,l=n.paused,d=void 0!==l&&l,m=n.size,f=void 0===m?"large":m,p=e.useRef(null),v=e.useRef(null),y=e.useRef(null),h=e.useRef(null),A=e.useRef(null),E=i[f],B=t.useDispatch(),x=e.useCallback((function(){var e;if(h.current&&(null===(e=p.current)||void 0===e?void 0:e.children))try{var r=new Uint8Array(h.current.frequencyBinCount);h.current.getByteFrequencyData(r);for(var t=p.current.children,n=Object.keys(E).length,u=0;u<n;++u){var i=r[E[u]]/255,a=t[u];a&&(a.style.height=i>0?"".concat(100*i,"%"):"0%")}d||(v.current=requestAnimationFrame(x))}catch(e){console.error("AudioBars animation error:",e)}}),[E,d]);return e.useEffect((function(){var e=function(){v.current&&(cancelAnimationFrame(v.current),v.current=null)},t=function(){if(A.current)try{A.current.disconnect()}catch(e){}};if(c&&!c.active)return console.warn("AudioBars: audio stream is not active"),e;try{var n=r.store.getState().audioBars,u=n.audioElementContext,i=n.audioElementAnalyser,a=n.audioElementSource,o=n.isReady;s&&o?(y.current=u,h.current=i,A.current=a):(y.current=new AudioContext,h.current=y.current.createAnalyser(),h.current.smoothingTimeConstant=.8,h.current.fftSize=32,c?A.current=y.current.createMediaStreamSource(c):s&&(A.current=y.current.createMediaElementSource(s),B.audioBars.setAudioElementContext(y.current),B.audioBars.setAudioElementAnalyser(h.current),B.audioBars.setAudioElementSource(A.current),B.audioBars.setIsReady(!0))),h.current&&A.current&&(t(),A.current.connect(h.current),s&&h.current.connect(y.current.destination),d||(e(),v.current=requestAnimationFrame(x)))}catch(r){console.error("AudioBars initialization error:",r),e()}return function(){e(),t()}}),[c,s,x,B.audioBars,d]),e.useEffect((function(){h.current&&(v.current&&(cancelAnimationFrame(v.current),v.current=null),d||(v.current=requestAnimationFrame(x)))}),[f,d,x]),u.default.createElement("div",{className:"".concat("small"===f?"pi-h-6 pi-w-6":"pi-h-12 pi-w-12"," pi-flex pi-justify-center pi-items-center")},u.default.createElement("div",{className:"".concat("small"===f?"pi-h-6":"pi-h-8"," pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden"),ref:p},(c||s)&&Object.keys(E).map((function(e){return u.default.createElement("span",{key:e,className:"pi-bg-emerald-700 dark:pi-bg-emerald-600 pi-w-0.5 pi-rounded-sm"})}))))};
2
2
  //# sourceMappingURL=AudioBars.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AudioBars.js","sources":["../../src/components/AudioBars.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useEffect, useRef } from 'react'\nimport { ContextSourceType } from '../models/audioBars'\nimport { useDispatch } from 'react-redux'\nimport { store } from '../store'\nimport { Dispatch } from '../store'\n\n// The map for the large versione of the audio bars\nconst LARGE = {\n 0: 4,\n 1: 3,\n 2: 2,\n 3: 1,\n 4: 1,\n 5: 2,\n 6: 3,\n 7: 4,\n}\n\n// The map for the small versione of the audio bars\nconst SMALL = {\n 0: 2,\n 1: 1,\n 2: 1,\n 3: 2,\n}\n\n/**\n * This component shows a dynamic audio spectrum given an audio stream\n *\n * @param audioStream An audio stream to analyse\n * @param audioElement An audio element to analyse\n */\nexport const AudioBars: FC<AudioBarsProps> = ({\n audioStream = null,\n audioElement = null,\n paused,\n size,\n}) => {\n // Initialize the main elements\n const containerElement = useRef<HTMLDivElement | null>(null)\n const animationRequest = useRef<number | null>(null)\n const barsMap: BarsMapType = size === 'large' ? LARGE : SMALL\n const context = useRef<AudioContext | null>(null)\n const analyser = useRef<AnalyserNode | null>(null)\n const source = useRef<ContextSourceType>(null)\n const dispatch = useDispatch<Dispatch>()\n\n function saveAnimationRequest(requestId: number) {\n if (requestId) {\n animationRequest.current = requestId\n }\n }\n\n // The function that renders the frames of animation\n function animation() {\n if (analyser && analyser.current) {\n const frequencyData = new Uint8Array(analyser.current.frequencyBinCount)\n analyser.current.getByteFrequencyData(frequencyData)\n const values = Object.values(frequencyData)\n\n const bars = containerElement.current?.children\n if (bars && bars?.length > 0) {\n // Change styles to every bar\n for (let i = 0; i < Object.keys(barsMap).length; ++i) {\n const value = values[barsMap[i]] / 255\n // @ts-ignore\n const barStyles = bars && bars[i] && bars[i].style\n if (barStyles && value > 0) {\n barStyles.height = `${100 * value}%`\n }\n }\n startAnimation()\n }\n }\n }\n\n function startAnimation() {\n const animationRequestId: number = requestAnimationFrame(animation)\n saveAnimationRequest(animationRequestId)\n }\n\n useEffect(() => {\n const { audioElementContext, audioElementAnalyser, audioElementSource, isReady } =\n store.getState().audioBars\n // Initialize audio context and analyser once\n if (audioElement && isReady) {\n // The source is an audio element\n context.current = audioElementContext\n analyser.current = audioElementAnalyser\n source.current = audioElementSource\n } else {\n // The source is an audio stream or isn't ready\n context.current = new AudioContext()\n analyser.current = context.current.createAnalyser()\n analyser.current.smoothingTimeConstant = 0.8\n analyser.current.fftSize = 32\n // Create the media source stream\n if (audioStream) {\n source.current = context.current.createMediaStreamSource(audioStream)\n } else if (audioElement) {\n source.current = context.current.createMediaElementSource(audioElement)\n // Save the audio elements to stores\n dispatch.audioBars.setAudioElementContext(context.current)\n dispatch.audioBars.setAudioElementAnalyser(analyser.current)\n dispatch.audioBars.setAudioElementSource(source.current)\n dispatch.audioBars.setIsReady(true)\n }\n }\n\n // Connect the audio source to the analyser\n analyser.current && source.current && source.current.connect(analyser.current)\n if (audioElement) {\n // Connect the analyser to the destination of the context\n context.current && analyser.current && analyser.current.connect(context.current.destination)\n }\n startAnimation()\n\n // Cleanup bars animation\n return () => {\n animationRequest.current && cancelAnimationFrame(animationRequest.current)\n source.current?.disconnect()\n }\n }, [])\n\n useEffect(() => {\n if (animationRequest.current) {\n if (!paused) {\n cancelAnimationFrame(animationRequest.current)\n startAnimation()\n } else {\n cancelAnimationFrame(animationRequest.current)\n }\n }\n }, [size, paused])\n\n return (\n <div\n className={`${\n size === 'small' ? 'pi-h-6 pi-w-6' : 'pi-h-12 pi-w-12'\n } pi-flex pi-justify-center pi-items-center`}\n >\n {/* The bars container */}\n <div\n className={`${\n size === 'small' ? 'pi-h-6' : 'pi-h-8'\n } pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden`}\n ref={containerElement}\n >\n {/* Every single bar */}\n {(audioStream || audioElement) &&\n Object.keys(barsMap).map((key) => (\n <span key={key} className='pi-bg-emerald-700 dark:pi-bg-emerald-600 pi-w-0.5 pi-rounded-sm'></span>\n ))}\n </div>\n </div>\n )\n}\n\ninterface AudioBarsProps {\n audioStream?: MediaStream | null\n audioElement?: HTMLAudioElement | null\n size?: 'large' | 'small'\n paused?: boolean\n}\n\ninterface BarsMapType {\n [key: number]: number\n}\n"],"names":["LARGE","SMALL","_a","_b","audioStream","_c","audioElement","paused","size","containerElement","useRef","animationRequest","barsMap","context","analyser","source","dispatch","useDispatch","animation","current","frequencyData","Uint8Array","frequencyBinCount","getByteFrequencyData","values","Object","bars","children","length","i","keys","value","barStyles","style","height","concat","startAnimation","requestId","animationRequestId","requestAnimationFrame","useEffect","store","getState","audioBars","audioElementContext","audioElementAnalyser","audioElementSource","isReady","AudioContext","createAnalyser","smoothingTimeConstant","fftSize","createMediaStreamSource","createMediaElementSource","setAudioElementContext","setAudioElementAnalyser","setAudioElementSource","setIsReady","connect","destination","cancelAnimationFrame","disconnect","React","createElement","className","ref","map","key"],"mappings":"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"}
1
+ {"version":3,"file":"AudioBars.js","sources":["../../src/components/AudioBars.tsx"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useEffect, useRef, useCallback } from 'react'\nimport { ContextSourceType } from '../models/audioBars'\nimport { useDispatch } from 'react-redux'\nimport { store } from '../store'\nimport { Dispatch } from '../store'\n\n// The map for the large versione of the audio bars\nconst BARS_CONFIG = {\n large: {\n 0: 4,\n 1: 3,\n 2: 2,\n 3: 1,\n 4: 1,\n 5: 2,\n 6: 3,\n 7: 4,\n },\n // The map for the small versione of the audio bars\n\n small: {\n 0: 2,\n 1: 1,\n 2: 1,\n 3: 2,\n },\n}\n\ninterface AudioBarsProps {\n audioStream?: MediaStream | null\n audioElement?: HTMLAudioElement | null\n size?: 'large' | 'small'\n paused?: boolean\n}\n\ninterface BarsMapType {\n [key: number]: number\n}\n\n/**\n * This component shows a dynamic audio spectrum given an audio stream\n *\n * @param audioStream An audio stream to analyse\n * @param audioElement An audio element to analyse\n */\nexport const AudioBars: FC<AudioBarsProps> = ({\n audioStream = null,\n audioElement = null,\n paused = false,\n size = 'large',\n}) => {\n // Initialize the main elements\n const containerElement = useRef<HTMLDivElement | null>(null)\n const animationRequest = useRef<number | null>(null)\n const context = useRef<AudioContext | null>(null)\n const analyser = useRef<AnalyserNode | null>(null)\n const source = useRef<ContextSourceType>(null)\n\n const barsMap: BarsMapType = BARS_CONFIG[size]\n const dispatch = useDispatch<Dispatch>()\n\n // The function that renders the frames of animation\n const animate = useCallback(() => {\n if (!analyser.current || !containerElement.current?.children) {\n return\n }\n\n try {\n const frequencyData = new Uint8Array(analyser.current.frequencyBinCount)\n analyser.current.getByteFrequencyData(frequencyData)\n // Update the height of each bar based on frequency data\n const bars = containerElement.current.children\n const barCount = Object.keys(barsMap).length\n\n for (let i = 0; i < barCount; ++i) {\n const value = frequencyData[barsMap[i]] / 255\n const bar = bars[i] as HTMLElement\n\n if (bar) {\n bar.style.height = value > 0 ? `${100 * value}%` : '0%'\n }\n }\n\n // Continue animation if not paused\n if (!paused) {\n animationRequest.current = requestAnimationFrame(animate)\n }\n } catch (err) {\n console.error('AudioBars animation error:', err)\n }\n }, [barsMap, paused])\n\n // Handles audio configuration and animation\n useEffect(() => {\n // Clean up any previous animations\n const cleanupAnimation = () => {\n if (animationRequest.current) {\n cancelAnimationFrame(animationRequest.current)\n animationRequest.current = null\n }\n }\n\n // Disconnect audio source if it exists\n const disconnectSource = () => {\n if (source.current) {\n try {\n source.current.disconnect()\n } catch (e) {\n // Ignore disconnection errors\n }\n }\n }\n\n // Check if audio stream is active\n if (audioStream && !audioStream.active) {\n console.warn('AudioBars: audio stream is not active')\n return cleanupAnimation\n }\n\n try {\n const { audioElementContext, audioElementAnalyser, audioElementSource, isReady } =\n store.getState().audioBars\n\n // Initialize audio context and analyser once\n if (audioElement && isReady) {\n // The source is an audio element\n context.current = audioElementContext\n analyser.current = audioElementAnalyser\n source.current = audioElementSource\n } else {\n // The source is an audio stream or isn't ready\n context.current = new AudioContext()\n analyser.current = context.current.createAnalyser()\n analyser.current.smoothingTimeConstant = 0.8\n analyser.current.fftSize = 32\n\n // Create the media source stream\n if (audioStream) {\n source.current = context.current.createMediaStreamSource(audioStream)\n } else if (audioElement) {\n source.current = context.current.createMediaElementSource(audioElement)\n\n // Save audio elements to the store\n dispatch.audioBars.setAudioElementContext(context.current)\n dispatch.audioBars.setAudioElementAnalyser(analyser.current)\n dispatch.audioBars.setAudioElementSource(source.current)\n dispatch.audioBars.setIsReady(true)\n }\n }\n\n // Connect the audio source to the analyser\n if (analyser.current && source.current) {\n // Disconnect any existing connections\n disconnectSource()\n\n // Connect source -> analyser (-> destination if it's an audio element)\n source.current.connect(analyser.current)\n if (audioElement) {\n analyser.current.connect(context.current!.destination)\n }\n\n // Start animation if not paused\n if (!paused) {\n cleanupAnimation()\n animationRequest.current = requestAnimationFrame(animate)\n }\n }\n } catch (err) {\n console.error('AudioBars initialization error:', err)\n cleanupAnimation()\n }\n\n // Cleanup when component is unmounted\n return () => {\n cleanupAnimation()\n disconnectSource()\n }\n }, [audioStream, audioElement, animate, dispatch.audioBars, paused])\n\n // Handle paused state or size changes\n useEffect(() => {\n if (analyser.current) {\n // Stop current animation\n if (animationRequest.current) {\n cancelAnimationFrame(animationRequest.current)\n animationRequest.current = null\n }\n\n // Restart if not paused\n if (!paused) {\n animationRequest.current = requestAnimationFrame(animate)\n }\n }\n }, [size, paused, animate])\n\n return (\n <div\n className={`${\n size === 'small' ? 'pi-h-6 pi-w-6' : 'pi-h-12 pi-w-12'\n } pi-flex pi-justify-center pi-items-center`}\n >\n {/* The bars container */}\n <div\n className={`${\n size === 'small' ? 'pi-h-6' : 'pi-h-8'\n } pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden`}\n ref={containerElement}\n >\n {/* Every single bar */}\n {(audioStream || audioElement) &&\n Object.keys(barsMap).map((key) => (\n <span\n key={key}\n className='pi-bg-emerald-700 dark:pi-bg-emerald-600 pi-w-0.5 pi-rounded-sm'\n ></span>\n ))}\n </div>\n </div>\n )\n}\n"],"names":["BARS_CONFIG","large","small","_a","_b","audioStream","_c","audioElement","_d","paused","_e","size","containerElement","useRef","animationRequest","context","analyser","source","barsMap","dispatch","useDispatch","animate","useCallback","current","children","frequencyData","Uint8Array","frequencyBinCount","getByteFrequencyData","bars","barCount","Object","keys","length","i","value","bar","style","height","concat","requestAnimationFrame","err","console","error","useEffect","cleanupAnimation","cancelAnimationFrame","disconnectSource","disconnect","e","active","warn","store","getState","audioBars","audioElementContext","audioElementAnalyser","audioElementSource","isReady","AudioContext","createAnalyser","smoothingTimeConstant","fftSize","createMediaStreamSource","createMediaElementSource","setAudioElementContext","setAudioElementAnalyser","setAudioElementSource","setIsReady","connect","destination","React","createElement","className","ref","map","key"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../lib/phone/call.js"),n=require("../../utils/customHooks/useEventListener.js"),i=require("../../utils/genericFunctions/eventDispatch.js");require("../../node_modules/react-redux/es/index.js");var o=require("../../store/index.js");require("../../node_modules/socket.io-client/build/esm/index.js");var a=require("../../lib/user/default_device.js");require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../../lib/webrtc/janus.js");var l=require("../../lib/webrtc/messages.js");require("../../node_modules/mic-check/lib/index.js");var s=require("../../static/outgoing_ringtone.js");require("../Island.js");var r=require("../../services/astproxy.js"),c=require("../Button.js"),d=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),u=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js");require("../../node_modules/i18next/dist/esm/i18next.js");var p=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 f=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var h=require("../../node_modules/react-redux/es/hooks/useSelector.js"),v=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function w(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var E=w(e);exports.default=function(){var e=h.useSelector((function(e){return e.currentCall})),w=e.paused,g=e.muted;e.isRecording;var T=h.useSelector((function(e){return e.currentCall.parked})),j=h.useSelector((function(e){return e.island})),C=j.view,y=j.actionsExpanded,b=j.sideViewIsVisible,x=j.isConferenceList,q=h.useSelector((function(e){return e.currentCall.transferring})),k=h.useSelector((function(e){return e.listen})),A=v.useDispatch();function D(){A.island.setIslandView("keypad"!==C?"keypad":"call"),b&&i.eventDispatch("phone-island-sideview-close",{}),i.eventDispatch("phone-island-call-keypad-opened",{})}function I(){A.island.setIslandView("transfer"!==C?"transfer":"call"),b&&i.eventDispatch("phone-island-sideview-close",{}),i.eventDispatch("phone-island-call-transfer-opened",{})}function _(){a.isWebRTC()?l.sendDTMF("*"):r.sendPhysicalDTMF("*"),o.store.getState().player.audioPlayerPlaying||A.player.updateStartAudioPlayer({src:s.default,loop:!0}),setTimeout((function(){a.isWebRTC()?l.sendDTMF("1"):r.sendPhysicalDTMF("1"),A.player.stopAudioPlayer(),q&&setTimeout((function(){A.currentCall.updateTransferring(!1)}),500),i.eventDispatch("phone-island-call-transfer-canceled",{})}),500)}n.useEventListener("phone-island-call-keypad-open",(function(){D()})),n.useEventListener("phone-island-call-transfer-open",(function(){I()})),n.useEventListener("phone-island-call-transfer-cancel",(function(){_()})),n.useEventListener("phone-island-call-actions-open",(function(){A.island.toggleActionsExpanded(!0),i.eventDispatch("phone-island-call-actions-opened",{})})),n.useEventListener("phone-island-call-actions-close",(function(){A.island.toggleActionsExpanded(!1),i.eventDispatch("phone-island-call-actions-closed",{})}));var F=f.useTranslation().t;return E.default.createElement(E.default.Fragment,null,E.default.createElement("div",{className:"".concat((null==k?void 0:k.isListen)||(null==k?void 0:k.isIntrude)?k.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":"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"," ")},!((null==k?void 0:k.isIntrude)||(null==k?void 0:k.isListen))&&E.default.createElement(c.Button,{variant:"default",active:!!w,onClick:function(){return w?t.unpauseCurrentCall():t.pauseCurrentCall()},"data-tooltip-id":"tooltip-pause","data-tooltip-content":"".concat(F(w?"Tooltip.Play":"Tooltip.Pause"))},w?E.default.createElement(d.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:u.faPlay}):E.default.createElement(d.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:u.faPause})),!(null==k?void 0:k.isListen)&&E.default.createElement(c.Button,{variant:"default",active:!!g,onClick:function(){return g?t.unmuteCurrentCall():t.muteCurrentCall()},"data-tooltip-id":"tooltip-mute","data-tooltip-content":"".concat(F(g?"Tooltip.Unmute":"Tooltip.Mute"))},g?E.default.createElement(d.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:u.faMicrophoneSlash}):E.default.createElement(d.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:u.faMicrophone})),!(k.isIntrude||k.isListen)&&E.default.createElement(c.Button,{active:q,onClick:q?_:I,variant:"default","data-tooltip-id":"tooltip-transfer","data-tooltip-content":"".concat(F(q?"Tooltip.Cancel transfer":"Tooltip.Transfer"))},q?E.default.createElement(d.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:u.faArrowDownUpAcrossLine}):E.default.createElement(d.FontAwesomeIcon,{className:"pi-rotate-90 pi-h-6 pi-w-6",icon:u.faArrowRightArrowLeft})),!(k.isIntrude||k.isListen)&&E.default.createElement(c.Button,{active:y,variant:"transparent",onClick:function(){y?(A.island.toggleActionsExpanded(!1),i.eventDispatch("phone-island-call-actions-closed",{}),i.eventDispatch("phone-island-sideview-close",{})):(A.island.toggleActionsExpanded(!0),i.eventDispatch("phone-island-call-actions-opened",{}))},"data-tooltip-id":"tooltip-expand","data-tooltip-content":"".concat(F(y?"Tooltip.Collapse":"Tooltip.Expand"))},y?E.default.createElement(d.FontAwesomeIcon,{className:"pi-text-gray-700 dark:pi-text-gray-200 pi-h-6 pi-w-6",icon:u.faChevronUp}):E.default.createElement(d.FontAwesomeIcon,{className:"pi-text-gray-700 dark:pi-text-gray-200 pi-h-6 pi-w-6",icon:u.faChevronDown}))),y?E.default.createElement(E.default.Fragment,null," ",E.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"},E.default.createElement(c.Button,{active:"keypad"===C,variant:"default",onClick:D,"data-tooltip-id":"tooltip-keyboard","data-tooltip-content":F("Tooltip.Keyboard")||""},E.default.createElement(d.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:m.faGridRound})),E.default.createElement(c.Button,{active:T,variant:"default",onClick:t.parkCurrentCall,"data-tooltip-id":"tooltip-park","data-tooltip-content":F("Tooltip.Park")||""},E.default.createElement(d.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:u.faSquareParking})),E.default.createElement(c.Button,{"data-stop-propagation":!0,disabled:!0,variant:"default",onClick:function(){return A.island.toggleConferenceList(!x),A.island.setIslandView("transfer"!==C?"transfer":"call"),b&&i.eventDispatch("phone-island-sideview-close",{}),void i.eventDispatch("phone-island-call-conference-list-opened",{})},"data-tooltip-id":"tooltip-conference","data-tooltip-content":F("Tooltip.Conference")||""},E.default.createElement(d.FontAwesomeIcon,{icon:u.faUserPlus,className:"pi-h-6 pi-w-6"})),E.default.createElement(c.Button,{variant:"default",onClick:function(){return b?i.eventDispatch("phone-island-sideview-close",{}):i.eventDispatch("phone-island-sideview-open",{})},"data-tooltip-id":"tooltip-sideView","data-tooltip-content":F("Tooltip.Other actions")||""},E.default.createElement(d.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:b?m.faClose:m.faOpen})))):E.default.createElement(E.default.Fragment,null),E.default.createElement(p.CustomThemedTooltip,{id:"tooltip-transfer",place:"bottom"}),E.default.createElement(p.CustomThemedTooltip,{id:"tooltip-pause",place:"bottom"}),E.default.createElement(p.CustomThemedTooltip,{id:"tooltip-mute",place:"bottom"}),E.default.createElement(p.CustomThemedTooltip,{id:"tooltip-expand",place:"bottom"}),E.default.createElement(p.CustomThemedTooltip,{id:"tooltip-keyboard",place:"bottom"}),E.default.createElement(p.CustomThemedTooltip,{id:"tooltip-conference",place:"bottom"}),E.default.createElement(p.CustomThemedTooltip,{id:"tooltip-park",place:"bottom"}),E.default.createElement(p.CustomThemedTooltip,{id:"tooltip-sideView",place:"left"}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../lib/phone/call.js"),n=require("../../utils/customHooks/useEventListener.js"),i=require("../../utils/genericFunctions/eventDispatch.js");require("../../node_modules/react-redux/es/index.js");var o=require("../../store/index.js");require("../../node_modules/socket.io-client/build/esm/index.js");var a=require("../../lib/user/default_device.js");require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../../lib/webrtc/janus.js");var l=require("../../lib/webrtc/messages.js");require("../../node_modules/mic-check/lib/index.js");var s=require("../../static/outgoing_ringtone.js");require("../Island.js");var r=require("../../services/astproxy.js"),d=require("../Button.js"),c=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),u=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js");require("../../node_modules/i18next/dist/esm/i18next.js");var p=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 f=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var h=require("../TransferButton.js"),v=require("../../node_modules/react-redux/es/hooks/useSelector.js"),j=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function E(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var T=E(e);exports.default=function(){var e=v.useSelector((function(e){return e.currentCall})),E=e.paused,y=e.muted;e.isRecording;var g=v.useSelector((function(e){return e.currentCall.parked})),w=v.useSelector((function(e){return e.island})),C=w.view,b=w.actionsExpanded,x=w.sideViewIsVisible;w.isConferenceList;var q=v.useSelector((function(e){return e.currentCall.transferring})),k=v.useSelector((function(e){return e.listen})),_=j.useDispatch();function D(){_.island.setIslandView("keypad"!==C?"keypad":"call"),x&&i.eventDispatch("phone-island-sideview-close",{}),i.eventDispatch("phone-island-call-keypad-opened",{})}n.useEventListener("phone-island-call-keypad-open",(function(){D()})),n.useEventListener("phone-island-call-transfer-open",(function(){_.island.setIslandView("transfer"!==C?"transfer":"call"),x&&i.eventDispatch("phone-island-sideview-close",{}),i.eventDispatch("phone-island-call-transfer-opened",{})})),n.useEventListener("phone-island-call-transfer-cancel",(function(){!function(){a.isWebRTC()?l.sendDTMF("*"):r.sendPhysicalDTMF("*");o.store.getState().player.audioPlayerPlaying||_.player.updateStartAudioPlayer({src:s.default,loop:!0});setTimeout((function(){a.isWebRTC()?l.sendDTMF("1"):r.sendPhysicalDTMF("1"),_.player.stopAudioPlayer(),q&&setTimeout((function(){_.currentCall.updateTransferring(!1)}),500),i.eventDispatch("phone-island-call-transfer-canceled",{})}),500)}()})),n.useEventListener("phone-island-call-actions-open",(function(){_.island.toggleActionsExpanded(!0),i.eventDispatch("phone-island-call-actions-opened",{})})),n.useEventListener("phone-island-call-actions-close",(function(){_.island.toggleActionsExpanded(!1),i.eventDispatch("phone-island-call-actions-closed",{})}));var F=f.useTranslation().t;return T.default.createElement(T.default.Fragment,null,T.default.createElement("div",{className:"".concat((null==k?void 0:k.isListen)||(null==k?void 0:k.isIntrude)?k.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":"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"," ")},!((null==k?void 0:k.isIntrude)||(null==k?void 0:k.isListen))&&T.default.createElement(d.Button,{variant:"default",active:!!E,onClick:function(){return E?t.unpauseCurrentCall():t.pauseCurrentCall()},"data-tooltip-id":"tooltip-pause","data-tooltip-content":"".concat(F(E?"Tooltip.Play":"Tooltip.Pause"))},E?T.default.createElement(c.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:u.faPlay}):T.default.createElement(c.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:u.faPause})),!(null==k?void 0:k.isListen)&&T.default.createElement(d.Button,{variant:"default",active:!!y,onClick:function(){return y?t.unmuteCurrentCall():t.muteCurrentCall()},"data-tooltip-id":"tooltip-mute","data-tooltip-content":"".concat(F(y?"Tooltip.Unmute":"Tooltip.Mute"))},y?T.default.createElement(c.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:u.faMicrophoneSlash}):T.default.createElement(c.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:u.faMicrophone})),T.default.createElement(h.TransferButton,null),!(k.isIntrude||k.isListen)&&T.default.createElement(d.Button,{active:b,variant:"transparent",onClick:function(){b?(_.island.toggleActionsExpanded(!1),i.eventDispatch("phone-island-call-actions-closed",{}),i.eventDispatch("phone-island-sideview-close",{})):(_.island.toggleActionsExpanded(!0),i.eventDispatch("phone-island-call-actions-opened",{}))},"data-tooltip-id":"tooltip-expand","data-tooltip-content":"".concat(F(b?"Tooltip.Collapse":"Tooltip.Expand"))},b?T.default.createElement(c.FontAwesomeIcon,{className:"pi-text-gray-700 dark:pi-text-gray-200 pi-h-6 pi-w-6",icon:u.faChevronUp}):T.default.createElement(c.FontAwesomeIcon,{className:"pi-text-gray-700 dark:pi-text-gray-200 pi-h-6 pi-w-6",icon:u.faChevronDown}))),b?T.default.createElement(T.default.Fragment,null," ",T.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"},T.default.createElement(d.Button,{active:"keypad"===C,variant:"default",onClick:D,"data-tooltip-id":"tooltip-keyboard","data-tooltip-content":F("Tooltip.Keyboard")||""},T.default.createElement(c.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:m.faGridRound})),T.default.createElement(d.Button,{active:g,variant:"default",onClick:t.parkCurrentCall,"data-tooltip-id":"tooltip-park","data-tooltip-content":F("Tooltip.Park")||""},T.default.createElement(c.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:u.faSquareParking})),T.default.createElement(d.Button,{variant:"default",onClick:function(){return x?i.eventDispatch("phone-island-sideview-close",{}):i.eventDispatch("phone-island-sideview-open",{})},"data-tooltip-id":"tooltip-sideView","data-tooltip-content":F("Tooltip.Other actions")||""},T.default.createElement(c.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:x?m.faClose:m.faOpen})))):T.default.createElement(T.default.Fragment,null),T.default.createElement(p.CustomThemedTooltip,{id:"tooltip-transfer",place:"bottom"}),T.default.createElement(p.CustomThemedTooltip,{id:"tooltip-pause",place:"bottom"}),T.default.createElement(p.CustomThemedTooltip,{id:"tooltip-mute",place:"bottom"}),T.default.createElement(p.CustomThemedTooltip,{id:"tooltip-expand",place:"bottom"}),T.default.createElement(p.CustomThemedTooltip,{id:"tooltip-keyboard",place:"bottom"}),T.default.createElement(p.CustomThemedTooltip,{id:"tooltip-conference",place:"bottom"}),T.default.createElement(p.CustomThemedTooltip,{id:"tooltip-park",place:"bottom"}),T.default.createElement(p.CustomThemedTooltip,{id:"tooltip-sideView",place:"left"}))};
2
2
  //# sourceMappingURL=Actions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Actions.js","sources":["../../../src/components/CallView/Actions.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport {\n muteCurrentCall,\n unmuteCurrentCall,\n pauseCurrentCall,\n unpauseCurrentCall,\n parkCurrentCall,\n} from '../../lib/phone/call'\nimport { Button } from '../'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faPause,\n faPlay,\n faMicrophone,\n faMicrophoneSlash,\n faArrowDownUpAcrossLine,\n faSquareParking,\n faChevronDown,\n faChevronUp,\n faArrowRightArrowLeft,\n faUserPlus,\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 { isWebRTC } from '../../lib/user/default_device'\nimport { sendPhysicalDTMF } from '../../services/astproxy'\nimport { useEventListener, eventDispatch } from '../../utils'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\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\n const dispatch = useDispatch<Dispatch>()\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 addUserConference = () => {\n // Update island store and set conference list view to true\n dispatch.island.toggleConferenceList(isConferenceList ? false : true)\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 eventDispatch('phone-island-call-conference-list-opened', {})\n }\n\n const { t } = useTranslation()\n // Phone island header section\n return (\n <>\n <div\n className={`${\n !intrudeListenStatus?.isListen && !intrudeListenStatus?.isIntrude\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 : '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\n {!(intrudeListenStatus.isIntrude || intrudeListenStatus.isListen) && (\n <Button\n active={transferring}\n onClick={transferring ? cancelTransfer : transfer}\n variant='default'\n data-tooltip-id='tooltip-transfer'\n data-tooltip-content={\n transferring ? `${t('Tooltip.Cancel transfer')}` : `${t('Tooltip.Transfer')}`\n }\n >\n {transferring ? (\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faArrowDownUpAcrossLine} />\n ) : (\n <FontAwesomeIcon\n className='pi-rotate-90 pi-h-6 pi-w-6'\n icon={faArrowRightArrowLeft}\n />\n )}\n </Button>\n )}\n\n {!(intrudeListenStatus.isIntrude || intrudeListenStatus.isListen) && (\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 <Button\n data-stop-propagation={true}\n disabled={true}\n variant='default'\n onClick={() => addUserConference()}\n data-tooltip-id='tooltip-conference'\n data-tooltip-content={t('Tooltip.Conference') || ''}\n >\n <FontAwesomeIcon icon={faUserPlus} className='pi-h-6 pi-w-6' />\n </Button>\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":["_a","useSelector","state","currentCall","paused","muted","isRecording","parked","_b","island","view","actionsExpanded","sideViewIsVisible","isConferenceList","transferring","intrudeListenStatus","listen","dispatch","useDispatch","openKeypad","setIslandView","eventDispatch","transfer","cancelTransfer","isWebRTC","sendDTMF","sendPhysicalDTMF","store","getState","player","audioPlayerPlaying","updateStartAudioPlayer","src","outgoingRingtone","loop","setTimeout","stopAudioPlayer","updateTransferring","useEventListener","toggleActionsExpanded","t","useTranslation","React","createElement","Fragment","className","concat","isListen","isIntrude","Button","variant","active","onClick","unpauseCurrentCall","pauseCurrentCall","FontAwesomeIcon","icon","faPlay","faPause","unmuteCurrentCall","muteCurrentCall","faMicrophoneSlash","faMicrophone","faArrowDownUpAcrossLine","faArrowRightArrowLeft","faChevronUp","faChevronDown","faGridRound","parkCurrentCall","faSquareParking","disabled","toggleConferenceList","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 } from 'react'\nimport {\n muteCurrentCall,\n unmuteCurrentCall,\n pauseCurrentCall,\n unpauseCurrentCall,\n parkCurrentCall,\n} from '../../lib/phone/call'\nimport { Button } from '../'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faPause,\n faPlay,\n faMicrophone,\n faMicrophoneSlash,\n faArrowDownUpAcrossLine,\n faSquareParking,\n faChevronDown,\n faChevronUp,\n faArrowRightArrowLeft,\n faUserPlus,\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\n const dispatch = useDispatch<Dispatch>()\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 addUserConference = () => {\n // Update island store and set conference list view to true\n dispatch.island.toggleConferenceList(isConferenceList ? false : true)\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 eventDispatch('phone-island-call-conference-list-opened', {})\n }\n\n const { t } = useTranslation()\n // Phone island header section\n return (\n <>\n <div\n className={`${\n !intrudeListenStatus?.isListen && !intrudeListenStatus?.isIntrude\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 : '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\n <TransferButton />\n\n {!(intrudeListenStatus.isIntrude || intrudeListenStatus.isListen) && (\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 {/* Hidden at the moment waiting for the conference feature to be implemented */}\n {/* <Button\n data-stop-propagation={true}\n disabled={true}\n variant='default'\n onClick={() => addUserConference()}\n data-tooltip-id='tooltip-conference'\n data-tooltip-content={t('Tooltip.Conference') || ''}\n >\n <FontAwesomeIcon icon={faUserPlus} className='pi-h-6 pi-w-6' />\n </Button> */}\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":["_a","useSelector","state","currentCall","paused","muted","isRecording","parked","_b","island","view","actionsExpanded","sideViewIsVisible","isConferenceList","transferring","intrudeListenStatus","listen","dispatch","useDispatch","openKeypad","setIslandView","eventDispatch","useEventListener","isWebRTC","sendDTMF","sendPhysicalDTMF","store","getState","player","audioPlayerPlaying","updateStartAudioPlayer","src","outgoingRingtone","loop","setTimeout","stopAudioPlayer","updateTransferring","cancelTransfer","toggleActionsExpanded","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","faClose","faOpen","CustomThemedTooltip","id","place"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Timer.js","sources":["../../../src/components/CallView/Timer.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\nimport { StyledTimer } from '../../styles/Island.styles'\nimport Moment from 'react-moment'\nimport { isPhysical } from '../../lib/user/default_device'\n\nconst Timer: FC<TimerProps> = ({ size = 'large', startTime, isHome }) => {\n // Get isOpen from the island store\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n return (\n <>\n {startTime != null && !isPhysical() && (\n <StyledTimer isOpen={isOpen} size={size}>\n <Moment\n date={Number(startTime)}\n interval={1000}\n format='h:mm:ss'\n trim={false}\n unix\n durationFromNow\n className={`${\n isHome !== undefined && isHome\n ? 'pi-text-gray-950 dark:pi-text-gray-50'\n : 'pi-text-gray-50 dark:pi-text-gray-50'\n } pi-font-normal`}\n />\n </StyledTimer>\n )}\n </>\n )\n}\n\nexport default Timer\n\nexport interface TimerProps {\n size?: 'small' | 'large'\n startTime: string\n // when the timer is used in the home view or in the pill view\n isHome?: boolean\n}\n"],"names":["_a","_b","size","startTime","isHome","isOpen","useSelector","state","island","React","isPhysical","createElement","StyledTimer","Moment","date","Number","interval","format","trim","unix","durationFromNow","className","concat","undefined"],"mappings":"gdAU8B,SAACA,OAAEC,EAAcD,EAAAE,KAAdA,OAAI,IAAAD,EAAG,QAAOA,EAAEE,EAASH,EAAAG,UAAEC,EAAMJ,EAAAI,OAExDC,EAAWC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,iBAE3D,OACEC,EAAAA,8CACgB,MAAbN,IAAsBO,EAAUA,cAC/BD,EAAAA,QAACE,cAAAC,EAAWA,aAACP,OAAQA,EAAQH,KAAMA,GACjCO,EAAAA,QAAAE,cAACE,UAAM,CACLC,KAAMC,OAAOZ,GACba,SAAU,IACVC,OAAO,UACPC,MAAM,EACNC,QACAC,iBAAe,EACfC,UAAW,GACTC,YAAWC,IAAXnB,GAAwBA,EACpB,wCACA,uCACW,sBAM7B"}
1
+ {"version":3,"file":"Timer.js","sources":["../../../src/components/CallView/Timer.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\nimport { StyledTimer } from '../../styles/Island.styles'\nimport Moment from 'react-moment'\nimport { isPhysical } from '../../lib/user/default_device'\n\nconst Timer: FC<TimerProps> = ({ size = 'large', startTime, isHome }) => {\n // Get isOpen from the island store\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n return (\n <>\n {startTime != null && !isPhysical() && (\n <StyledTimer isOpen={isOpen} size={size}>\n <Moment\n date={Number(startTime)}\n interval={1000}\n format='h:mm:ss'\n trim={false}\n unix\n durationFromNow\n className={`${\n isHome !== undefined && isHome\n ? 'pi-text-gray-950 dark:pi-text-gray-50'\n : 'pi-text-gray-50 dark:pi-text-gray-50'\n } pi-font-normal`}\n />\n </StyledTimer>\n )}\n </>\n )\n}\n\nexport default Timer\n\nexport interface TimerProps {\n size?: 'small' | 'large'\n startTime: string\n // when the timer is used in the home view or in the pill view\n // TODO rename prop: it is used also in video view\n isHome?: boolean\n}\n"],"names":["_a","_b","size","startTime","isHome","isOpen","useSelector","state","island","React","isPhysical","createElement","StyledTimer","Moment","date","Number","interval","format","trim","unix","durationFromNow","className","concat","undefined"],"mappings":"gdAU8B,SAACA,OAAEC,EAAcD,EAAAE,KAAdA,OAAI,IAAAD,EAAG,QAAOA,EAAEE,EAASH,EAAAG,UAAEC,EAAMJ,EAAAI,OAExDC,EAAWC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,iBAE3D,OACEC,EAAAA,8CACgB,MAAbN,IAAsBO,EAAUA,cAC/BD,EAAAA,QAACE,cAAAC,EAAWA,aAACP,OAAQA,EAAQH,KAAMA,GACjCO,EAAAA,QAAAE,cAACE,UAAM,CACLC,KAAMC,OAAOZ,GACba,SAAU,IACVC,OAAO,UACPC,MAAM,EACNC,QACAC,iBAAe,EACfC,UAAW,GACTC,YAAWC,IAAXnB,GAAwBA,EACpB,wCACA,uCACW,sBAM7B"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("./Button.js"),i=require("../node_modules/@fortawesome/react-fontawesome/index.es.js"),o=require("../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),s=require("../lib/phone/call.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 n=require("../node_modules/react-i18next/dist/es/useTranslation.js");require("../node_modules/@babel/runtime/helpers/slicedToArray.js");var a=require("../utils/genericFunctions/eventDispatch.js"),l=require("./CustomThemedTooltip.js"),r=require("../node_modules/framer-motion/dist/es/render/dom/motion.mjs.js"),p=require("../node_modules/react-redux/es/hooks/useSelector.js"),c=require("../node_modules/react-redux/es/hooks/useDispatch.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=u(e);exports.default=function(e){e.clickCallback,e.isDestination;var u=e.description,m=e.isPhysicalRecording,f=p.useSelector((function(e){return e.currentCall})),h=f.transferring,g=f.incoming,j=f.accepted,v=c.useDispatch(),w=p.useSelector((function(e){return e.island})),x=w.isOpen,T=w.sideViewIsVisible;var y=n.useTranslation().t;return d.default.createElement(d.default.Fragment,null,d.default.createElement("div",{className:" ".concat(h?"pi-grid pi-w-full pi-space-x-2 pi-justify-start":"pi-flex pi-justify-center")},d.default.createElement(r.motion.div,{className:"".concat(h&&u?"pi-grid pi-grid-cols-4 pi-ml-4 pi-justify-start":"pi-flex pi-w-12"," ")},x&&j&&d.default.createElement("div",{className:"pi-grid pi-grid-cols-1"},d.default.createElement(t.Button,{variant:"transparent",onClick:function(){return v.island.handleToggleIsOpen()},"data-tooltip-id":"tooltip-open-close-phone-island","data-tooltip-content":x?y("Tooltip.Collapse")||"":y("Tooltip.Open")||"",className:"".concat(h&&u?"":"pi--ml-28")},d.default.createElement(i.FontAwesomeIcon,{icon:o.faDownLeftAndUpRightToCenter,className:"pi-text-gray-700 dark:pi-text-gray-200 pi-w-6 pi-h-6"}))),d.default.createElement(t.Button,{onClick:function(){return m?s.hangupCurrentPhysicalRecording():(g?s.hangupAllExtensions():s.hangupCurrentCall(),setTimeout((function(){v.listen.setUpdateIntrudeStatus(!1,""),v.listen.setUpdateListenStatus(!1,"")}),2e3),void(h&&setTimeout((function(){v.alerts.setAlert("call_transfered"),a.eventDispatch("phone-island-call-transfer-successfully-popup-open",{}),setTimeout((function(){v.alerts.removeAlert("call_transfered"),a.eventDispatch("phone-island-call-transfer-successfully-popup-close",{})}),2e3)}),300)))},variant:"red",className:"".concat(h&&u?"pi-gap-4 pi-font-medium pi-text-base pi-transition pi-min-w-12 pi-w-full pi-col-span-2":"pi-gap-4 pi-font-medium pi-text-base pi-transition pi-min-w-12 pi-w-full"),"data-tooltip-id":u&&h?"tooltip-top-transfer":"tooltip-left-transfer","data-tooltip-content":u&&h?u:"".concat(y("Tooltip.Hangup"))},d.default.createElement(i.FontAwesomeIcon,{className:"pi-rotate-135 pi-h-6 pi-w-6",icon:o.faPhone}),h&&u&&d.default.createElement(r.motion.div,{style:{height:"17px"},className:"pi-whitespace-nowrap pi-overflow-hidden"},u)),x&&j&&d.default.createElement(t.Button,{variant:"transparent",onClick:function(){return T&&a.eventDispatch("phone-island-sideview-close",{}),void v.island.setIslandView("settings")},"data-tooltip-id":"tooltip-settings-view","data-tooltip-content":y("Tooltip.Go to settings")||"",className:"".concat(h&&u?"pi-ml-5":"pi-justify-end pi-ml-16"," pi-flex pi-items-center")},d.default.createElement(i.FontAwesomeIcon,{icon:o.faGear,className:"".concat(h&&u?"pi-mr-2":"pi-ml-16","pi-text-gray-700 dark:pi-text-gray-200 pi-h-6 pi-w-6")})))),d.default.createElement(l.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-left-transfer",place:"left"}),d.default.createElement(l.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-top-transfer",place:"top"}),d.default.createElement(l.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-open-close-phone-island",place:"right"}),d.default.createElement(l.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-settings-view",place:"left"}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("./Button.js"),i=require("../node_modules/@fortawesome/react-fontawesome/index.es.js"),o=require("../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),s=require("../lib/phone/call.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 n=require("../node_modules/react-i18next/dist/es/useTranslation.js");require("../node_modules/@babel/runtime/helpers/slicedToArray.js");var a=require("../utils/genericFunctions/eventDispatch.js"),l=require("./CustomThemedTooltip.js"),r=require("../node_modules/framer-motion/dist/es/render/dom/motion.mjs.js"),p=require("../node_modules/react-redux/es/hooks/useSelector.js"),u=require("../node_modules/react-redux/es/hooks/useDispatch.js");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=c(e);exports.default=function(e){e.clickCallback,e.isDestination;var c=e.description,m=e.isPhysicalRecording,f=e.buttonsVariant,h=void 0===f?"transparent":f,g=p.useSelector((function(e){return e.currentCall})),v=g.transferring,j=g.incoming,w=g.accepted,T=u.useDispatch(),x=p.useSelector((function(e){return e.island})),q=x.isOpen,b=x.sideViewIsVisible;var _=n.useTranslation().t;return d.default.createElement(d.default.Fragment,null,d.default.createElement("div",{className:" ".concat(v?"pi-grid pi-w-full pi-space-x-2 pi-justify-start":"pi-flex pi-justify-center")},d.default.createElement(r.motion.div,{className:"".concat(v&&c?"pi-grid pi-grid-cols-4 pi-ml-4 pi-justify-start":"pi-flex pi-w-12"," ")},q&&w&&d.default.createElement("div",{className:"pi-grid pi-grid-cols-1"},d.default.createElement(t.Button,{variant:h,onClick:function(){return T.island.handleToggleIsOpen()},"data-tooltip-id":"tooltip-open-close-phone-island","data-tooltip-content":q?_("Tooltip.Collapse")||"":_("Tooltip.Open")||"",className:"".concat(v&&c?"":"pi--ml-28")},d.default.createElement(i.FontAwesomeIcon,{icon:o.faDownLeftAndUpRightToCenter,className:"pi-w-6 pi-h-6"}))),d.default.createElement(t.Button,{onClick:function(){return m?s.hangupCurrentPhysicalRecording():(j?s.hangupAllExtensions():s.hangupCurrentCall(),setTimeout((function(){T.listen.setUpdateIntrudeStatus(!1,""),T.listen.setUpdateListenStatus(!1,"")}),2e3),void(v&&setTimeout((function(){T.alerts.setAlert("call_transfered"),a.eventDispatch("phone-island-call-transfer-successfully-popup-open",{}),setTimeout((function(){T.alerts.removeAlert("call_transfered"),a.eventDispatch("phone-island-call-transfer-successfully-popup-close",{})}),2e3)}),300)))},variant:"red",className:"".concat(v&&c?"pi-gap-4 pi-font-medium pi-text-base pi-transition pi-min-w-12 pi-w-full pi-col-span-2":"pi-gap-4 pi-font-medium pi-text-base pi-transition pi-min-w-12 pi-w-full"),"data-tooltip-id":c&&v?"tooltip-top-transfer":"tooltip-left-transfer","data-tooltip-content":c&&v?c:"".concat(_("Tooltip.Hangup"))},d.default.createElement(i.FontAwesomeIcon,{className:"pi-rotate-135 pi-h-6 pi-w-6",icon:o.faPhone}),v&&c&&d.default.createElement(r.motion.div,{style:{height:"17px"},className:"pi-whitespace-nowrap pi-overflow-hidden"},c)),q&&w&&d.default.createElement(t.Button,{variant:h,onClick:function(){return b&&a.eventDispatch("phone-island-sideview-close",{}),void T.island.setIslandView("settings")},"data-tooltip-id":"tooltip-settings-view","data-tooltip-content":_("Tooltip.Go to settings")||"",className:"".concat(v&&c?"pi-ml-5":"pi-justify-end pi-ml-16"," pi-flex pi-items-center")},d.default.createElement(i.FontAwesomeIcon,{icon:o.faGear,className:"pi-h-6 pi-w-6"})))),d.default.createElement(l.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-left-transfer",place:"left"}),d.default.createElement(l.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-top-transfer",place:"top"}),d.default.createElement(l.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-open-close-phone-island",place:"right"}),d.default.createElement(l.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-settings-view",place:"left"}))};
2
2
  //# sourceMappingURL=Hangup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Hangup.js","sources":["../../src/components/Hangup.tsx"],"sourcesContent":["// Copyright (C) 2024 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 { Button } from './Button'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faDownLeftAndUpRightToCenter, faGear, faPhone } from '@fortawesome/free-solid-svg-icons'\nimport { hangupCurrentCall, hangupCurrentPhysicalRecording } from '../lib/phone/call'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { RootState } from '../store'\nimport { Dispatch } from '../store'\nimport { hangupAllExtensions } from '../lib/phone/call'\nimport { useTranslation } from 'react-i18next'\nimport { eventDispatch } from '../utils'\nimport { CustomThemedTooltip } from './CustomThemedTooltip'\n\n/**\n * Return the status of the\n */\nconst Hangup: FC<HangupProps> = ({\n clickCallback,\n isDestination,\n description,\n isPhysicalRecording,\n}) => {\n const { transferring, incoming, accepted } = useSelector((state: RootState) => state.currentCall)\n const dispatch = useDispatch<Dispatch>()\n const { isOpen, sideViewIsVisible } = useSelector((state: RootState) => state.island)\n\n function handleHangup() {\n if (incoming) {\n hangupAllExtensions()\n } else {\n hangupCurrentCall()\n }\n\n // Delay the dispatch actions\n setTimeout(() => {\n dispatch.listen.setUpdateIntrudeStatus(false, '')\n dispatch.listen.setUpdateListenStatus(false, '')\n }, 2000)\n\n // Show confirmation message when a call is transferred\n if (transferring) {\n setTimeout(() => {\n dispatch.alerts.setAlert('call_transfered')\n eventDispatch('phone-island-call-transfer-successfully-popup-open', {})\n setTimeout(() => {\n dispatch.alerts.removeAlert('call_transfered')\n eventDispatch('phone-island-call-transfer-successfully-popup-close', {})\n }, 2000)\n }, 300)\n }\n }\n\n const { t } = useTranslation()\n\n // Close side view and open settings view\n const closeSideViewOpenSettings = () => {\n if (sideViewIsVisible) {\n eventDispatch('phone-island-sideview-close', {})\n }\n dispatch.island.setIslandView('settings')\n }\n\n // Phone island footer section\n return (\n <>\n <div\n className={` ${\n transferring\n ? 'pi-grid pi-w-full pi-space-x-2 pi-justify-start'\n : 'pi-flex pi-justify-center'\n }`}\n >\n {/* The button to hangup the currentCall */}\n <motion.div\n className={`${\n transferring && description\n ? 'pi-grid pi-grid-cols-4 pi-ml-4 pi-justify-start'\n : 'pi-flex pi-w-12'\n } `}\n >\n {/* collapse phone island button */}\n {isOpen && accepted && (\n <div className='pi-grid pi-grid-cols-1'>\n <Button\n variant='transparent'\n onClick={() => dispatch.island.handleToggleIsOpen()}\n data-tooltip-id='tooltip-open-close-phone-island'\n data-tooltip-content={\n isOpen ? t('Tooltip.Collapse') || '' : t('Tooltip.Open') || ''\n }\n className={`${transferring && description ? '' : 'pi--ml-28'}`}\n >\n <FontAwesomeIcon\n icon={faDownLeftAndUpRightToCenter}\n className='pi-text-gray-700 dark:pi-text-gray-200 pi-w-6 pi-h-6'\n />\n </Button>\n </div>\n )}\n\n <Button\n onClick={() =>\n !isPhysicalRecording ? handleHangup() : hangupCurrentPhysicalRecording()\n }\n variant='red'\n className={`${\n transferring && description\n ? 'pi-gap-4 pi-font-medium pi-text-base pi-transition pi-min-w-12 pi-w-full pi-col-span-2'\n : 'pi-gap-4 pi-font-medium pi-text-base pi-transition pi-min-w-12 pi-w-full'\n }`}\n data-tooltip-id={\n description && transferring ? 'tooltip-top-transfer' : 'tooltip-left-transfer'\n }\n data-tooltip-content={\n description && transferring ? description : `${t('Tooltip.Hangup')}`\n }\n // data-tooltip-placement=\"top\"\n >\n <FontAwesomeIcon className='pi-rotate-135 pi-h-6 pi-w-6' icon={faPhone} />\n {transferring && description && (\n <motion.div\n style={{ height: '17px' }}\n className='pi-whitespace-nowrap pi-overflow-hidden'\n >\n {description}\n </motion.div>\n )}\n </Button>\n {isOpen && accepted && (\n <Button\n variant='transparent'\n onClick={() => closeSideViewOpenSettings()}\n data-tooltip-id='tooltip-settings-view'\n data-tooltip-content={t('Tooltip.Go to settings') || ''}\n className={`${\n transferring && description\n ? 'pi-ml-5'\n : 'pi-justify-end pi-ml-16'\n } pi-flex pi-items-center`}\n >\n <FontAwesomeIcon\n icon={faGear}\n className={`${\n transferring && description\n ? 'pi-mr-2'\n : 'pi-ml-16'\n }pi-text-gray-700 dark:pi-text-gray-200 pi-h-6 pi-w-6`}\n />\n </Button>\n )}\n </motion.div>\n </div>\n <CustomThemedTooltip className='pi-z-20' id='tooltip-left-transfer' place='left' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-top-transfer' place='top' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-open-close-phone-island' place='right' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-settings-view' place='left' />\n </>\n )\n}\n\nexport default Hangup\n\ninterface HangupProps {\n clickCallback?: () => void\n isDestination?: boolean\n description?: any\n isPhysicalRecording?: boolean\n}\n"],"names":["_a","clickCallback","isDestination","description","isPhysicalRecording","_b","useSelector","state","currentCall","transferring","incoming","accepted","dispatch","useDispatch","_c","island","isOpen","sideViewIsVisible","t","useTranslation","React","createElement","Fragment","className","concat","motion","div","Button","variant","onClick","handleToggleIsOpen","FontAwesomeIcon","icon","faDownLeftAndUpRightToCenter","hangupCurrentPhysicalRecording","hangupAllExtensions","hangupCurrentCall","setTimeout","listen","setUpdateIntrudeStatus","setUpdateListenStatus","alerts","setAlert","eventDispatch","removeAlert","faPhone","style","height","setIslandView","faGear","CustomThemedTooltip","id","place"],"mappings":"ktCAoBgC,SAACA,GAClBA,EAAAC,cACAD,EAAAE,kBACbC,EAAWH,EAAAG,YACXC,EAAmBJ,EAAAI,oBAEbC,EAAuCC,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMC,eAA7EC,EAAYJ,EAAAI,aAAEC,EAAQL,EAAAK,SAAEC,EAAQN,EAAAM,SAClCC,EAAWC,EAAAA,cACXC,EAAgCR,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMQ,MAAM,IAA5EC,WAAQC,sBA4BR,IAAAC,EAAMC,qBAWd,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EACE,QAAAC,cAAA,MAAA,CAAAE,UAAW,IAAAC,OACTf,EACI,kDACA,8BAINW,UAACC,cAAAI,EAAAA,OAAOC,IAAG,CACTH,UAAW,GAAAC,OACTf,GAAgBN,EACZ,kDACA,kBACH,MAGFa,GAAUL,GACTS,UAAKC,cAAA,MAAA,CAAAE,UAAU,0BACbH,EAAC,QAAAC,cAAAM,EAAMA,OACL,CAAAC,QAAQ,cACRC,QAAS,WAAM,OAAAjB,EAASG,OAAOe,oBAAoB,EAAA,kBACnC,kCAAiC,uBAE/Cd,EAASE,EAAE,qBAAuB,GAAKA,EAAE,iBAAmB,GAE9DK,UAAW,GAAGC,OAAAf,GAAgBN,EAAc,GAAK,cAEjDiB,UAAAC,cAACU,EAAeA,gBAAA,CACdC,KAAMC,EAA4BA,6BAClCV,UAAU,2DAMlBH,EAAAA,QAACC,cAAAM,SACC,CAAAE,QAAS,WACP,OAACzB,EAAuC8B,EAA8BA,kCA3E5ExB,EACFyB,EAAAA,sBAEAC,EAAAA,oBAIFC,YAAW,WACTzB,EAAS0B,OAAOC,wBAAuB,EAAO,IAC9C3B,EAAS0B,OAAOE,uBAAsB,EAAO,GAC9C,GAAE,UAGC/B,GACF4B,YAAW,WACTzB,EAAS6B,OAAOC,SAAS,mBACzBC,gBAAc,qDAAsD,CAAA,GACpEN,YAAW,WACTzB,EAAS6B,OAAOG,YAAY,mBAC5BD,gBAAc,sDAAuD,CAAA,EACtE,GAAE,IACJ,GAAE,QAwDGf,QAAQ,MACRL,UAAW,GAAAC,OACTf,GAAgBN,EACZ,yFACA,4EACJ,kBAEAA,GAAeM,EAAe,uBAAyB,wBAGvD,uBAAAN,GAAeM,EAAeN,EAAc,GAAGqB,OAAAN,EAAE,oBAInDE,EAAC,QAAAC,cAAAU,mBAAgBR,UAAU,8BAA8BS,KAAMa,EAAAA,UAC9DpC,GAAgBN,GACfiB,EAAA,QAAAC,cAACI,EAAMA,OAACC,IACN,CAAAoB,MAAO,CAAEC,OAAQ,QACjBxB,UAAU,2CAETpB,IAINa,GAAUL,GACTS,wBAACO,EAAMA,OAAA,CACLC,QAAQ,cACRC,QAAS,WAAM,OA3ErBZ,GACF0B,gBAAc,8BAA+B,CAAA,QAE/C/B,EAASG,OAAOiC,cAAc,aAyEJ,kBAAA,wBACM,uBAAA9B,EAAE,2BAA6B,GACrDK,UAAW,GACTC,OAAAf,GAAgBN,EACZ,UACA,0BACoB,6BAE1BiB,UAACC,cAAAU,EAAeA,gBACd,CAAAC,KAAMiB,SACN1B,UAAW,GAAAC,OACTf,GAAgBN,EACZ,UACA,WAAU,6DAO1BiB,UAAAC,cAAC6B,EAAmBA,oBAAA,CAAC3B,UAAU,UAAU4B,GAAG,wBAAwBC,MAAM,SAC1EhC,UAAAC,cAAC6B,EAAmBA,oBAAA,CAAC3B,UAAU,UAAU4B,GAAG,uBAAuBC,MAAM,QACzEhC,UAAAC,cAAC6B,EAAmBA,oBAAA,CAAC3B,UAAU,UAAU4B,GAAG,kCAAkCC,MAAM,UACpFhC,EAAAA,QAAAC,cAAC6B,sBAAoB,CAAA3B,UAAU,UAAU4B,GAAG,wBAAwBC,MAAM,SAGhF"}
1
+ {"version":3,"file":"Hangup.js","sources":["../../src/components/Hangup.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 { Button } from './Button'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faDownLeftAndUpRightToCenter, faGear, faPhone } from '@fortawesome/free-solid-svg-icons'\nimport { hangupCurrentCall, hangupCurrentPhysicalRecording } from '../lib/phone/call'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { RootState } from '../store'\nimport { Dispatch } from '../store'\nimport { hangupAllExtensions } from '../lib/phone/call'\nimport { useTranslation } from 'react-i18next'\nimport { eventDispatch } from '../utils'\nimport { CustomThemedTooltip } from './CustomThemedTooltip'\n\n/**\n * Return the status of the\n */\nconst Hangup: FC<HangupProps> = ({\n clickCallback,\n isDestination,\n description,\n isPhysicalRecording,\n buttonsVariant = 'transparent',\n}) => {\n const { transferring, incoming, accepted } = useSelector((state: RootState) => state.currentCall)\n const dispatch = useDispatch<Dispatch>()\n const { isOpen, sideViewIsVisible } = useSelector((state: RootState) => state.island)\n\n function handleHangup() {\n if (incoming) {\n hangupAllExtensions()\n } else {\n hangupCurrentCall()\n }\n\n // Delay the dispatch actions\n setTimeout(() => {\n dispatch.listen.setUpdateIntrudeStatus(false, '')\n dispatch.listen.setUpdateListenStatus(false, '')\n }, 2000)\n\n // Show confirmation message when a call is transferred\n if (transferring) {\n setTimeout(() => {\n dispatch.alerts.setAlert('call_transfered')\n eventDispatch('phone-island-call-transfer-successfully-popup-open', {})\n setTimeout(() => {\n dispatch.alerts.removeAlert('call_transfered')\n eventDispatch('phone-island-call-transfer-successfully-popup-close', {})\n }, 2000)\n }, 300)\n }\n }\n\n const { t } = useTranslation()\n\n // Close side view and open settings view\n const closeSideViewOpenSettings = () => {\n if (sideViewIsVisible) {\n eventDispatch('phone-island-sideview-close', {})\n }\n dispatch.island.setIslandView('settings')\n }\n\n // Phone island footer section\n return (\n <>\n <div\n className={` ${\n transferring\n ? 'pi-grid pi-w-full pi-space-x-2 pi-justify-start'\n : 'pi-flex pi-justify-center'\n }`}\n >\n {/* The button to hangup the currentCall */}\n <motion.div\n className={`${\n transferring && description\n ? 'pi-grid pi-grid-cols-4 pi-ml-4 pi-justify-start'\n : 'pi-flex pi-w-12'\n } `}\n >\n {/* collapse phone island button */}\n {isOpen && accepted && (\n <div className='pi-grid pi-grid-cols-1'>\n <Button\n variant={buttonsVariant}\n onClick={() => dispatch.island.handleToggleIsOpen()}\n data-tooltip-id='tooltip-open-close-phone-island'\n data-tooltip-content={\n isOpen ? t('Tooltip.Collapse') || '' : t('Tooltip.Open') || ''\n }\n className={`${transferring && description ? '' : 'pi--ml-28'}`}\n >\n <FontAwesomeIcon icon={faDownLeftAndUpRightToCenter} className='pi-w-6 pi-h-6' />\n </Button>\n </div>\n )}\n\n <Button\n onClick={() =>\n !isPhysicalRecording ? handleHangup() : hangupCurrentPhysicalRecording()\n }\n variant='red'\n className={`${\n transferring && description\n ? 'pi-gap-4 pi-font-medium pi-text-base pi-transition pi-min-w-12 pi-w-full pi-col-span-2'\n : 'pi-gap-4 pi-font-medium pi-text-base pi-transition pi-min-w-12 pi-w-full'\n }`}\n data-tooltip-id={\n description && transferring ? 'tooltip-top-transfer' : 'tooltip-left-transfer'\n }\n data-tooltip-content={\n description && transferring ? description : `${t('Tooltip.Hangup')}`\n }\n // data-tooltip-placement=\"top\"\n >\n <FontAwesomeIcon className='pi-rotate-135 pi-h-6 pi-w-6' icon={faPhone} />\n {transferring && description && (\n <motion.div\n style={{ height: '17px' }}\n className='pi-whitespace-nowrap pi-overflow-hidden'\n >\n {description}\n </motion.div>\n )}\n </Button>\n {isOpen && accepted && (\n <Button\n variant={buttonsVariant}\n onClick={() => closeSideViewOpenSettings()}\n data-tooltip-id='tooltip-settings-view'\n data-tooltip-content={t('Tooltip.Go to settings') || ''}\n className={`${\n transferring && description ? 'pi-ml-5' : 'pi-justify-end pi-ml-16'\n } pi-flex pi-items-center`}\n >\n <FontAwesomeIcon icon={faGear} className={`pi-h-6 pi-w-6`} />\n </Button>\n )}\n </motion.div>\n </div>\n <CustomThemedTooltip className='pi-z-20' id='tooltip-left-transfer' place='left' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-top-transfer' place='top' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-open-close-phone-island' place='right' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-settings-view' place='left' />\n </>\n )\n}\n\nexport default Hangup\n\ninterface HangupProps {\n clickCallback?: () => void\n isDestination?: boolean\n description?: any\n isPhysicalRecording?: boolean\n buttonsVariant?:\n | 'transparent'\n | 'default'\n | 'red'\n | 'green'\n | 'neutral'\n | 'transparentSideView'\n | 'transparentSettings'\n}\n"],"names":["_a","isDestination","description","isPhysicalRecording","_b","buttonsVariant","_c","useSelector","state","currentCall","transferring","incoming","accepted","dispatch","useDispatch","_d","island","isOpen","sideViewIsVisible","t","useTranslation","React","createElement","Fragment","className","concat","motion","div","Button","variant","onClick","handleToggleIsOpen","FontAwesomeIcon","icon","faDownLeftAndUpRightToCenter","hangupCurrentPhysicalRecording","hangupAllExtensions","hangupCurrentCall","setTimeout","listen","setUpdateIntrudeStatus","setUpdateListenStatus","alerts","setAlert","eventDispatch","removeAlert","faPhone","style","height","setIslandView","faGear","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 r=require("../utils/customHooks/useIsomorphicLayoutEffect.js"),t=require("./CallView/index.js"),l=require("./KeypadView/index.js"),i=require("./AudioPlayerView/index.js"),u=require("./AlertGuard.js"),a=require("./CallView/BackCall.js"),n=require("./SideView/SideView.js"),s=require("./ViewsTransition.js");require("../node_modules/@fortawesome/react-fontawesome/index.es.js"),require("../lib/webrtc/janus.js"),require("../store/index.js"),require("../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../node_modules/mic-check/lib/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"),require("../node_modules/@babel/runtime/helpers/slicedToArray.js"),require("../node_modules/react-tooltip/dist/react-tooltip.min.mjs.js");var o=require("./TransferView/TransferList.js"),d=require("./RecorderView/index.js"),c=require("./IslandMotion.js"),f=require("./IslandDrag.js"),m=require("./Close.js"),p=require("./PhysicalRecorderView/index.js"),j=require("./SettingsView/index.js"),w=require("./VideoView/index.js"),q=require("./SwitchDeviceView/index.js"),h=require("../utils/genericFunctions/isBackCallVisible.js"),y=require("../node_modules/react-redux/es/hooks/useSelector.js"),V=require("../node_modules/react-redux/es/hooks/useDispatch.js");function E(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var v=E(e),b=function(E){var b=E.showAlways,x=y.useSelector((function(e){return e.currentCall})),g=x.incoming,_=x.accepted,P=x.outgoing,R=y.useSelector((function(e){return e.island})),S=R.view,I=R.sideViewIsVisible,C=R.avoidToShow,A=y.useSelector((function(e){return{recording:e.physicalRecorder.recording}})).recording,k=y.useSelector((function(e){return e.alerts.status})).activeAlertsCount,D=y.useSelector((function(e){return e.player})).audioPlayerLoop,T=e.useRef(null),L=V.useDispatch(),B=e.useRef(null),F=e.useRef(null),M=e.useRef(null),N=e.useRef(null),G=e.useRef(null);r.useIsomorphicLayoutEffect((function(){L.player.updatePlayer({audioPlayer:B,localAudio:F,localVideo:N,remoteVideo:G,remoteAudio:M})}),[]),e.useEffect((function(){(g||P)&&L.island.setIslandView("call")}),[g,P]),e.useEffect((function(){A&&L.island.setIslandView("physicalPhoneRecorder")}),[S]);var K,z=e.useState(""),H=z[0],O=z[1];return e.useEffect((function(){setTimeout((function(){O(S)}),200)}),[S]),v.default.createElement("div",{ref:T,className:"pi-absolute pi-min-w-full pi-min-h-full pi-left-0 pi-top-0 pi-overflow-hidden pi-pointer-events-none pi-flex pi-items-center pi-justify-center pi-content-center pi-phone-island-container pi-z-1000"},(g||P||_||b||k>0||"player"===S||"recorder"===S||"physicalPhoneRecorder"===S)&&!C&&v.default.createElement(v.default.Fragment,null,v.default.createElement(f.IslandDrag,{islandContainerRef:T},v.default.createElement(a.default,{isVisible:h.isBackCallActive()}),v.default.createElement(n.default,{isVisible:I}),v.default.createElement(c.IslandMotion,null,v.default.createElement(u.AlertGuard,null,(K={call:v.default.createElement(t.default,null),keypad:v.default.createElement(l.default,null),transfer:v.default.createElement(o.TransferListView,null),player:v.default.createElement(i.KeypadView,null),recorder:v.default.createElement(d.RecorderView,null),physicalPhoneRecorder:v.default.createElement(p.PhysicalRecorderView,null),settings:v.default.createElement(j.SettingsView,null),video:v.default.createElement(w.VideoView,null),switchDevice:v.default.createElement(q.SwitchDeviceView,null)},H in K?v.default.createElement(s.default,{forView:H},K[H]):v.default.createElement(v.default.Fragment,null)))),v.default.createElement(m.Close,null))),v.default.createElement("div",{className:"pi-hidden"},v.default.createElement("audio",{loop:D,ref:B}),v.default.createElement("audio",{muted:!0,ref:F}),v.default.createElement("audio",{autoPlay:!0,ref:M}),v.default.createElement("video",{muted:!0,autoPlay:!0,ref:N}),v.default.createElement("video",{autoPlay:!0,muted:!0,ref:G})))};b.displayName="Island",exports.Island=b;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var r=require("../utils/customHooks/useIsomorphicLayoutEffect.js"),t=require("./CallView/index.js"),i=require("./KeypadView/index.js"),l=require("./AudioPlayerView/index.js"),u=require("./AlertGuard.js"),n=require("./CallView/BackCall.js"),s=require("./SideView/SideView.js"),a=require("./ViewsTransition.js");require("../node_modules/@fortawesome/react-fontawesome/index.es.js"),require("../lib/webrtc/janus.js"),require("../store/index.js"),require("../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../node_modules/mic-check/lib/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"),require("../node_modules/@babel/runtime/helpers/slicedToArray.js"),require("../node_modules/react-tooltip/dist/react-tooltip.min.mjs.js");var o=require("./TransferView/TransferList.js"),d=require("./RecorderView/index.js"),c=require("./IslandMotion.js"),f=require("./IslandDrag.js"),m=require("./Close.js"),p=require("./PhysicalRecorderView/index.js"),j=require("./SettingsView/index.js"),w=require("./VideoView/index.js"),q=require("./SwitchDeviceView/index.js"),h=require("../utils/genericFunctions/isBackCallVisible.js"),y=require("../node_modules/react-redux/es/hooks/useSelector.js"),V=require("../node_modules/react-redux/es/hooks/useDispatch.js");function E(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var b=E(e),x=function(E){var x=E.showAlways,v=y.useSelector((function(e){return e.currentCall})),g=v.incoming,_=v.accepted,S=v.outgoing,P=y.useSelector((function(e){return e.island})),R=P.view,I=P.sideViewIsVisible,C=P.avoidToShow,A=y.useSelector((function(e){return{recording:e.physicalRecorder.recording}})).recording,k=y.useSelector((function(e){return e.alerts.status})).activeAlertsCount,D=y.useSelector((function(e){return e.player})).audioPlayerLoop,T=e.useRef(null),L=V.useDispatch(),B=e.useRef(null),F=e.useRef(null),M=e.useRef(null);r.useIsomorphicLayoutEffect((function(){L.player.updatePlayer({audioPlayer:B,localAudio:F,remoteAudio:M})}),[]),e.useEffect((function(){(g||S)&&L.island.setIslandView("call")}),[g,S]),e.useEffect((function(){A&&L.island.setIslandView("physicalPhoneRecorder")}),[R]);var N,G=e.useState(""),K=G[0],z=G[1];return e.useEffect((function(){setTimeout((function(){z(R)}),200)}),[R]),b.default.createElement("div",{ref:T,className:"pi-absolute pi-min-w-full pi-min-h-full pi-left-0 pi-top-0 pi-overflow-hidden pi-pointer-events-none pi-flex pi-items-center pi-justify-center pi-content-center pi-phone-island-container pi-z-1000"},(g||S||_||x||k>0||"player"===R||"recorder"===R||"physicalPhoneRecorder"===R)&&!C&&b.default.createElement(b.default.Fragment,null,b.default.createElement(f.IslandDrag,{islandContainerRef:T},b.default.createElement(n.default,{isVisible:h.isBackCallActive()}),b.default.createElement(s.default,{isVisible:I}),b.default.createElement(c.IslandMotion,null,b.default.createElement(u.AlertGuard,null,(N={call:b.default.createElement(t.default,null),keypad:b.default.createElement(i.default,null),transfer:b.default.createElement(o.TransferListView,null),player:b.default.createElement(l.KeypadView,null),recorder:b.default.createElement(d.RecorderView,null),physicalPhoneRecorder:b.default.createElement(p.PhysicalRecorderView,null),settings:b.default.createElement(j.SettingsView,null),video:b.default.createElement(w.VideoView,null),switchDevice:b.default.createElement(q.SwitchDeviceView,null)},K in N?b.default.createElement(a.default,{forView:K},N[K]):b.default.createElement(b.default.Fragment,null)))),b.default.createElement(m.Close,null))),b.default.createElement("div",{className:"pi-hidden"},b.default.createElement("audio",{loop:D,ref:B}),b.default.createElement("audio",{muted:!0,ref:F}),b.default.createElement("audio",{autoPlay:!0,ref:M})))};x.displayName="Island",exports.Island=x;
2
2
  //# sourceMappingURL=Island.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Island.js","sources":["../../src/components/Island.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { useState, useRef, useEffect, type FC } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { RootState, Dispatch } from '../store'\nimport { useIsomorphicLayoutEffect } from '../utils'\nimport CallView from './CallView'\nimport KeyboardView from './KeypadView'\nimport AudioPlayerView from './AudioPlayerView'\nimport { AlertGuard } from './AlertGuard'\nimport BackCall from './CallView/BackCall'\nimport SideView from './SideView/SideView'\nimport ViewsTransition from './ViewsTransition'\nimport { TransferListView } from './TransferView'\nimport { RecorderView } from './RecorderView'\nimport IslandMotions from './IslandMotion'\nimport IslandDrag from './IslandDrag'\nimport Close from './Close'\nimport { PhysicalRecorderView } from './PhysicalRecorderView'\nimport { SettingsView } from './SettingsView'\nimport { VideoView } from './VideoView'\nimport { SwitchDeviceView } from './SwitchDeviceView'\nimport { isBackCallActive } from '../utils/genericFunctions/isBackCallVisible'\n\n/**\n * Provides the Island logic\n *\n * @param showAlways Sets the Island ever visible\n */\nexport const Island: FC<IslandProps> = ({ showAlways }) => {\n // Get the currentCall info\n const { incoming, accepted, outgoing } = useSelector((state: RootState) => state.currentCall)\n\n // Get isOpen from island store\n const { view, sideViewIsVisible, avoidToShow } = useSelector((state: RootState) => state.island)\n const { recording } = useSelector((state: RootState) => ({\n recording: state.physicalRecorder.recording,\n }))\n\n // Get activeAlertsCount from island store\n const { activeAlertsCount } = useSelector((state: RootState) => state.alerts.status)\n\n // Get audioPlayerLoop value from player store\n const { audioPlayerLoop } = useSelector((state: RootState) => state.player)\n\n // The Container reference\n const islandContainerRef = useRef<any>(null)\n\n // Initialize useDispatch\n const dispatch = useDispatch<Dispatch>()\n\n const audioPlayer = useRef<HTMLAudioElement>(null)\n const localAudio = useRef<HTMLAudioElement>(null)\n const remoteAudio = useRef<HTMLAudioElement>(null)\n const localVideo = useRef<HTMLVideoElement>(null)\n const remoteVideo = useRef<HTMLVideoElement>(null)\n\n useIsomorphicLayoutEffect(() => {\n dispatch.player.updatePlayer({\n audioPlayer: audioPlayer,\n localAudio: localAudio,\n localVideo: localVideo,\n remoteVideo: remoteVideo,\n remoteAudio: remoteAudio,\n })\n }, [])\n\n // Handle and apply view switch logic\n // ...set callview as the current view\n useEffect(() => {\n // Check and switch the view\n if (incoming || outgoing) {\n dispatch.island.setIslandView('call')\n }\n }, [incoming, outgoing])\n\n useEffect(() => {\n if (recording) {\n dispatch.island.setIslandView('physicalPhoneRecorder')\n }\n }, [view])\n\n const [currentView, setCurrentView] = useState<any>('')\n\n // Handle island view change\n useEffect(() => {\n setTimeout(() => {\n setCurrentView(view)\n }, 200)\n }, [view])\n\n return (\n <div\n ref={islandContainerRef}\n className='pi-absolute pi-min-w-full pi-min-h-full pi-left-0 pi-top-0 pi-overflow-hidden pi-pointer-events-none pi-flex pi-items-center pi-justify-center pi-content-center pi-phone-island-container pi-z-1000'\n >\n {(incoming ||\n outgoing ||\n accepted ||\n showAlways ||\n activeAlertsCount > 0 ||\n view === 'player' ||\n view === 'recorder' ||\n view === 'physicalPhoneRecorder') &&\n !avoidToShow && (\n <>\n <IslandDrag islandContainerRef={islandContainerRef}>\n {/* Add background call visibility logic */}\n <BackCall isVisible={isBackCallActive()} />\n <SideView isVisible={sideViewIsVisible} />\n <IslandMotions>\n {/* The views logic */}\n <AlertGuard>\n {(() => {\n const views = {\n call: <CallView />,\n keypad: <KeyboardView />,\n transfer: <TransferListView />,\n player: <AudioPlayerView />,\n recorder: <RecorderView />,\n physicalPhoneRecorder: <PhysicalRecorderView />,\n settings: <SettingsView />,\n video: <VideoView />,\n switchDevice: <SwitchDeviceView />,\n }\n\n return currentView in views ? (\n <ViewsTransition forView={currentView}>\n {views[currentView as keyof typeof views]}\n </ViewsTransition>\n ) : (\n <></>\n )\n })()}\n </AlertGuard>\n </IslandMotions>\n <Close />\n </IslandDrag>\n </>\n )}\n <div className='pi-hidden'>\n <audio loop={audioPlayerLoop} ref={audioPlayer}></audio>\n <audio muted={true} ref={localAudio}></audio>\n <audio autoPlay ref={remoteAudio}></audio>\n <video muted={true} autoPlay ref={localVideo}></video>\n <video autoPlay muted={true} ref={remoteVideo}></video>\n </div>\n </div>\n )\n}\n\nIsland.displayName = 'Island'\n\ninterface IslandProps {\n showAlways?: boolean\n}\n"],"names":["Island","_a","showAlways","_b","useSelector","state","currentCall","incoming","accepted","outgoing","_c","island","view","sideViewIsVisible","avoidToShow","recording","physicalRecorder","activeAlertsCount","alerts","status","audioPlayerLoop","player","islandContainerRef","useRef","dispatch","useDispatch","audioPlayer","localAudio","remoteAudio","localVideo","remoteVideo","useIsomorphicLayoutEffect","updatePlayer","useEffect","setIslandView","views","_d","useState","currentView","setCurrentView","setTimeout","React","ref","className","createElement","Fragment","IslandDrag","BackCall","isVisible","isBackCallActive","SideView","IslandMotions","AlertGuard","call","CallView","keypad","KeyboardView","transfer","TransferListView","AudioPlayerView","recorder","RecorderView","physicalPhoneRecorder","PhysicalRecorderView","settings","SettingsView","video","VideoView","switchDevice","SwitchDeviceView","ViewsTransition","forView","Close","loop","muted","autoPlay","displayName"],"mappings":"mvDA8BaA,EAA0B,SAACC,GAAE,IAAAC,EAAUD,EAAAC,WAE5CC,EAAmCC,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMC,eAAzEC,EAAQJ,EAAAI,SAAEC,EAAQL,EAAAK,SAAEC,EAAQN,EAAAM,SAG9BC,EAA2CN,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMM,UAAjFC,EAAIF,EAAAE,KAAEC,EAAiBH,EAAAG,kBAAEC,EAAWJ,EAAAI,YACpCC,EAAcX,EAAAA,aAAY,SAACC,GAAqB,MAAC,CACvDU,UAAWV,EAAMW,iBAAiBD,UADoB,IAErDA,UAGKE,EAAsBb,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMa,OAAOC,4BAGrEC,EAAoBhB,eAAY,SAACC,GAAqB,OAAAA,EAAMgB,0BAG9DC,EAAqBC,SAAY,MAGjCC,EAAWC,EAAAA,cAEXC,EAAcH,SAAyB,MACvCI,EAAaJ,SAAyB,MACtCK,EAAcL,SAAyB,MACvCM,EAAaN,SAAyB,MACtCO,EAAcP,SAAyB,MAE7CQ,EAAAA,2BAA0B,WACxBP,EAASH,OAAOW,aAAa,CAC3BN,YAAaA,EACbC,WAAYA,EACZE,WAAYA,EACZC,YAAaA,EACbF,YAAaA,GAEhB,GAAE,IAIHK,EAAAA,WAAU,YAEJ1B,GAAYE,IACde,EAASb,OAAOuB,cAAc,OAElC,GAAG,CAAC3B,EAAUE,IAEdwB,EAAAA,WAAU,WACJlB,GACFS,EAASb,OAAOuB,cAAc,wBAElC,GAAG,CAACtB,IAEE,IAgCkBuB,EAhClBC,EAAgCC,EAAAA,SAAc,IAA7CC,EAAWF,EAAA,GAAEG,EAAcH,EAAA,GASlC,OANAH,EAAAA,WAAU,WACRO,YAAW,WACTD,EAAe3B,EAChB,GAAE,IACL,GAAG,CAACA,IAGF6B,EAAAA,6BACEC,IAAKpB,EACLqB,UAAU,yMAERpC,GACAE,GACAD,GACAN,GACAe,EAAoB,GACX,WAATL,GACS,aAATA,GACS,0BAATA,KACCE,GACC2B,EAAA,QAAAG,cAAAH,EAAA,QAAAI,SAAA,KACEJ,EAAAA,QAAAG,cAACE,EAAAA,WAAU,CAACxB,mBAAoBA,GAE9BmB,EAAA,QAAAG,cAACG,EAAQ,QAAC,CAAAC,UAAWC,EAAAA,qBACrBR,EAAAA,QAAAG,cAACM,EAAAA,QAAQ,CAACF,UAAWnC,IACrB4B,UAAAG,cAACO,EAAAA,aAAa,KAEZV,EAAAA,QAACG,cAAAQ,mBAESjB,EAAQ,CACZkB,KAAMZ,EAAC,QAAAG,cAAAU,EAAAA,QAAW,MAClBC,OAAQd,EAAC,QAAAG,cAAAY,EAAAA,QAAe,MACxBC,SAAUhB,EAAC,QAAAG,cAAAc,EAAAA,iBAAmB,MAC9BrC,OAAQoB,EAAC,QAAAG,cAAAe,EAAAA,WAAkB,MAC3BC,SAAUnB,EAAC,QAAAG,cAAAiB,EAAAA,aAAe,MAC1BC,sBAAuBrB,EAAC,QAAAG,cAAAmB,EAAAA,qBAAuB,MAC/CC,SAAUvB,EAAC,QAAAG,cAAAqB,EAAAA,aAAe,MAC1BC,MAAOzB,EAAC,QAAAG,cAAAuB,EAAAA,UAAY,MACpBC,aAAc3B,EAAC,QAAAG,cAAAyB,EAAAA,iBAAmB,OAG7B/B,KAAeH,EACpBM,EAAC,QAAAG,cAAA0B,UAAgB,CAAAC,QAASjC,GACvBH,EAAMG,IAGTG,UAAKG,cAAAH,EAAAA,QAAAI,SAAA,SAKbJ,EAAAA,QAAAG,cAAC4B,EAAAA,MAAK,QAId/B,EAAAA,QAAKG,cAAA,MAAA,CAAAD,UAAU,aACbF,EAAA,QAAAG,cAAA,QAAA,CAAO6B,KAAMrD,EAAiBsB,IAAKhB,IACnCe,EAAA,QAAAG,cAAA,QAAA,CAAO8B,OAAO,EAAMhC,IAAKf,IACzBc,EAAA,QAAAG,cAAA,QAAA,CAAO+B,UAAQ,EAACjC,IAAKd,IACrBa,UAAOG,cAAA,QAAA,CAAA8B,OAAO,EAAMC,UAAS,EAAAjC,IAAKb,IAClCY,EAAAA,QAAAG,cAAA,QAAA,CAAO+B,UAAQ,EAACD,OAAO,EAAMhC,IAAKZ,KAI1C,EAEA9B,EAAO4E,YAAc"}
1
+ {"version":3,"file":"Island.js","sources":["../../src/components/Island.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { useState, useRef, useEffect, type FC } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { RootState, Dispatch } from '../store'\nimport { useIsomorphicLayoutEffect } from '../utils'\nimport CallView from './CallView'\nimport KeyboardView from './KeypadView'\nimport AudioPlayerView from './AudioPlayerView'\nimport { AlertGuard } from './AlertGuard'\nimport BackCall from './CallView/BackCall'\nimport SideView from './SideView/SideView'\nimport ViewsTransition from './ViewsTransition'\nimport { TransferListView } from './TransferView'\nimport { RecorderView } from './RecorderView'\nimport IslandMotions from './IslandMotion'\nimport IslandDrag from './IslandDrag'\nimport Close from './Close'\nimport { PhysicalRecorderView } from './PhysicalRecorderView'\nimport { SettingsView } from './SettingsView'\nimport { VideoView } from './VideoView'\nimport { SwitchDeviceView } from './SwitchDeviceView'\nimport { isBackCallActive } from '../utils/genericFunctions/isBackCallVisible'\n\n/**\n * Provides the Island logic\n *\n * @param showAlways Sets the Island ever visible\n */\nexport const Island: FC<IslandProps> = ({ showAlways }) => {\n // Get the currentCall info\n const { incoming, accepted, outgoing } = useSelector((state: RootState) => state.currentCall)\n\n const { view, sideViewIsVisible, avoidToShow } = useSelector((state: RootState) => state.island)\n const { recording } = useSelector((state: RootState) => ({\n recording: state.physicalRecorder.recording,\n }))\n\n // Get activeAlertsCount from island store\n const { activeAlertsCount } = useSelector((state: RootState) => state.alerts.status)\n\n // Get audioPlayerLoop value from player store\n const { audioPlayerLoop } = useSelector((state: RootState) => state.player)\n\n // The Container reference\n const islandContainerRef = useRef<any>(null)\n\n // Initialize useDispatch\n const dispatch = useDispatch<Dispatch>()\n\n const audioPlayer = useRef<HTMLAudioElement>(null)\n const localAudio = useRef<HTMLAudioElement>(null)\n const remoteAudio = useRef<HTMLAudioElement>(null)\n\n useIsomorphicLayoutEffect(() => {\n dispatch.player.updatePlayer({\n audioPlayer: audioPlayer,\n localAudio: localAudio,\n remoteAudio: remoteAudio,\n })\n }, [])\n\n // Handle and apply view switch logic\n // ...set callview as the current view\n useEffect(() => {\n // Check and switch the view\n if (incoming || outgoing) {\n dispatch.island.setIslandView('call')\n }\n }, [incoming, outgoing])\n\n useEffect(() => {\n if (recording) {\n dispatch.island.setIslandView('physicalPhoneRecorder')\n }\n }, [view])\n\n const [currentView, setCurrentView] = useState<any>('')\n\n // Handle island view change\n useEffect(() => {\n setTimeout(() => {\n setCurrentView(view)\n }, 200)\n }, [view])\n\n return (\n <div\n ref={islandContainerRef}\n className='pi-absolute pi-min-w-full pi-min-h-full pi-left-0 pi-top-0 pi-overflow-hidden pi-pointer-events-none pi-flex pi-items-center pi-justify-center pi-content-center pi-phone-island-container pi-z-1000'\n >\n {(incoming ||\n outgoing ||\n accepted ||\n showAlways ||\n activeAlertsCount > 0 ||\n view === 'player' ||\n view === 'recorder' ||\n view === 'physicalPhoneRecorder') &&\n !avoidToShow && (\n <>\n <IslandDrag islandContainerRef={islandContainerRef}>\n {/* Add background call visibility logic */}\n <BackCall isVisible={isBackCallActive()} />\n <SideView isVisible={sideViewIsVisible} />\n <IslandMotions>\n {/* The views logic */}\n <AlertGuard>\n {(() => {\n const views = {\n call: <CallView />,\n keypad: <KeyboardView />,\n transfer: <TransferListView />,\n player: <AudioPlayerView />,\n recorder: <RecorderView />,\n physicalPhoneRecorder: <PhysicalRecorderView />,\n settings: <SettingsView />,\n video: <VideoView />,\n switchDevice: <SwitchDeviceView />,\n }\n\n return currentView in views ? (\n <ViewsTransition forView={currentView}>\n {views[currentView as keyof typeof views]}\n </ViewsTransition>\n ) : (\n <></>\n )\n })()}\n </AlertGuard>\n </IslandMotions>\n <Close />\n </IslandDrag>\n </>\n )}\n <div className='pi-hidden'>\n <audio loop={audioPlayerLoop} ref={audioPlayer}></audio>\n <audio muted={true} ref={localAudio}></audio>\n <audio autoPlay ref={remoteAudio}></audio>\n </div>\n </div>\n )\n}\n\nIsland.displayName = 'Island'\n\ninterface IslandProps {\n showAlways?: boolean\n}\n"],"names":["Island","_a","showAlways","_b","useSelector","state","currentCall","incoming","accepted","outgoing","_c","island","view","sideViewIsVisible","avoidToShow","recording","physicalRecorder","activeAlertsCount","alerts","status","audioPlayerLoop","player","islandContainerRef","useRef","dispatch","useDispatch","audioPlayer","localAudio","remoteAudio","useIsomorphicLayoutEffect","updatePlayer","useEffect","setIslandView","views","_d","useState","currentView","setCurrentView","setTimeout","React","ref","className","createElement","Fragment","IslandDrag","BackCall","isVisible","isBackCallActive","SideView","IslandMotions","AlertGuard","call","CallView","keypad","KeyboardView","transfer","TransferListView","AudioPlayerView","recorder","RecorderView","physicalPhoneRecorder","PhysicalRecorderView","settings","SettingsView","video","VideoView","switchDevice","SwitchDeviceView","ViewsTransition","forView","Close","loop","muted","autoPlay","displayName"],"mappings":"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"}