@nethesis/phone-island 0.7.119 → 0.7.121

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 (35) hide show
  1. package/dist/App.js +1 -1
  2. package/dist/App.js.map +1 -1
  3. package/dist/components/AudioPlayerView/index.js +1 -1
  4. package/dist/components/AudioPlayerView/index.js.map +1 -1
  5. package/dist/components/CallView/Actions.js +1 -1
  6. package/dist/components/CallView/Actions.js.map +1 -1
  7. package/dist/components/KeypadView/index.js +1 -1
  8. package/dist/components/KeypadView/index.js.map +1 -1
  9. package/dist/components/RecorderView/Actions.js +1 -1
  10. package/dist/components/RecorderView/Actions.js.map +1 -1
  11. package/dist/components/Socket.js +1 -1
  12. package/dist/components/Socket.js.map +1 -1
  13. package/dist/components/TransferView/TransferActions.js +1 -1
  14. package/dist/components/TransferView/TransferActions.js.map +1 -1
  15. package/dist/components/TransferView/TransferList.js +1 -1
  16. package/dist/components/TransferView/TransferList.js.map +1 -1
  17. package/dist/components/WebRTC.js +1 -1
  18. package/dist/components/WebRTC.js.map +1 -1
  19. package/dist/events/CallEvents.d.ts +0 -4
  20. package/dist/events/CallEvents.js +1 -1
  21. package/dist/events/CallEvents.js.map +1 -1
  22. package/dist/events/RecorderEvents.js +1 -1
  23. package/dist/events/RecorderEvents.js.map +1 -1
  24. package/dist/lib/phone/call.d.ts +4 -1
  25. package/dist/lib/phone/call.js +1 -1
  26. package/dist/lib/phone/call.js.map +1 -1
  27. package/dist/lib/user/default_device.js.map +1 -1
  28. package/dist/models/currentUser.d.ts +1 -0
  29. package/dist/models/currentUser.js +1 -1
  30. package/dist/models/currentUser.js.map +1 -1
  31. package/dist/models/fetchDefaults.js.map +1 -1
  32. package/dist/services/user.d.ts +1 -0
  33. package/dist/services/user.js.map +1 -1
  34. package/dist/static/test_audio.d.ts +2 -0
  35. package/package.json +1 -1
package/dist/App.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("./components/Events.js"),s=require("./components/Socket.js"),r=require("./components/WebRTC.js"),n=require("./components/Island.js"),o=require("./components/RestAPI.js"),a=require("./utils/customHooks/useEventListener.js");require("./node_modules/react-redux/es/index.js");var u=require("./store/index.js");require("./node_modules/@fortawesome/react-fontawesome/index.es.js"),require("./node_modules/framer-motion/dist/framer-motion.js");var i=require("./node_modules/js-base64/base64.mjs.js"),d=require("./workers/wake_up.js"),l=require("./lib/i18n.js");require("./node_modules/react-tooltip/dist/react-tooltip.min.css.js");var c=require("./lib/webrtc/messages.js"),m=require("./node_modules/react-redux/es/components/Provider.js");function f(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 p=f(e),j=function(f){var j=f.dataConfig,q=f.showAlways,h=void 0!==q&&q,v=i.Base64.atob(j||"").split(":"),E=v[0],_=v[1],b=v[2],x=v[3],k=v[4],w=v[5],S=v[6],I=e.useState(!1),P=I[0],y=I[1],C=e.useState(!1),L=C[0],g=C[1],A=e.useState(!1),N=A[0],R=A[1];e.useEffect((function(){var e=new Worker(d.default,{type:"module"});return e.onmessage=function(e){"wakeup"===e.data&&y(!0)},function(){e.terminate()}}),[]),e.useEffect((function(){N&&L&&(y(!1),g(!1),R(!1))}),[N,L]),a.useEventListener("phone-island-listen-call",(function(e){u.store.dispatch.listen.setUpdateListenStatus(!0,e.to)})),a.useEventListener("phone-island-intrude-call",(function(e){u.store.dispatch.listen.setUpdateIntrudeStatus(!0,e.to)})),a.useEventListener("phone-island-detach",(function(){c.detach()}));var T=e.useState(!0),H=T[0],W=T[1];return e.useEffect((function(){H&&(l.loadI18n(),W(!1))}),[H]),p.default.createElement(p.default.Fragment,null,p.default.createElement(m.default,{store:u.store},p.default.createElement(r.WebRTC,{hostName:E,sipExten:x,sipSecret:k,sipHost:w,sipPort:S,reload:P,reloadedCallback:function(){return g(!0)}},p.default.createElement(o.RestAPI,{hostName:E,username:_,authToken:b},p.default.createElement(s.Socket,{hostName:E,username:_,authToken:b,reload:P,reloadedCallback:function(){return R(!0)}},p.default.createElement(t.Events,{sipHost:w},p.default.createElement(n.Island,{showAlways:h})))))))};j.displayName="PhoneIsland",exports.PhoneIsland=j;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("./components/Events.js"),s=require("./components/Socket.js"),n=require("./components/WebRTC.js"),r=require("./components/Island.js"),a=require("./components/RestAPI.js"),o=require("./utils/customHooks/useEventListener.js"),i=require("./utils/genericFunctions/eventDispatch.js");require("./node_modules/react-redux/es/index.js");var l=require("./store/index.js");require("./node_modules/@fortawesome/react-fontawesome/index.es.js"),require("./node_modules/framer-motion/dist/framer-motion.js");var u=require("./node_modules/js-base64/base64.mjs.js"),d=require("./workers/wake_up.js"),c=require("./lib/i18n.js");require("./node_modules/react-tooltip/dist/react-tooltip.min.css.js");var p=require("./lib/webrtc/messages.js"),m=require("./node_modules/react-redux/es/components/Provider.js");function f(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 h=f(e),v=function(f){var v=f.dataConfig,j=f.showAlways,q=void 0!==j&&j,E=u.Base64.atob(v||"").split(":"),w=E[0],b=E[1],k=E[2],_=E[3],x=E[4],I=E[5],y=E[6],D=e.useState(!1),g=D[0],C=D[1],P=e.useState(!1),S=P[0],L=P[1],A=e.useState(!1),N=A[0],R=A[1];e.useEffect((function(){var e=new Worker(d.default,{type:"module"});return e.onmessage=function(e){"wakeup"===e.data&&C(!0)},function(){e.terminate()}}),[]),e.useEffect((function(){N&&S&&(C(!1),L(!1),R(!1))}),[N,S]),o.useEventListener("phone-island-call-keypad-close",(function(){l.store.dispatch.island.setIslandView("call"),i.eventDispatch("phone-island-call-keypad-closed",{})})),o.useEventListener("phone-island-call-transfer-close",(function(){l.store.dispatch.island.setIslandView("call"),i.eventDispatch("phone-island-call-transfer-closed",{})})),o.useEventListener("phone-island-recording-close",(function(){l.store.dispatch.island.setIslandView(null),i.eventDispatch("phone-island-recording-closed",{})})),o.useEventListener("phone-island-audio-player-close",(function(){l.store.dispatch.island.setIslandView(null),i.eventDispatch("phone-island-audio-player-closed",{})})),o.useEventListener("phone-island-detach",(function(e){p.detach(),l.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),i.eventDispatch("phone-island-detached",{})}));var T=e.useState(!0),V=T[0],H=T[1];return e.useEffect((function(){V&&(c.loadI18n(),H(!1))}),[V]),h.default.createElement(h.default.Fragment,null,h.default.createElement(m.default,{store:l.store},h.default.createElement(n.WebRTC,{hostName:w,sipExten:_,sipSecret:x,sipHost:I,sipPort:y,reload:g,reloadedCallback:function(){return L(!0)}},h.default.createElement(a.RestAPI,{hostName:w,username:b,authToken:k},h.default.createElement(s.Socket,{hostName:w,username:b,authToken:k,reload:g,reloadedCallback:function(){return R(!0)}},h.default.createElement(t.Events,{sipHost:I},h.default.createElement(r.Island,{showAlways:q})))))))};v.displayName="PhoneIsland",exports.PhoneIsland=v;
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 } from './utils'\nimport { detach } from './lib/webrtc/messages'\n\ninterface PhoneIslandProps {\n dataConfig: string\n showAlways?: boolean\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-listen-call', (data: any) => {\n store.dispatch.listen.setUpdateListenStatus(true, data.to)\n })\n\n useEventListener('phone-island-intrude-call', (data: any) => {\n store.dispatch.listen.setUpdateIntrudeStatus(true, data.to)\n })\n\n useEventListener('phone-island-detach', () => {\n detach()\n })\n\n const [firstRenderI18n, setFirstRenderI18n] = useState(true)\n //initialize i18n\n useEffect(() => {\n if (firstRenderI18n) {\n loadI18n()\n setFirstRenderI18n(false)\n }\n }, [firstRenderI18n])\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","listen","setUpdateListenStatus","to","setUpdateIntrudeStatus","detach","_f","firstRenderI18n","setFirstRenderI18n","loadI18n","React","createElement","Fragment","Provider","WebRTC","hostName","sipExten","sipSecret","sipHost","sipPort","reloadedCallback","RestAPI","username","authToken","Socket","Events","Island","displayName"],"mappings":"gnCAiBaA,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,mBAAiB,4BAA4B,SAACF,GAC5CG,EAAKA,MAACC,SAASC,OAAOC,uBAAsB,EAAMN,EAAKO,GACzD,IAEAL,mBAAiB,6BAA6B,SAACF,GAC7CG,EAAKA,MAACC,SAASC,OAAOG,wBAAuB,EAAMR,EAAKO,GAC1D,IAEAL,EAAgBA,iBAAC,uBAAuB,WACtCO,EAAAA,QACF,IAEM,IAAAC,EAAwC1B,EAAAA,UAAS,GAAhD2B,EAAeD,EAAA,GAAEE,EAAkBF,EAAA,GAS1C,OAPAjB,EAAAA,WAAU,WACJkB,IACFE,EAAAA,WACAD,GAAmB,GAEvB,GAAG,CAACD,IAGFG,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAAAC,cAACE,EAAAA,QAAQ,CAACd,MAAOA,EAAAA,OACfW,UAAAC,cAACG,EAAMA,OAAA,CACLC,SAAU3C,EACV4C,SAAUzC,EACV0C,UAAWzC,EACX0C,QAASzC,EACT0C,QAASzC,EACTG,OAAQA,EACRuC,iBAAkB,WAAM,OAAAnC,GAAkB,KAE1CyB,UAAAC,cAACU,EAAOA,QAAA,CAACN,SAAU3C,EAAWkD,SAAUjD,EAAUkD,UAAWjD,GAC3DoC,EAAC,QAAAC,cAAAa,SACC,CAAAT,SAAU3C,EACVkD,SAAUjD,EACVkD,UAAWjD,EACXO,OAAQA,EACRuC,iBAAkB,WAAM,OAAAhC,GAAkB,KAE1CsB,EAAAA,QAAAC,cAACc,EAAAA,OAAM,CAACP,QAASzC,GACfiC,UAAAC,cAACe,EAAMA,OAAA,CAAC3D,WAAYA,SAQpC,EAEAJ,EAAYgE,YAAc"}
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 } from './utils'\nimport { detach } from './lib/webrtc/messages'\n\ninterface PhoneIslandProps {\n dataConfig: string\n showAlways?: boolean\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 const [firstRenderI18n, setFirstRenderI18n] = useState(true)\n //initialize i18n\n useEffect(() => {\n if (firstRenderI18n) {\n loadI18n()\n setFirstRenderI18n(false)\n }\n }, [firstRenderI18n])\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","_f","firstRenderI18n","setFirstRenderI18n","loadI18n","React","createElement","Fragment","Provider","WebRTC","hostName","sipExten","sipSecret","sipHost","sipPort","reloadedCallback","RestAPI","username","authToken","Socket","Events","Island","displayName"],"mappings":"uqCAiBaA,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,IAEM,IAAAK,EAAwC5B,EAAAA,UAAS,GAAhD6B,EAAeD,EAAA,GAAEE,EAAkBF,EAAA,GAS1C,OAPAnB,EAAAA,WAAU,WACJoB,IACFE,EAAAA,WACAD,GAAmB,GAEvB,GAAG,CAACD,IAGFG,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAAAC,cAACE,EAAAA,QAAQ,CAAChB,MAAOA,EAAAA,OACfa,UAAAC,cAACG,EAAMA,OAAA,CACLC,SAAU7C,EACV8C,SAAU3C,EACV4C,UAAW3C,EACX4C,QAAS3C,EACT4C,QAAS3C,EACTG,OAAQA,EACRyC,iBAAkB,WAAM,OAAArC,GAAkB,KAE1C2B,UAAAC,cAACU,EAAOA,QAAA,CAACN,SAAU7C,EAAWoD,SAAUnD,EAAUoD,UAAWnD,GAC3DsC,EAAC,QAAAC,cAAAa,SACC,CAAAT,SAAU7C,EACVoD,SAAUnD,EACVoD,UAAWnD,EACXO,OAAQA,EACRyC,iBAAkB,WAAM,OAAAlC,GAAkB,KAE1CwB,EAAAA,QAAAC,cAACc,EAAAA,OAAM,CAACP,QAAS3C,GACfmC,UAAAC,cAACe,EAAMA,OAAA,CAAC7D,WAAYA,SAQpC,EAEAJ,EAAYkE,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 t=require("./Avatar.js"),r=require("../AudioBars.js"),a=require("./Progress.js"),i=require("../Button.js"),l=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),o=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),s=require("../../node_modules/react-tooltip/dist/react-tooltip.min.cjs.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/defineProperty.js"),require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/typeof.js"),require("../../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../../node_modules/react-i18next/dist/es/context.js");var n=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var u=require("../../node_modules/react-redux/es/hooks/useSelector.js"),d=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var p=c(e),m=function(){var e=u.useSelector((function(e){return e.player})),c=e.audioPlayerTrackType,m=e.audioPlayerTrackName,f=e.audioPlayer,x=e.audioPlayerPlaying,y=u.useSelector((function(e){return e.island})).isOpen,j=d.useDispatch();var v=n.useTranslation().t;return p.default.createElement("div",{className:"pi-flex pi-gap-7 pi-flex-col"},p.default.createElement("div",{className:"pi-flex pi-gap-4"},p.default.createElement(t.Avatar,{type:c}),p.default.createElement("div",{className:"pi-flex pi-items-center pi-w-full"},p.default.createElement("div",{style:{width:y?"202px":"60px"},className:"pi-text-base pi-overflow-hidden pi-text-ellipsis pi-whitespace-nowrap pi-inline-block"},m)),p.default.createElement(r.AudioBars,{audioElement:f&&f.current,size:y?"large":"small"})),y&&p.default.createElement("div",null,p.default.createElement(a.Progress,null),p.default.createElement("div",{className:"pi-w-full pi-flex pi-justify-center pi-items-center pi-pt-7"},p.default.createElement(i.Button,{onClick:x?function(){j.player.pauseAudioPlayer()}:function(){j.player.startAudioPlayer((function(){}))},variant:"default",style:{transform:"scale(1.15)"},"data-tooltip-id":"tooltip","data-tooltip-content":"".concat(v(x?"Tooltip.Pause":"Tooltip.Play"))},x?p.default.createElement(l.FontAwesomeIcon,{icon:o.faPause,size:"xl"}):p.default.createElement(l.FontAwesomeIcon,{icon:o.faPlay,size:"xl"})))),p.default.createElement(s.Tooltip,{className:"pi-z-20",id:"tooltip",place:"bottom"}))};exports.KeypadView=m,exports.default=m;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("./Avatar.js"),r=require("../AudioBars.js"),a=require("./Progress.js"),i=require("../Button.js"),s=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),l=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),o=require("../../node_modules/react-tooltip/dist/react-tooltip.min.cjs.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/defineProperty.js"),require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/typeof.js"),require("../../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../../node_modules/react-i18next/dist/es/context.js");var n=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var u=require("../../utils/customHooks/useEventListener.js"),d=require("../../utils/genericFunctions/eventDispatch.js"),c=require("../../node_modules/react-redux/es/hooks/useSelector.js"),p=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function m(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var f=m(e),y=function(){var e=c.useSelector((function(e){return e.player})),m=e.audioPlayerTrackType,y=e.audioPlayerTrackName,x=e.audioPlayer,j=e.audioPlayerPlaying,v=c.useSelector((function(e){return e.island})).isOpen,h=p.useDispatch();function q(){h.player.startAudioPlayer((function(){})),d.eventDispatch("phone-island-audio-player-played",{})}function _(){h.player.pauseAudioPlayer(),d.eventDispatch("phone-island-audio-player-paused",{})}u.useEventListener("phone-island-audio-player-play",(function(e){q()})),u.useEventListener("phone-island-audio-player-pause",(function(e){_()}));var E=n.useTranslation().t;return f.default.createElement("div",{className:"pi-flex pi-gap-7 pi-flex-col"},f.default.createElement("div",{className:"pi-flex pi-gap-4"},f.default.createElement(t.Avatar,{type:m}),f.default.createElement("div",{className:"pi-flex pi-items-center pi-w-full"},f.default.createElement("div",{style:{width:v?"202px":"60px"},className:"pi-text-base pi-overflow-hidden pi-text-ellipsis pi-whitespace-nowrap pi-inline-block"},y)),f.default.createElement(r.AudioBars,{audioElement:x&&x.current,size:v?"large":"small"})),v&&f.default.createElement("div",null,f.default.createElement(a.Progress,null),f.default.createElement("div",{className:"pi-w-full pi-flex pi-justify-center pi-items-center pi-pt-7"},f.default.createElement(i.Button,{onClick:j?_:q,variant:"default",style:{transform:"scale(1.15)"},"data-tooltip-id":"tooltip","data-tooltip-content":"".concat(E(j?"Tooltip.Pause":"Tooltip.Play"))},j?f.default.createElement(s.FontAwesomeIcon,{icon:l.faPause,size:"xl"}):f.default.createElement(s.FontAwesomeIcon,{icon:l.faPlay,size:"xl"})))),f.default.createElement(o.Tooltip,{className:"pi-z-20",id:"tooltip",place:"bottom"}))};exports.KeypadView=y,exports.default=y;
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/AudioPlayerView/index.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 { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { Avatar } from './Avatar'\nimport { AudioBars } from '../AudioBars'\nimport Progress from './Progress'\nimport { Button } from '../Button'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faPause, faPlay } from '@fortawesome/free-solid-svg-icons'\nimport { Tooltip } from 'react-tooltip/dist/react-tooltip.min.cjs'\nimport { useTranslation } from 'react-i18next'\n\nexport const KeypadView: FC<KeypadViewTypes> = () => {\n const { audioPlayerTrackType, audioPlayerTrackName, audioPlayer, audioPlayerPlaying } =\n useSelector((state: RootState) => state.player)\n const { isOpen } = useSelector((state: RootState) => state.island)\n const dispatch = useDispatch<Dispatch>()\n\n function startPlaying() {\n dispatch.player.startAudioPlayer(() => {})\n }\n\n function pausePlaying() {\n dispatch.player.pauseAudioPlayer()\n }\n\n const { t } = useTranslation()\n\n return (\n <div className='pi-flex pi-gap-7 pi-flex-col'>\n <div className='pi-flex pi-gap-4'>\n <Avatar type={audioPlayerTrackType} />\n <div className='pi-flex pi-items-center pi-w-full'>\n <div\n style={{\n width: isOpen ? '202px' : '60px',\n }}\n className={`pi-text-base pi-overflow-hidden pi-text-ellipsis pi-whitespace-nowrap pi-inline-block`}\n >\n {audioPlayerTrackName}\n </div>\n </div>\n <AudioBars\n audioElement={audioPlayer && audioPlayer.current}\n size={isOpen ? 'large' : 'small'}\n />\n </div>\n {isOpen && (\n <div>\n <Progress />\n <div className='pi-w-full pi-flex pi-justify-center pi-items-center pi-pt-7'>\n <Button\n onClick={audioPlayerPlaying ? pausePlaying : startPlaying}\n variant='default'\n style={{ transform: 'scale(1.15)' }}\n data-tooltip-id='tooltip'\n data-tooltip-content={audioPlayerPlaying ? `${t('Tooltip.Pause')}` : `${t('Tooltip.Play')}`}\n >\n {audioPlayerPlaying ? (\n <FontAwesomeIcon icon={faPause} size='xl' />\n ) : (\n <FontAwesomeIcon icon={faPlay} size='xl' />\n )}\n </Button>\n </div>\n </div>\n )}\n {/* Buttons tooltips */}\n <Tooltip className='pi-z-20' id='tooltip' place='bottom' />\n </div>\n )\n}\n\nexport default KeypadView\n\nexport interface KeypadViewTypes {}\n"],"names":["KeypadView","_a","useSelector","state","player","audioPlayerTrackType","audioPlayerTrackName","audioPlayer","audioPlayerPlaying","isOpen","island","dispatch","useDispatch","t","useTranslation","React","createElement","className","Avatar","type","style","width","AudioBars","audioElement","current","size","Progress","Button","onClick","pauseAudioPlayer","startAudioPlayer","variant","transform","concat","FontAwesomeIcon","icon","faPause","faPlay","Tooltip","id","place"],"mappings":"wyCAeaA,EAAkC,WACvC,IAAAC,EACJC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,UADlCC,EAAoBJ,EAAAI,qBAAEC,EAAoBL,EAAAK,qBAAEC,EAAWN,EAAAM,YAAEC,EAAkBP,EAAAO,mBAE3EC,EAAWP,eAAY,SAACC,GAAqB,OAAAA,EAAMO,iBACrDC,EAAWC,EAAAA,cAUT,IAAAC,EAAMC,qBAEd,OACEC,EAAA,QAAAC,cAAA,MAAA,CAAKC,UAAU,gCACbF,EAAAA,QAAKC,cAAA,MAAA,CAAAC,UAAU,oBACbF,EAAAA,QAAAC,cAACE,EAAAA,OAAM,CAACC,KAAMd,IACdU,EAAAA,QAAKC,cAAA,MAAA,CAAAC,UAAU,qCACbF,EAAAA,QAAAC,cAAA,MAAA,CACEI,MAAO,CACLC,MAAOZ,EAAS,QAAU,QAE5BQ,UAAW,yFAEVX,IAGLS,EAAAA,QAACC,cAAAM,EAAAA,WACCC,aAAchB,GAAeA,EAAYiB,QACzCC,KAAMhB,EAAS,QAAU,WAG5BA,GACCM,EAAA,QAAAC,cAAA,MAAA,KACED,UAAAC,cAACU,EAAQA,SAAG,MACZX,EAAAA,QAAKC,cAAA,MAAA,CAAAC,UAAU,+DACbF,EAAAA,QAAAC,cAACW,SACC,CAAAC,QAASpB,EA9BrB,WACEG,EAASP,OAAOyB,kBACjB,EAND,WACElB,EAASP,OAAO0B,kBAAiB,WAAQ,GAC1C,EAiCWC,QAAQ,UACRX,MAAO,CAAEY,UAAW,iCACJ,UAAS,uBACkB,GAAAC,OAAGpB,EAAxBL,EAA0B,gBAA0B,kBAEzEA,EACCO,EAAAA,QAACC,cAAAkB,mBAAgBC,KAAMC,EAAAA,QAASX,KAAK,OAErCV,wBAACmB,EAAeA,gBAAA,CAACC,KAAME,SAAQZ,KAAK,UAO9CV,EAAAA,QAAAC,cAACsB,UAAQ,CAAArB,UAAU,UAAUsB,GAAG,UAAUC,MAAM,WAGtD"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/AudioPlayerView/index.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 { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { Avatar } from './Avatar'\nimport { AudioBars } from '../AudioBars'\nimport Progress from './Progress'\nimport { Button } from '../Button'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faPause, faPlay } from '@fortawesome/free-solid-svg-icons'\nimport { Tooltip } from 'react-tooltip/dist/react-tooltip.min.cjs'\nimport { useTranslation } from 'react-i18next'\nimport { useEventListener, eventDispatch } from '../../utils'\n\nexport const KeypadView: FC<KeypadViewTypes> = () => {\n const { audioPlayerTrackType, audioPlayerTrackName, audioPlayer, audioPlayerPlaying } =\n useSelector((state: RootState) => state.player)\n const { isOpen } = useSelector((state: RootState) => state.island)\n const dispatch = useDispatch<Dispatch>()\n\n function startPlaying() {\n dispatch.player.startAudioPlayer(() => {})\n eventDispatch('phone-island-audio-player-played', {})\n }\n useEventListener('phone-island-audio-player-play', (data: {}) => {\n startPlaying()\n })\n\n function pausePlaying() {\n dispatch.player.pauseAudioPlayer()\n eventDispatch('phone-island-audio-player-paused', {})\n }\n useEventListener('phone-island-audio-player-pause', (data: {}) => {\n pausePlaying()\n })\n\n const { t } = useTranslation()\n\n return (\n <div className='pi-flex pi-gap-7 pi-flex-col'>\n <div className='pi-flex pi-gap-4'>\n <Avatar type={audioPlayerTrackType} />\n <div className='pi-flex pi-items-center pi-w-full'>\n <div\n style={{\n width: isOpen ? '202px' : '60px',\n }}\n className={`pi-text-base pi-overflow-hidden pi-text-ellipsis pi-whitespace-nowrap pi-inline-block`}\n >\n {audioPlayerTrackName}\n </div>\n </div>\n <AudioBars\n audioElement={audioPlayer && audioPlayer.current}\n size={isOpen ? 'large' : 'small'}\n />\n </div>\n {isOpen && (\n <div>\n <Progress />\n <div className='pi-w-full pi-flex pi-justify-center pi-items-center pi-pt-7'>\n <Button\n onClick={audioPlayerPlaying ? pausePlaying : startPlaying}\n variant='default'\n style={{ transform: 'scale(1.15)' }}\n data-tooltip-id='tooltip'\n data-tooltip-content={audioPlayerPlaying ? `${t('Tooltip.Pause')}` : `${t('Tooltip.Play')}`}\n >\n {audioPlayerPlaying ? (\n <FontAwesomeIcon icon={faPause} size='xl' />\n ) : (\n <FontAwesomeIcon icon={faPlay} size='xl' />\n )}\n </Button>\n </div>\n </div>\n )}\n {/* Buttons tooltips */}\n <Tooltip className='pi-z-20' id='tooltip' place='bottom' />\n </div>\n )\n}\n\nexport default KeypadView\n\nexport interface KeypadViewTypes {}\n"],"names":["KeypadView","_a","useSelector","state","player","audioPlayerTrackType","audioPlayerTrackName","audioPlayer","audioPlayerPlaying","isOpen","island","dispatch","useDispatch","startPlaying","startAudioPlayer","eventDispatch","pausePlaying","pauseAudioPlayer","useEventListener","data","t","useTranslation","React","createElement","className","Avatar","type","style","width","AudioBars","audioElement","current","size","Progress","Button","onClick","variant","transform","concat","FontAwesomeIcon","icon","faPause","faPlay","Tooltip","id","place"],"mappings":"45CAgBaA,EAAkC,WACvC,IAAAC,EACJC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,UADlCC,EAAoBJ,EAAAI,qBAAEC,EAAoBL,EAAAK,qBAAEC,EAAWN,EAAAM,YAAEC,EAAkBP,EAAAO,mBAE3EC,EAAWP,eAAY,SAACC,GAAqB,OAAAA,EAAMO,iBACrDC,EAAWC,EAAAA,cAEjB,SAASC,IACPF,EAASP,OAAOU,kBAAiB,WAAQ,IACzCC,gBAAc,mCAAoC,CAAA,EACnD,CAKD,SAASC,IACPL,EAASP,OAAOa,mBAChBF,gBAAc,mCAAoC,CAAA,EACnD,CAPDG,mBAAiB,kCAAkC,SAACC,GAClDN,GACF,IAMAK,mBAAiB,mCAAmC,SAACC,GACnDH,GACF,IAEQ,IAAAI,EAAMC,qBAEd,OACEC,EAAA,QAAAC,cAAA,MAAA,CAAKC,UAAU,gCACbF,EAAAA,QAAKC,cAAA,MAAA,CAAAC,UAAU,oBACbF,EAAAA,QAAAC,cAACE,EAAAA,OAAM,CAACC,KAAMrB,IACdiB,EAAAA,QAAKC,cAAA,MAAA,CAAAC,UAAU,qCACbF,EAAAA,QAAAC,cAAA,MAAA,CACEI,MAAO,CACLC,MAAOnB,EAAS,QAAU,QAE5Be,UAAW,yFAEVlB,IAGLgB,EAAAA,QAACC,cAAAM,EAAAA,WACCC,aAAcvB,GAAeA,EAAYwB,QACzCC,KAAMvB,EAAS,QAAU,WAG5BA,GACCa,EAAA,QAAAC,cAAA,MAAA,KACED,UAAAC,cAACU,EAAQA,SAAG,MACZX,EAAAA,QAAKC,cAAA,MAAA,CAAAC,UAAU,+DACbF,EAAAA,QAAAC,cAACW,SACC,CAAAC,QAAS3B,EAAqBQ,EAAeH,EAC7CuB,QAAQ,UACRT,MAAO,CAAEU,UAAW,iCACJ,UAAS,uBACkB,GAAAC,OAAGlB,EAAxBZ,EAA0B,gBAA0B,kBAEzEA,EACCc,EAAAA,QAACC,cAAAgB,mBAAgBC,KAAMC,EAAAA,QAAST,KAAK,OAErCV,wBAACiB,EAAeA,gBAAA,CAACC,KAAME,SAAQV,KAAK,UAO9CV,EAAAA,QAAAC,cAACoB,UAAQ,CAAAnB,UAAU,UAAUoB,GAAG,UAAUC,MAAM,WAGtD"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../lib/phone/call.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 n=require("../../lib/webrtc/messages.js");require("../../node_modules/mic-check/lib/index.js");var r=require("../../static/outgoing_ringtone.js");require("../Island.js");var i=require("../../services/astproxy.js"),l=require("../Button.js"),s=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),u=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js");require("../../node_modules/framer-motion/dist/framer-motion.js");var c=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),d=require("../TransferView/TransferActions.js"),p=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 m=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var f=require("../../lib/user/default_device.js"),j=require("../../node_modules/react-redux/es/hooks/useSelector.js"),x=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function v(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var q=v(e);exports.default=function(){var e=j.useSelector((function(e){return e.currentCall})),v=e.paused,y=e.muted,g=j.useSelector((function(e){return e.currentCall.parked})),E=j.useSelector((function(e){return e.island})),T=E.view,_=E.actionsExpanded,h=j.useSelector((function(e){return e.currentCall.transferring})),w=x.useDispatch();var C=m.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(l.Button,{variant:"default",active:!!v,onClick:function(){return v?t.unpauseCurrentCall():t.pauseCurrentCall()},"data-tooltip-id":"tooltip","data-tooltip-content":"".concat(C(v?"Tooltip.Play":"Tooltip.Pause"))},v?q.default.createElement(s.FontAwesomeIcon,{size:"xl",icon:u.faPlay}):q.default.createElement(s.FontAwesomeIcon,{size:"xl",icon:u.faPause})),q.default.createElement(l.Button,{variant:"default",active:!!y,onClick:function(){return y?t.unmuteCurrentCall():t.muteCurrentCall()},"data-tooltip-id":"tooltip","data-tooltip-content":"".concat(C(y?"Tooltip.Unmute":"Tooltip.Mute"))},y?q.default.createElement(s.FontAwesomeIcon,{size:"xl",icon:u.faMicrophoneSlash}):q.default.createElement(s.FontAwesomeIcon,{size:"xl",icon:u.faMicrophone})),q.default.createElement(l.Button,{active:h,onClick:h?function(){f.isWebRTC()?n.sendDTMF("*"):i.sendPhysicalDTMF("*"),a.store.getState().player.audioPlayerPlaying||w.player.updateStartAudioPlayer({src:r.default,loop:!0}),setTimeout((function(){f.isWebRTC()?n.sendDTMF("1"):i.sendPhysicalDTMF("1"),w.player.stopAudioPlayer(),h&&setTimeout((function(){w.currentCall.updateTransferring(!1)}),500)}),500)}:function(){w.island.setIslandView("transfer"!==T?"transfer":"call")},variant:"default","data-tooltip-id":"tooltip","data-tooltip-content":"".concat(C(h?"Tooltip.Cancel transfer":"Tooltip.Transfer"))},h?q.default.createElement(s.FontAwesomeIcon,{className:"",size:"xl",icon:u.faArrowDownUpAcrossLine}):q.default.createElement(s.FontAwesomeIcon,{size:"xl",className:"pi-rotate-90",icon:u.faArrowRightArrowLeft})),q.default.createElement(l.Button,{active:_,variant:"transparent",onClick:function(){_?w.island.toggleActionsExpanded(!1):w.island.toggleActionsExpanded(!0)},"data-tooltip-id":"tooltip","data-tooltip-content":"".concat(C(_?"Tooltip.Collapse":"Tooltip.Expand"))},_?q.default.createElement(s.FontAwesomeIcon,{className:"",size:"xl",icon:u.faChevronUp}):q.default.createElement(s.FontAwesomeIcon,{size:"xl",icon:u.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(l.Button,{active:"keypad"===T,variant:"default",onClick:function(){w.island.setIslandView("keypad"!==T?"keypad":"call")},"data-tooltip-id":"tooltip","data-tooltip-content":C("Tooltip.Keyboard")},q.default.createElement(s.FontAwesomeIcon,{size:"xl",icon:c.faGridRound})),q.default.createElement(l.Button,{active:g,variant:"default",onClick:function(){t.park(),w.currentCall.setParked(!0),o.eventDispatch("phone-island-call-parked",{})},"data-tooltip-id":"tooltip","data-tooltip-content":C("Tooltip.Park")},q.default.createElement(s.FontAwesomeIcon,{size:"xl",icon:u.faSquareParking})),h&&q.default.createElement(d.TransferActions,null))):q.default.createElement(q.default.Fragment,null),q.default.createElement(p.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"),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"}))};
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 attendedTransfer,\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 { park } from '../../lib/phone/call'\nimport { eventDispatch, useEventListener } from '../../utils'\nimport { useTranslation } from 'react-i18next'\nimport { isWebRTC } from '../../lib/user/default_device'\nimport { sendPhysicalDTMF } from '../../services/astproxy'\n\nconst Actions: FC = () => {\n // Get multiple values from currentCall store\n const { paused, muted } = 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 }\n\n function transfer() {\n // Open the transfer view\n dispatch.island.setIslandView(view !== 'transfer' ? 'transfer' : 'call')\n }\n\n // Cancels the current transfer through dtmfs\n function calcelTransfer() {\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 }, 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 function parkAction() {\n park()\n dispatch.currentCall.setParked(true)\n eventDispatch('phone-island-call-parked', {})\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 ? calcelTransfer : 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={parkAction}\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","t","useTranslation","React","createElement","Fragment","className","Button","variant","active","onClick","unpauseCurrentCall","pauseCurrentCall","concat","FontAwesomeIcon","size","icon","faPlay","faPause","unmuteCurrentCall","muteCurrentCall","faMicrophoneSlash","faMicrophone","isWebRTC","sendDTMF","sendPhysicalDTMF","store","getState","player","audioPlayerPlaying","updateStartAudioPlayer","src","outgoingRingtone","loop","setTimeout","stopAudioPlayer","updateTransferring","setIslandView","faArrowDownUpAcrossLine","faArrowRightArrowLeft","toggleActionsExpanded","faChevronUp","faChevronDown","faGridRound","park","setParked","eventDispatch","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='' 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,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../Button.js");require("../../node_modules/react-redux/es/index.js");var r=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),o=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),i=require("./Actions.js"),a=require("../../lib/webrtc/messages.js"),s=require("../../lib/island/island.js"),n=require("../../lib/phone/call.js"),l=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 u=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var d=require("../../lib/user/default_device.js"),c=require("../../services/astproxy.js"),p=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),m=require("../../node_modules/react-redux/es/hooks/useSelector.js");function f(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var b=f(e),x=["0","1","2","3","4","5","6","7","8","9","*","#"];exports.default=function(){var f=p.useDispatch(),j=m.useSelector((function(e){return e.currentCall})).keypadValue,y=m.useSelector((function(e){return e.island})).isOpen,q=e.useRef(j);function v(e){f.currentCall.updateKeypadValue("".concat(q.current).concat(e)),q.current="".concat(q.current).concat(e),n.playDtmfAudio(e),d.isWebRTC()?a.sendDTMF(e):c.sendPhysicalDTMF(e)}e.useEffect((function(){function e(e){x.includes(e.key)&&v(e.key)}return window.addEventListener("keydown",e),function(){return window.removeEventListener("keydown",e)}}),[]);var _=u.useTranslation().t;return b.default.createElement(b.default.Fragment,null,y?b.default.createElement("div",{className:"pi-flex pi-flex-col pi-gap-7"},b.default.createElement("div",{className:"pi-flex pi-gap-4"},b.default.createElement(t.Button,{variant:"transparent",onClick:s.backToCallView,"data-tooltip-id":"keyboard-tooltip","data-tooltip-content":_("Tooltip.Back to call")},b.default.createElement(r.FontAwesomeIcon,{size:"xl",icon:o.faArrowLeft})),b.default.createElement("input",{"data-stop-propagation":!0,type:"text",readOnly:!0,value:j,autoFocus:!0,className:"pi-w-full pi-rounded-full pi-bg-black pi-border-2 pi-border-emerald-500 active:pi-border-emerald-500 focus:pi-border-emerald-500 pi-text-white pi-font-sans pi-font-light pi-text-xl pi-text-center pi-px-2 focus:pi-outline-0 focus:pi-ring-0"})),b.default.createElement(i.default,{keyCallback:v})):b.default.createElement("div",{className:"pi-font-medium pi-text-base"},"Keypad"),b.default.createElement(l.Tooltip,{className:"pi-z-1000",id:"keyboard-tooltip",place:"bottom"}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../Button.js");require("../../node_modules/react-redux/es/index.js");var r=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),i=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),s=require("./Actions.js"),n=require("../../lib/webrtc/messages.js"),o=require("../../lib/island/island.js"),a=require("../../lib/phone/call.js"),l=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 u=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var d=require("../../lib/user/default_device.js"),c=require("../../services/astproxy.js"),p=require("../../utils/customHooks/useEventListener.js"),m=require("../../utils/genericFunctions/eventDispatch.js"),f=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),b=require("../../node_modules/react-redux/es/hooks/useSelector.js");function j(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var x=j(e),y=["0","1","2","3","4","5","6","7","8","9","*","#"];exports.default=function(){var j=f.useDispatch(),v=b.useSelector((function(e){return e.currentCall})).keypadValue,q=b.useSelector((function(e){return e.island})).isOpen,_=e.useRef(v);function h(e){j.currentCall.updateKeypadValue("".concat(_.current).concat(e)),_.current="".concat(_.current).concat(e),a.playDtmfAudio(e),d.isWebRTC()?n.sendDTMF(e):c.sendPhysicalDTMF(e),m.eventDispatch("phone-island-call-keypad-sent",{})}p.useEventListener("phone-island-call-keypad-send",(function(e){h(e.key)})),e.useEffect((function(){function e(e){y.includes(e.key)&&h(e.key)}return window.addEventListener("keydown",e),function(){return window.removeEventListener("keydown",e)}}),[]);var k=u.useTranslation().t;return x.default.createElement(x.default.Fragment,null,q?x.default.createElement("div",{className:"pi-flex pi-flex-col pi-gap-7"},x.default.createElement("div",{className:"pi-flex pi-gap-4"},x.default.createElement(t.Button,{variant:"transparent",onClick:o.backToCallView,"data-tooltip-id":"keyboard-tooltip","data-tooltip-content":k("Tooltip.Back to call")},x.default.createElement(r.FontAwesomeIcon,{size:"xl",icon:i.faArrowLeft})),x.default.createElement("input",{"data-stop-propagation":!0,type:"text",readOnly:!0,value:v,autoFocus:!0,className:"pi-w-full pi-rounded-full pi-bg-black pi-border-2 pi-border-emerald-500 active:pi-border-emerald-500 focus:pi-border-emerald-500 pi-text-white pi-font-sans pi-font-light pi-text-xl pi-text-center pi-px-2 focus:pi-outline-0 focus:pi-ring-0"})),x.default.createElement(s.default,{keyCallback:h})):x.default.createElement("div",{className:"pi-font-medium pi-text-base"},"Keypad"),x.default.createElement(l.Tooltip,{className:"pi-z-1000",id:"keyboard-tooltip",place:"bottom"}))};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/KeypadView/index.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 { Button } from '../Button'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faArrowLeft } from '@fortawesome/free-solid-svg-icons'\nimport Actions from './Actions'\nimport { sendDTMF } from '../../lib/webrtc/messages'\nimport { backToCallView } from '../../lib/island/island'\nimport { playDtmfAudio } from '../../lib/phone/call'\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'\n\nconst DTMF_KEYS = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '*', '#']\n\nconst KeypadView: FC<KeypadViewTypes> = () => {\n const dispatch = useDispatch<Dispatch>()\n const { keypadValue } = useSelector((state: RootState) => state.currentCall)\n const { isOpen } = useSelector((state: RootState) => state.island)\n const keypadValueRef = useRef<typeof keypadValue>(keypadValue)\n\n function sendKey(key: string) {\n dispatch.currentCall.updateKeypadValue(`${keypadValueRef.current}${key}`)\n keypadValueRef.current = `${keypadValueRef.current}${key}`\n playDtmfAudio(key)\n if (isWebRTC()) {\n sendDTMF(key)\n } else {\n sendPhysicalDTMF(key)\n }\n }\n\n useEffect(() => {\n function handlePhysicalKeydown(event) {\n if (DTMF_KEYS.includes(event.key)) {\n sendKey(event.key)\n }\n }\n window.addEventListener('keydown', handlePhysicalKeydown)\n return () => window.removeEventListener('keydown', handlePhysicalKeydown)\n }, [])\n\n const { t } = useTranslation()\n\n return (\n <>\n {isOpen ? (\n <div className='pi-flex pi-flex-col pi-gap-7'>\n <div className='pi-flex pi-gap-4'>\n <Button\n variant='transparent'\n onClick={backToCallView}\n data-tooltip-id='keyboard-tooltip'\n data-tooltip-content={t('Tooltip.Back to call')}\n >\n <FontAwesomeIcon size='xl' icon={faArrowLeft} />\n </Button>\n <input\n data-stop-propagation={true}\n type='text'\n readOnly\n value={keypadValue}\n autoFocus\n className='pi-w-full pi-rounded-full pi-bg-black pi-border-2 pi-border-emerald-500 active:pi-border-emerald-500 focus:pi-border-emerald-500 pi-text-white pi-font-sans pi-font-light pi-text-xl pi-text-center pi-px-2 focus:pi-outline-0 focus:pi-ring-0'\n />\n </div>\n <Actions keyCallback={sendKey} />\n </div>\n ) : (\n <div className='pi-font-medium pi-text-base'>Keypad</div>\n )}\n <Tooltip className='pi-z-1000' id='keyboard-tooltip' place='bottom' />\n </>\n )\n}\n\nexport default KeypadView\n\nexport interface KeypadViewTypes {}\n"],"names":["DTMF_KEYS","dispatch","useDispatch","keypadValue","useSelector","state","currentCall","isOpen","island","keypadValueRef","useRef","sendKey","key","updateKeypadValue","concat","current","playDtmfAudio","isWebRTC","sendDTMF","sendPhysicalDTMF","useEffect","handlePhysicalKeydown","event","includes","window","addEventListener","removeEventListener","t","useTranslation","React","createElement","Fragment","className","Button","variant","onClick","backToCallView","FontAwesomeIcon","size","icon","faArrowLeft","type","readOnly","value","autoFocus","Actions","keyCallback","Tooltip","id","place"],"mappings":"87CAkBMA,EAAY,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,qBAElC,WACtC,IAAMC,EAAWC,EAAAA,cACTC,EAAgBC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,2BACxDC,EAAWH,eAAY,SAACC,GAAqB,OAAAA,EAAMG,iBACrDC,EAAiBC,SAA2BP,GAElD,SAASQ,EAAQC,GACfX,EAASK,YAAYO,kBAAkB,GAAAC,OAAGL,EAAeM,SAAOD,OAAGF,IACnEH,EAAeM,QAAU,GAAGD,OAAAL,EAAeM,SAAOD,OAAGF,GACrDI,EAAaA,cAACJ,GACVK,EAAQA,WACVC,EAAQA,SAACN,GAETO,EAAgBA,iBAACP,EAEpB,CAEDQ,EAAAA,WAAU,WACR,SAASC,EAAsBC,GACzBtB,EAAUuB,SAASD,EAAMV,MAC3BD,EAAQW,EAAMV,IAEjB,CAED,OADAY,OAAOC,iBAAiB,UAAWJ,GAC5B,WAAM,OAAAG,OAAOE,oBAAoB,UAAWL,GACpD,GAAE,IAEK,IAAAM,EAAMC,qBAEd,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACGxB,EACCsB,EAAK,QAAAC,cAAA,MAAA,CAAAE,UAAU,gCACbH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,oBACbH,EAAAA,QAAAC,cAACG,EAAAA,OAAM,CACLC,QAAQ,cACRC,QAASC,EAAcA,iCACP,mBAAkB,uBACZT,EAAE,yBAExBE,UAACC,cAAAO,EAAAA,gBAAgB,CAAAC,KAAK,KAAKC,KAAMC,EAAWA,eAE9CX,EAAA,QAAAC,cAAA,QAAA,CAAA,yBACyB,EACvBW,KAAK,OACLC,UACA,EAAAC,MAAOxC,EACPyC,WAAS,EACTZ,UAAU,oPAGdH,EAAA,QAAAC,cAACe,EAAO,QAAC,CAAAC,YAAanC,KAGxBkB,EAAA,QAAAC,cAAA,MAAA,CAAKE,UAAU,yCAEjBH,EAAAA,QAAAC,cAACiB,UAAQ,CAAAf,UAAU,YAAYgB,GAAG,mBAAmBC,MAAM,WAGjE"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/KeypadView/index.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 { Button } from '../Button'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faArrowLeft } from '@fortawesome/free-solid-svg-icons'\nimport Actions from './Actions'\nimport { sendDTMF } from '../../lib/webrtc/messages'\nimport { backToCallView } from '../../lib/island/island'\nimport { playDtmfAudio } from '../../lib/phone/call'\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 DTMF_KEYS = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '*', '#']\n\nconst KeypadView: FC<KeypadViewTypes> = () => {\n const dispatch = useDispatch<Dispatch>()\n const { keypadValue } = useSelector((state: RootState) => state.currentCall)\n const { isOpen } = useSelector((state: RootState) => state.island)\n const keypadValueRef = useRef<typeof keypadValue>(keypadValue)\n\n function sendKey(key: string) {\n dispatch.currentCall.updateKeypadValue(`${keypadValueRef.current}${key}`)\n keypadValueRef.current = `${keypadValueRef.current}${key}`\n playDtmfAudio(key)\n if (isWebRTC()) {\n sendDTMF(key)\n } else {\n sendPhysicalDTMF(key)\n }\n\n eventDispatch('phone-island-call-keypad-sent', {})\n }\n useEventListener('phone-island-call-keypad-send', (data: KeypadTypes) => {\n sendKey(data.key)\n })\n\n useEffect(() => {\n function handlePhysicalKeydown(event) {\n if (DTMF_KEYS.includes(event.key)) {\n sendKey(event.key)\n }\n }\n window.addEventListener('keydown', handlePhysicalKeydown)\n return () => window.removeEventListener('keydown', handlePhysicalKeydown)\n }, [])\n\n const { t } = useTranslation()\n\n return (\n <>\n {isOpen ? (\n <div className='pi-flex pi-flex-col pi-gap-7'>\n <div className='pi-flex pi-gap-4'>\n <Button\n variant='transparent'\n onClick={backToCallView}\n data-tooltip-id='keyboard-tooltip'\n data-tooltip-content={t('Tooltip.Back to call')}\n >\n <FontAwesomeIcon size='xl' icon={faArrowLeft} />\n </Button>\n <input\n data-stop-propagation={true}\n type='text'\n readOnly\n value={keypadValue}\n autoFocus\n className='pi-w-full pi-rounded-full pi-bg-black pi-border-2 pi-border-emerald-500 active:pi-border-emerald-500 focus:pi-border-emerald-500 pi-text-white pi-font-sans pi-font-light pi-text-xl pi-text-center pi-px-2 focus:pi-outline-0 focus:pi-ring-0'\n />\n </div>\n <Actions keyCallback={sendKey} />\n </div>\n ) : (\n <div className='pi-font-medium pi-text-base'>Keypad</div>\n )}\n <Tooltip className='pi-z-1000' id='keyboard-tooltip' place='bottom' />\n </>\n )\n}\n\nexport default KeypadView\n\nexport interface KeypadViewTypes {}\n\ninterface KeypadTypes {\n key: string\n}"],"names":["DTMF_KEYS","dispatch","useDispatch","keypadValue","useSelector","state","currentCall","isOpen","island","keypadValueRef","useRef","sendKey","key","updateKeypadValue","concat","current","playDtmfAudio","isWebRTC","sendDTMF","sendPhysicalDTMF","eventDispatch","useEventListener","data","useEffect","handlePhysicalKeydown","event","includes","window","addEventListener","removeEventListener","t","useTranslation","React","createElement","Fragment","className","Button","variant","onClick","backToCallView","FontAwesomeIcon","size","icon","faArrowLeft","type","readOnly","value","autoFocus","Actions","keyCallback","Tooltip","id","place"],"mappings":"kjDAmBMA,EAAY,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,qBAElC,WACtC,IAAMC,EAAWC,EAAAA,cACTC,EAAgBC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,2BACxDC,EAAWH,eAAY,SAACC,GAAqB,OAAAA,EAAMG,iBACrDC,EAAiBC,SAA2BP,GAElD,SAASQ,EAAQC,GACfX,EAASK,YAAYO,kBAAkB,GAAAC,OAAGL,EAAeM,SAAOD,OAAGF,IACnEH,EAAeM,QAAU,GAAGD,OAAAL,EAAeM,SAAOD,OAAGF,GACrDI,EAAaA,cAACJ,GACVK,EAAQA,WACVC,EAAQA,SAACN,GAETO,EAAgBA,iBAACP,GAGnBQ,gBAAc,gCAAiC,CAAA,EAChD,CACDC,mBAAiB,iCAAiC,SAACC,GACjDX,EAAQW,EAAKV,IACf,IAEAW,EAAAA,WAAU,WACR,SAASC,EAAsBC,GACzBzB,EAAU0B,SAASD,EAAMb,MAC3BD,EAAQc,EAAMb,IAEjB,CAED,OADAe,OAAOC,iBAAiB,UAAWJ,GAC5B,WAAM,OAAAG,OAAOE,oBAAoB,UAAWL,GACpD,GAAE,IAEK,IAAAM,EAAMC,qBAEd,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACG3B,EACCyB,EAAK,QAAAC,cAAA,MAAA,CAAAE,UAAU,gCACbH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,oBACbH,EAAAA,QAAAC,cAACG,EAAAA,OAAM,CACLC,QAAQ,cACRC,QAASC,EAAcA,iCACP,mBAAkB,uBACZT,EAAE,yBAExBE,UAACC,cAAAO,EAAAA,gBAAgB,CAAAC,KAAK,KAAKC,KAAMC,EAAWA,eAE9CX,EAAA,QAAAC,cAAA,QAAA,CAAA,yBACyB,EACvBW,KAAK,OACLC,UACA,EAAAC,MAAO3C,EACP4C,WAAS,EACTZ,UAAU,oPAGdH,EAAA,QAAAC,cAACe,EAAO,QAAC,CAAAC,YAAatC,KAGxBqB,EAAA,QAAAC,cAAA,MAAA,CAAKE,UAAU,yCAEjBH,EAAAA,QAAAC,cAACiB,UAAQ,CAAAf,UAAU,YAAYgB,GAAG,mBAAmBC,MAAM,WAGjE"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("react"),o=require("../Button.js"),r=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),n=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),i=require("../../services/offhour.js");require("../../node_modules/react-redux/es/index.js");var a=require("../../lib/phone/call.js");require("../../store/index.js");var s=require("../../events/RecorderEvents.js"),l=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 d=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var c=require("../../node_modules/react-redux/es/utils/shallowEqual.js");require("../../node_modules/react-redux/es/components/Context.js"),require("../../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("../../node_modules/react-redux/node_modules/react-is/index.js");var u=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),m=require("../../node_modules/react-redux/es/hooks/useSelector.js");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var f=p(t);exports.Actions=function(){var p=u.useDispatch(),g=m.useSelector((function(e){return{incoming:e.recorder.incoming,waiting:e.recorder.waiting,recording:e.recorder.recording,recorded:e.recorder.recorded,playing:e.recorder.playing}}),c.default),j=g.incoming,_=g.waiting,x=g.recording,y=g.recorded,h=g.playing;t.useEffect((function(){x||p.recorder.setWaiting(!1)}),[x]),t.useEffect((function(){j&&(a.answerIncomingCall(),p.recorder.setIncoming(!1),p.recorder.setWaiting(!1))}),[j]);var q=d.useTranslation().t;return f.default.createElement("div",{className:"pi-flex pi-justify-center pi-items-center pi-pt-9 pi-gap-6",style:y?{paddingTop:"2rem"}:{}},x&&f.default.createElement(o.Button,{onClick:function(){p.recorder.setWaiting(!0),a.hangupCurrentCall(),p.recorder.setRecorded(!0)},variant:"default",style:{transform:"scale(1.15)"},"data-tooltip-id":"tooltip","data-tooltip-content":q("Tooltip.Stop")},_?f.default.createElement(r.FontAwesomeIcon,{icon:n.faCircleNotch,className:"fa-spin pi-loader",size:"lg"}):f.default.createElement(r.FontAwesomeIcon,{icon:n.faStop,size:"xl"})),y&&!x&&f.default.createElement(f.default.Fragment,null,f.default.createElement(o.Button,{onClick:function(){p.recorder.resetRecorded()},variant:"default","data-tooltip-id":"tooltip","data-tooltip-content":q("Tooltip.Delete")},f.default.createElement(r.FontAwesomeIcon,{icon:n.faTrash,size:"xl"})),h?f.default.createElement(o.Button,{onClick:function(){p.player.pauseAudioPlayer(),p.recorder.setPlaying(!1),p.recorder.setPaused(!0)},variant:"default",style:{transform:"scale(1.15)"},"data-tooltip-id":"tooltip","data-tooltip-content":q("Tooltip.Pause")},f.default.createElement(r.FontAwesomeIcon,{icon:n.faPause,size:"xl"})):f.default.createElement(o.Button,{onClick:function(){p.player.startAudioPlayer((function(){p.recorder.setPlaying(!1),p.recorder.setPaused(!0)})),p.recorder.setPlaying(!0)},variant:"default",style:{transform:"scale(1.15)"},"data-tooltip-id":"tooltip","data-tooltip-content":q("Tooltip.Play")},f.default.createElement(r.FontAwesomeIcon,{icon:n.faPlay,size:"xl"})),f.default.createElement(o.Button,{onClick:function(){s.dispatchRecordingSave(),p.island.setIslandView(null)},variant:"green","data-tooltip-id":"tooltip","data-tooltip-content":q("Tooltip.Confirm")},f.default.createElement(r.FontAwesomeIcon,{icon:n.faCheck,size:"xl"}))),!x&&!y&&f.default.createElement(o.Button,{onClick:function(){return e.__awaiter(this,void 0,void 0,(function(){var t;return e.__generator(this,(function(e){switch(e.label){case 0:return p.recorder.setRecording(!0),p.recorder.setWaiting(!0),[4,i.startAnnouncementRecording()];case 1:return(t=e.sent()).tempFilename&&p.recorder.setTempFilename(t.tempFilename),p.recorder.setStartTime("".concat(Date.now()/1e3)),[2]}}))}))},variant:"red",style:{transform:"scale(1.15)"},"data-tooltip-id":"tooltip","data-tooltip-content":q("Tooltip.Start recording")},_?f.default.createElement(r.FontAwesomeIcon,{icon:n.faCircleNotch,className:"fa-spin pi-loader",size:"lg"}):f.default.createElement(r.FontAwesomeIcon,{icon:n.faRecordVinyl,size:"xl"})),f.default.createElement(l.Tooltip,{className:"pi-z-20",id:"tooltip",place:"bottom"}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("react"),r=require("../Button.js"),o=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),n=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),i=require("../../services/offhour.js");require("../../node_modules/react-redux/es/index.js");var s=require("../../lib/phone/call.js"),a=require("../../utils/customHooks/useEventListener.js"),l=require("../../utils/genericFunctions/eventDispatch.js");require("../../store/index.js");var d=require("../../events/RecorderEvents.js"),c=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 u=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var p=require("../../node_modules/react-redux/es/utils/shallowEqual.js");require("../../node_modules/react-redux/es/components/Context.js"),require("../../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("../../node_modules/react-redux/node_modules/react-is/index.js");var m=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),f=require("../../node_modules/react-redux/es/hooks/useSelector.js");function g(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var h=g(t);exports.Actions=function(){var g=m.useDispatch(),v=f.useSelector((function(e){return{incoming:e.recorder.incoming,waiting:e.recorder.waiting,recording:e.recorder.recording,recorded:e.recorder.recorded,playing:e.recorder.playing}}),p.default),j=v.incoming,_=v.waiting,x=v.recording,y=v.recorded,E=v.playing;function q(){return e.__awaiter(this,void 0,void 0,(function(){var t;return e.__generator(this,(function(e){switch(e.label){case 0:return g.recorder.setRecording(!0),g.recorder.setWaiting(!0),[4,i.startAnnouncementRecording()];case 1:return(t=e.sent()).tempFilename&&g.recorder.setTempFilename(t.tempFilename),g.recorder.setStartTime("".concat(Date.now()/1e3)),l.eventDispatch("phone-island-recording-started",{}),[2]}}))}))}function w(){g.recorder.setWaiting(!0),s.hangupCurrentCall(),g.recorder.setRecorded(!0),l.eventDispatch("phone-island-recording-stopped",{})}function b(){g.player.startAudioPlayer((function(){g.recorder.setPlaying(!1),g.recorder.setPaused(!0)})),g.recorder.setPlaying(!0),l.eventDispatch("phone-island-recording-played",{})}function C(){g.player.pauseAudioPlayer(),g.recorder.setPlaying(!1),g.recorder.setPaused(!0),l.eventDispatch("phone-island-recording-paused",{})}function P(){g.recorder.resetRecorded(),l.eventDispatch("phone-island-recording-deleted",{})}function T(){d.dispatchRecordingSave(),g.island.setIslandView(null)}a.useEventListener("phone-island-recording-start",(function(e){q()})),a.useEventListener("phone-island-recording-stop",(function(e){w()})),a.useEventListener("phone-island-recording-play",(function(e){b()})),a.useEventListener("phone-island-recording-pause",(function(e){C()})),a.useEventListener("phone-island-recording-delete",(function(e){P()})),a.useEventListener("phone-island-recording-save",(function(e){T()})),t.useEffect((function(){x||g.recorder.setWaiting(!1)}),[x]),t.useEffect((function(){j&&(s.answerIncomingCall(),g.recorder.setIncoming(!1),g.recorder.setWaiting(!1))}),[j]);var A=u.useTranslation().t;return h.default.createElement("div",{className:"pi-flex pi-justify-center pi-items-center pi-pt-9 pi-gap-6",style:y?{paddingTop:"2rem"}:{}},x&&h.default.createElement(r.Button,{onClick:w,variant:"default",style:{transform:"scale(1.15)"},"data-tooltip-id":"tooltip","data-tooltip-content":A("Tooltip.Stop")},_?h.default.createElement(o.FontAwesomeIcon,{icon:n.faCircleNotch,className:"fa-spin pi-loader",size:"lg"}):h.default.createElement(o.FontAwesomeIcon,{icon:n.faStop,size:"xl"})),y&&!x&&h.default.createElement(h.default.Fragment,null,h.default.createElement(r.Button,{onClick:P,variant:"default","data-tooltip-id":"tooltip","data-tooltip-content":A("Tooltip.Delete")},h.default.createElement(o.FontAwesomeIcon,{icon:n.faTrash,size:"xl"})),E?h.default.createElement(r.Button,{onClick:C,variant:"default",style:{transform:"scale(1.15)"},"data-tooltip-id":"tooltip","data-tooltip-content":A("Tooltip.Pause")},h.default.createElement(o.FontAwesomeIcon,{icon:n.faPause,size:"xl"})):h.default.createElement(r.Button,{onClick:b,variant:"default",style:{transform:"scale(1.15)"},"data-tooltip-id":"tooltip","data-tooltip-content":A("Tooltip.Play")},h.default.createElement(o.FontAwesomeIcon,{icon:n.faPlay,size:"xl"})),h.default.createElement(r.Button,{onClick:T,variant:"green","data-tooltip-id":"tooltip","data-tooltip-content":A("Tooltip.Confirm")},h.default.createElement(o.FontAwesomeIcon,{icon:n.faCheck,size:"xl"}))),!x&&!y&&h.default.createElement(r.Button,{onClick:q,variant:"red",style:{transform:"scale(1.15)"},"data-tooltip-id":"tooltip","data-tooltip-content":A("Tooltip.Start recording")},_?h.default.createElement(o.FontAwesomeIcon,{icon:n.faCircleNotch,className:"fa-spin pi-loader",size:"lg"}):h.default.createElement(o.FontAwesomeIcon,{icon:n.faRecordVinyl,size:"xl"})),h.default.createElement(c.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/RecorderView/Actions.tsx"],"sourcesContent":["//\n// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n//\n\nimport React, { type FC, useEffect } from 'react'\nimport { Button } from '../Button'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faPause,\n faPlay,\n faTrash,\n faCheck,\n faRecordVinyl,\n faStop,\n faCircleNotch,\n} from '@fortawesome/free-solid-svg-icons'\nimport { startAnnouncementRecording } from '../../services/offhour'\nimport { useDispatch, useSelector, shallowEqual } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { hangupCurrentCall, answerIncomingCall } from '../../lib/phone/call'\nimport { dispatchRecordingSave } from '../../events'\nimport { Tooltip } from 'react-tooltip/dist/react-tooltip.min.cjs'\nimport { useTranslation } from 'react-i18next'\n\nexport const Actions: FC<{}> = () => {\n const dispatch = useDispatch<Dispatch>()\n const { incoming, waiting, recording, recorded, playing } = useSelector(\n (state: RootState) => ({\n incoming: state.recorder.incoming,\n waiting: state.recorder.waiting,\n recording: state.recorder.recording,\n recorded: state.recorder.recorded,\n playing: state.recorder.playing,\n }),\n shallowEqual,\n )\n\n async function handleStart() {\n // Update the recorder state\n dispatch.recorder.setRecording(true)\n dispatch.recorder.setWaiting(true)\n // Call the api to start the recording call\n const data: { tempFilename: string } | null = await startAnnouncementRecording()\n // Set the returned temp file name to the store\n if (data.tempFilename) dispatch.recorder.setTempFilename(data.tempFilename)\n // Set the start time of recording\n dispatch.recorder.setStartTime(`${Date.now() / 1000}`)\n }\n\n function handleStop() {\n // Set waiting to true\n dispatch.recorder.setWaiting(true)\n // Call the function to hangup the current call used for recording\n hangupCurrentCall()\n dispatch.recorder.setRecorded(true)\n }\n\n function handlePlay() {\n dispatch.player.startAudioPlayer(() => {\n // The callback for the end event of the audio player\n dispatch.recorder.setPlaying(false)\n dispatch.recorder.setPaused(true)\n })\n dispatch.recorder.setPlaying(true)\n }\n\n function handlePause() {\n dispatch.player.pauseAudioPlayer()\n dispatch.recorder.setPlaying(false)\n dispatch.recorder.setPaused(true)\n }\n\n function handleDelete() {\n dispatch.recorder.resetRecorded()\n }\n\n function handleSaveRecording() {\n // Dispatch the reconrding save event\n dispatchRecordingSave()\n // Close the Island\n dispatch.island.setIslandView(null)\n }\n\n useEffect(() => {\n if (!recording) {\n dispatch.recorder.setWaiting(false)\n }\n }, [recording])\n\n useEffect(() => {\n if (incoming) {\n // Answer the incoming call for recording\n answerIncomingCall()\n // Reset incoming to recorder state\n dispatch.recorder.setIncoming(false)\n dispatch.recorder.setWaiting(false)\n }\n }, [incoming])\n\n const { t } = useTranslation()\n\n return (\n <div\n className={`pi-flex pi-justify-center pi-items-center pi-pt-9 pi-gap-6`}\n style={recorded ? { paddingTop: '2rem' } : {}}\n >\n {recording && (\n <Button\n onClick={handleStop}\n variant='default'\n style={{ transform: 'scale(1.15)' }}\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Stop')}\n >\n {waiting ? (\n <FontAwesomeIcon icon={faCircleNotch} className='fa-spin pi-loader' size='lg' />\n ) : (\n <FontAwesomeIcon icon={faStop} size='xl' />\n )}\n </Button>\n )}\n {recorded && !recording && (\n <>\n <Button\n onClick={handleDelete}\n variant='default'\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Delete')}\n >\n <FontAwesomeIcon icon={faTrash} size='xl' />\n </Button>\n {playing ? (\n <Button\n onClick={handlePause}\n variant='default'\n style={{ transform: 'scale(1.15)' }}\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Pause')}\n >\n <FontAwesomeIcon icon={faPause} size='xl' />\n </Button>\n ) : (\n <Button\n onClick={handlePlay}\n variant='default'\n style={{ transform: 'scale(1.15)' }}\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Play')}\n >\n <FontAwesomeIcon icon={faPlay} size='xl' />\n </Button>\n )}\n <Button\n onClick={handleSaveRecording}\n variant='green'\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Confirm')}\n >\n <FontAwesomeIcon icon={faCheck} size='xl' />\n </Button>\n </>\n )}\n {!recording && !recorded && (\n <Button\n onClick={handleStart}\n variant='red'\n style={{ transform: 'scale(1.15)' }}\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Start recording')}\n >\n {waiting ? (\n <FontAwesomeIcon icon={faCircleNotch} className='fa-spin pi-loader' size='lg' />\n ) : (\n <FontAwesomeIcon icon={faRecordVinyl} size='xl' />\n )}\n </Button>\n )}\n {/* Buttons tooltips */}\n <Tooltip className='pi-z-20' id='tooltip' place='bottom' />\n </div>\n )\n}\n"],"names":["dispatch","useDispatch","_a","useSelector","state","incoming","recorder","waiting","recording","recorded","playing","shallowEqual","useEffect","setWaiting","answerIncomingCall","setIncoming","t","useTranslation","React","className","style","paddingTop","createElement","Button","onClick","hangupCurrentCall","setRecorded","variant","transform","FontAwesomeIcon","icon","faCircleNotch","size","faStop","Fragment","resetRecorded","faTrash","player","pauseAudioPlayer","setPlaying","setPaused","faPause","startAudioPlayer","faPlay","dispatchRecordingSave","island","setIslandView","faCheck","setRecording","startAnnouncementRecording","data","sent","tempFilename","setTempFilename","setStartTime","concat","Date","now","faRecordVinyl","Tooltip","id","place"],"mappings":"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"}
1
+ {"version":3,"file":"Actions.js","sources":["../../../src/components/RecorderView/Actions.tsx"],"sourcesContent":["//\n// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n//\n\nimport React, { type FC, useEffect } from 'react'\nimport { Button } from '../Button'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faPause,\n faPlay,\n faTrash,\n faCheck,\n faRecordVinyl,\n faStop,\n faCircleNotch,\n} from '@fortawesome/free-solid-svg-icons'\nimport { startAnnouncementRecording } from '../../services/offhour'\nimport { useDispatch, useSelector, shallowEqual } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { hangupCurrentCall, answerIncomingCall } from '../../lib/phone/call'\nimport { dispatchRecordingSave } from '../../events'\nimport { Tooltip } from 'react-tooltip/dist/react-tooltip.min.cjs'\nimport { useTranslation } from 'react-i18next'\nimport { useEventListener, eventDispatch } from '../../utils'\n\nexport const Actions: FC<{}> = () => {\n const dispatch = useDispatch<Dispatch>()\n const { incoming, waiting, recording, recorded, playing } = useSelector(\n (state: RootState) => ({\n incoming: state.recorder.incoming,\n waiting: state.recorder.waiting,\n recording: state.recorder.recording,\n recorded: state.recorder.recorded,\n playing: state.recorder.playing,\n }),\n shallowEqual,\n )\n\n async function handleStart() {\n // Update the recorder state\n dispatch.recorder.setRecording(true)\n dispatch.recorder.setWaiting(true)\n // Call the api to start the recording call\n const data: { tempFilename: string } | null = await startAnnouncementRecording()\n // Set the returned temp file name to the store\n if (data.tempFilename) dispatch.recorder.setTempFilename(data.tempFilename)\n // Set the start time of recording\n dispatch.recorder.setStartTime(`${Date.now() / 1000}`)\n eventDispatch('phone-island-recording-started', {})\n }\n useEventListener('phone-island-recording-start', (data: {}) => {\n handleStart()\n })\n\n function handleStop() {\n // Set waiting to true\n dispatch.recorder.setWaiting(true)\n // Call the function to hangup the current call used for recording\n hangupCurrentCall()\n dispatch.recorder.setRecorded(true)\n eventDispatch('phone-island-recording-stopped', {})\n }\n useEventListener('phone-island-recording-stop', (data: {}) => {\n handleStop()\n })\n\n function handlePlay() {\n dispatch.player.startAudioPlayer(() => {\n // The callback for the end event of the audio player\n dispatch.recorder.setPlaying(false)\n dispatch.recorder.setPaused(true)\n })\n dispatch.recorder.setPlaying(true)\n eventDispatch('phone-island-recording-played', {})\n }\n useEventListener('phone-island-recording-play', (data: {}) => {\n handlePlay()\n })\n\n function handlePause() {\n dispatch.player.pauseAudioPlayer()\n dispatch.recorder.setPlaying(false)\n dispatch.recorder.setPaused(true)\n eventDispatch('phone-island-recording-paused', {})\n }\n useEventListener('phone-island-recording-pause', (data: {}) => {\n handlePause()\n })\n\n function handleDelete() {\n dispatch.recorder.resetRecorded()\n eventDispatch('phone-island-recording-deleted', {})\n }\n useEventListener('phone-island-recording-delete', (data: {}) => {\n handleDelete()\n })\n\n function handleSaveRecording() {\n // Dispatch the reconrding save event\n dispatchRecordingSave()\n // Close the Island\n dispatch.island.setIslandView(null)\n }\n useEventListener('phone-island-recording-save', (data: {}) => {\n handleSaveRecording()\n })\n\n useEffect(() => {\n if (!recording) {\n dispatch.recorder.setWaiting(false)\n }\n }, [recording])\n\n useEffect(() => {\n if (incoming) {\n // Answer the incoming call for recording\n answerIncomingCall()\n // Reset incoming to recorder state\n dispatch.recorder.setIncoming(false)\n dispatch.recorder.setWaiting(false)\n }\n }, [incoming])\n\n const { t } = useTranslation()\n\n return (\n <div\n className={`pi-flex pi-justify-center pi-items-center pi-pt-9 pi-gap-6`}\n style={recorded ? { paddingTop: '2rem' } : {}}\n >\n {recording && (\n <Button\n onClick={handleStop}\n variant='default'\n style={{ transform: 'scale(1.15)' }}\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Stop')}\n >\n {waiting ? (\n <FontAwesomeIcon icon={faCircleNotch} className='fa-spin pi-loader' size='lg' />\n ) : (\n <FontAwesomeIcon icon={faStop} size='xl' />\n )}\n </Button>\n )}\n {recorded && !recording && (\n <>\n <Button\n onClick={handleDelete}\n variant='default'\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Delete')}\n >\n <FontAwesomeIcon icon={faTrash} size='xl' />\n </Button>\n {playing ? (\n <Button\n onClick={handlePause}\n variant='default'\n style={{ transform: 'scale(1.15)' }}\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Pause')}\n >\n <FontAwesomeIcon icon={faPause} size='xl' />\n </Button>\n ) : (\n <Button\n onClick={handlePlay}\n variant='default'\n style={{ transform: 'scale(1.15)' }}\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Play')}\n >\n <FontAwesomeIcon icon={faPlay} size='xl' />\n </Button>\n )}\n <Button\n onClick={handleSaveRecording}\n variant='green'\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Confirm')}\n >\n <FontAwesomeIcon icon={faCheck} size='xl' />\n </Button>\n </>\n )}\n {!recording && !recorded && (\n <Button\n onClick={handleStart}\n variant='red'\n style={{ transform: 'scale(1.15)' }}\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Start recording')}\n >\n {waiting ? (\n <FontAwesomeIcon icon={faCircleNotch} className='fa-spin pi-loader' size='lg' />\n ) : (\n <FontAwesomeIcon icon={faRecordVinyl} size='xl' />\n )}\n </Button>\n )}\n {/* Buttons tooltips */}\n <Tooltip className='pi-z-20' id='tooltip' place='bottom' />\n </div>\n )\n}\n"],"names":["dispatch","useDispatch","_a","useSelector","state","incoming","recorder","waiting","recording","recorded","playing","shallowEqual","handleStart","setRecording","setWaiting","startAnnouncementRecording","data","sent","tempFilename","setTempFilename","setStartTime","concat","Date","now","eventDispatch","handleStop","hangupCurrentCall","setRecorded","handlePlay","player","startAudioPlayer","setPlaying","setPaused","handlePause","pauseAudioPlayer","handleDelete","resetRecorded","handleSaveRecording","dispatchRecordingSave","island","setIslandView","useEventListener","useEffect","answerIncomingCall","setIncoming","t","useTranslation","React","className","style","paddingTop","createElement","Button","onClick","variant","transform","FontAwesomeIcon","icon","faCircleNotch","size","faStop","Fragment","faTrash","faPause","faPlay","faCheck","faRecordVinyl","Tooltip","id","place"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),n=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),r=require("../lib/phone/conversation.js"),c=require("../utils/genericFunctions/eventDispatch.js"),o=require("../utils/genericFunctions/withTimeout.js");require("../node_modules/mic-check/lib/index.js"),require("../lib/webrtc/janus.js");var a=require("../store/index.js");require("../node_modules/webrtc-adapter/src/js/adapter_core.js");var s=require("../events/SocketEvents.js"),u=require("../utils/genericFunctions/timestamp.js"),i=require("../lib/user/extensions.js"),l=require("../node_modules/react-redux/es/hooks/useDispatch.js"),d=require("../node_modules/react-redux/es/hooks/useSelector.js");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var m=p(n);exports.Socket=function(p){var f=p.hostName,g=p.username,v=p.authToken,k=p.reload,b=p.reloadedCallback,h=p.children,y=l.useDispatch(),N=n.useRef(),S=n.useRef(),C=d.useSelector((function(e){return e.currentUser}));return n.useEffect((function(){var n=function(e,n){var t,c=a.store.getState().currentCall,o=c.transferring,s=c.transferSwitching,l=c.transferCalls;if(Object.keys(n).length>0){if(e.status){var d=a.store.getState().users.extensions;switch(e.status){case"ringing":y.currentCall.checkIncomingUpdatePlay({conversationId:n.id,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),incomingSocket:!0,username:"".concat(d&&d[n.counterpartNum]&&d[n.counterpartNum].username)||"",ownerExtension:n.owner});break;case"busy":if(n&&n.connected)y.currentCall.updateCurrentCall({conversationId:n.id,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),startTime:"".concat(n.startTime/1e3),ownerExtension:n.owner,username:"".concat(d&&d[n.counterpartNum]&&d[n.counterpartNum].username)||""}),y.currentCall.addTransferCalls({type:"transferred",displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),startTime:"".concat(u.getTimestampInSeconds())}),"webrtc"!==(null===(t=null==C?void 0:C.default_device)||void 0===t?void 0:t.type)&&function(e){y.currentCall.updateCurrentCall({conversationId:e.id,accepted:!0,incoming:"in"!==e.direction&&void 0}),a.store.dispatch.player.stopAudioPlayer()}(n);else if(n&&!n.connected&&o&&!s){var p=l.find((function(e){return e.number===n.counterpartNum}));!n.connected&&p&&(y.currentCall.updateCurrentCall({transferring:!1}),y.currentCall.updateTransferSwitching(!1))}n&&!n.connected&&"out"===n.direction&&y.currentCall.checkOutgoingUpdate({outgoingSocket:!0,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),username:"".concat(d&&d[n.counterpartNum]&&d[n.counterpartNum].username)||""});case"onhold":var m=n.counterpartName,f=n.counterpartNum,g=n.startTime;o&&f&&m&&"<unknown>"!==m&&(y.currentCall.addTransferCalls({type:"destination",displayName:r.getDisplayName(n),number:f,startTime:"".concat(u.getTimestampInSeconds())}),y.currentCall.updateCurrentCall({displayName:r.getDisplayName(n),number:f,startTime:"".concat(g/1e3),conversationId:n.id}),y.island.setIslandView("call"))}}}else"online"==e.status&&i.userTotallyFree()&&(y.player.stopAudioPlayer(),y.currentCall.reset())};return S.current=t.io("https://"+f,{upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3}),S.current.on("connect",(function(){console.debug("Socket connected sid: ".concat(S.current.id))})),S.current.on("disconnect",(function(e){console.log("Socket disconnect - reason: ".concat(e)),e.includes("server disconnect")?c.eventDispatch("phone-island-server-disconnected",{}):c.eventDispatch("phone-island-socket-disconnected",{})})),S.current.io.on("error",(function(e){console.debug("Socket error: ",e)})),S.current.on("connect_error",(function(e){console.debug("Socket connect_error: ",e)})),S.current.io.on("reconnect",(function(e){c.eventDispatch("phone-island-socket-reconnected",{}),console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(S.current.id,")"))})),S.current.io.on("reconnect_attempt",(function(e){console.debug("Socket reconnect_attempt ".concat(e))})),S.current.io.on("reconnect_error",(function(e){console.debug("Socket reconnect_error: ",e)})),S.current.io.on("reconnect_failed",(function(){console.debug("Socket reconnect_failed")})),N.current=setInterval((function(){var e=Date.now();S.current.volatile.emit("ping",o.withTimeout((function(){y.alerts.removeAlert("socket_down");var n=Date.now()-e;console.debug("Socket latency: ".concat(n,"ms")),console.debug("Socket is reachable!")}),(function(){y.alerts.setAlert("socket_down"),console.debug("Socket is unreachable!")}),7e3))}),7e3),S.current.on("connect",(function(){console.log("Socket on: "+f+" is connected!"),S.current.emit("login",{accessKeyId:"".concat(g),token:v,uaType:"desktop"})})),S.current.on("authe_ok",(function(){console.log("Socket authentication success!")})),S.current.on("userMainPresenceUpdate",(function(n){a.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),s.dispatchMainPresence(n)})),S.current.on("extenUpdate",(function(e){y.users.updateExtension(e),s.dispatchConversations(e);var t=e.conversations[Object.keys(e.conversations)[0]]||{};e.username===g&&(n(e,t),y.currentUser.updateConversations(e))})),S.current.on("queueUpdate",(function(e){s.dispatchQueueUpdate(e)})),S.current.on("queueMemberUpdate",(function(e){s.dispatchQueueMemberUpdate(e)})),S.current.on("takeOver",(function(){s.dispatchAlreadyLogin()})),S.current.on("serverReloaded",(function(){s.dispatchServerReload()})),S.current.on("parkingUpdate",(function(){s.dispatchParkingUpdate()})),function(){clearInterval(N.current),S.current.close()}}),[]),n.useEffect((function(){k&&(console.info("websocket reconnection"),S.current.disconnect(),S.current.connect(),b())}),[k]),m.default.createElement(m.default.Fragment,null,h)};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),n=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),r=require("../lib/phone/conversation.js"),c=require("../utils/genericFunctions/eventDispatch.js"),o=require("../utils/genericFunctions/withTimeout.js");require("../node_modules/mic-check/lib/index.js"),require("../lib/webrtc/janus.js");var s=require("../store/index.js");require("../node_modules/webrtc-adapter/src/js/adapter_core.js");var a=require("../events/SocketEvents.js"),u=require("../utils/genericFunctions/timestamp.js"),i=require("../lib/user/extensions.js"),d=require("../node_modules/react-redux/es/hooks/useSelector.js");require("../node_modules/react-redux/es/components/Context.js"),require("../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("../node_modules/react-redux/node_modules/react-is/index.js");var l=require("../node_modules/react-redux/es/hooks/useDispatch.js");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var m=p(n);exports.Socket=function(p){var f=p.hostName,g=p.username,v=p.authToken,h=p.reload,b=p.reloadedCallback,k=p.children,y=l.useDispatch(),_=n.useRef(),C=n.useRef(),N=d.useSelector((function(e){return e.currentUser}));return n.useEffect((function(){var n=function(e,n){var t,o=s.store.getState().currentCall,a=o.transferring,d=o.transferSwitching,l=o.transferCalls;if(Object.keys(n).length>0){if(e.status){var p=s.store.getState().users.extensions;switch(e.status){case"ringing":y.currentCall.checkIncomingUpdatePlay({conversationId:n.id,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),incomingSocket:!0,username:"".concat(p&&p[n.counterpartNum]&&p[n.counterpartNum].username)||"",ownerExtension:n.owner}),c.eventDispatch("phone-island-call-ringing",{});break;case"busy":if(n&&n.connected)y.currentCall.updateCurrentCall({conversationId:n.id,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),startTime:"".concat(n.startTime/1e3),ownerExtension:n.owner,username:"".concat(p&&p[n.counterpartNum]&&p[n.counterpartNum].username)||""}),y.currentCall.addTransferCalls({type:"transferred",displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),startTime:"".concat(u.getTimestampInSeconds())}),"webrtc"!==(null===(t=null==N?void 0:N.default_device)||void 0===t?void 0:t.type)&&function(e){y.currentCall.updateCurrentCall({conversationId:e.id,accepted:!0,incoming:"in"!==e.direction&&void 0}),s.store.dispatch.player.stopAudioPlayer()}(n);else if(n&&!n.connected&&a&&!d){var m=l.find((function(e){return e.number===n.counterpartNum}));!n.connected&&m&&(y.currentCall.updateCurrentCall({transferring:!1}),y.currentCall.updateTransferSwitching(!1))}n&&!n.connected&&"out"===n.direction&&y.currentCall.checkOutgoingUpdate({outgoingSocket:!0,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),username:"".concat(p&&p[n.counterpartNum]&&p[n.counterpartNum].username)||""});case"onhold":var f=n.counterpartName,g=n.counterpartNum,v=n.startTime;a&&g&&f&&"<unknown>"!==f&&(y.currentCall.addTransferCalls({type:"destination",displayName:r.getDisplayName(n),number:g,startTime:"".concat(u.getTimestampInSeconds())}),y.currentCall.updateCurrentCall({displayName:r.getDisplayName(n),number:g,startTime:"".concat(v/1e3),conversationId:n.id}),y.island.setIslandView("call"))}}}else"online"==e.status&&i.userTotallyFree()&&(y.player.stopAudioPlayer(),y.currentCall.reset())};return C.current=t.io("https://"+f,{upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3}),C.current.on("connect",(function(){console.debug("Socket connected sid: ".concat(C.current.id)),c.eventDispatch("phone-island-socket-connected",{})})),C.current.on("disconnect",(function(e){console.debug("Socket disconnect - reason: ".concat(e)),e.includes("server disconnect")?c.eventDispatch("phone-island-server-disconnected",{}):c.eventDispatch("phone-island-socket-disconnected",{})})),C.current.io.on("error",(function(e){console.debug("Socket error: ",e)})),C.current.on("connect_error",(function(e){console.debug("Socket connect_error: ",e)})),C.current.io.on("reconnect",(function(e){c.eventDispatch("phone-island-socket-reconnected",{}),console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(C.current.id,")"))})),C.current.io.on("reconnect_attempt",(function(e){console.debug("Socket reconnect_attempt ".concat(e))})),C.current.io.on("reconnect_error",(function(e){console.debug("Socket reconnect_error: ",e)})),C.current.io.on("reconnect_failed",(function(){console.debug("Socket reconnect_failed")})),_.current=setInterval((function(){var e=Date.now();C.current.volatile.emit("ping",o.withTimeout((function(){y.alerts.removeAlert("socket_down");var n=Date.now()-e;console.debug("Socket latency: ".concat(n,"ms")),console.debug("Socket is reachable!")}),(function(){y.alerts.setAlert("socket_down"),console.debug("Socket is unreachable!")}),7e3))}),7e3),C.current.on("connect",(function(){console.debug("Socket on: "+f+" is connected!"),C.current.emit("login",{accessKeyId:"".concat(g),token:v,uaType:"desktop"})})),C.current.on("authe_ok",(function(){console.debug("Socket authentication success!")})),C.current.on("userMainPresenceUpdate",(function(n){s.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),a.dispatchMainPresence(n)})),C.current.on("extenUpdate",(function(e){y.users.updateExtension(e),a.dispatchConversations(e);var t=e.conversations[Object.keys(e.conversations)[0]]||{};e.username===g&&(n(e,t),y.currentUser.updateConversations(e))})),C.current.on("queueUpdate",(function(e){a.dispatchQueueUpdate(e)})),C.current.on("queueMemberUpdate",(function(e){a.dispatchQueueMemberUpdate(e)})),C.current.on("takeOver",(function(){a.dispatchAlreadyLogin()})),C.current.on("serverReloaded",(function(){a.dispatchServerReload()})),C.current.on("parkingUpdate",(function(){a.dispatchParkingUpdate()})),function(){clearInterval(_.current),C.current.close()}}),[]),n.useEffect((function(){h&&(console.info("websocket reconnection"),C.current.disconnect(),C.current.connect(),b())}),[h]),m.default.createElement(m.default.Fragment,null,k)};
2
2
  //# sourceMappingURL=Socket.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Socket.js","sources":["../../src/components/Socket.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useEffect, useRef } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../store'\nimport { io } from 'socket.io-client'\nimport { getDisplayName } from '../lib/phone/conversation'\nimport {\n dispatchMainPresence,\n dispatchConversations,\n dispatchQueueUpdate,\n dispatchQueueMemberUpdate,\n dispatchAlreadyLogin,\n dispatchServerReload,\n dispatchParkingUpdate,\n} from '../events'\nimport { store } from '../store'\nimport { eventDispatch, withTimeout } from '../utils'\nimport type {\n ConversationTypes,\n ExtensionTypes,\n QueuesUpdateTypes,\n QueueUpdateMemberTypes,\n MainPresenceTypes,\n} from '../types'\nimport { getTimestampInSeconds } from '../utils/genericFunctions/timestamp'\nimport { userTotallyFree } from '../lib/user/extensions'\n\ninterface SocketProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n reload: boolean\n reloadedCallback: () => void\n}\n\nexport const Socket: FC<SocketProps> = ({\n hostName,\n username,\n authToken,\n reload,\n reloadedCallback,\n children,\n}) => {\n const dispatch = useDispatch<Dispatch>()\n const connectionCheckInterval = useRef<any>()\n const socket = useRef<any>()\n\n // get user information\n const userInformation = useSelector((state: RootState) => state.currentUser)\n\n const checkDefaultDeviceConversationActive = (conv: any) => {\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n accepted: true,\n incoming: conv.direction === 'in' ? false : undefined,\n })\n\n // Stop the local audio element ringing\n store.dispatch.player.stopAudioPlayer()\n }\n\n const checkDefaultDeviceConversationClosed = (conv: any) => {\n // store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\n // store.dispatch.listen.reset()\n }\n\n useEffect(() => {\n /**\n * Manages event and data for the currentUser\n *\n * @param res The data from the socket\n * @param conv The conversation data\n */\n const handleCurrentUserEvents = (res: ExtensionTypes, conv: ConversationTypes) => {\n // Handle transferring data\n const { transferring, transferSwitching, transferCalls } = store.getState().currentCall\n\n // Check conversation isn't empty\n if (Object.keys(conv).length > 0) {\n // With conversation\n if (res.status) {\n const { extensions } = store.getState().users\n switch (res.status) {\n case 'ringing':\n // The name and the number are updated here not in webrtc\n dispatch.currentCall.checkIncomingUpdatePlay({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n incomingSocket: true,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n ownerExtension: conv.owner,\n })\n break\n // @ts-ignore\n case 'busy':\n if (conv && conv.connected) {\n // Current call accepted and update connected call\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${conv.startTime / 1000}`,\n ownerExtension: conv.owner,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'transferred',\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${getTimestampInSeconds()}`,\n })\n\n if (userInformation?.default_device?.type !== 'webrtc') {\n checkDefaultDeviceConversationActive(conv)\n }\n }\n // Handle not connected calls\n else if (conv && !conv.connected) {\n if (transferring && !transferSwitching) {\n // Handle hangup during transfer\n const inTransferCalls = transferCalls.find(\n (item) => item.number === conv.counterpartNum,\n )\n if (!conv.connected && inTransferCalls) {\n // Update transferring data for the current call\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n // Reset transfer switching\n // TODO - It needs to enhance how conversation connections (conv.connected) are updated server side\n // TODO - The transfer end is not handled when the an user hangups or after call switch\n dispatch.currentCall.updateTransferSwitching(false)\n }\n }\n }\n // Handle outgoing call\n if (conv && !conv.connected && conv.direction === 'out') {\n // Update the current outgoing conversation\n dispatch.currentCall.checkOutgoingUpdate({\n outgoingSocket: true,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n }\n case 'onhold':\n // The new conversation during transferring\n const { counterpartName, counterpartNum, startTime } = conv\n if (\n transferring &&\n counterpartNum &&\n counterpartName &&\n counterpartName !== '<unknown>'\n ) {\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'destination',\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${getTimestampInSeconds()}`,\n })\n // Set the current call informations\n dispatch.currentCall.updateCurrentCall({\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${startTime / 1000}`,\n conversationId: conv.id,\n })\n // Set the view of the island to call\n dispatch.island.setIslandView('call')\n }\n break\n default:\n break\n }\n }\n } else {\n // Without conversation for physical phone management\n if (res.status == 'online' && userTotallyFree()) {\n // Stop ringing sounds\n dispatch.player.stopAudioPlayer()\n // Reset current call info\n dispatch.currentCall.reset()\n }\n }\n }\n\n /**\n * Initialize socket connection and listeners\n */\n const initSocketConnection = () => {\n socket.current = io('https://' + hostName, {\n upgrade: false,\n transports: ['websocket'],\n reconnection: true,\n reconnectionDelay: 2000,\n })\n\n // Handle socket errors\n socket.current.on('connect', () => {\n console.debug(`Socket connected sid: ${socket.current.id}`)\n })\n socket.current.on('disconnect', (reason) => {\n console.log(`Socket disconnect - reason: ${reason}`)\n if (reason.includes('server disconnect')) {\n eventDispatch('phone-island-server-disconnected', {})\n } else {\n eventDispatch('phone-island-socket-disconnected', {})\n }\n })\n socket.current.io.on('error', (err) => {\n console.debug(`Socket error: `, err)\n })\n socket.current.on('connect_error', (err) => {\n console.debug(`Socket connect_error: `, err)\n })\n socket.current.io.on('reconnect', (attempt) => {\n eventDispatch('phone-island-socket-reconnected', {})\n console.debug(`Socket reconnect attemp ${attempt} (sid: ${socket.current.id})`)\n })\n socket.current.io.on('reconnect_attempt', (attempt) => {\n console.debug(`Socket reconnect_attempt ${attempt}`)\n })\n socket.current.io.on('reconnect_error', (err) => {\n console.debug(`Socket reconnect_error: `, err)\n })\n socket.current.io.on('reconnect_failed', () => {\n console.debug(`Socket reconnect_failed`)\n })\n\n // Checks if socket is reachable every 5 seconds\n connectionCheckInterval.current = setInterval(() => {\n const start = Date.now()\n socket.current.volatile.emit(\n 'ping',\n withTimeout(\n () => {\n // Remove socket_down alert\n dispatch.alerts.removeAlert('socket_down')\n // Calculate and log latency\n const latency = Date.now() - start\n console.debug(`Socket latency: ${latency}ms`)\n console.debug('Socket is reachable!')\n },\n () => {\n // Set socket_down alert\n dispatch.alerts.setAlert('socket_down')\n console.debug('Socket is unreachable!')\n },\n 7 * 1000, // Waits for the response 7 seconds\n ),\n )\n }, 7 * 1000) // Executes a new check every 7 seconds\n\n // Handle connection message\n socket.current.on('connect', () => {\n console.log('Socket on: ' + hostName + ' is connected!')\n socket.current.emit('login', {\n accessKeyId: `${username}`,\n token: authToken,\n uaType: 'desktop',\n })\n })\n\n // Handle authentication success message\n socket.current.on('authe_ok', () => {\n console.log('Socket authentication success!')\n })\n\n socket.current.on('userMainPresenceUpdate', (res: MainPresenceTypes) => {\n // Update endpoints store\n store.dispatch.users.updateEndpointMainPresence({ ...res.mainPresence })\n // Dispatch dispatchMainPresence Event\n dispatchMainPresence(res)\n })\n\n socket.current.on('extenUpdate', (res: ExtensionTypes) => {\n // Update extensions and conversations in users store\n dispatch.users.updateExtension(res)\n // Dispatch conversations event\n dispatchConversations(res)\n // Initialize conversation\n const conv = res.conversations[Object.keys(res.conversations)[0]] || {}\n // Handle only the events of the user\n if (res.username === username) {\n handleCurrentUserEvents(res, conv)\n // Update the conversations of the user\n dispatch.currentUser.updateConversations(res)\n }\n })\n\n // `queueUpdate` is the socket event when the data of a queue updates\n socket.current.on('queueUpdate', (res: QueuesUpdateTypes) => {\n // Dispatch queueUpdate event\n dispatchQueueUpdate(res)\n })\n\n // `queueMemberUpdate` is the socket event when the data of a queue member changes\n socket.current.on('queueMemberUpdate', (res: QueueUpdateMemberTypes) => {\n // Dispatch queueMemberUpdate event\n dispatchQueueMemberUpdate(res)\n })\n\n // `takeOver` is the socket event when the user does login from another new window\n socket.current.on('takeOver', () => {\n // Dispatch takeOver event\n dispatchAlreadyLogin()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('serverReloaded', () => {\n // Dispatch serverReload event\n dispatchServerReload()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('parkingUpdate', () => {\n // Dispatch serverReload event\n dispatchParkingUpdate()\n })\n }\n\n initSocketConnection()\n\n // Stop the check socket interval\n // Close the socket connection\n return () => {\n clearInterval(connectionCheckInterval.current)\n socket.current.close()\n }\n }, [])\n\n // Manage reload events\n useEffect(() => {\n if (reload) {\n console.info('websocket reconnection')\n socket.current.disconnect()\n socket.current.connect()\n reloadedCallback()\n }\n }, [reload])\n\n return <>{children}</>\n}\n"],"names":["_a","hostName","username","authToken","reload","reloadedCallback","children","dispatch","useDispatch","connectionCheckInterval","useRef","socket","userInformation","useSelector","state","currentUser","useEffect","handleCurrentUserEvents","res","conv","_b","store","getState","currentCall","transferring","transferSwitching","transferCalls","Object","keys","length","status","extensions","users","checkIncomingUpdatePlay","conversationId","id","displayName","getDisplayName","number","concat","counterpartNum","incomingSocket","ownerExtension","owner","connected","updateCurrentCall","startTime","addTransferCalls","type","getTimestampInSeconds","default_device","accepted","incoming","direction","undefined","player","stopAudioPlayer","checkDefaultDeviceConversationActive","inTransferCalls","find","item","updateTransferSwitching","checkOutgoingUpdate","outgoingSocket","counterpartName","island","setIslandView","userTotallyFree","reset","current","io","upgrade","transports","reconnection","reconnectionDelay","on","console","debug","reason","log","includes","eventDispatch","err","attempt","setInterval","start","Date","now","volatile","emit","withTimeout","alerts","removeAlert","latency","setAlert","accessKeyId","token","uaType","updateEndpointMainPresence","__assign","mainPresence","dispatchMainPresence","updateExtension","dispatchConversations","conversations","updateConversations","dispatchQueueUpdate","dispatchQueueMemberUpdate","dispatchAlreadyLogin","dispatchServerReload","dispatchParkingUpdate","clearInterval","close","info","disconnect","connect","React","createElement","Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"Socket.js","sources":["../../src/components/Socket.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useEffect, useRef } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../store'\nimport { io } from 'socket.io-client'\nimport { getDisplayName } from '../lib/phone/conversation'\nimport {\n dispatchMainPresence,\n dispatchConversations,\n dispatchQueueUpdate,\n dispatchQueueMemberUpdate,\n dispatchAlreadyLogin,\n dispatchServerReload,\n dispatchParkingUpdate,\n} from '../events'\nimport { store } from '../store'\nimport { eventDispatch, withTimeout } from '../utils'\nimport type {\n ConversationTypes,\n ExtensionTypes,\n QueuesUpdateTypes,\n QueueUpdateMemberTypes,\n MainPresenceTypes,\n} from '../types'\nimport { getTimestampInSeconds } from '../utils/genericFunctions/timestamp'\nimport { userTotallyFree } from '../lib/user/extensions'\n\ninterface SocketProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n reload: boolean\n reloadedCallback: () => void\n}\n\nexport const Socket: FC<SocketProps> = ({\n hostName,\n username,\n authToken,\n reload,\n reloadedCallback,\n children,\n}) => {\n const dispatch = useDispatch<Dispatch>()\n const connectionCheckInterval = useRef<any>()\n const socket = useRef<any>()\n\n // get user information\n const userInformation = useSelector((state: RootState) => state.currentUser)\n\n const checkDefaultDeviceConversationActive = (conv: any) => {\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n accepted: true,\n incoming: conv.direction === 'in' ? false : undefined,\n })\n\n // Stop the local audio element ringing\n store.dispatch.player.stopAudioPlayer()\n }\n\n const checkDefaultDeviceConversationClosed = (conv: any) => {\n // store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\n // store.dispatch.listen.reset()\n }\n\n useEffect(() => {\n /**\n * Manages event and data for the currentUser\n *\n * @param res The data from the socket\n * @param conv The conversation data\n */\n const handleCurrentUserEvents = (res: ExtensionTypes, conv: ConversationTypes) => {\n // Handle transferring data\n const { transferring, transferSwitching, transferCalls } = store.getState().currentCall\n\n // Check conversation isn't empty\n if (Object.keys(conv).length > 0) {\n // With conversation\n if (res.status) {\n const { extensions } = store.getState().users\n switch (res.status) {\n case 'ringing':\n // The name and the number are updated here not in webrtc\n dispatch.currentCall.checkIncomingUpdatePlay({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n incomingSocket: true,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n ownerExtension: conv.owner,\n })\n\n eventDispatch('phone-island-call-ringing', {})\n break\n // @ts-ignore\n case 'busy':\n if (conv && conv.connected) {\n // Current call accepted and update connected call\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${conv.startTime / 1000}`,\n ownerExtension: conv.owner,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'transferred',\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${getTimestampInSeconds()}`,\n })\n\n if (userInformation?.default_device?.type !== 'webrtc') {\n checkDefaultDeviceConversationActive(conv)\n }\n }\n // Handle not connected calls\n else if (conv && !conv.connected) {\n if (transferring && !transferSwitching) {\n // Handle hangup during transfer\n const inTransferCalls = transferCalls.find(\n (item) => item.number === conv.counterpartNum,\n )\n if (!conv.connected && inTransferCalls) {\n // Update transferring data for the current call\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n // Reset transfer switching\n // TODO - It needs to enhance how conversation connections (conv.connected) are updated server side\n // TODO - The transfer end is not handled when the an user hangups or after call switch\n dispatch.currentCall.updateTransferSwitching(false)\n }\n }\n }\n // Handle outgoing call\n if (conv && !conv.connected && conv.direction === 'out') {\n // Update the current outgoing conversation\n dispatch.currentCall.checkOutgoingUpdate({\n outgoingSocket: true,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n }\n case 'onhold':\n // The new conversation during transferring\n const { counterpartName, counterpartNum, startTime } = conv\n if (\n transferring &&\n counterpartNum &&\n counterpartName &&\n counterpartName !== '<unknown>'\n ) {\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'destination',\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${getTimestampInSeconds()}`,\n })\n // Set the current call informations\n dispatch.currentCall.updateCurrentCall({\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${startTime / 1000}`,\n conversationId: conv.id,\n })\n // Set the view of the island to call\n dispatch.island.setIslandView('call')\n }\n break\n default:\n break\n }\n }\n } else {\n // Without conversation for physical phone management\n if (res.status == 'online' && userTotallyFree()) {\n // Stop ringing sounds\n dispatch.player.stopAudioPlayer()\n // Reset current call info\n dispatch.currentCall.reset()\n }\n }\n }\n\n /**\n * Initialize socket connection and listeners\n */\n const initSocketConnection = () => {\n socket.current = io('https://' + hostName, {\n upgrade: false,\n transports: ['websocket'],\n reconnection: true,\n reconnectionDelay: 2000,\n })\n\n // Handle socket errors\n socket.current.on('connect', () => {\n console.debug(`Socket connected sid: ${socket.current.id}`)\n eventDispatch('phone-island-socket-connected', {})\n })\n socket.current.on('disconnect', (reason) => {\n console.debug(`Socket disconnect - reason: ${reason}`)\n if (reason.includes('server disconnect')) {\n eventDispatch('phone-island-server-disconnected', {})\n } else {\n eventDispatch('phone-island-socket-disconnected', {})\n }\n })\n socket.current.io.on('error', (err) => {\n console.debug(`Socket error: `, err)\n })\n socket.current.on('connect_error', (err) => {\n console.debug(`Socket connect_error: `, err)\n })\n socket.current.io.on('reconnect', (attempt) => {\n eventDispatch('phone-island-socket-reconnected', {})\n console.debug(`Socket reconnect attemp ${attempt} (sid: ${socket.current.id})`)\n })\n socket.current.io.on('reconnect_attempt', (attempt) => {\n console.debug(`Socket reconnect_attempt ${attempt}`)\n })\n socket.current.io.on('reconnect_error', (err) => {\n console.debug(`Socket reconnect_error: `, err)\n })\n socket.current.io.on('reconnect_failed', () => {\n console.debug(`Socket reconnect_failed`)\n })\n\n // Checks if socket is reachable every 5 seconds\n connectionCheckInterval.current = setInterval(() => {\n const start = Date.now()\n socket.current.volatile.emit(\n 'ping',\n withTimeout(\n () => {\n // Remove socket_down alert\n dispatch.alerts.removeAlert('socket_down')\n // Calculate and log latency\n const latency = Date.now() - start\n console.debug(`Socket latency: ${latency}ms`)\n console.debug('Socket is reachable!')\n },\n () => {\n // Set socket_down alert\n dispatch.alerts.setAlert('socket_down')\n console.debug('Socket is unreachable!')\n },\n 7 * 1000, // Waits for the response 7 seconds\n ),\n )\n }, 7 * 1000) // Executes a new check every 7 seconds\n\n // Handle connection message\n socket.current.on('connect', () => {\n console.debug('Socket on: ' + hostName + ' is connected!')\n socket.current.emit('login', {\n accessKeyId: `${username}`,\n token: authToken,\n uaType: 'desktop',\n })\n })\n\n // Handle authentication success message\n socket.current.on('authe_ok', () => {\n console.debug('Socket authentication success!')\n })\n\n socket.current.on('userMainPresenceUpdate', (res: MainPresenceTypes) => {\n // Update endpoints store\n store.dispatch.users.updateEndpointMainPresence({ ...res.mainPresence })\n // Dispatch dispatchMainPresence Event\n dispatchMainPresence(res)\n })\n\n socket.current.on('extenUpdate', (res: ExtensionTypes) => {\n // Update extensions and conversations in users store\n dispatch.users.updateExtension(res)\n // Dispatch conversations event\n dispatchConversations(res)\n // Initialize conversation\n const conv = res.conversations[Object.keys(res.conversations)[0]] || {}\n // Handle only the events of the user\n if (res.username === username) {\n handleCurrentUserEvents(res, conv)\n // Update the conversations of the user\n dispatch.currentUser.updateConversations(res)\n }\n })\n\n // `queueUpdate` is the socket event when the data of a queue updates\n socket.current.on('queueUpdate', (res: QueuesUpdateTypes) => {\n // Dispatch queueUpdate event\n dispatchQueueUpdate(res)\n })\n\n // `queueMemberUpdate` is the socket event when the data of a queue member changes\n socket.current.on('queueMemberUpdate', (res: QueueUpdateMemberTypes) => {\n // Dispatch queueMemberUpdate event\n dispatchQueueMemberUpdate(res)\n })\n\n // `takeOver` is the socket event when the user does login from another new window\n socket.current.on('takeOver', () => {\n // Dispatch takeOver event\n dispatchAlreadyLogin()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('serverReloaded', () => {\n // Dispatch serverReload event\n dispatchServerReload()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('parkingUpdate', () => {\n // Dispatch serverReload event\n dispatchParkingUpdate()\n })\n }\n\n initSocketConnection()\n\n // Stop the check socket interval\n // Close the socket connection\n return () => {\n clearInterval(connectionCheckInterval.current)\n socket.current.close()\n }\n }, [])\n\n // Manage reload events\n useEffect(() => {\n if (reload) {\n console.info('websocket reconnection')\n socket.current.disconnect()\n socket.current.connect()\n reloadedCallback()\n }\n }, [reload])\n\n return <>{children}</>\n}\n"],"names":["_a","hostName","username","authToken","reload","reloadedCallback","children","dispatch","useDispatch","connectionCheckInterval","useRef","socket","userInformation","useSelector","state","currentUser","useEffect","handleCurrentUserEvents","res","conv","_b","store","getState","currentCall","transferring","transferSwitching","transferCalls","Object","keys","length","status","extensions","users","checkIncomingUpdatePlay","conversationId","id","displayName","getDisplayName","number","concat","counterpartNum","incomingSocket","ownerExtension","owner","eventDispatch","connected","updateCurrentCall","startTime","addTransferCalls","type","getTimestampInSeconds","default_device","accepted","incoming","direction","undefined","player","stopAudioPlayer","checkDefaultDeviceConversationActive","inTransferCalls","find","item","updateTransferSwitching","checkOutgoingUpdate","outgoingSocket","counterpartName","island","setIslandView","userTotallyFree","reset","current","io","upgrade","transports","reconnection","reconnectionDelay","on","console","debug","reason","includes","err","attempt","setInterval","start","Date","now","volatile","emit","withTimeout","alerts","removeAlert","latency","setAlert","accessKeyId","token","uaType","updateEndpointMainPresence","__assign","mainPresence","dispatchMainPresence","updateExtension","dispatchConversations","conversations","updateConversations","dispatchQueueUpdate","dispatchQueueMemberUpdate","dispatchAlreadyLogin","dispatchServerReload","dispatchParkingUpdate","clearInterval","close","info","disconnect","connect","React","createElement","Fragment"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../Button.js"),r=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),s=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),o=require("../../lib/webrtc/messages.js"),i=require("../../store/index.js");require("../../node_modules/react-redux/es/index.js");var n=require("../../static/outgoing_ringtone.js"),a=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 l=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var u=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),d=require("../../node_modules/react-redux/es/hooks/useSelector.js");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var m=c(e);exports.TransferActions=function(){var e=u.useDispatch(),c=d.useSelector((function(e){return e.currentCall}));c.transferCalls,c.number;var p=l.useTranslation().t;return m.default.createElement(m.default.Fragment,null,m.default.createElement("div",{className:"pi-grid pi-grid-cols-3 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center"},m.default.createElement("div",null),m.default.createElement(t.Button,{onClick:function(){e.currentCall.updateTransferSwitching(!0),o.sendDTMF("*"),i.store.getState().player.audioPlayerPlaying||e.player.updateStartAudioPlayer({src:n.default,loop:!0}),setTimeout((function(){o.sendDTMF("4"),e.player.stopAudioPlayer()}),500)},variant:"default","data-tooltip-id":"transfer-actions-tooltip","data-tooltip-content":p("Tooltip.Switch call")},m.default.createElement(r.FontAwesomeIcon,{size:"xl",icon:s.faArrowsRepeat})),m.default.createElement("div",null)),m.default.createElement(a.Tooltip,{className:"pi-z-1000",id:"transfer-actions-tooltip",place:"bottom"}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../Button.js"),r=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),s=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),i=require("../../lib/webrtc/messages.js"),o=require("../../store/index.js");require("../../node_modules/react-redux/es/index.js");var n=require("../../static/outgoing_ringtone.js"),a=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 l=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var u=require("../../utils/customHooks/useEventListener.js"),d=require("../../utils/genericFunctions/eventDispatch.js"),c=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),m=require("../../node_modules/react-redux/es/hooks/useSelector.js");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var f=p(e);exports.TransferActions=function(){var e=c.useDispatch(),p=m.useSelector((function(e){return e.currentCall}));function j(){e.currentCall.updateTransferSwitching(!0),i.sendDTMF("*"),o.store.getState().player.audioPlayerPlaying||e.player.updateStartAudioPlayer({src:n.default,loop:!0}),setTimeout((function(){i.sendDTMF("4"),e.player.stopAudioPlayer(),d.eventDispatch("phone-island-call-transfer-switched",{})}),500)}p.transferCalls,p.number,u.useEventListener("phone-island-call-transfer-switch",(function(){j()}));var h=l.useTranslation().t;return f.default.createElement(f.default.Fragment,null,f.default.createElement("div",{className:"pi-grid pi-grid-cols-3 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center"},f.default.createElement("div",null),f.default.createElement(t.Button,{onClick:j,variant:"default","data-tooltip-id":"transfer-actions-tooltip","data-tooltip-content":h("Tooltip.Switch call")},f.default.createElement(r.FontAwesomeIcon,{size:"xl",icon:s.faArrowsRepeat})),f.default.createElement("div",null)),f.default.createElement(a.Tooltip,{className:"pi-z-1000",id:"transfer-actions-tooltip",place:"bottom"}))};
2
2
  //# sourceMappingURL=TransferActions.js.map