@nethesis/phone-island 0.7.126 → 0.7.127

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 (62) hide show
  1. package/dist/App.js +1 -1
  2. package/dist/App.js.map +1 -1
  3. package/dist/components/AudioBars.js +1 -1
  4. package/dist/components/AudioBars.js.map +1 -1
  5. package/dist/components/AudioPlayerView/Avatar.js +1 -1
  6. package/dist/components/AudioPlayerView/Avatar.js.map +1 -1
  7. package/dist/components/AudioPlayerView/Progress.js +1 -1
  8. package/dist/components/AudioPlayerView/Progress.js.map +1 -1
  9. package/dist/components/Button.js +1 -1
  10. package/dist/components/Button.js.map +1 -1
  11. package/dist/components/CallView/Actions.js +1 -1
  12. package/dist/components/CallView/Actions.js.map +1 -1
  13. package/dist/components/CallView/Avatar.js +1 -1
  14. package/dist/components/CallView/Avatar.js.map +1 -1
  15. package/dist/components/CallView/BackCall.js +1 -1
  16. package/dist/components/CallView/BackCall.js.map +1 -1
  17. package/dist/components/CallView/DisplayName.js +1 -1
  18. package/dist/components/CallView/DisplayName.js.map +1 -1
  19. package/dist/components/CallView/Number.js +1 -1
  20. package/dist/components/CallView/Number.js.map +1 -1
  21. package/dist/components/CallView/Timer.d.ts +1 -0
  22. package/dist/components/CallView/Timer.js +1 -1
  23. package/dist/components/CallView/Timer.js.map +1 -1
  24. package/dist/components/CallView/index.js +1 -1
  25. package/dist/components/CallView/index.js.map +1 -1
  26. package/dist/components/Close.js +1 -1
  27. package/dist/components/Close.js.map +1 -1
  28. package/dist/components/Hangup.js +1 -1
  29. package/dist/components/Hangup.js.map +1 -1
  30. package/dist/components/IslandMotion.js +1 -1
  31. package/dist/components/IslandMotion.js.map +1 -1
  32. package/dist/components/KeypadView/index.js +1 -1
  33. package/dist/components/KeypadView/index.js.map +1 -1
  34. package/dist/components/RecorderView/Actions.js +1 -1
  35. package/dist/components/RecorderView/Actions.js.map +1 -1
  36. package/dist/components/RecorderView/Bar.js +1 -1
  37. package/dist/components/RecorderView/Bar.js.map +1 -1
  38. package/dist/components/RecorderView/index.js +1 -1
  39. package/dist/components/RecorderView/index.js.map +1 -1
  40. package/dist/components/SwitchInputView/DropdownContent.js +1 -1
  41. package/dist/components/SwitchInputView/DropdownContent.js.map +1 -1
  42. package/dist/components/TransferView/TransferActions.js +1 -1
  43. package/dist/components/TransferView/TransferActions.js.map +1 -1
  44. package/dist/components/TransferView/TransferList.js +1 -1
  45. package/dist/components/TransferView/TransferList.js.map +1 -1
  46. package/dist/index.css +1 -1
  47. package/dist/lib/darkTheme.d.ts +5 -0
  48. package/dist/lib/darkTheme.js +2 -0
  49. package/dist/lib/darkTheme.js.map +1 -0
  50. package/dist/models/darkTheme.d.ts +26 -0
  51. package/dist/models/darkTheme.js +2 -0
  52. package/dist/models/darkTheme.js.map +1 -0
  53. package/dist/models/index.d.ts +2 -0
  54. package/dist/models/index.js +1 -1
  55. package/dist/models/index.js.map +1 -1
  56. package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js +1 -1
  57. package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js.map +1 -1
  58. package/dist/styles/CustomRange.styles.js +1 -1
  59. package/dist/styles/CustomRange.styles.js.map +1 -1
  60. package/dist/styles/Island.styles.js +1 -1
  61. package/dist/styles/Island.styles.js.map +1 -1
  62. package/package.json +3 -3
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"),o=require("./components/Island.js"),a=require("./components/RestAPI.js"),i=require("./utils/customHooks/useEventListener.js"),r=require("./utils/genericFunctions/eventDispatch.js"),u=require("./utils/genericFunctions/localStorage.js");require("./node_modules/react-redux/es/index.js");var d=require("./store/index.js");require("./node_modules/@fortawesome/react-fontawesome/index.es.js"),require("./node_modules/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("./node_modules/react-redux/es/components/Provider.js");function v(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 m=v(e),j=function(v){var j=v.dataConfig,I=v.showAlways,q=void 0!==I&&I,E=c.Base64.atob(j||"").split(":"),g=E[0],w=E[1],S=E[2],k=E[3],b=E[4],D=E[5],_=E[6],x=e.useState(!1),y=x[0],L=x[1],C=e.useState(!1),N=C[0],P=C[1],A=e.useState(!1),O=A[0],R=A[1];e.useEffect((function(){var e=new Worker(l.default,{type:"module"});return e.onmessage=function(e){"wakeup"===e.data&&L(!0)},function(){e.terminate()}}),[]),e.useEffect((function(){O&&N&&(L(!1),P(!1),R(!1))}),[O,N]),i.useEventListener("phone-island-call-keypad-close",(function(){d.store.dispatch.island.setIslandView("call"),r.eventDispatch("phone-island-call-keypad-closed",{})})),i.useEventListener("phone-island-call-transfer-close",(function(){d.store.dispatch.island.setIslandView("call"),r.eventDispatch("phone-island-call-transfer-closed",{})})),i.useEventListener("phone-island-recording-close",(function(){d.store.dispatch.island.setIslandView(null),r.eventDispatch("phone-island-recording-closed",{})})),i.useEventListener("phone-island-audio-player-close",(function(){d.store.dispatch.island.setIslandView(null),r.eventDispatch("phone-island-audio-player-closed",{})})),i.useEventListener("phone-island-detach",(function(e){h.detach(),d.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),r.eventDispatch("phone-island-detached",{})})),i.useEventListener("phone-island-audio-input-change",(function(e){u.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=d.store.getState().player.remoteAudio;null==t||t.current.setSinkId(e.deviceId).then((function(){console.info("Default audio output device change with success!"),u.setJSONItem("phone-island-audio-output-device",{deviceId:e.deviceId}),r.eventDispatch("phone-island-audio-output-changed",{})})).catch((function(e){console.error("Default audio output device change error:",e)}))}));var T=e.useState(!0),V=T[0],F=T[1],H=e.useState(!0),J=H[0],W=H[1];e.useEffect((function(){V&&(p.loadI18n(),F(!1))}),[V]);var B=d.store.getState().player.remoteAudio;return e.useEffect((function(){var e;if(J&&B){var t=null===(e=u.getJSONItem("phone-island-audio-output-device"))||void 0===e?void 0:e.deviceId;r.eventDispatch("phone-island-audio-output-change",{deviceId:t}),W(!1)}}),[J,B]),m.default.createElement(m.default.Fragment,null,m.default.createElement(f.default,{store:d.store},m.default.createElement(s.WebRTC,{hostName:g,sipExten:k,sipSecret:b,sipHost:D,sipPort:_,reload:y,reloadedCallback:function(){return P(!0)}},m.default.createElement(a.RestAPI,{hostName:g,username:w,authToken:S},m.default.createElement(n.Socket,{hostName:g,username:w,authToken:S,reload:y,reloadedCallback:function(){return R(!0)}},m.default.createElement(t.Events,{sipHost:D},m.default.createElement(o.Island,{showAlways:q})))))))};j.displayName="PhoneIsland",exports.PhoneIsland=j;
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"),o=require("./components/Island.js"),a=require("./components/RestAPI.js"),i=require("./utils/customHooks/useEventListener.js"),r=require("./utils/genericFunctions/eventDispatch.js"),u=require("./utils/genericFunctions/localStorage.js");require("./node_modules/react-redux/es/index.js");var d=require("./store/index.js");require("./node_modules/@fortawesome/react-fontawesome/index.es.js"),require("./node_modules/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"),m=require("./node_modules/react-redux/es/components/Provider.js");function v(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=v(e),E=function(v){var E=v.dataConfig,q=v.showAlways,I=void 0!==q&&q,g=c.Base64.atob(E||"").split(":"),k=g[0],w=g[1],S=g[2],b=g[3],D=g[4],_=g[5],x=g[6],y=e.useState(!1),L=y[0],T=y[1],C=e.useState(!1),N=C[0],P=C[1],A=e.useState(!1),O=A[0],R=A[1];e.useEffect((function(){var e=new Worker(l.default,{type:"module"});return e.onmessage=function(e){"wakeup"===e.data&&T(!0)},function(){e.terminate()}}),[]),e.useEffect((function(){O&&N&&(T(!1),P(!1),R(!1))}),[O,N]),i.useEventListener("phone-island-call-keypad-close",(function(){d.store.dispatch.island.setIslandView("call"),r.eventDispatch("phone-island-call-keypad-closed",{})})),i.useEventListener("phone-island-call-transfer-close",(function(){d.store.dispatch.island.setIslandView("call"),r.eventDispatch("phone-island-call-transfer-closed",{})})),i.useEventListener("phone-island-recording-close",(function(){d.store.dispatch.island.setIslandView(null),r.eventDispatch("phone-island-recording-closed",{})})),i.useEventListener("phone-island-audio-player-close",(function(){d.store.dispatch.island.setIslandView(null),r.eventDispatch("phone-island-audio-player-closed",{})})),i.useEventListener("phone-island-detach",(function(e){h.detach(),d.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),r.eventDispatch("phone-island-detached",{})})),i.useEventListener("phone-island-audio-input-change",(function(e){u.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=d.store.getState().player.remoteAudio;null==t||t.current.setSinkId(e.deviceId).then((function(){console.info("Default audio output device change with success!"),u.setJSONItem("phone-island-audio-output-device",{deviceId:e.deviceId}),r.eventDispatch("phone-island-audio-output-changed",{})})).catch((function(e){console.error("Default audio output device change error:",e)}))}));var V=e.useState(!0),F=V[0],H=V[1],J=e.useState(!0),W=J[0],B=J[1];e.useEffect((function(){F&&(p.loadI18n(),H(!1))}),[F]);var M=d.store.getState().player.remoteAudio;return e.useEffect((function(){var e;if(W&&M){var t=null===(e=u.getJSONItem("phone-island-audio-output-device"))||void 0===e?void 0:e.deviceId;r.eventDispatch("phone-island-audio-output-change",{deviceId:t}),B(!1)}}),[W,M]),e.useEffect((function(){f.checkDarkTheme()}),[]),i.useEventListener("phone-island-theme-change",(function(e){f.setTheme(null==e?void 0:e.selectedTheme)})),j.default.createElement(j.default.Fragment,null,j.default.createElement(m.default,{store:d.store},j.default.createElement(s.WebRTC,{hostName:k,sipExten:b,sipSecret:D,sipHost:_,sipPort:x,reload:L,reloadedCallback:function(){return P(!0)}},j.default.createElement(a.RestAPI,{hostName:k,username:w,authToken:S},j.default.createElement(n.Socket,{hostName:k,username:w,authToken:S,reload:L,reloadedCallback:function(){return R(!0)}},j.default.createElement(t.Events,{sipHost:_},j.default.createElement(o.Island,{showAlways:I})))))))};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'\n\nimport 'react-tooltip/dist/react-tooltip.css'\nimport { useEventListener, eventDispatch, setJSONItem, getJSONItem } from './utils'\nimport { detach } from './lib/webrtc/messages'\n\ninterface PhoneIslandProps {\n dataConfig: string\n showAlways?: boolean\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport const PhoneIsland: FC<PhoneIslandProps> = ({ dataConfig, showAlways = false }) => {\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-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()\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 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 >\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 >\n <Events sipHost={SIP_HOST}>\n <Island showAlways={showAlways} />\n </Events>\n </Socket>\n </RestAPI>\n </WebRTC>\n </Provider>\n </>\n )\n}\n\nPhoneIsland.displayName = 'PhoneIsland'\n"],"names":["PhoneIsland","_a","dataConfig","_b","showAlways","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","SIP_HOST","SIP_PORT","_c","useState","reload","setReload","_d","reloadedWebRTC","setReloadedWebRTC","_e","reloadedSocket","setReloadedSocket","useEffect","worker","Worker","wakeUpWorker","type","onmessage","event","data","terminate","useEventListener","store","dispatch","island","setIslandView","eventDispatch","detach","currentUser","updateCurrentDefaultDevice","deviceInformationObject","setJSONItem","deviceId","remoteAudioElement","getState","player","remoteAudio","current","setSinkId","then","console","info","catch","err","error","_f","firstRenderI18n","setFirstRenderI18n","_g","firstAudioOutputInit","setFirstAudioOutputInit","loadI18n","defaultAudioOutputDevice","getJSONItem","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'\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 showAlways?: boolean\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport const PhoneIsland: FC<PhoneIslandProps> = ({ dataConfig, showAlways = false }) => {\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-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()\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 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 >\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 >\n <Events sipHost={SIP_HOST}>\n <Island showAlways={showAlways} />\n </Events>\n </Socket>\n </RestAPI>\n </WebRTC>\n </Provider>\n </>\n )\n}\n\nPhoneIsland.displayName = 'PhoneIsland'\n"],"names":["PhoneIsland","_a","dataConfig","_b","showAlways","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","SIP_HOST","SIP_PORT","_c","useState","reload","setReload","_d","reloadedWebRTC","setReloadedWebRTC","_e","reloadedSocket","setReloadedSocket","useEffect","worker","Worker","wakeUpWorker","type","onmessage","event","data","terminate","useEventListener","store","dispatch","island","setIslandView","eventDispatch","detach","currentUser","updateCurrentDefaultDevice","deviceInformationObject","setJSONItem","deviceId","remoteAudioElement","getState","player","remoteAudio","current","setSinkId","then","console","info","catch","err","error","_f","firstRenderI18n","setFirstRenderI18n","_g","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":"6vCAsBaA,EAAoC,SAACC,GAAE,IAAAC,eAAYC,EAAAF,EAAAG,WAAAA,OAAU,IAAAD,GAAQA,EAC1EE,EAAmBC,EAAMA,OAACC,KAAKL,GAAc,IAAIM,MAAM,KACvDC,EAAoBJ,EAAO,GAC3BK,EAAmBL,EAAO,GAC1BM,EAAqBN,EAAO,GAC5BO,EAAoBP,EAAO,GAC3BQ,EAAqBR,EAAO,GAC5BS,EAAmBT,EAAO,GAC1BU,EAAmBV,EAAO,GAG1BW,EAAsBC,EAAAA,UAAkB,GAAvCC,EAAMF,EAAA,GAAEG,EAASH,EAAA,GAClBI,EAAsCH,EAAAA,UAAkB,GAAvDI,EAAcD,EAAA,GAAEE,EAAiBF,EAAA,GAClCG,EAAsCN,EAAAA,UAAkB,GAAvDO,EAAcD,EAAA,GAAEE,EAAiBF,EAAA,GAExCG,EAAAA,WAAU,WACR,IAAMC,EAAS,IAAIC,OAAOC,EAAAA,QAAc,CAAEC,KAAM,WAQhD,OAPAH,EAAOI,UAAY,SAACC,GAEC,WAAfA,EAAMC,MACRd,GAAU,EAEd,EAEO,WACLQ,EAAOO,WACT,CACD,GAAE,IAEHR,EAAAA,WAAU,WACJF,GAAkBH,IACpBF,GAAU,GACVG,GAAkB,GAClBG,GAAkB,GAEtB,GAAG,CAACD,EAAgBH,IAEpBc,EAAgBA,iBAAC,kCAAkC,WACjDC,EAAAA,MAAMC,SAASC,OAAOC,cAAc,QACpCC,gBAAc,kCAAmC,CAAA,EACnD,IACAL,EAAgBA,iBAAC,oCAAoC,WACnDC,EAAAA,MAAMC,SAASC,OAAOC,cAAc,QACpCC,gBAAc,oCAAqC,CAAA,EACrD,IACAL,EAAgBA,iBAAC,gCAAgC,WAC/CC,EAAAA,MAAMC,SAASC,OAAOC,cAAc,MACpCC,gBAAc,gCAAiC,CAAA,EACjD,IACAL,EAAgBA,iBAAC,mCAAmC,WAClDC,EAAAA,MAAMC,SAASC,OAAOC,cAAc,MACpCC,gBAAc,mCAAoC,CAAA,EACpD,IAEAL,mBAAiB,uBAAuB,SAACF,GACvCQ,EAAAA,SACAL,EAAAA,MAAMC,SAASK,YAAYC,2BAA2BV,aAAA,EAAAA,EAAMW,yBAC5DJ,gBAAc,wBAAyB,CAAA,EACzC,IAEAL,mBAAiB,mCAAmC,SAACF,GACnDY,EAAWA,YAAC,kCAAmC,CAAEC,SAAUb,EAAKa,WAChEN,gBAAc,mCAAoC,CAAA,EACpD,IACAL,mBAAiB,oCAAoC,SAACF,GACpD,IAAMc,EAA0BX,EAAKA,MAACY,WAAWC,OAAOC,YAExDH,SAAAA,EAAoBI,QACjBC,UAAUnB,EAAKa,UACfO,MAAK,WACJC,QAAQC,KAAK,oDAEbV,EAAWA,YAAC,mCAAoC,CAAEC,SAAUb,EAAKa,WAGjEN,gBAAc,oCAAqC,CAAA,EACrD,IACCgB,OAAM,SAAUC,GACfH,QAAQI,MAAM,4CAA6CD,EAC7D,GACJ,IAEM,IAAAE,EAAwC1C,EAAAA,UAAS,GAAhD2C,EAAeD,EAAA,GAAEE,EAAkBF,EAAA,GACpCG,EAAkD7C,EAAAA,UAAS,GAA1D8C,EAAoBD,EAAA,GAAEE,EAAuBF,EAAA,GAGpDpC,EAAAA,WAAU,WACJkC,IACFK,EAAAA,WACAJ,GAAmB,GAEvB,GAAG,CAACD,IAEJ,IAAMb,EAA0BX,EAAKA,MAACY,WAAWC,OAAOC,YAqBxD,OAlBAxB,EAAAA,WAAU,iBACR,GAAIqC,GAAwBhB,EAAoB,CAC9C,IAAMmB,EAEH,QAFmCjE,EAAAkE,EAAWA,YAC/C,2CACC,IAAAlE,OAAA,EAAAA,EAAA6C,SACHN,EAAAA,cAAc,mCAAoC,CAAEM,SAAUoB,IAC9DF,GAAwB,EACzB,CACH,GAAG,CAACD,EAAsBhB,IAE1BrB,EAAAA,WAAU,WACR0C,EAAAA,gBACD,GAAE,IAEHjC,mBAAiB,6BAA6B,SAACkC,GAC7CC,WAASD,eAAAA,EAAOE,cAClB,IAGEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAAAC,cAACE,EAAAA,QAAQ,CAACvC,MAAOA,EAAAA,OACfoC,UAAAC,cAACG,EAAMA,OAAA,CACLC,SAAUpE,EACVqE,SAAUlE,EACVmE,UAAWlE,EACXmE,QAASlE,EACTmE,QAASlE,EACTG,OAAQA,EACRgE,iBAAkB,WAAM,OAAA5D,GAAkB,KAE1CkD,UAAAC,cAACU,EAAOA,QAAA,CAACN,SAAUpE,EAAW2E,SAAU1E,EAAU2E,UAAW1E,GAC3D6D,EAAC,QAAAC,cAAAa,SACC,CAAAT,SAAUpE,EACV2E,SAAU1E,EACV2E,UAAW1E,EACXO,OAAQA,EACRgE,iBAAkB,WAAM,OAAAzD,GAAkB,KAE1C+C,EAAAA,QAAAC,cAACc,EAAAA,OAAM,CAACP,QAASlE,GACf0D,UAAAC,cAACe,EAAMA,OAAA,CAACpF,WAAYA,SAQpC,EAEAJ,EAAYyF,YAAc"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var r=require("../store/index.js"),t=require("../node_modules/react-redux/es/hooks/useDispatch.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=n(e),c={0:4,1:3,2:2,3:1,4:1,5:2,6:3,7:4},i={0:2,1:1,2:1,3:2};exports.AudioBars=function(n){var a=n.audioStream,o=void 0===a?null:a,s=n.audioElement,l=void 0===s?null:s,d=n.paused,f=n.size,m=e.useRef(null),p=e.useRef(null),v="large"===f?c:i,y=e.useRef(null),h=e.useRef(null),A=e.useRef(null),E=t.useDispatch();function x(){var e;if(h&&h.current){var r=new Uint8Array(h.current.frequencyBinCount);h.current.getByteFrequencyData(r);var t=Object.values(r),n=null===(e=m.current)||void 0===e?void 0:e.children;if(n&&(null==n?void 0:n.length)>0){for(var u=0;u<Object.keys(v).length;++u){var c=t[v[u]]/255,i=n&&n[u]&&n[u].style;i&&c>0&&(i.height="".concat(100*c,"%"))}j()}}}function j(){var e,r=requestAnimationFrame(x);(e=r)&&(p.current=e)}return e.useEffect((function(){var e=r.store.getState().audioBars,t=e.audioElementContext,n=e.audioElementAnalyser,u=e.audioElementSource,c=e.isReady;return l&&c?(y.current=t,h.current=n,A.current=u):(y.current=new AudioContext,h.current=y.current.createAnalyser(),h.current.smoothingTimeConstant=.8,h.current.fftSize=32,o?A.current=y.current.createMediaStreamSource(o):l&&(A.current=y.current.createMediaElementSource(l),E.audioBars.setAudioElementContext(y.current),E.audioBars.setAudioElementAnalyser(h.current),E.audioBars.setAudioElementSource(A.current),E.audioBars.setIsReady(!0))),h.current&&A.current&&A.current.connect(h.current),l&&y.current&&h.current&&h.current.connect(y.current.destination),j(),function(){var e;p.current&&cancelAnimationFrame(p.current),null===(e=A.current)||void 0===e||e.disconnect()}}),[]),e.useEffect((function(){p.current&&(d?cancelAnimationFrame(p.current):(cancelAnimationFrame(p.current),j()))}),[f,d]),u.default.createElement("div",{className:"".concat("small"===f?"pi-h-6 pi-w-6":"pi-h-12 pi-w-12"," pi-flex pi-justify-center pi-items-center")},u.default.createElement("div",{className:"".concat("small"===f?"pi-h-6":"pi-h-8"," pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden"),ref:m},(o||l)&&Object.keys(v).map((function(e){return u.default.createElement("span",{key:e,className:"pi-bg-emerald-600 pi-w-0.5 pi-rounded-sm"})}))))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var r=require("../store/index.js"),t=require("../node_modules/react-redux/es/hooks/useDispatch.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=n(e),c={0:4,1:3,2:2,3:1,4:1,5:2,6:3,7:4},a={0:2,1:1,2:1,3:2};exports.AudioBars=function(n){var i=n.audioStream,o=void 0===i?null:i,s=n.audioElement,l=void 0===s?null:s,d=n.paused,f=n.size,m=e.useRef(null),p=e.useRef(null),v="large"===f?c:a,y=e.useRef(null),h=e.useRef(null),A=e.useRef(null),E=t.useDispatch();function x(){var e;if(h&&h.current){var r=new Uint8Array(h.current.frequencyBinCount);h.current.getByteFrequencyData(r);var t=Object.values(r),n=null===(e=m.current)||void 0===e?void 0:e.children;if(n&&(null==n?void 0:n.length)>0){for(var u=0;u<Object.keys(v).length;++u){var c=t[v[u]]/255,a=n&&n[u]&&n[u].style;a&&c>0&&(a.height="".concat(100*c,"%"))}g()}}}function g(){var e,r=requestAnimationFrame(x);(e=r)&&(p.current=e)}return e.useEffect((function(){var e=r.store.getState().audioBars,t=e.audioElementContext,n=e.audioElementAnalyser,u=e.audioElementSource,c=e.isReady;return l&&c?(y.current=t,h.current=n,A.current=u):(y.current=new AudioContext,h.current=y.current.createAnalyser(),h.current.smoothingTimeConstant=.8,h.current.fftSize=32,o?A.current=y.current.createMediaStreamSource(o):l&&(A.current=y.current.createMediaElementSource(l),E.audioBars.setAudioElementContext(y.current),E.audioBars.setAudioElementAnalyser(h.current),E.audioBars.setAudioElementSource(A.current),E.audioBars.setIsReady(!0))),h.current&&A.current&&A.current.connect(h.current),l&&y.current&&h.current&&h.current.connect(y.current.destination),g(),function(){var e;p.current&&cancelAnimationFrame(p.current),null===(e=A.current)||void 0===e||e.disconnect()}}),[]),e.useEffect((function(){p.current&&(d?cancelAnimationFrame(p.current):(cancelAnimationFrame(p.current),g()))}),[f,d]),u.default.createElement("div",{className:"".concat("small"===f?"pi-h-6 pi-w-6":"pi-h-12 pi-w-12"," pi-flex pi-justify-center pi-items-center")},u.default.createElement("div",{className:"".concat("small"===f?"pi-h-6":"pi-h-8"," pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden"),ref:m},(o||l)&&Object.keys(v).map((function(e){return u.default.createElement("span",{key:e,className:"pi-bg-emerald-700 dark:pi-bg-emerald-600 pi-w-0.5 pi-rounded-sm"})}))))};
2
2
  //# sourceMappingURL=AudioBars.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AudioBars.js","sources":["../../src/components/AudioBars.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useEffect, useRef } from 'react'\nimport { ContextSourceType } from '../models/audioBars'\nimport { useDispatch } from 'react-redux'\nimport { store } from '../store'\nimport { Dispatch } from '../store'\n\n// The map for the large versione of the audio bars\nconst LARGE = {\n 0: 4,\n 1: 3,\n 2: 2,\n 3: 1,\n 4: 1,\n 5: 2,\n 6: 3,\n 7: 4,\n}\n\n// The map for the small versione of the audio bars\nconst SMALL = {\n 0: 2,\n 1: 1,\n 2: 1,\n 3: 2,\n}\n\n/**\n * This component shows a dynamic audio spectrum given an audio stream\n *\n * @param audioStream An audio stream to analyse\n * @param audioElement An audio element to analyse\n */\nexport const AudioBars: FC<AudioBarsProps> = ({\n audioStream = null,\n audioElement = null,\n paused,\n size,\n}) => {\n // Initialize the main elements\n const containerElement = useRef<HTMLDivElement | null>(null)\n const animationRequest = useRef<number | null>(null)\n const barsMap: BarsMapType = size === 'large' ? LARGE : SMALL\n const context = useRef<AudioContext | null>(null)\n const analyser = useRef<AnalyserNode | null>(null)\n const source = useRef<ContextSourceType>(null)\n const dispatch = useDispatch<Dispatch>()\n\n function saveAnimationRequest(requestId: number) {\n if (requestId) {\n animationRequest.current = requestId\n }\n }\n\n // The function that renders the frames of animation\n function animation() {\n if (analyser && analyser.current) {\n const frequencyData = new Uint8Array(analyser.current.frequencyBinCount)\n analyser.current.getByteFrequencyData(frequencyData)\n const values = Object.values(frequencyData)\n\n const bars = containerElement.current?.children\n if (bars && bars?.length > 0) {\n // Change styles to every bar\n for (let i = 0; i < Object.keys(barsMap).length; ++i) {\n const value = values[barsMap[i]] / 255\n // @ts-ignore\n const barStyles = bars && bars[i] && bars[i].style\n if (barStyles && value > 0) {\n barStyles.height = `${100 * value}%`\n }\n }\n startAnimation()\n }\n }\n }\n\n function startAnimation() {\n const animationRequestId: number = requestAnimationFrame(animation)\n saveAnimationRequest(animationRequestId)\n }\n\n useEffect(() => {\n const { audioElementContext, audioElementAnalyser, audioElementSource, isReady } =\n store.getState().audioBars\n // Initialize audio context and analyser once\n if (audioElement && isReady) {\n // The source is an audio element\n context.current = audioElementContext\n analyser.current = audioElementAnalyser\n source.current = audioElementSource\n } else {\n // The source is an audio stream or isn't ready\n context.current = new AudioContext()\n analyser.current = context.current.createAnalyser()\n analyser.current.smoothingTimeConstant = 0.8\n analyser.current.fftSize = 32\n // Create the media source stream\n if (audioStream) {\n source.current = context.current.createMediaStreamSource(audioStream)\n } else if (audioElement) {\n source.current = context.current.createMediaElementSource(audioElement)\n // Save the audio elements to stores\n dispatch.audioBars.setAudioElementContext(context.current)\n dispatch.audioBars.setAudioElementAnalyser(analyser.current)\n dispatch.audioBars.setAudioElementSource(source.current)\n dispatch.audioBars.setIsReady(true)\n }\n }\n\n // Connect the audio source to the analyser\n analyser.current && source.current && source.current.connect(analyser.current)\n if (audioElement) {\n // Connect the analyser to the destination of the context\n context.current && analyser.current && analyser.current.connect(context.current.destination)\n }\n startAnimation()\n\n // Cleanup bars animation\n return () => {\n animationRequest.current && cancelAnimationFrame(animationRequest.current)\n source.current?.disconnect()\n }\n }, [])\n\n useEffect(() => {\n if (animationRequest.current) {\n if (!paused) {\n cancelAnimationFrame(animationRequest.current)\n startAnimation()\n } else {\n cancelAnimationFrame(animationRequest.current)\n }\n }\n }, [size, paused])\n\n return (\n <div\n className={`${\n size === 'small' ? 'pi-h-6 pi-w-6' : 'pi-h-12 pi-w-12'\n } pi-flex pi-justify-center pi-items-center`}\n >\n {/* The bars container */}\n <div\n className={`${\n size === 'small' ? 'pi-h-6' : 'pi-h-8'\n } pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden`}\n ref={containerElement}\n >\n {/* Every single bar */}\n {(audioStream || audioElement) &&\n Object.keys(barsMap).map((key) => (\n <span key={key} className='pi-bg-emerald-600 pi-w-0.5 pi-rounded-sm'></span>\n ))}\n </div>\n </div>\n )\n}\n\ninterface AudioBarsProps {\n audioStream?: MediaStream | null\n audioElement?: HTMLAudioElement | null\n size?: 'large' | 'small'\n paused?: boolean\n}\n\ninterface BarsMapType {\n [key: number]: number\n}\n"],"names":["LARGE","SMALL","_a","_b","audioStream","_c","audioElement","paused","size","containerElement","useRef","animationRequest","barsMap","context","analyser","source","dispatch","useDispatch","animation","current","frequencyData","Uint8Array","frequencyBinCount","getByteFrequencyData","values","Object","bars","children","length","i","keys","value","barStyles","style","height","concat","startAnimation","requestId","animationRequestId","requestAnimationFrame","useEffect","store","getState","audioBars","audioElementContext","audioElementAnalyser","audioElementSource","isReady","AudioContext","createAnalyser","smoothingTimeConstant","fftSize","createMediaStreamSource","createMediaElementSource","setAudioElementContext","setAudioElementAnalyser","setAudioElementSource","setIsReady","connect","destination","cancelAnimationFrame","disconnect","React","createElement","className","ref","map","key"],"mappings":"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"}
1
+ {"version":3,"file":"AudioBars.js","sources":["../../src/components/AudioBars.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useEffect, useRef } from 'react'\nimport { ContextSourceType } from '../models/audioBars'\nimport { useDispatch } from 'react-redux'\nimport { store } from '../store'\nimport { Dispatch } from '../store'\n\n// The map for the large versione of the audio bars\nconst LARGE = {\n 0: 4,\n 1: 3,\n 2: 2,\n 3: 1,\n 4: 1,\n 5: 2,\n 6: 3,\n 7: 4,\n}\n\n// The map for the small versione of the audio bars\nconst SMALL = {\n 0: 2,\n 1: 1,\n 2: 1,\n 3: 2,\n}\n\n/**\n * This component shows a dynamic audio spectrum given an audio stream\n *\n * @param audioStream An audio stream to analyse\n * @param audioElement An audio element to analyse\n */\nexport const AudioBars: FC<AudioBarsProps> = ({\n audioStream = null,\n audioElement = null,\n paused,\n size,\n}) => {\n // Initialize the main elements\n const containerElement = useRef<HTMLDivElement | null>(null)\n const animationRequest = useRef<number | null>(null)\n const barsMap: BarsMapType = size === 'large' ? LARGE : SMALL\n const context = useRef<AudioContext | null>(null)\n const analyser = useRef<AnalyserNode | null>(null)\n const source = useRef<ContextSourceType>(null)\n const dispatch = useDispatch<Dispatch>()\n\n function saveAnimationRequest(requestId: number) {\n if (requestId) {\n animationRequest.current = requestId\n }\n }\n\n // The function that renders the frames of animation\n function animation() {\n if (analyser && analyser.current) {\n const frequencyData = new Uint8Array(analyser.current.frequencyBinCount)\n analyser.current.getByteFrequencyData(frequencyData)\n const values = Object.values(frequencyData)\n\n const bars = containerElement.current?.children\n if (bars && bars?.length > 0) {\n // Change styles to every bar\n for (let i = 0; i < Object.keys(barsMap).length; ++i) {\n const value = values[barsMap[i]] / 255\n // @ts-ignore\n const barStyles = bars && bars[i] && bars[i].style\n if (barStyles && value > 0) {\n barStyles.height = `${100 * value}%`\n }\n }\n startAnimation()\n }\n }\n }\n\n function startAnimation() {\n const animationRequestId: number = requestAnimationFrame(animation)\n saveAnimationRequest(animationRequestId)\n }\n\n useEffect(() => {\n const { audioElementContext, audioElementAnalyser, audioElementSource, isReady } =\n store.getState().audioBars\n // Initialize audio context and analyser once\n if (audioElement && isReady) {\n // The source is an audio element\n context.current = audioElementContext\n analyser.current = audioElementAnalyser\n source.current = audioElementSource\n } else {\n // The source is an audio stream or isn't ready\n context.current = new AudioContext()\n analyser.current = context.current.createAnalyser()\n analyser.current.smoothingTimeConstant = 0.8\n analyser.current.fftSize = 32\n // Create the media source stream\n if (audioStream) {\n source.current = context.current.createMediaStreamSource(audioStream)\n } else if (audioElement) {\n source.current = context.current.createMediaElementSource(audioElement)\n // Save the audio elements to stores\n dispatch.audioBars.setAudioElementContext(context.current)\n dispatch.audioBars.setAudioElementAnalyser(analyser.current)\n dispatch.audioBars.setAudioElementSource(source.current)\n dispatch.audioBars.setIsReady(true)\n }\n }\n\n // Connect the audio source to the analyser\n analyser.current && source.current && source.current.connect(analyser.current)\n if (audioElement) {\n // Connect the analyser to the destination of the context\n context.current && analyser.current && analyser.current.connect(context.current.destination)\n }\n startAnimation()\n\n // Cleanup bars animation\n return () => {\n animationRequest.current && cancelAnimationFrame(animationRequest.current)\n source.current?.disconnect()\n }\n }, [])\n\n useEffect(() => {\n if (animationRequest.current) {\n if (!paused) {\n cancelAnimationFrame(animationRequest.current)\n startAnimation()\n } else {\n cancelAnimationFrame(animationRequest.current)\n }\n }\n }, [size, paused])\n\n return (\n <div\n className={`${\n size === 'small' ? 'pi-h-6 pi-w-6' : 'pi-h-12 pi-w-12'\n } pi-flex pi-justify-center pi-items-center`}\n >\n {/* The bars container */}\n <div\n className={`${\n size === 'small' ? 'pi-h-6' : 'pi-h-8'\n } pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden`}\n ref={containerElement}\n >\n {/* Every single bar */}\n {(audioStream || audioElement) &&\n Object.keys(barsMap).map((key) => (\n <span key={key} className='pi-bg-emerald-700 dark:pi-bg-emerald-600 pi-w-0.5 pi-rounded-sm'></span>\n ))}\n </div>\n </div>\n )\n}\n\ninterface AudioBarsProps {\n audioStream?: MediaStream | null\n audioElement?: HTMLAudioElement | null\n size?: 'large' | 'small'\n paused?: boolean\n}\n\ninterface BarsMapType {\n [key: number]: number\n}\n"],"names":["LARGE","SMALL","_a","_b","audioStream","_c","audioElement","paused","size","containerElement","useRef","animationRequest","barsMap","context","analyser","source","dispatch","useDispatch","animation","current","frequencyData","Uint8Array","frequencyBinCount","getByteFrequencyData","values","Object","bars","children","length","i","keys","value","barStyles","style","height","concat","startAnimation","requestId","animationRequestId","requestAnimationFrame","useEffect","store","getState","audioBars","audioElementContext","audioElementAnalyser","audioElementSource","isReady","AudioContext","createAnalyser","smoothingTimeConstant","fftSize","createMediaStreamSource","createMediaElementSource","setAudioElementContext","setAudioElementAnalyser","setAudioElementSource","setIsReady","connect","destination","cancelAnimationFrame","disconnect","React","createElement","className","ref","map","key"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),o=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js");require("../../node_modules/framer-motion/dist/framer-motion.js"),require("../../node_modules/react-redux/es/index.js");var t=require("../../node_modules/react-redux/es/hooks/useSelector.js"),i=require("../../_virtual/framer-motion.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=n(e);exports.Avatar=function(e){var n=e.type,a=t.useSelector((function(e){return e.island})).isOpen;return s.default.createElement(i.framerMotion.exports.motion.div,{animate:a?{width:"48px",height:"48px",borderRadius:"12px"}:{width:"24px",height:"24px",borderRadius:"6px"},className:"pi-w-12 pi-h-12 pi-bg-gray-500 pi-rounded-xl pi-flex pi-items-center pi-justify-center pi-flex-shrink-0 pi-flex-grow-0"},"announcement"===n?s.default.createElement(r.FontAwesomeIcon,{size:a?"2xl":"lg",icon:o.faBullhorn}):"call_recording"===n?s.default.createElement(r.FontAwesomeIcon,{size:a?"2xl":"lg",icon:o.faVoicemail}):s.default.createElement(r.FontAwesomeIcon,{size:a?"2xl":"lg",icon:o.faMusic}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),t=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js");require("../../node_modules/framer-motion/dist/framer-motion.js"),require("../../node_modules/react-redux/es/index.js");var o=require("../../node_modules/react-redux/es/hooks/useSelector.js"),i=require("../../_virtual/framer-motion.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=n(e);exports.Avatar=function(e){var n=e.type,a=o.useSelector((function(e){return e.island})).isOpen;return s.default.createElement(i.framerMotion.exports.motion.div,{animate:a?{width:"48px",height:"48px",borderRadius:"12px"}:{width:"24px",height:"24px",borderRadius:"6px"},className:"pi-w-12 pi-h-12 pi-bg-gray-500 pi-rounded-xl pi-flex pi-items-center pi-justify-center pi-flex-shrink-0 pi-flex-grow-0"},"announcement"===n?s.default.createElement(r.FontAwesomeIcon,{size:a?"2xl":"lg",icon:t.faBullhorn}):"call_recording"===n?s.default.createElement(r.FontAwesomeIcon,{size:a?"2xl":"lg",icon:t.faVoicemail}):s.default.createElement(r.FontAwesomeIcon,{size:a?"2xl":"lg",icon:t.faMusic,className:"pi-text-gray-50 dark:pi-text-gray-50"}))};
2
2
  //# sourceMappingURL=Avatar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.js","sources":["../../../src/components/AudioPlayerView/Avatar.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport { type TypeTypes } from '../../types'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faBullhorn, faVoicemail, faMusic } from '@fortawesome/free-solid-svg-icons'\nimport { motion } from 'framer-motion/dist/framer-motion'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\n\nexport const Avatar: FC<AvatarProps> = ({ type }) => {\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n return (\n <motion.div\n animate={\n isOpen\n ? { width: '48px', height: '48px', borderRadius: '12px' }\n : { width: '24px', height: '24px', borderRadius: '6px' }\n }\n className='pi-w-12 pi-h-12 pi-bg-gray-500 pi-rounded-xl pi-flex pi-items-center pi-justify-center pi-flex-shrink-0 pi-flex-grow-0'\n >\n {type === 'announcement' ? (\n <FontAwesomeIcon size={isOpen ? '2xl' : 'lg'} icon={faBullhorn} />\n ) : type === 'call_recording' ? (\n <FontAwesomeIcon size={isOpen ? '2xl' : 'lg'} icon={faVoicemail} />\n ) : (\n <FontAwesomeIcon size={isOpen ? '2xl' : 'lg'} icon={faMusic} />\n )}\n </motion.div>\n )\n}\n\nexport interface AvatarProps {\n type?: TypeTypes | null\n}\n"],"names":["_a","type","isOpen","useSelector","state","island","React","motion","div","animate","width","height","borderRadius","className","createElement","FontAwesomeIcon","size","icon","faBullhorn","faVoicemail","faMusic"],"mappings":"okBAWuC,SAACA,GAAE,IAAAC,EAAID,EAAAC,KACpCC,EAAWC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,iBAE3D,OACEC,EAAAA,sBAACC,EAAAA,aAAAA,QAAAA,OAAOC,IACN,CAAAC,QACEP,EACI,CAAEQ,MAAO,OAAQC,OAAQ,OAAQC,aAAc,QAC/C,CAAEF,MAAO,OAAQC,OAAQ,OAAQC,aAAc,OAErDC,UAAU,0HAEA,iBAATZ,EACCK,EAAAA,QAAAQ,cAACC,kBAAgB,CAAAC,KAAMd,EAAS,MAAQ,KAAMe,KAAMC,EAAUA,aACnD,mBAATjB,EACFK,UAAAQ,cAACC,EAAeA,gBAAC,CAAAC,KAAMd,EAAS,MAAQ,KAAMe,KAAME,EAAAA,cAEpDb,wBAACS,EAAeA,gBAAA,CAACC,KAAMd,EAAS,MAAQ,KAAMe,KAAMG,EAAAA,UAI5D"}
1
+ {"version":3,"file":"Avatar.js","sources":["../../../src/components/AudioPlayerView/Avatar.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 { type TypeTypes } from '../../types'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faBullhorn, faVoicemail, faMusic } from '@fortawesome/free-solid-svg-icons'\nimport { motion } from 'framer-motion/dist/framer-motion'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\n\nexport const Avatar: FC<AvatarProps> = ({ type }) => {\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n return (\n <motion.div\n animate={\n isOpen\n ? { width: '48px', height: '48px', borderRadius: '12px' }\n : { width: '24px', height: '24px', borderRadius: '6px' }\n }\n className='pi-w-12 pi-h-12 pi-bg-gray-500 pi-rounded-xl pi-flex pi-items-center pi-justify-center pi-flex-shrink-0 pi-flex-grow-0'\n >\n {type === 'announcement' ? (\n <FontAwesomeIcon size={isOpen ? '2xl' : 'lg'} icon={faBullhorn} />\n ) : type === 'call_recording' ? (\n <FontAwesomeIcon size={isOpen ? '2xl' : 'lg'} icon={faVoicemail} />\n ) : (\n <FontAwesomeIcon size={isOpen ? '2xl' : 'lg'} icon={faMusic} className='pi-text-gray-50 dark:pi-text-gray-50' />\n )}\n </motion.div>\n )\n}\n\nexport interface AvatarProps {\n type?: TypeTypes | null\n}\n"],"names":["_a","type","isOpen","useSelector","state","island","React","motion","div","animate","width","height","borderRadius","className","createElement","FontAwesomeIcon","size","icon","faBullhorn","faVoicemail","faMusic"],"mappings":"okBAWuC,SAACA,GAAE,IAAAC,EAAID,EAAAC,KACpCC,EAAWC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,iBAE3D,OACEC,EAAAA,sBAACC,EAAAA,aAAAA,QAAAA,OAAOC,IACN,CAAAC,QACEP,EACI,CAAEQ,MAAO,OAAQC,OAAQ,OAAQC,aAAc,QAC/C,CAAEF,MAAO,OAAQC,OAAQ,OAAQC,aAAc,OAErDC,UAAU,0HAEA,iBAATZ,EACCK,EAAC,QAAAQ,cAAAC,EAAAA,gBAAgB,CAAAC,KAAMd,EAAS,MAAQ,KAAMe,KAAMC,eACzC,mBAATjB,EACFK,wBAACS,EAAAA,gBAAe,CAACC,KAAMd,EAAS,MAAQ,KAAMe,KAAME,gBAEpDb,EAAAA,sBAACS,EAAeA,gBAAA,CAACC,KAAMd,EAAS,MAAQ,KAAMe,KAAMG,EAAAA,QAASP,UAAU,yCAI/E"}
@@ -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 t=require("../../utils/genericFunctions/player.js"),r=require("../../styles/CustomRange.styles.js"),a=require("../../node_modules/react-redux/es/hooks/useSelector.js"),u=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=n(e),i=function(){var n=a.useSelector((function(e){return e.player})),i=n.audioPlayer,o=n.audioPlayerPlaying,l=n.audioPlayerTrackDuration,c=e.useRef(),d=e.useRef(),f=e.useState("00:00"),m=f[0],p=f[1],y=e.useState(),v=y[0],g=y[1],h=u.useDispatch(),x=e.useState(l&&Math.round(l)||0),j=x[0],q=x[1],E=e.useCallback((function(){var e,r=null===(e=null==i?void 0:i.current)||void 0===e?void 0:e.currentTime;r&&p(t.formatTime(Math.round(r))),c.current.value=r,j&&r&&c.current.style.setProperty("--range-progress","".concat(r/j*100,"%")),d.current=requestAnimationFrame(E)}),[i,j,c]);return e.useEffect((function(){o?d.current=requestAnimationFrame(E):cancelAnimationFrame(d.current)}),[o]),e.useEffect((function(){l&&(q(Math.round(l)),g(t.formatTime(l)))}),[l]),e.useEffect((function(){return function(){cancelAnimationFrame(d.current)}}),[]),s.default.createElement("div",{className:"pi-w-full pi-h-fit"},s.default.createElement(r.StyledCustomRange,{"data-stop-propagation":!0,ref:c,defaultValue:0,type:"range",step:"1",min:"0",max:j&&j||0,onChange:function(){h.player.setAudioPlayerCurrentTime(c.current.value)}}),s.default.createElement("div",{className:"pi-flex pi-justify-between pi-mt-1"},s.default.createElement("div",{className:"pi-font-bold"},m),s.default.createElement("div",{className:"pi-font-bold"},v)))};exports.Progress=i,exports.default=i;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("../../utils/genericFunctions/player.js"),r=require("../../styles/CustomRange.styles.js"),a=require("../../node_modules/react-redux/es/hooks/useSelector.js"),u=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=n(e),i=function(){var n=a.useSelector((function(e){return e.player})),i=n.audioPlayer,o=n.audioPlayerPlaying,l=n.audioPlayerTrackDuration,c=e.useRef(),d=e.useRef(),f=e.useState("00:00"),m=f[0],p=f[1],y=e.useState(),v=y[0],g=y[1],x=u.useDispatch(),h=e.useState(l&&Math.round(l)||0),j=h[0],q=h[1],E=e.useCallback((function(){var e,r=null===(e=null==i?void 0:i.current)||void 0===e?void 0:e.currentTime;r&&p(t.formatTime(Math.round(r))),c.current.value=r,j&&r&&c.current.style.setProperty("--range-progress","".concat(r/j*100,"%")),d.current=requestAnimationFrame(E)}),[i,j,c]);return e.useEffect((function(){o?d.current=requestAnimationFrame(E):cancelAnimationFrame(d.current)}),[o]),e.useEffect((function(){l&&(q(Math.round(l)),g(t.formatTime(l)))}),[l]),e.useEffect((function(){return function(){cancelAnimationFrame(d.current)}}),[]),s.default.createElement("div",{className:"pi-w-full pi-h-fit"},s.default.createElement(r.StyledCustomRange,{"data-stop-propagation":!0,ref:c,defaultValue:0,type:"range",step:"1",min:"0",max:j&&j||0,onChange:function(){x.player.setAudioPlayerCurrentTime(c.current.value)},className:"pi-text-gray-400 dark:pi-text-gray-50"}),s.default.createElement("div",{className:"pi-flex pi-justify-between pi-mt-1"},s.default.createElement("div",{className:"pi-font-bold"},m),s.default.createElement("div",{className:"pi-font-bold"},v)))};exports.Progress=i,exports.default=i;
2
2
  //# sourceMappingURL=Progress.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Progress.js","sources":["../../../src/components/AudioPlayerView/Progress.tsx"],"sourcesContent":["import React, { type FC, useState, useEffect, useRef, useCallback } from 'react'\nimport { useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { formatTime } from '../../utils/genericFunctions/player'\nimport { useDispatch } from 'react-redux'\nimport { StyledCustomRange } from '../../styles/CustomRange.styles'\n\nexport const Progress: FC<ProgressTypes> = () => {\n const { audioPlayer, audioPlayerPlaying, audioPlayerTrackDuration } = useSelector(\n (state: RootState) => state.player,\n )\n const progressBarRef = useRef<any>()\n const progressAnimationRef = useRef<any>()\n const [timeProgress, setTimeProgress] = useState<string>('00:00')\n const [displayDuration, setDisplayDuration] = useState<string>()\n const dispatch = useDispatch<Dispatch>()\n const [trackDuration, setTrackDuration] = useState<number>(\n (audioPlayerTrackDuration && Math.round(audioPlayerTrackDuration)) || 0,\n )\n\n const progressAnimation = useCallback(() => {\n const currentTime = audioPlayer?.current?.currentTime\n currentTime && setTimeProgress(formatTime(Math.round(currentTime)))\n progressBarRef.current.value = currentTime\n trackDuration &&\n currentTime &&\n progressBarRef.current.style.setProperty(\n '--range-progress',\n `${(currentTime / trackDuration) * 100}%`,\n )\n progressAnimationRef.current = requestAnimationFrame(progressAnimation)\n }, [audioPlayer, trackDuration, progressBarRef])\n\n useEffect(() => {\n if (audioPlayerPlaying) {\n progressAnimationRef.current = requestAnimationFrame(progressAnimation)\n } else {\n cancelAnimationFrame(progressAnimationRef.current)\n }\n }, [audioPlayerPlaying])\n\n useEffect(() => {\n if (audioPlayerTrackDuration) {\n setTrackDuration(Math.round(audioPlayerTrackDuration))\n setDisplayDuration(formatTime(audioPlayerTrackDuration))\n }\n }, [audioPlayerTrackDuration])\n\n useEffect(() => {\n return () => {\n cancelAnimationFrame(progressAnimationRef.current)\n }\n }, [])\n\n function handleProgressChange() {\n dispatch.player.setAudioPlayerCurrentTime(progressBarRef.current.value)\n }\n\n return (\n <div className='pi-w-full pi-h-fit'>\n <StyledCustomRange\n data-stop-propagation={true}\n ref={progressBarRef}\n defaultValue={0}\n type='range'\n step='1'\n min='0'\n max={(trackDuration && trackDuration) || 0}\n onChange={handleProgressChange}\n />\n <div className='pi-flex pi-justify-between pi-mt-1'>\n <div className='pi-font-bold'>{timeProgress}</div>\n <div className='pi-font-bold'>{displayDuration}</div>\n </div>\n </div>\n )\n}\n\nexport default Progress\n\nexport interface ProgressTypes {}\n"],"names":["Progress","_a","useSelector","state","player","audioPlayer","audioPlayerPlaying","audioPlayerTrackDuration","progressBarRef","useRef","progressAnimationRef","_b","useState","timeProgress","setTimeProgress","_c","displayDuration","setDisplayDuration","dispatch","useDispatch","_d","Math","round","trackDuration","setTrackDuration","progressAnimation","useCallback","currentTime","current","formatTime","value","style","setProperty","requestAnimationFrame","useEffect","cancelAnimationFrame","React","createElement","className","StyledCustomRange","ref","defaultValue","type","step","min","max","onChange","setAudioPlayerCurrentTime"],"mappings":"odAOaA,EAA8B,WACnC,IAAAC,EAAgEC,EAAAA,aACpE,SAACC,GAAqB,OAAAA,EAAMC,UADtBC,EAAWJ,EAAAI,YAAEC,EAAkBL,EAAAK,mBAAEC,EAAwBN,EAAAM,yBAG3DC,EAAiBC,EAAAA,SACjBC,EAAuBD,EAAAA,SACvBE,EAAkCC,EAAAA,SAAiB,SAAlDC,EAAYF,EAAA,GAAEG,EAAeH,EAAA,GAC9BI,EAAwCH,aAAvCI,EAAeD,EAAA,GAAEE,EAAkBF,EAAA,GACpCG,EAAWC,EAAAA,cACXC,EAAoCR,EAAAA,SACvCL,GAA4Bc,KAAKC,MAAMf,IAA8B,GADjEgB,EAAaH,EAAA,GAAEI,EAAgBJ,EAAA,GAIhCK,EAAoBC,EAAAA,aAAY,iBAC9BC,EAAoC,QAAtB1B,EAAAI,aAAA,EAAAA,EAAauB,eAAS,IAAA3B,OAAA,EAAAA,EAAA0B,YAC1CA,GAAeb,EAAgBe,aAAWR,KAAKC,MAAMK,KACrDnB,EAAeoB,QAAQE,MAAQH,EAC/BJ,GACEI,GACAnB,EAAeoB,QAAQG,MAAMC,YAC3B,mBACA,UAAIL,EAAcJ,EAAiB,IAAG,MAE1Cb,EAAqBkB,QAAUK,sBAAsBR,EACtD,GAAE,CAACpB,EAAakB,EAAef,IA2BhC,OAzBA0B,EAAAA,WAAU,WACJ5B,EACFI,EAAqBkB,QAAUK,sBAAsBR,GAErDU,qBAAqBzB,EAAqBkB,QAE9C,GAAG,CAACtB,IAEJ4B,EAAAA,WAAU,WACJ3B,IACFiB,EAAiBH,KAAKC,MAAMf,IAC5BU,EAAmBY,EAAAA,WAAWtB,IAElC,GAAG,CAACA,IAEJ2B,EAAAA,WAAU,WACR,OAAO,WACLC,qBAAqBzB,EAAqBkB,QAC5C,CACD,GAAE,IAODQ,EAAA,QAAAC,cAAA,MAAA,CAAKC,UAAU,sBACbF,EAAAA,QAAAC,cAACE,oBACwB,CAAA,yBAAA,EACvBC,IAAKhC,EACLiC,aAAc,EACdC,KAAK,QACLC,KAAK,IACLC,IAAI,IACJC,IAAMtB,GAAiBA,GAAkB,EACzCuB,SAdN,WACE5B,EAASd,OAAO2C,0BAA0BvC,EAAeoB,QAAQE,MAClE,IAcGM,EAAAA,QAAKC,cAAA,MAAA,CAAAC,UAAU,sCACbF,EAAA,QAAAC,cAAA,MAAA,CAAKC,UAAU,gBAAgBzB,GAC/BuB,UAAKC,cAAA,MAAA,CAAAC,UAAU,gBAAgBtB,IAIvC"}
1
+ {"version":3,"file":"Progress.js","sources":["../../../src/components/AudioPlayerView/Progress.tsx"],"sourcesContent":["import React, { type FC, useState, useEffect, useRef, useCallback } from 'react'\nimport { useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { formatTime } from '../../utils/genericFunctions/player'\nimport { useDispatch } from 'react-redux'\nimport { StyledCustomRange } from '../../styles/CustomRange.styles'\n\nexport const Progress: FC<ProgressTypes> = () => {\n const { audioPlayer, audioPlayerPlaying, audioPlayerTrackDuration } = useSelector(\n (state: RootState) => state.player,\n )\n const progressBarRef = useRef<any>()\n const progressAnimationRef = useRef<any>()\n const [timeProgress, setTimeProgress] = useState<string>('00:00')\n const [displayDuration, setDisplayDuration] = useState<string>()\n const dispatch = useDispatch<Dispatch>()\n const [trackDuration, setTrackDuration] = useState<number>(\n (audioPlayerTrackDuration && Math.round(audioPlayerTrackDuration)) || 0,\n )\n\n const progressAnimation = useCallback(() => {\n const currentTime = audioPlayer?.current?.currentTime\n currentTime && setTimeProgress(formatTime(Math.round(currentTime)))\n progressBarRef.current.value = currentTime\n trackDuration &&\n currentTime &&\n progressBarRef.current.style.setProperty(\n '--range-progress',\n `${(currentTime / trackDuration) * 100}%`,\n )\n progressAnimationRef.current = requestAnimationFrame(progressAnimation)\n }, [audioPlayer, trackDuration, progressBarRef])\n\n useEffect(() => {\n if (audioPlayerPlaying) {\n progressAnimationRef.current = requestAnimationFrame(progressAnimation)\n } else {\n cancelAnimationFrame(progressAnimationRef.current)\n }\n }, [audioPlayerPlaying])\n\n useEffect(() => {\n if (audioPlayerTrackDuration) {\n setTrackDuration(Math.round(audioPlayerTrackDuration))\n setDisplayDuration(formatTime(audioPlayerTrackDuration))\n }\n }, [audioPlayerTrackDuration])\n\n useEffect(() => {\n return () => {\n cancelAnimationFrame(progressAnimationRef.current)\n }\n }, [])\n\n function handleProgressChange() {\n dispatch.player.setAudioPlayerCurrentTime(progressBarRef.current.value)\n }\n\n return (\n <div className='pi-w-full pi-h-fit'>\n <StyledCustomRange\n data-stop-propagation={true}\n ref={progressBarRef}\n defaultValue={0}\n type='range'\n step='1'\n min='0'\n max={(trackDuration && trackDuration) || 0}\n onChange={handleProgressChange}\n className='pi-text-gray-400 dark:pi-text-gray-50'\n />\n <div className='pi-flex pi-justify-between pi-mt-1'>\n <div className='pi-font-bold'>{timeProgress}</div>\n <div className='pi-font-bold'>{displayDuration}</div>\n </div>\n </div>\n )\n}\n\nexport default Progress\n\nexport interface ProgressTypes {}\n"],"names":["Progress","_a","useSelector","state","player","audioPlayer","audioPlayerPlaying","audioPlayerTrackDuration","progressBarRef","useRef","progressAnimationRef","_b","useState","timeProgress","setTimeProgress","_c","displayDuration","setDisplayDuration","dispatch","useDispatch","_d","Math","round","trackDuration","setTrackDuration","progressAnimation","useCallback","currentTime","current","formatTime","value","style","setProperty","requestAnimationFrame","useEffect","cancelAnimationFrame","React","createElement","className","StyledCustomRange","ref","defaultValue","type","step","min","max","onChange","setAudioPlayerCurrentTime"],"mappings":"odAOaA,EAA8B,WACnC,IAAAC,EAAgEC,EAAAA,aACpE,SAACC,GAAqB,OAAAA,EAAMC,UADtBC,EAAWJ,EAAAI,YAAEC,EAAkBL,EAAAK,mBAAEC,EAAwBN,EAAAM,yBAG3DC,EAAiBC,EAAAA,SACjBC,EAAuBD,EAAAA,SACvBE,EAAkCC,EAAAA,SAAiB,SAAlDC,EAAYF,EAAA,GAAEG,EAAeH,EAAA,GAC9BI,EAAwCH,aAAvCI,EAAeD,EAAA,GAAEE,EAAkBF,EAAA,GACpCG,EAAWC,EAAAA,cACXC,EAAoCR,EAAAA,SACvCL,GAA4Bc,KAAKC,MAAMf,IAA8B,GADjEgB,EAAaH,EAAA,GAAEI,EAAgBJ,EAAA,GAIhCK,EAAoBC,EAAAA,aAAY,iBAC9BC,EAAoC,QAAtB1B,EAAAI,aAAA,EAAAA,EAAauB,eAAS,IAAA3B,OAAA,EAAAA,EAAA0B,YAC1CA,GAAeb,EAAgBe,aAAWR,KAAKC,MAAMK,KACrDnB,EAAeoB,QAAQE,MAAQH,EAC/BJ,GACEI,GACAnB,EAAeoB,QAAQG,MAAMC,YAC3B,mBACA,UAAIL,EAAcJ,EAAiB,IAAG,MAE1Cb,EAAqBkB,QAAUK,sBAAsBR,EACtD,GAAE,CAACpB,EAAakB,EAAef,IA2BhC,OAzBA0B,EAAAA,WAAU,WACJ5B,EACFI,EAAqBkB,QAAUK,sBAAsBR,GAErDU,qBAAqBzB,EAAqBkB,QAE9C,GAAG,CAACtB,IAEJ4B,EAAAA,WAAU,WACJ3B,IACFiB,EAAiBH,KAAKC,MAAMf,IAC5BU,EAAmBY,EAAAA,WAAWtB,IAElC,GAAG,CAACA,IAEJ2B,EAAAA,WAAU,WACR,OAAO,WACLC,qBAAqBzB,EAAqBkB,QAC5C,CACD,GAAE,IAODQ,EAAA,QAAAC,cAAA,MAAA,CAAKC,UAAU,sBACbF,EAAAA,QAAAC,cAACE,oBACwB,CAAA,yBAAA,EACvBC,IAAKhC,EACLiC,aAAc,EACdC,KAAK,QACLC,KAAK,IACLC,IAAI,IACJC,IAAMtB,GAAiBA,GAAkB,EACzCuB,SAdN,WACE5B,EAASd,OAAO2C,0BAA0BvC,EAAeoB,QAAQE,MAClE,EAaKQ,UAAU,0CAEZF,EAAAA,QAAKC,cAAA,MAAA,CAAAC,UAAU,sCACbF,EAAA,QAAAC,cAAA,MAAA,CAAKC,UAAU,gBAAgBzB,GAC/BuB,UAAKC,cAAA,MAAA,CAAAC,UAAU,gBAAgBtB,IAIvC"}
@@ -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"),i=require("../utils/genericFunctions/classNames.js");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(r);exports.Button=function(r){var a=r.children,n=r.variant,o=r.active,s=void 0!==o&&o,p=r.className,c=void 0===p?"":p,u=e.__rest(r,["children","variant","active","className"]),d={base:"pi-flex pi-font-sans pi-font-light pi-content-center pi-items-center pi-justify-center pi-tracking-wide pi-duration-200 pi-transform pi-outline-none focus:pi-ring-2 focus:pi-z-20 focus:pi-ring-offset-2 disabled:pi-opacity-75 pi-text-white pi-border pi-border-transparent focus:pi-ring-offset-black pi-rounded-full pi-text-sm pi-leading-4 pi-h-12 pi-w-12 pi-col-start-auto pi-transition-color pi-shrink-0",variant:{red:"pi-bg-red-600 enabled:hover:pi-bg-red-700 focus:pi-ring-red-500",green:"pi-bg-green-600 enabled:hover:pi-bg-green-700 focus:pi-ring-green-500",default:"enabled:hover:pi-bg-gray-500 focus:pi-ring-gray-500",neutral:"pi-bg-transparent enabled:hover:pi-bg-gray-500 enabled:hover:pi-border-gray-500 pi-border pi-border-gray-700 focus:pi-ring-0",transparent:"pi-bg-transparent enabled:hover:pi-bg-gray-500 focus:pi-ring-gray-500"},background:{base:{default:"pi-bg-gray-700"},active:{default:"pi-bg-gray-500"}}};return t.default.createElement(t.default.Fragment,null,t.default.createElement("button",e.__assign({"data-stop-propagation":!0,className:i.classNames(s&&d.background.active[n]?d.background.active[n]:d.background.base[n]&&d.background.base[n],d.base,n&&d.variant[n],c&&c)},u),a))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),r=require("react"),i=require("../utils/genericFunctions/classNames.js");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=a(r);exports.Button=function(r){var a=r.children,n=r.variant,p=r.active,o=void 0!==p&&p,s=r.className,g=void 0===s?"":s,d=e.__rest(r,["children","variant","active","className"]),c={base:"pi-flex pi-font-sans pi-font-light pi-content-center pi-items-center pi-justify-center pi-tracking-wide pi-duration-200 pi-transform pi-outline-none focus:pi-ring-2 focus:pi-z-20 focus:pi-ring-offset-2 disabled:pi-opacity-75 pi-border pi-border-transparent focus:pi-ring-offset-black pi-rounded-full pi-text-sm pi-leading-4 pi-h-12 pi-w-12 pi-col-start-auto pi-transition-color pi-shrink-0",variant:{red:"dark:pi-bg-red-600 pi-bg-red-700 enabled:hover:pi-bg-red-700 focus:pi-ring-red-500 pi-text-white",green:"pi-bg-green-600 enabled:hover:pi-bg-green-700 focus:pi-ring-green-500 pi-text-white",default:"enabled:hover:pi-bg-gray-500 focus:pi-ring-gray-500 pi-text-white",neutral:"pi-bg-transparent enabled:hover:pi-bg-gray-500 enabled:hover:pi-border-gray-500 pi-border pi-border-gray-700 focus:pi-ring-0",transparent:"pi-bg-transparent dark:enabled:hover:pi-bg-gray-500 enabled:hover:pi-bg-gray-400 focus:pi-ring-offset-gray-200 dark:focus:pi-ring-gray-500 dark:focus:pi-ring-gray-500 focus:pi-ring-gray-400 dark:pi-text-white"},background:{base:{default:"pi-bg-gray-700"},active:{default:"pi-bg-gray-500"}}};return t.default.createElement(t.default.Fragment,null,t.default.createElement("button",e.__assign({"data-stop-propagation":!0,className:i.classNames(o&&c.background.active[n]?c.background.active[n]:c.background.base[n]&&c.background.base[n],c.base,n&&c.variant[n],g&&g)},d),a))};
2
2
  //# sourceMappingURL=Button.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Button.js","sources":["../../src/components/Button.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC, ReactNode, ComponentPropsWithRef } from 'react'\nimport { classNames } from '../utils'\n\ninterface ButtonProps extends ComponentPropsWithRef<'button'> {\n children: ReactNode\n variant: 'red' | 'green' | 'default' | 'neutral' | 'transparent'\n active?: boolean\n}\n\nexport const Button: FC<ButtonProps> = ({\n children,\n variant,\n active = false,\n className = '',\n ...props\n}) => {\n const classes = {\n base: 'pi-flex pi-font-sans pi-font-light pi-content-center pi-items-center pi-justify-center pi-tracking-wide pi-duration-200 pi-transform pi-outline-none focus:pi-ring-2 focus:pi-z-20 focus:pi-ring-offset-2 disabled:pi-opacity-75 pi-text-white pi-border pi-border-transparent focus:pi-ring-offset-black pi-rounded-full pi-text-sm pi-leading-4 pi-h-12 pi-w-12 pi-col-start-auto pi-transition-color pi-shrink-0',\n variant: {\n red: 'pi-bg-red-600 enabled:hover:pi-bg-red-700 focus:pi-ring-red-500',\n green: 'pi-bg-green-600 enabled:hover:pi-bg-green-700 focus:pi-ring-green-500',\n default: 'enabled:hover:pi-bg-gray-500 focus:pi-ring-gray-500',\n neutral:\n 'pi-bg-transparent enabled:hover:pi-bg-gray-500 enabled:hover:pi-border-gray-500 pi-border pi-border-gray-700 focus:pi-ring-0',\n transparent: 'pi-bg-transparent enabled:hover:pi-bg-gray-500 focus:pi-ring-gray-500',\n },\n background: {\n base: {\n default: 'pi-bg-gray-700',\n },\n active: {\n default: 'pi-bg-gray-500',\n },\n },\n }\n\n return (\n <>\n <button\n data-stop-propagation={true}\n className={classNames(\n active && classes.background.active[variant]\n ? classes.background.active[variant]\n : classes.background.base[variant] && classes.background.base[variant],\n classes.base,\n variant && classes.variant[variant],\n className && className,\n )}\n {...props}\n >\n {children}\n </button>\n </>\n )\n}\n"],"names":["_a","children","variant","_b","active","_c","className","props","__rest","classes","base","red","green","default","neutral","transparent","background","React","createElement","Fragment","__assign","classNames"],"mappings":"kSAYuC,SAACA,GACtC,IAAAC,aACAC,YACAC,EAAAH,EAAAI,OAAAA,OAAS,IAAAD,KACTE,EAAAL,EAAAM,UAAAA,OAAY,IAAAD,EAAA,KACTE,EALmCC,EAAAA,OAAAR,EAAA,CAAA,WAAA,UAAA,SAAA,cAOhCS,EAAU,CACdC,KAAM,sZACNR,QAAS,CACPS,IAAK,kEACLC,MAAO,wEACPC,QAAS,sDACTC,QACE,+HACFC,YAAa,yEAEfC,WAAY,CACVN,KAAM,CACJG,QAAS,kBAEXT,OAAQ,CACNS,QAAS,oBAKf,OACEI,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAAAC,cAAA,SAAAE,EAAAA,SAAA,CAAA,yBACyB,EACvBd,UAAWe,EAAAA,WACTjB,GAAUK,EAAQO,WAAWZ,OAAOF,GAChCO,EAAQO,WAAWZ,OAAOF,GAC1BO,EAAQO,WAAWN,KAAKR,IAAYO,EAAQO,WAAWN,KAAKR,GAChEO,EAAQC,KACRR,GAAWO,EAAQP,QAAQA,GAC3BI,GAAaA,IAEXC,GAEHN,GAIT"}
1
+ {"version":3,"file":"Button.js","sources":["../../src/components/Button.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC, ReactNode, ComponentPropsWithRef } from 'react'\nimport { classNames } from '../utils'\n\ninterface ButtonProps extends ComponentPropsWithRef<'button'> {\n children: ReactNode\n variant: 'red' | 'green' | 'default' | 'neutral' | 'transparent'\n active?: boolean\n}\n\nexport const Button: FC<ButtonProps> = ({\n children,\n variant,\n active = false,\n className = '',\n ...props\n}) => {\n const classes = {\n base: 'pi-flex pi-font-sans pi-font-light pi-content-center pi-items-center pi-justify-center pi-tracking-wide pi-duration-200 pi-transform pi-outline-none focus:pi-ring-2 focus:pi-z-20 focus:pi-ring-offset-2 disabled:pi-opacity-75 pi-border pi-border-transparent focus:pi-ring-offset-black pi-rounded-full pi-text-sm pi-leading-4 pi-h-12 pi-w-12 pi-col-start-auto pi-transition-color pi-shrink-0',\n variant: {\n red: 'dark:pi-bg-red-600 pi-bg-red-700 enabled:hover:pi-bg-red-700 focus:pi-ring-red-500 pi-text-white',\n green: 'pi-bg-green-600 enabled:hover:pi-bg-green-700 focus:pi-ring-green-500 pi-text-white',\n default: 'enabled:hover:pi-bg-gray-500 focus:pi-ring-gray-500 pi-text-white',\n neutral:\n 'pi-bg-transparent enabled:hover:pi-bg-gray-500 enabled:hover:pi-border-gray-500 pi-border pi-border-gray-700 focus:pi-ring-0',\n transparent:\n 'pi-bg-transparent dark:enabled:hover:pi-bg-gray-500 enabled:hover:pi-bg-gray-400 focus:pi-ring-offset-gray-200 dark:focus:pi-ring-gray-500 dark:focus:pi-ring-gray-500 focus:pi-ring-gray-400 dark:pi-text-white',\n },\n background: {\n base: {\n default: 'pi-bg-gray-700',\n },\n active: {\n default: 'pi-bg-gray-500',\n },\n },\n }\n\n return (\n <>\n <button\n data-stop-propagation={true}\n className={classNames(\n active && classes.background.active[variant]\n ? classes.background.active[variant]\n : classes.background.base[variant] && classes.background.base[variant],\n classes.base,\n variant && classes.variant[variant],\n className && className,\n )}\n {...props}\n >\n {children}\n </button>\n </>\n )\n}\n"],"names":["_a","children","variant","_b","active","_c","className","props","__rest","classes","base","red","green","default","neutral","transparent","background","React","createElement","Fragment","__assign","classNames"],"mappings":"kSAYuC,SAACA,GACtC,IAAAC,aACAC,YACAC,EAAAH,EAAAI,OAAAA,OAAS,IAAAD,KACTE,EAAAL,EAAAM,UAAAA,OAAY,IAAAD,EAAA,KACTE,EALmCC,EAAAA,OAAAR,EAAA,CAAA,WAAA,UAAA,SAAA,cAOhCS,EAAU,CACdC,KAAM,wYACNR,QAAS,CACPS,IAAK,mGACLC,MAAO,sFACPC,QAAS,oEACTC,QACE,+HACFC,YACE,oNAEJC,WAAY,CACVN,KAAM,CACJG,QAAS,kBAEXT,OAAQ,CACNS,QAAS,oBAKf,OACEI,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAAAC,cAAA,SAAAE,EAAAA,SAAA,CAAA,yBACyB,EACvBd,UAAWe,EAAAA,WACTjB,GAAUK,EAAQO,WAAWZ,OAAOF,GAChCO,EAAQO,WAAWZ,OAAOF,GAC1BO,EAAQO,WAAWN,KAAKR,IAAYO,EAAQO,WAAWN,KAAKR,GAChEO,EAAQC,KACRR,GAAWO,EAAQP,QAAQA,GAC3BI,GAAaA,IAEXC,GAEHN,GAIT"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../lib/phone/call.js"),n=require("../../utils/customHooks/useEventListener.js"),o=require("../../utils/genericFunctions/eventDispatch.js");require("../../node_modules/react-redux/es/index.js");var a=require("../../store/index.js");require("../../node_modules/socket.io-client/build/esm/index.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../../lib/webrtc/janus.js");var r=require("../../lib/webrtc/messages.js");require("../../node_modules/mic-check/lib/index.js");var i=require("../../static/outgoing_ringtone.js");require("../Island.js");var l=require("../../services/astproxy.js"),s=require("../Button.js"),u=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),c=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js");require("../../node_modules/framer-motion/dist/framer-motion.js");var d=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),p=require("../TransferView/TransferActions.js"),m=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 f=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var j=require("../../lib/user/default_device.js"),v=require("../../node_modules/react-redux/es/hooks/useSelector.js"),x=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function h(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var q=h(e);exports.default=function(){var e=v.useSelector((function(e){return e.currentCall})),h=e.paused,y=e.muted,E=v.useSelector((function(e){return e.currentCall.parked})),g=v.useSelector((function(e){return e.island})),T=g.view,_=g.actionsExpanded,C=v.useSelector((function(e){return e.currentCall.transferring})),w=x.useDispatch();function b(){w.island.setIslandView("keypad"!==T?"keypad":"call"),o.eventDispatch("phone-island-call-keypad-opened",{})}function A(){w.island.setIslandView("transfer"!==T?"transfer":"call"),o.eventDispatch("phone-island-call-transfer-opened",{})}function k(){j.isWebRTC()?r.sendDTMF("*"):l.sendPhysicalDTMF("*"),a.store.getState().player.audioPlayerPlaying||w.player.updateStartAudioPlayer({src:i.default,loop:!0}),setTimeout((function(){j.isWebRTC()?r.sendDTMF("1"):l.sendPhysicalDTMF("1"),w.player.stopAudioPlayer(),C&&setTimeout((function(){w.currentCall.updateTransferring(!1)}),500),o.eventDispatch("phone-island-call-transfer-canceled",{})}),500)}n.useEventListener("phone-island-call-keypad-open",(function(){b()})),n.useEventListener("phone-island-call-transfer-open",(function(){A()})),n.useEventListener("phone-island-call-transfer-cancel",(function(){k()}));var F=f.useTranslation().t;return q.default.createElement(q.default.Fragment,null,q.default.createElement("div",{className:"pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center"},q.default.createElement(s.Button,{variant:"default",active:!!h,onClick:function(){return h?t.unpauseCurrentCall():t.pauseCurrentCall()},"data-tooltip-id":"tooltip","data-tooltip-content":"".concat(F(h?"Tooltip.Play":"Tooltip.Pause"))},h?q.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:c.faPlay}):q.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:c.faPause})),q.default.createElement(s.Button,{variant:"default",active:!!y,onClick:function(){return y?t.unmuteCurrentCall():t.muteCurrentCall()},"data-tooltip-id":"tooltip","data-tooltip-content":"".concat(F(y?"Tooltip.Unmute":"Tooltip.Mute"))},y?q.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:c.faMicrophoneSlash}):q.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:c.faMicrophone})),q.default.createElement(s.Button,{active:C,onClick:C?k:A,variant:"default","data-tooltip-id":"tooltip","data-tooltip-content":"".concat(F(C?"Tooltip.Cancel transfer":"Tooltip.Transfer"))},C?q.default.createElement(u.FontAwesomeIcon,{className:"",size:"xl",icon:c.faArrowDownUpAcrossLine}):q.default.createElement(u.FontAwesomeIcon,{size:"xl",className:"pi-rotate-90",icon:c.faArrowRightArrowLeft})),q.default.createElement(s.Button,{active:_,variant:"transparent",onClick:function(){_?w.island.toggleActionsExpanded(!1):w.island.toggleActionsExpanded(!0)},"data-tooltip-id":"tooltip","data-tooltip-content":"".concat(F(_?"Tooltip.Collapse":"Tooltip.Expand"))},_?q.default.createElement(u.FontAwesomeIcon,{className:"",size:"xl",icon:c.faChevronUp}):q.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:c.faChevronDown}))),_?q.default.createElement(q.default.Fragment,null," ",q.default.createElement("div",{className:"pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center"},q.default.createElement(s.Button,{active:"keypad"===T,variant:"default",onClick:b,"data-tooltip-id":"tooltip","data-tooltip-content":F("Tooltip.Keyboard")},q.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:d.faGridRound})),q.default.createElement(s.Button,{active:E,variant:"default",onClick:t.parkCurrentCall,"data-tooltip-id":"tooltip","data-tooltip-content":F("Tooltip.Park")},q.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:c.faSquareParking})),C&&q.default.createElement(p.TransferActions,null))):q.default.createElement(q.default.Fragment,null),q.default.createElement(m.Tooltip,{className:"pi-z-20",id:"tooltip",place:"bottom"}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../lib/phone/call.js"),n=require("../../utils/customHooks/useEventListener.js"),a=require("../../utils/genericFunctions/eventDispatch.js");require("../../node_modules/react-redux/es/index.js");var o=require("../../store/index.js");require("../../node_modules/socket.io-client/build/esm/index.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../../lib/webrtc/janus.js");var r=require("../../lib/webrtc/messages.js");require("../../node_modules/mic-check/lib/index.js");var i=require("../../static/outgoing_ringtone.js");require("../Island.js");var l=require("../../services/astproxy.js"),s=require("../Button.js"),u=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),c=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js");require("../../node_modules/framer-motion/dist/framer-motion.js");var d=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),p=require("../TransferView/TransferActions.js"),m=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 f=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var j=require("../../lib/user/default_device.js"),v=require("../../node_modules/react-redux/es/hooks/useSelector.js"),x=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function y(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var h=y(e);exports.default=function(){var e=v.useSelector((function(e){return e.currentCall})),y=e.paused,g=e.muted,q=v.useSelector((function(e){return e.currentCall.parked})),E=v.useSelector((function(e){return e.island})),T=E.view,_=E.actionsExpanded,C=v.useSelector((function(e){return e.currentCall.transferring})),w=x.useDispatch();function b(){w.island.setIslandView("keypad"!==T?"keypad":"call"),a.eventDispatch("phone-island-call-keypad-opened",{})}function k(){w.island.setIslandView("transfer"!==T?"transfer":"call"),a.eventDispatch("phone-island-call-transfer-opened",{})}function A(){j.isWebRTC()?r.sendDTMF("*"):l.sendPhysicalDTMF("*"),o.store.getState().player.audioPlayerPlaying||w.player.updateStartAudioPlayer({src:i.default,loop:!0}),setTimeout((function(){j.isWebRTC()?r.sendDTMF("1"):l.sendPhysicalDTMF("1"),w.player.stopAudioPlayer(),C&&setTimeout((function(){w.currentCall.updateTransferring(!1)}),500),a.eventDispatch("phone-island-call-transfer-canceled",{})}),500)}n.useEventListener("phone-island-call-keypad-open",(function(){b()})),n.useEventListener("phone-island-call-transfer-open",(function(){k()})),n.useEventListener("phone-island-call-transfer-cancel",(function(){A()}));var F=f.useTranslation().t;return h.default.createElement(h.default.Fragment,null,h.default.createElement("div",{className:"pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center"},h.default.createElement(s.Button,{variant:"default",active:!!y,onClick:function(){return y?t.unpauseCurrentCall():t.pauseCurrentCall()},"data-tooltip-id":"tooltip","data-tooltip-content":"".concat(F(y?"Tooltip.Play":"Tooltip.Pause"))},y?h.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:c.faPlay}):h.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:c.faPause})),h.default.createElement(s.Button,{variant:"default",active:!!g,onClick:function(){return g?t.unmuteCurrentCall():t.muteCurrentCall()},"data-tooltip-id":"tooltip","data-tooltip-content":"".concat(F(g?"Tooltip.Unmute":"Tooltip.Mute"))},g?h.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:c.faMicrophoneSlash}):h.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:c.faMicrophone})),h.default.createElement(s.Button,{active:C,onClick:C?A:k,variant:"default","data-tooltip-id":"tooltip","data-tooltip-content":"".concat(F(C?"Tooltip.Cancel transfer":"Tooltip.Transfer"))},C?h.default.createElement(u.FontAwesomeIcon,{className:"",size:"xl",icon:c.faArrowDownUpAcrossLine}):h.default.createElement(u.FontAwesomeIcon,{size:"xl",className:"pi-rotate-90",icon:c.faArrowRightArrowLeft})),h.default.createElement(s.Button,{active:_,variant:"transparent",onClick:function(){_?w.island.toggleActionsExpanded(!1):w.island.toggleActionsExpanded(!0)},"data-tooltip-id":"tooltip","data-tooltip-content":"".concat(F(_?"Tooltip.Collapse":"Tooltip.Expand"))},_?h.default.createElement(u.FontAwesomeIcon,{className:"pi-text-gray-700 dark:pi-text-gray-100",size:"xl",icon:c.faChevronUp}):h.default.createElement(u.FontAwesomeIcon,{size:"xl",className:"pi-text-gray-700 dark:pi-text-gray-100",icon:c.faChevronDown}))),_?h.default.createElement(h.default.Fragment,null," ",h.default.createElement("div",{className:"pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center"},h.default.createElement(s.Button,{active:"keypad"===T,variant:"default",onClick:b,"data-tooltip-id":"tooltip","data-tooltip-content":F("Tooltip.Keyboard")||""},h.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:d.faGridRound})),h.default.createElement(s.Button,{active:q,variant:"default",onClick:t.parkCurrentCall,"data-tooltip-id":"tooltip","data-tooltip-content":F("Tooltip.Park")||""},h.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:c.faSquareParking})),C&&h.default.createElement(p.TransferActions,null))):h.default.createElement(h.default.Fragment,null),h.default.createElement(m.Tooltip,{className:"pi-z-20",id:"tooltip",place:"bottom"}))};
2
2
  //# sourceMappingURL=Actions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Actions.js","sources":["../../../src/components/CallView/Actions.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 {\n muteCurrentCall,\n unmuteCurrentCall,\n pauseCurrentCall,\n unpauseCurrentCall,\n parkCurrentCall,\n} from '../../lib/phone/call'\nimport { Button } from '../'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faPause,\n faPlay,\n faMicrophone,\n faMicrophoneSlash,\n faArrowDownUpAcrossLine,\n faSquareParking,\n faChevronDown,\n faChevronUp,\n faArrowRightArrowLeft,\n} from '@fortawesome/free-solid-svg-icons'\nimport { faGridRound } from '@nethesis/nethesis-solid-svg-icons'\nimport { RootState, Dispatch } from '../../store'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { sendDTMF } from '../../lib/webrtc/messages'\nimport { store } from '../../store'\nimport outgoingRingtone from '../../static/outgoing_ringtone'\nimport { TransferActions } from '../TransferView'\nimport { Tooltip } from 'react-tooltip/dist/react-tooltip.min.cjs'\nimport { useTranslation } from 'react-i18next'\nimport { isWebRTC } from '../../lib/user/default_device'\nimport { sendPhysicalDTMF } from '../../services/astproxy'\nimport { useEventListener, eventDispatch } from '../../utils'\n\nconst Actions: FC = () => {\n // Get multiple values from currentCall store\n const { paused, muted } = useSelector((state: RootState) => state.currentCall)\n const parked = useSelector((state: RootState) => state.currentCall.parked)\n\n // Get isOpen and view from island store\n const { view, actionsExpanded } = useSelector((state: RootState) => state.island)\n const transferring = useSelector((state: RootState) => state.currentCall.transferring)\n\n const dispatch = useDispatch<Dispatch>()\n\n function openKeypad() {\n dispatch.island.setIslandView(view !== 'keypad' ? 'keypad' : 'call')\n eventDispatch('phone-island-call-keypad-opened', {})\n }\n useEventListener('phone-island-call-keypad-open', () => {\n openKeypad()\n })\n\n function transfer() {\n // Open the transfer view\n dispatch.island.setIslandView(view !== 'transfer' ? 'transfer' : 'call')\n eventDispatch('phone-island-call-transfer-opened', {})\n }\n useEventListener('phone-island-call-transfer-open', () => {\n transfer()\n })\n useEventListener('phone-island-call-transfer-cancel', () => {\n cancelTransfer()\n })\n\n // Cancels the current transfer through dtmfs\n function cancelTransfer() {\n if (isWebRTC()) {\n sendDTMF('*')\n } else {\n sendPhysicalDTMF('*')\n }\n\n const { audioPlayerPlaying } = store.getState().player\n // Check if the local audio is already playing and start playing\n if (!audioPlayerPlaying) {\n dispatch.player.updateStartAudioPlayer({\n src: outgoingRingtone,\n loop: true,\n })\n }\n setTimeout(() => {\n if (isWebRTC()) {\n sendDTMF('1')\n } else {\n sendPhysicalDTMF('1')\n }\n\n dispatch.player.stopAudioPlayer()\n // The workarround to disable transfer because of the wrong conv.connection value from ws\n if (transferring) {\n setTimeout(() => {\n dispatch.currentCall.updateTransferring(false)\n }, 500)\n }\n\n eventDispatch('phone-island-call-transfer-canceled', {})\n }, 500)\n }\n\n function toggleActionsExpanded() {\n if (actionsExpanded) {\n dispatch.island.toggleActionsExpanded(false)\n } else {\n dispatch.island.toggleActionsExpanded(true)\n }\n }\n\n const { t } = useTranslation()\n\n // Phone island header section\n return (\n <>\n <div className='pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'>\n <Button\n variant='default'\n active={paused ? true : false}\n onClick={() => (paused ? unpauseCurrentCall() : pauseCurrentCall())}\n data-tooltip-id='tooltip'\n data-tooltip-content={paused ? `${t('Tooltip.Play')}` : `${t('Tooltip.Pause')}`}\n >\n {paused ? (\n <FontAwesomeIcon size='xl' icon={faPlay} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faPause} />\n )}\n </Button>\n\n <Button\n variant='default'\n active={muted ? true : false}\n onClick={() => (muted ? unmuteCurrentCall() : muteCurrentCall())}\n data-tooltip-id='tooltip'\n data-tooltip-content={muted ? `${t('Tooltip.Unmute')}` : `${t('Tooltip.Mute')}`}\n >\n {muted ? (\n <FontAwesomeIcon size='xl' icon={faMicrophoneSlash} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faMicrophone} />\n )}\n </Button>\n\n <Button\n active={transferring}\n onClick={transferring ? cancelTransfer : transfer}\n variant='default'\n data-tooltip-id='tooltip'\n data-tooltip-content={\n transferring ? `${t('Tooltip.Cancel transfer')}` : `${t('Tooltip.Transfer')}`\n }\n >\n {transferring ? (\n <FontAwesomeIcon className='' size='xl' icon={faArrowDownUpAcrossLine} />\n ) : (\n <FontAwesomeIcon size='xl' className='pi-rotate-90' icon={faArrowRightArrowLeft} />\n )}\n </Button>\n\n <Button\n active={actionsExpanded}\n variant='transparent'\n onClick={() => toggleActionsExpanded()}\n data-tooltip-id='tooltip'\n data-tooltip-content={\n actionsExpanded ? `${t('Tooltip.Collapse')}` : `${t('Tooltip.Expand')}`\n }\n >\n {actionsExpanded ? (\n <FontAwesomeIcon className='' size='xl' icon={faChevronUp} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faChevronDown} />\n )}\n </Button>\n </div>\n {/* Actions expanded section */}\n {actionsExpanded ? (\n <>\n {' '}\n <div className='pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'>\n <Button\n active={view === 'keypad'}\n variant='default'\n onClick={openKeypad}\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Keyboard')}\n >\n <FontAwesomeIcon size='xl' icon={faGridRound} />\n </Button>\n <Button\n active={parked}\n variant='default'\n onClick={parkCurrentCall}\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Park')}\n >\n <FontAwesomeIcon size='xl' icon={faSquareParking} />\n </Button>\n {transferring && <TransferActions />}\n </div>\n </>\n ) : (\n <></>\n )}\n {/* Buttons tooltips */}\n <Tooltip className='pi-z-20' id='tooltip' place='bottom' />\n </>\n )\n}\n\nexport default Actions\n"],"names":["_a","useSelector","state","currentCall","paused","muted","parked","_b","island","view","actionsExpanded","transferring","dispatch","useDispatch","openKeypad","setIslandView","eventDispatch","transfer","cancelTransfer","isWebRTC","sendDTMF","sendPhysicalDTMF","store","getState","player","audioPlayerPlaying","updateStartAudioPlayer","src","outgoingRingtone","loop","setTimeout","stopAudioPlayer","updateTransferring","useEventListener","t","useTranslation","React","createElement","Fragment","className","Button","variant","active","onClick","unpauseCurrentCall","pauseCurrentCall","concat","FontAwesomeIcon","size","icon","faPlay","faPause","unmuteCurrentCall","muteCurrentCall","faMicrophoneSlash","faMicrophone","faArrowDownUpAcrossLine","faArrowRightArrowLeft","toggleActionsExpanded","faChevronUp","faChevronDown","faGridRound","parkCurrentCall","faSquareParking","TransferActions","Tooltip","id","place"],"mappings":"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"}
1
+ {"version":3,"file":"Actions.js","sources":["../../../src/components/CallView/Actions.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 {\n muteCurrentCall,\n unmuteCurrentCall,\n pauseCurrentCall,\n unpauseCurrentCall,\n parkCurrentCall,\n} from '../../lib/phone/call'\nimport { Button } from '../'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faPause,\n faPlay,\n faMicrophone,\n faMicrophoneSlash,\n faArrowDownUpAcrossLine,\n faSquareParking,\n faChevronDown,\n faChevronUp,\n faArrowRightArrowLeft,\n} from '@fortawesome/free-solid-svg-icons'\nimport { faGridRound } from '@nethesis/nethesis-solid-svg-icons'\nimport { RootState, Dispatch } from '../../store'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { sendDTMF } from '../../lib/webrtc/messages'\nimport { store } from '../../store'\nimport outgoingRingtone from '../../static/outgoing_ringtone'\nimport { TransferActions } from '../TransferView'\nimport { Tooltip } from 'react-tooltip/dist/react-tooltip.min.cjs'\nimport { useTranslation } from 'react-i18next'\nimport { isWebRTC } from '../../lib/user/default_device'\nimport { sendPhysicalDTMF } from '../../services/astproxy'\nimport { useEventListener, eventDispatch } from '../../utils'\n\nconst Actions: FC = () => {\n // Get multiple values from currentCall store\n const { paused, muted } = useSelector((state: RootState) => state.currentCall)\n const parked = useSelector((state: RootState) => state.currentCall.parked)\n\n // Get isOpen and view from island store\n const { view, actionsExpanded } = useSelector((state: RootState) => state.island)\n const transferring = useSelector((state: RootState) => state.currentCall.transferring)\n\n const dispatch = useDispatch<Dispatch>()\n\n function openKeypad() {\n dispatch.island.setIslandView(view !== 'keypad' ? 'keypad' : 'call')\n eventDispatch('phone-island-call-keypad-opened', {})\n }\n useEventListener('phone-island-call-keypad-open', () => {\n openKeypad()\n })\n\n function transfer() {\n // Open the transfer view\n dispatch.island.setIslandView(view !== 'transfer' ? 'transfer' : 'call')\n eventDispatch('phone-island-call-transfer-opened', {})\n }\n useEventListener('phone-island-call-transfer-open', () => {\n transfer()\n })\n useEventListener('phone-island-call-transfer-cancel', () => {\n cancelTransfer()\n })\n\n // Cancels the current transfer through dtmfs\n function cancelTransfer() {\n if (isWebRTC()) {\n sendDTMF('*')\n } else {\n sendPhysicalDTMF('*')\n }\n\n const { audioPlayerPlaying } = store.getState().player\n // Check if the local audio is already playing and start playing\n if (!audioPlayerPlaying) {\n dispatch.player.updateStartAudioPlayer({\n src: outgoingRingtone,\n loop: true,\n })\n }\n setTimeout(() => {\n if (isWebRTC()) {\n sendDTMF('1')\n } else {\n sendPhysicalDTMF('1')\n }\n\n dispatch.player.stopAudioPlayer()\n // The workarround to disable transfer because of the wrong conv.connection value from ws\n if (transferring) {\n setTimeout(() => {\n dispatch.currentCall.updateTransferring(false)\n }, 500)\n }\n\n eventDispatch('phone-island-call-transfer-canceled', {})\n }, 500)\n }\n\n function toggleActionsExpanded() {\n if (actionsExpanded) {\n dispatch.island.toggleActionsExpanded(false)\n } else {\n dispatch.island.toggleActionsExpanded(true)\n }\n }\n\n const { t } = useTranslation()\n\n // Phone island header section\n return (\n <>\n <div className='pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'>\n <Button\n variant='default'\n active={paused ? true : false}\n onClick={() => (paused ? unpauseCurrentCall() : pauseCurrentCall())}\n data-tooltip-id='tooltip'\n data-tooltip-content={paused ? `${t('Tooltip.Play')}` : `${t('Tooltip.Pause')}`}\n >\n {paused ? (\n <FontAwesomeIcon size='xl' icon={faPlay} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faPause} />\n )}\n </Button>\n\n <Button\n variant='default'\n active={muted ? true : false}\n onClick={() => (muted ? unmuteCurrentCall() : muteCurrentCall())}\n data-tooltip-id='tooltip'\n data-tooltip-content={muted ? `${t('Tooltip.Unmute')}` : `${t('Tooltip.Mute')}`}\n >\n {muted ? (\n <FontAwesomeIcon size='xl' icon={faMicrophoneSlash} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faMicrophone} />\n )}\n </Button>\n\n <Button\n active={transferring}\n onClick={transferring ? cancelTransfer : transfer}\n variant='default'\n data-tooltip-id='tooltip'\n data-tooltip-content={\n transferring ? `${t('Tooltip.Cancel transfer')}` : `${t('Tooltip.Transfer')}`\n }\n >\n {transferring ? (\n <FontAwesomeIcon className='' size='xl' icon={faArrowDownUpAcrossLine} />\n ) : (\n <FontAwesomeIcon size='xl' className='pi-rotate-90' icon={faArrowRightArrowLeft} />\n )}\n </Button>\n\n <Button\n active={actionsExpanded}\n variant='transparent'\n onClick={() => toggleActionsExpanded()}\n data-tooltip-id='tooltip'\n data-tooltip-content={\n actionsExpanded ? `${t('Tooltip.Collapse')}` : `${t('Tooltip.Expand')}`\n }\n >\n {actionsExpanded ? (\n <FontAwesomeIcon className='pi-text-gray-700 dark:pi-text-gray-100' size='xl' icon={faChevronUp} />\n ) : (\n <FontAwesomeIcon size='xl' className='pi-text-gray-700 dark:pi-text-gray-100' icon={faChevronDown} />\n )}\n </Button>\n </div>\n {/* Actions expanded section */}\n {actionsExpanded ? (\n <>\n {' '}\n <div className='pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'>\n <Button\n active={view === 'keypad'}\n variant='default'\n onClick={openKeypad}\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Keyboard') || ''}\n >\n <FontAwesomeIcon size='xl' icon={faGridRound} />\n </Button>\n <Button\n active={parked}\n variant='default'\n onClick={parkCurrentCall}\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Park') || ''}\n >\n <FontAwesomeIcon size='xl' icon={faSquareParking} />\n </Button>\n {transferring && <TransferActions />}\n </div>\n </>\n ) : (\n <></>\n )}\n {/* Buttons tooltips */}\n <Tooltip className='pi-z-20' id='tooltip' place='bottom' />\n </>\n )\n}\n\nexport default Actions\n"],"names":["_a","useSelector","state","currentCall","paused","muted","parked","_b","island","view","actionsExpanded","transferring","dispatch","useDispatch","openKeypad","setIslandView","eventDispatch","transfer","cancelTransfer","isWebRTC","sendDTMF","sendPhysicalDTMF","store","getState","player","audioPlayerPlaying","updateStartAudioPlayer","src","outgoingRingtone","loop","setTimeout","stopAudioPlayer","updateTransferring","useEventListener","t","useTranslation","React","createElement","Fragment","className","Button","variant","active","onClick","unpauseCurrentCall","pauseCurrentCall","concat","FontAwesomeIcon","size","icon","faPlay","faPause","unmuteCurrentCall","muteCurrentCall","faMicrophoneSlash","faMicrophone","faArrowDownUpAcrossLine","faArrowRightArrowLeft","toggleActionsExpanded","faChevronUp","faChevronDown","faGridRound","parkCurrentCall","faSquareParking","TransferActions","Tooltip","id","place"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/framer-motion/dist/framer-motion.js"),require("../../node_modules/react-redux/es/index.js");var r=require("../../node_modules/react-redux/es/hooks/useSelector.js"),t=require("../../_virtual/framer-motion.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=n(e),o={open:{width:"48px",height:"48px",borderRadius:"12px"},closed:{width:"24px",height:"24px",borderRadius:"6px"}};exports.default=function(){var e,n,a=r.useSelector((function(e){return e.currentCall})).username,u=r.useSelector((function(e){return e.avatars})).avatars,l=r.useSelector((function(e){return e.island})).isOpen,s=r.useSelector((function(e){return e.currentCall})),d=s.incoming,c=s.outgoing,p=s.accepted,m=s.transferring,v=r.useSelector((function(e){return e.currentCall})),f=r.useSelector((function(e){return e.users}));return i.default.createElement(i.default.Fragment,null,i.default.createElement(t.framerMotion.exports.motion.div,{className:"pi-relative",animate:l?"open":"closed",variants:o},(d||c&&!p)&&i.default.createElement(t.framerMotion.exports.motion.div,{style:{animationDuration:"2s"},animate:l?"open":"closed",variants:o,className:"pi-rounded-xl pi-bg-white pi-absolute pi-opacity-60 pi-top-0 pi-left-0 pi-animate-ping pi-h-12 pi-w-12"}),m?i.default.createElement(t.framerMotion.exports.motion.div,{className:"pi-relative pi-z-30 pi-h-12 pi-w-12 pi-bg-gray-300 pi-rounded-sm pi-bg-cover",style:{backgroundImage:"url(".concat(u&&f&&(null==f?void 0:f.extensions)&&u[null===(e=null==f?void 0:f.extensions[null==v?void 0:v.number])||void 0===e?void 0:e.username]&&u[null===(n=null==f?void 0:f.extensions[null==v?void 0:v.number])||void 0===n?void 0:n.username],")"),backgroundRepeat:"no-repeat",backgroundSize:"contain"},animate:l?"open":"closed",variants:o}):i.default.createElement(t.framerMotion.exports.motion.div,{className:"pi-relative pi-z-30 pi-h-12 pi-w-12 pi-bg-gray-300 pi-rounded-sm pi-bg-cover",style:{backgroundImage:"url(".concat(u&&u[a]&&u[a],")"),backgroundRepeat:"no-repeat",backgroundSize:"contain"},animate:l?"open":"closed",variants:o})))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/framer-motion/dist/framer-motion.js"),require("../../node_modules/react-redux/es/index.js");var r=require("../../node_modules/react-redux/es/hooks/useSelector.js"),t=require("../../_virtual/framer-motion.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=n(e),i={open:{width:"48px",height:"48px",borderRadius:"12px"},closed:{width:"24px",height:"24px",borderRadius:"6px"}};exports.default=function(){var e,n,a=r.useSelector((function(e){return e.currentCall})).username,u=r.useSelector((function(e){return e.avatars})).avatars,l=r.useSelector((function(e){return e.island})).isOpen,s=r.useSelector((function(e){return e.currentCall})),d=s.incoming,c=s.outgoing,p=s.accepted,m=s.transferring,v=r.useSelector((function(e){return e.currentCall})),f=r.useSelector((function(e){return e.users}));return o.default.createElement(o.default.Fragment,null,o.default.createElement(t.framerMotion.exports.motion.div,{className:"pi-relative",animate:l?"open":"closed",variants:i},(d||c&&!p)&&o.default.createElement(t.framerMotion.exports.motion.div,{style:{animationDuration:"2s"},animate:l?"open":"closed",variants:i,className:"pi-rounded-xl pi-bg-gray-600 pi-absolute pi-opacity-60 pi-top-0 pi-left-0 pi-animate-ping pi-h-12 pi-w-12"}),m?o.default.createElement(t.framerMotion.exports.motion.div,{className:"pi-relative pi-z-30 pi-h-12 pi-w-12 pi-bg-gray-300 pi-rounded-sm pi-bg-cover",style:{backgroundImage:"url(".concat(u&&f&&(null==f?void 0:f.extensions)&&u[null===(e=null==f?void 0:f.extensions[null==v?void 0:v.number])||void 0===e?void 0:e.username]&&u[null===(n=null==f?void 0:f.extensions[null==v?void 0:v.number])||void 0===n?void 0:n.username],")"),backgroundRepeat:"no-repeat",backgroundSize:"contain"},animate:l?"open":"closed",variants:i}):o.default.createElement(t.framerMotion.exports.motion.div,{className:"pi-relative pi-z-30 pi-h-12 pi-w-12 pi-bg-gray-300 pi-rounded-sm pi-bg-cover",style:{backgroundImage:"url(".concat(u&&u[a]&&u[a],")"),backgroundRepeat:"no-repeat",backgroundSize:"contain"},animate:l?"open":"closed",variants:i})))};
2
2
  //# sourceMappingURL=Avatar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.js","sources":["../../../src/components/CallView/Avatar.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 { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\n\nconst iconVariants = {\n open: {\n width: '48px',\n height: '48px',\n borderRadius: '12px',\n },\n closed: {\n width: '24px',\n height: '24px',\n borderRadius: '6px',\n },\n}\n\nconst Avatar: FC = () => {\n // Get multiple values from currentCall store\n const { username } = useSelector((state: RootState) => state.currentCall)\n\n // Get avatars from avatars store\n const { avatars } = useSelector((state: RootState) => state.avatars)\n\n // Get isOpen from island store\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n // Get multiple values from currentCall store\n const { incoming, outgoing, accepted, transferring } = useSelector(\n (state: RootState) => state.currentCall,\n )\n const currentCallDetails: any = useSelector((state: RootState) => state.currentCall)\n const user = useSelector((state: RootState) => state.users)\n\n return (\n <>\n <motion.div\n className='pi-relative'\n animate={isOpen ? 'open' : 'closed'}\n variants={iconVariants}\n >\n {(incoming || (outgoing && !accepted)) && (\n // The background pulse effect\n <motion.div\n style={{\n animationDuration: '2s',\n }}\n animate={isOpen ? 'open' : 'closed'}\n variants={iconVariants}\n className={`pi-rounded-xl pi-bg-white pi-absolute pi-opacity-60 pi-top-0 pi-left-0 pi-animate-ping pi-h-12 pi-w-12`}\n ></motion.div>\n )}\n {!transferring ? (\n <motion.div\n className='pi-relative pi-z-30 pi-h-12 pi-w-12 pi-bg-gray-300 pi-rounded-sm pi-bg-cover'\n style={{\n backgroundImage: `url(${avatars && avatars[username] && avatars[username]})`,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'contain',\n }}\n animate={isOpen ? 'open' : 'closed'}\n variants={iconVariants}\n />\n ) : (\n <motion.div\n className='pi-relative pi-z-30 pi-h-12 pi-w-12 pi-bg-gray-300 pi-rounded-sm pi-bg-cover'\n style={{\n backgroundImage: `url(${\n avatars &&\n user &&\n user?.extensions &&\n avatars[user?.extensions[currentCallDetails?.number]?.username] &&\n avatars[user?.extensions[currentCallDetails?.number]?.username]\n })`,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'contain',\n }}\n animate={isOpen ? 'open' : 'closed'}\n variants={iconVariants}\n />\n )}\n </motion.div>\n </>\n )\n}\n\nexport default Avatar\n"],"names":["iconVariants","open","width","height","borderRadius","closed","username","useSelector","state","currentCall","avatars","isOpen","island","_c","incoming","outgoing","accepted","transferring","currentCallDetails","user","users","React","createElement","Fragment","motion","div","className","animate","variants","style","animationDuration","backgroundImage","extensions","number","_a","_b","backgroundRepeat","backgroundSize","concat"],"mappings":"2ZAQMA,EAAe,CACnBC,KAAM,CACJC,MAAO,OACPC,OAAQ,OACRC,aAAc,QAEhBC,OAAQ,CACNH,MAAO,OACPC,OAAQ,OACRC,aAAc,wBAIC,mBAETE,EAAaC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,wBAGrDC,EAAYH,eAAY,SAACC,GAAqB,OAAAA,EAAME,mBAGpDC,EAAWJ,eAAY,SAACC,GAAqB,OAAAA,EAAMI,iBAGrDC,EAAiDN,eACrD,SAACC,GAAqB,OAAAA,EAAMC,eADtBK,EAAQD,EAAAC,SAAEC,EAAQF,EAAAE,SAAEC,EAAQH,EAAAG,SAAEC,EAAYJ,EAAAI,aAG5CC,EAA0BX,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMC,WAAN,IAC5DU,EAAOZ,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMY,KAAN,IAE/C,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAACC,cAAAE,EAAAA,aAAAA,QAAAA,OAAOC,IAAG,CACTC,UAAU,cACVC,QAAShB,EAAS,OAAS,SAC3BiB,SAAU5B,IAERc,GAAaC,IAAaC,IAE1BK,EAAAA,QAAAC,cAACE,EAAAA,aAAAA,QAAAA,OAAOC,IAAG,CACTI,MAAO,CACLC,kBAAmB,MAErBH,QAAShB,EAAS,OAAS,SAC3BiB,SAAU5B,EACV0B,UAAW,2GAGbT,EAYAI,EAAAA,sBAACG,EAAAA,aAAAA,QAAAA,OAAOC,IAAG,CACTC,UAAU,+EACVG,MAAO,CACLE,gBAAiB,cACfrB,GACAS,IACAA,aAAI,EAAJA,EAAMa,aACNtB,EAAoD,UAA5CS,aAAA,EAAAA,EAAMa,WAAWd,eAAAA,EAAoBe,eAAO,IAAAC,OAAA,EAAAA,EAAE5B,WACtDI,EAAoD,UAA5CS,aAAA,EAAAA,EAAMa,WAAWd,eAAAA,EAAoBe,eAAO,IAAAE,OAAA,EAAAA,EAAE7B,UACrD,KACH8B,iBAAkB,YAClBC,eAAgB,WAElBV,QAAShB,EAAS,OAAS,SAC3BiB,SAAU5B,IAzBZqB,EAAC,QAAAC,cAAAE,EAAAA,aAAAA,QAAAA,OAAOC,KACNC,UAAU,+EACVG,MAAO,CACLE,gBAAiB,OAAAO,OAAO5B,GAAWA,EAAQJ,IAAaI,EAAQJ,GAAY,KAC5E8B,iBAAkB,YAClBC,eAAgB,WAElBV,QAAShB,EAAS,OAAS,SAC3BiB,SAAU5B,KAuBtB"}
1
+ {"version":3,"file":"Avatar.js","sources":["../../../src/components/CallView/Avatar.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 { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\n\nconst iconVariants = {\n open: {\n width: '48px',\n height: '48px',\n borderRadius: '12px',\n },\n closed: {\n width: '24px',\n height: '24px',\n borderRadius: '6px',\n },\n}\n\nconst Avatar: FC = () => {\n // Get multiple values from currentCall store\n const { username } = useSelector((state: RootState) => state.currentCall)\n\n // Get avatars from avatars store\n const { avatars } = useSelector((state: RootState) => state.avatars)\n\n // Get isOpen from island store\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n // Get multiple values from currentCall store\n const { incoming, outgoing, accepted, transferring } = useSelector(\n (state: RootState) => state.currentCall,\n )\n const currentCallDetails: any = useSelector((state: RootState) => state.currentCall)\n const user = useSelector((state: RootState) => state.users)\n\n return (\n <>\n <motion.div\n className='pi-relative'\n animate={isOpen ? 'open' : 'closed'}\n variants={iconVariants}\n >\n {(incoming || (outgoing && !accepted)) && (\n // The background pulse effect\n <motion.div\n style={{\n animationDuration: '2s',\n }}\n animate={isOpen ? 'open' : 'closed'}\n variants={iconVariants}\n className={`pi-rounded-xl pi-bg-gray-600 pi-absolute pi-opacity-60 pi-top-0 pi-left-0 pi-animate-ping pi-h-12 pi-w-12`}\n ></motion.div>\n )}\n {!transferring ? (\n <motion.div\n className='pi-relative pi-z-30 pi-h-12 pi-w-12 pi-bg-gray-300 pi-rounded-sm pi-bg-cover'\n style={{\n backgroundImage: `url(${avatars && avatars[username] && avatars[username]})`,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'contain',\n }}\n animate={isOpen ? 'open' : 'closed'}\n variants={iconVariants}\n />\n ) : (\n <motion.div\n className='pi-relative pi-z-30 pi-h-12 pi-w-12 pi-bg-gray-300 pi-rounded-sm pi-bg-cover'\n style={{\n backgroundImage: `url(${\n avatars &&\n user &&\n user?.extensions &&\n avatars[user?.extensions[currentCallDetails?.number]?.username] &&\n avatars[user?.extensions[currentCallDetails?.number]?.username]\n })`,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'contain',\n }}\n animate={isOpen ? 'open' : 'closed'}\n variants={iconVariants}\n />\n )}\n </motion.div>\n </>\n )\n}\n\nexport default Avatar\n"],"names":["iconVariants","open","width","height","borderRadius","closed","username","useSelector","state","currentCall","avatars","isOpen","island","_c","incoming","outgoing","accepted","transferring","currentCallDetails","user","users","React","createElement","Fragment","motion","div","className","animate","variants","style","animationDuration","backgroundImage","extensions","number","_a","_b","backgroundRepeat","backgroundSize","concat"],"mappings":"2ZAQMA,EAAe,CACnBC,KAAM,CACJC,MAAO,OACPC,OAAQ,OACRC,aAAc,QAEhBC,OAAQ,CACNH,MAAO,OACPC,OAAQ,OACRC,aAAc,wBAIC,mBAETE,EAAaC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,wBAGrDC,EAAYH,eAAY,SAACC,GAAqB,OAAAA,EAAME,mBAGpDC,EAAWJ,eAAY,SAACC,GAAqB,OAAAA,EAAMI,iBAGrDC,EAAiDN,eACrD,SAACC,GAAqB,OAAAA,EAAMC,eADtBK,EAAQD,EAAAC,SAAEC,EAAQF,EAAAE,SAAEC,EAAQH,EAAAG,SAAEC,EAAYJ,EAAAI,aAG5CC,EAA0BX,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMC,WAAN,IAC5DU,EAAOZ,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMY,KAAN,IAE/C,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAACC,cAAAE,EAAAA,aAAAA,QAAAA,OAAOC,IAAG,CACTC,UAAU,cACVC,QAAShB,EAAS,OAAS,SAC3BiB,SAAU5B,IAERc,GAAaC,IAAaC,IAE1BK,EAAAA,QAAAC,cAACE,EAAAA,aAAAA,QAAAA,OAAOC,IAAG,CACTI,MAAO,CACLC,kBAAmB,MAErBH,QAAShB,EAAS,OAAS,SAC3BiB,SAAU5B,EACV0B,UAAW,8GAGbT,EAYAI,EAAAA,sBAACG,EAAAA,aAAAA,QAAAA,OAAOC,IAAG,CACTC,UAAU,+EACVG,MAAO,CACLE,gBAAiB,cACfrB,GACAS,IACAA,aAAI,EAAJA,EAAMa,aACNtB,EAAoD,UAA5CS,aAAA,EAAAA,EAAMa,WAAWd,eAAAA,EAAoBe,eAAO,IAAAC,OAAA,EAAAA,EAAE5B,WACtDI,EAAoD,UAA5CS,aAAA,EAAAA,EAAMa,WAAWd,eAAAA,EAAoBe,eAAO,IAAAE,OAAA,EAAAA,EAAE7B,UACrD,KACH8B,iBAAkB,YAClBC,eAAgB,WAElBV,QAAShB,EAAS,OAAS,SAC3BiB,SAAU5B,IAzBZqB,EAAC,QAAAC,cAAAE,EAAAA,aAAAA,QAAAA,OAAOC,KACNC,UAAU,+EACVG,MAAO,CACLE,gBAAiB,OAAAO,OAAO5B,GAAWA,EAAQJ,IAAaI,EAAQJ,GAAY,KAC5E8B,iBAAkB,YAClBC,eAAgB,WAElBV,QAAShB,EAAS,OAAS,SAC3BiB,SAAU5B,KAuBtB"}
@@ -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 t=require("./Timer.js");require("../../node_modules/framer-motion/dist/framer-motion.js");var r=require("../../_virtual/framer-motion.js"),i=require("../../node_modules/react-redux/es/hooks/useSelector.js"),a=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=n(e);exports.default=function(n){var o=n.isVisible,l=i.useSelector((function(e){return e.currentCall})),u=l.number,p=l.displayName,d=l.transferring,m=l.transferringName,f=l.startTime,c=l.transferringStartTime,x=l.transferCalls,v=a.useDispatch(),b=i.useSelector((function(e){return e.island})).isOpen;return e.useEffect((function(){var e=x.find((function(e){return e.number!==u}));e&&v.currentCall.updateCurrentCall({transferringName:e.displayName,transferringStartTime:e.startTime})}),[u]),s.default.createElement(r.framerMotion.exports.AnimatePresence,null,o&&s.default.createElement(r.framerMotion.exports.motion.div,{className:"pi-absolute pi-w-full pi-bg-gray-500 pi-flex pi-justify-between pi-text-white -pi-mt-10 -pi-z-10 pi-font-sans pi-items-top ".concat(b?"pi-px-6":"pi-px-4"," pi-pt-3"),style:{borderTopLeftRadius:"20px",borderTopRightRadius:"20px",height:"60px"},initial:{y:60},animate:{y:0},exit:{y:60,transitionEnd:{display:"none"}},transition:{duration:.3}},s.default.createElement("div",{className:"pi-font-bold pi-text-sm pi-relative"},s.default.createElement("div",{className:"pi-whitespace-nowrap pi-overflow-hidden ".concat(b?"pi-w-44":"pi-w-16")},d?m:p),s.default.createElement("div",{className:"pi-w-6 pi-absolute pi-right-0 pi-top-0 pi-h-full pi-bg-gradient-to-r pi-from-transparent pi-to-gray-500"})),s.default.createElement("div",{className:""},s.default.createElement(t.default,{size:"small",startTime:d?c:f}))))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("./Timer.js");require("../../node_modules/framer-motion/dist/framer-motion.js");var r=require("../../_virtual/framer-motion.js"),i=require("../../node_modules/react-redux/es/hooks/useSelector.js"),a=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=n(e);exports.default=function(n){var o=n.isVisible,l=i.useSelector((function(e){return e.currentCall})),u=l.number,p=l.displayName,d=l.transferring,m=l.transferringName,f=l.startTime,c=l.transferringStartTime,x=l.transferCalls,g=a.useDispatch(),v=i.useSelector((function(e){return e.island})).isOpen;return e.useEffect((function(){var e=x.find((function(e){return e.number!==u}));e&&g.currentCall.updateCurrentCall({transferringName:e.displayName,transferringStartTime:e.startTime})}),[u]),s.default.createElement(r.framerMotion.exports.AnimatePresence,null,o&&s.default.createElement(r.framerMotion.exports.motion.div,{className:"pi-absolute pi-w-full pi-bg-gray-500 pi-flex pi-justify-between pi-text-gray-50 dark:pi-text-gray-50 -pi-mt-10 -pi-z-10 pi-font-sans pi-items-top ".concat(v?"pi-px-6":"pi-px-4"," pi-pt-3"),style:{borderTopLeftRadius:"20px",borderTopRightRadius:"20px",height:"60px"},initial:{y:60},animate:{y:0},exit:{y:60,transitionEnd:{display:"none"}},transition:{duration:.3}},s.default.createElement("div",{className:"pi-font-bold pi-text-sm pi-relative"},s.default.createElement("div",{className:"pi-whitespace-nowrap pi-overflow-hidden ".concat(v?"pi-w-44":"pi-w-16")},d?m:p),s.default.createElement("div",{className:"pi-w-6 pi-absolute pi-right-0 pi-top-0 pi-h-full pi-bg-gradient-to-r pi-from-transparent pi-to-gray-500"})),s.default.createElement("div",{className:""},s.default.createElement(t.default,{size:"small",startTime:d?c:f}))))};
2
2
  //# sourceMappingURL=BackCall.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BackCall.js","sources":["../../../src/components/CallView/BackCall.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC, useEffect, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport Timer from './Timer'\nimport { motion, AnimatePresence } from 'framer-motion/dist/framer-motion'\nimport { TransferCallsTypes } from '../../models/currentCall'\n\nconst BackCall: FC<BackCallTypes> = ({ isVisible }) => {\n const {\n number,\n displayName,\n transferring,\n transferringName,\n startTime,\n transferringStartTime,\n transferCalls,\n } = useSelector((state: RootState) => state.currentCall)\n const dispatch = useDispatch<Dispatch>()\n\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n useEffect(() => {\n const callData: TransferCallsTypes = transferCalls.find((item) => item.number !== number)\n // Handle call switch during transfer\n if (callData) {\n dispatch.currentCall.updateCurrentCall({\n transferringName: callData.displayName,\n transferringStartTime: callData.startTime,\n })\n }\n }, [number])\n\n return (\n <AnimatePresence>\n {isVisible && (\n <motion.div\n className={`pi-absolute pi-w-full pi-bg-gray-500 pi-flex pi-justify-between pi-text-white -pi-mt-10 -pi-z-10 pi-font-sans pi-items-top ${\n isOpen ? 'pi-px-6' : 'pi-px-4'\n } pi-pt-3`}\n style={{ borderTopLeftRadius: '20px', borderTopRightRadius: '20px', height: '60px' }}\n initial={{ y: 60 }}\n animate={{ y: 0 }}\n exit={{\n y: 60,\n transitionEnd: {\n display: 'none',\n },\n }}\n transition={{ duration: 0.3 }}\n >\n <div className='pi-font-bold pi-text-sm pi-relative'>\n <div\n className={`pi-whitespace-nowrap pi-overflow-hidden ${\n isOpen ? 'pi-w-44' : 'pi-w-16'\n }`}\n >\n {transferring ? transferringName : displayName}\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 pi-to-gray-500'></div>\n </div>\n <div className=''>\n <Timer size='small' startTime={transferring ? transferringStartTime : startTime} />\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n )\n}\n\nexport default BackCall\n\ninterface BackCallTypes {\n isVisible: boolean\n}\n"],"names":["_a","isVisible","_b","useSelector","state","currentCall","number","displayName","transferring","transferringName","startTime","transferringStartTime","transferCalls","dispatch","useDispatch","isOpen","island","useEffect","callData","find","item","updateCurrentCall","React","createElement","AnimatePresence","framerMotion","exports","motion","div","className","concat","style","borderTopLeftRadius","borderTopRightRadius","height","initial","y","animate","exit","transitionEnd","display","transition","duration","Timer","size"],"mappings":"2gBAUoC,SAACA,GAAE,IAAAC,EAASD,EAAAC,UACxCC,EAQFC,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMC,WAAN,IAPpCC,EAAMJ,EAAAI,OACNC,EAAWL,EAAAK,YACXC,EAAYN,EAAAM,aACZC,EAAgBP,EAAAO,iBAChBC,EAASR,EAAAQ,UACTC,EAAqBT,EAAAS,sBACrBC,kBAEIC,EAAWC,EAAAA,cAETC,EAAWZ,eAAY,SAACC,GAAqB,OAAAA,EAAMY,iBAa3D,OAXAC,EAAAA,WAAU,WACR,IAAMC,EAA+BN,EAAcO,MAAK,SAACC,GAAS,OAAAA,EAAKd,SAAWA,CAAhB,IAE9DY,GACFL,EAASR,YAAYgB,kBAAkB,CACrCZ,iBAAkBS,EAASX,YAC3BI,sBAAuBO,EAASR,WAGtC,GAAG,CAACJ,IAGFgB,EAAAA,QAACC,cAAAC,EAAeC,aAAAC,QAAAF,gBACb,KAAAvB,GACCqB,EAAC,QAAAC,cAAAI,EAAAA,aAAAA,QAAAA,OAAOC,IACN,CAAAC,UAAW,8HAAAC,OACTf,EAAS,UAAY,UAAS,YAEhCgB,MAAO,CAAEC,oBAAqB,OAAQC,qBAAsB,OAAQC,OAAQ,QAC5EC,QAAS,CAAEC,EAAG,IACdC,QAAS,CAAED,EAAG,GACdE,KAAM,CACJF,EAAG,GACHG,cAAe,CACbC,QAAS,SAGbC,WAAY,CAAEC,SAAU,KAExBpB,EAAAA,QAAKC,cAAA,MAAA,CAAAM,UAAU,uCACbP,EAAAA,QACEC,cAAA,MAAA,CAAAM,UAAW,2CACTC,OAAAf,EAAS,UAAY,YAGtBP,EAAeC,EAAmBF,GAErCe,EAAA,QAAAC,cAAA,MAAA,CAAKM,UAAU,6GAEjBP,EAAAA,QAAKC,cAAA,MAAA,CAAAM,UAAU,IACbP,EAAAA,QAACC,cAAAoB,EAAAA,SAAMC,KAAK,QAAQlC,UAAWF,EAAeG,EAAwBD,MAMlF"}
1
+ {"version":3,"file":"BackCall.js","sources":["../../../src/components/CallView/BackCall.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC, useEffect, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport Timer from './Timer'\nimport { motion, AnimatePresence } from 'framer-motion/dist/framer-motion'\nimport { TransferCallsTypes } from '../../models/currentCall'\n\nconst BackCall: FC<BackCallTypes> = ({ isVisible }) => {\n const {\n number,\n displayName,\n transferring,\n transferringName,\n startTime,\n transferringStartTime,\n transferCalls,\n } = useSelector((state: RootState) => state.currentCall)\n const dispatch = useDispatch<Dispatch>()\n\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n useEffect(() => {\n const callData: TransferCallsTypes = transferCalls.find((item) => item.number !== number)\n // Handle call switch during transfer\n if (callData) {\n dispatch.currentCall.updateCurrentCall({\n transferringName: callData.displayName,\n transferringStartTime: callData.startTime,\n })\n }\n }, [number])\n\n return (\n <AnimatePresence>\n {isVisible && (\n <motion.div\n className={`pi-absolute pi-w-full pi-bg-gray-500 pi-flex pi-justify-between pi-text-gray-50 dark:pi-text-gray-50 -pi-mt-10 -pi-z-10 pi-font-sans pi-items-top ${\n isOpen ? 'pi-px-6' : 'pi-px-4'\n } pi-pt-3`}\n style={{ borderTopLeftRadius: '20px', borderTopRightRadius: '20px', height: '60px' }}\n initial={{ y: 60 }}\n animate={{ y: 0 }}\n exit={{\n y: 60,\n transitionEnd: {\n display: 'none',\n },\n }}\n transition={{ duration: 0.3 }}\n >\n <div className='pi-font-bold pi-text-sm pi-relative'>\n <div\n className={`pi-whitespace-nowrap pi-overflow-hidden ${\n isOpen ? 'pi-w-44' : 'pi-w-16'\n }`}\n >\n {transferring ? transferringName : displayName}\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 pi-to-gray-500'></div>\n </div>\n <div className=''>\n <Timer size='small' startTime={transferring ? transferringStartTime : startTime} />\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n )\n}\n\nexport default BackCall\n\ninterface BackCallTypes {\n isVisible: boolean\n}\n"],"names":["_a","isVisible","_b","useSelector","state","currentCall","number","displayName","transferring","transferringName","startTime","transferringStartTime","transferCalls","dispatch","useDispatch","isOpen","island","useEffect","callData","find","item","updateCurrentCall","React","createElement","AnimatePresence","framerMotion","exports","motion","div","className","concat","style","borderTopLeftRadius","borderTopRightRadius","height","initial","y","animate","exit","transitionEnd","display","transition","duration","Timer","size"],"mappings":"2gBAUoC,SAACA,GAAE,IAAAC,EAASD,EAAAC,UACxCC,EAQFC,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMC,WAAN,IAPpCC,EAAMJ,EAAAI,OACNC,EAAWL,EAAAK,YACXC,EAAYN,EAAAM,aACZC,EAAgBP,EAAAO,iBAChBC,EAASR,EAAAQ,UACTC,EAAqBT,EAAAS,sBACrBC,kBAEIC,EAAWC,EAAAA,cAETC,EAAWZ,eAAY,SAACC,GAAqB,OAAAA,EAAMY,iBAa3D,OAXAC,EAAAA,WAAU,WACR,IAAMC,EAA+BN,EAAcO,MAAK,SAACC,GAAS,OAAAA,EAAKd,SAAWA,CAAhB,IAE9DY,GACFL,EAASR,YAAYgB,kBAAkB,CACrCZ,iBAAkBS,EAASX,YAC3BI,sBAAuBO,EAASR,WAGtC,GAAG,CAACJ,IAGFgB,EAAAA,QAACC,cAAAC,EAAeC,aAAAC,QAAAF,gBACb,KAAAvB,GACCqB,EAAC,QAAAC,cAAAI,EAAAA,aAAAA,QAAAA,OAAOC,IACN,CAAAC,UAAW,qJAAAC,OACTf,EAAS,UAAY,UAAS,YAEhCgB,MAAO,CAAEC,oBAAqB,OAAQC,qBAAsB,OAAQC,OAAQ,QAC5EC,QAAS,CAAEC,EAAG,IACdC,QAAS,CAAED,EAAG,GACdE,KAAM,CACJF,EAAG,GACHG,cAAe,CACbC,QAAS,SAGbC,WAAY,CAAEC,SAAU,KAExBpB,EAAAA,QAAKC,cAAA,MAAA,CAAAM,UAAU,uCACbP,EAAAA,QACEC,cAAA,MAAA,CAAAM,UAAW,2CACTC,OAAAf,EAAS,UAAY,YAGtBP,EAAeC,EAAmBF,GAErCe,EAAA,QAAAC,cAAA,MAAA,CAAKM,UAAU,6GAEjBP,EAAAA,QAAKC,cAAA,MAAA,CAAAM,UAAU,IACbP,EAAAA,QAACC,cAAAoB,EAAAA,SAAMC,KAAK,QAAQlC,UAAWF,EAAeG,EAAwBD,MAMlF"}
@@ -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 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 l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=l(e);exports.default=function(){var l=e.useState(!1),o=l[0],s=l[1],u=e.useRef(null),d=e.useRef(null),c=r.framerMotion.exports.motion(t.StyledName),p=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)})),a.default.createElement(a.default.Fragment,null,(null==m?void 0:m.isIntrude)?a.default.createElement(c,{ref:u,className:"pi-whitespace-nowrap pi-relative pi-overflow-hidden"},a.default.createElement("div",{className:"pi-w-fit pi-relative pi-inline-block ".concat(o&&"animated-text"),ref:d},""!==(null==m?void 0:m.isIntrudeExtension)?"".concat(f("Common.Intrude"))+"-"+(null==m?void 0:m.isIntrudeExtension):"-"),a.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 pi-to-black"})):(null==m?void 0:m.isListen)?a.default.createElement(c,{ref:u,className:"pi-whitespace-nowrap pi-relative pi-overflow-hidden"},a.default.createElement("div",{className:"pi-w-fit pi-relative pi-inline-block ".concat(o&&"animated-text"),ref:d},""!==(null==m?void 0:m.isListenExtension)?"".concat(f("Common.Listen"))+"-"+(null==m?void 0:m.isListenExtension):"-"),a.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 pi-to-black"})):a.default.createElement(c,{ref:u,className:"pi-whitespace-nowrap pi-relative pi-overflow-hidden"},a.default.createElement("div",{className:"pi-w-fit pi-relative pi-inline-block ".concat(o&&"animated-text"),ref:d},p&&"<unknown>"===p?"PBX":p||(f("Call.Outgoing call")||"-")),a.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 pi-to-black"}," ")))};
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"}," ")))};
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 ${animateText && 'animated-text'}`}\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 pi-to-black'></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 ${animateText && 'animated-text'}`}\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 pi-to-black'></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 ${animateText && 'animated-text'}`}\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 pi-to-black'>\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,wCAAwCC,OAAAxB,GAAe,iBAClEsB,IAAKlB,GAEwC,MAA5CQ,eAAAA,EAAqBa,oBAClB,GAAGD,OAAAV,EAAE,mBAAsB,KAAMF,eAAAA,EAAqBa,oBACtD,KAENN,EAAAA,QAAAE,cAAA,MAAA,CAAKE,UAAU,2GAEfX,aAAA,EAAAA,EAAqBc,UACvBP,UAACE,cAAAhB,EACC,CAAAiB,IAAKpB,EACLqB,UAAU,uDAEVJ,UACEE,cAAA,MAAA,CAAAE,UAAW,wCAAwCC,OAAAxB,GAAe,iBAClEsB,IAAKlB,GAEuC,MAA3CQ,eAAAA,EAAqBe,mBAClB,GAAGH,OAAAV,EAAE,kBAAqB,KAAMF,eAAAA,EAAqBe,mBACrD,KAENR,EAAA,QAAAE,cAAA,MAAA,CAAKE,UAAU,0GAGjBJ,EAAC,QAAAE,cAAAhB,GACCiB,IAAKpB,EACLqB,UAAU,uDAEVJ,EAAAA,QAAAE,cAAA,MAAA,CACEE,UAAW,wCAAAC,OAAwCxB,GAAe,iBAClEsB,IAAKlB,GAEJI,GAA+B,cAAhBA,EACZ,MACAA,IAEAM,EAAE,uBAAyB,MAEjCK,UAAKE,cAAA,MAAA,CAAAE,UAAU,wGACZ,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 ? `${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,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("../../styles/Island.styles.js"),t=require("../../node_modules/i18next/dist/esm/i18next.js"),u=require("../../node_modules/react-redux/es/hooks/useSelector.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=n(e);exports.default=function(){var e=u.useSelector((function(e){return e.currentCall})).number,n=u.useSelector((function(e){return e.island})).isOpen;return s.default.createElement(r.StyledNumber,{isOpen:n},e&&"<unknown>"!==e?e:t.t("Call.In progress...")||"-")};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var r=require("../../styles/Island.styles.js"),t=require("../../node_modules/i18next/dist/esm/i18next.js"),s=require("../../node_modules/react-redux/es/hooks/useSelector.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=u(e);exports.default=function(){var e=s.useSelector((function(e){return e.currentCall})).number,u=s.useSelector((function(e){return e.island})).isOpen;return n.default.createElement(r.StyledNumber,{isOpen:u,className:"dark:pi-text-gray-50 pi-text-gray-600"},e&&"<unknown>"!==e?e:t.t("Call.In progress...")||"-")};
2
2
  //# sourceMappingURL=Number.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Number.js","sources":["../../../src/components/CallView/Number.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 { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\nimport { StyledNumber } from '../../styles/Island.styles'\nimport { t } from 'i18next'\n\nconst Number: FC = () => {\n const { number } = useSelector((state: RootState) => state.currentCall)\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n return (\n <StyledNumber isOpen={isOpen}>\n {number && number !== '<unknown>' ? number : t('Call.In progress...') || '-'}\n </StyledNumber>\n )\n}\n\nexport default Number\n"],"names":["number","useSelector","state","currentCall","isOpen","island","React","createElement","StyledNumber","t"],"mappings":"maASmB,WACT,IAAAA,EAAWC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,sBACnDC,EAAWH,eAAY,SAACC,GAAqB,OAAAA,EAAMG,iBAE3D,OACEC,EAAAA,QAAAC,cAACC,EAAAA,aAAY,CAACJ,OAAQA,GACnBJ,GAAqB,cAAXA,EAAyBA,EAASS,EAAAA,EAAE,wBAA0B,IAG/E"}
1
+ {"version":3,"file":"Number.js","sources":["../../../src/components/CallView/Number.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 { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\nimport { StyledNumber } from '../../styles/Island.styles'\nimport { t } from 'i18next'\n\nconst Number: FC = () => {\n const { number } = useSelector((state: RootState) => state.currentCall)\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n return (\n <StyledNumber isOpen={isOpen} className='dark:pi-text-gray-50 pi-text-gray-600'>\n {number && number !== '<unknown>' ? number : t('Call.In progress...') || '-'}\n </StyledNumber>\n )\n}\n\nexport default Number\n"],"names":["number","useSelector","state","currentCall","isOpen","island","React","createElement","StyledNumber","className","t"],"mappings":"maASmB,WACT,IAAAA,EAAWC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,sBACnDC,EAAWH,eAAY,SAACC,GAAqB,OAAAA,EAAMG,iBAE3D,OACEC,EAAAA,QAAAC,cAACC,EAAYA,aAAA,CAACJ,OAAQA,EAAQK,UAAU,yCACrCT,GAAqB,cAAXA,EAAyBA,EAASU,EAACA,EAAC,wBAA0B,IAG/E"}
@@ -4,4 +4,5 @@ export default Timer;
4
4
  export interface TimerProps {
5
5
  size?: 'small' | 'large';
6
6
  startTime: string;
7
+ isHome?: boolean;
7
8
  }
@@ -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 t=require("../../styles/Island.styles.js"),r=require("../../node_modules/react-moment/dist/index.js"),u=require("../../node_modules/react-redux/es/hooks/useSelector.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=n(e);exports.default=function(n){var s=n.size,i=void 0===s?"large":s,l=n.startTime,d=e.useState(0),o=d[0],m=d[1],f=u.useSelector((function(e){return e.island})).isOpen;return e.useEffect((function(){if(l){var e=(new Date).getTime()/1e3-Number(l);e<0&&m(e)}}),[l]),a.default.createElement(a.default.Fragment,null,null!=l&&a.default.createElement(t.StyledTimer,{isOpen:f,size:i},a.default.createElement(r.default,{date:Number(l)+o||(new Date).getTime()/1e3,interval:1e3,format:"h:mm:ss",trim:!1,unix:!0,durationFromNow:!0})))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("../../styles/Island.styles.js"),r=require("../../node_modules/react-moment/dist/index.js"),a=require("../../node_modules/react-redux/es/hooks/useSelector.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=u(e);exports.default=function(u){var s=u.size,n=void 0===s?"large":s,d=u.startTime,l=u.isHome,o=e.useState(0),m=o[0],c=o[1],f=a.useSelector((function(e){return e.island})).isOpen;return e.useEffect((function(){if(d){var e=(new Date).getTime()/1e3-Number(d);e<0&&c(e)}}),[d]),i.default.createElement(i.default.Fragment,null,null!=d&&i.default.createElement(t.StyledTimer,{isOpen:f,size:n},i.default.createElement(r.default,{date:Number(d)+m||(new Date).getTime()/1e3,interval:1e3,format:"h:mm:ss",trim:!1,unix:!0,durationFromNow:!0,className:"".concat(void 0!==l&&l?"pi-text-gray-700 dark:pi-text-gray-50":"pi-text-gray-50 dark:pi-text-gray-50")})))};
2
2
  //# sourceMappingURL=Timer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Timer.js","sources":["../../../src/components/CallView/Timer.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { useState, useEffect, type FC } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\nimport { StyledTimer } from '../../styles/Island.styles'\nimport Moment from 'react-moment'\n\nconst Timer: FC<TimerProps> = ({ size = 'large', startTime }) => {\n // Set timer negative differences\n const [timerNegativeDifference, setTimerNegativeDifference] = useState<number>(0)\n // Get isOpen from the island store\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n useEffect(() => {\n if (startTime) {\n const difference = new Date().getTime() / 1000 - Number(startTime)\n if (difference < 0) {\n setTimerNegativeDifference(difference)\n }\n }\n }, [startTime])\n\n return (\n <>\n {startTime != null && (\n <StyledTimer isOpen={isOpen} size={size}>\n <Moment\n date={Number(startTime) + timerNegativeDifference || new Date().getTime() / 1000}\n interval={1000}\n format='h:mm:ss'\n trim={false}\n unix\n durationFromNow\n />\n </StyledTimer>\n )}\n </>\n )\n}\n\nexport default Timer\n\nexport interface TimerProps {\n size?: 'small' | 'large'\n startTime: string\n}\n"],"names":["_a","_b","size","startTime","_c","useState","timerNegativeDifference","setTimerNegativeDifference","isOpen","useSelector","state","island","useEffect","difference","Date","getTime","Number","React","createElement","Fragment","StyledTimer","Moment","date","interval","format","trim","unix","durationFromNow"],"mappings":"kaAS8B,SAACA,GAAE,IAAAC,EAAAD,EAAAE,KAAAA,OAAI,IAAAD,EAAG,QAAOA,EAAEE,EAASH,EAAAG,UAElDC,EAAwDC,EAAAA,SAAiB,GAAxEC,EAAuBF,EAAA,GAAEG,EAA0BH,EAAA,GAElDI,EAAWC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,iBAW3D,OATAC,EAAAA,WAAU,WACR,GAAIT,EAAW,CACb,IAAMU,GAAa,IAAIC,MAAOC,UAAY,IAAOC,OAAOb,GACpDU,EAAa,GACfN,EAA2BM,EAE9B,CACH,GAAG,CAACV,IAGFc,EAAAA,QACGC,cAAAD,EAAAA,QAAAE,SAAA,KAAa,MAAbhB,GACCc,EAAAA,QAAAC,cAACE,EAAAA,YAAW,CAACZ,OAAQA,EAAQN,KAAMA,GACjCe,EAAAA,QAAAC,cAACG,UACC,CAAAC,KAAMN,OAAOb,GAAaG,IAA2B,IAAIQ,MAAOC,UAAY,IAC5EQ,SAAU,IACVC,OAAO,UACPC,MAAM,EACNC,QACAC,iBAAe,KAM3B"}
1
+ {"version":3,"file":"Timer.js","sources":["../../../src/components/CallView/Timer.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { useState, useEffect, type FC } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\nimport { StyledTimer } from '../../styles/Island.styles'\nimport Moment from 'react-moment'\n\nconst Timer: FC<TimerProps> = ({ size = 'large', startTime, isHome }) => {\n // Set timer negative differences\n const [timerNegativeDifference, setTimerNegativeDifference] = useState<number>(0)\n // Get isOpen from the island store\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n useEffect(() => {\n if (startTime) {\n const difference = new Date().getTime() / 1000 - Number(startTime)\n if (difference < 0) {\n setTimerNegativeDifference(difference)\n }\n }\n }, [startTime])\n\n return (\n <>\n {startTime != null && (\n <StyledTimer isOpen={isOpen} size={size}>\n <Moment\n date={Number(startTime) + timerNegativeDifference || new Date().getTime() / 1000}\n interval={1000}\n format='h:mm:ss'\n trim={false}\n unix\n durationFromNow\n className={`${\n isHome !== undefined && isHome\n ? 'pi-text-gray-700 dark:pi-text-gray-50'\n : 'pi-text-gray-50 dark:pi-text-gray-50'\n }`}\n />\n </StyledTimer>\n )}\n </>\n )\n}\n\nexport default Timer\n\nexport interface TimerProps {\n size?: 'small' | 'large'\n startTime: string\n // when the timer is used in the home view or in the pill view\n isHome?: boolean\n}\n"],"names":["_a","_b","size","startTime","isHome","_c","useState","timerNegativeDifference","setTimerNegativeDifference","isOpen","useSelector","state","island","useEffect","difference","Date","getTime","Number","React","createElement","Fragment","StyledTimer","Moment","date","interval","format","trim","unix","durationFromNow","className","concat","undefined"],"mappings":"kaAS8B,SAACA,OAAEC,EAAcD,EAAAE,KAAdA,OAAI,IAAAD,EAAG,QAAOA,EAAEE,EAASH,EAAAG,UAAEC,EAAMJ,EAAAI,OAE1DC,EAAwDC,EAAAA,SAAiB,GAAxEC,EAAuBF,EAAA,GAAEG,EAA0BH,EAAA,GAElDI,EAAWC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,iBAW3D,OATAC,EAAAA,WAAU,WACR,GAAIV,EAAW,CACb,IAAMW,GAAa,IAAIC,MAAOC,UAAY,IAAOC,OAAOd,GACpDW,EAAa,GACfN,EAA2BM,EAE9B,CACH,GAAG,CAACX,IAGFe,EAAAA,QACGC,cAAAD,EAAAA,QAAAE,SAAA,KAAa,MAAbjB,GACCe,EAAAA,QAAAC,cAACE,EAAAA,YAAW,CAACZ,OAAQA,EAAQP,KAAMA,GACjCgB,EAAAA,QAAAC,cAACG,EAAAA,QACC,CAAAC,KAAMN,OAAOd,GAAaI,IAA2B,IAAIQ,MAAOC,UAAY,IAC5EQ,SAAU,IACVC,OAAO,UACPC,MAAM,EACNC,QACAC,iBAAe,EACfC,UAAW,GAAAC,YACEC,IAAX3B,GAAwBA,EACpB,wCACA,2CAOlB"}