@nethesis/phone-island 0.7.121 → 0.7.122

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/App.js 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"),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;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("./components/Events.js"),n=require("./components/Socket.js"),s=require("./components/WebRTC.js"),o=require("./components/Island.js"),a=require("./components/RestAPI.js"),i=require("./utils/customHooks/useEventListener.js"),r=require("./utils/genericFunctions/eventDispatch.js"),u=require("./utils/genericFunctions/localStorage.js");require("./node_modules/react-redux/es/index.js");var d=require("./store/index.js");require("./node_modules/@fortawesome/react-fontawesome/index.es.js"),require("./node_modules/framer-motion/dist/framer-motion.js");var c=require("./node_modules/js-base64/base64.mjs.js"),l=require("./workers/wake_up.js"),p=require("./lib/i18n.js");require("./node_modules/react-tooltip/dist/react-tooltip.min.css.js");var h=require("./lib/webrtc/messages.js"),f=require("./node_modules/react-redux/es/components/Provider.js");function v(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("./node_modules/react-redux/node_modules/react-is/index.js"),require("./node_modules/react-redux/es/components/Context.js");var m=v(e),j=function(v){var j=v.dataConfig,I=v.showAlways,q=void 0!==I&&I,E=c.Base64.atob(j||"").split(":"),g=E[0],w=E[1],S=E[2],k=E[3],b=E[4],D=E[5],_=E[6],x=e.useState(!1),y=x[0],L=x[1],C=e.useState(!1),N=C[0],P=C[1],A=e.useState(!1),O=A[0],R=A[1];e.useEffect((function(){var e=new Worker(l.default,{type:"module"});return e.onmessage=function(e){"wakeup"===e.data&&L(!0)},function(){e.terminate()}}),[]),e.useEffect((function(){O&&N&&(L(!1),P(!1),R(!1))}),[O,N]),i.useEventListener("phone-island-call-keypad-close",(function(){d.store.dispatch.island.setIslandView("call"),r.eventDispatch("phone-island-call-keypad-closed",{})})),i.useEventListener("phone-island-call-transfer-close",(function(){d.store.dispatch.island.setIslandView("call"),r.eventDispatch("phone-island-call-transfer-closed",{})})),i.useEventListener("phone-island-recording-close",(function(){d.store.dispatch.island.setIslandView(null),r.eventDispatch("phone-island-recording-closed",{})})),i.useEventListener("phone-island-audio-player-close",(function(){d.store.dispatch.island.setIslandView(null),r.eventDispatch("phone-island-audio-player-closed",{})})),i.useEventListener("phone-island-detach",(function(e){h.detach(),d.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),r.eventDispatch("phone-island-detached",{})})),i.useEventListener("phone-island-audio-input-change",(function(e){u.setJSONItem("phone-island-audio-input-device",{deviceId:e.deviceId}),r.eventDispatch("phone-island-audio-input-changed",{})})),i.useEventListener("phone-island-audio-output-change",(function(e){var t=d.store.getState().player.remoteAudio;null==t||t.current.setSinkId(e.deviceId).then((function(){console.info("Default audio output device change with success!"),u.setJSONItem("phone-island-audio-output-device",{deviceId:e.deviceId}),r.eventDispatch("phone-island-audio-output-changed",{})})).catch((function(e){console.error("Default audio output device change error:",e)}))}));var T=e.useState(!0),V=T[0],F=T[1],H=e.useState(!0),J=H[0],W=H[1];e.useEffect((function(){V&&(p.loadI18n(),F(!1))}),[V]);var B=d.store.getState().player.remoteAudio;return e.useEffect((function(){var e;if(J&&B){var t=null===(e=u.getJSONItem("phone-island-audio-output-device"))||void 0===e?void 0:e.deviceId;r.eventDispatch("phone-island-audio-output-change",{deviceId:t}),W(!1)}}),[J,B]),m.default.createElement(m.default.Fragment,null,m.default.createElement(f.default,{store:d.store},m.default.createElement(s.WebRTC,{hostName:g,sipExten:k,sipSecret:b,sipHost:D,sipPort:_,reload:y,reloadedCallback:function(){return P(!0)}},m.default.createElement(a.RestAPI,{hostName:g,username:w,authToken:S},m.default.createElement(n.Socket,{hostName:g,username:w,authToken:S,reload:y,reloadedCallback:function(){return R(!0)}},m.default.createElement(t.Events,{sipHost:D},m.default.createElement(o.Island,{showAlways:q})))))))};j.displayName="PhoneIsland",exports.PhoneIsland=j;
2
2
  //# sourceMappingURL=App.js.map
package/dist/App.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"App.js","sources":["../src/App.tsx"],"sourcesContent":["import React, { type FC, useState, useEffect } from 'react'\nimport { Events, Socket, WebRTC, Island, RestAPI } from './components'\nimport { Provider } from 'react-redux'\nimport { store } from './store'\nimport { Base64 } from 'js-base64'\nimport wakeUpWorker from './workers/wake_up'\nimport loadI18n from './lib/i18n'\n\nimport 'react-tooltip/dist/react-tooltip.css'\nimport { useEventListener, eventDispatch } 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
+ {"version":3,"file":"App.js","sources":["../src/App.tsx"],"sourcesContent":["import React, { type FC, useState, useEffect } from 'react'\nimport { Events, Socket, WebRTC, Island, RestAPI } from './components'\nimport { Provider } from 'react-redux'\nimport { store } from './store'\nimport { Base64 } from 'js-base64'\nimport wakeUpWorker from './workers/wake_up'\nimport loadI18n from './lib/i18n'\n\nimport 'react-tooltip/dist/react-tooltip.css'\nimport { useEventListener, eventDispatch, setJSONItem, getJSONItem } from './utils'\nimport { detach } from './lib/webrtc/messages'\n\ninterface PhoneIslandProps {\n dataConfig: string\n showAlways?: boolean\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport const PhoneIsland: FC<PhoneIslandProps> = ({ dataConfig, showAlways = false }) => {\n const CONFIG: string[] = Base64.atob(dataConfig || '').split(':')\n const HOST_NAME: string = CONFIG[0]\n const USERNAME: string = CONFIG[1]\n const AUTH_TOKEN: string = CONFIG[2]\n const SIP_EXTEN: string = CONFIG[3]\n const SIP_SECRET: string = CONFIG[4]\n const SIP_HOST: string = CONFIG[5]\n const SIP_PORT: string = CONFIG[6]\n\n // Initialize the state to manage the reload events\n const [reload, setReload] = useState<boolean>(false)\n const [reloadedWebRTC, setReloadedWebRTC] = useState<boolean>(false)\n const [reloadedSocket, setReloadedSocket] = useState<boolean>(false)\n\n useEffect(() => {\n const worker = new Worker(wakeUpWorker, { type: 'module' })\n worker.onmessage = (event: MessageEvent<string>) => {\n // Handle wakeup message\n if (event.data === 'wakeup') {\n setReload(true)\n }\n }\n\n return () => {\n worker.terminate()\n }\n }, [])\n\n useEffect(() => {\n if (reloadedSocket && reloadedWebRTC) {\n setReload(false)\n setReloadedWebRTC(false)\n setReloadedSocket(false)\n }\n }, [reloadedSocket, reloadedWebRTC])\n\n useEventListener('phone-island-call-keypad-close', () => {\n store.dispatch.island.setIslandView('call')\n eventDispatch('phone-island-call-keypad-closed', {})\n })\n useEventListener('phone-island-call-transfer-close', () => {\n store.dispatch.island.setIslandView('call')\n eventDispatch('phone-island-call-transfer-closed', {})\n })\n useEventListener('phone-island-recording-close', () => {\n store.dispatch.island.setIslandView(null)\n eventDispatch('phone-island-recording-closed', {})\n })\n useEventListener('phone-island-audio-player-close', () => {\n store.dispatch.island.setIslandView(null)\n eventDispatch('phone-island-audio-player-closed', {})\n })\n\n useEventListener('phone-island-detach', (data) => {\n detach()\n store.dispatch.currentUser.updateCurrentDefaultDevice(data?.deviceInformationObject)\n eventDispatch('phone-island-detached', {})\n })\n\n useEventListener('phone-island-audio-input-change', (data: DeviceInputOutputTypes) => {\n setJSONItem('phone-island-audio-input-device', { deviceId: data.deviceId })\n eventDispatch('phone-island-audio-input-changed', {})\n })\n useEventListener('phone-island-audio-output-change', (data: DeviceInputOutputTypes) => {\n const remoteAudioElement: any = store.getState().player.remoteAudio\n // set audio output\n remoteAudioElement?.current\n .setSinkId(data.deviceId)\n .then(function () {\n console.info('Default audio output device change with success!')\n // set device to localstorage\n setJSONItem('phone-island-audio-output-device', { deviceId: data.deviceId })\n\n // dispatch event\n eventDispatch('phone-island-audio-output-changed', {})\n })\n .catch(function (err) {\n console.error('Default audio output device change error:', err)\n })\n })\n\n const [firstRenderI18n, setFirstRenderI18n] = useState(true)\n const [firstAudioOutputInit, setFirstAudioOutputInit] = useState(true)\n\n //initialize i18n\n useEffect(() => {\n if (firstRenderI18n) {\n loadI18n()\n setFirstRenderI18n(false)\n }\n }, [firstRenderI18n])\n\n const remoteAudioElement: any = store.getState().player.remoteAudio\n\n //initialize i18n\n useEffect(() => {\n if (firstAudioOutputInit && remoteAudioElement) {\n const defaultAudioOutputDevice: any = getJSONItem(`phone-island-audio-output-device`)?.deviceId\n eventDispatch('phone-island-audio-output-change', { deviceId: defaultAudioOutputDevice })\n setFirstAudioOutputInit(false)\n }\n }, [firstAudioOutputInit, remoteAudioElement])\n\n return (\n <>\n <Provider store={store}>\n <WebRTC\n hostName={HOST_NAME}\n sipExten={SIP_EXTEN}\n sipSecret={SIP_SECRET}\n sipHost={SIP_HOST}\n sipPort={SIP_PORT}\n reload={reload}\n reloadedCallback={() => setReloadedWebRTC(true)}\n >\n <RestAPI hostName={HOST_NAME} username={USERNAME} authToken={AUTH_TOKEN}>\n <Socket\n hostName={HOST_NAME}\n username={USERNAME}\n authToken={AUTH_TOKEN}\n reload={reload}\n reloadedCallback={() => setReloadedSocket(true)}\n >\n <Events sipHost={SIP_HOST}>\n <Island showAlways={showAlways} />\n </Events>\n </Socket>\n </RestAPI>\n </WebRTC>\n </Provider>\n </>\n )\n}\n\nPhoneIsland.displayName = 'PhoneIsland'\n"],"names":["PhoneIsland","_a","dataConfig","_b","showAlways","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","SIP_HOST","SIP_PORT","_c","useState","reload","setReload","_d","reloadedWebRTC","setReloadedWebRTC","_e","reloadedSocket","setReloadedSocket","useEffect","worker","Worker","wakeUpWorker","type","onmessage","event","data","terminate","useEventListener","store","dispatch","island","setIslandView","eventDispatch","detach","currentUser","updateCurrentDefaultDevice","deviceInformationObject","setJSONItem","deviceId","remoteAudioElement","getState","player","remoteAudio","current","setSinkId","then","console","info","catch","err","error","_f","firstRenderI18n","setFirstRenderI18n","_g","firstAudioOutputInit","setFirstAudioOutputInit","loadI18n","defaultAudioOutputDevice","getJSONItem","React","createElement","Fragment","Provider","WebRTC","hostName","sipExten","sipSecret","sipHost","sipPort","reloadedCallback","RestAPI","username","authToken","Socket","Events","Island","displayName"],"mappings":"6tCAqBaA,EAAoC,SAACC,GAAE,IAAAC,eAAYC,EAAAF,EAAAG,WAAAA,OAAU,IAAAD,GAAQA,EAC1EE,EAAmBC,EAAMA,OAACC,KAAKL,GAAc,IAAIM,MAAM,KACvDC,EAAoBJ,EAAO,GAC3BK,EAAmBL,EAAO,GAC1BM,EAAqBN,EAAO,GAC5BO,EAAoBP,EAAO,GAC3BQ,EAAqBR,EAAO,GAC5BS,EAAmBT,EAAO,GAC1BU,EAAmBV,EAAO,GAG1BW,EAAsBC,EAAAA,UAAkB,GAAvCC,EAAMF,EAAA,GAAEG,EAASH,EAAA,GAClBI,EAAsCH,EAAAA,UAAkB,GAAvDI,EAAcD,EAAA,GAAEE,EAAiBF,EAAA,GAClCG,EAAsCN,EAAAA,UAAkB,GAAvDO,EAAcD,EAAA,GAAEE,EAAiBF,EAAA,GAExCG,EAAAA,WAAU,WACR,IAAMC,EAAS,IAAIC,OAAOC,EAAAA,QAAc,CAAEC,KAAM,WAQhD,OAPAH,EAAOI,UAAY,SAACC,GAEC,WAAfA,EAAMC,MACRd,GAAU,EAEd,EAEO,WACLQ,EAAOO,WACT,CACD,GAAE,IAEHR,EAAAA,WAAU,WACJF,GAAkBH,IACpBF,GAAU,GACVG,GAAkB,GAClBG,GAAkB,GAEtB,GAAG,CAACD,EAAgBH,IAEpBc,EAAgBA,iBAAC,kCAAkC,WACjDC,EAAAA,MAAMC,SAASC,OAAOC,cAAc,QACpCC,gBAAc,kCAAmC,CAAA,EACnD,IACAL,EAAgBA,iBAAC,oCAAoC,WACnDC,EAAAA,MAAMC,SAASC,OAAOC,cAAc,QACpCC,gBAAc,oCAAqC,CAAA,EACrD,IACAL,EAAgBA,iBAAC,gCAAgC,WAC/CC,EAAAA,MAAMC,SAASC,OAAOC,cAAc,MACpCC,gBAAc,gCAAiC,CAAA,EACjD,IACAL,EAAgBA,iBAAC,mCAAmC,WAClDC,EAAAA,MAAMC,SAASC,OAAOC,cAAc,MACpCC,gBAAc,mCAAoC,CAAA,EACpD,IAEAL,mBAAiB,uBAAuB,SAACF,GACvCQ,EAAAA,SACAL,EAAAA,MAAMC,SAASK,YAAYC,2BAA2BV,aAAA,EAAAA,EAAMW,yBAC5DJ,gBAAc,wBAAyB,CAAA,EACzC,IAEAL,mBAAiB,mCAAmC,SAACF,GACnDY,EAAWA,YAAC,kCAAmC,CAAEC,SAAUb,EAAKa,WAChEN,gBAAc,mCAAoC,CAAA,EACpD,IACAL,mBAAiB,oCAAoC,SAACF,GACpD,IAAMc,EAA0BX,EAAKA,MAACY,WAAWC,OAAOC,YAExDH,SAAAA,EAAoBI,QACjBC,UAAUnB,EAAKa,UACfO,MAAK,WACJC,QAAQC,KAAK,oDAEbV,EAAWA,YAAC,mCAAoC,CAAEC,SAAUb,EAAKa,WAGjEN,gBAAc,oCAAqC,CAAA,EACrD,IACCgB,OAAM,SAAUC,GACfH,QAAQI,MAAM,4CAA6CD,EAC7D,GACJ,IAEM,IAAAE,EAAwC1C,EAAAA,UAAS,GAAhD2C,EAAeD,EAAA,GAAEE,EAAkBF,EAAA,GACpCG,EAAkD7C,EAAAA,UAAS,GAA1D8C,EAAoBD,EAAA,GAAEE,EAAuBF,EAAA,GAGpDpC,EAAAA,WAAU,WACJkC,IACFK,EAAAA,WACAJ,GAAmB,GAEvB,GAAG,CAACD,IAEJ,IAAMb,EAA0BX,EAAKA,MAACY,WAAWC,OAAOC,YAWxD,OARAxB,EAAAA,WAAU,iBACR,GAAIqC,GAAwBhB,EAAoB,CAC9C,IAAMmB,EAAiF,QAAjDjE,EAAAkE,EAAWA,YAAC,2CAAqC,IAAAlE,OAAA,EAAAA,EAAA6C,SACvFN,EAAAA,cAAc,mCAAoC,CAAEM,SAAUoB,IAC9DF,GAAwB,EACzB,CACH,GAAG,CAACD,EAAsBhB,IAGxBqB,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAAAC,cAACE,EAAAA,QAAQ,CAACnC,MAAOA,EAAAA,OACfgC,UAAAC,cAACG,EAAMA,OAAA,CACLC,SAAUhE,EACViE,SAAU9D,EACV+D,UAAW9D,EACX+D,QAAS9D,EACT+D,QAAS9D,EACTG,OAAQA,EACR4D,iBAAkB,WAAM,OAAAxD,GAAkB,KAE1C8C,UAAAC,cAACU,EAAOA,QAAA,CAACN,SAAUhE,EAAWuE,SAAUtE,EAAUuE,UAAWtE,GAC3DyD,EAAC,QAAAC,cAAAa,SACC,CAAAT,SAAUhE,EACVuE,SAAUtE,EACVuE,UAAWtE,EACXO,OAAQA,EACR4D,iBAAkB,WAAM,OAAArD,GAAkB,KAE1C2C,EAAAA,QAAAC,cAACc,EAAAA,OAAM,CAACP,QAAS9D,GACfsD,UAAAC,cAACe,EAAMA,OAAA,CAAChF,WAAYA,SAQpC,EAEAJ,EAAYqF,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("../utils/customHooks/useIsomorphicLayoutEffect.js"),r=require("./CallView/index.js"),l=require("./KeypadView/index.js"),a=require("./AudioPlayerView/index.js"),u=require("./AlertGuard.js"),n=require("./CallView/BackCall.js"),i=require("./ViewsTransition.js");require("../node_modules/@fortawesome/react-fontawesome/index.es.js"),require("../lib/webrtc/janus.js"),require("../store/index.js"),require("../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../node_modules/react-tooltip/dist/react-tooltip.min.cjs.js"),require("../node_modules/react-i18next/node_modules/@babel/runtime/helpers/defineProperty.js"),require("../node_modules/react-i18next/node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../node_modules/react-i18next/node_modules/@babel/runtime/helpers/typeof.js"),require("../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../node_modules/react-i18next/dist/es/context.js"),require("../node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var s=require("./TransferView/TransferList.js"),o=require("./RecorderView/index.js"),d=require("./IslandMotion.js"),c=require("./IslandDrag.js"),f=require("./Close.js"),m=require("../node_modules/react-redux/es/hooks/useSelector.js"),p=require("../node_modules/react-redux/es/hooks/useDispatch.js");function j(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var y=j(e),E=function(j){var E=j.showAlways,q=m.useSelector((function(e){return e.currentCall})),w=q.incoming,x=q.accepted,V=q.outgoing,_=q.transferring,h=m.useSelector((function(e){return e.island})).view,b=m.useSelector((function(e){return e.alerts.status})).activeAlertsCount,v=m.useSelector((function(e){return e.player})).audioPlayerLoop,g=e.useRef(null),P=p.useDispatch(),I=e.useRef(null),R=e.useRef(null),A=e.useRef(null),C=e.useRef(null),k=e.useRef(null);t.useIsomorphicLayoutEffect((function(){P.player.updatePlayer({audioPlayer:I,localAudio:R,localVideo:C,remoteVideo:k,remoteAudio:A})}),[]),e.useEffect((function(){(w||V)&&P.island.setIslandView("call")}),[w,V]);var S=e.useState(""),T=S[0],L=S[1];return e.useEffect((function(){setTimeout((function(){L(h)}),200)}),[h]),y.default.createElement("div",{ref:g,className:"pi-absolute pi-min-w-full pi-min-h-full pi-left-0 pi-top-0 pi-overflow-hidden pi-pointer-events-none pi-flex pi-items-center pi-justify-center pi-content-center pi-phone-island-container pi-z-1000"},(w||V||x||E||b>0||"player"===h||"recorder"===h)&&y.default.createElement(y.default.Fragment,null,y.default.createElement(c.IslandDrag,{islandContainerRef:g},y.default.createElement(n.default,{isVisible:"keypad"===h||"transfer"===h||_}),y.default.createElement(d.IslandMotion,null,y.default.createElement(u.AlertGuard,null,"call"===T?y.default.createElement(i.default,{forView:"call"},y.default.createElement(r.default,null)):"keypad"===T?y.default.createElement(i.default,{forView:"keypad"},y.default.createElement(l.default,null)):"transfer"===T?y.default.createElement(i.default,{forView:"transfer"},y.default.createElement(s.TransferListView,null)):"player"===T?y.default.createElement(i.default,{forView:"player"},y.default.createElement(a.KeypadView,null)):"recorder"===T?y.default.createElement(i.default,{forView:"recorder"},y.default.createElement(o.RecorderView,null)):y.default.createElement(y.default.Fragment,null))),y.default.createElement(f.Close,null))),y.default.createElement("div",{className:"pi-hidden"},y.default.createElement("audio",{loop:v,ref:I}),y.default.createElement("audio",{muted:!0,ref:R}),y.default.createElement("audio",{autoPlay:!0,ref:A}),y.default.createElement("video",{muted:!0,autoPlay:!0,ref:C}),y.default.createElement("video",{autoPlay:!0,muted:!0,ref:k})))};E.displayName="Island",exports.Island=E;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var r=require("../utils/customHooks/useIsomorphicLayoutEffect.js"),t=require("./CallView/index.js"),l=require("./KeypadView/index.js"),a=require("./AudioPlayerView/index.js"),u=require("./AlertGuard.js"),n=require("./CallView/BackCall.js"),i=require("./ViewsTransition.js");require("../node_modules/@fortawesome/react-fontawesome/index.es.js"),require("../lib/webrtc/janus.js"),require("../store/index.js"),require("../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../node_modules/mic-check/lib/index.js"),require("../node_modules/react-tooltip/dist/react-tooltip.min.cjs.js"),require("../node_modules/react-i18next/node_modules/@babel/runtime/helpers/defineProperty.js"),require("../node_modules/react-i18next/node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../node_modules/react-i18next/node_modules/@babel/runtime/helpers/typeof.js"),require("../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../node_modules/react-i18next/dist/es/context.js"),require("../node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var s=require("./TransferView/TransferList.js"),o=require("./RecorderView/index.js"),d=require("./IslandMotion.js"),c=require("./IslandDrag.js"),f=require("./Close.js"),m=require("../node_modules/react-redux/es/hooks/useSelector.js"),p=require("../node_modules/react-redux/es/hooks/useDispatch.js");function j(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var y=j(e),q=function(j){var q=j.showAlways,E=m.useSelector((function(e){return e.currentCall})),w=E.incoming,x=E.accepted,_=E.outgoing,h=E.transferring,V=m.useSelector((function(e){return e.island})).view,b=m.useSelector((function(e){return e.alerts.status})).activeAlertsCount,v=m.useSelector((function(e){return e.player})).audioPlayerLoop,g=e.useRef(null),P=p.useDispatch(),I=e.useRef(null),R=e.useRef(null),k=e.useRef(null),A=e.useRef(null),C=e.useRef(null);r.useIsomorphicLayoutEffect((function(){P.player.updatePlayer({audioPlayer:I,localAudio:R,localVideo:A,remoteVideo:C,remoteAudio:k})}),[]),e.useEffect((function(){(w||_)&&P.island.setIslandView("call")}),[w,_]);var S=e.useState(""),T=S[0],L=S[1];return e.useEffect((function(){setTimeout((function(){L(V)}),200)}),[V]),y.default.createElement("div",{ref:g,className:"pi-absolute pi-min-w-full pi-min-h-full pi-left-0 pi-top-0 pi-overflow-hidden pi-pointer-events-none pi-flex pi-items-center pi-justify-center pi-content-center pi-phone-island-container pi-z-1000"},(w||_||x||q||b>0||"player"===V||"recorder"===V)&&y.default.createElement(y.default.Fragment,null,y.default.createElement(c.IslandDrag,{islandContainerRef:g},y.default.createElement(n.default,{isVisible:"keypad"===V||"transfer"===V||h}),y.default.createElement(d.IslandMotion,null,y.default.createElement(u.AlertGuard,null,"call"===T?y.default.createElement(i.default,{forView:"call"},y.default.createElement(t.default,null)):"keypad"===T?y.default.createElement(i.default,{forView:"keypad"},y.default.createElement(l.default,null)):"transfer"===T?y.default.createElement(i.default,{forView:"transfer"},y.default.createElement(s.TransferListView,null)):"player"===T?y.default.createElement(i.default,{forView:"player"},y.default.createElement(a.KeypadView,null)):"recorder"===T?y.default.createElement(i.default,{forView:"recorder"},y.default.createElement(o.RecorderView,null)):y.default.createElement(y.default.Fragment,null))),y.default.createElement(f.Close,null))),y.default.createElement("div",{className:"pi-hidden"},y.default.createElement("audio",{loop:v,ref:I}),y.default.createElement("audio",{muted:!0,ref:R}),y.default.createElement("audio",{autoPlay:!0,ref:k}),y.default.createElement("video",{muted:!0,autoPlay:!0,ref:A}),y.default.createElement("video",{autoPlay:!0,muted:!0,ref:C})))};q.displayName="Island",exports.Island=q;
2
2
  //# sourceMappingURL=Island.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Island.js","sources":["../../src/components/Island.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { useState, useRef, useEffect, type FC } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { RootState, Dispatch } from '../store'\nimport { useIsomorphicLayoutEffect } from '../utils'\nimport CallView from './CallView'\nimport KeyboardView from './KeypadView'\nimport AudioPlayerView from './AudioPlayerView'\nimport { AlertGuard } from './AlertGuard'\nimport BackCall from './CallView/BackCall'\nimport ViewsTransition from './ViewsTransition'\nimport { TransferListView } from './TransferView'\nimport { RecorderView } from './RecorderView'\nimport IslandMotions from './IslandMotion'\nimport IslandDrag from './IslandDrag'\nimport Close from './Close'\n\n/**\n * Provides the Island logic\n *\n * @param showAlways Sets the Island ever visible\n */\nexport const Island: FC<IslandProps> = ({ showAlways }) => {\n // Get the currentCall info\n const { incoming, accepted, outgoing, transferring } = useSelector(\n (state: RootState) => state.currentCall,\n )\n\n // Get isOpen from island store\n const { view } = useSelector((state: RootState) => state.island)\n\n // Get activeAlertsCount from island store\n const { activeAlertsCount } = useSelector((state: RootState) => state.alerts.status)\n\n // Get audioPlayerLoop value from player store\n const { audioPlayerLoop } = useSelector((state: RootState) => state.player)\n\n // The Container reference\n const islandContainerRef = useRef<any>(null)\n\n // Initialize useDispatch\n const dispatch = useDispatch<Dispatch>()\n\n const audioPlayer = useRef<HTMLAudioElement>(null)\n const localAudio = useRef<HTMLAudioElement>(null)\n const remoteAudio = useRef<HTMLAudioElement>(null)\n const localVideo = useRef<HTMLVideoElement>(null)\n const remoteVideo = useRef<HTMLVideoElement>(null)\n\n useIsomorphicLayoutEffect(() => {\n dispatch.player.updatePlayer({\n audioPlayer: audioPlayer,\n localAudio: localAudio,\n localVideo: localVideo,\n remoteVideo: remoteVideo,\n remoteAudio: remoteAudio,\n })\n }, [])\n\n // Handle and apply view switch logic\n // ...set callview as the current view\n useEffect(() => {\n // Check and switch the view\n if (incoming || outgoing) {\n dispatch.island.setIslandView('call')\n }\n }, [incoming, outgoing])\n\n const [currentView, setCurrentView] = useState<any>('')\n\n // Handle island view change\n useEffect(() => {\n setTimeout(() => {\n setCurrentView(view)\n }, 200)\n }, [view])\n\n return (\n <div\n ref={islandContainerRef}\n className='pi-absolute pi-min-w-full pi-min-h-full pi-left-0 pi-top-0 pi-overflow-hidden pi-pointer-events-none pi-flex pi-items-center pi-justify-center pi-content-center pi-phone-island-container pi-z-1000'\n >\n {(incoming ||\n outgoing ||\n accepted ||\n showAlways ||\n activeAlertsCount > 0 ||\n view === 'player' ||\n view === 'recorder') && (\n <>\n <IslandDrag islandContainerRef={islandContainerRef}>\n {/* Add background call visibility logic */}\n <BackCall isVisible={view === 'keypad' || view === 'transfer' || transferring} />\n <IslandMotions>\n {/* The views logic */}\n <AlertGuard>\n {currentView === 'call' ? (\n <ViewsTransition forView='call'>\n <CallView />\n </ViewsTransition>\n ) : currentView === 'keypad' ? (\n <ViewsTransition forView='keypad'>\n <KeyboardView />\n </ViewsTransition>\n ) : currentView === 'transfer' ? (\n <ViewsTransition forView='transfer'>\n <TransferListView />\n </ViewsTransition>\n ) : currentView === 'player' ? (\n <ViewsTransition forView='player'>\n <AudioPlayerView />\n </ViewsTransition>\n ) : currentView === 'recorder' ? (\n <ViewsTransition forView='recorder'>\n <RecorderView />\n </ViewsTransition>\n ) : (\n <></>\n )}\n </AlertGuard>\n </IslandMotions>\n <Close />\n </IslandDrag>\n </>\n )}\n <div className='pi-hidden'>\n <audio loop={audioPlayerLoop} ref={audioPlayer}></audio>\n <audio muted={true} ref={localAudio}></audio>\n <audio autoPlay ref={remoteAudio}></audio>\n <video muted={true} autoPlay ref={localVideo}></video>\n <video autoPlay muted={true} ref={remoteVideo}></video>\n </div>\n </div>\n )\n}\n\nIsland.displayName = 'Island'\n\ninterface IslandProps {\n showAlways?: boolean\n}\n"],"names":["Island","_a","showAlways","_b","useSelector","state","currentCall","incoming","accepted","outgoing","transferring","view","island","activeAlertsCount","alerts","status","audioPlayerLoop","player","islandContainerRef","useRef","dispatch","useDispatch","audioPlayer","localAudio","remoteAudio","localVideo","remoteVideo","useIsomorphicLayoutEffect","updatePlayer","useEffect","setIslandView","_c","useState","currentView","setCurrentView","setTimeout","React","ref","className","createElement","Fragment","IslandDrag","BackCall","isVisible","IslandMotions","AlertGuard","ViewsTransition","forView","CallView","KeyboardView","TransferListView","AudioPlayerView","RecorderView","Close","loop","muted","autoPlay","displayName"],"mappings":"gjDAwBaA,EAA0B,SAACC,GAAE,IAAAC,EAAUD,EAAAC,WAE5CC,EAAiDC,eACrD,SAACC,GAAqB,OAAAA,EAAMC,eADtBC,EAAQJ,EAAAI,SAAEC,EAAQL,EAAAK,SAAEC,EAAQN,EAAAM,SAAEC,EAAYP,EAAAO,aAK1CC,EAASP,eAAY,SAACC,GAAqB,OAAAA,EAAMO,eAGjDC,EAAsBT,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMS,OAAOC,4BAGrEC,EAAoBZ,eAAY,SAACC,GAAqB,OAAAA,EAAMY,0BAG9DC,EAAqBC,SAAY,MAGjCC,EAAWC,EAAAA,cAEXC,EAAcH,SAAyB,MACvCI,EAAaJ,SAAyB,MACtCK,EAAcL,SAAyB,MACvCM,EAAaN,SAAyB,MACtCO,EAAcP,SAAyB,MAE7CQ,EAAAA,2BAA0B,WACxBP,EAASH,OAAOW,aAAa,CAC3BN,YAAaA,EACbC,WAAYA,EACZE,WAAYA,EACZC,YAAaA,EACbF,YAAaA,GAEhB,GAAE,IAIHK,EAAAA,WAAU,YAEJtB,GAAYE,IACdW,EAASR,OAAOkB,cAAc,OAElC,GAAG,CAACvB,EAAUE,IAER,IAAAsB,EAAgCC,EAAAA,SAAc,IAA7CC,EAAWF,EAAA,GAAEG,EAAcH,EAAA,GASlC,OANAF,EAAAA,WAAU,WACRM,YAAW,WACTD,EAAevB,EAChB,GAAE,IACL,GAAG,CAACA,IAGFyB,EAAAA,6BACEC,IAAKnB,EACLoB,UAAU,yMAER/B,GACAE,GACAD,GACAN,GACAW,EAAoB,GACX,WAATF,GACS,aAATA,IACAyB,EAAA,QAAAG,cAAAH,EAAA,QAAAI,SAAA,KACEJ,EAAAA,QAAAG,cAACE,EAAAA,WAAU,CAACvB,mBAAoBA,GAE9BkB,UAAAG,cAACG,EAAQ,QAAA,CAACC,UAAoB,WAAThC,GAA8B,aAATA,GAAuBD,IACjE0B,UAAAG,cAACK,EAAAA,aAAa,KAEZR,EAAAA,QAAAG,cAACM,aAAU,KACQ,SAAhBZ,EACCG,EAAC,QAAAG,cAAAO,EAAAA,QAAgB,CAAAC,QAAQ,QACvBX,EAAAA,QAAAG,cAACS,EAAAA,QAAW,OAEI,WAAhBf,EACFG,EAAAA,QAAAG,cAACO,EAAAA,QAAgB,CAAAC,QAAQ,UACvBX,EAAAA,QAAAG,cAACU,EAAAA,QAAe,OAEA,aAAhBhB,EACFG,EAAAA,QAAAG,cAACO,EAAAA,QAAgB,CAAAC,QAAQ,YACvBX,EAAAA,QAAAG,cAACW,EAAAA,iBAAmB,OAEJ,WAAhBjB,EACFG,EAAAA,QAAAG,cAACO,EAAAA,QAAgB,CAAAC,QAAQ,UACvBX,EAAAA,QAAAG,cAACY,EAAAA,WAAkB,OAEH,aAAhBlB,EACFG,EAAAA,QAAAG,cAACO,EAAAA,QAAgB,CAAAC,QAAQ,YACvBX,EAAAA,QAACG,cAAAa,eAAe,OAGlBhB,EAAAA,QAAAG,cAAAH,UAAAI,SAAA,QAINJ,EAAAA,QAAAG,cAACc,EAAAA,MAAK,QAIZjB,EAAAA,QAAKG,cAAA,MAAA,CAAAD,UAAU,aACbF,EAAA,QAAAG,cAAA,QAAA,CAAOe,KAAMtC,EAAiBqB,IAAKf,IACnCc,EAAA,QAAAG,cAAA,QAAA,CAAOgB,OAAO,EAAMlB,IAAKd,IACzBa,EAAA,QAAAG,cAAA,QAAA,CAAOiB,UAAQ,EAACnB,IAAKb,IACrBY,UAAOG,cAAA,QAAA,CAAAgB,OAAO,EAAMC,UAAS,EAAAnB,IAAKZ,IAClCW,EAAAA,QAAAG,cAAA,QAAA,CAAOiB,UAAQ,EAACD,OAAO,EAAMlB,IAAKX,KAI1C,EAEA1B,EAAOyD,YAAc"}
1
+ {"version":3,"file":"Island.js","sources":["../../src/components/Island.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { useState, useRef, useEffect, type FC } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { RootState, Dispatch } from '../store'\nimport { useIsomorphicLayoutEffect } from '../utils'\nimport CallView from './CallView'\nimport KeyboardView from './KeypadView'\nimport AudioPlayerView from './AudioPlayerView'\nimport { AlertGuard } from './AlertGuard'\nimport BackCall from './CallView/BackCall'\nimport ViewsTransition from './ViewsTransition'\nimport { TransferListView } from './TransferView'\nimport { RecorderView } from './RecorderView'\nimport IslandMotions from './IslandMotion'\nimport IslandDrag from './IslandDrag'\nimport Close from './Close'\n\n/**\n * Provides the Island logic\n *\n * @param showAlways Sets the Island ever visible\n */\nexport const Island: FC<IslandProps> = ({ showAlways }) => {\n // Get the currentCall info\n const { incoming, accepted, outgoing, transferring } = useSelector(\n (state: RootState) => state.currentCall,\n )\n\n // Get isOpen from island store\n const { view } = useSelector((state: RootState) => state.island)\n\n // Get activeAlertsCount from island store\n const { activeAlertsCount } = useSelector((state: RootState) => state.alerts.status)\n\n // Get audioPlayerLoop value from player store\n const { audioPlayerLoop } = useSelector((state: RootState) => state.player)\n\n // The Container reference\n const islandContainerRef = useRef<any>(null)\n\n // Initialize useDispatch\n const dispatch = useDispatch<Dispatch>()\n\n const audioPlayer = useRef<HTMLAudioElement>(null)\n const localAudio = useRef<HTMLAudioElement>(null)\n const remoteAudio = useRef<HTMLAudioElement>(null)\n const localVideo = useRef<HTMLVideoElement>(null)\n const remoteVideo = useRef<HTMLVideoElement>(null)\n\n useIsomorphicLayoutEffect(() => {\n dispatch.player.updatePlayer({\n audioPlayer: audioPlayer,\n localAudio: localAudio,\n localVideo: localVideo,\n remoteVideo: remoteVideo,\n remoteAudio: remoteAudio,\n })\n }, [])\n\n // Handle and apply view switch logic\n // ...set callview as the current view\n useEffect(() => {\n // Check and switch the view\n if (incoming || outgoing) {\n dispatch.island.setIslandView('call')\n }\n }, [incoming, outgoing])\n\n const [currentView, setCurrentView] = useState<any>('')\n\n // Handle island view change\n useEffect(() => {\n setTimeout(() => {\n setCurrentView(view)\n }, 200)\n }, [view])\n\n return (\n <div\n ref={islandContainerRef}\n className='pi-absolute pi-min-w-full pi-min-h-full pi-left-0 pi-top-0 pi-overflow-hidden pi-pointer-events-none pi-flex pi-items-center pi-justify-center pi-content-center pi-phone-island-container pi-z-1000'\n >\n {(incoming ||\n outgoing ||\n accepted ||\n showAlways ||\n activeAlertsCount > 0 ||\n view === 'player' ||\n view === 'recorder') && (\n <>\n <IslandDrag islandContainerRef={islandContainerRef}>\n {/* Add background call visibility logic */}\n <BackCall isVisible={view === 'keypad' || view === 'transfer' || transferring} />\n <IslandMotions>\n {/* The views logic */}\n <AlertGuard>\n {currentView === 'call' ? (\n <ViewsTransition forView='call'>\n <CallView />\n </ViewsTransition>\n ) : currentView === 'keypad' ? (\n <ViewsTransition forView='keypad'>\n <KeyboardView />\n </ViewsTransition>\n ) : currentView === 'transfer' ? (\n <ViewsTransition forView='transfer'>\n <TransferListView />\n </ViewsTransition>\n ) : currentView === 'player' ? (\n <ViewsTransition forView='player'>\n <AudioPlayerView />\n </ViewsTransition>\n ) : currentView === 'recorder' ? (\n <ViewsTransition forView='recorder'>\n <RecorderView />\n </ViewsTransition>\n ) : (\n <></>\n )}\n </AlertGuard>\n </IslandMotions>\n <Close />\n </IslandDrag>\n </>\n )}\n <div className='pi-hidden'>\n <audio loop={audioPlayerLoop} ref={audioPlayer}></audio>\n <audio muted={true} ref={localAudio}></audio>\n <audio autoPlay ref={remoteAudio}></audio>\n <video muted={true} autoPlay ref={localVideo}></video>\n <video autoPlay muted={true} ref={remoteVideo}></video>\n </div>\n </div>\n )\n}\n\nIsland.displayName = 'Island'\n\ninterface IslandProps {\n showAlways?: boolean\n}\n"],"names":["Island","_a","showAlways","_b","useSelector","state","currentCall","incoming","accepted","outgoing","transferring","view","island","activeAlertsCount","alerts","status","audioPlayerLoop","player","islandContainerRef","useRef","dispatch","useDispatch","audioPlayer","localAudio","remoteAudio","localVideo","remoteVideo","useIsomorphicLayoutEffect","updatePlayer","useEffect","setIslandView","_c","useState","currentView","setCurrentView","setTimeout","React","ref","className","createElement","Fragment","IslandDrag","BackCall","isVisible","IslandMotions","AlertGuard","ViewsTransition","forView","CallView","KeyboardView","TransferListView","AudioPlayerView","RecorderView","Close","loop","muted","autoPlay","displayName"],"mappings":"kmDAwBaA,EAA0B,SAACC,GAAE,IAAAC,EAAUD,EAAAC,WAE5CC,EAAiDC,eACrD,SAACC,GAAqB,OAAAA,EAAMC,eADtBC,EAAQJ,EAAAI,SAAEC,EAAQL,EAAAK,SAAEC,EAAQN,EAAAM,SAAEC,EAAYP,EAAAO,aAK1CC,EAASP,eAAY,SAACC,GAAqB,OAAAA,EAAMO,eAGjDC,EAAsBT,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMS,OAAOC,4BAGrEC,EAAoBZ,eAAY,SAACC,GAAqB,OAAAA,EAAMY,0BAG9DC,EAAqBC,SAAY,MAGjCC,EAAWC,EAAAA,cAEXC,EAAcH,SAAyB,MACvCI,EAAaJ,SAAyB,MACtCK,EAAcL,SAAyB,MACvCM,EAAaN,SAAyB,MACtCO,EAAcP,SAAyB,MAE7CQ,EAAAA,2BAA0B,WACxBP,EAASH,OAAOW,aAAa,CAC3BN,YAAaA,EACbC,WAAYA,EACZE,WAAYA,EACZC,YAAaA,EACbF,YAAaA,GAEhB,GAAE,IAIHK,EAAAA,WAAU,YAEJtB,GAAYE,IACdW,EAASR,OAAOkB,cAAc,OAElC,GAAG,CAACvB,EAAUE,IAER,IAAAsB,EAAgCC,EAAAA,SAAc,IAA7CC,EAAWF,EAAA,GAAEG,EAAcH,EAAA,GASlC,OANAF,EAAAA,WAAU,WACRM,YAAW,WACTD,EAAevB,EAChB,GAAE,IACL,GAAG,CAACA,IAGFyB,EAAAA,6BACEC,IAAKnB,EACLoB,UAAU,yMAER/B,GACAE,GACAD,GACAN,GACAW,EAAoB,GACX,WAATF,GACS,aAATA,IACAyB,EAAA,QAAAG,cAAAH,EAAA,QAAAI,SAAA,KACEJ,EAAAA,QAAAG,cAACE,EAAAA,WAAU,CAACvB,mBAAoBA,GAE9BkB,UAAAG,cAACG,EAAQ,QAAA,CAACC,UAAoB,WAAThC,GAA8B,aAATA,GAAuBD,IACjE0B,UAAAG,cAACK,EAAAA,aAAa,KAEZR,EAAAA,QAAAG,cAACM,aAAU,KACQ,SAAhBZ,EACCG,EAAC,QAAAG,cAAAO,EAAAA,QAAgB,CAAAC,QAAQ,QACvBX,EAAAA,QAAAG,cAACS,EAAAA,QAAW,OAEI,WAAhBf,EACFG,EAAAA,QAAAG,cAACO,EAAAA,QAAgB,CAAAC,QAAQ,UACvBX,EAAAA,QAAAG,cAACU,EAAAA,QAAe,OAEA,aAAhBhB,EACFG,EAAAA,QAAAG,cAACO,EAAAA,QAAgB,CAAAC,QAAQ,YACvBX,EAAAA,QAAAG,cAACW,EAAAA,iBAAmB,OAEJ,WAAhBjB,EACFG,EAAAA,QAAAG,cAACO,EAAAA,QAAgB,CAAAC,QAAQ,UACvBX,EAAAA,QAAAG,cAACY,EAAAA,WAAkB,OAEH,aAAhBlB,EACFG,EAAAA,QAAAG,cAACO,EAAAA,QAAgB,CAAAC,QAAQ,YACvBX,EAAAA,QAACG,cAAAa,eAAe,OAGlBhB,EAAAA,QAAAG,cAAAH,UAAAI,SAAA,QAINJ,EAAAA,QAAAG,cAACc,EAAAA,MAAK,QAIZjB,EAAAA,QAAKG,cAAA,MAAA,CAAAD,UAAU,aACbF,EAAA,QAAAG,cAAA,QAAA,CAAOe,KAAMtC,EAAiBqB,IAAKf,IACnCc,EAAA,QAAAG,cAAA,QAAA,CAAOgB,OAAO,EAAMlB,IAAKd,IACzBa,EAAA,QAAAG,cAAA,QAAA,CAAOiB,UAAQ,EAACnB,IAAKb,IACrBY,UAAOG,cAAA,QAAA,CAAAgB,OAAO,EAAMC,UAAS,EAAAnB,IAAKZ,IAClCW,EAAAA,QAAAG,cAAA,QAAA,CAAOiB,UAAQ,EAACD,OAAO,EAAMlB,IAAKX,KAI1C,EAEA1B,EAAOyD,YAAc"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js"),require("../../node_modules/mic-check/lib/index.js"),require("../../lib/webrtc/janus.js"),require("../../store/index.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../../node_modules/socket.io-client/build/esm/index.js"),require("../Island.js");var r=require("../Button.js");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),require("../../node_modules/framer-motion/dist/framer-motion.js");var i=t(e),a=Array.from(Array(9).keys()),n=["*","0","#"];exports.default=function(e){var t=e.keyCallback;return i.default.createElement("div",{className:"pi-grid pi-grid-cols-3 pi-auto-cols-max pi-gap-y-6 pi-justify-items-center pi-place-items-center pi-justify-center pi-px-3"},a.map((function(e){return i.default.createElement(r.Button,{key:e+1,onClick:function(){return t(e+1)},variant:"default",className:"pi-text-2xl",style:{transform:"scale(1.15)"}},e+1)})),n.map((function(e){return i.default.createElement(r.Button,{key:e+1,onClick:function(){return t(e)},variant:"default",className:"pi-text-2xl",style:{transform:"scale(1.15)"}},e)})))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js"),require("../../lib/webrtc/janus.js"),require("../../store/index.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../../node_modules/mic-check/lib/index.js"),require("../../node_modules/socket.io-client/build/esm/index.js"),require("../Island.js");var r=require("../Button.js");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),require("../../node_modules/framer-motion/dist/framer-motion.js");var i=t(e),a=Array.from(Array(9).keys()),n=["*","0","#"];exports.default=function(e){var t=e.keyCallback;return i.default.createElement("div",{className:"pi-grid pi-grid-cols-3 pi-auto-cols-max pi-gap-y-6 pi-justify-items-center pi-place-items-center pi-justify-center pi-px-3"},a.map((function(e){return i.default.createElement(r.Button,{key:e+1,onClick:function(){return t(e+1)},variant:"default",className:"pi-text-2xl",style:{transform:"scale(1.15)"}},e+1)})),n.map((function(e){return i.default.createElement(r.Button,{key:e+1,onClick:function(){return t(e)},variant:"default",className:"pi-text-2xl",style:{transform:"scale(1.15)"}},e)})))};
2
2
  //# sourceMappingURL=Actions.js.map
@@ -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"),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"}))};
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 a=require("../../lib/phone/call.js"),s=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("../SwitchInputView/DropdownContent.js"),m=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 f=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),g=require("../../node_modules/react-redux/es/hooks/useSelector.js");function h(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var v=h(t);exports.Actions=function(){var h=f.useDispatch(),j=g.useSelector((function(e){return{incoming:e.recorder.incoming,waiting:e.recorder.waiting,recording:e.recorder.recording,recorded:e.recorder.recorded,playing:e.recorder.playing}}),m.default),x=j.incoming,y=j.waiting,E=j.recording,_=j.recorded,q=j.playing;function w(){return e.__awaiter(this,void 0,void 0,(function(){var t;return e.__generator(this,(function(e){switch(e.label){case 0:return h.recorder.setRecording(!0),h.recorder.setWaiting(!0),[4,i.startAnnouncementRecording()];case 1:return(t=e.sent()).tempFilename&&h.recorder.setTempFilename(t.tempFilename),h.recorder.setStartTime("".concat(Date.now()/1e3)),l.eventDispatch("phone-island-recording-started",{}),[2]}}))}))}function b(){h.recorder.setWaiting(!0),a.hangupCurrentCall(),h.recorder.setRecorded(!0),l.eventDispatch("phone-island-recording-stopped",{})}function C(){h.player.startAudioPlayer((function(){h.recorder.setPlaying(!1),h.recorder.setPaused(!0)})),h.recorder.setPlaying(!0),l.eventDispatch("phone-island-recording-played",{})}function P(){h.player.pauseAudioPlayer(),h.recorder.setPlaying(!1),h.recorder.setPaused(!0),l.eventDispatch("phone-island-recording-paused",{})}function T(){h.recorder.resetRecorded(),l.eventDispatch("phone-island-recording-deleted",{})}function A(){d.dispatchRecordingSave(),h.island.setIslandView(null)}s.useEventListener("phone-island-recording-start",(function(e){w()})),s.useEventListener("phone-island-recording-stop",(function(e){b()})),s.useEventListener("phone-island-recording-play",(function(e){C()})),s.useEventListener("phone-island-recording-pause",(function(e){P()})),s.useEventListener("phone-island-recording-delete",(function(e){T()})),s.useEventListener("phone-island-recording-save",(function(e){A()})),t.useEffect((function(){E||h.recorder.setWaiting(!1)}),[E]),t.useEffect((function(){x&&(a.answerIncomingCall(),h.recorder.setIncoming(!1),h.recorder.setWaiting(!1))}),[x]);var F=u.useTranslation().t;return v.default.createElement("div",{className:"pi-flex pi-items-center pi-justify-center pi-pt-9 pi-gap-6",style:_?{paddingTop:"2rem"}:{}},E&&v.default.createElement(r.Button,{onClick:b,variant:"default",style:{transform:"scale(1.15)"},"data-tooltip-id":"tooltip","data-tooltip-content":F("Tooltip.Stop")},y?v.default.createElement(o.FontAwesomeIcon,{icon:n.faCircleNotch,className:"fa-spin pi-loader",size:"lg"}):v.default.createElement(o.FontAwesomeIcon,{icon:n.faStop,size:"xl"})),_&&!E&&v.default.createElement(v.default.Fragment,null,v.default.createElement(r.Button,{onClick:T,variant:"default","data-tooltip-id":"tooltip","data-tooltip-content":F("Tooltip.Delete")},v.default.createElement(o.FontAwesomeIcon,{icon:n.faTrash,size:"xl"})),q?v.default.createElement(r.Button,{onClick:P,variant:"default",style:{transform:"scale(1.15)"},"data-tooltip-id":"tooltip","data-tooltip-content":F("Tooltip.Pause")},v.default.createElement(o.FontAwesomeIcon,{icon:n.faPause,size:"xl"})):v.default.createElement(r.Button,{onClick:C,variant:"default",style:{transform:"scale(1.15)"},"data-tooltip-id":"tooltip","data-tooltip-content":F("Tooltip.Play")},v.default.createElement(o.FontAwesomeIcon,{icon:n.faPlay,size:"xl"})),v.default.createElement(r.Button,{onClick:A,variant:"green","data-tooltip-id":"tooltip","data-tooltip-content":F("Tooltip.Confirm")},v.default.createElement(o.FontAwesomeIcon,{icon:n.faCheck,size:"xl"}))),!E&&!_&&v.default.createElement(r.Button,{onClick:w,variant:"red",style:{transform:"scale(1.15)"},"data-tooltip-id":"tooltip","data-tooltip-content":F("Tooltip.Start recording"),className:"pi-flex pi-justify-center pi-ml-[4.7rem]"},y?v.default.createElement(o.FontAwesomeIcon,{icon:n.faCircleNotch,className:"fa-spin pi-loader",size:"lg"}):v.default.createElement(o.FontAwesomeIcon,{icon:n.faRecordVinyl,size:"xl"})),!E&&!_&&v.default.createElement("div",{className:"pi-flex-none pi-justify-end pi-ml-11 pi-w-2"},v.default.createElement(p.default,{"data-stop-propagation":!0})),v.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'\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
+ {"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'\nimport DropdownContent from '../SwitchInputView/DropdownContent'\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-items-center pi-justify-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 className='pi-flex pi-justify-center pi-ml-[4.7rem]'\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 {!recording && !recorded && (\n <div\n className='pi-flex-none pi-justify-end pi-ml-11 pi-w-2'\n >\n <DropdownContent data-stop-propagation={true}></DropdownContent>\n </div>\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","DropdownContent","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"),r=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("./Actions.js"),u=require("./BarsGroup.js"),i=require("../AudioPlayerView/Progress.js"),n=require("../../lib/phone/audio.js"),a=require("../../node_modules/webm-duration-fix/lib/index.js"),l=require("./Timer.js"),o=require("../../node_modules/react-redux/es/hooks/useSelector.js"),c=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),s=require("../../node_modules/react-redux/es/utils/shallowEqual.js");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var f=d(r);exports.RecorderView=function(){var d=o.useSelector((function(e){return e.island})).isOpen,m=r.useRef(null),p=r.useRef(null),v=r.useRef([]),b=c.useDispatch(),x=o.useSelector((function(e){return e.webrtc.localAudioStream})),w=o.useSelector((function(e){return{recording:e.recorder.recording,recorded:e.recorder.recorded}}),s.default),h=w.recording,j=w.recorded;function E(e){v.current.push(e.data)}function q(){return e.__awaiter(this,void 0,void 0,(function(){var r,t;return e.__generator(this,(function(e){switch(e.label){case 0:return[4,a.default(new Blob(v.current,{type:"audio/webm"}))];case 1:return r=e.sent(),t=URL.createObjectURL(r),n.updateAudioPlayerSource(t),[2]}}))}))}return r.useEffect((function(){(null==x?void 0:x.active)&&h&&(p.current=new MediaRecorder(x,{mimeType:"audio/webm"}),p.current.ondataavailable=E,p.current.onstop=q,p.current.start())}),[null==x?void 0:x.active,h]),r.useEffect((function(){var e;j&&(v.current=[],null===(e=p.current)||void 0===e||e.stop())}),[j]),r.useEffect((function(){return b.recorder.setVisibleContainerRef(m),function(){b.recorder.reset()}}),[]),f.default.createElement(f.default.Fragment,null,d?f.default.createElement(f.default.Fragment,null," ",f.default.createElement("div",{className:"pi-flex pi-w-full pi-justify-center pi-items-center pi-pt-4 pi-pb-9"},f.default.createElement("div",{className:"pi-font-medium pi-text-4xl pi-w-fit pi-h-fit pi-text-white"},f.default.createElement(l.default,null))),f.default.createElement("div",{className:"pi-relative pi-w-full ".concat(j?"":"pi-h-8"," pi-overflow-x-hidden pi-flex"),ref:m},j?f.default.createElement(i.Progress,null):Array.from({length:2}).map((function(e,r){return f.default.createElement(u.BarsGroup,{key:r,index:r,startAnimation:h,audioStream:x})}))),f.default.createElement(t.Actions,null)):f.default.createElement("div",{className:"pi-font-medium pi-text-base"},"Recorder"))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),r=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("./Actions.js"),i=require("./BarsGroup.js"),n=require("../AudioPlayerView/Progress.js"),u=require("../../lib/phone/audio.js"),s=require("../../node_modules/webm-duration-fix/lib/index.js"),a=require("./Timer.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/defineProperty.js"),require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/typeof.js"),require("../../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../../node_modules/react-i18next/dist/es/context.js");var o=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var l=require("../../node_modules/react-redux/es/hooks/useSelector.js"),d=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),c=require("../../node_modules/react-redux/es/utils/shallowEqual.js");function f(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var m=f(r);exports.RecorderView=function(){var f=l.useSelector((function(e){return e.island})).isOpen,p=r.useRef(null),x=r.useRef(null),b=r.useRef([]),h=d.useDispatch(),v=l.useSelector((function(e){return e.webrtc.localAudioStream})),j=l.useSelector((function(e){return{recording:e.recorder.recording,recorded:e.recorder.recorded,waiting:e.recorder.waiting}}),c.default),w=j.recording,_=j.recorded,q=j.waiting;function g(e){b.current.push(e.data)}function E(){return e.__awaiter(this,void 0,void 0,(function(){var r,t;return e.__generator(this,(function(e){switch(e.label){case 0:return[4,s.default(new Blob(b.current,{type:"audio/webm"}))];case 1:return r=e.sent(),t=URL.createObjectURL(r),u.updateAudioPlayerSource(t),[2]}}))}))}r.useEffect((function(){(null==v?void 0:v.active)&&w&&(x.current=new MediaRecorder(v,{mimeType:"audio/webm"}),x.current.ondataavailable=g,x.current.onstop=E,x.current.start())}),[null==v?void 0:v.active,w]),r.useEffect((function(){var e;_&&(b.current=[],null===(e=x.current)||void 0===e||e.stop())}),[_]),r.useEffect((function(){return h.recorder.setVisibleContainerRef(p),function(){h.recorder.reset()}}),[]);var y=o.useTranslation().t;return m.default.createElement(m.default.Fragment,null,f?m.default.createElement(m.default.Fragment,null," ",m.default.createElement("div",{className:"pi-flex pi-w-full pi-justify-center pi-items-center pi-pt-4 pi-pb-9"},m.default.createElement("div",{className:"pi-font-medium pi-text-4xl pi-w-fit pi-h-fit pi-text-white"},m.default.createElement(a.default,null))),m.default.createElement("div",{className:"pi-relative pi-w-full pi-justify-center ".concat(_?"":"pi-h-8"," pi-overflow-x-hidden pi-flex"),ref:p},_?m.default.createElement(n.Progress,null):w&&!q?Array.from({length:2}).map((function(e,r){return m.default.createElement(i.BarsGroup,{key:r,index:r,startAnimation:w,audioStream:v})})):w&&q?m.default.createElement("div",{className:"pi-sans pi-text-sm pi-w-fit pi-h-fit pi-text-white"},y("Common.Start recording message after")):m.default.createElement("div",{className:"pi-sans pi-text-sm pi-w-fit pi-h-fit pi-text-white"},y("Common.Start recording message before"))),m.default.createElement(t.Actions,null)):m.default.createElement("div",{className:"pi-font-medium pi-text-base"},"Recorder"))};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/RecorderView/index.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useState, useRef, useEffect, useCallback, memo } from 'react'\nimport { useDispatch, useSelector, shallowEqual } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { Actions } from './Actions'\nimport { BarsGroup } from './BarsGroup'\nimport Progress from '../AudioPlayerView/Progress'\nimport { updateAudioPlayerSource } from '../../lib/phone/audio'\nimport fixWebmDuration from 'webm-duration-fix'\nimport Timer from './Timer'\n\n// The number of groups to be created\n// ...the minimun to have this effect is 2\nconst BAR_GROUPS_COUNT = 2\n\n// The mime type of the recorded audio\nconst MIME_TYPE = 'audio/webm'\n\nexport const RecorderView: FC<RecorderViewProps> = () => {\n const { isOpen } = useSelector((state: RootState) => state.island)\n const visibleContainerRef = useRef<HTMLDivElement>(null)\n const recorderRef = useRef<MediaRecorder | null>(null)\n const mediaChunks = useRef<BlobPart[]>([])\n\n // Initialize state dispatch\n const dispatch = useDispatch<Dispatch>()\n\n // Retrieve the local audio stream from webrtc state\n const localAudioStream = useSelector((state: RootState) => state.webrtc.localAudioStream)\n\n // Retrieve the local audio stream from recorder state\n const { recording, recorded } = useSelector(\n (state: RootState) => ({\n recording: state.recorder.recording,\n recorded: state.recorder.recorded,\n }),\n shallowEqual,\n )\n\n function handleRecordedMedia(event: BlobEvent) {\n mediaChunks.current.push(event.data)\n }\n\n async function handleRecordingStopped() {\n const blob = await fixWebmDuration(new Blob(mediaChunks.current, { type: MIME_TYPE }))\n const audioURL = URL.createObjectURL(blob)\n // The next function is async\n updateAudioPlayerSource(audioURL)\n }\n\n // Handle and manage audio recording start\n useEffect(() => {\n // @ts-ignore\n if (localAudioStream?.active && recording) {\n recorderRef.current = new MediaRecorder(localAudioStream, {\n mimeType: MIME_TYPE,\n })\n recorderRef.current.ondataavailable = handleRecordedMedia\n recorderRef.current.onstop = handleRecordingStopped\n // Start the media recording\n recorderRef.current.start()\n }\n // @ts-ignore\n }, [localAudioStream?.active, recording])\n\n // Handle and manage audio recorded\n useEffect(() => {\n if (recorded) {\n mediaChunks.current = []\n recorderRef.current?.stop()\n }\n }, [recorded])\n\n // Handle view close and reset state\n useEffect(() => {\n // Set visible container reference to recorder state\n dispatch.recorder.setVisibleContainerRef(visibleContainerRef)\n\n return () => {\n dispatch.recorder.reset()\n }\n }, [])\n\n return (\n <>\n {isOpen ? (\n <>\n {' '}\n <div className='pi-flex pi-w-full pi-justify-center pi-items-center pi-pt-4 pi-pb-9'>\n <div className='pi-font-medium pi-text-4xl pi-w-fit pi-h-fit pi-text-white'>\n <Timer />\n </div>\n </div>\n {/* Bars animation section */}\n <div\n className={`pi-relative pi-w-full ${\n !recorded ? 'pi-h-8' : ''\n } pi-overflow-x-hidden pi-flex`}\n ref={visibleContainerRef}\n >\n {recorded ? (\n <Progress />\n ) : (\n // Create a custom numbers of bars groups\n Array.from({ length: BAR_GROUPS_COUNT }).map((_, i) => (\n <BarsGroup\n key={i}\n index={i}\n startAnimation={recording}\n audioStream={localAudioStream}\n />\n ))\n )}\n </div>\n {/* Actions section */}\n <Actions />\n </>\n ) : (\n <div className='pi-font-medium pi-text-base'>Recorder</div>\n )}\n </>\n )\n}\n\nexport interface RecorderViewProps {}\n"],"names":["isOpen","useSelector","state","island","visibleContainerRef","useRef","recorderRef","mediaChunks","dispatch","useDispatch","localAudioStream","webrtc","_a","recording","recorder","recorded","shallowEqual","handleRecordedMedia","event","current","push","data","handleRecordingStopped","fixWebmDuration","Blob","type","blob","sent","audioURL","URL","createObjectURL","updateAudioPlayerSource","useEffect","active","MediaRecorder","mimeType","ondataavailable","onstop","start","stop","setVisibleContainerRef","reset","React","createElement","Fragment","className","Timer","concat","ref","Progress","Array","from","length","map","_","i","BarsGroup","key","index","startAnimation","audioStream","Actions"],"mappings":"4tBAoBmD,WACzC,IAAAA,EAAWC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,iBACrDC,EAAsBC,SAAuB,MAC7CC,EAAcD,SAA6B,MAC3CE,EAAcF,SAAmB,IAGjCG,EAAWC,EAAAA,cAGXC,EAAmBT,eAAY,SAACC,GAAqB,OAAAA,EAAMS,OAAOD,gBAAb,IAGrDE,EAA0BX,EAAAA,aAC9B,SAACC,GAAqB,MAAC,CACrBW,UAAWX,EAAMY,SAASD,UAC1BE,SAAUb,EAAMY,SAASC,SACzB,GACFC,EAAY,SALNH,EAASD,EAAAC,UAAEE,EAAQH,EAAAG,SAQ3B,SAASE,EAAoBC,GAC3BX,EAAYY,QAAQC,KAAKF,EAAMG,KAChC,CAED,SAAeC,qHACA,KAAA,EAAA,MAAA,CAAA,EAAMC,EAAAA,QAAgB,IAAIC,KAAKjB,EAAYY,QAAS,CAAEM,KA5BrD,+BA4BRC,EAAOd,EAAyEe,OAChFC,EAAWC,IAAIC,gBAAgBJ,GAErCK,EAAuBA,wBAACH,aACzB,CAmCD,OAhCAI,EAAAA,WAAU,YAEJtB,aAAgB,EAAhBA,EAAkBuB,SAAUpB,IAC9BP,EAAYa,QAAU,IAAIe,cAAcxB,EAAkB,CACxDyB,SAvCU,eAyCZ7B,EAAYa,QAAQiB,gBAAkBnB,EACtCX,EAAYa,QAAQkB,OAASf,EAE7BhB,EAAYa,QAAQmB,QAGvB,GAAE,CAAC5B,aAAgB,EAAhBA,EAAkBuB,OAAQpB,IAG9BmB,EAAAA,WAAU,iBACJjB,IACFR,EAAYY,QAAU,GACD,QAArBP,EAAAN,EAAYa,eAAS,IAAAP,GAAAA,EAAA2B,OAEzB,GAAG,CAACxB,IAGJiB,EAAAA,WAAU,WAIR,OAFAxB,EAASM,SAAS0B,uBAAuBpC,GAElC,WACLI,EAASM,SAAS2B,OACpB,CACD,GAAE,IAGDC,UACGC,cAAAD,EAAA,QAAAE,SAAA,KAAA5C,EACC0C,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACG,IACDF,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,uEACbH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,8DACbH,EAAAA,QAACC,cAAAG,UAAQ,QAIbJ,UAAAC,cAAA,MAAA,CACEE,UAAW,yBACTE,OAAChC,EAAsB,GAAX,SACiB,iCAC/BiC,IAAK5C,GAEJW,EACC2B,UAAAC,cAACM,EAAQA,SAAA,MAGTC,MAAMC,KAAK,CAAEC,OA3FF,IA2F8BC,KAAI,SAACC,EAAGC,GAAM,OACrDb,EAAC,QAAAC,cAAAa,aACCC,IAAKF,EACLG,MAAOH,EACPI,eAAgB9C,EAChB+C,YAAalD,QAMrBgC,EAAAA,QAAAC,cAACkB,EAAAA,QAAU,OAGbnB,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,+BAA6B,YAIpD"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/RecorderView/index.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useState, useRef, useEffect, useCallback, memo } from 'react'\nimport { useDispatch, useSelector, shallowEqual } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { Actions } from './Actions'\nimport { BarsGroup } from './BarsGroup'\nimport Progress from '../AudioPlayerView/Progress'\nimport { updateAudioPlayerSource } from '../../lib/phone/audio'\nimport fixWebmDuration from 'webm-duration-fix'\nimport Timer from './Timer'\nimport { useTranslation } from 'react-i18next'\n\n// The number of groups to be created\n// ...the minimun to have this effect is 2\nconst BAR_GROUPS_COUNT = 2\n\n// The mime type of the recorded audio\nconst MIME_TYPE = 'audio/webm'\n\nexport const RecorderView: FC<RecorderViewProps> = () => {\n const { isOpen } = useSelector((state: RootState) => state.island)\n const visibleContainerRef = useRef<HTMLDivElement>(null)\n const recorderRef = useRef<MediaRecorder | null>(null)\n const mediaChunks = useRef<BlobPart[]>([])\n\n // Initialize state dispatch\n const dispatch = useDispatch<Dispatch>()\n\n // Retrieve the local audio stream from webrtc state\n const localAudioStream = useSelector((state: RootState) => state.webrtc.localAudioStream)\n\n // Retrieve the local audio stream from recorder state\n const { recording, recorded, waiting } = useSelector(\n (state: RootState) => ({\n recording: state.recorder.recording,\n recorded: state.recorder.recorded,\n waiting: state.recorder.waiting,\n }),\n shallowEqual,\n )\n\n function handleRecordedMedia(event: BlobEvent) {\n mediaChunks.current.push(event.data)\n }\n\n async function handleRecordingStopped() {\n const blob = await fixWebmDuration(new Blob(mediaChunks.current, { type: MIME_TYPE }))\n const audioURL = URL.createObjectURL(blob)\n // The next function is async\n updateAudioPlayerSource(audioURL)\n }\n\n // Handle and manage audio recording start\n useEffect(() => {\n // @ts-ignore\n if (localAudioStream?.active && recording) {\n recorderRef.current = new MediaRecorder(localAudioStream, {\n mimeType: MIME_TYPE,\n })\n recorderRef.current.ondataavailable = handleRecordedMedia\n recorderRef.current.onstop = handleRecordingStopped\n // Start the media recording\n recorderRef.current.start()\n }\n // @ts-ignore\n }, [localAudioStream?.active, recording])\n\n // Handle and manage audio recorded\n useEffect(() => {\n if (recorded) {\n mediaChunks.current = []\n recorderRef.current?.stop()\n }\n }, [recorded])\n\n // Handle view close and reset state\n useEffect(() => {\n // Set visible container reference to recorder state\n dispatch.recorder.setVisibleContainerRef(visibleContainerRef)\n\n return () => {\n dispatch.recorder.reset()\n }\n }, [])\n\n const { t } = useTranslation()\n\n return (\n <>\n {isOpen ? (\n <>\n {' '}\n <div className='pi-flex pi-w-full pi-justify-center pi-items-center pi-pt-4 pi-pb-9'>\n <div className='pi-font-medium pi-text-4xl pi-w-fit pi-h-fit pi-text-white'>\n <Timer />\n </div>\n </div>\n {/* Bars animation section */}\n <div\n className={`pi-relative pi-w-full pi-justify-center ${\n !recorded ? 'pi-h-8' : ''\n } pi-overflow-x-hidden pi-flex`}\n ref={visibleContainerRef}\n >\n {recorded ? (\n <Progress />\n ) : recording && !waiting ? (\n // Create a custom numbers of bars groups\n Array.from({ length: BAR_GROUPS_COUNT }).map((_, i) => (\n <BarsGroup\n key={i}\n index={i}\n startAnimation={recording}\n audioStream={localAudioStream}\n />\n ))\n ) : recording && waiting ? (\n <div className='pi-sans pi-text-sm pi-w-fit pi-h-fit pi-text-white'>\n {t('Common.Start recording message after')}\n </div>\n ) : (\n <div className='pi-sans pi-text-sm pi-w-fit pi-h-fit pi-text-white'>\n {t('Common.Start recording message before')}\n </div>\n )}\n </div>\n {/* Actions section */}\n <Actions />\n </>\n ) : (\n <div className='pi-font-medium pi-text-base'>Recorder</div>\n )}\n </>\n )\n}\n\nexport interface RecorderViewProps {}\n"],"names":["isOpen","useSelector","state","island","visibleContainerRef","useRef","recorderRef","mediaChunks","dispatch","useDispatch","localAudioStream","webrtc","_a","recording","recorder","recorded","waiting","shallowEqual","handleRecordedMedia","event","current","push","data","handleRecordingStopped","fixWebmDuration","Blob","type","blob","sent","audioURL","URL","createObjectURL","updateAudioPlayerSource","useEffect","active","MediaRecorder","mimeType","ondataavailable","onstop","start","stop","setVisibleContainerRef","reset","t","useTranslation","React","createElement","Fragment","className","Timer","concat","ref","Progress","Array","from","length","map","_","i","BarsGroup","key","index","startAnimation","audioStream","Actions"],"mappings":"m0CAqBmD,WACzC,IAAAA,EAAWC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,iBACrDC,EAAsBC,SAAuB,MAC7CC,EAAcD,SAA6B,MAC3CE,EAAcF,SAAmB,IAGjCG,EAAWC,EAAAA,cAGXC,EAAmBT,eAAY,SAACC,GAAqB,OAAAA,EAAMS,OAAOD,gBAAb,IAGrDE,EAAmCX,EAAAA,aACvC,SAACC,GAAqB,MAAC,CACrBW,UAAWX,EAAMY,SAASD,UAC1BE,SAAUb,EAAMY,SAASC,SACzBC,QAASd,EAAMY,SAASE,WAE1BC,EAAAA,SANMJ,EAASD,EAAAC,UAAEE,EAAQH,EAAAG,SAAEC,YAS7B,SAASE,EAAoBC,GAC3BZ,EAAYa,QAAQC,KAAKF,EAAMG,KAChC,CAED,SAAeC,qHACA,KAAA,EAAA,MAAA,CAAA,EAAMC,EAAAA,QAAgB,IAAIC,KAAKlB,EAAYa,QAAS,CAAEM,KA7BrD,+BA6BRC,EAAOf,EAAyEgB,OAChFC,EAAWC,IAAIC,gBAAgBJ,GAErCK,EAAuBA,wBAACH,aACzB,CAGDI,EAAAA,WAAU,YAEJvB,aAAgB,EAAhBA,EAAkBwB,SAAUrB,IAC9BP,EAAYc,QAAU,IAAIe,cAAczB,EAAkB,CACxD0B,SAxCU,eA0CZ9B,EAAYc,QAAQiB,gBAAkBnB,EACtCZ,EAAYc,QAAQkB,OAASf,EAE7BjB,EAAYc,QAAQmB,QAGvB,GAAE,CAAC7B,aAAgB,EAAhBA,EAAkBwB,OAAQrB,IAG9BoB,EAAAA,WAAU,iBACJlB,IACFR,EAAYa,QAAU,GACD,QAArBR,EAAAN,EAAYc,eAAS,IAAAR,GAAAA,EAAA4B,OAEzB,GAAG,CAACzB,IAGJkB,EAAAA,WAAU,WAIR,OAFAzB,EAASM,SAAS2B,uBAAuBrC,GAElC,WACLI,EAASM,SAAS4B,OACpB,CACD,GAAE,IAEK,IAAAC,EAAMC,qBAEd,OACEC,UACGC,cAAAD,EAAA,QAAAE,SAAA,KAAA/C,EACC6C,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACG,IACDF,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,uEACbH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,8DACbH,EAAAA,QAACC,cAAAG,UAAQ,QAIbJ,UAAAC,cAAA,MAAA,CACEE,UAAW,2CAAAE,OACRnC,EAAsB,GAAX,SACiB,iCAC/BoC,IAAK/C,GAEJW,EACC8B,EAAA,QAAAC,cAACM,EAAAA,SAAW,MACVvC,IAAcG,EAEhBqC,MAAMC,KAAK,CAAEC,OA9FF,IA8F8BC,KAAI,SAACC,EAAGC,GAAM,OACrDb,EAAAA,QAAAC,cAACa,EAASA,UACR,CAAAC,IAAKF,EACLG,MAAOH,EACPI,eAAgBjD,EAChBkD,YAAarD,GALsC,IAQrDG,GAAaG,EACf6B,UAAAC,cAAA,MAAA,CAAKE,UAAU,sDACZL,EAAE,yCAGLE,EAAK,QAAAC,cAAA,MAAA,CAAAE,UAAU,sDACZL,EAAE,2CAKTE,EAAAA,QAAAC,cAACkB,EAAAA,QAAU,OAGbnB,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,+BAA6B,YAIpD"}
@@ -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 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)};
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("../lib/webrtc/janus.js");var s=require("../store/index.js");require("../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../node_modules/mic-check/lib/index.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,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("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),i=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),a=require("../../node_modules/@headlessui/react/dist/components/menu/menu.js"),n=require("../../node_modules/@headlessui/react/dist/components/transitions/transition.js"),r=require("../../node_modules/i18next/dist/esm/i18next.js"),o=require("../../lib/user/default_device.js"),l=require("../../node_modules/react-redux/es/hooks/useSelector.js");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=c(e);exports.default=function(c){c.username,c.status;var u=l.useSelector((function(e){return e.webrtc})).sipcall,d=l.useSelector((function(e){return e.player.remoteAudio})),p=e.useState(null),m=p[0],f=p[1],v=e.useState(null),g=v[0],b=v[1],y=e.useState([]),x=y[0],h=y[1];return e.useEffect((function(){var e=function(){navigator.mediaDevices.enumerateDevices().then((function(e){h(e)})).catch((function(e){console.error("error",e)}))};return e(),navigator.mediaDevices.addEventListener("devicechange",e),function(){navigator.mediaDevices.removeEventListener("devicechange",e)}}),[g,m]),s.default.createElement(s.default.Fragment,null,o.isWebRTC()?s.default.createElement(a.Menu,{as:"div",className:"relative inline-block text-left","data-stop-propagation":!0},s.default.createElement(a.Menu.Button,{className:"pi-bg-transparent enabled:hover:pi-bg-gray-500 focus:pi-ring-gray-500 pi-flex pi-font-sans pi-font-light pi-content-center pi-items-center pi-justify-center pi-tracking-wide pi-duration-200 pi-transform pi-outline-none focus:pi-ring-2 focus:pi-z-20 focus:pi-ring-offset-2 disabled:pi-opacity-75 pi-text-white pi-border pi-border-transparent focus:pi-ring-offset-black pi-rounded-full pi-text-sm pi-leading-4 pi-h-12 pi-w-12 pi-col-start-auto pi-transition-color pi-shrink-0","data-stop-propagation":!0},s.default.createElement(t.FontAwesomeIcon,{size:"xl",icon:i.faEllipsis,className:"pi-text-gray-100","data-stop-propagation":!0})),s.default.createElement(n.Transition,{as:e.Fragment,enter:"transition ease-out duration-100",enterFrom:"transform opacity-0 scale-95",enterTo:"transform opacity-100 scale-100",leave:"transition ease-in duration-75",leaveFrom:"transform opacity-100 scale-100",leaveTo:"transform opacity-0 scale-95"},s.default.createElement(a.Menu.Items,{className:"pi-max-h-[13.125rem] pi-z-50 pi-absolute pi-top-0 pi-right-[4.5rem] pi-mt-[-9.5rem] pi-w-56 pi-origin-top-right pi-rounded-md pi-shadow-lg pi-ring-1 pi-bg-black pi-bg-opacity-[0.99] pi-ring-black pi-ring-opacity-5 pi-focus:outline-none pi-cursor-auto pi-border-gray-600 pi-border pi-py-2 pi-overflow-y-auto pi-scrollbar-thin pi-scrollbar-thumb-gray-400 pi-dark:scrollbar-thumb-gray-400 pi-scrollbar-thumb-rounded-full pi-scrollbar-thumb-opacity-50 pi-scrollbar-track-gray-900 pi-dark:scrollbar-track-gray-900 pi-scrollbar-track-rounded-full pi-scrollbar-track-opacity-25","data-stop-propagation":!0},s.default.createElement("div",{className:"","data-stop-propagation":!0},s.default.createElement("div",{className:"pi-font-semibold pi-text-gray-50 pi-py-1 pi-px-4"},r.t("DropdownContent.Microphones")),x.filter((function(e){return"audioinput"===(null==e?void 0:e.kind)})).map((function(e,n){return s.default.createElement(a.Menu.Item,{key:n},(function(a){var r=a.active;return s.default.createElement("div",{className:"pi-flex pi-py-2 pi-px-2 ".concat(r?"pi-bg-gray-700":""),onClick:function(){return t=e.deviceId,f(t),void(null==u||u.replaceTracks({tracks:[{type:"audio",mid:"0",capture:{deviceId:{exact:t}}}],error:function(e){console.log("Audio input device switch error:",e)}}));var t},"data-stop-propagation":!0},m===(null==e?void 0:e.deviceId)&&s.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-400 pi-mr-2"}),!m&&"default"===(null==e?void 0:e.deviceId)&&s.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-400 pi-mr-2"}),s.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faMicrophone,className:"".concat(null!==m&&""!==m&&m!==(null==e?void 0:e.deviceId)?"pi-ml-6":""!==m&&null!==m&&m===(null==e?void 0:e.deviceId)?"":null===m&&"default"!==(null==e?void 0:e.deviceId)?"pi-ml-6":""," pi-text-gray-100 pi-mr-1")}),s.default.createElement("div",{className:"pi-text-gray-50"},(null==e?void 0:e.label)||"Device ".concat(n+1)))}))})),s.default.createElement("div",{className:"pi-relative pi-py-2"},s.default.createElement("div",{className:"pi-absolute pi-inset-0 pi-flex pi-items-center","aria-hidden":"true"},s.default.createElement("div",{className:"pi-w-full pi-border-t pi-border-gray-600"}))),s.default.createElement("div",{className:"pi-font-semibold pi-text-gray-50 pi-py-1 pi-px-4","data-stop-propagation":!0},r.t("DropdownContent.Speakers")),x.filter((function(e){return"audiooutput"===(null==e?void 0:e.kind)})).map((function(e,n){return s.default.createElement(a.Menu.Item,{key:n},(function(a){var r=a.active;return s.default.createElement("div",{className:"pi-flex pi-py-2 pi-px-2 ".concat(r?"pi-bg-gray-700":""),onClick:function(){return t=null==e?void 0:e.deviceId,b(t),void(null==d||d.current.setSinkId(t).then((function(){})).catch((function(e){console.log("Audio output device switch error:",e)})));var t},"data-stop-propagation":!0},g===(null==e?void 0:e.deviceId)&&s.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-400 pi-mr-2"}),!g&&"default"===(null==e?void 0:e.deviceId)&&s.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-400 pi-mr-2"}),s.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faVolumeHigh,className:"".concat(null!==g&&""!==g&&g!==(null==e?void 0:e.deviceId)?"pi-ml-6":""!==g&&null!==g&&g===(null==e?void 0:e.deviceId)?"":null===g&&"default"!==(null==e?void 0:e.deviceId)?"pi-ml-6":""," pi-text-gray-100 pi-mr-1")}),s.default.createElement("div",{className:"pi-text-gray-50"},(null==e?void 0:e.label)||"Device ".concat(n+1)))}))})))))):s.default.createElement("div",null))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),i=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),n=require("../../node_modules/@headlessui/react/dist/components/menu/menu.js"),a=require("../../node_modules/@headlessui/react/dist/components/transitions/transition.js"),o=require("../../node_modules/i18next/dist/esm/i18next.js"),r=require("../../lib/user/default_device.js"),l=require("../../utils/customHooks/useEventListener.js"),c=require("../../utils/genericFunctions/eventDispatch.js"),s=require("../../utils/genericFunctions/localStorage.js"),u=require("../../node_modules/react-redux/es/hooks/useSelector.js");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var p=d(e);exports.default=function(d){d.username,d.status;var m=u.useSelector((function(e){return e.webrtc})).sipcall,f=u.useSelector((function(e){return e.player.remoteAudio})),v=e.useState(s.getJSONItem("phone-island-audio-input-device").deviceId||null),g=v[0],h=v[1],b=e.useState(s.getJSONItem("phone-island-audio-output-device").deviceId||null),y=b[0],I=b[1],x=function(e){h(e),m.webrtcStuff.myStream?null==m||m.replaceTracks({tracks:[{type:"audio",mid:"0",capture:{deviceId:{exact:e}}}],success:function(){console.info("Audio input device switch success!"),s.setJSONItem("phone-island-audio-input-device",{deviceId:e}),c.eventDispatch("phone-island-call-audio-input-switched",{})},error:function(e){console.error("Audio input device switch error:",e)}}):(s.setJSONItem("phone-island-audio-input-device",{deviceId:e}),c.eventDispatch("phone-island-call-audio-input-switched",{}))};l.useEventListener("phone-island-call-audio-input-switch",(function(e){x(e.deviceId)}));var E=function(e){I(e),null==f||f.current.setSinkId(e).then((function(){console.info("Audio output device switch success!"),s.setJSONItem("phone-island-audio-output-device",{deviceId:e}),c.eventDispatch("phone-island-call-audio-output-switched",{})})).catch((function(e){console.error("Audio output device switch error:",e)}))};l.useEventListener("phone-island-call-audio-output-switch",(function(e){E(e.deviceId)}));var w=e.useState([]),k=w[0],N=w[1];return e.useEffect((function(){var e=function(){navigator.mediaDevices.enumerateDevices().then((function(e){N(e)})).catch((function(e){console.error("error",e)}))};return e(),navigator.mediaDevices.addEventListener("devicechange",e),function(){navigator.mediaDevices.removeEventListener("devicechange",e)}}),[y,g]),p.default.createElement(p.default.Fragment,null,r.isWebRTC()?p.default.createElement(n.Menu,{as:"div",className:"relative inline-block text-left","data-stop-propagation":!0},p.default.createElement(n.Menu.Button,{className:"pi-bg-transparent enabled:hover:pi-bg-gray-500 focus:pi-ring-gray-500 pi-flex pi-font-sans pi-font-light pi-content-center pi-items-center pi-justify-center pi-tracking-wide pi-duration-200 pi-transform pi-outline-none focus:pi-ring-2 focus:pi-z-20 focus:pi-ring-offset-2 disabled:pi-opacity-75 pi-text-white pi-border pi-border-transparent focus:pi-ring-offset-black pi-rounded-full pi-text-sm pi-leading-4 pi-h-12 pi-w-12 pi-col-start-auto pi-transition-color pi-shrink-0","data-stop-propagation":!0},p.default.createElement(t.FontAwesomeIcon,{size:"xl",icon:i.faEllipsis,className:"pi-text-gray-100","data-stop-propagation":!0})),p.default.createElement(a.Transition,{as:e.Fragment,enter:"transition ease-out duration-100",enterFrom:"transform opacity-0 scale-95",enterTo:"transform opacity-100 scale-100",leave:"transition ease-in duration-75",leaveFrom:"transform opacity-100 scale-100",leaveTo:"transform opacity-0 scale-95"},p.default.createElement(n.Menu.Items,{className:"pi-max-h-[13.125rem] pi-z-50 pi-absolute pi-top-0 pi-right-[4.5rem] pi-mt-[-9.5rem] pi-w-56 pi-origin-top-right pi-rounded-md pi-shadow-lg pi-ring-1 pi-bg-black pi-bg-opacity-[0.99] pi-ring-black pi-ring-opacity-5 pi-focus:outline-none pi-cursor-auto pi-border-gray-600 pi-border pi-py-2 pi-overflow-y-auto pi-scrollbar-thin pi-scrollbar-thumb-gray-400 pi-dark:scrollbar-thumb-gray-400 pi-scrollbar-thumb-rounded-full pi-scrollbar-thumb-opacity-50 pi-scrollbar-track-gray-900 pi-dark:scrollbar-track-gray-900 pi-scrollbar-track-rounded-full pi-scrollbar-track-opacity-25","data-stop-propagation":!0},p.default.createElement("div",{className:"","data-stop-propagation":!0},p.default.createElement("div",{className:"pi-font-semibold pi-text-gray-50 pi-py-1 pi-px-4"},o.t("DropdownContent.Microphones")),k.filter((function(e){return"audioinput"===(null==e?void 0:e.kind)})).map((function(e,a){return p.default.createElement(n.Menu.Item,{key:a},(function(n){var o=n.active;return p.default.createElement("div",{className:"pi-flex pi-py-2 pi-px-2 ".concat(o?"pi-bg-gray-700":""),onClick:function(){return x(e.deviceId)},"data-stop-propagation":!0},g===(null==e?void 0:e.deviceId)&&p.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-400 pi-mr-2"}),!g&&"default"===(null==e?void 0:e.deviceId)&&p.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-400 pi-mr-2"}),p.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faMicrophone,className:"".concat(null!==g&&""!==g&&g!==(null==e?void 0:e.deviceId)?"pi-ml-6":""!==g&&null!==g&&g===(null==e?void 0:e.deviceId)?"":null===g&&"default"!==(null==e?void 0:e.deviceId)?"pi-ml-6":""," pi-text-gray-100 pi-mr-1")}),p.default.createElement("div",{className:"pi-text-gray-50"},(null==e?void 0:e.label)||"Input device ".concat(a+1)))}))})),p.default.createElement("div",{className:"pi-relative pi-py-2"},p.default.createElement("div",{className:"pi-absolute pi-inset-0 pi-flex pi-items-center","aria-hidden":"true"},p.default.createElement("div",{className:"pi-w-full pi-border-t pi-border-gray-600"}))),p.default.createElement("div",{className:"pi-font-semibold pi-text-gray-50 pi-py-1 pi-px-4","data-stop-propagation":!0},o.t("DropdownContent.Speakers")),k.filter((function(e){return"audiooutput"===(null==e?void 0:e.kind)})).map((function(e,a){return p.default.createElement(n.Menu.Item,{key:a},(function(n){var o=n.active;return p.default.createElement("div",{className:"pi-flex pi-py-2 pi-px-2 ".concat(o?"pi-bg-gray-700":""),onClick:function(){return E(null==e?void 0:e.deviceId)},"data-stop-propagation":!0},y===(null==e?void 0:e.deviceId)&&p.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-400 pi-mr-2"}),!y&&"default"===(null==e?void 0:e.deviceId)&&p.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-400 pi-mr-2"}),p.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faVolumeHigh,className:"".concat(null!==y&&""!==y&&y!==(null==e?void 0:e.deviceId)?"pi-ml-6":""!==y&&null!==y&&y===(null==e?void 0:e.deviceId)?"":null===y&&"default"!==(null==e?void 0:e.deviceId)?"pi-ml-6":""," pi-text-gray-100 pi-mr-1")}),p.default.createElement("div",{className:"pi-text-gray-50"},(null==e?void 0:e.label)||"Output device ".concat(a+1)))}))})))))):p.default.createElement("div",null))};
2
2
  //# sourceMappingURL=DropdownContent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownContent.js","sources":["../../../src/components/SwitchInputView/DropdownContent.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, ComponentProps, Fragment, useState, useEffect } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faCheck, faEllipsis, faMicrophone, faVolumeHigh } from '@fortawesome/free-solid-svg-icons'\nimport { Menu, Transition } from '@headlessui/react'\nimport { t } from 'i18next'\nimport { isWebRTC } from '../../lib/user/default_device'\n\nconst DropdownContent: FC<DropdownContentProps> = ({ username, status }) => {\n const { sipcall }: any = useSelector((state: RootState) => state.webrtc)\n const remoteAudioElement: any = useSelector((state: RootState) => state.player.remoteAudio)\n\n const [selectedAudioInput, setSelectedAudioInput] = useState<string | null>(null)\n const [selectedAudioOutput, setSelectedAudioOutput] = useState<string | null>(null)\n\n const handleClickAudioInput = (audioInputDevice: string) => {\n setSelectedAudioInput(audioInputDevice)\n\n sipcall?.replaceTracks({\n tracks: [\n {\n type: 'audio',\n mid: '0', // We assume mid 0 is audio\n capture: { deviceId: { exact: audioInputDevice } },\n },\n ],\n error: function (err) {\n console.log('Audio input device switch error:', err)\n },\n })\n }\n\n const handleClickAudioOutput = (audioOutputDevice: string) => {\n setSelectedAudioOutput(audioOutputDevice)\n\n remoteAudioElement?.current\n .setSinkId(audioOutputDevice)\n .then(function () {})\n .catch(function (err) {\n console.log('Audio output device switch error:', err)\n })\n }\n\n const [actualDevice, setActualDevice]: any = useState([])\n\n useEffect(() => {\n const checkInputOutputDevices = () => {\n navigator.mediaDevices\n .enumerateDevices()\n .then((deviceInfos) => {\n setActualDevice(deviceInfos)\n })\n .catch((error) => {\n console.error('error', error)\n })\n }\n\n checkInputOutputDevices()\n\n navigator.mediaDevices.addEventListener('devicechange', checkInputOutputDevices)\n\n return () => {\n navigator.mediaDevices.removeEventListener('devicechange', checkInputOutputDevices)\n }\n }, [selectedAudioOutput, selectedAudioInput])\n return (\n <>\n {isWebRTC() ? (\n <Menu as='div' className='relative inline-block text-left' data-stop-propagation={true}>\n <Menu.Button\n className='pi-bg-transparent enabled:hover:pi-bg-gray-500 focus:pi-ring-gray-500 pi-flex pi-font-sans pi-font-light pi-content-center pi-items-center pi-justify-center pi-tracking-wide pi-duration-200 pi-transform pi-outline-none focus:pi-ring-2 focus:pi-z-20 focus:pi-ring-offset-2 disabled:pi-opacity-75 pi-text-white pi-border pi-border-transparent focus:pi-ring-offset-black pi-rounded-full pi-text-sm pi-leading-4 pi-h-12 pi-w-12 pi-col-start-auto pi-transition-color pi-shrink-0'\n data-stop-propagation={true}\n >\n <FontAwesomeIcon\n size='xl'\n icon={faEllipsis}\n className='pi-text-gray-100'\n data-stop-propagation={true}\n />\n </Menu.Button>\n\n <Transition\n as={Fragment}\n enter='transition ease-out duration-100'\n enterFrom='transform opacity-0 scale-95'\n enterTo='transform opacity-100 scale-100'\n leave='transition ease-in duration-75'\n leaveFrom='transform opacity-100 scale-100'\n leaveTo='transform opacity-0 scale-95'\n >\n <Menu.Items\n className='pi-max-h-[13.125rem] pi-z-50 pi-absolute pi-top-0 pi-right-[4.5rem] pi-mt-[-9.5rem] pi-w-56 pi-origin-top-right pi-rounded-md pi-shadow-lg pi-ring-1 pi-bg-black pi-bg-opacity-[0.99] pi-ring-black pi-ring-opacity-5 pi-focus:outline-none pi-cursor-auto pi-border-gray-600 pi-border pi-py-2 pi-overflow-y-auto pi-scrollbar-thin pi-scrollbar-thumb-gray-400 pi-dark:scrollbar-thumb-gray-400 pi-scrollbar-thumb-rounded-full pi-scrollbar-thumb-opacity-50 pi-scrollbar-track-gray-900 pi-dark:scrollbar-track-gray-900 pi-scrollbar-track-rounded-full pi-scrollbar-track-opacity-25'\n data-stop-propagation={true}\n >\n <div className='' data-stop-propagation={true}>\n {/* Microphones */}\n <div className='pi-font-semibold pi-text-gray-50 pi-py-1 pi-px-4'>\n {t('DropdownContent.Microphones')}\n </div>\n {actualDevice\n .filter((device) => device?.kind === 'audioinput')\n .map((audioDevice, index) => (\n <Menu.Item key={index}>\n {({ active }) => (\n <div\n className={`pi-flex pi-py-2 pi-px-2 ${active ? 'pi-bg-gray-700' : ''}`}\n onClick={() => handleClickAudioInput(audioDevice.deviceId)}\n data-stop-propagation={true}\n >\n {/* faCheck on selectedAudioInput */}\n {selectedAudioInput === audioDevice?.deviceId && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-400 pi-mr-2'\n />\n )}\n\n {/* faCheck if user has no selectedAudioInput and audioDevice is default */}\n {!selectedAudioInput && audioDevice?.deviceId === 'default' && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-400 pi-mr-2'\n />\n )}\n\n <FontAwesomeIcon\n size='lg'\n icon={faMicrophone}\n className={`${\n selectedAudioInput !== null &&\n selectedAudioInput !== '' &&\n selectedAudioInput !== audioDevice?.deviceId\n ? 'pi-ml-6'\n : selectedAudioInput !== '' &&\n selectedAudioInput !== null &&\n selectedAudioInput === audioDevice?.deviceId\n ? ''\n : selectedAudioInput === null && audioDevice?.deviceId !== 'default'\n ? 'pi-ml-6'\n : ''\n } pi-text-gray-100 pi-mr-1`}\n />\n <div className='pi-text-gray-50'>\n {audioDevice?.label || `Device ${index + 1}`}\n </div>\n </div>\n )}\n </Menu.Item>\n ))}\n {/* Divider */}\n <div className='pi-relative pi-py-2'>\n <div\n className='pi-absolute pi-inset-0 pi-flex pi-items-center'\n aria-hidden='true'\n >\n <div className='pi-w-full pi-border-t pi-border-gray-600' />\n </div>\n </div>\n {/* Speaker */}\n <div\n className='pi-font-semibold pi-text-gray-50 pi-py-1 pi-px-4'\n data-stop-propagation={true}\n >\n {t('DropdownContent.Speakers')}\n </div>\n {actualDevice\n .filter((device) => device?.kind === 'audiooutput')\n .map((audioDevice, index) => (\n <Menu.Item key={index}>\n {({ active }) => (\n <div\n className={`pi-flex pi-py-2 pi-px-2 ${active ? 'pi-bg-gray-700' : ''}`}\n onClick={() => handleClickAudioOutput(audioDevice?.deviceId)}\n data-stop-propagation={true}\n >\n {/* faCheck on selectedAudioOutput */}\n {selectedAudioOutput === audioDevice?.deviceId && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-400 pi-mr-2'\n />\n )}\n\n {/* faCheck if user has no selectedAudioInput and audioDevice is default */}\n {!selectedAudioOutput && audioDevice?.deviceId === 'default' && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-400 pi-mr-2'\n />\n )}\n\n <FontAwesomeIcon\n size='lg'\n icon={faVolumeHigh}\n className={`${\n selectedAudioOutput !== null &&\n selectedAudioOutput !== '' &&\n selectedAudioOutput !== audioDevice?.deviceId\n ? 'pi-ml-6'\n : selectedAudioOutput !== '' &&\n selectedAudioOutput !== null &&\n selectedAudioOutput === audioDevice?.deviceId\n ? ''\n : selectedAudioOutput === null &&\n audioDevice?.deviceId !== 'default'\n ? 'pi-ml-6'\n : ''\n } pi-text-gray-100 pi-mr-1`}\n />\n\n {/* <FontAwesomeIcon\n size='lg'\n icon={faMicrophone}\n className='pi-text-gray-100 pi-mr-2'\n /> */}\n <div className='pi-text-gray-50'>\n {audioDevice?.label || `Device ${index + 1}`}\n </div>\n </div>\n )}\n </Menu.Item>\n ))}\n {/* Video\n <div className='pi-font-semibold pi-text-gray-700 pi-py-1 pi-px-4'>\n Video\n </div>\n {actualDevice\n .filter((device) => device.kind === 'videoinput')\n .map((videoDevice, index) => (\n <Menu.Item key={index}>\n {({ active }) => (\n <div className='pi-text-gray-700'>\n Webcam: {videoDevice.label || `Device ${index + 1}`}\n </div>\n )}\n </Menu.Item>\n ))}*/}\n </div>\n </Menu.Items>\n </Transition>\n </Menu>\n ) : (\n <div></div>\n )}\n </>\n )\n}\n\ninterface DropdownContentProps extends ComponentProps<'div'> {\n username?: string\n status?: string\n}\n\nexport default DropdownContent\n"],"names":["_a","username","status","sipcall","useSelector","state","webrtc","remoteAudioElement","player","remoteAudio","_b","useState","selectedAudioInput","setSelectedAudioInput","_c","selectedAudioOutput","setSelectedAudioOutput","_d","actualDevice","setActualDevice","useEffect","checkInputOutputDevices","navigator","mediaDevices","enumerateDevices","then","deviceInfos","catch","error","console","addEventListener","removeEventListener","React","createElement","Fragment","isWebRTC","Menu","as","className","Button","FontAwesomeIcon","size","icon","faEllipsis","Transition","enter","enterFrom","enterTo","leave","leaveFrom","leaveTo","Items","t","filter","device","kind","map","audioDevice","index","Item","key","active","concat","onClick","audioInputDevice","deviceId","replaceTracks","tracks","type","mid","capture","exact","err","log","faCheck","faMicrophone","label","audioOutputDevice","current","setSinkId","faVolumeHigh"],"mappings":"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"}
1
+ {"version":3,"file":"DropdownContent.js","sources":["../../../src/components/SwitchInputView/DropdownContent.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, ComponentProps, Fragment, useState, useEffect } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faCheck, faEllipsis, faMicrophone, faVolumeHigh } from '@fortawesome/free-solid-svg-icons'\nimport { Menu, Transition } from '@headlessui/react'\nimport { t } from 'i18next'\nimport { isWebRTC } from '../../lib/user/default_device'\nimport { eventDispatch, getJSONItem, setJSONItem, useEventListener } from '../../utils'\n\nconst DropdownContent: FC<DropdownContentProps> = ({ username, status }) => {\n const { sipcall }: any = useSelector((state: RootState) => state.webrtc)\n const remoteAudioElement: any = useSelector((state: RootState) => state.player.remoteAudio)\n\n const [selectedAudioInput, setSelectedAudioInput] = useState<string | null>(\n getJSONItem('phone-island-audio-input-device').deviceId || null,\n )\n const [selectedAudioOutput, setSelectedAudioOutput] = useState<string | null>(\n getJSONItem('phone-island-audio-output-device').deviceId || null,\n )\n\n const handleClickAudioInput = (audioInputDevice: string) => {\n setSelectedAudioInput(audioInputDevice)\n\n if (sipcall.webrtcStuff.myStream) {\n sipcall?.replaceTracks({\n tracks: [\n {\n type: 'audio',\n mid: '0', // We assume mid 0 is audio\n capture: { deviceId: { exact: audioInputDevice } },\n },\n ],\n success: function () {\n console.info('Audio input device switch success!')\n // set device to localstorage\n setJSONItem('phone-island-audio-input-device', { deviceId: audioInputDevice })\n\n // dispatch event\n eventDispatch('phone-island-call-audio-input-switched', {})\n },\n error: function (err) {\n console.error('Audio input device switch error:', err)\n },\n })\n } else {\n // set device to localstorage\n setJSONItem('phone-island-audio-input-device', { deviceId: audioInputDevice })\n\n // dispatch event\n eventDispatch('phone-island-call-audio-input-switched', {})\n }\n }\n useEventListener('phone-island-call-audio-input-switch', (data: DeviceInputOutputTypes) => {\n handleClickAudioInput(data.deviceId)\n })\n\n const handleClickAudioOutput = (audioOutputDevice: string) => {\n setSelectedAudioOutput(audioOutputDevice)\n\n remoteAudioElement?.current\n .setSinkId(audioOutputDevice)\n .then(function () {\n console.info('Audio output device switch success!')\n // set device to localstorage\n setJSONItem('phone-island-audio-output-device', { deviceId: audioOutputDevice })\n\n // dispatch event\n eventDispatch('phone-island-call-audio-output-switched', {})\n })\n .catch(function (err) {\n console.error('Audio output device switch error:', err)\n })\n }\n useEventListener('phone-island-call-audio-output-switch', (data: DeviceInputOutputTypes) => {\n handleClickAudioOutput(data.deviceId)\n })\n\n const [actualDevice, setActualDevice]: any = useState([])\n\n useEffect(() => {\n const checkInputOutputDevices = () => {\n navigator.mediaDevices\n .enumerateDevices()\n .then((deviceInfos) => {\n setActualDevice(deviceInfos)\n })\n .catch((error) => {\n console.error('error', error)\n })\n }\n\n checkInputOutputDevices()\n\n navigator.mediaDevices.addEventListener('devicechange', checkInputOutputDevices)\n\n return () => {\n navigator.mediaDevices.removeEventListener('devicechange', checkInputOutputDevices)\n }\n }, [selectedAudioOutput, selectedAudioInput])\n return (\n <>\n {isWebRTC() ? (\n <Menu as='div' className='relative inline-block text-left' data-stop-propagation={true}>\n <Menu.Button\n className='pi-bg-transparent enabled:hover:pi-bg-gray-500 focus:pi-ring-gray-500 pi-flex pi-font-sans pi-font-light pi-content-center pi-items-center pi-justify-center pi-tracking-wide pi-duration-200 pi-transform pi-outline-none focus:pi-ring-2 focus:pi-z-20 focus:pi-ring-offset-2 disabled:pi-opacity-75 pi-text-white pi-border pi-border-transparent focus:pi-ring-offset-black pi-rounded-full pi-text-sm pi-leading-4 pi-h-12 pi-w-12 pi-col-start-auto pi-transition-color pi-shrink-0'\n data-stop-propagation={true}\n >\n <FontAwesomeIcon\n size='xl'\n icon={faEllipsis}\n className='pi-text-gray-100'\n data-stop-propagation={true}\n />\n </Menu.Button>\n\n <Transition\n as={Fragment}\n enter='transition ease-out duration-100'\n enterFrom='transform opacity-0 scale-95'\n enterTo='transform opacity-100 scale-100'\n leave='transition ease-in duration-75'\n leaveFrom='transform opacity-100 scale-100'\n leaveTo='transform opacity-0 scale-95'\n >\n <Menu.Items\n className='pi-max-h-[13.125rem] pi-z-50 pi-absolute pi-top-0 pi-right-[4.5rem] pi-mt-[-9.5rem] pi-w-56 pi-origin-top-right pi-rounded-md pi-shadow-lg pi-ring-1 pi-bg-black pi-bg-opacity-[0.99] pi-ring-black pi-ring-opacity-5 pi-focus:outline-none pi-cursor-auto pi-border-gray-600 pi-border pi-py-2 pi-overflow-y-auto pi-scrollbar-thin pi-scrollbar-thumb-gray-400 pi-dark:scrollbar-thumb-gray-400 pi-scrollbar-thumb-rounded-full pi-scrollbar-thumb-opacity-50 pi-scrollbar-track-gray-900 pi-dark:scrollbar-track-gray-900 pi-scrollbar-track-rounded-full pi-scrollbar-track-opacity-25'\n data-stop-propagation={true}\n >\n <div className='' data-stop-propagation={true}>\n {/* Microphones */}\n <div className='pi-font-semibold pi-text-gray-50 pi-py-1 pi-px-4'>\n {t('DropdownContent.Microphones')}\n </div>\n {actualDevice\n .filter((device) => device?.kind === 'audioinput')\n .map((audioDevice, index) => (\n <Menu.Item key={index}>\n {({ active }) => (\n <div\n className={`pi-flex pi-py-2 pi-px-2 ${active ? 'pi-bg-gray-700' : ''}`}\n onClick={() => handleClickAudioInput(audioDevice.deviceId)}\n data-stop-propagation={true}\n >\n {/* faCheck on selectedAudioInput */}\n {selectedAudioInput === audioDevice?.deviceId && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-400 pi-mr-2'\n />\n )}\n\n {/* faCheck if user has no selectedAudioInput and audioDevice is default */}\n {!selectedAudioInput && audioDevice?.deviceId === 'default' && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-400 pi-mr-2'\n />\n )}\n\n <FontAwesomeIcon\n size='lg'\n icon={faMicrophone}\n className={`${\n selectedAudioInput !== null &&\n selectedAudioInput !== '' &&\n selectedAudioInput !== audioDevice?.deviceId\n ? 'pi-ml-6'\n : selectedAudioInput !== '' &&\n selectedAudioInput !== null &&\n selectedAudioInput === audioDevice?.deviceId\n ? ''\n : selectedAudioInput === null && audioDevice?.deviceId !== 'default'\n ? 'pi-ml-6'\n : ''\n } pi-text-gray-100 pi-mr-1`}\n />\n <div className='pi-text-gray-50'>\n {audioDevice?.label || `Input device ${index + 1}`}\n </div>\n </div>\n )}\n </Menu.Item>\n ))}\n {/* Divider */}\n <div className='pi-relative pi-py-2'>\n <div\n className='pi-absolute pi-inset-0 pi-flex pi-items-center'\n aria-hidden='true'\n >\n <div className='pi-w-full pi-border-t pi-border-gray-600' />\n </div>\n </div>\n {/* Speaker */}\n <div\n className='pi-font-semibold pi-text-gray-50 pi-py-1 pi-px-4'\n data-stop-propagation={true}\n >\n {t('DropdownContent.Speakers')}\n </div>\n {actualDevice\n .filter((device) => device?.kind === 'audiooutput')\n .map((audioDevice, index) => (\n <Menu.Item key={index}>\n {({ active }) => (\n <div\n className={`pi-flex pi-py-2 pi-px-2 ${active ? 'pi-bg-gray-700' : ''}`}\n onClick={() => handleClickAudioOutput(audioDevice?.deviceId)}\n data-stop-propagation={true}\n >\n {/* faCheck on selectedAudioOutput */}\n {selectedAudioOutput === audioDevice?.deviceId && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-400 pi-mr-2'\n />\n )}\n\n {/* faCheck if user has no selectedAudioInput and audioDevice is default */}\n {!selectedAudioOutput && audioDevice?.deviceId === 'default' && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-400 pi-mr-2'\n />\n )}\n\n <FontAwesomeIcon\n size='lg'\n icon={faVolumeHigh}\n className={`${\n selectedAudioOutput !== null &&\n selectedAudioOutput !== '' &&\n selectedAudioOutput !== audioDevice?.deviceId\n ? 'pi-ml-6'\n : selectedAudioOutput !== '' &&\n selectedAudioOutput !== null &&\n selectedAudioOutput === audioDevice?.deviceId\n ? ''\n : selectedAudioOutput === null &&\n audioDevice?.deviceId !== 'default'\n ? 'pi-ml-6'\n : ''\n } pi-text-gray-100 pi-mr-1`}\n />\n\n {/* <FontAwesomeIcon\n size='lg'\n icon={faMicrophone}\n className='pi-text-gray-100 pi-mr-2'\n /> */}\n <div className='pi-text-gray-50'>\n {audioDevice?.label || `Output device ${index + 1}`}\n </div>\n </div>\n )}\n </Menu.Item>\n ))}\n {/* Video\n <div className='pi-font-semibold pi-text-gray-700 pi-py-1 pi-px-4'>\n Video\n </div>\n {actualDevice\n .filter((device) => device.kind === 'videoinput')\n .map((videoDevice, index) => (\n <Menu.Item key={index}>\n {({ active }) => (\n <div className='pi-text-gray-700'>\n Webcam: {videoDevice.label || `Device ${index + 1}`}\n </div>\n )}\n </Menu.Item>\n ))}*/}\n </div>\n </Menu.Items>\n </Transition>\n </Menu>\n ) : (\n <div></div>\n )}\n </>\n )\n}\n\ninterface DropdownContentProps extends ComponentProps<'div'> {\n username?: string\n status?: string\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport default DropdownContent\n"],"names":["_a","username","status","sipcall","useSelector","state","webrtc","remoteAudioElement","player","remoteAudio","_b","useState","getJSONItem","deviceId","selectedAudioInput","setSelectedAudioInput","_c","selectedAudioOutput","setSelectedAudioOutput","handleClickAudioInput","audioInputDevice","webrtcStuff","myStream","replaceTracks","tracks","type","mid","capture","exact","success","console","info","setJSONItem","eventDispatch","error","err","useEventListener","data","handleClickAudioOutput","audioOutputDevice","current","setSinkId","then","catch","_d","actualDevice","setActualDevice","useEffect","checkInputOutputDevices","navigator","mediaDevices","enumerateDevices","deviceInfos","addEventListener","removeEventListener","React","createElement","Fragment","isWebRTC","Menu","as","className","Button","FontAwesomeIcon","size","icon","faEllipsis","Transition","enter","enterFrom","enterTo","leave","leaveFrom","leaveTo","Items","t","filter","device","kind","map","audioDevice","index","Item","key","active","concat","onClick","faCheck","faMicrophone","label","faVolumeHigh"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),n=require("../utils/customHooks/useEventListener.js"),t=require("../utils/genericFunctions/eventDispatch.js");require("../node_modules/react-redux/es/index.js");var s=require("../lib/phone/call.js"),l=require("../node_modules/react-redux/es/hooks/useDispatch.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=u(e);exports.CallEvents=function(e){var u=e.sipHost,a=l.useDispatch();return n.useEventListener("phone-island-call-start",(function(e){var n=e.number.replace(/\s/g,"");s.callNumber(n,u)})),n.useEventListener("phone-island-call-hold",(function(){s.pauseCurrentCall()})),n.useEventListener("phone-island-call-unhold",(function(){s.unpauseCurrentCall()})),n.useEventListener("phone-island-call-mute",(function(){s.muteCurrentCall()})),n.useEventListener("phone-island-call-unmute",(function(){s.unmuteCurrentCall()})),n.useEventListener("phone-island-call-park",(function(){s.parkCurrentCall()})),n.useEventListener("phone-island-call-answer",(function(){s.answerIncomingCall()})),n.useEventListener("phone-island-call-end",(function(){s.hangupCurrentCall()})),n.useEventListener("phone-island-call-input-switch",(function(){})),n.useEventListener("phone-island-call-output-switch",(function(){})),n.useEventListener("phone-island-call-listen",(function(e){a.listen.setUpdateListenStatus(!0,e.number),t.eventDispatch("phone-island-call-listened",{})})),n.useEventListener("phone-island-call-intrude",(function(e){a.listen.setUpdateIntrudeStatus(!0,e.number),t.eventDispatch("phone-island-call-intruded",{})})),i.default.createElement(i.default.Fragment,null)},exports.dispatchOutgoingCallStarted=function(e,n){void 0===e&&(e=""),void 0===n&&(n="");var s={name:e,number:n};t.eventDispatch("phone-island-outgoing-call-started",s)};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),n=require("../utils/customHooks/useEventListener.js"),t=require("../utils/genericFunctions/eventDispatch.js");require("../node_modules/react-redux/es/index.js");var s=require("../lib/phone/call.js"),l=require("../node_modules/react-redux/es/hooks/useDispatch.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=u(e);exports.CallEvents=function(e){var u=e.sipHost,r=l.useDispatch();return n.useEventListener("phone-island-call-start",(function(e){var n=e.number.replace(/\s/g,"");s.callNumber(n,u)})),n.useEventListener("phone-island-call-hold",(function(){s.pauseCurrentCall()})),n.useEventListener("phone-island-call-unhold",(function(){s.unpauseCurrentCall()})),n.useEventListener("phone-island-call-mute",(function(){s.muteCurrentCall()})),n.useEventListener("phone-island-call-unmute",(function(){s.unmuteCurrentCall()})),n.useEventListener("phone-island-call-park",(function(){s.parkCurrentCall()})),n.useEventListener("phone-island-call-answer",(function(){s.answerIncomingCall()})),n.useEventListener("phone-island-call-end",(function(){s.hangupCurrentCall()})),n.useEventListener("phone-island-call-listen",(function(e){r.listen.setUpdateListenStatus(!0,e.number),t.eventDispatch("phone-island-call-listened",{})})),n.useEventListener("phone-island-call-intrude",(function(e){r.listen.setUpdateIntrudeStatus(!0,e.number),t.eventDispatch("phone-island-call-intruded",{})})),a.default.createElement(a.default.Fragment,null)},exports.dispatchOutgoingCallStarted=function(e,n){void 0===e&&(e=""),void 0===n&&(n="");var s={name:e,number:n};t.eventDispatch("phone-island-outgoing-call-started",s)};
2
2
  //# sourceMappingURL=CallEvents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CallEvents.js","sources":["../../src/events/CallEvents.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC } from 'react'\nimport { useEventListener, eventDispatch } from '../utils'\nimport { useDispatch } from 'react-redux'\nimport { Dispatch } from '../store'\nimport {\n callNumber,\n muteCurrentCall,\n unmuteCurrentCall,\n pauseCurrentCall,\n unpauseCurrentCall,\n parkCurrentCall,\n answerIncomingCall,\n hangupCurrentCall,\n} from '../lib/phone/call'\n\nexport const CallEvents: FC<{ sipHost: string }> = ({ sipHost }) => {\n const dispatch = useDispatch<Dispatch>()\n\n /**\n * Event listner for phone-island-call-* events\n */\n useEventListener('phone-island-call-start', (data: CallStartTypes) => {\n const number = data.number.replace(/\\s/g, '')\n callNumber(number, sipHost)\n })\n useEventListener('phone-island-call-hold', () => {\n pauseCurrentCall()\n })\n useEventListener('phone-island-call-unhold', () => {\n unpauseCurrentCall()\n })\n useEventListener('phone-island-call-mute', () => {\n muteCurrentCall()\n })\n useEventListener('phone-island-call-unmute', () => {\n unmuteCurrentCall()\n })\n\n useEventListener('phone-island-call-park', () => {\n parkCurrentCall()\n })\n useEventListener('phone-island-call-answer', () => {\n answerIncomingCall()\n })\n useEventListener('phone-island-call-end', () => {\n hangupCurrentCall()\n })\n\n useEventListener('phone-island-call-input-switch', () => {})\n useEventListener('phone-island-call-output-switch', () => {})\n\n useEventListener('phone-island-call-listen', (data: ListenIntrudeTypes) => {\n dispatch.listen.setUpdateListenStatus(true, data.number)\n eventDispatch('phone-island-call-listened', {})\n })\n\n useEventListener('phone-island-call-intrude', (data: ListenIntrudeTypes) => {\n dispatch.listen.setUpdateIntrudeStatus(true, data.number)\n eventDispatch('phone-island-call-intruded', {})\n })\n\n return <></>\n}\n\n/**\n * Dispatch the phone-island-outgoing-call-started event\n */\nexport function dispatchOutgoingCallStarted(name: string = '', number: string = '') {\n const data: OutgoingCallStartedTypes = {\n name,\n number,\n }\n eventDispatch('phone-island-outgoing-call-started', data)\n}\n\ninterface CallStartTypes {\n number: string\n}\n\ninterface OutgoingCallStartedTypes {\n name: string\n number: string\n}\n\ninterface ListenIntrudeTypes {\n number: string\n}\n"],"names":["_a","sipHost","dispatch","useDispatch","useEventListener","data","number","replace","callNumber","pauseCurrentCall","unpauseCurrentCall","muteCurrentCall","unmuteCurrentCall","parkCurrentCall","answerIncomingCall","hangupCurrentCall","listen","setUpdateListenStatus","eventDispatch","setUpdateIntrudeStatus","React","name"],"mappings":"ycAkBmD,SAACA,GAAE,IAAAC,EAAOD,EAAAC,QACrDC,EAAWC,EAAAA,cA6CjB,OAxCAC,mBAAiB,2BAA2B,SAACC,GAC3C,IAAMC,EAASD,EAAKC,OAAOC,QAAQ,MAAO,IAC1CC,aAAWF,EAAQL,EACrB,IACAG,EAAgBA,iBAAC,0BAA0B,WACzCK,EAAAA,kBACF,IACAL,EAAgBA,iBAAC,4BAA4B,WAC3CM,EAAAA,oBACF,IACAN,EAAgBA,iBAAC,0BAA0B,WACzCO,EAAAA,iBACF,IACAP,EAAgBA,iBAAC,4BAA4B,WAC3CQ,EAAAA,mBACF,IAEAR,EAAgBA,iBAAC,0BAA0B,WACzCS,EAAAA,iBACF,IACAT,EAAgBA,iBAAC,4BAA4B,WAC3CU,EAAAA,oBACF,IACAV,EAAgBA,iBAAC,yBAAyB,WACxCW,EAAAA,mBACF,IAEAX,mBAAiB,kCAAkC,WAAO,IAC1DA,mBAAiB,mCAAmC,WAAO,IAE3DA,mBAAiB,4BAA4B,SAACC,GAC5CH,EAASc,OAAOC,uBAAsB,EAAMZ,EAAKC,QACjDY,gBAAc,6BAA8B,CAAA,EAC9C,IAEAd,mBAAiB,6BAA6B,SAACC,GAC7CH,EAASc,OAAOG,wBAAuB,EAAMd,EAAKC,QAClDY,gBAAc,6BAA8B,CAAA,EAC9C,IAEOE,gDACT,sCAKgB,SAA4BC,EAAmBf,QAAnB,IAAAe,IAAAA,EAAiB,SAAE,IAAAf,IAAAA,EAAmB,IAChF,IAAMD,EAAiC,CACrCgB,KAAIA,EACJf,OAAMA,GAERY,gBAAc,qCAAsCb,EACtD"}
1
+ {"version":3,"file":"CallEvents.js","sources":["../../src/events/CallEvents.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC } from 'react'\nimport { useEventListener, eventDispatch } from '../utils'\nimport { useDispatch } from 'react-redux'\nimport { Dispatch } from '../store'\nimport {\n callNumber,\n muteCurrentCall,\n unmuteCurrentCall,\n pauseCurrentCall,\n unpauseCurrentCall,\n parkCurrentCall,\n answerIncomingCall,\n hangupCurrentCall,\n} from '../lib/phone/call'\n\nexport const CallEvents: FC<{ sipHost: string }> = ({ sipHost }) => {\n const dispatch = useDispatch<Dispatch>()\n\n /**\n * Event listner for phone-island-call-* events\n */\n useEventListener('phone-island-call-start', (data: CallStartTypes) => {\n const number = data.number.replace(/\\s/g, '')\n callNumber(number, sipHost)\n })\n useEventListener('phone-island-call-hold', () => {\n pauseCurrentCall()\n })\n useEventListener('phone-island-call-unhold', () => {\n unpauseCurrentCall()\n })\n useEventListener('phone-island-call-mute', () => {\n muteCurrentCall()\n })\n useEventListener('phone-island-call-unmute', () => {\n unmuteCurrentCall()\n })\n\n useEventListener('phone-island-call-park', () => {\n parkCurrentCall()\n })\n useEventListener('phone-island-call-answer', () => {\n answerIncomingCall()\n })\n useEventListener('phone-island-call-end', () => {\n hangupCurrentCall()\n })\n\n useEventListener('phone-island-call-listen', (data: ListenIntrudeTypes) => {\n dispatch.listen.setUpdateListenStatus(true, data.number)\n eventDispatch('phone-island-call-listened', {})\n })\n\n useEventListener('phone-island-call-intrude', (data: ListenIntrudeTypes) => {\n dispatch.listen.setUpdateIntrudeStatus(true, data.number)\n eventDispatch('phone-island-call-intruded', {})\n })\n\n return <></>\n}\n\n/**\n * Dispatch the phone-island-outgoing-call-started event\n */\nexport function dispatchOutgoingCallStarted(name: string = '', number: string = '') {\n const data: OutgoingCallStartedTypes = {\n name,\n number,\n }\n eventDispatch('phone-island-outgoing-call-started', data)\n}\n\ninterface CallStartTypes {\n number: string\n}\n\ninterface OutgoingCallStartedTypes {\n name: string\n number: string\n}\n\ninterface ListenIntrudeTypes {\n number: string\n}\n"],"names":["_a","sipHost","dispatch","useDispatch","useEventListener","data","number","replace","callNumber","pauseCurrentCall","unpauseCurrentCall","muteCurrentCall","unmuteCurrentCall","parkCurrentCall","answerIncomingCall","hangupCurrentCall","listen","setUpdateListenStatus","eventDispatch","setUpdateIntrudeStatus","React","name"],"mappings":"ycAkBmD,SAACA,GAAE,IAAAC,EAAOD,EAAAC,QACrDC,EAAWC,EAAAA,cA0CjB,OArCAC,mBAAiB,2BAA2B,SAACC,GAC3C,IAAMC,EAASD,EAAKC,OAAOC,QAAQ,MAAO,IAC1CC,aAAWF,EAAQL,EACrB,IACAG,EAAgBA,iBAAC,0BAA0B,WACzCK,EAAAA,kBACF,IACAL,EAAgBA,iBAAC,4BAA4B,WAC3CM,EAAAA,oBACF,IACAN,EAAgBA,iBAAC,0BAA0B,WACzCO,EAAAA,iBACF,IACAP,EAAgBA,iBAAC,4BAA4B,WAC3CQ,EAAAA,mBACF,IAEAR,EAAgBA,iBAAC,0BAA0B,WACzCS,EAAAA,iBACF,IACAT,EAAgBA,iBAAC,4BAA4B,WAC3CU,EAAAA,oBACF,IACAV,EAAgBA,iBAAC,yBAAyB,WACxCW,EAAAA,mBACF,IAEAX,mBAAiB,4BAA4B,SAACC,GAC5CH,EAASc,OAAOC,uBAAsB,EAAMZ,EAAKC,QACjDY,gBAAc,6BAA8B,CAAA,EAC9C,IAEAd,mBAAiB,6BAA6B,SAACC,GAC7CH,EAASc,OAAOG,wBAAuB,EAAMd,EAAKC,QAClDY,gBAAc,6BAA8B,CAAA,EAC9C,IAEOE,gDACT,sCAKgB,SAA4BC,EAAmBf,QAAnB,IAAAe,IAAAA,EAAiB,SAAE,IAAAf,IAAAA,EAAmB,IAChF,IAAMD,EAAiC,CACrCgB,KAAIA,EACJf,OAAMA,GAERY,gBAAc,qCAAsCb,EACtD"}
package/dist/index.css CHANGED
@@ -1 +1 @@
1
- @supports (-moz-appearance:none){*{scrollbar-color:auto;scrollbar-width:auto}}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pi-pointer-events-none{pointer-events:none}.pi-pointer-events-auto{pointer-events:auto}.pi-absolute{position:absolute}.pi-relative{position:relative}.pi-inset-0{bottom:0;left:0;right:0;top:0}.pi-left-0{left:0}.pi-top-0{top:0}.pi-right-0{right:0}.pi-right-\[4\.5rem\]{right:4.5rem}.pi-z-20{z-index:20}.pi-z-1000{z-index:1000}.pi-z-30{z-index:30}.-pi-z-10{z-index:-10}.pi-z-50{z-index:50}.pi-col-start-auto{grid-column-start:auto}.pi-mt-4{margin-top:1rem}.pi-ml-4{margin-left:1rem}.pi-ml-8{margin-left:2rem}.pi-ml-16{margin-left:4rem}.pi-mb-6{margin-bottom:1.5rem}.pi-mt-1{margin-top:.25rem}.-pi-mt-10{margin-top:-2.5rem}.pi-mt-\[-9\.5rem\]{margin-top:-9.5rem}.pi-mr-2{margin-right:.5rem}.pi-ml-6{margin-left:1.5rem}.pi-mr-1{margin-right:.25rem}.pi-mt-7{margin-top:1.75rem}.pi-inline-block{display:inline-block}.pi-flex{display:flex}.pi-grid{display:grid}.pi-hidden{display:none}.pi-h-6{height:1.5rem}.pi-h-12{height:3rem}.pi-h-8{height:2rem}.pi-h-9{height:2.25rem}.pi-h-fit{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.pi-h-full{height:100%}.pi-h-1{height:.25rem}.pi-h-3{height:.75rem}.pi-max-h-\[13\.125rem\]{max-height:13.125rem}.pi-min-h-full{min-height:100%}.pi-w-6{width:1.5rem}.pi-w-12{width:3rem}.pi-w-fit{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.pi-w-0\.5{width:.125rem}.pi-w-0{width:0}.pi-w-9{width:2.25rem}.pi-w-full{width:100%}.pi-w-44{width:11rem}.pi-w-16{width:4rem}.pi-w-56{width:14rem}.pi-w-3{width:.75rem}.pi-min-w-full{min-width:100%}.pi-flex-shrink-0,.pi-shrink-0{flex-shrink:0}.pi-flex-grow-0{flex-grow:0}.pi-origin-top-right{-webkit-transform-origin:top right;transform-origin:top right}.pi-rotate-135{--tw-rotate:135deg}.pi-rotate-135,.pi-rotate-90{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-90{--tw-rotate:90deg}.pi--rotate-45{--tw-rotate:-45deg}.pi--rotate-45,.pi-rotate-\[135deg\]{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-\[135deg\]{--tw-rotate:135deg}.pi-transform{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@-webkit-keyframes pi-ping{75%,to{opacity:0;-webkit-transform:scale(2);transform:scale(2)}}@keyframes pi-ping{75%,to{opacity:0;-webkit-transform:scale(2);transform:scale(2)}}.pi-animate-ping{-webkit-animation:pi-ping 1s cubic-bezier(0,0,.2,1) infinite;animation:pi-ping 1s cubic-bezier(0,0,.2,1) infinite}.pi-cursor-pointer{cursor:pointer}.pi-cursor-auto{cursor:auto}.pi-auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.pi-grid-cols-\[12rem\,1rem\]{grid-template-columns:12rem 1rem}.pi-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.pi-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.pi-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.pi-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.pi-flex-col{flex-direction:column}.pi-place-items-center{place-items:center}.pi-content-center{align-content:center}.pi-items-center{align-items:center}.pi-justify-start{justify-content:flex-start}.pi-justify-end{justify-content:flex-end}.pi-justify-center{justify-content:center}.pi-justify-between{justify-content:space-between}.pi-justify-items-end{justify-items:end}.pi-justify-items-center{justify-items:center}.pi-gap-1{gap:.25rem}.pi-gap-4{gap:1rem}.pi-gap-2{gap:.5rem}.pi-gap-5{gap:1.25rem}.pi-gap-7{gap:1.75rem}.pi-gap-3\.5{gap:.875rem}.pi-gap-3{gap:.75rem}.pi-gap-6{gap:1.5rem}.pi-gap-y-5{row-gap:1.25rem}.pi-gap-y-6{row-gap:1.5rem}.pi-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.pi-overflow-hidden{overflow:hidden}.pi-overflow-y-auto{overflow-y:auto}.pi-overflow-x-hidden{overflow-x:hidden}.pi-truncate{overflow:hidden;white-space:nowrap}.pi-text-ellipsis,.pi-truncate{text-overflow:ellipsis}.pi-whitespace-nowrap{white-space:nowrap}.pi-rounded-sm{border-radius:.125rem}.pi-rounded-full{border-radius:9999px}.pi-rounded-3xl{border-radius:1.5rem}.pi-rounded-md{border-radius:.375rem}.pi-rounded-2xl{border-radius:1rem}.pi-rounded-xl{border-radius:.75rem}.pi-border{border-width:1px}.pi-border-4{border-width:4px}.pi-border-2{border-width:2px}.pi-border-t{border-top-width:1px}.pi-border-transparent{border-color:transparent}.pi-border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.pi-border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.pi-border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}.pi-border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.pi-border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.pi-border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.pi-border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.pi-bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.pi-bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.pi-bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.pi-bg-transparent{background-color:initial}.pi-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.pi-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.pi-bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity))}.pi-bg-sky-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.pi-bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.pi-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.pi-bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.pi-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.pi-bg-opacity-\[0\.99\]{--tw-bg-opacity:0.99}.pi-bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.pi-bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.pi-from-transparent{--tw-gradient-from:transparent;--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-from-black{--tw-gradient-from:#000;--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-to-gray-500{--tw-gradient-to:#6b7280}.pi-to-black{--tw-gradient-to:#000}.pi-to-transparent{--tw-gradient-to:transparent}.pi-bg-cover{background-size:cover}.pi-p-4{padding:1rem}.pi-px-3{padding-left:.75rem;padding-right:.75rem}.pi-py-2{padding-bottom:.5rem;padding-top:.5rem}.pi-px-6{padding-left:1.5rem;padding-right:1.5rem}.pi-px-4{padding-left:1rem;padding-right:1rem}.pi-px-2{padding-left:.5rem;padding-right:.5rem}.pi-px-0\.5{padding-left:.125rem;padding-right:.125rem}.pi-px-0{padding-left:0;padding-right:0}.pi-py-1{padding-bottom:.25rem;padding-top:.25rem}.pi-pr-2{padding-right:.5rem}.pi-pt-7{padding-top:1.75rem}.pi-pt-3{padding-top:.75rem}.pi-pt-9{padding-top:2.25rem}.pi-pt-4{padding-top:1rem}.pi-pb-9{padding-bottom:2.25rem}.pi-pr-4{padding-right:1rem}.pi-text-center{text-align:center}.pi-font-sans{font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.pi-text-sm{font-size:.875rem;line-height:1.25rem}.pi-text-base{font-size:1rem;line-height:1.5rem}.pi-text-xs{font-size:.75rem;line-height:1rem}.pi-text-2xl{font-size:1.5rem;line-height:2rem}.pi-text-xl{font-size:1.25rem;line-height:1.75rem}.pi-text-4xl{font-size:2.25rem;line-height:2.5rem}.pi-font-light{font-weight:300}.pi-font-medium{font-weight:500}.pi-font-bold{font-weight:700}.pi-font-semibold{font-weight:600}.pi-leading-4{line-height:1rem}.pi-tracking-wide{letter-spacing:.025em}.pi-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.pi-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.pi-text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.pi-text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.pi-text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.pi-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.pi-opacity-60{opacity:.6}.pi-shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.pi-outline-none{outline:2px solid transparent;outline-offset:2px}.pi-ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.pi-ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity))}.pi-ring-opacity-5{--tw-ring-opacity:0.05}.pi-transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,-webkit-transform,-webkit-filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-transform,-webkit-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-shadow{transition-duration:.15s;transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-duration-200{transition-duration:.2s}.pi-scrollbar-thin::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}.pi-scrollbar-thin::-webkit-scrollbar-track:hover{background-color:var(--scrollbar-track-hover,var(--scrollbar-track))}.pi-scrollbar-thin::-webkit-scrollbar-track:active{background-color:var(--scrollbar-track-active,var(--scrollbar-track-hover,var(--scrollbar-track)))}.pi-scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}.pi-scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--scrollbar-thumb-hover,var(--scrollbar-thumb))}.pi-scrollbar-thin::-webkit-scrollbar-thumb:active{background-color:var(--scrollbar-thumb-active,var(--scrollbar-thumb-hover,var(--scrollbar-thumb)))}.pi-scrollbar-thin::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}.pi-scrollbar-thin::-webkit-scrollbar-corner:hover{background-color:var(--scrollbar-corner-hover,var(--scrollbar-corner))}.pi-scrollbar-thin::-webkit-scrollbar-corner:active{background-color:var(--scrollbar-corner-active,var(--scrollbar-corner-hover,var(--scrollbar-corner)))}@supports (-moz-appearance:none){.pi-scrollbar-thin{scrollbar-color:var(--scrollbar-thumb,initial) var(--scrollbar-track,initial);scrollbar-width:thin}}.pi-scrollbar-thin::-webkit-scrollbar{display:block;height:8px;width:8px}.pi-scrollbar-track-gray-900{--scrollbar-track:#111827!important}.pi-scrollbar-thumb-gray-400{--scrollbar-thumb:#9ca3af!important}.pi-scrollbar-track-rounded-full{--scrollbar-track-radius:9999px}.pi-scrollbar-thumb-rounded-full{--scrollbar-thumb-radius:9999px}.hover\:pi-scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1;-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:pi-bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.hover\:pi-bg-sky-700:hover{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.hover\:pi-shadow-2xl:hover{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:pi-z-20:focus{z-index:20}.focus\:pi-border-emerald-500:focus{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.focus\:pi-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:pi-outline-0:focus{outline-width:0}.focus\:pi-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-0:focus,.focus\:pi-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:pi-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-red-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity))}.focus\:pi-ring-green-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.focus\:pi-ring-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity))}.focus\:pi-ring-sky-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity))}.focus\:pi-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:pi-ring-offset-black:focus{--tw-ring-offset-color:#000}.focus\:pi-ring-offset-white:focus{--tw-ring-offset-color:#fff}.active\:pi-border-emerald-500:active{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.enabled\:hover\:pi-border-gray-500:hover:enabled{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.enabled\:hover\:pi-bg-red-700:hover:enabled{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.enabled\:hover\:pi-bg-green-700:hover:enabled{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.enabled\:hover\:pi-bg-gray-500:hover:enabled{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.disabled\:pi-opacity-75:disabled{opacity:.75}
1
+ @supports (-moz-appearance:none){*{scrollbar-color:auto;scrollbar-width:auto}}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pi-pointer-events-none{pointer-events:none}.pi-pointer-events-auto{pointer-events:auto}.pi-absolute{position:absolute}.pi-relative{position:relative}.pi-inset-0{bottom:0;left:0;right:0;top:0}.pi-left-0{left:0}.pi-top-0{top:0}.pi-right-0{right:0}.pi-right-\[4\.5rem\]{right:4.5rem}.pi-z-20{z-index:20}.pi-z-1000{z-index:1000}.pi-z-30{z-index:30}.-pi-z-10{z-index:-10}.pi-z-50{z-index:50}.pi-col-start-auto{grid-column-start:auto}.pi-mt-4{margin-top:1rem}.pi-ml-4{margin-left:1rem}.pi-ml-8{margin-left:2rem}.pi-ml-16{margin-left:4rem}.pi-mb-6{margin-bottom:1.5rem}.pi-mt-1{margin-top:.25rem}.-pi-mt-10{margin-top:-2.5rem}.pi-ml-\[4\.7rem\]{margin-left:4.7rem}.pi-ml-11{margin-left:2.75rem}.pi-mt-\[-9\.5rem\]{margin-top:-9.5rem}.pi-mr-2{margin-right:.5rem}.pi-ml-6{margin-left:1.5rem}.pi-mr-1{margin-right:.25rem}.pi-mt-7{margin-top:1.75rem}.pi-inline-block{display:inline-block}.pi-flex{display:flex}.pi-grid{display:grid}.pi-hidden{display:none}.pi-h-6{height:1.5rem}.pi-h-12{height:3rem}.pi-h-8{height:2rem}.pi-h-9{height:2.25rem}.pi-h-fit{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.pi-h-full{height:100%}.pi-h-1{height:.25rem}.pi-h-3{height:.75rem}.pi-max-h-\[13\.125rem\]{max-height:13.125rem}.pi-min-h-full{min-height:100%}.pi-w-6{width:1.5rem}.pi-w-12{width:3rem}.pi-w-fit{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.pi-w-0\.5{width:.125rem}.pi-w-0{width:0}.pi-w-9{width:2.25rem}.pi-w-full{width:100%}.pi-w-44{width:11rem}.pi-w-16{width:4rem}.pi-w-2{width:.5rem}.pi-w-56{width:14rem}.pi-w-3{width:.75rem}.pi-min-w-full{min-width:100%}.pi-flex-none{flex:none}.pi-flex-shrink-0,.pi-shrink-0{flex-shrink:0}.pi-flex-grow-0{flex-grow:0}.pi-origin-top-right{-webkit-transform-origin:top right;transform-origin:top right}.pi-rotate-135{--tw-rotate:135deg}.pi-rotate-135,.pi-rotate-90{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-90{--tw-rotate:90deg}.pi--rotate-45{--tw-rotate:-45deg}.pi--rotate-45,.pi-rotate-\[135deg\]{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-\[135deg\]{--tw-rotate:135deg}.pi-transform{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@-webkit-keyframes pi-ping{75%,to{opacity:0;-webkit-transform:scale(2);transform:scale(2)}}@keyframes pi-ping{75%,to{opacity:0;-webkit-transform:scale(2);transform:scale(2)}}.pi-animate-ping{-webkit-animation:pi-ping 1s cubic-bezier(0,0,.2,1) infinite;animation:pi-ping 1s cubic-bezier(0,0,.2,1) infinite}.pi-cursor-pointer{cursor:pointer}.pi-cursor-auto{cursor:auto}.pi-auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.pi-grid-cols-\[12rem\,1rem\]{grid-template-columns:12rem 1rem}.pi-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.pi-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.pi-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.pi-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.pi-flex-col{flex-direction:column}.pi-place-items-center{place-items:center}.pi-content-center{align-content:center}.pi-items-center{align-items:center}.pi-justify-start{justify-content:flex-start}.pi-justify-end{justify-content:flex-end}.pi-justify-center{justify-content:center}.pi-justify-between{justify-content:space-between}.pi-justify-items-end{justify-items:end}.pi-justify-items-center{justify-items:center}.pi-gap-1{gap:.25rem}.pi-gap-4{gap:1rem}.pi-gap-2{gap:.5rem}.pi-gap-5{gap:1.25rem}.pi-gap-7{gap:1.75rem}.pi-gap-3\.5{gap:.875rem}.pi-gap-3{gap:.75rem}.pi-gap-6{gap:1.5rem}.pi-gap-y-5{row-gap:1.25rem}.pi-gap-y-6{row-gap:1.5rem}.pi-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.pi-overflow-hidden{overflow:hidden}.pi-overflow-y-auto{overflow-y:auto}.pi-overflow-x-hidden{overflow-x:hidden}.pi-truncate{overflow:hidden;white-space:nowrap}.pi-text-ellipsis,.pi-truncate{text-overflow:ellipsis}.pi-whitespace-nowrap{white-space:nowrap}.pi-rounded-sm{border-radius:.125rem}.pi-rounded-full{border-radius:9999px}.pi-rounded-3xl{border-radius:1.5rem}.pi-rounded-md{border-radius:.375rem}.pi-rounded-2xl{border-radius:1rem}.pi-rounded-xl{border-radius:.75rem}.pi-border{border-width:1px}.pi-border-4{border-width:4px}.pi-border-2{border-width:2px}.pi-border-t{border-top-width:1px}.pi-border-transparent{border-color:transparent}.pi-border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.pi-border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.pi-border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}.pi-border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.pi-border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.pi-border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.pi-border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.pi-bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.pi-bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.pi-bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.pi-bg-transparent{background-color:initial}.pi-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.pi-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.pi-bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity))}.pi-bg-sky-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.pi-bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.pi-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.pi-bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.pi-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.pi-bg-opacity-\[0\.99\]{--tw-bg-opacity:0.99}.pi-bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.pi-bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.pi-from-transparent{--tw-gradient-from:transparent;--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-from-black{--tw-gradient-from:#000;--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-to-gray-500{--tw-gradient-to:#6b7280}.pi-to-black{--tw-gradient-to:#000}.pi-to-transparent{--tw-gradient-to:transparent}.pi-bg-cover{background-size:cover}.pi-p-4{padding:1rem}.pi-px-3{padding-left:.75rem;padding-right:.75rem}.pi-py-2{padding-bottom:.5rem;padding-top:.5rem}.pi-px-6{padding-left:1.5rem;padding-right:1.5rem}.pi-px-4{padding-left:1rem;padding-right:1rem}.pi-px-2{padding-left:.5rem;padding-right:.5rem}.pi-px-0\.5{padding-left:.125rem;padding-right:.125rem}.pi-px-0{padding-left:0;padding-right:0}.pi-py-1{padding-bottom:.25rem;padding-top:.25rem}.pi-pr-2{padding-right:.5rem}.pi-pt-7{padding-top:1.75rem}.pi-pt-3{padding-top:.75rem}.pi-pt-9{padding-top:2.25rem}.pi-pt-4{padding-top:1rem}.pi-pb-9{padding-bottom:2.25rem}.pi-pr-4{padding-right:1rem}.pi-text-center{text-align:center}.pi-font-sans{font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.pi-text-sm{font-size:.875rem;line-height:1.25rem}.pi-text-base{font-size:1rem;line-height:1.5rem}.pi-text-xs{font-size:.75rem;line-height:1rem}.pi-text-2xl{font-size:1.5rem;line-height:2rem}.pi-text-xl{font-size:1.25rem;line-height:1.75rem}.pi-text-4xl{font-size:2.25rem;line-height:2.5rem}.pi-font-light{font-weight:300}.pi-font-medium{font-weight:500}.pi-font-bold{font-weight:700}.pi-font-semibold{font-weight:600}.pi-leading-4{line-height:1rem}.pi-tracking-wide{letter-spacing:.025em}.pi-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.pi-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.pi-text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.pi-text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.pi-text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.pi-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.pi-opacity-60{opacity:.6}.pi-shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.pi-outline-none{outline:2px solid transparent;outline-offset:2px}.pi-ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.pi-ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity))}.pi-ring-opacity-5{--tw-ring-opacity:0.05}.pi-transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,-webkit-transform,-webkit-filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-transform,-webkit-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-shadow{transition-duration:.15s;transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-duration-200{transition-duration:.2s}.pi-scrollbar-thin::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}.pi-scrollbar-thin::-webkit-scrollbar-track:hover{background-color:var(--scrollbar-track-hover,var(--scrollbar-track))}.pi-scrollbar-thin::-webkit-scrollbar-track:active{background-color:var(--scrollbar-track-active,var(--scrollbar-track-hover,var(--scrollbar-track)))}.pi-scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}.pi-scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--scrollbar-thumb-hover,var(--scrollbar-thumb))}.pi-scrollbar-thin::-webkit-scrollbar-thumb:active{background-color:var(--scrollbar-thumb-active,var(--scrollbar-thumb-hover,var(--scrollbar-thumb)))}.pi-scrollbar-thin::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}.pi-scrollbar-thin::-webkit-scrollbar-corner:hover{background-color:var(--scrollbar-corner-hover,var(--scrollbar-corner))}.pi-scrollbar-thin::-webkit-scrollbar-corner:active{background-color:var(--scrollbar-corner-active,var(--scrollbar-corner-hover,var(--scrollbar-corner)))}@supports (-moz-appearance:none){.pi-scrollbar-thin{scrollbar-color:var(--scrollbar-thumb,initial) var(--scrollbar-track,initial);scrollbar-width:thin}}.pi-scrollbar-thin::-webkit-scrollbar{display:block;height:8px;width:8px}.pi-scrollbar-track-gray-900{--scrollbar-track:#111827!important}.pi-scrollbar-thumb-gray-400{--scrollbar-thumb:#9ca3af!important}.pi-scrollbar-track-rounded-full{--scrollbar-track-radius:9999px}.pi-scrollbar-thumb-rounded-full{--scrollbar-thumb-radius:9999px}.hover\:pi-scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1;-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:pi-bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.hover\:pi-bg-sky-700:hover{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.hover\:pi-shadow-2xl:hover{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:pi-z-20:focus{z-index:20}.focus\:pi-border-emerald-500:focus{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.focus\:pi-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:pi-outline-0:focus{outline-width:0}.focus\:pi-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-0:focus,.focus\:pi-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:pi-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-red-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity))}.focus\:pi-ring-green-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.focus\:pi-ring-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity))}.focus\:pi-ring-sky-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity))}.focus\:pi-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:pi-ring-offset-black:focus{--tw-ring-offset-color:#000}.focus\:pi-ring-offset-white:focus{--tw-ring-offset-color:#fff}.active\:pi-border-emerald-500:active{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.enabled\:hover\:pi-border-gray-500:hover:enabled{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.enabled\:hover\:pi-bg-red-700:hover:enabled{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.enabled\:hover\:pi-bg-green-700:hover:enabled{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.enabled\:hover\:pi-bg-gray-500:hover:enabled{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.disabled\:pi-opacity-75:disabled{opacity:.75}
@@ -3,12 +3,6 @@
3
3
  * @param number The number string
4
4
  */
5
5
  export declare function callNumber(number: string, sipHost: string): void;
6
- /**
7
- * Starts a call to a SIP URI
8
- *
9
- * @param sipURI The SIP URI string
10
- */
11
- export declare function callSipURI(sipURI: string): void;
12
6
  /**
13
7
  * Answer incoming call
14
8
  */
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("../devices/devices.js"),r=require("../webrtc/janus.js"),n=require("../webrtc/messages.js"),a=require("../../store/index.js"),s=require("../user/default_device.js"),i=require("../../services/astproxy.js"),o=require("../../static/dtmf/index.js");require("react");var l=require("../../utils/genericFunctions/eventDispatch.js");function u(a){var s=this;t.getSupportedDevices((function(){return e.__awaiter(s,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return r.default.log("This is a SIP call"),[4,n.call(a,{audio:{mandatory:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,googEchoCancellation:!0,googAutoGainControl:!0,googNoiseSuppression:!0,googHighpassFilter:!0,googTypingNoiseDetection:!0,googNoiseReduction:!0,volume:1}},audioSend:!0,audioRecv:!0,videoSend:!1,videoRecv:!1})];case 1:return e.sent(),[2]}}))}))}))}exports.answerIncomingCall=function(){s.isWebRTC()?n.answerWebRTC():i.answerPhysical(),l.eventDispatch("phone-island-call-answered",{})},exports.attendedTransfer=function(t){return e.__awaiter(this,void 0,void 0,(function(){var r,n;return e.__generator(this,(function(e){switch(e.label){case 0:return r=a.store.getState().currentCall.conversationId,n=a.store.getState().currentUser.default_device,r&&(null==n?void 0:n.id)&&t?[4,i.attendedTransfer({convid:r,to:t,endpointId:n.id})]:[3,2];case 1:return[2,e.sent()];case 2:return[2]}}))}))},exports.callNumber=function(e,t){var r="sip:".concat(e,"@").concat(t);s.isWebRTC()?u(r):i.callPhysical(e),l.eventDispatch("phone-island-call-started",{})},exports.callSipURI=u,exports.hangupAllExtensions=function(){var e=a.store.getState().currentUser.conversations,t=function(t){Object.keys(e[t]).forEach((function(e){i.hangupConversation({convid:e,endpointId:t})}))};for(var r in e)t(r)},exports.hangupCurrentCall=function(){var e=a.store.getState().currentCall,t=e.outgoing,r=e.accepted;(t||r)&&(s.isWebRTC()?n.hangup():i.hangupPhysical(),a.store.dispatch.player.stopAudioPlayer(),a.store.dispatch.currentCall.reset(),a.store.dispatch.listen.reset(),l.eventDispatch("phone-island-call-end",{}))},exports.muteCurrentCall=function(){s.isWebRTC()?n.muteWebRTC()&&a.store.dispatch.currentCall.updateCurrentCall({muted:!0}):i.mutePhysical(),l.eventDispatch("phone-island-call-muted",{})},exports.parkCurrentCall=function(){var e,t,r,n,s=null===(t=null===(e=null===a.store||void 0===a.store?void 0:a.store.getState())||void 0===e?void 0:e.currentCall)||void 0===t?void 0:t.conversationId,o=null===(n=null===(r=null===a.store||void 0===a.store?void 0:a.store.getState())||void 0===r?void 0:r.currentUser)||void 0===n?void 0:n.conversations,u={};if(s){if(o)for(var c in o)if(o.hasOwnProperty(c)){var d=o[c];Object.keys(d).length>0&&(u={numberParkId:c,idConversation:s})}Object.keys(u).length>0&&(null==u?void 0:u.numberParkId)&&(i.parkConversation({applicantId:null==u?void 0:u.numberParkId,convid:s,endpointId:null==u?void 0:u.numberParkId}),a.store.dispatch.currentCall.setParked(!0),l.eventDispatch("phone-island-call-parked",{}))}},exports.pauseCurrentCall=function(){s.isWebRTC()?n.pauseWebRTC()&&(a.store.dispatch.currentCall.updateCurrentCall({paused:!0}),a.store.dispatch.player.pauseRemoteAudio()):i.pausePhysical(!0),l.eventDispatch("phone-island-call-held",{})},exports.playDtmfAudio=function(e){"*"===e&&(e="star"),"#"===e&&(e="pound"),a.store.dispatch.player.updateStartAudioPlayer({src:o.default["dtmf_".concat(e)]})},exports.unmuteCurrentCall=function(){s.isWebRTC()?n.unmuteWebRTC()&&a.store.dispatch.currentCall.updateCurrentCall({muted:!1}):i.unmutePhysical(),l.eventDispatch("phone-island-call-unmuted",{})},exports.unpauseCurrentCall=function(){s.isWebRTC()?n.unpauseWebRTC()&&(a.store.dispatch.currentCall.updateCurrentCall({paused:!1}),a.store.dispatch.player.playRemoteAudio()):i.pausePhysical(!1),l.eventDispatch("phone-island-call-unheld",{})};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("../webrtc/messages.js"),r=require("../../store/index.js"),n=require("../user/default_device.js"),a=require("../../services/astproxy.js"),s=require("../../static/dtmf/index.js");require("react");var i=require("../../utils/genericFunctions/eventDispatch.js");exports.answerIncomingCall=function(){n.isWebRTC()?t.answerWebRTC():a.answerPhysical(),i.eventDispatch("phone-island-call-answered",{})},exports.attendedTransfer=function(t){return e.__awaiter(this,void 0,void 0,(function(){var n,s;return e.__generator(this,(function(e){switch(e.label){case 0:return n=r.store.getState().currentCall.conversationId,s=r.store.getState().currentUser.default_device,n&&(null==s?void 0:s.id)&&t?[4,a.attendedTransfer({convid:n,to:t,endpointId:s.id})]:[3,2];case 1:return[2,e.sent()];case 2:return[2]}}))}))},exports.callNumber=function(e,r){var s="sip:".concat(e,"@").concat(r);n.isWebRTC()?t.callSipURI(s):a.callPhysical(e),i.eventDispatch("phone-island-call-started",{})},exports.hangupAllExtensions=function(){var e=r.store.getState().currentUser.conversations,t=function(t){Object.keys(e[t]).forEach((function(e){a.hangupConversation({convid:e,endpointId:t})}))};for(var n in e)t(n)},exports.hangupCurrentCall=function(){var e=r.store.getState().currentCall,s=e.outgoing,l=e.accepted;(s||l)&&(n.isWebRTC()?t.hangup():a.hangupPhysical(),r.store.dispatch.player.stopAudioPlayer(),r.store.dispatch.currentCall.reset(),r.store.dispatch.listen.reset(),i.eventDispatch("phone-island-call-end",{}))},exports.muteCurrentCall=function(){n.isWebRTC()?t.muteWebRTC()&&r.store.dispatch.currentCall.updateCurrentCall({muted:!0}):a.mutePhysical(),i.eventDispatch("phone-island-call-muted",{})},exports.parkCurrentCall=function(){var e,t,n,s,l=null===(t=null===(e=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===e?void 0:e.currentCall)||void 0===t?void 0:t.conversationId,o=null===(s=null===(n=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===n?void 0:n.currentUser)||void 0===s?void 0:s.conversations,u={};if(l){if(o)for(var c in o)if(o.hasOwnProperty(c)){var d=o[c];Object.keys(d).length>0&&(u={numberParkId:c,idConversation:l})}Object.keys(u).length>0&&(null==u?void 0:u.numberParkId)&&(a.parkConversation({applicantId:null==u?void 0:u.numberParkId,convid:l,endpointId:null==u?void 0:u.numberParkId}),r.store.dispatch.currentCall.setParked(!0),i.eventDispatch("phone-island-call-parked",{}))}},exports.pauseCurrentCall=function(){n.isWebRTC()?t.pauseWebRTC()&&(r.store.dispatch.currentCall.updateCurrentCall({paused:!0}),r.store.dispatch.player.pauseRemoteAudio()):a.pausePhysical(!0),i.eventDispatch("phone-island-call-held",{})},exports.playDtmfAudio=function(e){"*"===e&&(e="star"),"#"===e&&(e="pound"),r.store.dispatch.player.updateStartAudioPlayer({src:s.default["dtmf_".concat(e)]})},exports.unmuteCurrentCall=function(){n.isWebRTC()?t.unmuteWebRTC()&&r.store.dispatch.currentCall.updateCurrentCall({muted:!1}):a.unmutePhysical(),i.eventDispatch("phone-island-call-unmuted",{})},exports.unpauseCurrentCall=function(){n.isWebRTC()?t.unpauseWebRTC()&&(r.store.dispatch.currentCall.updateCurrentCall({paused:!1}),r.store.dispatch.player.playRemoteAudio()):a.pausePhysical(!1),i.eventDispatch("phone-island-call-unheld",{})};
2
2
  //# sourceMappingURL=call.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"call.js","sources":["../../../src/lib/phone/call.ts"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { getSupportedDevices } from '../devices/devices'\nimport Janus from '../webrtc/janus'\nimport {\n call,\n hangup,\n answerWebRTC,\n muteWebRTC,\n unmuteWebRTC,\n pauseWebRTC,\n unpauseWebRTC,\n} from '../webrtc/messages'\nimport { store } from '../../store'\nimport { isWebRTC } from '../user/default_device'\nimport {\n blindTransfer as blindTransferRequest,\n attendedTransfer as attendedTransferRequest,\n hangupPhysical,\n answerPhysical,\n mutePhysical,\n unmutePhysical,\n pausePhysical,\n callPhysical,\n} from '../../services/astproxy'\nimport dtmfAudios from '../../static/dtmf'\nimport { hangupConversation, parkConversation } from '../../services/astproxy'\nimport { eventDispatch } from '../../utils'\n\n/**\n * Starts a call to a number\n * @param number The number string\n */\nexport function callNumber(number: string, sipHost: string) {\n const sipURI = `sip:${number}@${sipHost}`\n if (isWebRTC()) {\n callSipURI(sipURI)\n } else {\n callPhysical(number)\n }\n\n eventDispatch('phone-island-call-started', {})\n}\n\n/**\n * Starts a call to a SIP URI\n *\n * @param sipURI The SIP URI string\n */\nexport function callSipURI(sipURI: string) {\n getSupportedDevices(async () => {\n // @ts-ignore\n Janus.log('This is a SIP call')\n await call(sipURI, {\n audio: {\n mandatory: {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n googEchoCancellation: true,\n googAutoGainControl: true,\n googNoiseSuppression: true,\n googHighpassFilter: true,\n googTypingNoiseDetection: true,\n googNoiseReduction: true,\n volume: 1.0,\n },\n },\n audioSend: true,\n audioRecv: true,\n videoSend: false,\n videoRecv: false,\n })\n })\n}\n\n/**\n * Answer incoming call\n */\nexport function answerIncomingCall() {\n if (isWebRTC()) {\n answerWebRTC()\n } else {\n answerPhysical()\n }\n\n eventDispatch('phone-island-call-answered', {})\n}\n\n/**\n * Hangup all the conversations of all the extensions of the current user\n */\nexport function hangupAllExtensions() {\n // Get current user endpoints\n const { conversations } = store.getState().currentUser\n // Hangup all the conversations of all extensions of the current user\n for (const extension in conversations) {\n const conversationsIds = Object.keys(conversations[extension])\n conversationsIds.forEach((id) => {\n hangupConversation({\n convid: id,\n endpointId: extension,\n })\n })\n }\n}\n\n/**\n * Hangup current call\n */\nexport function hangupCurrentCall() {\n const { outgoing, accepted } = store.getState().currentCall\n if (outgoing || accepted) {\n if (isWebRTC()) {\n hangup()\n } else {\n hangupPhysical()\n }\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\n store.dispatch.listen.reset()\n\n eventDispatch('phone-island-call-end', {})\n }\n}\n\n/**\n * Mute the current call\n */\nexport function muteCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const muted = muteWebRTC()\n if (muted) {\n store.dispatch.currentCall.updateCurrentCall({\n muted: true,\n })\n }\n } else {\n mutePhysical()\n }\n eventDispatch('phone-island-call-muted', {})\n}\n\n/**\n * Unmute the current call\n */\nexport function unmuteCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const unmuted = unmuteWebRTC()\n if (unmuted) {\n store.dispatch.currentCall.updateCurrentCall({\n muted: false,\n })\n }\n } else {\n unmutePhysical()\n }\n eventDispatch('phone-island-call-unmuted', {})\n}\n\n/**\n * Pause the current call\n */\nexport function pauseCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const paused = pauseWebRTC()\n if (paused) {\n store.dispatch.currentCall.updateCurrentCall({\n paused: true,\n })\n // Pause remote audio\n store.dispatch.player.pauseRemoteAudio()\n }\n } else {\n pausePhysical(true)\n }\n eventDispatch('phone-island-call-held', {})\n}\n\n/**\n * Unpause the current call\n */\nexport function unpauseCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const unpaused = unpauseWebRTC()\n if (unpaused) {\n store.dispatch.currentCall.updateCurrentCall({\n paused: false,\n })\n // Play remote audio\n store.dispatch.player.playRemoteAudio()\n }\n } else {\n pausePhysical(false)\n }\n eventDispatch('phone-island-call-unheld', {})\n}\n\n/**\n * Transfer the current call through a blind transfer (not in use)\n */\nexport async function blindTransfer(number: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n const { default_device } = store.getState().currentUser\n // Transfer the call through blind transfer\n if (conversationId && default_device?.id && number) {\n return await blindTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: default_device.id,\n })\n }\n}\n\n/**\n * Transfer the current call through a attended transfer\n */\nexport async function attendedTransfer(number: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n const { default_device } = store.getState().currentUser\n // Transfer the call through attended transfer\n if (conversationId && default_device?.id && number) {\n return await attendedTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: default_device.id,\n })\n }\n}\n\n/**\n * Play the dtmf audio files\n */\nexport function playDtmfAudio(key: string) {\n if (key === '*') key = 'star'\n if (key === '#') key = 'pound'\n store.dispatch.player.updateStartAudioPlayer({ src: dtmfAudios[`dtmf_${key}`] })\n}\n\n/**\n * Park the current call\n */\nexport function parkCurrentCall() {\n const conversationId = store?.getState()?.currentCall?.conversationId\n const userConversationInformations = store?.getState()?.currentUser?.conversations\n\n let parkingInformation: any = {}\n\n if (conversationId) {\n if (userConversationInformations) {\n for (const key in userConversationInformations) {\n if (userConversationInformations.hasOwnProperty(key)) {\n const conversation = userConversationInformations[key]\n if (Object.keys(conversation).length > 0) {\n parkingInformation = {\n numberParkId: key,\n idConversation: conversationId,\n }\n }\n }\n }\n }\n\n if (Object.keys(parkingInformation).length > 0) {\n if (parkingInformation?.numberParkId) {\n // If park information are not empty park call\n parkConversation({\n applicantId: parkingInformation?.numberParkId,\n convid: conversationId,\n endpointId: parkingInformation?.numberParkId,\n })\n\n store.dispatch.currentCall.setParked(true)\n\n eventDispatch('phone-island-call-parked', {})\n }\n }\n }\n}\n"],"names":["callSipURI","sipURI","_this","this","getSupportedDevices","__awaiter","Janus","log","call","audio","mandatory","echoCancellation","noiseSuppression","autoGainControl","googEchoCancellation","googAutoGainControl","googNoiseSuppression","googHighpassFilter","googTypingNoiseDetection","googNoiseReduction","volume","audioSend","audioRecv","videoSend","videoRecv","_a","sent","isWebRTC","answerWebRTC","answerPhysical","eventDispatch","number","conversationId","store","getState","currentCall","default_device","currentUser","id","attendedTransferRequest","convid","to","endpointId","sipHost","concat","callPhysical","conversations","extension","Object","keys","forEach","hangupConversation","outgoing","accepted","hangup","hangupPhysical","dispatch","player","stopAudioPlayer","reset","listen","muteWebRTC","updateCurrentCall","muted","mutePhysical","_b","userConversationInformations","_d","_c","parkingInformation","key","hasOwnProperty","conversation","length","numberParkId","idConversation","parkConversation","applicantId","setParked","pauseWebRTC","paused","pauseRemoteAudio","pausePhysical","updateStartAudioPlayer","src","dtmfAudios","unmuteWebRTC","unmutePhysical","unpauseWebRTC","playRemoteAudio"],"mappings":"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"}
1
+ {"version":3,"file":"call.js","sources":["../../../src/lib/phone/call.ts"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport {\n callSipURI,\n hangup,\n answerWebRTC,\n muteWebRTC,\n unmuteWebRTC,\n pauseWebRTC,\n unpauseWebRTC,\n} from '../webrtc/messages'\nimport { store } from '../../store'\nimport { isWebRTC } from '../user/default_device'\nimport {\n blindTransfer as blindTransferRequest,\n attendedTransfer as attendedTransferRequest,\n hangupPhysical,\n answerPhysical,\n mutePhysical,\n unmutePhysical,\n pausePhysical,\n callPhysical,\n} from '../../services/astproxy'\nimport dtmfAudios from '../../static/dtmf'\nimport { hangupConversation, parkConversation } from '../../services/astproxy'\nimport { eventDispatch } from '../../utils'\n\n/**\n * Starts a call to a number\n * @param number The number string\n */\nexport function callNumber(number: string, sipHost: string) {\n const sipURI = `sip:${number}@${sipHost}`\n if (isWebRTC()) {\n callSipURI(sipURI)\n } else {\n callPhysical(number)\n }\n\n eventDispatch('phone-island-call-started', {})\n}\n\n/**\n * Answer incoming call\n */\nexport function answerIncomingCall() {\n if (isWebRTC()) {\n answerWebRTC()\n } else {\n answerPhysical()\n }\n\n eventDispatch('phone-island-call-answered', {})\n}\n\n/**\n * Hangup all the conversations of all the extensions of the current user\n */\nexport function hangupAllExtensions() {\n // Get current user endpoints\n const { conversations } = store.getState().currentUser\n // Hangup all the conversations of all extensions of the current user\n for (const extension in conversations) {\n const conversationsIds = Object.keys(conversations[extension])\n conversationsIds.forEach((id) => {\n hangupConversation({\n convid: id,\n endpointId: extension,\n })\n })\n }\n}\n\n/**\n * Hangup current call\n */\nexport function hangupCurrentCall() {\n const { outgoing, accepted } = store.getState().currentCall\n if (outgoing || accepted) {\n if (isWebRTC()) {\n hangup()\n } else {\n hangupPhysical()\n }\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\n store.dispatch.listen.reset()\n\n eventDispatch('phone-island-call-end', {})\n }\n}\n\n/**\n * Mute the current call\n */\nexport function muteCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const muted = muteWebRTC()\n if (muted) {\n store.dispatch.currentCall.updateCurrentCall({\n muted: true,\n })\n }\n } else {\n mutePhysical()\n }\n eventDispatch('phone-island-call-muted', {})\n}\n\n/**\n * Unmute the current call\n */\nexport function unmuteCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const unmuted = unmuteWebRTC()\n if (unmuted) {\n store.dispatch.currentCall.updateCurrentCall({\n muted: false,\n })\n }\n } else {\n unmutePhysical()\n }\n eventDispatch('phone-island-call-unmuted', {})\n}\n\n/**\n * Pause the current call\n */\nexport function pauseCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const paused = pauseWebRTC()\n if (paused) {\n store.dispatch.currentCall.updateCurrentCall({\n paused: true,\n })\n // Pause remote audio\n store.dispatch.player.pauseRemoteAudio()\n }\n } else {\n pausePhysical(true)\n }\n eventDispatch('phone-island-call-held', {})\n}\n\n/**\n * Unpause the current call\n */\nexport function unpauseCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const unpaused = unpauseWebRTC()\n if (unpaused) {\n store.dispatch.currentCall.updateCurrentCall({\n paused: false,\n })\n // Play remote audio\n store.dispatch.player.playRemoteAudio()\n }\n } else {\n pausePhysical(false)\n }\n eventDispatch('phone-island-call-unheld', {})\n}\n\n/**\n * Transfer the current call through a blind transfer (not in use)\n */\nexport async function blindTransfer(number: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n const { default_device } = store.getState().currentUser\n // Transfer the call through blind transfer\n if (conversationId && default_device?.id && number) {\n return await blindTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: default_device.id,\n })\n }\n}\n\n/**\n * Transfer the current call through a attended transfer\n */\nexport async function attendedTransfer(number: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n const { default_device } = store.getState().currentUser\n // Transfer the call through attended transfer\n if (conversationId && default_device?.id && number) {\n return await attendedTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: default_device.id,\n })\n }\n}\n\n/**\n * Play the dtmf audio files\n */\nexport function playDtmfAudio(key: string) {\n if (key === '*') key = 'star'\n if (key === '#') key = 'pound'\n store.dispatch.player.updateStartAudioPlayer({ src: dtmfAudios[`dtmf_${key}`] })\n}\n\n/**\n * Park the current call\n */\nexport function parkCurrentCall() {\n const conversationId = store?.getState()?.currentCall?.conversationId\n const userConversationInformations = store?.getState()?.currentUser?.conversations\n\n let parkingInformation: any = {}\n\n if (conversationId) {\n if (userConversationInformations) {\n for (const key in userConversationInformations) {\n if (userConversationInformations.hasOwnProperty(key)) {\n const conversation = userConversationInformations[key]\n if (Object.keys(conversation).length > 0) {\n parkingInformation = {\n numberParkId: key,\n idConversation: conversationId,\n }\n }\n }\n }\n }\n\n if (Object.keys(parkingInformation).length > 0) {\n if (parkingInformation?.numberParkId) {\n // If park information are not empty park call\n parkConversation({\n applicantId: parkingInformation?.numberParkId,\n convid: conversationId,\n endpointId: parkingInformation?.numberParkId,\n })\n\n store.dispatch.currentCall.setParked(true)\n\n eventDispatch('phone-island-call-parked', {})\n }\n }\n }\n}\n"],"names":["isWebRTC","answerWebRTC","answerPhysical","eventDispatch","number","conversationId","store","getState","currentCall","default_device","currentUser","id","attendedTransferRequest","convid","to","endpointId","_a","sipHost","sipURI","concat","callSipURI","callPhysical","conversations","extension","Object","keys","forEach","hangupConversation","outgoing","accepted","hangup","hangupPhysical","dispatch","player","stopAudioPlayer","reset","listen","muteWebRTC","updateCurrentCall","muted","mutePhysical","_b","userConversationInformations","_d","_c","parkingInformation","key","hasOwnProperty","conversation","length","numberParkId","idConversation","parkConversation","applicantId","setParked","pauseWebRTC","paused","pauseRemoteAudio","pausePhysical","updateStartAudioPlayer","src","dtmfAudios","unmuteWebRTC","unmutePhysical","unpauseWebRTC","playRemoteAudio"],"mappings":"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"}
@@ -10,13 +10,7 @@ export declare function hangup(): void;
10
10
  export declare function unregister(): void;
11
11
  export declare function detach(): any;
12
12
  export declare function handleRemote(jsep: any): void;
13
- /**
14
- * Starts a call to a sipuri
15
- *
16
- * @param sipURI The sipuri to be called
17
- * @param mediaObj The object containing the media constrains
18
- * @returns
19
- */
13
+ export declare function callSipURI(sipURI: string): void;
20
14
  export declare function call(sipURI: string, mediaObj: object): Promise<unknown>;
21
15
  /**
22
16
  * Mute current call so the counterpart can't listen the current user
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./janus.js"),t=require("../../store/index.js"),r=require("../../node_modules/webrtc-adapter/src/js/adapter_core.js");exports.answerWebRTC=function(){var r=t.store.getState().webrtc,s=r.sipcall,o=r.jsepGlobal;s&&o&&s.createAnswer({jsep:o,media:{audio:!0,videoSend:!1,videoRecv:!1},success:function(e){s.send({message:{request:"accept"},jsep:e})},error:function(t){e.default.error("WebRTC error:",t),s.send({message:{request:"decline",code:480}})}})},exports.call=function(r,s){return new Promise((function(o,a){var n=t.store.getState().webrtc.sipcall;r&&s&&n.createOffer({media:s,success:function(t){e.default.debug("Got SDP!"),e.default.debug(t),n.send({message:{request:"call",uri:r},jsep:t}),o(!0)},error:function(t){e.default.error("ebRTC error...",t),e.default.error("WebRTC error call on createOffer: ",t),a(!1)}})}))},exports.detach=function(){var e=t.store.getState().webrtc.sipcall;if(e)return e.detach()},exports.handleRemote=function(e){var r=t.store.getState().webrtc.sipcall;r&&r.handleRemoteJsep({jsep:e,error:function(){r.send({message:{request:"hangup"}}),r.hangup()}})},exports.hangup=function(){var e=t.store.getState().webrtc.sipcall;e&&e.send({message:{request:"hangup"}})},exports.muteWebRTC=function(){var e=t.store.getState().webrtc.sipcall;return e.muteAudio(),e.isAudioMuted()},exports.pauseWebRTC=function(){var e=t.store.getState().webrtc.sipcall;try{return e.send({message:{request:"hold"}}),!0}catch(e){return console.error(e),!1}},exports.register=function(e){var r=e.sipExten,s=e.sipSecret,o=e.sipHost,a=e.sipPort,n=t.store.getState().webrtc.sipcall,c=t.store.getState().currentUser.name;n&&n.send({message:{request:"register",username:"sip:".concat(r,"@").concat(o),display_name:c||"",secret:s,proxy:"sip:".concat(o,":").concat(a),outbound_proxy:"sip:".concat(o,":").concat(a),sips:!1,refresh:!1}})},exports.sendDTMF=function(e){var s=t.store.getState().webrtc.sipcall;"chrome"===r.default.browserDetails.browser?s.dtmf({dtmf:{tones:e}}):s.send({message:{request:"dtmf_info",digit:"".concat(e)}})},exports.unmuteWebRTC=function(){var e=t.store.getState().webrtc.sipcall;return e.unmuteAudio(),!e.isAudioMuted()},exports.unpauseWebRTC=function(){var e=t.store.getState().webrtc.sipcall;try{return e.send({message:{request:"unhold"}}),!0}catch(e){return console.error(e),!1}},exports.unregister=function(){var e=t.store.getState().webrtc.sipcall;e&&e.send({message:{request:"unregister"}})};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("./janus.js"),r=require("../../store/index.js"),o=require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),s=require("../devices/devices.js");require("react");var n=require("../../utils/genericFunctions/localStorage.js");function i(e,o){return new Promise((function(s,n){var i=r.store.getState().webrtc.sipcall;e&&o&&i.createOffer({media:o,success:function(r){t.default.debug("Got SDP!"),t.default.debug(r),i.send({message:{request:"call",uri:e},jsep:r}),s(!0)},error:function(e){t.default.error("WebRTC error...",e),t.default.error("WebRTC error call on createOffer: ",e),n(!1)}})}))}exports.answerWebRTC=function(){var e=r.store.getState().webrtc,o=e.sipcall,s=e.jsepGlobal;if(o&&s){var i=n.getJSONItem("phone-island-audio-input-device").deviceId||null;o.createAnswer({jsep:s,media:{audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,googEchoCancellation:!0,googAutoGainControl:!0,googNoiseSuppression:!0,googHighpassFilter:!0,googTypingNoiseDetection:!0,googNoiseReduction:!0,volume:1,deviceId:i},audioSend:!0,audioRecv:!1,videoSend:!1,videoRecv:!1},success:function(e){o.send({message:{request:"accept"},jsep:e})},error:function(e){t.default.error("WebRTC error:",e),o.send({message:{request:"decline",code:480}})}})}},exports.call=i,exports.callSipURI=function(r){var o=this;s.getSupportedDevices((function(){return e.__awaiter(o,void 0,void 0,(function(){var o;return e.__generator(this,(function(e){switch(e.label){case 0:return t.default.log("This is a SIP call"),o=n.getJSONItem("phone-island-audio-input-device").deviceId||null,[4,i(r,{audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,googEchoCancellation:!0,googAutoGainControl:!0,googNoiseSuppression:!0,googHighpassFilter:!0,googTypingNoiseDetection:!0,googNoiseReduction:!0,volume:1,deviceId:o},audioSend:!0,audioRecv:!0,videoSend:!1,videoRecv:!1})];case 1:return e.sent(),[2]}}))}))}))},exports.detach=function(){var e=r.store.getState().webrtc.sipcall;if(e)return e.detach()},exports.handleRemote=function(e){var t=r.store.getState().webrtc.sipcall;t&&t.handleRemoteJsep({jsep:e,error:function(){t.send({message:{request:"hangup"}}),t.hangup()}})},exports.hangup=function(){var e=r.store.getState().webrtc.sipcall;e&&e.send({message:{request:"hangup"}})},exports.muteWebRTC=function(){var e=r.store.getState().webrtc.sipcall;return e.muteAudio(),e.isAudioMuted()},exports.pauseWebRTC=function(){var e=r.store.getState().webrtc.sipcall;try{return e.send({message:{request:"hold"}}),!0}catch(e){return console.error(e),!1}},exports.register=function(e){var t=e.sipExten,o=e.sipSecret,s=e.sipHost,n=e.sipPort,i=r.store.getState().webrtc.sipcall,a=r.store.getState().currentUser.name;i&&i.send({message:{request:"register",username:"sip:".concat(t,"@").concat(s),display_name:a||"",secret:o,proxy:"sip:".concat(s,":").concat(n),outbound_proxy:"sip:".concat(s,":").concat(n),sips:!1,refresh:!1}})},exports.sendDTMF=function(e){var t=r.store.getState().webrtc.sipcall;"chrome"===o.default.browserDetails.browser?t.dtmf({dtmf:{tones:e}}):t.send({message:{request:"dtmf_info",digit:"".concat(e)}})},exports.unmuteWebRTC=function(){var e=r.store.getState().webrtc.sipcall;return e.unmuteAudio(),!e.isAudioMuted()},exports.unpauseWebRTC=function(){var e=r.store.getState().webrtc.sipcall;try{return e.send({message:{request:"unhold"}}),!0}catch(e){return console.error(e),!1}},exports.unregister=function(){var e=r.store.getState().webrtc.sipcall;e&&e.send({message:{request:"unregister"}})};
2
2
  //# sourceMappingURL=messages.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sources":["../../../src/lib/webrtc/messages.ts"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport Janus from './janus'\nimport { store } from '../../store'\nimport adapter from 'webrtc-adapter'\n\nexport function register({\n sipExten,\n sipSecret,\n sipHost,\n sipPort,\n}: {\n sipExten: string\n sipSecret: string\n sipHost: string\n sipPort: string\n}) {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n const { name } = store.getState().currentUser\n if (sipcall) {\n sipcall.send({\n message: {\n request: 'register',\n username: `sip:${sipExten}@${sipHost}`,\n display_name: name || '',\n secret: sipSecret,\n proxy: `sip:${sipHost}:${sipPort}`,\n outbound_proxy: `sip:${sipHost}:${sipPort}`,\n sips: false,\n refresh: false,\n },\n })\n }\n}\n\nexport function answerWebRTC() {\n const { sipcall, jsepGlobal }: { sipcall: any; jsepGlobal: any } = store.getState().webrtc\n if (sipcall && jsepGlobal) {\n sipcall.createAnswer({\n jsep: jsepGlobal,\n media: {\n audio: true,\n videoSend: false,\n videoRecv: false,\n },\n success: (jsep) => {\n sipcall.send({\n message: {\n request: 'accept',\n },\n jsep: jsep,\n })\n },\n error: (error) => {\n // @ts-ignore\n Janus.error('WebRTC error:', error)\n sipcall.send({\n message: {\n request: 'decline',\n code: 480,\n },\n })\n },\n })\n }\n}\n\nexport function decline() {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipcall) {\n sipcall.send({\n message: {\n request: 'decline',\n },\n })\n }\n}\n\nexport function hangup() {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipcall) {\n sipcall.send({\n message: {\n request: 'hangup',\n },\n })\n }\n}\n\nexport function unregister() {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipcall) {\n sipcall.send({\n message: {\n request: 'unregister',\n },\n })\n }\n}\n\nexport function detach() {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipcall) {\n return sipcall.detach()\n }\n}\n\nexport function handleRemote(jsep) {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipcall) {\n sipcall.handleRemoteJsep({\n jsep: jsep,\n error: function () {\n var hangup = {\n request: 'hangup',\n }\n sipcall.send({\n message: hangup,\n })\n sipcall.hangup()\n },\n })\n }\n}\n\n/**\n * Starts a call to a sipuri\n *\n * @param sipURI The sipuri to be called\n * @param mediaObj The object containing the media constrains\n * @returns\n */\nexport function call(sipURI: string, mediaObj: object) {\n return new Promise((resolve, reject) => {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipURI && mediaObj) {\n sipcall.createOffer({\n media: mediaObj,\n success: function (jsep: any) {\n // @ts-ignore\n Janus.debug('Got SDP!')\n // @ts-ignore\n Janus.debug(jsep)\n sipcall.send({\n message: {\n request: 'call',\n uri: sipURI,\n },\n jsep: jsep,\n })\n resolve(true)\n },\n error: function (error) {\n // @ts-ignore\n Janus.error('ebRTC error...', error)\n // @ts-ignore\n Janus.error('WebRTC error call on createOffer: ', error)\n reject(false)\n },\n })\n }\n })\n}\n\n/**\n * Mute current call so the counterpart can't listen the current user\n * @returns The muted status\n */\nexport function muteWebRTC(): boolean {\n // Initialize sipcall\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n // Uset the janus library functions to mute call\n sipcall.muteAudio()\n return sipcall.isAudioMuted()\n}\n\n/**\n * Unmute current call so the counterpart can listen the current user\n * @returns The muted status\n */\nexport function unmuteWebRTC(): boolean {\n // Initialize sipcall\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n // Use the janus library functions to unmute call\n sipcall.unmuteAudio()\n return !sipcall.isAudioMuted()\n}\n\n/**\n * Pause current call so the counterpart listens the pause ringtone\n * @returns The true if no errors occurs\n */\nexport function pauseWebRTC() {\n // Initialize sipcall\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n // Send hold message\n try {\n sipcall.send({\n message: {\n request: 'hold',\n },\n })\n return true\n } catch (err) {\n console.error(err)\n return false\n }\n}\n\n/**\n * Unpause the current call so the counterpart listens the current user\n * @returns The true if no errors occurs\n */\nexport function unpauseWebRTC() {\n // Initialize sipcall\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n // Send hold message\n try {\n sipcall.send({\n message: {\n request: 'unhold',\n },\n })\n return true\n } catch (err) {\n console.error(err)\n return false\n }\n}\n\n/**\n * Send DTMF messages to Janus\n */\nexport function sendDTMF(key: string) {\n // Initialize sipcall\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (adapter.browserDetails.browser === 'chrome') {\n sipcall.dtmf({\n dtmf: {\n tones: key,\n },\n })\n } else {\n sipcall.send({\n message: {\n request: 'dtmf_info',\n digit: `${key}`,\n },\n })\n }\n}\n"],"names":["_a","store","getState","webrtc","sipcall","jsepGlobal","createAnswer","jsep","media","audio","videoSend","videoRecv","success","send","message","request","error","Janus","code","sipURI","mediaObj","Promise","resolve","reject","createOffer","debug","uri","detach","handleRemoteJsep","hangup","muteAudio","isAudioMuted","err","console","sipExten","sipSecret","sipHost","sipPort","name","currentUser","username","concat","display_name","secret","proxy","outbound_proxy","sips","refresh","key","adapter","browserDetails","browser","dtmf","tones","digit","unmuteAudio"],"mappings":"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"}
1
+ {"version":3,"file":"messages.js","sources":["../../../src/lib/webrtc/messages.ts"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport Janus from './janus'\nimport { store } from '../../store'\nimport adapter from 'webrtc-adapter'\nimport { getSupportedDevices } from '../devices/devices'\nimport { getJSONItem } from '../../utils'\n\nexport function register({\n sipExten,\n sipSecret,\n sipHost,\n sipPort,\n}: {\n sipExten: string\n sipSecret: string\n sipHost: string\n sipPort: string\n}) {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n const { name } = store.getState().currentUser\n if (sipcall) {\n sipcall.send({\n message: {\n request: 'register',\n username: `sip:${sipExten}@${sipHost}`,\n display_name: name || '',\n secret: sipSecret,\n proxy: `sip:${sipHost}:${sipPort}`,\n outbound_proxy: `sip:${sipHost}:${sipPort}`,\n sips: false,\n refresh: false,\n },\n })\n }\n}\n\nexport function answerWebRTC() {\n const { sipcall, jsepGlobal }: { sipcall: any; jsepGlobal: any } = store.getState().webrtc\n if (sipcall && jsepGlobal) {\n // get current input device id from localstorage\n let currentDeviceInputId = getJSONItem('phone-island-audio-input-device').deviceId || null;\n\n sipcall.createAnswer({\n jsep: jsepGlobal,\n /*media: {\n audio: true,\n videoSend: false,\n videoRecv: false,\n },*/\n media: {\n audio: {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n googEchoCancellation: true,\n googAutoGainControl: true,\n googNoiseSuppression: true,\n googHighpassFilter: true,\n googTypingNoiseDetection: true,\n googNoiseReduction: true,\n volume: 1.0,\n deviceId: currentDeviceInputId,\n },\n audioSend: true,\n audioRecv: false,\n videoSend: false,\n videoRecv: false,\n },\n success: (jsep) => {\n sipcall.send({\n message: {\n request: 'accept',\n },\n jsep: jsep,\n })\n },\n error: (error) => {\n // @ts-ignore\n Janus.error('WebRTC error:', error)\n sipcall.send({\n message: {\n request: 'decline',\n code: 480,\n },\n })\n },\n })\n }\n}\n\nexport function decline() {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipcall) {\n sipcall.send({\n message: {\n request: 'decline',\n },\n })\n }\n}\n\nexport function hangup() {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipcall) {\n sipcall.send({\n message: {\n request: 'hangup',\n },\n })\n }\n}\n\nexport function unregister() {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipcall) {\n sipcall.send({\n message: {\n request: 'unregister',\n },\n })\n }\n}\n\nexport function detach() {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipcall) {\n return sipcall.detach()\n }\n}\n\nexport function handleRemote(jsep) {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipcall) {\n sipcall.handleRemoteJsep({\n jsep: jsep,\n error: function () {\n var hangup = {\n request: 'hangup',\n }\n sipcall.send({\n message: hangup,\n })\n sipcall.hangup()\n },\n })\n }\n}\n\nexport function callSipURI(sipURI: string) {\n getSupportedDevices(async () => {\n // @ts-ignore\n Janus.log('This is a SIP call')\n\n // get current input device id from localstorage\n let currentDeviceInputId = getJSONItem('phone-island-audio-input-device').deviceId || null\n\n await call(sipURI, {\n audio: {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n googEchoCancellation: true,\n googAutoGainControl: true,\n googNoiseSuppression: true,\n googHighpassFilter: true,\n googTypingNoiseDetection: true,\n googNoiseReduction: true,\n volume: 1.0,\n deviceId: currentDeviceInputId,\n },\n audioSend: true,\n audioRecv: true,\n videoSend: false,\n videoRecv: false,\n })\n })\n}\n\nexport function call(sipURI: string, mediaObj: object) {\n return new Promise((resolve, reject) => {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipURI && mediaObj) {\n sipcall.createOffer({\n media: mediaObj,\n success: function (jsep: any) {\n // @ts-ignore\n Janus.debug('Got SDP!')\n // @ts-ignore\n Janus.debug(jsep)\n sipcall.send({\n message: {\n request: 'call',\n uri: sipURI,\n },\n jsep: jsep,\n })\n resolve(true)\n },\n error: function (error) {\n // @ts-ignore\n Janus.error('WebRTC error...', error)\n // @ts-ignore\n Janus.error('WebRTC error call on createOffer: ', error)\n reject(false)\n },\n })\n }\n })\n}\n\n/**\n * Mute current call so the counterpart can't listen the current user\n * @returns The muted status\n */\nexport function muteWebRTC(): boolean {\n // Initialize sipcall\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n // Uset the janus library functions to mute call\n sipcall.muteAudio()\n return sipcall.isAudioMuted()\n}\n\n/**\n * Unmute current call so the counterpart can listen the current user\n * @returns The muted status\n */\nexport function unmuteWebRTC(): boolean {\n // Initialize sipcall\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n // Use the janus library functions to unmute call\n sipcall.unmuteAudio()\n return !sipcall.isAudioMuted()\n}\n\n/**\n * Pause current call so the counterpart listens the pause ringtone\n * @returns The true if no errors occurs\n */\nexport function pauseWebRTC() {\n // Initialize sipcall\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n // Send hold message\n try {\n sipcall.send({\n message: {\n request: 'hold',\n },\n })\n return true\n } catch (err) {\n console.error(err)\n return false\n }\n}\n\n/**\n * Unpause the current call so the counterpart listens the current user\n * @returns The true if no errors occurs\n */\nexport function unpauseWebRTC() {\n // Initialize sipcall\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n // Send hold message\n try {\n sipcall.send({\n message: {\n request: 'unhold',\n },\n })\n return true\n } catch (err) {\n console.error(err)\n return false\n }\n}\n\n/**\n * Send DTMF messages to Janus\n */\nexport function sendDTMF(key: string) {\n // Initialize sipcall\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (adapter.browserDetails.browser === 'chrome') {\n sipcall.dtmf({\n dtmf: {\n tones: key,\n },\n })\n } else {\n sipcall.send({\n message: {\n request: 'dtmf_info',\n digit: `${key}`,\n },\n })\n }\n}\n"],"names":["call","sipURI","mediaObj","Promise","resolve","reject","sipcall","store","getState","webrtc","createOffer","media","success","jsep","Janus","debug","send","message","request","uri","error","_a","jsepGlobal","currentDeviceInputId","getJSONItem","deviceId","createAnswer","audio","echoCancellation","noiseSuppression","autoGainControl","googEchoCancellation","googAutoGainControl","googNoiseSuppression","googHighpassFilter","googTypingNoiseDetection","googNoiseReduction","volume","audioSend","audioRecv","videoSend","videoRecv","code","_this","this","getSupportedDevices","__awaiter","log","sent","detach","handleRemoteJsep","hangup","muteAudio","isAudioMuted","err","console","sipExten","sipSecret","sipHost","sipPort","name","currentUser","username","concat","display_name","secret","proxy","outbound_proxy","sips","refresh","key","adapter","browserDetails","browser","dtmf","tones","digit","unmuteAudio"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nethesis/phone-island",
3
3
  "author": "Nethesis",
4
- "version": "0.7.121",
4
+ "version": "0.7.122",
5
5
  "description": "NethVoice CTI Phone Island",
6
6
  "keywords": [
7
7
  "nethserver",