@nethesis/phone-island 0.8.13 → 0.8.15

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 (167) hide show
  1. package/dist/App.js +1 -1
  2. package/dist/App.js.map +1 -1
  3. package/dist/components/CallView/DisplayName.js +1 -1
  4. package/dist/components/CallView/DisplayName.js.map +1 -1
  5. package/dist/components/Events.js.map +1 -1
  6. package/dist/components/Hangup.d.ts +1 -0
  7. package/dist/components/Hangup.js +1 -1
  8. package/dist/components/Hangup.js.map +1 -1
  9. package/dist/components/Island.js +1 -1
  10. package/dist/components/Island.js.map +1 -1
  11. package/dist/components/IslandMotion.js +1 -1
  12. package/dist/components/IslandMotion.js.map +1 -1
  13. package/dist/components/PhysicalRecorderView/PhysicalRecordingTimer.d.ts +5 -0
  14. package/dist/components/PhysicalRecorderView/PhysicalRecordingTimer.js +2 -0
  15. package/dist/components/PhysicalRecorderView/PhysicalRecordingTimer.js.map +1 -0
  16. package/dist/components/PhysicalRecorderView/index.d.ts +4 -0
  17. package/dist/components/PhysicalRecorderView/index.js +2 -0
  18. package/dist/components/PhysicalRecorderView/index.js.map +1 -0
  19. package/dist/components/RecorderView/Timer.js.map +1 -1
  20. package/dist/components/RecorderView/index.js +1 -1
  21. package/dist/components/RecorderView/index.js.map +1 -1
  22. package/dist/components/Socket.js +1 -1
  23. package/dist/components/Socket.js.map +1 -1
  24. package/dist/components/TransferView/ListAvatar.js +1 -1
  25. package/dist/components/TransferView/ListAvatar.js.map +1 -1
  26. package/dist/events/RecorderEvents.d.ts +4 -0
  27. package/dist/events/RecorderEvents.js +1 -1
  28. package/dist/events/RecorderEvents.js.map +1 -1
  29. package/dist/index.css +1 -1
  30. package/dist/lib/avatars/avatars.js +1 -1
  31. package/dist/lib/avatars/avatars.js.map +1 -1
  32. package/dist/lib/phone/audio.js.map +1 -1
  33. package/dist/lib/phone/call.d.ts +4 -0
  34. package/dist/lib/phone/call.js +1 -1
  35. package/dist/lib/phone/call.js.map +1 -1
  36. package/dist/lib/webrtc/janus.js +1 -1
  37. package/dist/lib/webrtc/janus.js.map +1 -1
  38. package/dist/lib/webrtc/messages.js.map +1 -1
  39. package/dist/models/index.d.ts +2 -0
  40. package/dist/models/index.js +1 -1
  41. package/dist/models/index.js.map +1 -1
  42. package/dist/models/island.d.ts +1 -1
  43. package/dist/models/island.js.map +1 -1
  44. package/dist/models/motions.d.ts +40 -0
  45. package/dist/models/motions.js +1 -1
  46. package/dist/models/motions.js.map +1 -1
  47. package/dist/models/physicalRecorder.d.ts +47 -0
  48. package/dist/models/physicalRecorder.js +2 -0
  49. package/dist/models/physicalRecorder.js.map +1 -0
  50. package/dist/node_modules/@emotion/stylis/dist/stylis.browser.esm.js +1 -1
  51. package/dist/node_modules/@emotion/stylis/dist/stylis.browser.esm.js.map +1 -1
  52. package/dist/node_modules/@floating-ui/core/dist/floating-ui.core.mjs.js.map +1 -1
  53. package/dist/node_modules/@floating-ui/dom/dist/floating-ui.dom.esm.js +1 -1
  54. package/dist/node_modules/@floating-ui/dom/dist/floating-ui.dom.esm.js.map +1 -1
  55. package/dist/node_modules/@fortawesome/fontawesome-svg-core/index.mjs.js +1 -1
  56. package/dist/node_modules/@fortawesome/fontawesome-svg-core/index.mjs.js.map +1 -1
  57. package/dist/node_modules/@fortawesome/react-fontawesome/index.es.js +1 -1
  58. package/dist/node_modules/@fortawesome/react-fontawesome/index.es.js.map +1 -1
  59. package/dist/node_modules/@headlessui/react/dist/components/menu/menu.js.map +1 -1
  60. package/dist/node_modules/@headlessui/react/dist/components/transitions/transition.js +1 -1
  61. package/dist/node_modules/@headlessui/react/dist/components/transitions/transition.js.map +1 -1
  62. package/dist/node_modules/@headlessui/react/dist/hooks/use-tracked-pointer.js.map +1 -1
  63. package/dist/node_modules/@headlessui/react/dist/utils/disposables.js.map +1 -1
  64. package/dist/node_modules/@headlessui/react/dist/utils/env.js.map +1 -1
  65. package/dist/node_modules/@headlessui/react/dist/utils/focus-management.js +1 -1
  66. package/dist/node_modules/@headlessui/react/dist/utils/focus-management.js.map +1 -1
  67. package/dist/node_modules/@headlessui/react/dist/utils/match.js.map +1 -1
  68. package/dist/node_modules/@headlessui/react/dist/utils/render.js.map +1 -1
  69. package/dist/node_modules/@socket.io/component-emitter/{index.mjs.js → lib/esm/index.js} +1 -1
  70. package/dist/node_modules/@socket.io/component-emitter/lib/esm/index.js.map +1 -0
  71. package/dist/node_modules/cross-fetch/dist/browser-ponyfill.js.map +1 -1
  72. package/dist/node_modules/engine.io-client/build/esm/contrib/has-cors.js.map +1 -1
  73. package/dist/node_modules/engine.io-client/build/esm/contrib/parseuri.js +1 -1
  74. package/dist/node_modules/engine.io-client/build/esm/contrib/parseuri.js.map +1 -1
  75. package/dist/node_modules/engine.io-client/build/esm/contrib/yeast.js +1 -1
  76. package/dist/node_modules/engine.io-client/build/esm/contrib/yeast.js.map +1 -1
  77. package/dist/node_modules/engine.io-client/build/esm/socket.js +1 -1
  78. package/dist/node_modules/engine.io-client/build/esm/socket.js.map +1 -1
  79. package/dist/node_modules/engine.io-client/build/esm/transport.js +1 -1
  80. package/dist/node_modules/engine.io-client/build/esm/transport.js.map +1 -1
  81. package/dist/node_modules/engine.io-client/build/esm/transports/index.js +1 -1
  82. package/dist/node_modules/engine.io-client/build/esm/transports/index.js.map +1 -1
  83. package/dist/node_modules/engine.io-client/build/esm/transports/polling.js +1 -1
  84. package/dist/node_modules/engine.io-client/build/esm/transports/polling.js.map +1 -1
  85. package/dist/node_modules/engine.io-client/build/esm/transports/websocket-constructor.browser.js.map +1 -1
  86. package/dist/node_modules/engine.io-client/build/esm/transports/websocket.js +1 -1
  87. package/dist/node_modules/engine.io-client/build/esm/transports/websocket.js.map +1 -1
  88. package/dist/node_modules/engine.io-client/build/esm/transports/webtransport.js +2 -0
  89. package/dist/node_modules/engine.io-client/build/esm/transports/webtransport.js.map +1 -0
  90. package/dist/node_modules/engine.io-client/build/esm/transports/xmlhttprequest.browser.js +1 -1
  91. package/dist/node_modules/engine.io-client/build/esm/transports/xmlhttprequest.browser.js.map +1 -1
  92. package/dist/node_modules/engine.io-client/build/esm/util.js +1 -1
  93. package/dist/node_modules/engine.io-client/build/esm/util.js.map +1 -1
  94. package/dist/node_modules/engine.io-parser/build/esm/commons.js.map +1 -1
  95. package/dist/node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js +1 -1
  96. package/dist/node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js.map +1 -1
  97. package/dist/node_modules/engine.io-parser/build/esm/decodePacket.browser.js +1 -1
  98. package/dist/node_modules/engine.io-parser/build/esm/decodePacket.browser.js.map +1 -1
  99. package/dist/node_modules/engine.io-parser/build/esm/encodePacket.browser.js +1 -1
  100. package/dist/node_modules/engine.io-parser/build/esm/encodePacket.browser.js.map +1 -1
  101. package/dist/node_modules/engine.io-parser/build/esm/index.js +1 -1
  102. package/dist/node_modules/engine.io-parser/build/esm/index.js.map +1 -1
  103. package/dist/node_modules/framer-motion/dist/framer-motion.js.map +1 -1
  104. package/dist/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js.map +1 -1
  105. package/dist/node_modules/i18next/dist/esm/i18next.js +1 -1
  106. package/dist/node_modules/i18next/dist/esm/i18next.js.map +1 -1
  107. package/dist/node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js +1 -1
  108. package/dist/node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js.map +1 -1
  109. package/dist/node_modules/i18next-http-backend/esm/index.js +1 -1
  110. package/dist/node_modules/i18next-http-backend/esm/index.js.map +1 -1
  111. package/dist/node_modules/i18next-http-backend/esm/request.js.map +1 -1
  112. package/dist/node_modules/js-base64/base64.mjs.js +1 -1
  113. package/dist/node_modules/js-base64/base64.mjs.js.map +1 -1
  114. package/dist/node_modules/moment/moment.js.map +1 -1
  115. package/dist/node_modules/object-assign/index.js +1 -1
  116. package/dist/node_modules/object-assign/index.js.map +1 -1
  117. package/dist/node_modules/prop-types/checkPropTypes.js.map +1 -1
  118. package/dist/node_modules/prop-types/factoryWithTypeCheckers.js +1 -1
  119. package/dist/node_modules/prop-types/factoryWithTypeCheckers.js.map +1 -1
  120. package/dist/node_modules/react-i18next/dist/es/useTranslation.js +1 -1
  121. package/dist/node_modules/react-i18next/dist/es/useTranslation.js.map +1 -1
  122. package/dist/node_modules/react-i18next/dist/es/utils.js +1 -1
  123. package/dist/node_modules/react-i18next/dist/es/utils.js.map +1 -1
  124. package/dist/node_modules/react-i18next/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js.map +1 -1
  125. package/dist/node_modules/react-moment/dist/index.js.map +1 -1
  126. package/dist/node_modules/react-redux/es/hooks/useSelector.js.map +1 -1
  127. package/dist/node_modules/react-redux/es/utils/Subscription.js.map +1 -1
  128. package/dist/node_modules/react-tooltip/dist/react-tooltip.min.cjs.js +1 -1
  129. package/dist/node_modules/react-tooltip/dist/react-tooltip.min.cjs.js.map +1 -1
  130. package/dist/node_modules/redux/es/redux.js +1 -1
  131. package/dist/node_modules/redux/es/redux.js.map +1 -1
  132. package/dist/node_modules/socket.io-client/build/esm/contrib/backo2.js +1 -1
  133. package/dist/node_modules/socket.io-client/build/esm/contrib/backo2.js.map +1 -1
  134. package/dist/node_modules/socket.io-client/build/esm/manager.js +1 -1
  135. package/dist/node_modules/socket.io-client/build/esm/manager.js.map +1 -1
  136. package/dist/node_modules/socket.io-client/build/esm/socket.js +1 -1
  137. package/dist/node_modules/socket.io-client/build/esm/socket.js.map +1 -1
  138. package/dist/node_modules/socket.io-client/build/esm/url.js +1 -1
  139. package/dist/node_modules/socket.io-client/build/esm/url.js.map +1 -1
  140. package/dist/node_modules/socket.io-parser/build/esm/binary.js +1 -1
  141. package/dist/node_modules/socket.io-parser/build/esm/binary.js.map +1 -1
  142. package/dist/node_modules/socket.io-parser/build/esm/index.js +1 -1
  143. package/dist/node_modules/socket.io-parser/build/esm/index.js.map +1 -1
  144. package/dist/node_modules/socket.io-parser/build/esm/is-binary.js +1 -1
  145. package/dist/node_modules/socket.io-parser/build/esm/is-binary.js.map +1 -1
  146. package/dist/node_modules/tslib/tslib.es6.js.map +1 -1
  147. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +1 -1
  148. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +1 -1
  149. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js.map +1 -1
  150. package/dist/node_modules/webm-duration-fix/lib/ebml/tools-ebml.js.map +1 -1
  151. package/dist/node_modules/webm-duration-fix/lib/index.js.map +1 -1
  152. package/dist/node_modules/webrtc-adapter/src/js/chrome/chrome_shim.js +1 -1
  153. package/dist/node_modules/webrtc-adapter/src/js/chrome/chrome_shim.js.map +1 -1
  154. package/dist/node_modules/webrtc-adapter/src/js/chrome/getusermedia.js.map +1 -1
  155. package/dist/node_modules/webrtc-adapter/src/js/common_shim.js +1 -1
  156. package/dist/node_modules/webrtc-adapter/src/js/common_shim.js.map +1 -1
  157. package/dist/node_modules/webrtc-adapter/src/js/firefox/firefox_shim.js.map +1 -1
  158. package/dist/node_modules/webrtc-adapter/src/js/safari/safari_shim.js.map +1 -1
  159. package/dist/node_modules/webrtc-adapter/src/js/utils.js.map +1 -1
  160. package/dist/services/astproxy.d.ts +1 -0
  161. package/dist/services/astproxy.js +1 -1
  162. package/dist/services/astproxy.js.map +1 -1
  163. package/dist/utils/customHooks/useLocalStorage.js.map +1 -1
  164. package/package.json +2 -2
  165. package/dist/_virtual/_rollupPluginBabelHelpers.js +0 -2
  166. package/dist/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
  167. package/dist/node_modules/@socket.io/component-emitter/index.mjs.js.map +0 -1
package/dist/App.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("./components/Events.js"),n=require("./components/Socket.js"),s=require("./components/WebRTC.js"),a=require("./components/Island.js"),o=require("./components/RestAPI.js"),i=require("./utils/customHooks/useEventListener.js"),r=require("./utils/genericFunctions/eventDispatch.js"),d=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/framer-motion/dist/framer-motion.js");var c=require("./node_modules/js-base64/base64.mjs.js"),l=require("./workers/wake_up.js"),p=require("./lib/i18n.js");require("./node_modules/react-tooltip/dist/react-tooltip.min.css.js");var h=require("./lib/webrtc/messages.js"),v=require("./lib/darkTheme.js"),f=require("./node_modules/react-redux/es/components/Provider.js");function m(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("./node_modules/react-redux/node_modules/react-is/index.js"),require("./node_modules/react-redux/es/components/Context.js");var j=m(e),E=function(m){var E=m.dataConfig,g=m.i18nLoadPath,I=void 0===g?void 0:g,q=m.showAlways,D=void 0!==q&&q,k=m.uaType,w=c.Base64.atob(E||"").split(":"),b=w[0],y=w[1],S=w[2],x=w[3],L=w[4],_=w[5],T=w[6],C=e.useState(!1),O=C[0],P=C[1],N=e.useState(!1),A=N[0],R=N[1],V=e.useState(!1),F=V[0],H=V[1];e.useEffect((function(){var e=new Worker(l.default,{type:"module"});return e.onmessage=function(e){"wakeup"===e.data&&P(!0)},function(){e.terminate()}}),[]),e.useEffect((function(){F&&A&&(P(!1),R(!1),H(!1))}),[F,A]),i.useEventListener("phone-island-expand",(function(){u.store.dispatch.island.toggleIsOpen(!0),r.eventDispatch("phone-island-expanded",{})})),i.useEventListener("phone-island-compress",(function(){u.store.dispatch.island.toggleIsOpen(!1),r.eventDispatch("phone-island-compressed",{})})),i.useEventListener("phone-island-call-keypad-close",(function(){u.store.dispatch.island.setIslandView("call"),r.eventDispatch("phone-island-call-keypad-closed",{})})),i.useEventListener("phone-island-call-transfer-close",(function(){u.store.dispatch.island.setIslandView("call"),r.eventDispatch("phone-island-call-transfer-closed",{})})),i.useEventListener("phone-island-recording-close",(function(){u.store.dispatch.island.setIslandView(null),r.eventDispatch("phone-island-recording-closed",{})})),i.useEventListener("phone-island-audio-player-close",(function(){u.store.dispatch.island.setIslandView(null),r.eventDispatch("phone-island-audio-player-closed",{})})),i.useEventListener("phone-island-detach",(function(e){h.detach(),u.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),r.eventDispatch("phone-island-detached",{})})),i.useEventListener("phone-island-audio-input-change",(function(e){d.setJSONItem("phone-island-audio-input-device",{deviceId:e.deviceId}),r.eventDispatch("phone-island-audio-input-changed",{})})),i.useEventListener("phone-island-audio-output-change",(function(e){var t=u.store.getState().player.remoteAudio;null==t||t.current.setSinkId(e.deviceId).then((function(){console.info("Default audio output device change with success!"),d.setJSONItem("phone-island-audio-output-device",{deviceId:e.deviceId}),r.eventDispatch("phone-island-audio-output-changed",{})})).catch((function(e){console.error("Default audio output device change error:",e)}))}));var J=e.useState(!0),W=J[0],U=J[1],B=e.useState(!0),M=B[0],z=B[1];e.useEffect((function(){W&&(p.loadI18n(I),U(!1))}),[W]);var G=u.store.getState().player.remoteAudio;return e.useEffect((function(){var e;if(M&&G){var t=null===(e=d.getJSONItem("phone-island-audio-output-device"))||void 0===e?void 0:e.deviceId;r.eventDispatch("phone-island-audio-output-change",{deviceId:t}),z(!1)}}),[M,G]),e.useEffect((function(){v.checkDarkTheme()}),[]),i.useEventListener("phone-island-theme-change",(function(e){v.setTheme(null==e?void 0:e.selectedTheme)})),i.useEventListener("phone-island-default-device-change",(function(e){u.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),r.eventDispatch("phone-island-default-device-changed",{})})),j.default.createElement(j.default.Fragment,null,j.default.createElement(f.default,{store:u.store},j.default.createElement(s.WebRTC,{hostName:b,sipExten:x,sipSecret:L,sipHost:_,sipPort:T,reload:O,reloadedCallback:function(){return R(!0)},uaType:k},j.default.createElement(o.RestAPI,{hostName:b,username:y,authToken:S},j.default.createElement(n.Socket,{hostName:b,username:y,authToken:S,reload:O,reloadedCallback:function(){return H(!0)},uaType:k},j.default.createElement(t.Events,{sipHost:_},j.default.createElement(a.Island,{showAlways:D})))))))};E.displayName="PhoneIsland",exports.PhoneIsland=E;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("./components/Events.js"),n=require("./components/Socket.js"),s=require("./components/WebRTC.js"),a=require("./components/Island.js"),o=require("./components/RestAPI.js"),i=require("./utils/customHooks/useEventListener.js"),r=require("./utils/genericFunctions/eventDispatch.js"),d=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/framer-motion/dist/framer-motion.js");var c=require("./node_modules/js-base64/base64.mjs.js"),l=require("./workers/wake_up.js"),p=require("./lib/i18n.js");require("./node_modules/react-tooltip/dist/react-tooltip.min.css.js");var h=require("./lib/webrtc/messages.js"),f=require("./lib/darkTheme.js"),v=require("./node_modules/react-redux/es/components/Provider.js");function m(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("./node_modules/react-redux/node_modules/react-is/index.js"),require("./node_modules/react-redux/es/components/Context.js");var j=m(e),E=function(m){var E=m.dataConfig,g=m.i18nLoadPath,I=void 0===g?void 0:g,q=m.showAlways,D=void 0!==q&&q,k=m.uaType,y=c.Base64.atob(E||"").split(":"),w=y[0],b=y[1],L=y[2],S=y[3],x=y[4],_=y[5],T=y[6],C=e.useState(!1),O=C[0],P=C[1],N=e.useState(!1),A=N[0],R=N[1],V=e.useState(!1),F=V[0],H=V[1];e.useEffect((function(){var e=new Worker(l.default,{type:"module"});return e.onmessage=function(e){"wakeup"===e.data&&P(!0)},function(){e.terminate()}}),[]),e.useEffect((function(){F&&A&&(P(!1),R(!1),H(!1))}),[F,A]),i.useEventListener("phone-island-expand",(function(){u.store.dispatch.island.toggleIsOpen(!0),r.eventDispatch("phone-island-expanded",{})})),i.useEventListener("phone-island-compress",(function(){u.store.dispatch.island.toggleIsOpen(!1),r.eventDispatch("phone-island-compressed",{})})),i.useEventListener("phone-island-call-keypad-close",(function(){u.store.dispatch.island.setIslandView("call"),r.eventDispatch("phone-island-call-keypad-closed",{})})),i.useEventListener("phone-island-call-transfer-close",(function(){u.store.dispatch.island.setIslandView("call"),r.eventDispatch("phone-island-call-transfer-closed",{})})),i.useEventListener("phone-island-recording-close",(function(){u.store.dispatch.island.setIslandView(null),r.eventDispatch("phone-island-recording-closed",{})})),i.useEventListener("phone-island-audio-player-close",(function(){u.store.dispatch.island.setIslandView(null),r.eventDispatch("phone-island-audio-player-closed",{})})),i.useEventListener("phone-island-detach",(function(e){h.detach(),u.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),r.eventDispatch("phone-island-detached",{})})),i.useEventListener("phone-island-audio-input-change",(function(e){d.setJSONItem("phone-island-audio-input-device",{deviceId:e.deviceId}),r.eventDispatch("phone-island-audio-input-changed",{})})),i.useEventListener("phone-island-audio-output-change",(function(e){var t=u.store.getState().player.remoteAudio;null==t||t.current.setSinkId(e.deviceId).then((function(){console.info("Default audio output device change with success!"),d.setJSONItem("phone-island-audio-output-device",{deviceId:e.deviceId}),r.eventDispatch("phone-island-audio-output-changed",{})})).catch((function(e){console.error("Default audio output device change error:",e)}))}));var J=e.useState(!0),W=J[0],U=J[1],B=e.useState(!0),M=B[0],z=B[1];e.useEffect((function(){W&&(p.loadI18n(I),U(!1))}),[W]);var G=u.store.getState().player.remoteAudio;return e.useEffect((function(){var e;if(M&&G){var t=null===(e=d.getJSONItem("phone-island-audio-output-device"))||void 0===e?void 0:e.deviceId;r.eventDispatch("phone-island-audio-output-change",{deviceId:t}),z(!1)}}),[M,G]),e.useEffect((function(){f.checkDarkTheme()}),[]),i.useEventListener("phone-island-theme-change",(function(e){f.setTheme(null==e?void 0:e.selectedTheme)})),i.useEventListener("phone-island-default-device-change",(function(e){u.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),r.eventDispatch("phone-island-default-device-changed",{})})),i.useEventListener("phone-island-call-transfer-successfully",(function(){console.log("Call transferred successfully")})),i.useEventListener("phone-island-call-transfer-failed",(function(){console.log("Transfer failed")})),j.default.createElement(j.default.Fragment,null,j.default.createElement(v.default,{store:u.store},j.default.createElement(s.WebRTC,{hostName:w,sipExten:S,sipSecret:x,sipHost:_,sipPort:T,reload:O,reloadedCallback:function(){return R(!0)},uaType:k},j.default.createElement(o.RestAPI,{hostName:w,username:b,authToken:L},j.default.createElement(n.Socket,{hostName:w,username:b,authToken:L,reload:O,reloadedCallback:function(){return H(!0)},uaType:k},j.default.createElement(t.Events,{sipHost:_},j.default.createElement(a.Island,{showAlways:D})))))))};E.displayName="PhoneIsland",exports.PhoneIsland=E;
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 loadI18n from './lib/i18n'\nimport i18next, { i18n } from 'i18next'\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'\n\ninterface PhoneIslandProps {\n dataConfig: string\n i18nLoadPath?: string\n showAlways?: boolean\n uaType: string\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport const PhoneIsland: FC<PhoneIslandProps> = ({\n dataConfig,\n i18nLoadPath = undefined,\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 store.dispatch.currentUser.updateCurrentDefaultDevice(data?.deviceInformationObject)\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 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 const [firstRenderI18n, setFirstRenderI18n] = useState(true)\n const [firstAudioOutputInit, setFirstAudioOutputInit] = useState(true)\n\n //initialize i18n\n useEffect(() => {\n if (firstRenderI18n) {\n loadI18n(i18nLoadPath)\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 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","i18nLoadPath","undefined","_c","showAlways","uaType","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","SIP_HOST","SIP_PORT","_d","useState","reload","setReload","_e","reloadedWebRTC","setReloadedWebRTC","_f","reloadedSocket","setReloadedSocket","useEffect","worker","Worker","wakeUpWorker","type","onmessage","event","data","terminate","useEventListener","store","dispatch","island","toggleIsOpen","eventDispatch","setIslandView","detach","currentUser","updateCurrentDefaultDevice","deviceInformationObject","setJSONItem","deviceId","remoteAudioElement","getState","player","remoteAudio","current","setSinkId","then","console","info","catch","err","error","_g","firstRenderI18n","setFirstRenderI18n","_h","firstAudioOutputInit","setFirstAudioOutputInit","loadI18n","defaultAudioOutputDevice","getJSONItem","checkDarkTheme","theme","setTheme","selectedTheme","React","createElement","Fragment","Provider","WebRTC","hostName","sipExten","sipSecret","sipHost","sipPort","reloadedCallback","RestAPI","username","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 loadI18n from './lib/i18n'\nimport i18next, { i18n } from 'i18next'\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'\n\ninterface PhoneIslandProps {\n dataConfig: string\n i18nLoadPath?: string\n showAlways?: boolean\n uaType: string\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport const PhoneIsland: FC<PhoneIslandProps> = ({\n dataConfig,\n i18nLoadPath = undefined,\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 store.dispatch.currentUser.updateCurrentDefaultDevice(data?.deviceInformationObject)\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 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 const [firstRenderI18n, setFirstRenderI18n] = useState(true)\n const [firstAudioOutputInit, setFirstAudioOutputInit] = useState(true)\n\n //initialize i18n\n useEffect(() => {\n if (firstRenderI18n) {\n loadI18n(i18nLoadPath)\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-call-transfer-successfully', () => {\n console.log('Call transferred successfully')\n })\n\n useEventListener('phone-island-call-transfer-failed', () => {\n console.log('Transfer failed')\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","i18nLoadPath","undefined","_c","showAlways","uaType","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","SIP_HOST","SIP_PORT","_d","useState","reload","setReload","_e","reloadedWebRTC","setReloadedWebRTC","_f","reloadedSocket","setReloadedSocket","useEffect","worker","Worker","wakeUpWorker","type","onmessage","event","data","terminate","useEventListener","store","dispatch","island","toggleIsOpen","eventDispatch","setIslandView","detach","currentUser","updateCurrentDefaultDevice","deviceInformationObject","setJSONItem","deviceId","remoteAudioElement","getState","player","remoteAudio","current","setSinkId","then","console","info","catch","err","error","_g","firstRenderI18n","setFirstRenderI18n","_h","firstAudioOutputInit","setFirstAudioOutputInit","loadI18n","defaultAudioOutputDevice","getJSONItem","checkDarkTheme","theme","setTheme","selectedTheme","log","React","createElement","Fragment","Provider","WebRTC","hostName","sipExten","sipSecret","sipHost","sipPort","reloadedCallback","RestAPI","username","authToken","Socket","Events","Island","displayName"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../styles/Island.styles.js");require("../../node_modules/framer-motion/dist/framer-motion.js"),require("../../node_modules/react-redux/es/index.js"),require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/defineProperty.js"),require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/typeof.js"),require("../../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../../node_modules/react-i18next/dist/es/context.js");var r=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var i=require("../../_virtual/framer-motion.js"),a=require("../../node_modules/react-redux/es/hooks/useSelector.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=n(e);exports.default=function(){var n=e.useState(!1),o=n[0],s=n[1],u=e.useRef(null),d=e.useRef(null),p=i.framerMotion.exports.motion(t.StyledName),c=a.useSelector((function(e){return e.currentCall})).displayName,m=a.useSelector((function(e){return e.listen})),f=r.useTranslation().t;return e.useLayoutEffect((function(){u.current&&d.current&&d.current.clientWidth-u.current.clientWidth>5&&s(!0)})),l.default.createElement(l.default.Fragment,null,(null==m?void 0:m.isIntrude)?l.default.createElement(p,{ref:u,className:"pi-whitespace-nowrap pi-relative pi-overflow-hidden"},l.default.createElement("div",{className:"pi-w-fit pi-relative pi-inline-block pi-text-gray-900 dark:pi-text-gray-200 ".concat(o&&"animated-text"),ref:d},""!==(null==m?void 0:m.isIntrudeExtension)?"".concat(f("Common.Intrude"))+"-"+(null==m?void 0:m.isIntrudeExtension):"-"),l.default.createElement("div",{className:"pi-w-6 pi-absolute pi-right-0 pi-top-0 pi-h-full pi-bg-gradient-to-r pi-from-transparent dark:pi-to-gray-950 pi-to-gray-50"})):(null==m?void 0:m.isListen)?l.default.createElement(p,{ref:u,className:"pi-whitespace-nowrap pi-relative pi-overflow-hidden"},l.default.createElement("div",{className:"pi-w-fit pi-relative pi-inline-block pi-text-gray-900 dark:pi-text-gray-200 ".concat(o&&"animated-text"),ref:d},""!==(null==m?void 0:m.isListenExtension)?"".concat(f("Common.Listen"))+"-"+(null==m?void 0:m.isListenExtension):"-"),l.default.createElement("div",{className:"pi-w-6 pi-absolute pi-right-0 pi-top-0 pi-h-full pi-bg-gradient-to-r pi-from-transparent dark:pi-to-gray-950 pi-to-gray-50"})):l.default.createElement(p,{ref:u,className:"pi-whitespace-nowrap pi-relative pi-overflow-hidden "},l.default.createElement("div",{className:"pi-w-fit pi-relative pi-inline-block pi-text-gray-900 dark:pi-text-gray-200 ".concat(o&&"animated-text"),ref:d},c&&"<unknown>"===c?"PBX":c||(f("Call.Outgoing call")||"-")),l.default.createElement("div",{className:"pi-w-6 pi-absolute pi-right-0 pi-top-0 pi-h-full pi-bg-gradient-to-r pi-from-transparent dark:pi-to-gray-950 pi-to-gray-50"}," ")))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../styles/Island.styles.js");require("../../node_modules/framer-motion/dist/framer-motion.js"),require("../../node_modules/react-redux/es/index.js"),require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/defineProperty.js"),require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../../node_modules/react-i18next/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 i=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var r=require("../../_virtual/framer-motion.js"),n=require("../../node_modules/react-redux/es/hooks/useSelector.js");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=a(e);exports.default=function(){var a=e.useState(!1),l=a[0],s=a[1],u=e.useRef(null),d=e.useRef(null),p=r.framerMotion.exports.motion(t.StyledName),c=n.useSelector((function(e){return e.currentCall})).displayName,m=n.useSelector((function(e){return e.listen})),f=i.useTranslation().t;return e.useLayoutEffect((function(){u.current&&d.current&&d.current.clientWidth-u.current.clientWidth>5&&s(!0)})),o.default.createElement(o.default.Fragment,null,(null==m?void 0:m.isIntrude)?o.default.createElement(p,{ref:u,className:"pi-whitespace-nowrap pi-relative pi-overflow-hidden"},o.default.createElement("div",{className:"pi-w-fit pi-relative pi-inline-block pi-text-gray-900 dark:pi-text-gray-200 ".concat(l&&"animated-text"),ref:d},""!==(null==m?void 0:m.isIntrudeExtension)&&void 0!==(null==m?void 0:m.isIntrudeExtension)?"".concat(f("Common.Intrude"))+"-"+(null==m?void 0:m.isIntrudeExtension):"".concat(f("Common.Intrude"))),o.default.createElement("div",{className:"pi-w-6 pi-absolute pi-right-0 pi-top-0 pi-h-full pi-bg-gradient-to-r pi-from-transparent dark:pi-to-gray-950 pi-to-gray-50"})):(null==m?void 0:m.isListen)?o.default.createElement(p,{ref:u,className:"pi-whitespace-nowrap pi-relative pi-overflow-hidden"},o.default.createElement("div",{className:"pi-w-fit pi-relative pi-inline-block pi-text-gray-900 dark:pi-text-gray-200 ".concat(l&&"animated-text"),ref:d},""!==(null==m?void 0:m.isListenExtension)&&void 0!==(null==m?void 0:m.isListenExtension)?"".concat(f("Common.Listen"))+"-"+(null==m?void 0:m.isListenExtension):"".concat(f("Common.Listen"))),o.default.createElement("div",{className:"pi-w-6 pi-absolute pi-right-0 pi-top-0 pi-h-full pi-bg-gradient-to-r pi-from-transparent dark:pi-to-gray-950 pi-to-gray-50"})):o.default.createElement(p,{ref:u,className:"pi-whitespace-nowrap pi-relative pi-overflow-hidden "},o.default.createElement("div",{className:"pi-w-fit pi-relative pi-inline-block pi-text-gray-900 dark:pi-text-gray-200 ".concat(l&&"animated-text"),ref:d},c&&"<unknown>"===c?"PBX":c||(f("Call.Outgoing call")||"-")),o.default.createElement("div",{className:"pi-w-6 pi-absolute pi-right-0 pi-top-0 pi-h-full pi-bg-gradient-to-r pi-from-transparent dark:pi-to-gray-950 pi-to-gray-50"}," ")))};
2
2
  //# sourceMappingURL=DisplayName.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DisplayName.js","sources":["../../../src/components/CallView/DisplayName.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { useState, useRef, useLayoutEffect, type FC } from 'react'\nimport { StyledName } from '../../styles/Island.styles'\nimport { motion } from 'framer-motion/dist/framer-motion'\nimport { RootState } from '../../store'\nimport { useSelector } from 'react-redux'\nimport { useTranslation } from 'react-i18next'\n\nconst DisplayName: FC<DisplayNameProps> = () => {\n const [animateText, setAnimateText] = useState<boolean>(false)\n const nameContainer = useRef<null | HTMLDivElement>(null)\n const nameText = useRef<null | HTMLDivElement>(null)\n const NameMotion = motion(StyledName)\n\n // Get the displayName of the currentCall store\n const { displayName } = useSelector((state: RootState) => state.currentCall)\n const intrudeListenStatus = useSelector((state: RootState) => state.listen)\n\n const { t } = useTranslation()\n\n useLayoutEffect(() => {\n if (\n nameContainer.current &&\n nameText.current &&\n nameText.current.clientWidth - nameContainer.current.clientWidth > 5\n ) {\n setAnimateText(true)\n }\n })\n\n return (\n <>\n {intrudeListenStatus?.isIntrude ? (\n <NameMotion\n ref={nameContainer}\n className='pi-whitespace-nowrap pi-relative pi-overflow-hidden'\n >\n <div\n className={`pi-w-fit pi-relative pi-inline-block pi-text-gray-900 dark:pi-text-gray-200 ${\n animateText && 'animated-text'\n }`}\n ref={nameText}\n >\n {intrudeListenStatus?.isIntrudeExtension !== ''\n ? `${t('Common.Intrude')}` + '-' + intrudeListenStatus?.isIntrudeExtension\n : '-'}\n </div>\n <div className='pi-w-6 pi-absolute pi-right-0 pi-top-0 pi-h-full pi-bg-gradient-to-r pi-from-transparent dark:pi-to-gray-950 pi-to-gray-50'></div>\n </NameMotion>\n ) : intrudeListenStatus?.isListen ? (\n <NameMotion\n ref={nameContainer}\n className='pi-whitespace-nowrap pi-relative pi-overflow-hidden'\n >\n <div\n className={`pi-w-fit pi-relative pi-inline-block pi-text-gray-900 dark:pi-text-gray-200 ${\n animateText && 'animated-text'\n }`}\n ref={nameText}\n >\n {intrudeListenStatus?.isListenExtension !== ''\n ? `${t('Common.Listen')}` + '-' + intrudeListenStatus?.isListenExtension\n : '-'}\n </div>\n <div className='pi-w-6 pi-absolute pi-right-0 pi-top-0 pi-h-full pi-bg-gradient-to-r pi-from-transparent dark:pi-to-gray-950 pi-to-gray-50'></div>\n </NameMotion>\n ) : (\n <NameMotion\n ref={nameContainer}\n className='pi-whitespace-nowrap pi-relative pi-overflow-hidden '\n >\n <div\n className={`pi-w-fit pi-relative pi-inline-block pi-text-gray-900 dark:pi-text-gray-200 ${\n animateText && 'animated-text'\n }`}\n ref={nameText}\n >\n {displayName && displayName === '<unknown>'\n ? 'PBX'\n : displayName\n ? displayName\n : t('Call.Outgoing call') || '-'}\n </div>\n <div className='pi-w-6 pi-absolute pi-right-0 pi-top-0 pi-h-full pi-bg-gradient-to-r pi-from-transparent dark:pi-to-gray-950 pi-to-gray-50'>\n {' '}\n </div>\n </NameMotion>\n )}\n </>\n )\n}\n\nexport default DisplayName\n\nexport interface DisplayNameProps {}\n"],"names":["_a","useState","animateText","setAnimateText","nameContainer","useRef","nameText","NameMotion","motion","StyledName","displayName","useSelector","state","currentCall","intrudeListenStatus","listen","t","useTranslation","useLayoutEffect","current","clientWidth","React","isIntrude","createElement","ref","className","concat","isIntrudeExtension","isListen","isListenExtension"],"mappings":"yjCAU0C,WAClC,IAAAA,EAAgCC,EAAAA,UAAkB,GAAjDC,EAAWF,EAAA,GAAEG,EAAcH,EAAA,GAC5BI,EAAgBC,SAA8B,MAC9CC,EAAWD,SAA8B,MACzCE,EAAaC,8BAAOC,EAAAA,YAGlBC,EAAgBC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,2BAC1DC,EAAsBH,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMG,MAAN,IAEtDC,EAAMC,qBAYd,OAVAC,EAAAA,iBAAgB,WAEZd,EAAce,SACdb,EAASa,SACTb,EAASa,QAAQC,YAAchB,EAAce,QAAQC,YAAc,GAEnEjB,GAAe,EAEnB,IAGEkB,iDACGP,aAAmB,EAAnBA,EAAqBQ,WACpBD,EAAAA,QAACE,cAAAhB,EACC,CAAAiB,IAAKpB,EACLqB,UAAU,uDAEVJ,UACEE,cAAA,MAAA,CAAAE,UAAW,+EACTC,OAAAxB,GAAe,iBAEjBsB,IAAKlB,GAEwC,MAA5CQ,eAAAA,EAAqBa,oBAClB,GAAGD,OAAAV,EAAE,mBAAsB,KAAMF,eAAAA,EAAqBa,oBACtD,KAENN,EAAAA,QAAAE,cAAA,MAAA,CAAKE,UAAU,iIAEfX,aAAA,EAAAA,EAAqBc,UACvBP,UAACE,cAAAhB,EACC,CAAAiB,IAAKpB,EACLqB,UAAU,uDAEVJ,UACEE,cAAA,MAAA,CAAAE,UAAW,+EACTC,OAAAxB,GAAe,iBAEjBsB,IAAKlB,GAEuC,MAA3CQ,eAAAA,EAAqBe,mBAClB,GAAGH,OAAAV,EAAE,kBAAqB,KAAMF,eAAAA,EAAqBe,mBACrD,KAENR,EAAA,QAAAE,cAAA,MAAA,CAAKE,UAAU,gIAGjBJ,EAAC,QAAAE,cAAAhB,GACCiB,IAAKpB,EACLqB,UAAU,wDAEVJ,EAAAA,QAAAE,cAAA,MAAA,CACEE,UAAW,+EAAAC,OACTxB,GAAe,iBAEjBsB,IAAKlB,GAEJI,GAA+B,cAAhBA,EACZ,MACAA,IAEAM,EAAE,uBAAyB,MAEjCK,UAAKE,cAAA,MAAA,CAAAE,UAAU,8HACZ,MAMb"}
1
+ {"version":3,"file":"DisplayName.js","sources":["../../../src/components/CallView/DisplayName.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { useState, useRef, useLayoutEffect, type FC } from 'react'\nimport { StyledName } from '../../styles/Island.styles'\nimport { motion } from 'framer-motion/dist/framer-motion'\nimport { RootState } from '../../store'\nimport { useSelector } from 'react-redux'\nimport { useTranslation } from 'react-i18next'\n\nconst DisplayName: FC<DisplayNameProps> = () => {\n const [animateText, setAnimateText] = useState<boolean>(false)\n const nameContainer = useRef<null | HTMLDivElement>(null)\n const nameText = useRef<null | HTMLDivElement>(null)\n const NameMotion = motion(StyledName)\n\n // Get the displayName of the currentCall store\n const { displayName } = useSelector((state: RootState) => state.currentCall)\n const intrudeListenStatus = useSelector((state: RootState) => state.listen)\n\n const { t } = useTranslation()\n\n useLayoutEffect(() => {\n if (\n nameContainer.current &&\n nameText.current &&\n nameText.current.clientWidth - nameContainer.current.clientWidth > 5\n ) {\n setAnimateText(true)\n }\n })\n\n return (\n <>\n {intrudeListenStatus?.isIntrude ? (\n <NameMotion\n ref={nameContainer}\n className='pi-whitespace-nowrap pi-relative pi-overflow-hidden'\n >\n <div\n className={`pi-w-fit pi-relative pi-inline-block pi-text-gray-900 dark:pi-text-gray-200 ${\n animateText && 'animated-text'\n }`}\n ref={nameText}\n >\n {intrudeListenStatus?.isIntrudeExtension !== '' &&\n intrudeListenStatus?.isIntrudeExtension !== undefined\n ? `${t('Common.Intrude')}` + '-' + intrudeListenStatus?.isIntrudeExtension\n : `${t('Common.Intrude')}`}\n </div>\n <div className='pi-w-6 pi-absolute pi-right-0 pi-top-0 pi-h-full pi-bg-gradient-to-r pi-from-transparent dark:pi-to-gray-950 pi-to-gray-50'></div>\n </NameMotion>\n ) : intrudeListenStatus?.isListen ? (\n <NameMotion\n ref={nameContainer}\n className='pi-whitespace-nowrap pi-relative pi-overflow-hidden'\n >\n <div\n className={`pi-w-fit pi-relative pi-inline-block pi-text-gray-900 dark:pi-text-gray-200 ${\n animateText && 'animated-text'\n }`}\n ref={nameText}\n >\n {intrudeListenStatus?.isListenExtension !== '' &&\n intrudeListenStatus?.isListenExtension !== undefined\n ? `${t('Common.Listen')}` + '-' + intrudeListenStatus?.isListenExtension\n : `${t('Common.Listen')}`}\n </div>\n <div className='pi-w-6 pi-absolute pi-right-0 pi-top-0 pi-h-full pi-bg-gradient-to-r pi-from-transparent dark:pi-to-gray-950 pi-to-gray-50'></div>\n </NameMotion>\n ) : (\n <NameMotion\n ref={nameContainer}\n className='pi-whitespace-nowrap pi-relative pi-overflow-hidden '\n >\n <div\n className={`pi-w-fit pi-relative pi-inline-block pi-text-gray-900 dark:pi-text-gray-200 ${\n animateText && 'animated-text'\n }`}\n ref={nameText}\n >\n {displayName && displayName === '<unknown>'\n ? 'PBX'\n : displayName\n ? displayName\n : t('Call.Outgoing call') || '-'}\n </div>\n <div className='pi-w-6 pi-absolute pi-right-0 pi-top-0 pi-h-full pi-bg-gradient-to-r pi-from-transparent dark:pi-to-gray-950 pi-to-gray-50'>\n {' '}\n </div>\n </NameMotion>\n )}\n </>\n )\n}\n\nexport default DisplayName\n\nexport interface DisplayNameProps {}\n"],"names":["_a","useState","animateText","setAnimateText","nameContainer","useRef","nameText","NameMotion","motion","StyledName","displayName","useSelector","state","currentCall","intrudeListenStatus","listen","t","useTranslation","useLayoutEffect","current","clientWidth","React","isIntrude","createElement","ref","className","concat","isIntrudeExtension","undefined","isListen","isListenExtension"],"mappings":"yjCAU0C,WAClC,IAAAA,EAAgCC,EAAAA,UAAkB,GAAjDC,EAAWF,EAAA,GAAEG,EAAcH,EAAA,GAC5BI,EAAgBC,SAA8B,MAC9CC,EAAWD,SAA8B,MACzCE,EAAaC,8BAAOC,EAAAA,YAGlBC,EAAgBC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,2BAC1DC,EAAsBH,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMG,MAAN,IAEtDC,EAAMC,qBAYd,OAVAC,EAAAA,iBAAgB,WAEZd,EAAce,SACdb,EAASa,SACTb,EAASa,QAAQC,YAAchB,EAAce,QAAQC,YAAc,GAEnEjB,GAAe,EAEnB,IAGEkB,iDACGP,aAAmB,EAAnBA,EAAqBQ,WACpBD,EAAAA,QAACE,cAAAhB,EACC,CAAAiB,IAAKpB,EACLqB,UAAU,uDAEVJ,UACEE,cAAA,MAAA,CAAAE,UAAW,+EACTC,OAAAxB,GAAe,iBAEjBsB,IAAKlB,GAEwC,MAA5CQ,eAAAA,EAAqBa,0BACsBC,KAA5Cd,aAAmB,EAAnBA,EAAqBa,oBACjB,GAAGD,OAAAV,EAAE,mBAAsB,KAAMF,eAAAA,EAAqBa,oBACtD,GAAGD,OAAAV,EAAE,oBAEXK,EAAAA,QAAAE,cAAA,MAAA,CAAKE,UAAU,iIAEfX,aAAA,EAAAA,EAAqBe,UACvBR,UAACE,cAAAhB,EACC,CAAAiB,IAAKpB,EACLqB,UAAU,uDAEVJ,UACEE,cAAA,MAAA,CAAAE,UAAW,+EACTC,OAAAxB,GAAe,iBAEjBsB,IAAKlB,GAEuC,MAA3CQ,eAAAA,EAAqBgB,yBACqBF,KAA3Cd,aAAmB,EAAnBA,EAAqBgB,mBACjB,GAAGJ,OAAAV,EAAE,kBAAqB,KAAMF,eAAAA,EAAqBgB,mBACrD,GAAGJ,OAAAV,EAAE,mBAEXK,EAAA,QAAAE,cAAA,MAAA,CAAKE,UAAU,gIAGjBJ,EAAC,QAAAE,cAAAhB,GACCiB,IAAKpB,EACLqB,UAAU,wDAEVJ,EAAAA,QAAAE,cAAA,MAAA,CACEE,UAAW,+EAAAC,OACTxB,GAAe,iBAEjBsB,IAAKlB,GAEJI,GAA+B,cAAhBA,EACZ,MACAA,IAEAM,EAAE,uBAAyB,MAEjCK,UAAKE,cAAA,MAAA,CAAAE,UAAU,8HACZ,MAMb"}
@@ -1 +1 @@
1
- {"version":3,"file":"Events.js","sources":["../../src/components/Events.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC } from 'react'\nimport { CallEvents, PlayerEvents, RecorderEvents } from '../events'\n\ninterface EventsProps {\n children: ReactNode\n sipHost: string\n}\n\nexport const Events: FC<EventsProps> = ({ sipHost, children }) => {\n return (\n <>\n {<PlayerEvents />}\n {<RecorderEvents />}\n {<CallEvents sipHost={sipHost} />}\n {children}\n </>\n )\n}\n"],"names":["_a","sipHost","children","React","createElement","Fragment","PlayerEvents","RecorderEvents","CallEvents"],"mappings":"kTAWuC,SAACA,OAAEC,EAAOD,EAAAC,QAAEC,EAAQF,EAAAE,SACzD,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACGF,UAAAC,cAACE,EAAYA,aAAG,MAChBH,UAAAC,cAACG,EAAcA,eAAG,MAClBJ,EAAAA,QAAAC,cAACI,EAAAA,WAAU,CAACP,QAASA,IACrBC,EAGP"}
1
+ {"version":3,"file":"Events.js","sources":["../../src/components/Events.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC } from 'react'\nimport { CallEvents, PlayerEvents, RecorderEvents } from '../events'\n\ninterface EventsProps {\n children: ReactNode\n sipHost: string\n}\n\nexport const Events: FC<EventsProps> = ({ sipHost, children }) => {\n return (\n <>\n {<PlayerEvents />}\n {<RecorderEvents />}\n {<CallEvents sipHost={sipHost} />}\n {children}\n </>\n )\n}\n"],"names":["_a","sipHost","children","React","createElement","Fragment","PlayerEvents","RecorderEvents","CallEvents"],"mappings":"kTAWuC,SAACA,OAAEC,EAAOD,EAAAC,QAAEC,EAAQF,EAAAE,SACzD,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACGF,UAAAC,cAACE,EAAYA,aAAG,MAChBH,UAAAC,cAACG,EAAcA,eAAG,MAClBJ,EAAAA,QAAAC,cAACI,EAAAA,WAAU,CAACP,QAASA,IACrBC,EAGP"}
@@ -8,4 +8,5 @@ interface HangupProps {
8
8
  clickCallback?: () => void;
9
9
  isDestination?: boolean;
10
10
  description?: any;
11
+ isPhysicalRecording?: boolean;
11
12
  }
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/framer-motion/dist/framer-motion.js");var t=require("./Button.js"),r=require("../node_modules/@fortawesome/react-fontawesome/index.es.js"),i=require("../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),o=require("../lib/phone/call.js");require("../node_modules/react-redux/es/index.js");var s=require("../node_modules/react-tooltip/dist/react-tooltip.min.cjs.js");require("../node_modules/react-i18next/node_modules/@babel/runtime/helpers/defineProperty.js"),require("../node_modules/react-i18next/node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../node_modules/react-i18next/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 a=require("../node_modules/react-i18next/dist/es/useTranslation.js");require("../node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var n=require("./SwitchInputView/DropdownContent.js"),l=require("../node_modules/react-redux/es/hooks/useSelector.js"),u=require("../node_modules/react-redux/es/hooks/useDispatch.js"),d=require("../_virtual/framer-motion.js");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var p=c(e);exports.default=function(e){e.clickCallback,e.isDestination;var c=e.description,m=l.useSelector((function(e){return e.currentCall})),f=m.transferring,j=m.incoming,x=m.accepted,_=u.useDispatch(),h=l.useSelector((function(e){return e.island})).isOpen;var q=a.useTranslation().t;return p.default.createElement(p.default.Fragment,null,p.default.createElement("div",{className:" ".concat(f?"pi-grid pi-w-full pi-space-x-2 pi-justify-start":"pi-flex pi-justify-center")},p.default.createElement(d.framerMotion.exports.motion.div,{className:"".concat(f&&c?"pi-grid pi-grid-cols-[12rem,1rem] pi-ml-4 pi-justify-start":"pi-flex pi-w-12"," ")},p.default.createElement(t.Button,{onClick:function(){return j?o.hangupAllExtensions():o.hangupCurrentCall(),void(f&&setTimeout((function(){_.alerts.setAlert("call_transfered"),setTimeout((function(){_.alerts.removeAlert("call_transfered")}),2e3)}),300))},variant:"red",className:"pi-gap-4 pi-font-medium pi-text-base pi-transition pi-min-w-12 pi-w-full","data-tooltip-id":c&&f?"tooltip-top-transfer":"tooltip-left-transfer","data-tooltip-content":c&&f?c:"".concat(q("Tooltip.Hangup"))},p.default.createElement(r.FontAwesomeIcon,{className:"pi-rotate-135 pi-h-6 pi-w-6",icon:i.faPhone}),f&&c&&p.default.createElement(d.framerMotion.exports.motion.div,{style:{height:"17px"},className:"pi-whitespace-nowrap pi-overflow-hidden"},c)),h&&x&&p.default.createElement("div",{className:"".concat(f&&c?"pi-grid pi-grid-cols-1 pi-ml-8":"pi-flex pi-items-center pi-justify-end pi-ml-16")},p.default.createElement(n.default,{"data-stop-propagation":!0})))),p.default.createElement(s.Tooltip,{className:"pi-z-20",id:"tooltip-left-transfer",place:"left"}),p.default.createElement(s.Tooltip,{className:"pi-z-20",id:"tooltip-top-transfer",place:"top"}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/framer-motion/dist/framer-motion.js");var t=require("./Button.js"),r=require("../node_modules/@fortawesome/react-fontawesome/index.es.js"),i=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");var o=require("../node_modules/react-tooltip/dist/react-tooltip.min.cjs.js");require("../node_modules/react-i18next/node_modules/@babel/runtime/helpers/defineProperty.js"),require("../node_modules/react-i18next/node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../node_modules/react-i18next/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/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var a=require("./SwitchInputView/DropdownContent.js"),l=require("../utils/genericFunctions/eventDispatch.js"),u=require("../node_modules/react-redux/es/hooks/useSelector.js"),d=require("../node_modules/react-redux/es/hooks/useDispatch.js"),c=require("../_virtual/framer-motion.js");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var m=p(e);exports.default=function(e){e.clickCallback,e.isDestination;var p=e.description,f=e.isPhysicalRecording,j=u.useSelector((function(e){return e.currentCall})),h=j.transferring,x=j.incoming,_=j.accepted,g=d.useDispatch(),v=u.useSelector((function(e){return e.island})).isOpen;var q=n.useTranslation().t;return m.default.createElement(m.default.Fragment,null,m.default.createElement("div",{className:" ".concat(h?"pi-grid pi-w-full pi-space-x-2 pi-justify-start":"pi-flex pi-justify-center")},m.default.createElement(c.framerMotion.exports.motion.div,{className:"".concat(h&&p?"pi-grid pi-grid-cols-[12rem,1rem] pi-ml-4 pi-justify-start":"pi-flex pi-w-12"," ")},m.default.createElement(t.Button,{onClick:function(){return f?s.hangupCurrentPhysicalRecording():(x?s.hangupAllExtensions():s.hangupCurrentCall(),setTimeout((function(){g.listen.setUpdateIntrudeStatus(!1,""),g.listen.setUpdateListenStatus(!1,"")}),2e3),void(h&&setTimeout((function(){g.alerts.setAlert("call_transfered"),l.eventDispatch("phone-island-call-transfer-successfully",{}),setTimeout((function(){g.alerts.removeAlert("call_transfered")}),2e3)}),300)))},variant:"red",className:"pi-gap-4 pi-font-medium pi-text-base pi-transition pi-min-w-12 pi-w-full","data-tooltip-id":p&&h?"tooltip-top-transfer":"tooltip-left-transfer","data-tooltip-content":p&&h?p:"".concat(q("Tooltip.Hangup"))},m.default.createElement(r.FontAwesomeIcon,{className:"pi-rotate-135 pi-h-6 pi-w-6",icon:i.faPhone}),h&&p&&m.default.createElement(c.framerMotion.exports.motion.div,{style:{height:"17px"},className:"pi-whitespace-nowrap pi-overflow-hidden"},p)),v&&_&&m.default.createElement("div",{className:"".concat(h&&p?"pi-grid pi-grid-cols-1 pi-ml-8":"pi-flex pi-items-center pi-justify-end pi-ml-16")},m.default.createElement(a.default,{"data-stop-propagation":!0})))),m.default.createElement(o.Tooltip,{className:"pi-z-20",id:"tooltip-left-transfer",place:"left"}),m.default.createElement(o.Tooltip,{className:"pi-z-20",id:"tooltip-top-transfer",place:"top"}))};
2
2
  //# sourceMappingURL=Hangup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Hangup.js","sources":["../../src/components/Hangup.tsx"],"sourcesContent":["// Copyright (C) 2022 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/dist/framer-motion'\nimport { Button } from './Button'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faPhone } from '@fortawesome/free-solid-svg-icons'\nimport { hangupCurrentCall } from '../lib/phone/call'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { RootState } from '../store'\nimport { Dispatch } from '../store'\nimport { Tooltip } from 'react-tooltip/dist/react-tooltip.min.cjs'\nimport { hangupAllExtensions } from '../lib/phone/call'\nimport { useTranslation } from 'react-i18next'\nimport DropdownContent from './SwitchInputView/DropdownContent'\n\n/**\n * Return the status of the\n */\nconst Hangup: FC<HangupProps> = ({ clickCallback, isDestination, description }) => {\n const { transferring, incoming, accepted } = useSelector((state: RootState) => state.currentCall)\n const dispatch = useDispatch<Dispatch>()\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n function handleHangup() {\n if (incoming) {\n hangupAllExtensions()\n } else {\n hangupCurrentCall()\n }\n // Show confirmation message when a call is transferred\n if (transferring) {\n setTimeout(() => {\n dispatch.alerts.setAlert('call_transfered')\n setTimeout(() => {\n dispatch.alerts.removeAlert('call_transfered')\n }, 2000)\n }, 300)\n }\n }\n\n const { t } = useTranslation()\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-[12rem,1rem] pi-ml-4 pi-justify-start'\n : 'pi-flex pi-w-12'\n } `}\n >\n <Button\n onClick={() => handleHangup()}\n variant='red'\n className='pi-gap-4 pi-font-medium pi-text-base pi-transition pi-min-w-12 pi-w-full'\n data-tooltip-id={description && transferring ? 'tooltip-top-transfer' : 'tooltip-left-transfer'}\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 <div\n className={`${\n transferring && description\n ? 'pi-grid pi-grid-cols-1 pi-ml-8'\n : 'pi-flex pi-items-center pi-justify-end pi-ml-16'\n }`}\n >\n <DropdownContent data-stop-propagation={true}></DropdownContent>\n </div>\n )}\n </motion.div>\n </div>\n <Tooltip className='pi-z-20' id='tooltip-left-transfer' place='left' />\n <Tooltip className='pi-z-20' id='tooltip-top-transfer' place='top' />\n </>\n )\n}\n\nexport default Hangup\n\ninterface HangupProps {\n clickCallback?: () => void\n isDestination?: boolean\n description?: any\n}\n"],"names":["_a","isDestination","description","_b","useSelector","state","currentCall","transferring","incoming","accepted","dispatch","useDispatch","isOpen","island","t","useTranslation","React","createElement","Fragment","className","concat","motion","div","Button","onClick","hangupAllExtensions","hangupCurrentCall","setTimeout","alerts","setAlert","removeAlert","variant","FontAwesomeIcon","icon","faPhone","framerMotion","exports","style","height","DropdownContent","Tooltip","id","place"],"mappings":"g4CAoBgC,SAACA,mBAA8BA,EAAAC,cAAE,IAAAC,EAAWF,EAAAE,YACpEC,EAAuCC,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMC,eAA7EC,EAAYJ,EAAAI,aAAEC,EAAQL,EAAAK,SAAEC,EAAQN,EAAAM,SAClCC,EAAWC,EAAAA,cACTC,EAAWR,eAAY,SAACC,GAAqB,OAAAA,EAAMQ,iBAmBnD,IAAAC,EAAMC,qBAGd,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EACE,QAAAC,cAAA,MAAA,CAAAE,UAAW,IAAAC,OACTb,EACI,kDACA,8BAINS,UAACC,cAAAI,EAAAA,aAAAA,QAAAA,OAAOC,IAAG,CACTH,UAAW,GAAAC,OACTb,GAAgBL,EACZ,6DACA,kBACH,MAEHc,EAAAA,QAACC,cAAAM,EAAAA,QACCC,QAAS,WAAM,OArCnBhB,EACFiB,EAAAA,sBAEAC,EAAAA,yBAGEnB,GACFoB,YAAW,WACTjB,EAASkB,OAAOC,SAAS,mBACzBF,YAAW,WACTjB,EAASkB,OAAOE,YAAY,kBAC7B,GAAE,IACJ,GAAE,KAyBgC,EAC7BC,QAAQ,MACRZ,UAAU,2EAA0E,kBACnEjB,GAAeK,EAAe,uBAAyB,wBAEtE,uBAAAL,GAAeK,EAAeL,EAAc,UAAGY,EAAE,oBAInDE,EAAC,QAAAC,cAAAe,mBAAgBb,UAAU,8BAA8Bc,KAAMC,EAAAA,UAC9D3B,GAAgBL,GACfc,EAAA,QAAAC,cAACI,EAAMc,aAAAC,QAAAf,OAACC,IACN,CAAAe,MAAO,CAAEC,OAAQ,QACjBnB,UAAU,2CAETjB,IAINU,GAAUH,GACTO,EAAA,QAAAC,cAAA,MAAA,CACEE,UAAW,GAAAC,OACTb,GAAgBL,EACZ,iCACA,oDAGNc,EAAA,QAAAC,cAACsB,UAAuC,CAAA,yBAAA,OAKhDvB,UAAAC,cAACuB,EAAOA,QAAA,CAACrB,UAAU,UAAUsB,GAAG,wBAAwBC,MAAM,SAC9D1B,EAAAA,QAAAC,cAACuB,UAAQ,CAAArB,UAAU,UAAUsB,GAAG,uBAAuBC,MAAM,QAGnE"}
1
+ {"version":3,"file":"Hangup.js","sources":["../../src/components/Hangup.tsx"],"sourcesContent":["// Copyright (C) 2022 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/dist/framer-motion'\nimport { Button } from './Button'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { 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 { Tooltip } from 'react-tooltip/dist/react-tooltip.min.cjs'\nimport { hangupAllExtensions } from '../lib/phone/call'\nimport { useTranslation } from 'react-i18next'\nimport DropdownContent from './SwitchInputView/DropdownContent'\nimport { eventDispatch } from '../utils'\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 } = 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', {})\n setTimeout(() => {\n dispatch.alerts.removeAlert('call_transfered')\n }, 2000)\n }, 300)\n }\n }\n\n const { t } = useTranslation()\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-[12rem,1rem] pi-ml-4 pi-justify-start'\n : 'pi-flex pi-w-12'\n } `}\n >\n <Button\n onClick={() =>\n !isPhysicalRecording ? handleHangup() : hangupCurrentPhysicalRecording()\n }\n variant='red'\n className='pi-gap-4 pi-font-medium pi-text-base pi-transition pi-min-w-12 pi-w-full'\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 <div\n className={`${\n transferring && description\n ? 'pi-grid pi-grid-cols-1 pi-ml-8'\n : 'pi-flex pi-items-center pi-justify-end pi-ml-16'\n }`}\n >\n <DropdownContent data-stop-propagation={true}></DropdownContent>\n </div>\n )}\n </motion.div>\n </div>\n <Tooltip className='pi-z-20' id='tooltip-left-transfer' place='left' />\n <Tooltip className='pi-z-20' id='tooltip-top-transfer' place='top' />\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","isOpen","island","t","useTranslation","React","createElement","Fragment","className","concat","motion","div","Button","onClick","hangupCurrentPhysicalRecording","hangupAllExtensions","hangupCurrentCall","setTimeout","listen","setUpdateIntrudeStatus","setUpdateListenStatus","alerts","setAlert","eventDispatch","removeAlert","variant","FontAwesomeIcon","icon","faPhone","framerMotion","exports","style","height","DropdownContent","Tooltip","id","place"],"mappings":"w7CAqBgC,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,cACTC,EAAWR,eAAY,SAACC,GAAqB,OAAAA,EAAMQ,iBA2BnD,IAAAC,EAAMC,qBAGd,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EACE,QAAAC,cAAA,MAAA,CAAAE,UAAW,IAAAC,OACTb,EACI,kDACA,8BAINS,UAACC,cAAAI,EAAAA,aAAAA,QAAAA,OAAOC,IAAG,CACTH,UAAW,GAAAC,OACTb,GAAgBN,EACZ,6DACA,kBACH,MAEHe,EAAAA,QAACC,cAAAM,SACC,CAAAC,QAAS,WACP,OAACtB,EAAuCuB,EAA8BA,kCA9C5EjB,EACFkB,EAAAA,sBAEAC,EAAAA,oBAIFC,YAAW,WACTlB,EAASmB,OAAOC,wBAAuB,EAAO,IAC9CpB,EAASmB,OAAOE,uBAAsB,EAAO,GAC9C,GAAE,UAGCxB,GACFqB,YAAW,WACTlB,EAASsB,OAAOC,SAAS,mBACzBC,gBAAc,0CAA2C,CAAA,GACzDN,YAAW,WACTlB,EAASsB,OAAOG,YAAY,kBAC7B,GAAE,IACJ,GAAE,MA0BK,EAEFC,QAAQ,MACRjB,UAAU,2EAER,kBAAAlB,GAAeM,EAAe,uBAAyB,+CAGvDN,GAAeM,EAAeN,EAAc,GAAGmB,OAAAN,EAAE,oBAInDE,EAAC,QAAAC,cAAAoB,mBAAgBlB,UAAU,8BAA8BmB,KAAMC,EAAAA,UAC9DhC,GAAgBN,GACfe,EAAA,QAAAC,cAACI,EAAMmB,aAAAC,QAAApB,OAACC,IACN,CAAAoB,MAAO,CAAEC,OAAQ,QACjBxB,UAAU,2CAETlB,IAINW,GAAUH,GACTO,EAAA,QAAAC,cAAA,MAAA,CACEE,UAAW,GAAAC,OACTb,GAAgBN,EACZ,iCACA,oDAGNe,EAAA,QAAAC,cAAC2B,UAAuC,CAAA,yBAAA,OAKhD5B,UAAAC,cAAC4B,EAAOA,QAAA,CAAC1B,UAAU,UAAU2B,GAAG,wBAAwBC,MAAM,SAC9D/B,EAAAA,QAAAC,cAAC4B,UAAQ,CAAA1B,UAAU,UAAU2B,GAAG,uBAAuBC,MAAM,QAGnE"}
@@ -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"),a=require("./AudioPlayerView/index.js"),u=require("./AlertGuard.js"),n=require("./CallView/BackCall.js"),i=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/react-tooltip/dist/react-tooltip.min.cjs.js"),require("../node_modules/react-i18next/node_modules/@babel/runtime/helpers/defineProperty.js"),require("../node_modules/react-i18next/node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../node_modules/react-i18next/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/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var s=require("./TransferView/TransferList.js"),o=require("./RecorderView/index.js"),d=require("./IslandMotion.js"),c=require("./IslandDrag.js"),f=require("./Close.js"),m=require("../node_modules/react-redux/es/hooks/useSelector.js"),p=require("../node_modules/react-redux/es/hooks/useDispatch.js");function j(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var y=j(e),q=function(j){var q=j.showAlways,E=m.useSelector((function(e){return e.currentCall})),w=E.incoming,x=E.accepted,_=E.outgoing,h=E.transferring,V=m.useSelector((function(e){return e.island})).view,b=m.useSelector((function(e){return e.alerts.status})).activeAlertsCount,v=m.useSelector((function(e){return e.player})).audioPlayerLoop,g=e.useRef(null),P=p.useDispatch(),I=e.useRef(null),R=e.useRef(null),k=e.useRef(null),A=e.useRef(null),C=e.useRef(null);r.useIsomorphicLayoutEffect((function(){P.player.updatePlayer({audioPlayer:I,localAudio:R,localVideo:A,remoteVideo:C,remoteAudio:k})}),[]),e.useEffect((function(){(w||_)&&P.island.setIslandView("call")}),[w,_]);var S=e.useState(""),T=S[0],L=S[1];return e.useEffect((function(){setTimeout((function(){L(V)}),200)}),[V]),y.default.createElement("div",{ref:g,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"},(w||_||x||q||b>0||"player"===V||"recorder"===V)&&y.default.createElement(y.default.Fragment,null,y.default.createElement(c.IslandDrag,{islandContainerRef:g},y.default.createElement(n.default,{isVisible:"keypad"===V||"transfer"===V||h}),y.default.createElement(d.IslandMotion,null,y.default.createElement(u.AlertGuard,null,"call"===T?y.default.createElement(i.default,{forView:"call"},y.default.createElement(t.default,null)):"keypad"===T?y.default.createElement(i.default,{forView:"keypad"},y.default.createElement(l.default,null)):"transfer"===T?y.default.createElement(i.default,{forView:"transfer"},y.default.createElement(s.TransferListView,null)):"player"===T?y.default.createElement(i.default,{forView:"player"},y.default.createElement(a.KeypadView,null)):"recorder"===T?y.default.createElement(i.default,{forView:"recorder"},y.default.createElement(o.RecorderView,null)):y.default.createElement(y.default.Fragment,null))),y.default.createElement(f.Close,null))),y.default.createElement("div",{className:"pi-hidden"},y.default.createElement("audio",{loop:v,ref:I}),y.default.createElement("audio",{muted:!0,ref:R}),y.default.createElement("audio",{autoPlay:!0,ref:k}),y.default.createElement("video",{muted:!0,autoPlay:!0,ref:A}),y.default.createElement("video",{autoPlay:!0,muted:!0,ref:C})))};q.displayName="Island",exports.Island=q;
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"),a=require("./AudioPlayerView/index.js"),u=require("./AlertGuard.js"),n=require("./CallView/BackCall.js"),i=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/react-tooltip/dist/react-tooltip.min.cjs.js"),require("../node_modules/react-i18next/node_modules/@babel/runtime/helpers/defineProperty.js"),require("../node_modules/react-i18next/node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../node_modules/react-i18next/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/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var o=require("./TransferView/TransferList.js"),s=require("./RecorderView/index.js"),d=require("./IslandMotion.js"),c=require("./IslandDrag.js"),f=require("./Close.js"),m=require("./PhysicalRecorderView/index.js"),p=require("../node_modules/react-redux/es/hooks/useSelector.js"),y=require("../node_modules/react-redux/es/hooks/useDispatch.js");function j(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var E=j(e),h=function(j){var h=j.showAlways,q=p.useSelector((function(e){return e.currentCall})),w=q.incoming,V=q.accepted,x=q.outgoing,_=q.transferring,b=p.useSelector((function(e){return e.island})).view,P=p.useSelector((function(e){return{recording:e.physicalRecorder.recording}})).recording,R=p.useSelector((function(e){return e.alerts.status})).activeAlertsCount,v=p.useSelector((function(e){return e.player})).audioPlayerLoop,g=e.useRef(null),I=y.useDispatch(),k=e.useRef(null),A=e.useRef(null),C=e.useRef(null),S=e.useRef(null),T=e.useRef(null);r.useIsomorphicLayoutEffect((function(){I.player.updatePlayer({audioPlayer:k,localAudio:A,localVideo:S,remoteVideo:T,remoteAudio:C})}),[]),e.useEffect((function(){(w||x)&&I.island.setIslandView("call")}),[w,x]),e.useEffect((function(){P&&I.island.setIslandView("physicalPhoneRecorder")}),[b]);var L=e.useState(""),D=L[0],M=L[1];return e.useEffect((function(){setTimeout((function(){M(b)}),200)}),[b]),E.default.createElement("div",{ref:g,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"},(w||x||V||h||R>0||"player"===b||"recorder"===b||"physicalPhoneRecorder"===b)&&E.default.createElement(E.default.Fragment,null,E.default.createElement(c.IslandDrag,{islandContainerRef:g},E.default.createElement(n.default,{isVisible:"keypad"===b||"transfer"===b||_}),E.default.createElement(d.IslandMotion,null,E.default.createElement(u.AlertGuard,null,"call"===D?E.default.createElement(i.default,{forView:"call"},E.default.createElement(t.default,null)):"keypad"===D?E.default.createElement(i.default,{forView:"keypad"},E.default.createElement(l.default,null)):"transfer"===D?E.default.createElement(i.default,{forView:"transfer"},E.default.createElement(o.TransferListView,null)):"player"===D?E.default.createElement(i.default,{forView:"player"},E.default.createElement(a.KeypadView,null)):"recorder"===D?E.default.createElement(i.default,{forView:"recorder"},E.default.createElement(s.RecorderView,null)):"physicalPhoneRecorder"===D?E.default.createElement(i.default,{forView:"physicalPhoneRecorder"},E.default.createElement(m.PhysicalRecorderView,null)):E.default.createElement(E.default.Fragment,null))),E.default.createElement(f.Close,null))),E.default.createElement("div",{className:"pi-hidden"},E.default.createElement("audio",{loop:v,ref:k}),E.default.createElement("audio",{muted:!0,ref:A}),E.default.createElement("audio",{autoPlay:!0,ref:C}),E.default.createElement("video",{muted:!0,autoPlay:!0,ref:S}),E.default.createElement("video",{autoPlay:!0,muted:!0,ref:T})))};h.displayName="Island",exports.Island=h;
2
2
  //# sourceMappingURL=Island.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Island.js","sources":["../../src/components/Island.tsx"],"sourcesContent":["// Copyright (C) 2022 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 ViewsTransition from './ViewsTransition'\nimport { TransferListView } from './TransferView'\nimport { RecorderView } from './RecorderView'\nimport IslandMotions from './IslandMotion'\nimport IslandDrag from './IslandDrag'\nimport Close from './Close'\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, transferring } = useSelector(\n (state: RootState) => state.currentCall,\n )\n\n // Get isOpen from island store\n const { view } = useSelector((state: RootState) => state.island)\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 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 <>\n <IslandDrag islandContainerRef={islandContainerRef}>\n {/* Add background call visibility logic */}\n <BackCall isVisible={view === 'keypad' || view === 'transfer' || transferring} />\n <IslandMotions>\n {/* The views logic */}\n <AlertGuard>\n {currentView === 'call' ? (\n <ViewsTransition forView='call'>\n <CallView />\n </ViewsTransition>\n ) : currentView === 'keypad' ? (\n <ViewsTransition forView='keypad'>\n <KeyboardView />\n </ViewsTransition>\n ) : currentView === 'transfer' ? (\n <ViewsTransition forView='transfer'>\n <TransferListView />\n </ViewsTransition>\n ) : currentView === 'player' ? (\n <ViewsTransition forView='player'>\n <AudioPlayerView />\n </ViewsTransition>\n ) : currentView === 'recorder' ? (\n <ViewsTransition forView='recorder'>\n <RecorderView />\n </ViewsTransition>\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","transferring","view","island","activeAlertsCount","alerts","status","audioPlayerLoop","player","islandContainerRef","useRef","dispatch","useDispatch","audioPlayer","localAudio","remoteAudio","localVideo","remoteVideo","useIsomorphicLayoutEffect","updatePlayer","useEffect","setIslandView","_c","useState","currentView","setCurrentView","setTimeout","React","ref","className","createElement","Fragment","IslandDrag","BackCall","isVisible","IslandMotions","AlertGuard","ViewsTransition","forView","CallView","KeyboardView","TransferListView","AudioPlayerView","RecorderView","Close","loop","muted","autoPlay","displayName"],"mappings":"kmDAwBaA,EAA0B,SAACC,GAAE,IAAAC,EAAUD,EAAAC,WAE5CC,EAAiDC,eACrD,SAACC,GAAqB,OAAAA,EAAMC,eADtBC,EAAQJ,EAAAI,SAAEC,EAAQL,EAAAK,SAAEC,EAAQN,EAAAM,SAAEC,EAAYP,EAAAO,aAK1CC,EAASP,eAAY,SAACC,GAAqB,OAAAA,EAAMO,eAGjDC,EAAsBT,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMS,OAAOC,4BAGrEC,EAAoBZ,eAAY,SAACC,GAAqB,OAAAA,EAAMY,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,YAEJtB,GAAYE,IACdW,EAASR,OAAOkB,cAAc,OAElC,GAAG,CAACvB,EAAUE,IAER,IAAAsB,EAAgCC,EAAAA,SAAc,IAA7CC,EAAWF,EAAA,GAAEG,EAAcH,EAAA,GASlC,OANAF,EAAAA,WAAU,WACRM,YAAW,WACTD,EAAevB,EAChB,GAAE,IACL,GAAG,CAACA,IAGFyB,EAAAA,6BACEC,IAAKnB,EACLoB,UAAU,yMAER/B,GACAE,GACAD,GACAN,GACAW,EAAoB,GACX,WAATF,GACS,aAATA,IACAyB,EAAA,QAAAG,cAAAH,EAAA,QAAAI,SAAA,KACEJ,EAAAA,QAAAG,cAACE,EAAAA,WAAU,CAACvB,mBAAoBA,GAE9BkB,UAAAG,cAACG,EAAQ,QAAA,CAACC,UAAoB,WAAThC,GAA8B,aAATA,GAAuBD,IACjE0B,UAAAG,cAACK,EAAAA,aAAa,KAEZR,EAAAA,QAAAG,cAACM,aAAU,KACQ,SAAhBZ,EACCG,EAAC,QAAAG,cAAAO,EAAAA,QAAgB,CAAAC,QAAQ,QACvBX,EAAAA,QAAAG,cAACS,EAAAA,QAAW,OAEI,WAAhBf,EACFG,EAAAA,QAAAG,cAACO,EAAAA,QAAgB,CAAAC,QAAQ,UACvBX,EAAAA,QAAAG,cAACU,EAAAA,QAAe,OAEA,aAAhBhB,EACFG,EAAAA,QAAAG,cAACO,EAAAA,QAAgB,CAAAC,QAAQ,YACvBX,EAAAA,QAAAG,cAACW,EAAAA,iBAAmB,OAEJ,WAAhBjB,EACFG,EAAAA,QAAAG,cAACO,EAAAA,QAAgB,CAAAC,QAAQ,UACvBX,EAAAA,QAAAG,cAACY,EAAAA,WAAkB,OAEH,aAAhBlB,EACFG,EAAAA,QAAAG,cAACO,EAAAA,QAAgB,CAAAC,QAAQ,YACvBX,EAAAA,QAACG,cAAAa,eAAe,OAGlBhB,EAAAA,QAAAG,cAAAH,UAAAI,SAAA,QAINJ,EAAAA,QAAAG,cAACc,EAAAA,MAAK,QAIZjB,EAAAA,QAAKG,cAAA,MAAA,CAAAD,UAAU,aACbF,EAAA,QAAAG,cAAA,QAAA,CAAOe,KAAMtC,EAAiBqB,IAAKf,IACnCc,EAAA,QAAAG,cAAA,QAAA,CAAOgB,OAAO,EAAMlB,IAAKd,IACzBa,EAAA,QAAAG,cAAA,QAAA,CAAOiB,UAAQ,EAACnB,IAAKb,IACrBY,UAAOG,cAAA,QAAA,CAAAgB,OAAO,EAAMC,UAAS,EAAAnB,IAAKZ,IAClCW,EAAAA,QAAAG,cAAA,QAAA,CAAOiB,UAAQ,EAACD,OAAO,EAAMlB,IAAKX,KAI1C,EAEA1B,EAAOyD,YAAc"}
1
+ {"version":3,"file":"Island.js","sources":["../../src/components/Island.tsx"],"sourcesContent":["// Copyright (C) 2022 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 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'\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, transferring } = useSelector(\n (state: RootState) => state.currentCall,\n )\n\n // Get isOpen from island store\n const { view } = 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 <>\n <IslandDrag islandContainerRef={islandContainerRef}>\n {/* Add background call visibility logic */}\n <BackCall isVisible={view === 'keypad' || view === 'transfer' || transferring} />\n <IslandMotions>\n {/* The views logic */}\n <AlertGuard>\n {currentView === 'call' ? (\n <ViewsTransition forView='call'>\n <CallView />\n </ViewsTransition>\n ) : currentView === 'keypad' ? (\n <ViewsTransition forView='keypad'>\n <KeyboardView />\n </ViewsTransition>\n ) : currentView === 'transfer' ? (\n <ViewsTransition forView='transfer'>\n <TransferListView />\n </ViewsTransition>\n ) : currentView === 'player' ? (\n <ViewsTransition forView='player'>\n <AudioPlayerView />\n </ViewsTransition>\n ) : currentView === 'recorder' ? (\n <ViewsTransition forView='recorder'>\n <RecorderView />\n </ViewsTransition>\n ) : currentView === 'physicalPhoneRecorder' ? (\n <ViewsTransition forView='physicalPhoneRecorder'>\n <PhysicalRecorderView />\n </ViewsTransition>\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","transferring","view","island","recording","physicalRecorder","activeAlertsCount","alerts","status","audioPlayerLoop","player","islandContainerRef","useRef","dispatch","useDispatch","audioPlayer","localAudio","remoteAudio","localVideo","remoteVideo","useIsomorphicLayoutEffect","updatePlayer","useEffect","setIslandView","_c","useState","currentView","setCurrentView","setTimeout","React","ref","className","createElement","Fragment","IslandDrag","BackCall","isVisible","IslandMotions","AlertGuard","ViewsTransition","forView","CallView","KeyboardView","TransferListView","AudioPlayerView","RecorderView","PhysicalRecorderView","Close","loop","muted","autoPlay","displayName"],"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"),require("../node_modules/framer-motion/dist/framer-motion.js");var t=require("../node_modules/react-redux/es/hooks/useSelector.js"),d=require("../_virtual/framer-motion.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=i(e),r=function(e){var i=e.children,r=t.useSelector((function(e){return e.currentCall})),n=r.incoming,h=r.outgoing,l=r.accepted,o=r.transferring,c=t.useSelector((function(e){return e.listen})).isListen,s=t.useSelector((function(e){return e.island})),p=s.view,g=s.isOpen,u=s.actionsExpanded,x=t.useSelector((function(e){return e.alerts.status})).activeAlertsCount,w=t.useSelector((function(e){return e.motions})),f=w.variants,m=w.border_radius_collapsed,v=w.border_radius_expanded,_=w.padding_x_collapsed,y=w.padding_y_collapsed,b=w.padding_expanded;var k=function(){var e={width:0,height:0};switch(p){case"call":g?l&&o?e=u?{width:f.call.expanded.transfer.actionsExpanded.width,height:f.call.expanded.transfer.actionsExpanded.height}:{width:f.call.expanded.transfer.width,height:f.call.expanded.transfer.height}:l&&u?e={width:f.call.expanded.accepted.actionsExpanded.width,height:f.call.expanded.accepted.actionsExpanded.height}:l&&!c?e={width:f.call.expanded.accepted.width,height:f.call.expanded.accepted.height}:l&&c?e={width:f.call.expanded.listening.width,height:f.call.expanded.listening.height}:n?e={width:f.call.expanded.incoming.width,height:f.call.expanded.incoming.height}:h&&(e={width:f.call.expanded.outgoing.width,height:f.call.expanded.outgoing.height}):e={width:f.call.collapsed.width,height:f.call.collapsed.height};break;case"keypad":e=g?{width:f.keypad.expanded.width,height:f.keypad.expanded.height}:{width:f.transfer.collapsed.width,height:f.transfer.collapsed.height};break;case"transfer":e=g?{width:f.transfer.expanded.width,height:f.transfer.expanded.height}:{width:f.transfer.collapsed.width,height:f.transfer.collapsed.height};break;case"player":e=g?{width:f.player.expanded.width,height:f.player.expanded.height}:{width:f.player.collapsed.width,height:f.player.collapsed.height};break;case"recorder":e=g?{width:f.recorder.expanded.width,height:f.recorder.expanded.height}:{width:f.recorder.collapsed.width,height:f.recorder.collapsed.height}}var t=x>0;return{width:"".concat(0===e.width&&t?f.alerts.width:e.width,"px"),height:"".concat(t&&g?e.height+f.alerts.height+(0===e.height?2*b:b):e.height,"px"),borderRadius:"".concat(g?v:m,"px"),padding:g?"".concat(b,"px"):"".concat(_,"px ").concat(y,"px")}}();return a.default.createElement(d.framerMotion.exports.motion.div,{className:"pi-font-sans pi-pointer-events-auto pi-overflow-hidden dark:pi-bg-gray-950 pi-bg-gray-50 pi-text-xs pi-cursor-pointer dark:pi-text-white pi-text-gray-900 hover:pi-shadow-2xl pi-rounded-3xl pi-transition-shadow",animate:k},i&&i)};exports.IslandMotion=r,exports.default=r;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js"),require("../node_modules/framer-motion/dist/framer-motion.js");var t=require("../node_modules/react-redux/es/hooks/useSelector.js"),d=require("../_virtual/framer-motion.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=i(e),r=function(e){var i=e.children,r=t.useSelector((function(e){return e.currentCall})),h=r.incoming,n=r.outgoing,c=r.accepted,o=r.transferring,l=t.useSelector((function(e){return e.listen})).isListen,s=t.useSelector((function(e){return e.island})),p=s.view,g=s.isOpen,u=s.actionsExpanded,x=t.useSelector((function(e){return e.alerts.status})).activeAlertsCount,w=t.useSelector((function(e){return e.motions})),f=w.variants,y=w.border_radius_collapsed,m=w.border_radius_expanded,v=w.padding_x_collapsed,_=w.padding_y_collapsed,b=w.padding_expanded;var k=function(){var e={width:0,height:0};switch(p){case"call":g?c&&o?e=u?{width:f.call.expanded.transfer.actionsExpanded.width,height:f.call.expanded.transfer.actionsExpanded.height}:{width:f.call.expanded.transfer.width,height:f.call.expanded.transfer.height}:c&&u?e={width:f.call.expanded.accepted.actionsExpanded.width,height:f.call.expanded.accepted.actionsExpanded.height}:c&&!l?e={width:f.call.expanded.accepted.width,height:f.call.expanded.accepted.height}:c&&l?e={width:f.call.expanded.listening.width,height:f.call.expanded.listening.height}:h?e={width:f.call.expanded.incoming.width,height:f.call.expanded.incoming.height}:n&&(e={width:f.call.expanded.outgoing.width,height:f.call.expanded.outgoing.height}):e={width:f.call.collapsed.width,height:f.call.collapsed.height};break;case"keypad":e=g?{width:f.keypad.expanded.width,height:f.keypad.expanded.height}:{width:f.transfer.collapsed.width,height:f.transfer.collapsed.height};break;case"transfer":e=g?{width:f.transfer.expanded.width,height:f.transfer.expanded.height}:{width:f.transfer.collapsed.width,height:f.transfer.collapsed.height};break;case"player":e=g?{width:f.player.expanded.width,height:f.player.expanded.height}:{width:f.player.collapsed.width,height:f.player.collapsed.height};break;case"recorder":e=g?{width:f.recorder.expanded.width,height:f.recorder.expanded.height}:{width:f.recorder.collapsed.width,height:f.recorder.collapsed.height};break;case"physicalPhoneRecorder":e=g?{width:f.physicalPhoneRecorder.expanded.width,height:f.physicalPhoneRecorder.expanded.height}:{width:f.physicalPhoneRecorder.collapsed.width,height:f.physicalPhoneRecorder.collapsed.height}}var t=x>0;return{width:"".concat(0===e.width&&t?f.alerts.width:e.width,"px"),height:"".concat(t&&g?e.height+f.alerts.height+(0===e.height?2*b:b):e.height,"px"),borderRadius:"".concat(g?m:y,"px"),padding:g?"".concat(b,"px"):"".concat(v,"px ").concat(_,"px")}}();return a.default.createElement(d.framerMotion.exports.motion.div,{className:"pi-font-sans pi-pointer-events-auto pi-overflow-hidden dark:pi-bg-gray-950 pi-bg-gray-50 pi-text-xs pi-cursor-pointer dark:pi-text-white pi-text-gray-900 hover:pi-shadow-2xl pi-rounded-3xl pi-transition-shadow",animate:k},i&&i)};exports.IslandMotion=r,exports.default=r;
2
2
  //# sourceMappingURL=IslandMotion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IslandMotion.js","sources":["../../src/components/IslandMotion.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC } from 'react'\nimport { RootState } from '../store'\nimport { useSelector } from 'react-redux'\nimport { motion } from 'framer-motion/dist/framer-motion'\n\nexport const IslandMotion: FC<IslandMotionProps> = ({ children }) => {\n // Retrieve needed stored variables\n const { incoming, outgoing, accepted, transferring } = useSelector(\n (state: RootState) => state.currentCall,\n )\n const { isListen } = useSelector((state: RootState) => state.listen)\n const { view, isOpen, actionsExpanded } = useSelector((state: RootState) => state.island)\n const { activeAlertsCount } = useSelector((state: RootState) => state.alerts.status)\n const {\n variants,\n border_radius_collapsed,\n border_radius_expanded,\n padding_x_collapsed,\n padding_y_collapsed,\n padding_expanded,\n } = useSelector((state: RootState) => state.motions)\n\n function getVariant() {\n // Initial size\n let size: SizeTypes = {\n width: 0,\n height: 0,\n }\n switch (view) {\n case 'call':\n if (isOpen) {\n if (accepted && transferring) {\n if (actionsExpanded) {\n size = {\n width: variants.call.expanded.transfer.actionsExpanded.width,\n height: variants.call.expanded.transfer.actionsExpanded.height,\n }\n } else {\n size = {\n width: variants.call.expanded.transfer.width,\n height: variants.call.expanded.transfer.height,\n }\n }\n } else if (accepted && actionsExpanded) {\n size = {\n width: variants.call.expanded.accepted.actionsExpanded.width,\n height: variants.call.expanded.accepted.actionsExpanded.height,\n }\n } else if (accepted && !isListen) {\n size = {\n width: variants.call.expanded.accepted.width,\n height: variants.call.expanded.accepted.height,\n }\n } else if (accepted && (isListen)) {\n size = {\n width: variants.call.expanded.listening.width,\n height: variants.call.expanded.listening.height,\n }\n } else if (incoming) {\n size = {\n width: variants.call.expanded.incoming.width,\n height: variants.call.expanded.incoming.height,\n }\n } else if (outgoing) {\n size = {\n width: variants.call.expanded.outgoing.width,\n height: variants.call.expanded.outgoing.height,\n }\n }\n } else {\n size = {\n width: variants.call.collapsed.width,\n height: variants.call.collapsed.height,\n }\n }\n break\n case 'keypad':\n if (isOpen) {\n size = {\n width: variants.keypad.expanded.width,\n height: variants.keypad.expanded.height,\n }\n } else {\n size = {\n width: variants.transfer.collapsed.width,\n height: variants.transfer.collapsed.height,\n }\n }\n break\n case 'transfer':\n if (isOpen) {\n size = {\n width: variants.transfer.expanded.width,\n height: variants.transfer.expanded.height,\n }\n } else {\n size = {\n width: variants.transfer.collapsed.width,\n height: variants.transfer.collapsed.height,\n }\n }\n break\n case 'player':\n if (isOpen) {\n size = {\n width: variants.player.expanded.width,\n height: variants.player.expanded.height,\n }\n } else {\n size = {\n width: variants.player.collapsed.width,\n height: variants.player.collapsed.height,\n }\n }\n break\n case 'recorder':\n if (isOpen) {\n size = {\n width: variants.recorder.expanded.width,\n height: variants.recorder.expanded.height,\n }\n } else {\n size = {\n width: variants.recorder.collapsed.width,\n height: variants.recorder.collapsed.height,\n }\n }\n break\n }\n\n const isAlert: boolean = activeAlertsCount > 0\n\n return {\n width: `${size.width === 0 && isAlert ? variants.alerts.width : size.width}px`,\n height: `${\n isAlert && isOpen\n ? size.height +\n variants.alerts.height +\n (size.height === 0 ? padding_expanded * 2 : padding_expanded)\n : size.height\n }px`,\n borderRadius: isOpen ? `${border_radius_expanded}px` : `${border_radius_collapsed}px`,\n padding: isOpen\n ? `${padding_expanded}px`\n : `${padding_x_collapsed}px ${padding_y_collapsed}px`,\n }\n }\n\n const motionVariants = getVariant()\n\n return (\n <motion.div\n className='pi-font-sans pi-pointer-events-auto pi-overflow-hidden dark:pi-bg-gray-950 pi-bg-gray-50 pi-text-xs pi-cursor-pointer dark:pi-text-white pi-text-gray-900 hover:pi-shadow-2xl pi-rounded-3xl pi-transition-shadow'\n animate={motionVariants}\n >\n {children && children}\n </motion.div>\n )\n}\n\nexport interface IslandMotionProps {\n children: ReactNode\n}\n\ntype SizeTypes = {\n width: number\n height: number\n}\n\nexport default IslandMotion\n"],"names":["IslandMotion","_a","children","_b","useSelector","state","currentCall","incoming","outgoing","accepted","transferring","isListen","listen","_c","island","view","isOpen","actionsExpanded","activeAlertsCount","alerts","status","_d","motions","variants","border_radius_collapsed","border_radius_expanded","padding_x_collapsed","padding_y_collapsed","padding_expanded","motionVariants","size","width","height","call","expanded","transfer","listening","collapsed","keypad","player","recorder","isAlert","concat","borderRadius","padding","getVariant","React","createElement","motion","framerMotion","exports","div","className","animate"],"mappings":"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"}
1
+ {"version":3,"file":"IslandMotion.js","sources":["../../src/components/IslandMotion.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC } from 'react'\nimport { RootState } from '../store'\nimport { useSelector } from 'react-redux'\nimport { motion } from 'framer-motion/dist/framer-motion'\n\nexport const IslandMotion: FC<IslandMotionProps> = ({ children }) => {\n // Retrieve needed stored variables\n const { incoming, outgoing, accepted, transferring } = useSelector(\n (state: RootState) => state.currentCall,\n )\n const { isListen } = useSelector((state: RootState) => state.listen)\n const { view, isOpen, actionsExpanded } = useSelector((state: RootState) => state.island)\n const { activeAlertsCount } = useSelector((state: RootState) => state.alerts.status)\n const {\n variants,\n border_radius_collapsed,\n border_radius_expanded,\n padding_x_collapsed,\n padding_y_collapsed,\n padding_expanded,\n } = useSelector((state: RootState) => state.motions)\n\n function getVariant() {\n // Initial size\n let size: SizeTypes = {\n width: 0,\n height: 0,\n }\n switch (view) {\n case 'call':\n if (isOpen) {\n if (accepted && transferring) {\n if (actionsExpanded) {\n size = {\n width: variants.call.expanded.transfer.actionsExpanded.width,\n height: variants.call.expanded.transfer.actionsExpanded.height,\n }\n } else {\n size = {\n width: variants.call.expanded.transfer.width,\n height: variants.call.expanded.transfer.height,\n }\n }\n } else if (accepted && actionsExpanded) {\n size = {\n width: variants.call.expanded.accepted.actionsExpanded.width,\n height: variants.call.expanded.accepted.actionsExpanded.height,\n }\n } else if (accepted && !isListen) {\n size = {\n width: variants.call.expanded.accepted.width,\n height: variants.call.expanded.accepted.height,\n }\n } else if (accepted && isListen) {\n size = {\n width: variants.call.expanded.listening.width,\n height: variants.call.expanded.listening.height,\n }\n } else if (incoming) {\n size = {\n width: variants.call.expanded.incoming.width,\n height: variants.call.expanded.incoming.height,\n }\n } else if (outgoing) {\n size = {\n width: variants.call.expanded.outgoing.width,\n height: variants.call.expanded.outgoing.height,\n }\n }\n } else {\n size = {\n width: variants.call.collapsed.width,\n height: variants.call.collapsed.height,\n }\n }\n break\n case 'keypad':\n if (isOpen) {\n size = {\n width: variants.keypad.expanded.width,\n height: variants.keypad.expanded.height,\n }\n } else {\n size = {\n width: variants.transfer.collapsed.width,\n height: variants.transfer.collapsed.height,\n }\n }\n break\n case 'transfer':\n if (isOpen) {\n size = {\n width: variants.transfer.expanded.width,\n height: variants.transfer.expanded.height,\n }\n } else {\n size = {\n width: variants.transfer.collapsed.width,\n height: variants.transfer.collapsed.height,\n }\n }\n break\n case 'player':\n if (isOpen) {\n size = {\n width: variants.player.expanded.width,\n height: variants.player.expanded.height,\n }\n } else {\n size = {\n width: variants.player.collapsed.width,\n height: variants.player.collapsed.height,\n }\n }\n break\n case 'recorder':\n if (isOpen) {\n size = {\n width: variants.recorder.expanded.width,\n height: variants.recorder.expanded.height,\n }\n } else {\n size = {\n width: variants.recorder.collapsed.width,\n height: variants.recorder.collapsed.height,\n }\n }\n break\n case 'physicalPhoneRecorder':\n if (isOpen) {\n size = {\n width: variants.physicalPhoneRecorder.expanded.width,\n height: variants.physicalPhoneRecorder.expanded.height,\n }\n } else {\n size = {\n width: variants.physicalPhoneRecorder.collapsed.width,\n height: variants.physicalPhoneRecorder.collapsed.height,\n }\n }\n break\n }\n\n const isAlert: boolean = activeAlertsCount > 0\n\n return {\n width: `${size.width === 0 && isAlert ? variants.alerts.width : size.width}px`,\n height: `${\n isAlert && isOpen\n ? size.height +\n variants.alerts.height +\n (size.height === 0 ? padding_expanded * 2 : padding_expanded)\n : size.height\n }px`,\n borderRadius: isOpen ? `${border_radius_expanded}px` : `${border_radius_collapsed}px`,\n padding: isOpen\n ? `${padding_expanded}px`\n : `${padding_x_collapsed}px ${padding_y_collapsed}px`,\n }\n }\n\n const motionVariants = getVariant()\n\n return (\n <motion.div\n className='pi-font-sans pi-pointer-events-auto pi-overflow-hidden dark:pi-bg-gray-950 pi-bg-gray-50 pi-text-xs pi-cursor-pointer dark:pi-text-white pi-text-gray-900 hover:pi-shadow-2xl pi-rounded-3xl pi-transition-shadow'\n animate={motionVariants}\n >\n {children && children}\n </motion.div>\n )\n}\n\nexport interface IslandMotionProps {\n children: ReactNode\n}\n\ntype SizeTypes = {\n width: number\n height: number\n}\n\nexport default IslandMotion\n"],"names":["IslandMotion","_a","children","_b","useSelector","state","currentCall","incoming","outgoing","accepted","transferring","isListen","listen","_c","island","view","isOpen","actionsExpanded","activeAlertsCount","alerts","status","_d","motions","variants","border_radius_collapsed","border_radius_expanded","padding_x_collapsed","padding_y_collapsed","padding_expanded","motionVariants","size","width","height","call","expanded","transfer","listening","collapsed","keypad","player","recorder","physicalPhoneRecorder","isAlert","concat","borderRadius","padding","getVariant","React","createElement","motion","framerMotion","exports","div","className","animate"],"mappings":"+YAQaA,EAAsC,SAACC,GAAE,IAAAC,EAAQD,EAAAC,SAEtDC,EAAiDC,eACrD,SAACC,GAAqB,OAAAA,EAAMC,eADtBC,EAAQJ,EAAAI,SAAEC,EAAQL,EAAAK,SAAEC,EAAQN,EAAAM,SAAEC,EAAYP,EAAAO,aAG1CC,EAAaP,eAAY,SAACC,GAAqB,OAAAA,EAAMO,mBACvDC,EAAoCT,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMS,UAA1EC,EAAIF,EAAAE,KAAEC,EAAMH,EAAAG,OAAEC,EAAeJ,EAAAI,gBAC7BC,EAAsBd,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMc,OAAOC,4BACvEC,EAOFjB,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMiB,OAAN,IANpCC,EAAQF,EAAAE,SACRC,EAAuBH,EAAAG,wBACvBC,2BACAC,EAAmBL,EAAAK,oBACnBC,EAAmBN,EAAAM,oBACnBC,qBA8IF,IAAMC,EA3IN,WAEE,IAAIC,EAAkB,CACpBC,MAAO,EACPC,OAAQ,GAEV,OAAQjB,GACN,IAAK,OACCC,EACEP,GAAYC,EAEZoB,EADEb,EACK,CACLc,MAAOR,EAASU,KAAKC,SAASC,SAASlB,gBAAgBc,MACvDC,OAAQT,EAASU,KAAKC,SAASC,SAASlB,gBAAgBe,QAGnD,CACLD,MAAOR,EAASU,KAAKC,SAASC,SAASJ,MACvCC,OAAQT,EAASU,KAAKC,SAASC,SAASH,QAGnCvB,GAAYQ,EACrBa,EAAO,CACLC,MAAOR,EAASU,KAAKC,SAASzB,SAASQ,gBAAgBc,MACvDC,OAAQT,EAASU,KAAKC,SAASzB,SAASQ,gBAAgBe,QAEjDvB,IAAaE,EACtBmB,EAAO,CACLC,MAAOR,EAASU,KAAKC,SAASzB,SAASsB,MACvCC,OAAQT,EAASU,KAAKC,SAASzB,SAASuB,QAEjCvB,GAAYE,EACrBmB,EAAO,CACLC,MAAOR,EAASU,KAAKC,SAASE,UAAUL,MACxCC,OAAQT,EAASU,KAAKC,SAASE,UAAUJ,QAElCzB,EACTuB,EAAO,CACLC,MAAOR,EAASU,KAAKC,SAAS3B,SAASwB,MACvCC,OAAQT,EAASU,KAAKC,SAAS3B,SAASyB,QAEjCxB,IACTsB,EAAO,CACLC,MAAOR,EAASU,KAAKC,SAAS1B,SAASuB,MACvCC,OAAQT,EAASU,KAAKC,SAAS1B,SAASwB,SAI5CF,EAAO,CACLC,MAAOR,EAASU,KAAKI,UAAUN,MAC/BC,OAAQT,EAASU,KAAKI,UAAUL,QAGpC,MACF,IAAK,SAEDF,EADEd,EACK,CACLe,MAAOR,EAASe,OAAOJ,SAASH,MAChCC,OAAQT,EAASe,OAAOJ,SAASF,QAG5B,CACLD,MAAOR,EAASY,SAASE,UAAUN,MACnCC,OAAQT,EAASY,SAASE,UAAUL,QAGxC,MACF,IAAK,WAEDF,EADEd,EACK,CACLe,MAAOR,EAASY,SAASD,SAASH,MAClCC,OAAQT,EAASY,SAASD,SAASF,QAG9B,CACLD,MAAOR,EAASY,SAASE,UAAUN,MACnCC,OAAQT,EAASY,SAASE,UAAUL,QAGxC,MACF,IAAK,SAEDF,EADEd,EACK,CACLe,MAAOR,EAASgB,OAAOL,SAASH,MAChCC,OAAQT,EAASgB,OAAOL,SAASF,QAG5B,CACLD,MAAOR,EAASgB,OAAOF,UAAUN,MACjCC,OAAQT,EAASgB,OAAOF,UAAUL,QAGtC,MACF,IAAK,WAEDF,EADEd,EACK,CACLe,MAAOR,EAASiB,SAASN,SAASH,MAClCC,OAAQT,EAASiB,SAASN,SAASF,QAG9B,CACLD,MAAOR,EAASiB,SAASH,UAAUN,MACnCC,OAAQT,EAASiB,SAASH,UAAUL,QAGxC,MACF,IAAK,wBAEDF,EADEd,EACK,CACLe,MAAOR,EAASkB,sBAAsBP,SAASH,MAC/CC,OAAQT,EAASkB,sBAAsBP,SAASF,QAG3C,CACLD,MAAOR,EAASkB,sBAAsBJ,UAAUN,MAChDC,OAAQT,EAASkB,sBAAsBJ,UAAUL,QAMzD,IAAMU,EAAmBxB,EAAoB,EAE7C,MAAO,CACLa,MAAO,UAAkB,IAAfD,EAAKC,OAAeW,EAAUnB,EAASJ,OAAOY,MAAQD,EAAKC,MAAS,MAC9EC,OAAQ,GAAAW,OACND,GAAW1B,EACPc,EAAKE,OACLT,EAASJ,OAAOa,QACC,IAAhBF,EAAKE,OAAkC,EAAnBJ,EAAuBA,GAC5CE,EAAKE,OACP,MACJY,aAAuB,GAAAD,OAAT3B,EAAYS,EAAgCD,EAAV,MAChDqB,QAAS7B,EACL,GAAG2B,OAAAf,EAAoB,MACvB,GAAAe,OAAGjB,EAAmB,OAAAiB,OAAMhB,EAAuB,MAE1D,CAEsBmB,GAEvB,OACEC,UAACC,cAAAC,EAAMC,aAAAC,QAAAF,OAACG,IAAG,CACTC,UAAU,oNACVC,QAASzB,GAER3B,GAAYA,EAGnB"}
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ declare const _default: React.NamedExoticComponent<TimerProps>;
3
+ export default _default;
4
+ interface TimerProps {
5
+ }
@@ -0,0 +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("../../node_modules/react-moment/dist/index.js"),t=require("../../node_modules/react-redux/es/hooks/useSelector.js"),u=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=o(e),i=e.memo((function(){var e=t.useSelector((function(e){return{recording:e.physicalRecorder.recording,startTime:e.physicalRecorder.startTime,currentTime:e.physicalRecorder.currentTime}})),o=e.startTime,i=e.currentTime,s=e.recording,a=u.useDispatch();return n.default.createElement(n.default.Fragment,null,o&&s?n.default.createElement(r.default,{date:o,interval:1e3,format:"hh:mm:ss",trim:!1,onChange:function(e){a.recorder.setCurrentTime(e)},unix:!0,durationFromNow:!0}):i)}));exports.default=i;
2
+ //# sourceMappingURL=PhysicalRecordingTimer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PhysicalRecordingTimer.js","sources":["../../../src/components/PhysicalRecorderView/PhysicalRecordingTimer.tsx"],"sourcesContent":["//\n// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n//\n\nimport React, { memo, FC } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport Moment from 'react-moment'\nimport { RootState, Dispatch } from '../../store'\n\nconst PhysicalTimer: FC<TimerProps> = () => {\n const { startTime, currentTime, recording } = useSelector((state: RootState) => ({\n recording: state.physicalRecorder.recording,\n startTime: state.physicalRecorder.startTime,\n currentTime: state.physicalRecorder.currentTime,\n }))\n\n const dispatch = useDispatch<Dispatch>()\n\n function handleTimerChanged(time: string) {\n dispatch.recorder.setCurrentTime(time)\n }\n\n return (\n <>\n {startTime && recording ? (\n <Moment\n date={startTime}\n interval={1000}\n format='hh:mm:ss'\n trim={false}\n onChange={handleTimerChanged}\n unix\n durationFromNow\n />\n ) : (\n currentTime\n )}\n </>\n )\n}\n\nexport default memo(PhysicalTimer)\n\ninterface TimerProps {}\n"],"names":["memo","_a","useSelector","state","recording","physicalRecorder","startTime","currentTime","dispatch","useDispatch","React","createElement","Moment","date","interval","format","trim","onChange","time","recorder","setCurrentTime","unix","durationFromNow"],"mappings":"2aA0CeA,EAAAA,EAAAA,MAhCuB,WAC9B,IAAAC,EAAwCC,EAAAA,aAAY,SAACC,GAAqB,MAAC,CAC/EC,UAAWD,EAAME,iBAAiBD,UAClCE,UAAWH,EAAME,iBAAiBC,UAClCC,YAAaJ,EAAME,iBAAiBE,gBAH9BD,EAASL,EAAAK,UAAEC,EAAWN,EAAAM,YAAEH,EAASH,EAAAG,UAMnCI,EAAWC,EAAAA,cAMjB,OACEC,gDACGJ,GAAaF,EACZM,EAAA,QAAAC,cAACC,EAAM,QACL,CAAAC,KAAMP,EACNQ,SAAU,IACVC,OAAO,WACPC,MAAM,EACNC,SAZR,SAA4BC,GAC1BV,EAASW,SAASC,eAAeF,EAClC,EAWOG,MAAI,EACJC,iBACA,IAEF,EAIR"}
@@ -0,0 +1,4 @@
1
+ import { type FC } from 'react';
2
+ export declare const PhysicalRecorderView: FC<PhysicalRecorderViewProps>;
3
+ export interface PhysicalRecorderViewProps {
4
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("react");require("../../node_modules/react-redux/es/index.js");var i=require("../../store/index.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/defineProperty.js"),require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/typeof.js"),require("../../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../../node_modules/react-i18next/dist/es/context.js");var r=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var s=require("../Hangup.js"),n=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),a=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),o=require("../../utils/customHooks/useEventListener.js"),l=require("../../utils/genericFunctions/eventDispatch.js"),c=require("../../services/offhour.js");require("../../lib/webrtc/janus.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../../node_modules/mic-check/lib/index.js");var d=require("../../events/RecorderEvents.js"),u=require("./PhysicalRecordingTimer.js"),p=require("../../node_modules/react-redux/es/hooks/useSelector.js"),m=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function f(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var h=f(t);exports.PhysicalRecorderView=function(){var f=p.useSelector((function(e){return e.island})).isOpen,v=p.useSelector((function(e){return{recording:e.physicalRecorder.recording}})).recording,j=i.store.getState().currentUser.username,g=t.useRef(null),x=m.useDispatch();t.useEffect((function(){return x.recorder.setVisibleContainerRef(g),function(){x.recorder.reset()}}),[]);var w=r.useTranslation().t;o.useEventListener("phone-island-physical-recording-open",(function(){!function(){e.__awaiter(this,void 0,void 0,(function(){var t;return e.__generator(this,(function(e){switch(e.label){case 0:return x.physicalRecorder.setRecording(!0),[4,c.startAnnouncementRecording()];case 1:return(t=e.sent()).tempFilename&&x.physicalRecorder.setTempFilename(t.tempFilename),l.eventDispatch("phone-island-recording-started",{}),[2]}}))}))}()}));var y=i.store.getState().physicalRecorder.recordingTempVariable;return o.useEventListener("phone-island-conversations",(function(e){Object.keys(e).forEach((function(t){var i;if(t===j){var r=null===(i=e[t])||void 0===i?void 0:i.conversations;if(r){var s=Object.keys(r);if(s.length>0&&"REC"===r[s[0]].counterpartName){x.physicalRecorder.setStartTime("".concat(Date.now()/1e3));var n=r[s[0]];if(n&&n.chSource){var a={conversationId:n.id,endpointId:n.chSource.callerNum};x.physicalRecorder.setCallRecordingInformations({recordingCallInformation:a})}}0===s.length&&v&&!y&&(d.dispatchPhysicalRecordingSave(),x.island.setIslandView(null),x.physicalRecorder.setRecording(!1))}}}))})),h.default.createElement(h.default.Fragment,null,f?h.default.createElement("div",{className:""},y&&h.default.createElement("div",{className:"pi-flex pi-w-full pi-justify-center pi-items-center pi-pt-4 pi-pb-9"},h.default.createElement("div",{className:"pi-font-medium pi-text-4xl pi-w-fit pi-h-fit dark:pi-text-white"},h.default.createElement(u.default,null))),h.default.createElement("div",{className:"pi-flex pi-w-full pi-justify-center pi-items-center"},y?h.default.createElement("div",{className:"pi-sans pi-text-sm pi-w-fit pi-h-fit dark:pi-text-white"},w("Common.Close the call to stop recording")):h.default.createElement("div",{className:"pi-mt-[3rem] pi-font-regular pi-text-lg pi-w-fit pi-h-fit dark:pi-text-white"},w("Common.Answer phone to start recording"))),h.default.createElement("div",{className:"pi-grid pi-pt-2 pi-mt-8"},h.default.createElement("div",{className:"pi-grid pi-justify-items-center"},h.default.createElement(s.default,{description:w("Tooltip.Interrupt recording"),isPhysicalRecording:!0})))):h.default.createElement("div",{className:"pi-flex pi-justify-between pi-items-center"},h.default.createElement("div",{className:"pi-font-medium pi-text-base"},w("Common.Recording")),h.default.createElement("div",{className:"".concat(f?"pi-h-12 pi-w-12":"pi-h-6 pi-w-6"," pi-flex pi-justify-center pi-items-center")},h.default.createElement("div",{className:"".concat(f?"pi-h-8":"pi-h-4 pi-w-4 pi-rounded-full"," pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden")},h.default.createElement("span",{className:"".concat(f?"pi-w-8 pi-h-8":"pi-h-6 pi-w-6"," pi-animate-ping pi-absolute pi-inline-flex pi-rounded-full pi-bg-red-400 pi-opacity-75 ")}),h.default.createElement(n.FontAwesomeIcon,{className:"pi-w-4 pi-h-6 pi-rotate-45 pi-text-red-500",icon:a.faCircle})))))};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/PhysicalRecorderView/index.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useRef, useEffect } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState, store } from '../../store'\nimport { useTranslation } from 'react-i18next'\nimport Hangup from '../Hangup'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faCircle } from '@fortawesome/free-solid-svg-icons'\nimport { useEventListener, eventDispatch } from '../../utils'\nimport { startAnnouncementRecording } from '../../services/offhour'\nimport { dispatchPhysicalRecordingSave } from '../../events'\nimport PhysicalRecordingTimer from './PhysicalRecordingTimer'\n\nexport const PhysicalRecorderView: FC<PhysicalRecorderViewProps> = () => {\n const { isOpen } = useSelector((state: RootState) => state.island)\n const { recording } = useSelector((state: RootState) => ({\n recording: state.physicalRecorder.recording,\n }))\n\n const { username } = store.getState().currentUser\n const visibleContainerRef = useRef<HTMLDivElement>(null)\n\n // Initialize state dispatch\n const dispatch = useDispatch<Dispatch>()\n\n // Handle view close and reset state\n useEffect(() => {\n // Set visible container reference to recorder state\n dispatch.recorder.setVisibleContainerRef(visibleContainerRef)\n\n return () => {\n dispatch.recorder.reset()\n }\n }, [])\n\n const { t } = useTranslation()\n\n async function handleStart() {\n // Update the recorder state\n dispatch.physicalRecorder.setRecording(true)\n // Call the api to start the recording call\n const data: { tempFilename: string } | null = await startAnnouncementRecording()\n // Set the returned temp file name to the store\n if (data.tempFilename) dispatch.physicalRecorder.setTempFilename(data.tempFilename)\n eventDispatch('phone-island-recording-started', {})\n }\n\n // Save recording inside store and make api request\n useEventListener('phone-island-physical-recording-open', () => {\n handleStart()\n })\n\n const { recordingTempVariable } = store.getState().physicalRecorder\n // recording true and conversation not empty recording is started\n // recording true and conversation empty recording is stopped\n useEventListener('phone-island-conversations', (data: { [key: string]: any }) => {\n const keys = Object.keys(data)\n\n keys.forEach((key) => {\n if (key === username) {\n let conversations = data[key]?.conversations\n\n if (conversations) {\n const conversationKeys = Object.keys(conversations)\n if (\n conversationKeys.length > 0 &&\n conversations[conversationKeys[0]].counterpartName === 'REC'\n ) {\n // Set the start time of recording\n dispatch.physicalRecorder.setStartTime(`${Date.now() / 1000}`)\n let firstConversationKey = conversationKeys[0]\n let userRecordingData = conversations[firstConversationKey]\n if (userRecordingData) {\n if (userRecordingData.chSource) {\n let recordingCallInformation = {\n conversationId: userRecordingData.id,\n endpointId: userRecordingData.chSource.callerNum,\n }\n dispatch.physicalRecorder.setCallRecordingInformations({\n recordingCallInformation,\n })\n }\n }\n }\n if (conversationKeys.length === 0 && recording && !recordingTempVariable) {\n // close physical recording phone island view\n dispatchPhysicalRecordingSave()\n dispatch.island.setIslandView(null)\n dispatch.physicalRecorder.setRecording(false)\n }\n }\n }\n })\n })\n\n return (\n <>\n {isOpen ? (\n <div className=''>\n {recordingTempVariable && (\n <div className='pi-flex pi-w-full pi-justify-center pi-items-center pi-pt-4 pi-pb-9'>\n <div className='pi-font-medium pi-text-4xl pi-w-fit pi-h-fit dark:pi-text-white'>\n <PhysicalRecordingTimer />\n </div>\n </div>\n )}\n <div className='pi-flex pi-w-full pi-justify-center pi-items-center'>\n {recordingTempVariable ? (\n <div className='pi-sans pi-text-sm pi-w-fit pi-h-fit dark:pi-text-white'>\n {t('Common.Close the call to stop recording')}\n </div>\n ) : (\n <div className='pi-mt-[3rem] pi-font-regular pi-text-lg pi-w-fit pi-h-fit dark:pi-text-white'>\n {t('Common.Answer phone to start recording')}\n </div>\n )}\n </div>\n <div className='pi-grid pi-pt-2 pi-mt-8'>\n <div className='pi-grid pi-justify-items-center'>\n <Hangup description={t('Tooltip.Interrupt recording')} isPhysicalRecording />\n </div>\n </div>\n </div>\n ) : (\n <div className='pi-flex pi-justify-between pi-items-center'>\n <div className='pi-font-medium pi-text-base'>{t('Common.Recording')}</div>\n <div\n className={`${\n !isOpen ? 'pi-h-6 pi-w-6' : 'pi-h-12 pi-w-12'\n } pi-flex pi-justify-center pi-items-center`}\n >\n <div\n className={`${\n !isOpen ? 'pi-h-4 pi-w-4 pi-rounded-full' : 'pi-h-8'\n } pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden`}\n >\n <span\n className={`${\n !isOpen ? 'pi-h-6 pi-w-6' : 'pi-w-8 pi-h-8'\n } pi-animate-ping pi-absolute pi-inline-flex pi-rounded-full pi-bg-red-400 pi-opacity-75 `}\n ></span>\n <FontAwesomeIcon\n className='pi-w-4 pi-h-6 pi-rotate-45 pi-text-red-500'\n icon={faCircle}\n ></FontAwesomeIcon>\n </div>\n </div>\n </div>\n )}\n </>\n )\n}\n\nexport interface PhysicalRecorderViewProps {}\n"],"names":["isOpen","useSelector","state","island","recording","physicalRecorder","username","store","getState","currentUser","visibleContainerRef","useRef","dispatch","useDispatch","useEffect","recorder","setVisibleContainerRef","reset","t","useTranslation","useEventListener","setRecording","startAnnouncementRecording","data","_a","sent","tempFilename","setTempFilename","eventDispatch","handleStart","recordingTempVariable","Object","keys","forEach","key","conversations","conversationKeys","length","counterpartName","setStartTime","concat","Date","now","userRecordingData","chSource","recordingCallInformation","conversationId","id","endpointId","callerNum","setCallRecordingInformations","dispatchPhysicalRecordingSave","setIslandView","React","createElement","Fragment","className","PhysicalRecordingTimer","Hangup","description","isPhysicalRecording","FontAwesomeIcon","icon","faCircle"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Timer.js","sources":["../../../src/components/RecorderView/Timer.tsx"],"sourcesContent":["//\n// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n//\n\nimport React, { memo, FC } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport Moment from 'react-moment'\nimport { RootState, Dispatch } from '../../store'\n\nconst Timer: FC<TimerProps> = () => {\n const { startTime, currentTime, recording } = useSelector((state: RootState) => ({\n recording: state.recorder.recording,\n startTime: state.recorder.startTime,\n currentTime: state.recorder.currentTime,\n }))\n\n const dispatch = useDispatch<Dispatch>()\n\n function handleTimerChanged(time: string) {\n dispatch.recorder.setCurrentTime(time)\n }\n\n return (\n <>\n {startTime && recording ? (\n <Moment\n date={startTime}\n interval={1000}\n format='hh:mm:ss'\n trim={false}\n onChange={handleTimerChanged}\n unix\n durationFromNow\n />\n ) : (\n currentTime\n )}\n </>\n )\n}\n\nexport default memo(Timer)\n\ninterface TimerProps {}\n"],"names":["memo","_a","useSelector","state","recording","recorder","startTime","currentTime","dispatch","useDispatch","React","createElement","Moment","date","interval","format","trim","onChange","time","setCurrentTime","unix","durationFromNow"],"mappings":"2aA0CeA,EAAAA,EAAAA,MAhCe,WACtB,IAAAC,EAAwCC,EAAAA,aAAY,SAACC,GAAqB,MAAC,CAC/EC,UAAWD,EAAME,SAASD,UAC1BE,UAAWH,EAAME,SAASC,UAC1BC,YAAaJ,EAAME,SAASE,gBAHtBD,EAASL,EAAAK,UAAEC,EAAWN,EAAAM,YAAEH,EAASH,EAAAG,UAMnCI,EAAWC,EAAAA,cAMjB,OACEC,gDACGJ,GAAaF,EACZM,EAAA,QAAAC,cAACC,EAAM,QACL,CAAAC,KAAMP,EACNQ,SAAU,IACVC,OAAO,WACPC,MAAM,EACNC,SAZR,SAA4BC,GAC1BV,EAASH,SAASc,eAAeD,EAClC,EAWOE,MAAI,EACJC,iBACA,IAEF,EAIR"}
1
+ {"version":3,"file":"Timer.js","sources":["../../../src/components/RecorderView/Timer.tsx"],"sourcesContent":["//\n// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n//\n\nimport React, { memo, FC } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport Moment from 'react-moment'\nimport { RootState, Dispatch } from '../../store'\n\nconst Timer: FC<TimerProps> = () => {\n const { startTime, currentTime, recording } = useSelector((state: RootState) => ({\n recording: state.recorder.recording,\n startTime: state.recorder.startTime,\n currentTime: state.recorder.currentTime,\n }))\n\n const dispatch = useDispatch<Dispatch>()\n\n function handleTimerChanged(time: string) {\n dispatch.recorder.setCurrentTime(time)\n }\n\n return (\n <>\n {startTime && recording ? (\n <Moment\n date={startTime}\n interval={1000}\n format='hh:mm:ss'\n trim={false}\n onChange={handleTimerChanged}\n unix\n durationFromNow\n />\n ) : (\n currentTime\n )}\n </>\n )\n}\n\nexport default memo(Timer)\n\ninterface TimerProps {}\n"],"names":["memo","_a","useSelector","state","recording","recorder","startTime","currentTime","dispatch","useDispatch","React","createElement","Moment","date","interval","format","trim","onChange","time","setCurrentTime","unix","durationFromNow"],"mappings":"2aA0CeA,EAAAA,EAAAA,MAhCe,WACtB,IAAAC,EAAwCC,EAAAA,aAAY,SAACC,GAAqB,MAAC,CAC/EC,UAAWD,EAAME,SAASD,UAC1BE,UAAWH,EAAME,SAASC,UAC1BC,YAAaJ,EAAME,SAASE,gBAHtBD,EAASL,EAAAK,UAAEC,EAAWN,EAAAM,YAAEH,EAASH,EAAAG,UAMnCI,EAAWC,EAAAA,cAMjB,OACEC,gDACGJ,GAAaF,EACZM,EAAA,QAAAC,cAACC,EAAM,QACL,CAAAC,KAAMP,EACNQ,SAAU,IACVC,OAAO,WACPC,MAAM,EACNC,SAZR,SAA4BC,GAC1BV,EAASH,SAASc,eAAeD,EAClC,EAWOE,MAAI,EACJC,iBACA,IAEF,EAIR"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),r=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("./Actions.js"),i=require("./BarsGroup.js"),n=require("../AudioPlayerView/Progress.js"),u=require("../../lib/phone/audio.js"),a=require("../../node_modules/webm-duration-fix/lib/index.js"),s=require("./Timer.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/defineProperty.js"),require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../../node_modules/react-i18next/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 o=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var l=require("../../node_modules/react-redux/es/hooks/useSelector.js"),d=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),c=require("../../node_modules/react-redux/es/utils/shallowEqual.js");function f(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var m=f(r);exports.RecorderView=function(){var f=l.useSelector((function(e){return e.island})).isOpen,p=r.useRef(null),x=r.useRef(null),b=r.useRef([]),h=d.useDispatch(),v=l.useSelector((function(e){return e.webrtc.localAudioStream})),j=l.useSelector((function(e){return{recording:e.recorder.recording,recorded:e.recorder.recorded,waiting:e.recorder.waiting}}),c.default),w=j.recording,_=j.recorded,q=j.waiting;function g(e){b.current.push(e.data)}function E(){return e.__awaiter(this,void 0,void 0,(function(){var r,t;return e.__generator(this,(function(e){switch(e.label){case 0:return[4,a.default(new Blob(b.current,{type:"audio/webm"}))];case 1:return r=e.sent(),t=URL.createObjectURL(r),u.updateAudioPlayerSource(t),[2]}}))}))}r.useEffect((function(){(null==v?void 0:v.active)&&w&&(x.current=new MediaRecorder(v,{mimeType:"audio/webm"}),x.current.ondataavailable=g,x.current.onstop=E,x.current.start())}),[null==v?void 0:v.active,w]),r.useEffect((function(){var e;_&&(b.current=[],null===(e=x.current)||void 0===e||e.stop())}),[_]),r.useEffect((function(){return h.recorder.setVisibleContainerRef(p),function(){h.recorder.reset()}}),[]);var y=o.useTranslation().t;return m.default.createElement(m.default.Fragment,null,f?m.default.createElement(m.default.Fragment,null," ",m.default.createElement("div",{className:"pi-flex pi-w-full pi-justify-center pi-items-center pi-pt-4 pi-pb-9"},m.default.createElement("div",{className:"pi-font-medium pi-text-4xl pi-w-fit pi-h-fit dark:pi-text-white"},m.default.createElement(s.default,null))),m.default.createElement("div",{className:"pi-relative pi-w-full pi-justify-center ".concat(_?"":"pi-h-8"," pi-overflow-x-hidden pi-flex"),ref:p},_?m.default.createElement(n.Progress,null):w&&!q?Array.from({length:2}).map((function(e,r){return m.default.createElement(i.BarsGroup,{key:r,index:r,startAnimation:w,audioStream:v})})):w&&q?m.default.createElement("div",{className:"pi-sans pi-text-sm pi-w-fit pi-h-fit dark:pi-text-white"},y("Common.Start recording message after")):m.default.createElement("div",{className:"pi-sans pi-text-sm pi-w-fit pi-h-fit dark:pi-text-white"},y("Common.Start recording message before"))),m.default.createElement(t.Actions,null)):m.default.createElement("div",{className:"pi-font-medium pi-text-base"},"Recorder"))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),r=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("./Actions.js"),i=require("./BarsGroup.js"),n=require("../AudioPlayerView/Progress.js"),u=require("../../lib/phone/audio.js"),s=require("../../node_modules/webm-duration-fix/lib/index.js"),a=require("./Timer.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/defineProperty.js"),require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../../node_modules/react-i18next/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 o=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var l=require("../../node_modules/react-redux/es/hooks/useSelector.js"),d=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),c=require("../../node_modules/react-redux/es/utils/shallowEqual.js");function f(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var m=f(r),p="audio/webm";exports.RecorderView=function(){var f=l.useSelector((function(e){return e.island})).isOpen,x=r.useRef(null),b=r.useRef(null),h=r.useRef([]),v=d.useDispatch(),j=l.useSelector((function(e){return e.webrtc.localAudioStream})),_=l.useSelector((function(e){return{recording:e.recorder.recording,recorded:e.recorder.recorded,waiting:e.recorder.waiting}}),c.default),w=_.recording,q=_.recorded,g=_.waiting;function E(e){h.current.push(e.data)}function y(){return e.__awaiter(this,void 0,void 0,(function(){var r,t;return e.__generator(this,(function(e){switch(e.label){case 0:return[4,s.default(new Blob(h.current,{type:p}))];case 1:return r=e.sent(),t=URL.createObjectURL(r),u.updateAudioPlayerSource(t),[2]}}))}))}r.useEffect((function(){(null==j?void 0:j.active)&&w&&(b.current=new MediaRecorder(j,{mimeType:p}),b.current.ondataavailable=E,b.current.onstop=y,b.current.start())}),[null==j?void 0:j.active,w]),r.useEffect((function(){var e;q&&(h.current=[],null===(e=b.current)||void 0===e||e.stop())}),[q]),r.useEffect((function(){return v.recorder.setVisibleContainerRef(x),function(){v.recorder.reset()}}),[]);var R=o.useTranslation().t;return m.default.createElement(m.default.Fragment,null,f?m.default.createElement(m.default.Fragment,null," ",m.default.createElement("div",{className:"pi-flex pi-w-full pi-justify-center pi-items-center pi-pt-4 pi-pb-9"},m.default.createElement("div",{className:"pi-font-medium pi-text-4xl pi-w-fit pi-h-fit dark:pi-text-white"},m.default.createElement(a.default,null))),m.default.createElement("div",{className:"pi-relative pi-w-full pi-justify-center ".concat(q?"":"pi-h-8"," pi-overflow-x-hidden pi-flex"),ref:x},q?m.default.createElement(n.Progress,null):w&&!g?Array.from({length:2}).map((function(e,r){return m.default.createElement(i.BarsGroup,{key:r,index:r,startAnimation:w,audioStream:j})})):w&&g?m.default.createElement("div",{className:"pi-sans pi-text-sm pi-w-fit pi-h-fit dark:pi-text-white"},R("Common.Start recording message after")):m.default.createElement("div",{className:"pi-sans pi-text-sm pi-w-fit pi-h-fit dark:pi-text-white"},R("Common.Start recording message before"))),m.default.createElement(t.Actions,null)):m.default.createElement("div",{className:"pi-font-medium pi-text-base"},"Recorder"))};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/RecorderView/index.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useState, useRef, useEffect, useCallback, memo } from 'react'\nimport { useDispatch, useSelector, shallowEqual } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { Actions } from './Actions'\nimport { BarsGroup } from './BarsGroup'\nimport Progress from '../AudioPlayerView/Progress'\nimport { updateAudioPlayerSource } from '../../lib/phone/audio'\nimport fixWebmDuration from 'webm-duration-fix'\nimport Timer from './Timer'\nimport { useTranslation } from 'react-i18next'\n\n// The number of groups to be created\n// ...the minimun to have this effect is 2\nconst BAR_GROUPS_COUNT = 2\n\n// The mime type of the recorded audio\nconst MIME_TYPE = 'audio/webm'\n\nexport const RecorderView: FC<RecorderViewProps> = () => {\n const { isOpen } = useSelector((state: RootState) => state.island)\n const visibleContainerRef = useRef<HTMLDivElement>(null)\n const recorderRef = useRef<MediaRecorder | null>(null)\n const mediaChunks = useRef<BlobPart[]>([])\n\n // Initialize state dispatch\n const dispatch = useDispatch<Dispatch>()\n\n // Retrieve the local audio stream from webrtc state\n const localAudioStream = useSelector((state: RootState) => state.webrtc.localAudioStream)\n\n // Retrieve the local audio stream from recorder state\n const { recording, recorded, waiting } = useSelector(\n (state: RootState) => ({\n recording: state.recorder.recording,\n recorded: state.recorder.recorded,\n waiting: state.recorder.waiting,\n }),\n shallowEqual,\n )\n\n function handleRecordedMedia(event: BlobEvent) {\n mediaChunks.current.push(event.data)\n }\n\n async function handleRecordingStopped() {\n const blob = await fixWebmDuration(new Blob(mediaChunks.current, { type: MIME_TYPE }))\n const audioURL = URL.createObjectURL(blob)\n // The next function is async\n updateAudioPlayerSource(audioURL)\n }\n\n // Handle and manage audio recording start\n useEffect(() => {\n // @ts-ignore\n if (localAudioStream?.active && recording) {\n recorderRef.current = new MediaRecorder(localAudioStream, {\n mimeType: MIME_TYPE,\n })\n recorderRef.current.ondataavailable = handleRecordedMedia\n recorderRef.current.onstop = handleRecordingStopped\n // Start the media recording\n recorderRef.current.start()\n }\n // @ts-ignore\n }, [localAudioStream?.active, recording])\n\n // Handle and manage audio recorded\n useEffect(() => {\n if (recorded) {\n mediaChunks.current = []\n recorderRef.current?.stop()\n }\n }, [recorded])\n\n // Handle view close and reset state\n useEffect(() => {\n // Set visible container reference to recorder state\n dispatch.recorder.setVisibleContainerRef(visibleContainerRef)\n\n return () => {\n dispatch.recorder.reset()\n }\n }, [])\n\n const { t } = useTranslation()\n\n return (\n <>\n {isOpen ? (\n <>\n {' '}\n <div className='pi-flex pi-w-full pi-justify-center pi-items-center pi-pt-4 pi-pb-9'>\n <div className='pi-font-medium pi-text-4xl pi-w-fit pi-h-fit dark:pi-text-white'>\n <Timer />\n </div>\n </div>\n {/* Bars animation section */}\n <div\n className={`pi-relative pi-w-full pi-justify-center ${\n !recorded ? 'pi-h-8' : ''\n } pi-overflow-x-hidden pi-flex`}\n ref={visibleContainerRef}\n >\n {recorded ? (\n <Progress />\n ) : recording && !waiting ? (\n // Create a custom numbers of bars groups\n Array.from({ length: BAR_GROUPS_COUNT }).map((_, i) => (\n <BarsGroup\n key={i}\n index={i}\n startAnimation={recording}\n audioStream={localAudioStream}\n />\n ))\n ) : recording && waiting ? (\n <div className='pi-sans pi-text-sm pi-w-fit pi-h-fit dark:pi-text-white'>\n {t('Common.Start recording message after')}\n </div>\n ) : (\n <div className='pi-sans pi-text-sm pi-w-fit pi-h-fit dark:pi-text-white'>\n {t('Common.Start recording message before')}\n </div>\n )}\n </div>\n {/* Actions section */}\n <Actions />\n </>\n ) : (\n <div className='pi-font-medium pi-text-base'>Recorder</div>\n )}\n </>\n )\n}\n\nexport interface RecorderViewProps {}\n"],"names":["isOpen","useSelector","state","island","visibleContainerRef","useRef","recorderRef","mediaChunks","dispatch","useDispatch","localAudioStream","webrtc","_a","recording","recorder","recorded","waiting","shallowEqual","handleRecordedMedia","event","current","push","data","handleRecordingStopped","fixWebmDuration","Blob","type","blob","sent","audioURL","URL","createObjectURL","updateAudioPlayerSource","useEffect","active","MediaRecorder","mimeType","ondataavailable","onstop","start","stop","setVisibleContainerRef","reset","t","useTranslation","React","createElement","Fragment","className","Timer","concat","ref","Progress","Array","from","length","map","_","i","BarsGroup","key","index","startAnimation","audioStream","Actions"],"mappings":"m0CAqBmD,WACzC,IAAAA,EAAWC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,iBACrDC,EAAsBC,SAAuB,MAC7CC,EAAcD,SAA6B,MAC3CE,EAAcF,SAAmB,IAGjCG,EAAWC,EAAAA,cAGXC,EAAmBT,eAAY,SAACC,GAAqB,OAAAA,EAAMS,OAAOD,gBAAb,IAGrDE,EAAmCX,EAAAA,aACvC,SAACC,GAAqB,MAAC,CACrBW,UAAWX,EAAMY,SAASD,UAC1BE,SAAUb,EAAMY,SAASC,SACzBC,QAASd,EAAMY,SAASE,WAE1BC,EAAAA,SANMJ,EAASD,EAAAC,UAAEE,EAAQH,EAAAG,SAAEC,YAS7B,SAASE,EAAoBC,GAC3BZ,EAAYa,QAAQC,KAAKF,EAAMG,KAChC,CAED,SAAeC,qHACA,KAAA,EAAA,MAAA,CAAA,EAAMC,EAAAA,QAAgB,IAAIC,KAAKlB,EAAYa,QAAS,CAAEM,KA7BrD,+BA6BRC,EAAOf,EAAyEgB,OAChFC,EAAWC,IAAIC,gBAAgBJ,GAErCK,EAAuBA,wBAACH,aACzB,CAGDI,EAAAA,WAAU,YAEJvB,aAAgB,EAAhBA,EAAkBwB,SAAUrB,IAC9BP,EAAYc,QAAU,IAAIe,cAAczB,EAAkB,CACxD0B,SAxCU,eA0CZ9B,EAAYc,QAAQiB,gBAAkBnB,EACtCZ,EAAYc,QAAQkB,OAASf,EAE7BjB,EAAYc,QAAQmB,QAGvB,GAAE,CAAC7B,aAAgB,EAAhBA,EAAkBwB,OAAQrB,IAG9BoB,EAAAA,WAAU,iBACJlB,IACFR,EAAYa,QAAU,GACD,QAArBR,EAAAN,EAAYc,eAAS,IAAAR,GAAAA,EAAA4B,OAEzB,GAAG,CAACzB,IAGJkB,EAAAA,WAAU,WAIR,OAFAzB,EAASM,SAAS2B,uBAAuBrC,GAElC,WACLI,EAASM,SAAS4B,OACpB,CACD,GAAE,IAEK,IAAAC,EAAMC,qBAEd,OACEC,UACGC,cAAAD,EAAA,QAAAE,SAAA,KAAA/C,EACC6C,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACG,IACDF,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,uEACbH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,mEACbH,EAAAA,QAACC,cAAAG,UAAQ,QAIbJ,UAAAC,cAAA,MAAA,CACEE,UAAW,2CAAAE,OACRnC,EAAsB,GAAX,SACiB,iCAC/BoC,IAAK/C,GAEJW,EACC8B,EAAA,QAAAC,cAACM,EAAAA,SAAW,MACVvC,IAAcG,EAEhBqC,MAAMC,KAAK,CAAEC,OA9FF,IA8F8BC,KAAI,SAACC,EAAGC,GAAM,OACrDb,EAAAA,QAAAC,cAACa,EAASA,UACR,CAAAC,IAAKF,EACLG,MAAOH,EACPI,eAAgBjD,EAChBkD,YAAarD,GALsC,IAQrDG,GAAaG,EACf6B,UAAAC,cAAA,MAAA,CAAKE,UAAU,2DACZL,EAAE,yCAGLE,EAAK,QAAAC,cAAA,MAAA,CAAAE,UAAU,2DACZL,EAAE,2CAKTE,EAAAA,QAAAC,cAACkB,EAAAA,QAAU,OAGbnB,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,+BAA6B,YAIpD"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/RecorderView/index.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useState, useRef, useEffect, useCallback, memo } from 'react'\nimport { useDispatch, useSelector, shallowEqual } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { Actions } from './Actions'\nimport { BarsGroup } from './BarsGroup'\nimport Progress from '../AudioPlayerView/Progress'\nimport { updateAudioPlayerSource } from '../../lib/phone/audio'\nimport fixWebmDuration from 'webm-duration-fix'\nimport Timer from './Timer'\nimport { useTranslation } from 'react-i18next'\n\n// The number of groups to be created\n// ...the minimun to have this effect is 2\nconst BAR_GROUPS_COUNT = 2\n\n// The mime type of the recorded audio\nconst MIME_TYPE = 'audio/webm'\n\nexport const RecorderView: FC<RecorderViewProps> = () => {\n const { isOpen } = useSelector((state: RootState) => state.island)\n const visibleContainerRef = useRef<HTMLDivElement>(null)\n const recorderRef = useRef<MediaRecorder | null>(null)\n const mediaChunks = useRef<BlobPart[]>([])\n\n // Initialize state dispatch\n const dispatch = useDispatch<Dispatch>()\n\n // Retrieve the local audio stream from webrtc state\n const localAudioStream = useSelector((state: RootState) => state.webrtc.localAudioStream)\n\n // Retrieve the local audio stream from recorder state\n const { recording, recorded, waiting } = useSelector(\n (state: RootState) => ({\n recording: state.recorder.recording,\n recorded: state.recorder.recorded,\n waiting: state.recorder.waiting,\n }),\n shallowEqual,\n )\n\n function handleRecordedMedia(event: BlobEvent) {\n mediaChunks.current.push(event.data)\n }\n\n async function handleRecordingStopped() {\n const blob = await fixWebmDuration(new Blob(mediaChunks.current, { type: MIME_TYPE }))\n const audioURL = URL.createObjectURL(blob)\n // The next function is async\n updateAudioPlayerSource(audioURL)\n }\n\n // Handle and manage audio recording start\n useEffect(() => {\n // @ts-ignore\n if (localAudioStream?.active && recording) {\n recorderRef.current = new MediaRecorder(localAudioStream, {\n mimeType: MIME_TYPE,\n })\n recorderRef.current.ondataavailable = handleRecordedMedia\n recorderRef.current.onstop = handleRecordingStopped\n // Start the media recording\n recorderRef.current.start()\n }\n // @ts-ignore\n }, [localAudioStream?.active, recording])\n\n // Handle and manage audio recorded\n useEffect(() => {\n if (recorded) {\n mediaChunks.current = []\n recorderRef.current?.stop()\n }\n }, [recorded])\n\n // Handle view close and reset state\n useEffect(() => {\n // Set visible container reference to recorder state\n dispatch.recorder.setVisibleContainerRef(visibleContainerRef)\n\n return () => {\n dispatch.recorder.reset()\n }\n }, [])\n\n const { t } = useTranslation()\n\n return (\n <>\n {isOpen ? (\n <>\n {' '}\n <div className='pi-flex pi-w-full pi-justify-center pi-items-center pi-pt-4 pi-pb-9'>\n <div className='pi-font-medium pi-text-4xl pi-w-fit pi-h-fit dark:pi-text-white'>\n <Timer />\n </div>\n </div>\n {/* Bars animation section */}\n <div\n className={`pi-relative pi-w-full pi-justify-center ${\n !recorded ? 'pi-h-8' : ''\n } pi-overflow-x-hidden pi-flex`}\n ref={visibleContainerRef}\n >\n {recorded ? (\n <Progress />\n ) : recording && !waiting ? (\n // Create a custom numbers of bars groups\n Array.from({ length: BAR_GROUPS_COUNT }).map((_, i) => (\n <BarsGroup\n key={i}\n index={i}\n startAnimation={recording}\n audioStream={localAudioStream}\n />\n ))\n ) : recording && waiting ? (\n <div className='pi-sans pi-text-sm pi-w-fit pi-h-fit dark:pi-text-white'>\n {t('Common.Start recording message after')}\n </div>\n ) : (\n <div className='pi-sans pi-text-sm pi-w-fit pi-h-fit dark:pi-text-white'>\n {t('Common.Start recording message before')}\n </div>\n )}\n </div>\n {/* Actions section */}\n <Actions />\n </>\n ) : (\n <div className='pi-font-medium pi-text-base'>Recorder</div>\n )}\n </>\n )\n}\n\nexport interface RecorderViewProps {}\n"],"names":["MIME_TYPE","isOpen","useSelector","state","island","visibleContainerRef","useRef","recorderRef","mediaChunks","dispatch","useDispatch","localAudioStream","webrtc","_a","recording","recorder","recorded","waiting","shallowEqual","handleRecordedMedia","event","current","push","data","handleRecordingStopped","fixWebmDuration","Blob","type","blob","sent","audioURL","URL","createObjectURL","updateAudioPlayerSource","useEffect","active","MediaRecorder","mimeType","ondataavailable","onstop","start","stop","setVisibleContainerRef","reset","t","useTranslation","React","createElement","Fragment","className","Timer","concat","ref","Progress","Array","from","length","map","_","i","BarsGroup","key","index","startAnimation","audioStream","Actions"],"mappings":"8yCAmBMA,EAAY,kCAEiC,WACzC,IAAAC,EAAWC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,iBACrDC,EAAsBC,SAAuB,MAC7CC,EAAcD,SAA6B,MAC3CE,EAAcF,SAAmB,IAGjCG,EAAWC,EAAAA,cAGXC,EAAmBT,eAAY,SAACC,GAAqB,OAAAA,EAAMS,OAAOD,gBAAb,IAGrDE,EAAmCX,EAAAA,aACvC,SAACC,GAAqB,MAAC,CACrBW,UAAWX,EAAMY,SAASD,UAC1BE,SAAUb,EAAMY,SAASC,SACzBC,QAASd,EAAMY,SAASE,WAE1BC,EAAAA,SANMJ,EAASD,EAAAC,UAAEE,EAAQH,EAAAG,SAAEC,YAS7B,SAASE,EAAoBC,GAC3BZ,EAAYa,QAAQC,KAAKF,EAAMG,KAChC,CAED,SAAeC,qHACA,KAAA,EAAA,MAAA,CAAA,EAAMC,EAAAA,QAAgB,IAAIC,KAAKlB,EAAYa,QAAS,CAAEM,KAAM3B,oBAAnE4B,EAAOf,EAAyEgB,OAChFC,EAAWC,IAAIC,gBAAgBJ,GAErCK,EAAuBA,wBAACH,aACzB,CAGDI,EAAAA,WAAU,YAEJvB,aAAgB,EAAhBA,EAAkBwB,SAAUrB,IAC9BP,EAAYc,QAAU,IAAIe,cAAczB,EAAkB,CACxD0B,SAAUrC,IAEZO,EAAYc,QAAQiB,gBAAkBnB,EACtCZ,EAAYc,QAAQkB,OAASf,EAE7BjB,EAAYc,QAAQmB,QAGvB,GAAE,CAAC7B,aAAgB,EAAhBA,EAAkBwB,OAAQrB,IAG9BoB,EAAAA,WAAU,iBACJlB,IACFR,EAAYa,QAAU,GACD,QAArBR,EAAAN,EAAYc,eAAS,IAAAR,GAAAA,EAAA4B,OAEzB,GAAG,CAACzB,IAGJkB,EAAAA,WAAU,WAIR,OAFAzB,EAASM,SAAS2B,uBAAuBrC,GAElC,WACLI,EAASM,SAAS4B,OACpB,CACD,GAAE,IAEK,IAAAC,EAAMC,qBAEd,OACEC,UACGC,cAAAD,EAAA,QAAAE,SAAA,KAAA/C,EACC6C,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACG,IACDF,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,uEACbH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,mEACbH,EAAAA,QAACC,cAAAG,UAAQ,QAIbJ,UAAAC,cAAA,MAAA,CACEE,UAAW,2CAAAE,OACRnC,EAAsB,GAAX,SACiB,iCAC/BoC,IAAK/C,GAEJW,EACC8B,EAAA,QAAAC,cAACM,EAAAA,SAAW,MACVvC,IAAcG,EAEhBqC,MAAMC,KAAK,CAAEC,OA9FF,IA8F8BC,KAAI,SAACC,EAAGC,GAAM,OACrDb,EAAAA,QAAAC,cAACa,EAASA,UACR,CAAAC,IAAKF,EACLG,MAAOH,EACPI,eAAgBjD,EAChBkD,YAAarD,GALsC,IAQrDG,GAAaG,EACf6B,UAAAC,cAAA,MAAA,CAAKE,UAAU,2DACZL,EAAE,yCAGLE,EAAK,QAAAC,cAAA,MAAA,CAAAE,UAAU,2DACZL,EAAE,2CAKTE,EAAAA,QAAAC,cAACkB,EAAAA,QAAU,OAGbnB,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,+BAA6B,YAIpD"}