@nethesis/phone-island 0.7.95 → 0.7.97

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/components/CallView/Actions.js +1 -1
  2. package/dist/components/CallView/Actions.js.map +1 -1
  3. package/dist/components/CallView/index.js +1 -1
  4. package/dist/components/CallView/index.js.map +1 -1
  5. package/dist/components/IslandMotion.js +1 -1
  6. package/dist/components/IslandMotion.js.map +1 -1
  7. package/dist/components/Socket.js +1 -1
  8. package/dist/components/Socket.js.map +1 -1
  9. package/dist/events/SocketEvents.d.ts +6 -0
  10. package/dist/events/SocketEvents.js +1 -1
  11. package/dist/events/SocketEvents.js.map +1 -1
  12. package/dist/lib/phone/call.d.ts +1 -0
  13. package/dist/lib/phone/call.js +1 -1
  14. package/dist/lib/phone/call.js.map +1 -1
  15. package/dist/models/currentCall.d.ts +65 -0
  16. package/dist/models/currentCall.js +1 -1
  17. package/dist/models/currentCall.js.map +1 -1
  18. package/dist/models/island.d.ts +4 -0
  19. package/dist/models/island.js +1 -1
  20. package/dist/models/island.js.map +1 -1
  21. package/dist/models/motions.d.ts +16 -0
  22. package/dist/models/motions.js +1 -1
  23. package/dist/models/motions.js.map +1 -1
  24. package/dist/node_modules/@nethesis/nethesis-light-svg-icons/index.mjs.js +1 -1
  25. package/dist/node_modules/@nethesis/nethesis-light-svg-icons/index.mjs.js.map +1 -1
  26. package/dist/node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js +1 -1
  27. package/dist/node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js.map +1 -1
  28. package/dist/services/astproxy.d.ts +5 -0
  29. package/dist/services/astproxy.js +1 -1
  30. package/dist/services/astproxy.js.map +1 -1
  31. package/package.json +1 -1
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../node_modules/@nethesis/nethesis-light-svg-icons/index.mjs.js"),r=require("../../lib/phone/call.js"),a=require("../../static/icons/PhoneKeypadLight.js"),n=require("../../static/icons/PhoneKeypadSolid.js");require("../../node_modules/react-redux/es/index.js");var o=require("../../store/index.js");require("../../node_modules/socket.io-client/build/esm/index.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../../lib/webrtc/janus.js");var i=require("../../lib/webrtc/messages.js");require("../../node_modules/mic-check/lib/index.js");var l=require("../../static/outgoing_ringtone.js");require("../Island.js");var s=require("../Button.js"),u=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),c=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js");require("../../node_modules/framer-motion/dist/framer-motion.js");var d=require("../TransferView/TransferActions.js"),f=require("../../node_modules/react-tooltip/dist/react-tooltip.min.cjs.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 q=j(e);exports.default=function(){var e=m.useSelector((function(e){return e.currentCall})),j=e.paused,v=e.muted,y=m.useSelector((function(e){return e.island})).view,w=m.useSelector((function(e){return e.currentCall})).transferring,x=p.useDispatch();return q.default.createElement(q.default.Fragment,null,q.default.createElement("div",{className:"pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center"},q.default.createElement(s.Button,{variant:"default",active:!!j,onClick:function(){return j?r.unpauseCurrentCall():r.pauseCurrentCall()},"data-tooltip-id":"tooltip","data-tooltip-content":j?"Play":"Pause"},j?q.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:c.faPlay}):q.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:t.faPause})),q.default.createElement(s.Button,{variant:"default",active:!!v,onClick:function(){return v?r.unmuteCurrentCall():r.muteCurrentCall()},"data-tooltip-id":"tooltip","data-tooltip-content":v?"Unmute":"Mute"},v?q.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:c.faMicrophoneSlash}):q.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:t.faMicrophone})),q.default.createElement(s.Button,{active:w,onClick:w?function(){i.sendDTMF("*"),o.store.getState().player.audioPlayerPlaying||x.player.updateStartAudioPlayer({src:l.default,loop:!0}),setTimeout((function(){i.sendDTMF("1"),x.player.stopAudioPlayer(),w&&setTimeout((function(){x.currentCall.updateTransferring(!1)}),500)}),500)}:function(){x.island.setIslandView("transfer"!==y?"transfer":"call"),r.pauseCurrentCall()},variant:"default","data-tooltip-id":"tooltip","data-tooltip-content":w?"Cancel transfer":"Transfer"},w?q.default.createElement(u.FontAwesomeIcon,{className:"",size:"xl",icon:c.faArrowDownUpAcrossLine}):q.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:t.faArrowDownArrowUp})),q.default.createElement(s.Button,{active:"keypad"===y,variant:"default",onClick:function(){x.island.setIslandView("keypad"!==y?"keypad":"call")},"data-tooltip-id":"tooltip","data-tooltip-content":"Keyboard"},"keypad"===y?q.default.createElement(n.default,null):q.default.createElement(a.default,null))),w&&q.default.createElement(d.TransferActions,null),q.default.createElement(f.Tooltip,{className:"pi-z-20",id:"tooltip",place:"bottom"}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../node_modules/@nethesis/nethesis-light-svg-icons/index.mjs.js"),a=require("../../lib/phone/call.js"),n=require("../../static/icons/PhoneKeypadLight.js"),r=require("../../static/icons/PhoneKeypadSolid.js");require("../../node_modules/react-redux/es/index.js");var o=require("../../store/index.js");require("../../node_modules/socket.io-client/build/esm/index.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../../lib/webrtc/janus.js");var i=require("../../lib/webrtc/messages.js");require("../../node_modules/mic-check/lib/index.js");var l=require("../../static/outgoing_ringtone.js");require("../Island.js");var s=require("../Button.js"),u=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),c=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js");require("../../node_modules/framer-motion/dist/framer-motion.js");var d=require("../TransferView/TransferActions.js"),f=require("../../node_modules/react-tooltip/dist/react-tooltip.min.cjs.js"),p=require("../../node_modules/react-redux/es/hooks/useSelector.js"),m=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function j(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var v=j(e);exports.default=function(){var e=p.useSelector((function(e){return e.currentCall})),j=e.paused,E=e.muted,g=p.useSelector((function(e){return e.currentCall.parked})),x=p.useSelector((function(e){return e.island})),C=x.view,w=x.actionsExpanded,y=p.useSelector((function(e){return e.currentCall.transferring})),q=m.useDispatch();return v.default.createElement(v.default.Fragment,null,v.default.createElement("div",{className:"pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center"},v.default.createElement(s.Button,{variant:"default",active:!!j,onClick:function(){return j?a.unpauseCurrentCall():a.pauseCurrentCall()},"data-tooltip-id":"tooltip","data-tooltip-content":j?"Play":"Pause"},j?v.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:c.faPlay}):v.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:t.faPause})),v.default.createElement(s.Button,{variant:"default",active:!!E,onClick:function(){return E?a.unmuteCurrentCall():a.muteCurrentCall()},"data-tooltip-id":"tooltip","data-tooltip-content":E?"Unmute":"Mute"},E?v.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:c.faMicrophoneSlash}):v.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:t.faMicrophone})),v.default.createElement(s.Button,{active:y,onClick:y?function(){i.sendDTMF("*"),o.store.getState().player.audioPlayerPlaying||q.player.updateStartAudioPlayer({src:l.default,loop:!0}),setTimeout((function(){i.sendDTMF("1"),q.player.stopAudioPlayer(),y&&setTimeout((function(){q.currentCall.updateTransferring(!1)}),500)}),500)}:function(){q.island.setIslandView("transfer"!==C?"transfer":"call"),a.pauseCurrentCall()},variant:"default","data-tooltip-id":"tooltip","data-tooltip-content":y?"Cancel transfer":"Transfer"},y?v.default.createElement(u.FontAwesomeIcon,{className:"",size:"xl",icon:c.faArrowDownUpAcrossLine}):v.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:t.faArrowDownArrowUp})),v.default.createElement(s.Button,{active:w,variant:"transparent",onClick:function(){w?q.island.toggleActionsExpanded(!1):q.island.toggleActionsExpanded(!0)},"data-tooltip-id":"tooltip","data-tooltip-content":w?"Collapse":"Expand"},w?v.default.createElement(u.FontAwesomeIcon,{className:"",size:"xl",icon:t.faChevronUp}):v.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:t.faChevronDown}))),w?v.default.createElement(v.default.Fragment,null," ",v.default.createElement("div",{className:"pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center"},v.default.createElement(s.Button,{active:"keypad"===C,variant:"default",onClick:function(){q.island.setIslandView("keypad"!==C?"keypad":"call")},"data-tooltip-id":"tooltip","data-tooltip-content":"Keyboard"},"keypad"===C?v.default.createElement(r.default,null):v.default.createElement(n.default,null)),v.default.createElement(s.Button,{active:g,variant:"default",onClick:function(){a.park(),q.currentCall.setParked(!0)},"data-tooltip-id":"tooltip","data-tooltip-content":"Park"},v.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:g?c.faCircleParking:t.faCircleParking})))):v.default.createElement(v.default.Fragment,null),y&&v.default.createElement(d.TransferActions,null),v.default.createElement(f.Tooltip,{className:"pi-z-20",id:"tooltip",place:"bottom"}))};
2
2
  //# sourceMappingURL=Actions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Actions.js","sources":["../../../src/components/CallView/Actions.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport {\n faPause as faPauseRegular,\n faMicrophone as faMicrophoneLight,\n faArrowDownArrowUp,\n} from '@nethesis/nethesis-light-svg-icons'\nimport {\n muteCurrentCall,\n unmuteCurrentCall,\n pauseCurrentCall,\n unpauseCurrentCall,\n} from '../../lib/phone/call'\nimport PhoneKeypadLight from '../../static/icons/PhoneKeypadLight'\nimport PhoneKeypadSolid from '../../static/icons/PhoneKeypadSolid'\nimport { Button } from '../'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faMicrophoneSlash,\n faPlay,\n faArrowDownUpAcrossLine,\n} from '@nethesis/nethesis-solid-svg-icons'\nimport { RootState, Dispatch } from '../../store'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { sendDTMF } from '../../lib/webrtc/messages'\nimport { store } from '../../store'\nimport outgoingRingtone from '../../static/outgoing_ringtone'\nimport { TransferActions } from '../TransferView'\nimport { Tooltip } from 'react-tooltip/dist/react-tooltip.min.cjs'\n\nconst Actions: FC = () => {\n // Get multiple values from currentCall store\n const { paused, muted } = useSelector((state: RootState) => state.currentCall)\n\n // Get isOpen and view from island store\n const { view } = useSelector((state: RootState) => state.island)\n const { transferring } = useSelector((state: RootState) => state.currentCall)\n\n const dispatch = useDispatch<Dispatch>()\n\n function openKeypad() {\n dispatch.island.setIslandView(view !== 'keypad' ? 'keypad' : 'call')\n }\n\n function transfer() {\n // Open the transfer view\n dispatch.island.setIslandView(view !== 'transfer' ? 'transfer' : 'call')\n // Pause the call\n pauseCurrentCall()\n }\n\n // Cancels the current transfer through dtmfs\n function calcelTransfer() {\n sendDTMF('*')\n const { audioPlayerPlaying } = store.getState().player\n // Check if the local audio is already playing and start playing\n if (!audioPlayerPlaying) {\n dispatch.player.updateStartAudioPlayer({\n src: outgoingRingtone,\n loop: true,\n })\n }\n setTimeout(() => {\n sendDTMF('1')\n dispatch.player.stopAudioPlayer()\n // The workarround to disable transfer because of the wrong conv.connection value from ws\n if (transferring) {\n setTimeout(() => {\n dispatch.currentCall.updateTransferring(false)\n }, 500)\n }\n }, 500)\n }\n\n return (\n <>\n <div className='pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'>\n <Button\n variant='default'\n active={paused ? true : false}\n onClick={() => (paused ? unpauseCurrentCall() : pauseCurrentCall())}\n data-tooltip-id='tooltip'\n data-tooltip-content={paused ? 'Play' : 'Pause'}\n >\n {paused ? (\n <FontAwesomeIcon size='xl' icon={faPlay} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faPauseRegular} />\n )}\n </Button>\n <Button\n variant='default'\n active={muted ? true : false}\n onClick={() => (muted ? unmuteCurrentCall() : muteCurrentCall())}\n data-tooltip-id='tooltip'\n data-tooltip-content={muted ? 'Unmute' : 'Mute'}\n >\n {muted ? (\n <FontAwesomeIcon size='xl' icon={faMicrophoneSlash} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faMicrophoneLight} />\n )}\n </Button>\n <Button\n active={transferring}\n onClick={transferring ? calcelTransfer : transfer}\n variant='default'\n data-tooltip-id='tooltip'\n data-tooltip-content={transferring ? 'Cancel transfer' : 'Transfer'}\n >\n {transferring ? (\n <FontAwesomeIcon className='' size='xl' icon={faArrowDownUpAcrossLine} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faArrowDownArrowUp} />\n )}\n </Button>\n <Button\n active={view === 'keypad'}\n variant='default'\n onClick={openKeypad}\n data-tooltip-id='tooltip'\n data-tooltip-content='Keyboard'\n >\n {view === 'keypad' ? <PhoneKeypadSolid /> : <PhoneKeypadLight />}\n </Button>\n </div>\n {transferring && <TransferActions />}\n {/* Buttons tooltips */}\n <Tooltip className='pi-z-20' id='tooltip' place='bottom' />\n </>\n )\n}\n\nexport default Actions\n"],"names":["_a","useSelector","state","currentCall","paused","muted","view","island","transferring","dispatch","useDispatch","React","createElement","Fragment","className","Button","variant","active","onClick","unpauseCurrentCall","pauseCurrentCall","FontAwesomeIcon","size","icon","faPlay","faPauseRegular","unmuteCurrentCall","muteCurrentCall","faMicrophoneSlash","faMicrophoneLight","sendDTMF","store","getState","player","audioPlayerPlaying","updateStartAudioPlayer","src","outgoingRingtone","loop","setTimeout","stopAudioPlayer","updateTransferring","setIslandView","faArrowDownUpAcrossLine","faArrowDownArrowUp","PhoneKeypadSolid","PhoneKeypadLight","TransferActions","Tooltip","id","place"],"mappings":"m1CAgCoB,WAEZ,IAAAA,EAAoBC,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMC,WAAW,IAArEC,WAAQC,UAGRC,EAASL,eAAY,SAACC,GAAqB,OAAAA,EAAMK,eACjDC,EAAiBP,eAAY,SAACC,GAAqB,OAAAA,EAAMC,4BAE3DM,EAAWC,EAAAA,cAoCjB,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,sHACbH,UAAAC,cAACG,EAAAA,OACC,CAAAC,QAAQ,UACRC,SAAQb,EACRc,QAAS,WAAM,OAACd,EAASe,EAAAA,qBAAuBC,EAAAA,oBAAmB,kBACnD,UACM,uBAAAhB,EAAS,OAAS,SAEvCA,EACCO,UAACC,cAAAS,EAAAA,iBAAgBC,KAAK,KAAKC,KAAMC,EAAAA,SAEjCb,wBAACU,EAAAA,gBAAe,CAACC,KAAK,KAAKC,KAAME,aAGrCd,UAAAC,cAACG,EAAAA,OACC,CAAAC,QAAQ,UACRC,SAAQZ,EACRa,QAAS,WAAM,OAACb,EAAQqB,EAAAA,oBAAsBC,EAAAA,mBAAkB,kBAChD,UACM,uBAAAtB,EAAQ,SAAW,QAExCA,EACCM,UAACC,cAAAS,EAAAA,iBAAgBC,KAAK,KAAKC,KAAMK,EAAAA,oBAEjCjB,wBAACU,EAAAA,gBAAe,CAACC,KAAK,KAAKC,KAAMM,kBAGrClB,UAAAC,cAACG,EAAAA,OAAM,CACLE,OAAQT,EACRU,QAASV,EArDjB,WACEsB,EAAQA,SAAC,KACsBC,EAAKA,MAACC,WAAWC,OAAMC,oBAGpDzB,EAASwB,OAAOE,uBAAuB,CACrCC,IAAKC,EAAgB,QACrBC,MAAM,IAGVC,YAAW,WACTT,EAAQA,SAAC,KACTrB,EAASwB,OAAOO,kBAEZhC,GACF+B,YAAW,WACT9B,EAASN,YAAYsC,oBAAmB,EACzC,GAAE,IAEN,GAAE,IACJ,EA5BD,WAEEhC,EAASF,OAAOmC,cAAuB,aAATpC,EAAsB,WAAa,QAEjEc,EAAAA,kBACD,EAyDOJ,QAAQ,UAAS,kBACD,UACM,uBAAAR,EAAe,kBAAoB,YAExDA,EACCG,EAAC,QAAAC,cAAAS,EAAAA,iBAAgBP,UAAU,GAAGQ,KAAK,KAAKC,KAAMoB,4BAE9ChC,EAAAA,QAAAC,cAACS,EAAeA,gBAAC,CAAAC,KAAK,KAAKC,KAAMqB,EAAAA,sBAGrCjC,EAAAA,QAAAC,cAACG,EAAAA,OACC,CAAAE,OAAiB,WAATX,EACRU,QAAQ,UACRE,QA/ER,WACET,EAASF,OAAOmC,cAAuB,WAATpC,EAAoB,SAAW,OAC9D,oBA8EuB,UAAS,uBACJ,YAEX,WAATA,EAAoBK,EAAC,QAAAC,cAAAiC,EAAgB,QAAG,MAAGlC,EAAA,QAAAC,cAACkC,UAAgB,QAGhEtC,GAAgBG,EAAC,QAAAC,cAAAmC,EAAAA,gBAAkB,MAEpCpC,EAAAA,QAAAC,cAACoC,UAAQ,CAAAlC,UAAU,UAAUmC,GAAG,UAAUC,MAAM,WAGtD"}
1
+ {"version":3,"file":"Actions.js","sources":["../../../src/components/CallView/Actions.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport {\n faPause as faPauseRegular,\n faMicrophone as faMicrophoneLight,\n faArrowDownArrowUp,\n faCircleParking,\n faChevronDown,\n faChevronUp,\n} from '@nethesis/nethesis-light-svg-icons'\nimport {\n muteCurrentCall,\n unmuteCurrentCall,\n pauseCurrentCall,\n unpauseCurrentCall,\n} from '../../lib/phone/call'\nimport PhoneKeypadLight from '../../static/icons/PhoneKeypadLight'\nimport PhoneKeypadSolid from '../../static/icons/PhoneKeypadSolid'\nimport { Button } from '../'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faMicrophoneSlash,\n faPlay,\n faArrowDownUpAcrossLine,\n faCircleParking as faCircleParkingSolid,\n} from '@nethesis/nethesis-solid-svg-icons'\nimport { RootState, Dispatch } from '../../store'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { sendDTMF } from '../../lib/webrtc/messages'\nimport { store } from '../../store'\nimport outgoingRingtone from '../../static/outgoing_ringtone'\nimport { TransferActions } from '../TransferView'\nimport { Tooltip } from 'react-tooltip/dist/react-tooltip.min.cjs'\nimport { park } from '../../lib/phone/call'\n\nconst Actions: FC = () => {\n // Get multiple values from currentCall store\n const { paused, muted } = useSelector((state: RootState) => state.currentCall)\n const parked = useSelector((state: RootState) => state.currentCall.parked)\n\n // Get isOpen and view from island store\n const { view, actionsExpanded } = useSelector((state: RootState) => state.island)\n const transferring = useSelector((state: RootState) => state.currentCall.transferring)\n\n const dispatch = useDispatch<Dispatch>()\n\n function openKeypad() {\n dispatch.island.setIslandView(view !== 'keypad' ? 'keypad' : 'call')\n }\n\n function transfer() {\n // Open the transfer view\n dispatch.island.setIslandView(view !== 'transfer' ? 'transfer' : 'call')\n // Pause the call\n pauseCurrentCall()\n }\n\n // Cancels the current transfer through dtmfs\n function calcelTransfer() {\n sendDTMF('*')\n const { audioPlayerPlaying } = store.getState().player\n // Check if the local audio is already playing and start playing\n if (!audioPlayerPlaying) {\n dispatch.player.updateStartAudioPlayer({\n src: outgoingRingtone,\n loop: true,\n })\n }\n setTimeout(() => {\n sendDTMF('1')\n dispatch.player.stopAudioPlayer()\n // The workarround to disable transfer because of the wrong conv.connection value from ws\n if (transferring) {\n setTimeout(() => {\n dispatch.currentCall.updateTransferring(false)\n }, 500)\n }\n }, 500)\n }\n\n function toggleActionsExpanded() {\n if (actionsExpanded) {\n dispatch.island.toggleActionsExpanded(false)\n } else {\n dispatch.island.toggleActionsExpanded(true)\n }\n }\n\n function parkAction() {\n park()\n dispatch.currentCall.setParked(true)\n }\n\n return (\n <>\n <div className='pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'>\n <Button\n variant='default'\n active={paused ? true : false}\n onClick={() => (paused ? unpauseCurrentCall() : pauseCurrentCall())}\n data-tooltip-id='tooltip'\n data-tooltip-content={paused ? 'Play' : 'Pause'}\n >\n {paused ? (\n <FontAwesomeIcon size='xl' icon={faPlay} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faPauseRegular} />\n )}\n </Button>\n <Button\n variant='default'\n active={muted ? true : false}\n onClick={() => (muted ? unmuteCurrentCall() : muteCurrentCall())}\n data-tooltip-id='tooltip'\n data-tooltip-content={muted ? 'Unmute' : 'Mute'}\n >\n {muted ? (\n <FontAwesomeIcon size='xl' icon={faMicrophoneSlash} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faMicrophoneLight} />\n )}\n </Button>\n <Button\n active={transferring}\n onClick={transferring ? calcelTransfer : transfer}\n variant='default'\n data-tooltip-id='tooltip'\n data-tooltip-content={transferring ? 'Cancel transfer' : 'Transfer'}\n >\n {transferring ? (\n <FontAwesomeIcon className='' size='xl' icon={faArrowDownUpAcrossLine} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faArrowDownArrowUp} />\n )}\n </Button>\n <Button\n active={actionsExpanded}\n variant='transparent'\n onClick={() => toggleActionsExpanded()}\n data-tooltip-id='tooltip'\n data-tooltip-content={actionsExpanded ? 'Collapse' : 'Expand'}\n >\n {actionsExpanded ? (\n <FontAwesomeIcon className='' size='xl' icon={faChevronUp} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faChevronDown} />\n )}\n </Button>\n </div>\n {/* Actions expanded section */}\n {actionsExpanded ? (\n <>\n {' '}\n <div className='pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'>\n <Button\n active={view === 'keypad'}\n variant='default'\n onClick={openKeypad}\n data-tooltip-id='tooltip'\n data-tooltip-content='Keyboard'\n >\n {view === 'keypad' ? <PhoneKeypadSolid /> : <PhoneKeypadLight />}\n </Button>\n <Button\n active={parked}\n variant='default'\n onClick={parkAction}\n data-tooltip-id='tooltip'\n data-tooltip-content='Park'\n >\n <FontAwesomeIcon size='xl' icon={parked ? faCircleParkingSolid : faCircleParking} />\n </Button>\n </div>\n </>\n ) : (\n <></>\n )}\n\n {transferring && <TransferActions />}\n {/* Buttons tooltips */}\n <Tooltip className='pi-z-20' id='tooltip' place='bottom' />\n </>\n )\n}\n\nexport default Actions\n"],"names":["_a","useSelector","state","currentCall","paused","muted","parked","_b","island","view","actionsExpanded","transferring","dispatch","useDispatch","React","createElement","Fragment","className","Button","variant","active","onClick","unpauseCurrentCall","pauseCurrentCall","FontAwesomeIcon","size","icon","faPlay","faPauseRegular","unmuteCurrentCall","muteCurrentCall","faMicrophoneSlash","faMicrophoneLight","sendDTMF","store","getState","player","audioPlayerPlaying","updateStartAudioPlayer","src","outgoingRingtone","loop","setTimeout","stopAudioPlayer","updateTransferring","setIslandView","faArrowDownUpAcrossLine","faArrowDownArrowUp","toggleActionsExpanded","faChevronUp","faChevronDown","PhoneKeypadSolid","PhoneKeypadLight","park","setParked","faCircleParkingSolid","faCircleParking","TransferActions","Tooltip","id","place"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../styles/Island.styles.js");require("../../node_modules/react-redux/es/index.js");var r=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),a=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),i=require("../../lib/phone/call.js");require("../../store/index.js"),require("../../node_modules/socket.io-client/build/esm/index.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../../lib/webrtc/janus.js"),require("../../node_modules/mic-check/lib/index.js"),require("../Island.js");var n=require("../Button.js"),l=require("../AudioBars.js");require("../../node_modules/framer-motion/dist/framer-motion.js");var u=require("./Timer.js"),s=require("./Number.js"),d=require("./DisplayName.js"),o=require("./Avatar.js"),c=require("./Actions.js"),m=require("../Hangup.js"),f=require("../../node_modules/react-redux/es/hooks/useSelector.js");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var j=p(e);function g(e,t){return!e&&!t}exports.default=function(){var e=f.useSelector((function(e){return e.currentCall})),p=e.incoming,q=e.accepted,E=e.outgoing,v=e.startTime,y=e.paused,_=f.useSelector((function(e){return e.island})).isOpen,b=f.useSelector((function(e){return e.webrtc})).remoteAudioStream;return j.default.createElement(t.StyledCallView,{incoming:p,accepted:q,outgoing:E,isOpen:_},j.default.createElement(t.StyledTopContent,{isOpen:_,incoming:p,accepted:q,outgoing:E},j.default.createElement(o.default,null),_&&j.default.createElement(t.StyledDetails,null,j.default.createElement(d.default,null),q?j.default.createElement(u.default,{startTime:v}):j.default.createElement(s.default,null)),!_&&!q&&j.default.createElement(d.default,null),!_&&q&&j.default.createElement(u.default,{startTime:v}),q&&b&&j.default.createElement(l.AudioBars,{audioStream:b,paused:y,size:_?"large":"small"})),_&&j.default.createElement("div",{className:"pi-grid pi-gap-y-5"},q&&j.default.createElement(c.default,null),j.default.createElement("div",{className:"pi-grid ".concat(g(E,q)?"pi-grid-cols-2":q?"pi-grid-cols-1 pi-justify-items-center":"pi-grid-cols-1 pi-justify-items-end"," pi-gap-3.5")},j.default.createElement(m.default,{description:"Hangup and transfer"}),g(E,q)&&j.default.createElement(n.Button,{onClick:i.answerIncomingCall,variant:"green"},j.default.createElement(r.FontAwesomeIcon,{className:"pi-w-6 pi-h-6",icon:a.faPhone})))))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../styles/Island.styles.js");require("../../node_modules/react-redux/es/index.js");var r=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),a=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),i=require("../../lib/phone/call.js");require("../../store/index.js"),require("../../node_modules/socket.io-client/build/esm/index.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../../lib/webrtc/janus.js"),require("../../node_modules/mic-check/lib/index.js"),require("../Island.js");var n=require("../Button.js"),l=require("../AudioBars.js");require("../../node_modules/framer-motion/dist/framer-motion.js");var u=require("./Timer.js"),s=require("./Number.js"),d=require("./DisplayName.js"),o=require("./Avatar.js"),c=require("./Actions.js"),m=require("../Hangup.js"),f=require("../../node_modules/react-redux/es/hooks/useSelector.js");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var j=p(e);function g(e,t){return!e&&!t}exports.default=function(){var e=f.useSelector((function(e){return e.currentCall})),p=e.incoming,q=e.accepted,E=e.outgoing,v=e.startTime,y=e.paused,b=f.useSelector((function(e){return e.island})).isOpen,x=f.useSelector((function(e){return e.webrtc})).remoteAudioStream;return j.default.createElement("div",{className:"pi-bg-red pi-flex pi-content-center pi-justify-center"},j.default.createElement(t.StyledCallView,{incoming:p,accepted:q,outgoing:E,isOpen:b},j.default.createElement(t.StyledTopContent,{isOpen:b,incoming:p,accepted:q,outgoing:E},j.default.createElement(o.default,null),b&&j.default.createElement(t.StyledDetails,null,j.default.createElement(d.default,null),q?j.default.createElement(u.default,{startTime:v}):j.default.createElement(s.default,null)),!b&&!q&&j.default.createElement(d.default,null),!b&&q&&j.default.createElement(u.default,{startTime:v}),q&&x&&j.default.createElement(l.AudioBars,{audioStream:x,paused:y,size:b?"large":"small"})),b&&j.default.createElement("div",{className:"pi-grid pi-gap-y-5"},q&&j.default.createElement(c.default,null),j.default.createElement("div",{className:"pi-grid ".concat(g(E,q)?"pi-grid-cols-2":q?"pi-grid-cols-1 pi-justify-items-center":"pi-grid-cols-1 pi-justify-items-end"," pi-gap-3.5")},j.default.createElement(m.default,{description:"Hangup and transfer"}),g(E,q)&&j.default.createElement(n.Button,{onClick:i.answerIncomingCall,variant:"green"},j.default.createElement(r.FontAwesomeIcon,{className:"pi-w-6 pi-h-6",icon:a.faPhone}))))))};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/CallView/index.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport { StyledDetails, StyledCallView, StyledTopContent } from '../../styles/Island.styles'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faPhone } from '@nethesis/nethesis-solid-svg-icons'\nimport { Button } from '../'\nimport Timer from './Timer'\nimport Number from './Number'\nimport DisplayName from './DisplayName'\nimport { AudioBars } from '../'\nimport { answerIncomingCall } from '../../lib/phone/call'\nimport Avatar from './Avatar'\nimport Actions from './Actions'\nimport Hangup from '../Hangup'\n\nfunction isAnswerVisible(outgoing: boolean, accepted: boolean): boolean {\n return !outgoing && !accepted\n}\n\n/**\n * The main view to manage calls, the starting point for calls actions flows\n */\nconst CallView: FC<CallViewProps> = () => {\n // Get multiple values from currentCall state\n const { incoming, accepted, outgoing, startTime, paused } = useSelector(\n (state: RootState) => state.currentCall,\n )\n // Get isOpen and view from island state\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n // Retrieve the audio stream from the webrtc state\n const { remoteAudioStream } = useSelector((state: RootState) => state.webrtc)\n\n return (\n <StyledCallView incoming={incoming} accepted={accepted} outgoing={outgoing} isOpen={isOpen}>\n <StyledTopContent isOpen={isOpen} incoming={incoming} accepted={accepted} outgoing={outgoing}>\n <Avatar />\n {isOpen && (\n <StyledDetails>\n <DisplayName />\n {/* The timer when expanded */}\n {accepted ? <Timer startTime={startTime} /> : <Number />}\n </StyledDetails>\n )}\n {/* The display name when collepsed */}\n {!isOpen && !accepted && <DisplayName />}\n {/* The timer when collapsed */}\n {!isOpen && accepted && <Timer startTime={startTime} />}\n {accepted && remoteAudioStream && (\n <AudioBars\n audioStream={remoteAudioStream}\n paused={paused}\n size={isOpen ? 'large' : 'small'}\n />\n )}\n </StyledTopContent>\n {isOpen && (\n <div className='pi-grid pi-gap-y-5'>\n {accepted && <Actions />}\n <div\n className={`pi-grid ${\n isAnswerVisible(outgoing, accepted)\n ? 'pi-grid-cols-2'\n : accepted\n ? 'pi-grid-cols-1 pi-justify-items-center'\n : 'pi-grid-cols-1 pi-justify-items-end'\n } pi-gap-3.5`}\n >\n {/* The button to hangup the currentCall */}\n {/* {incoming || outgoing ? (\n <Button onClick={hangupCurrentCall} variant='red'>\n <FontAwesomeIcon className='pi-rotate-135 pi-w-6 pi-h-6' icon={faPhone} />\n </Button>\n ) : ( */}\n <Hangup description=\"Hangup and transfer\" />\n {/* )} */}\n {/* The button to answer the incoming call */}\n {isAnswerVisible(outgoing, accepted) && (\n <Button onClick={answerIncomingCall} variant='green'>\n <FontAwesomeIcon className='pi-w-6 pi-h-6' icon={faPhone} />\n </Button>\n )}\n </div>\n </div>\n )}\n </StyledCallView>\n )\n}\n\nexport default CallView\n\nexport interface CallViewProps {}\n"],"names":["isAnswerVisible","outgoing","accepted","_a","useSelector","state","currentCall","incoming","startTime","paused","isOpen","island","remoteAudioStream","webrtc","React","createElement","StyledCallView","StyledTopContent","Avatar","StyledDetails","DisplayName","Timer","Number","AudioBars","audioStream","size","className","Actions","concat","Hangup","description","Button","onClick","answerIncomingCall","variant","FontAwesomeIcon","icon","faPhone"],"mappings":"4kCAmBA,SAASA,EAAgBC,EAAmBC,GAC1C,OAAQD,IAAaC,CACvB,iBAKoC,WAE5B,IAAAC,EAAsDC,EAAAA,aAC1D,SAACC,GAAqB,OAAAA,EAAMC,WAAW,IADjCC,EAAQJ,EAAAI,SAAEL,EAAQC,EAAAD,SAAED,EAAQE,EAAAF,SAAEO,EAASL,EAAAK,UAAEC,EAAMN,EAAAM,OAI/CC,EAAWN,eAAY,SAACC,GAAqB,OAAAA,EAAMM,iBAGnDC,EAAsBR,eAAY,SAACC,GAAqB,OAAAA,EAAMQ,4BAEtE,OACEC,UAACC,cAAAC,EAAcA,gBAACT,SAAUA,EAAUL,SAAUA,EAAUD,SAAUA,EAAUS,OAAQA,GAClFI,EAAAA,QAAAC,cAACE,mBAAiB,CAAAP,OAAQA,EAAQH,SAAUA,EAAUL,SAAUA,EAAUD,SAAUA,GAClFa,UAAAC,cAACG,EAAM,QAAG,MACTR,GACCI,EAAA,QAAAC,cAACI,EAAAA,cAAa,KACZL,UAAAC,cAACK,EAAW,QAAG,MAEdlB,EAAWY,EAAAA,QAACC,cAAAM,EAAK,SAACb,UAAWA,IAAgBM,wBAACQ,UAAM,QAIvDZ,IAAWR,GAAYY,EAAA,QAAAC,cAACK,EAAW,QAAG,OAEtCV,GAAUR,GAAYY,UAAAC,cAACM,EAAAA,QAAM,CAAAb,UAAWA,IACzCN,GAAYU,GACXE,EAAC,QAAAC,cAAAQ,EAASA,UACR,CAAAC,YAAaZ,EACbH,OAAQA,EACRgB,KAAMf,EAAS,QAAU,WAI9BA,GACCI,EAAK,QAAAC,cAAA,MAAA,CAAAW,UAAU,sBACZxB,GAAYY,EAAC,QAAAC,cAAAY,EAAAA,QAAU,MACxBb,UACEC,cAAA,MAAA,CAAAW,UAAW,WACTE,OAAA5B,EAAgBC,EAAUC,GACtB,iBACAA,EACA,yCACA,sCACO,gBAQbY,EAAAA,QAAAC,cAACc,EAAAA,QAAM,CAACC,YAAY,wBAGnB9B,EAAgBC,EAAUC,IACzBY,UAAAC,cAACgB,EAAMA,OAAA,CAACC,QAASC,qBAAoBC,QAAQ,SAC3CpB,EAAAA,QAAAC,cAACoB,kBAAgB,CAAAT,UAAU,gBAAgBU,KAAMC,EAAAA,aAQjE"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/CallView/index.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport { StyledDetails, StyledCallView, StyledTopContent } from '../../styles/Island.styles'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faPhone } from '@nethesis/nethesis-solid-svg-icons'\nimport { Button } from '../'\nimport Timer from './Timer'\nimport Number from './Number'\nimport DisplayName from './DisplayName'\nimport { AudioBars } from '../'\nimport { answerIncomingCall } from '../../lib/phone/call'\nimport Avatar from './Avatar'\nimport Actions from './Actions'\nimport Hangup from '../Hangup'\n\nfunction isAnswerVisible(outgoing: boolean, accepted: boolean): boolean {\n return !outgoing && !accepted\n}\n\n/**\n * The main view to manage calls, the starting point for calls actions flows\n */\nconst CallView: FC<CallViewProps> = () => {\n // Get multiple values from currentCall state\n const { incoming, accepted, outgoing, startTime, paused } = useSelector(\n (state: RootState) => state.currentCall,\n )\n // Get isOpen and view from island state\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n // Retrieve the audio stream from the webrtc state\n const { remoteAudioStream } = useSelector((state: RootState) => state.webrtc)\n\n return (\n <div className='pi-bg-red pi-flex pi-content-center pi-justify-center'>\n <StyledCallView incoming={incoming} accepted={accepted} outgoing={outgoing} isOpen={isOpen}>\n <StyledTopContent\n isOpen={isOpen}\n incoming={incoming}\n accepted={accepted}\n outgoing={outgoing}\n >\n <Avatar />\n {isOpen && (\n <StyledDetails>\n <DisplayName />\n {/* The timer when expanded */}\n {accepted ? <Timer startTime={startTime} /> : <Number />}\n </StyledDetails>\n )}\n {/* The display name when collepsed */}\n {!isOpen && !accepted && <DisplayName />}\n {/* The timer when collapsed */}\n {!isOpen && accepted && <Timer startTime={startTime} />}\n {accepted && remoteAudioStream && (\n <AudioBars\n audioStream={remoteAudioStream}\n paused={paused}\n size={isOpen ? 'large' : 'small'}\n />\n )}\n </StyledTopContent>\n {isOpen && (\n <div className='pi-grid pi-gap-y-5'>\n {accepted && <Actions />}\n <div\n className={`pi-grid ${\n isAnswerVisible(outgoing, accepted)\n ? 'pi-grid-cols-2'\n : accepted\n ? 'pi-grid-cols-1 pi-justify-items-center'\n : 'pi-grid-cols-1 pi-justify-items-end'\n } pi-gap-3.5`}\n >\n {/* The button to hangup the currentCall */}\n {/* {incoming || outgoing ? (\n <Button onClick={hangupCurrentCall} variant='red'>\n <FontAwesomeIcon className='pi-rotate-135 pi-w-6 pi-h-6' icon={faPhone} />\n </Button>\n ) : ( */}\n <Hangup description='Hangup and transfer' />\n {/* )} */}\n {/* The button to answer the incoming call */}\n {isAnswerVisible(outgoing, accepted) && (\n <Button onClick={answerIncomingCall} variant='green'>\n <FontAwesomeIcon className='pi-w-6 pi-h-6' icon={faPhone} />\n </Button>\n )}\n </div>\n </div>\n )}\n </StyledCallView>\n </div>\n )\n}\n\nexport default CallView\n\nexport interface CallViewProps {}\n"],"names":["isAnswerVisible","outgoing","accepted","_a","useSelector","state","currentCall","incoming","startTime","paused","isOpen","island","remoteAudioStream","webrtc","React","createElement","className","StyledCallView","StyledTopContent","Avatar","StyledDetails","DisplayName","Timer","Number","AudioBars","audioStream","size","Actions","concat","Hangup","description","Button","onClick","answerIncomingCall","variant","FontAwesomeIcon","icon","faPhone"],"mappings":"4kCAmBA,SAASA,EAAgBC,EAAmBC,GAC1C,OAAQD,IAAaC,CACvB,iBAKoC,WAE5B,IAAAC,EAAsDC,EAAAA,aAC1D,SAACC,GAAqB,OAAAA,EAAMC,WAAW,IADjCC,EAAQJ,EAAAI,SAAEL,EAAQC,EAAAD,SAAED,EAAQE,EAAAF,SAAEO,EAASL,EAAAK,UAAEC,EAAMN,EAAAM,OAI/CC,EAAWN,eAAY,SAACC,GAAqB,OAAAA,EAAMM,iBAGnDC,EAAsBR,eAAY,SAACC,GAAqB,OAAAA,EAAMQ,4BAEtE,OACEC,EAAA,QAAAC,cAAA,MAAA,CAAKC,UAAU,yDACbF,EAAAA,QAAAC,cAACE,iBAAe,CAAAV,SAAUA,EAAUL,SAAUA,EAAUD,SAAUA,EAAUS,OAAQA,GAClFI,EAAAA,QAAAC,cAACG,mBACC,CAAAR,OAAQA,EACRH,SAAUA,EACVL,SAAUA,EACVD,SAAUA,GAEVa,UAAAC,cAACI,EAAM,QAAG,MACTT,GACCI,EAAA,QAAAC,cAACK,EAAAA,cAAa,KACZN,UAAAC,cAACM,EAAW,QAAG,MAEdnB,EAAWY,EAAAA,QAACC,cAAAO,EAAK,SAACd,UAAWA,IAAgBM,wBAACS,UAAM,QAIvDb,IAAWR,GAAYY,EAAA,QAAAC,cAACM,EAAW,QAAG,OAEtCX,GAAUR,GAAYY,UAAAC,cAACO,EAAAA,QAAM,CAAAd,UAAWA,IACzCN,GAAYU,GACXE,EAAC,QAAAC,cAAAS,EAASA,UACR,CAAAC,YAAab,EACbH,OAAQA,EACRiB,KAAMhB,EAAS,QAAU,WAI9BA,GACCI,EAAK,QAAAC,cAAA,MAAA,CAAAC,UAAU,sBACZd,GAAYY,EAAC,QAAAC,cAAAY,EAAAA,QAAU,MACxBb,UACEC,cAAA,MAAA,CAAAC,UAAW,WACTY,OAAA5B,EAAgBC,EAAUC,GACtB,iBACAA,EACA,yCACA,sCACO,gBAQbY,EAAAA,QAAAC,cAACc,EAAAA,QAAM,CAACC,YAAY,wBAGnB9B,EAAgBC,EAAUC,IACzBY,UAAAC,cAACgB,EAAMA,OAAA,CAACC,QAASC,qBAAoBC,QAAQ,SAC3CpB,EAAAA,QAAAC,cAACoB,kBAAgB,CAAAnB,UAAU,gBAAgBoB,KAAMC,EAAAA,cASnE"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js"),require("../node_modules/framer-motion/dist/framer-motion.js");var t=require("../node_modules/react-redux/es/hooks/useSelector.js"),d=require("../_virtual/framer-motion.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=i(e),a=function(e){var i=e.children,a=t.useSelector((function(e){return e.currentCall})),h=a.incoming,n=a.outgoing,o=a.accepted,l=a.transferring,c=t.useSelector((function(e){return e.island})),s=c.view,p=c.isOpen,u=t.useSelector((function(e){return e.alerts.status})).activeAlertsCount,g=t.useSelector((function(e){return e.motions})),w=g.variants,x=g.border_radius_collapsed,f=g.border_radius_expanded,m=g.padding_x_collapsed,v=g.padding_y_collapsed,_=g.padding_expanded;var b=function(){var e={width:0,height:0};switch(s){case"call":p?o&&l?e={width:w.call.expanded.transfer.width,height:w.call.expanded.transfer.height}:o?e={width:w.call.expanded.accepted.width,height:w.call.expanded.accepted.height}:h?e={width:w.call.expanded.incoming.width,height:w.call.expanded.incoming.height}:n&&(e={width:w.call.expanded.outgoing.width,height:w.call.expanded.outgoing.height}):e={width:w.call.collapsed.width,height:w.call.collapsed.height};break;case"keypad":e=p?{width:w.keypad.expanded.width,height:w.keypad.expanded.height}:{width:w.transfer.collapsed.width,height:w.transfer.collapsed.height};break;case"transfer":e=p?{width:w.transfer.expanded.width,height:w.transfer.expanded.height}:{width:w.transfer.collapsed.width,height:w.transfer.collapsed.height};break;case"player":e=p?{width:w.player.expanded.width,height:w.player.expanded.height}:{width:w.player.collapsed.width,height:w.player.collapsed.height};break;case"recorder":e=p?{width:w.recorder.expanded.width,height:w.recorder.expanded.height}:{width:w.recorder.collapsed.width,height:w.recorder.collapsed.height}}var t=u>0;return{width:"".concat(0===e.width&&t?w.alerts.width:e.width,"px"),height:"".concat(t&&p?e.height+w.alerts.height+(0===e.height?2*_:_):e.height,"px"),borderRadius:"".concat(p?f:x,"px"),padding:p?"".concat(_,"px"):"".concat(m,"px ").concat(v,"px")}}();return r.default.createElement(d.framerMotion.exports.motion.div,{className:"pi-font-sans pi-pointer-events-auto pi-overflow-hidden pi-bg-black pi-text-xs pi-cursor-pointer pi-text-white hover:pi-shadow-2xl pi-rounded-3xl pi-transition-shadow",animate:b},i&&i)};exports.IslandMotion=a,exports.default=a;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js"),require("../node_modules/framer-motion/dist/framer-motion.js");var t=require("../node_modules/react-redux/es/hooks/useSelector.js"),d=require("../_virtual/framer-motion.js");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=a(e),r=function(e){var a=e.children,r=t.useSelector((function(e){return e.currentCall})),h=r.incoming,n=r.outgoing,o=r.accepted,c=r.transferring,l=t.useSelector((function(e){return e.island})),s=l.view,p=l.isOpen,g=l.actionsExpanded,u=t.useSelector((function(e){return e.alerts.status})).activeAlertsCount,x=t.useSelector((function(e){return e.motions})),w=x.variants,f=x.border_radius_collapsed,m=x.border_radius_expanded,v=x.padding_x_collapsed,_=x.padding_y_collapsed,b=x.padding_expanded;var y=function(){var e={width:0,height:0};switch(s){case"call":p?o&&c?e={width:w.call.expanded.transfer.width,height:w.call.expanded.transfer.height}:o&&g?e={width:w.call.expanded.accepted.actionsExpanded.width,height:w.call.expanded.accepted.actionsExpanded.height}:o?e={width:w.call.expanded.accepted.width,height:w.call.expanded.accepted.height}:h?e={width:w.call.expanded.incoming.width,height:w.call.expanded.incoming.height}:n&&(e={width:w.call.expanded.outgoing.width,height:w.call.expanded.outgoing.height}):e={width:w.call.collapsed.width,height:w.call.collapsed.height};break;case"keypad":e=p?{width:w.keypad.expanded.width,height:w.keypad.expanded.height}:{width:w.transfer.collapsed.width,height:w.transfer.collapsed.height};break;case"transfer":e=p?{width:w.transfer.expanded.width,height:w.transfer.expanded.height}:{width:w.transfer.collapsed.width,height:w.transfer.collapsed.height};break;case"player":e=p?{width:w.player.expanded.width,height:w.player.expanded.height}:{width:w.player.collapsed.width,height:w.player.collapsed.height};break;case"recorder":e=p?{width:w.recorder.expanded.width,height:w.recorder.expanded.height}:{width:w.recorder.collapsed.width,height:w.recorder.collapsed.height}}var t=u>0;return{width:"".concat(0===e.width&&t?w.alerts.width:e.width,"px"),height:"".concat(t&&p?e.height+w.alerts.height+(0===e.height?2*b:b):e.height,"px"),borderRadius:"".concat(p?m:f,"px"),padding:p?"".concat(b,"px"):"".concat(v,"px ").concat(_,"px")}}();return i.default.createElement(d.framerMotion.exports.motion.div,{className:"pi-font-sans pi-pointer-events-auto pi-overflow-hidden pi-bg-black pi-text-xs pi-cursor-pointer pi-text-white hover:pi-shadow-2xl pi-rounded-3xl pi-transition-shadow",animate:y},a&&a)};exports.IslandMotion=r,exports.default=r;
2
2
  //# sourceMappingURL=IslandMotion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IslandMotion.js","sources":["../../src/components/IslandMotion.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC } from 'react'\nimport { RootState } from '../store'\nimport { useSelector } from 'react-redux'\nimport { motion } from 'framer-motion/dist/framer-motion'\n\nexport const IslandMotion: FC<IslandMotionProps> = ({ children }) => {\n // Retrieve needed stored variables\n const { incoming, outgoing, accepted, transferring } = useSelector(\n (state: RootState) => state.currentCall,\n )\n const { view, isOpen } = useSelector((state: RootState) => state.island)\n const { activeAlertsCount } = useSelector((state: RootState) => state.alerts.status)\n const {\n variants,\n border_radius_collapsed,\n border_radius_expanded,\n padding_x_collapsed,\n padding_y_collapsed,\n padding_expanded,\n } = useSelector((state: RootState) => state.motions)\n\n function getVariant() {\n // Initial size\n let size: SizeTypes = {\n width: 0,\n height: 0,\n }\n switch (view) {\n case 'call':\n if (isOpen) {\n if (accepted && transferring) {\n size = {\n width: variants.call.expanded.transfer.width,\n height: variants.call.expanded.transfer.height,\n }\n } else if (accepted) {\n size = {\n width: variants.call.expanded.accepted.width,\n height: variants.call.expanded.accepted.height,\n }\n } else if (incoming) {\n size = {\n width: variants.call.expanded.incoming.width,\n height: variants.call.expanded.incoming.height,\n }\n } else if (outgoing) {\n size = {\n width: variants.call.expanded.outgoing.width,\n height: variants.call.expanded.outgoing.height,\n }\n }\n } else {\n size = {\n width: variants.call.collapsed.width,\n height: variants.call.collapsed.height,\n }\n }\n break\n case 'keypad':\n if (isOpen) {\n size = {\n width: variants.keypad.expanded.width,\n height: variants.keypad.expanded.height,\n }\n } else {\n size = {\n width: variants.transfer.collapsed.width,\n height: variants.transfer.collapsed.height,\n }\n }\n break\n case 'transfer':\n if (isOpen) {\n size = {\n width: variants.transfer.expanded.width,\n height: variants.transfer.expanded.height,\n }\n } else {\n size = {\n width: variants.transfer.collapsed.width,\n height: variants.transfer.collapsed.height,\n }\n }\n break\n case 'player':\n if (isOpen) {\n size = {\n width: variants.player.expanded.width,\n height: variants.player.expanded.height,\n }\n } else {\n size = {\n width: variants.player.collapsed.width,\n height: variants.player.collapsed.height,\n }\n }\n break\n case 'recorder':\n if (isOpen) {\n size = {\n width: variants.recorder.expanded.width,\n height: variants.recorder.expanded.height,\n }\n } else {\n size = {\n width: variants.recorder.collapsed.width,\n height: variants.recorder.collapsed.height,\n }\n }\n break\n }\n\n const isAlert: boolean = activeAlertsCount > 0\n\n return {\n width: `${size.width === 0 && isAlert ? variants.alerts.width : size.width}px`,\n height: `${\n isAlert && isOpen\n ? size.height +\n variants.alerts.height +\n (size.height === 0 ? padding_expanded * 2 : padding_expanded)\n : size.height\n }px`,\n borderRadius: isOpen ? `${border_radius_expanded}px` : `${border_radius_collapsed}px`,\n padding: isOpen\n ? `${padding_expanded}px`\n : `${padding_x_collapsed}px ${padding_y_collapsed}px`,\n }\n }\n\n const motionVariants = getVariant()\n\n return (\n <motion.div\n className='pi-font-sans pi-pointer-events-auto pi-overflow-hidden pi-bg-black pi-text-xs pi-cursor-pointer pi-text-white hover:pi-shadow-2xl pi-rounded-3xl pi-transition-shadow'\n animate={motionVariants}\n >\n {children && children}\n </motion.div>\n )\n}\n\nexport interface IslandMotionProps {\n children: ReactNode\n}\n\ntype SizeTypes = {\n width: number\n height: number\n}\n\nexport default IslandMotion\n"],"names":["IslandMotion","_a","children","_b","useSelector","state","currentCall","incoming","outgoing","accepted","transferring","_c","island","view","isOpen","activeAlertsCount","alerts","status","_d","motions","variants","border_radius_collapsed","border_radius_expanded","padding_x_collapsed","padding_y_collapsed","padding_expanded","motionVariants","size","width","height","call","expanded","transfer","collapsed","keypad","player","recorder","isAlert","concat","borderRadius","padding","getVariant","React","createElement","motion","framerMotion","exports","div","className","animate"],"mappings":"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"}
1
+ {"version":3,"file":"IslandMotion.js","sources":["../../src/components/IslandMotion.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC } from 'react'\nimport { RootState } from '../store'\nimport { useSelector } from 'react-redux'\nimport { motion } from 'framer-motion/dist/framer-motion'\n\nexport const IslandMotion: FC<IslandMotionProps> = ({ children }) => {\n // Retrieve needed stored variables\n const { incoming, outgoing, accepted, transferring } = useSelector(\n (state: RootState) => state.currentCall,\n )\n const { view, isOpen, actionsExpanded } = useSelector((state: RootState) => state.island)\n const { activeAlertsCount } = useSelector((state: RootState) => state.alerts.status)\n const {\n variants,\n border_radius_collapsed,\n border_radius_expanded,\n padding_x_collapsed,\n padding_y_collapsed,\n padding_expanded,\n } = useSelector((state: RootState) => state.motions)\n\n function getVariant() {\n // Initial size\n let size: SizeTypes = {\n width: 0,\n height: 0,\n }\n switch (view) {\n case 'call':\n if (isOpen) {\n if (accepted && transferring) {\n size = {\n width: variants.call.expanded.transfer.width,\n height: variants.call.expanded.transfer.height,\n }\n } else if (accepted && actionsExpanded) {\n size = {\n width: variants.call.expanded.accepted.actionsExpanded.width,\n height: variants.call.expanded.accepted.actionsExpanded.height,\n }\n } else if (accepted) {\n size = {\n width: variants.call.expanded.accepted.width,\n height: variants.call.expanded.accepted.height,\n }\n } else if (incoming) {\n size = {\n width: variants.call.expanded.incoming.width,\n height: variants.call.expanded.incoming.height,\n }\n } else if (outgoing) {\n size = {\n width: variants.call.expanded.outgoing.width,\n height: variants.call.expanded.outgoing.height,\n }\n }\n } else {\n size = {\n width: variants.call.collapsed.width,\n height: variants.call.collapsed.height,\n }\n }\n break\n case 'keypad':\n if (isOpen) {\n size = {\n width: variants.keypad.expanded.width,\n height: variants.keypad.expanded.height,\n }\n } else {\n size = {\n width: variants.transfer.collapsed.width,\n height: variants.transfer.collapsed.height,\n }\n }\n break\n case 'transfer':\n if (isOpen) {\n size = {\n width: variants.transfer.expanded.width,\n height: variants.transfer.expanded.height,\n }\n } else {\n size = {\n width: variants.transfer.collapsed.width,\n height: variants.transfer.collapsed.height,\n }\n }\n break\n case 'player':\n if (isOpen) {\n size = {\n width: variants.player.expanded.width,\n height: variants.player.expanded.height,\n }\n } else {\n size = {\n width: variants.player.collapsed.width,\n height: variants.player.collapsed.height,\n }\n }\n break\n case 'recorder':\n if (isOpen) {\n size = {\n width: variants.recorder.expanded.width,\n height: variants.recorder.expanded.height,\n }\n } else {\n size = {\n width: variants.recorder.collapsed.width,\n height: variants.recorder.collapsed.height,\n }\n }\n break\n }\n\n const isAlert: boolean = activeAlertsCount > 0\n\n return {\n width: `${size.width === 0 && isAlert ? variants.alerts.width : size.width}px`,\n height: `${\n isAlert && isOpen\n ? size.height +\n variants.alerts.height +\n (size.height === 0 ? padding_expanded * 2 : padding_expanded)\n : size.height\n }px`,\n borderRadius: isOpen ? `${border_radius_expanded}px` : `${border_radius_collapsed}px`,\n padding: isOpen\n ? `${padding_expanded}px`\n : `${padding_x_collapsed}px ${padding_y_collapsed}px`,\n }\n }\n\n const motionVariants = getVariant()\n\n return (\n <motion.div\n className='pi-font-sans pi-pointer-events-auto pi-overflow-hidden pi-bg-black pi-text-xs pi-cursor-pointer pi-text-white hover:pi-shadow-2xl pi-rounded-3xl pi-transition-shadow'\n animate={motionVariants}\n >\n {children && children}\n </motion.div>\n )\n}\n\nexport interface IslandMotionProps {\n children: ReactNode\n}\n\ntype SizeTypes = {\n width: number\n height: number\n}\n\nexport default IslandMotion\n"],"names":["IslandMotion","_a","children","_b","useSelector","state","currentCall","incoming","outgoing","accepted","transferring","_c","island","view","isOpen","actionsExpanded","activeAlertsCount","alerts","status","_d","motions","variants","border_radius_collapsed","border_radius_expanded","padding_x_collapsed","padding_y_collapsed","padding_expanded","motionVariants","size","width","height","call","expanded","transfer","collapsed","keypad","player","recorder","isAlert","concat","borderRadius","padding","getVariant","React","createElement","motion","framerMotion","exports","div","className","animate"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),n=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),r=require("../lib/phone/conversation.js"),c=require("../utils/genericFunctions/withTimeout.js");require("../node_modules/mic-check/lib/index.js"),require("../lib/webrtc/janus.js");var o=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"),s=require("../node_modules/react-redux/es/hooks/useDispatch.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=i(n);exports.Socket=function(i){var d=i.hostName,m=i.username,p=i.authToken,f=i.reload,g=i.reloadedCallback,b=i.children,k=s.useDispatch(),v=n.useRef(),h=n.useRef();return n.useEffect((function(){return h.current=t.io(d,{upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3}),h.current.on("connect",(function(){console.debug("Socket connected sid: ".concat(h.current.id))})),h.current.on("disconnect",(function(e){console.log("Socket disconnect - reason: ".concat(e))})),h.current.io.on("error",(function(e){console.debug("Socket error: ",e)})),h.current.on("connect_error",(function(e){console.debug("Socket connect_error: ",e)})),h.current.io.on("reconnect",(function(e){console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(h.current.id,")"))})),h.current.io.on("reconnect_attempt",(function(e){console.debug("Socket reconnect_attempt ".concat(e))})),h.current.io.on("reconnect_error",(function(e){console.debug("Socket reconnect_error: ",e)})),h.current.io.on("reconnect_failed",(function(){console.debug("Socket reconnect_failed")})),v.current=setInterval((function(){var e=Date.now();h.current.volatile.emit("ping",c.withTimeout((function(){k.alerts.removeAlert("socket_down");var n=Date.now()-e;console.debug("Socket latency: ".concat(n,"ms")),console.debug("Socket is reachable!")}),(function(){k.alerts.setAlert("socket_down"),console.debug("Socket is unreachable!")}),7e3))}),7e3),h.current.on("connect",(function(){console.log("Socket on: "+d+" is connected!"),h.current.emit("login",{accessKeyId:"".concat(m),token:p,uaType:"desktop"})})),h.current.on("authe_ok",(function(){console.log("Socket authentication success!")})),h.current.on("userMainPresenceUpdate",(function(n){o.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),a.dispatchMainPresence(n)})),h.current.on("extenUpdate",(function(e){k.users.updateExtension(e),a.dispatchConversations(e);var n=e.conversations[Object.keys(e.conversations)[0]]||{};e.username===m&&(function(e,n){var t=o.store.getState().currentCall,c=t.transferring,a=t.transferSwitching,s=t.transferCalls;if(Object.keys(n).length>0&&e.status){var i=o.store.getState().users.extensions;switch(e.status){case"ringing":k.currentCall.checkIncomingUpdatePlay({conversationId:n.id,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),incomingSocket:!0,username:"".concat(i&&i[n.counterpartNum]&&i[n.counterpartNum].username)||""});break;case"busy":if(n&&n.connected)k.currentCall.updateCurrentCall({conversationId:n.id,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),startTime:"".concat(n.startTime/1e3),username:"".concat(i&&i[n.counterpartNum]&&i[n.counterpartNum].username)||""}),k.currentCall.addTransferCalls({type:"transferred",displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),startTime:"".concat(u.getTimestampInSeconds())});else if(n&&!n.connected&&c&&!a){var l=s.find((function(e){return e.number===n.counterpartNum}));!n.connected&&l&&(k.currentCall.updateCurrentCall({transferring:!1}),k.currentCall.updateTransferSwitching(!1))}n&&!n.connected&&"out"===n.direction&&k.currentCall.checkOutgoingUpdate({outgoingSocket:!0,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),username:"".concat(i&&i[n.counterpartNum]&&i[n.counterpartNum].username)||""});case"onhold":var d=n.counterpartName,m=n.counterpartNum,p=n.startTime;c&&m&&d&&"<unknown>"!==d&&(k.currentCall.addTransferCalls({type:"destination",displayName:r.getDisplayName(n),number:m,startTime:"".concat(u.getTimestampInSeconds())}),k.currentCall.updateCurrentCall({displayName:r.getDisplayName(n),number:m,startTime:"".concat(p/1e3)}),k.island.setIslandView("call"))}}}(e,n),k.currentUser.updateConversations(e))})),h.current.on("queueUpdate",(function(e){a.dispatchQueueUpdate(e)})),h.current.on("queueMemberUpdate",(function(e){a.dispatchQueueMemberUpdate(e)})),h.current.on("takeOver",(function(){a.dispatchAlreadyLogin()})),function(){clearInterval(v.current),h.current.close()}}),[]),n.useEffect((function(){f&&(console.info("websocket reconnection"),h.current.disconnect(),h.current.connect(),g())}),[f]),l.default.createElement(l.default.Fragment,null,b)};
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/withTimeout.js");require("../node_modules/mic-check/lib/index.js"),require("../lib/webrtc/janus.js");var o=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"),s=require("../node_modules/react-redux/es/hooks/useDispatch.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=i(n);exports.Socket=function(i){var d=i.hostName,m=i.username,p=i.authToken,f=i.reload,g=i.reloadedCallback,b=i.children,k=s.useDispatch(),v=n.useRef(),h=n.useRef();return n.useEffect((function(){return h.current=t.io(d,{upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3}),h.current.on("connect",(function(){console.debug("Socket connected sid: ".concat(h.current.id))})),h.current.on("disconnect",(function(e){console.log("Socket disconnect - reason: ".concat(e))})),h.current.io.on("error",(function(e){console.debug("Socket error: ",e)})),h.current.on("connect_error",(function(e){console.debug("Socket connect_error: ",e)})),h.current.io.on("reconnect",(function(e){console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(h.current.id,")"))})),h.current.io.on("reconnect_attempt",(function(e){console.debug("Socket reconnect_attempt ".concat(e))})),h.current.io.on("reconnect_error",(function(e){console.debug("Socket reconnect_error: ",e)})),h.current.io.on("reconnect_failed",(function(){console.debug("Socket reconnect_failed")})),v.current=setInterval((function(){var e=Date.now();h.current.volatile.emit("ping",c.withTimeout((function(){k.alerts.removeAlert("socket_down");var n=Date.now()-e;console.debug("Socket latency: ".concat(n,"ms")),console.debug("Socket is reachable!")}),(function(){k.alerts.setAlert("socket_down"),console.debug("Socket is unreachable!")}),7e3))}),7e3),h.current.on("connect",(function(){console.log("Socket on: "+d+" is connected!"),h.current.emit("login",{accessKeyId:"".concat(m),token:p,uaType:"desktop"})})),h.current.on("authe_ok",(function(){console.log("Socket authentication success!")})),h.current.on("userMainPresenceUpdate",(function(n){o.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),a.dispatchMainPresence(n)})),h.current.on("extenUpdate",(function(e){k.users.updateExtension(e),a.dispatchConversations(e);var n=e.conversations[Object.keys(e.conversations)[0]]||{};e.username===m&&(function(e,n){var t=o.store.getState().currentCall,c=t.transferring,a=t.transferSwitching,s=t.transferCalls;if(Object.keys(n).length>0&&e.status){var i=o.store.getState().users.extensions;switch(e.status){case"ringing":k.currentCall.checkIncomingUpdatePlay({conversationId:n.id,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),incomingSocket:!0,username:"".concat(i&&i[n.counterpartNum]&&i[n.counterpartNum].username)||""});break;case"busy":if(n&&n.connected)k.currentCall.updateCurrentCall({conversationId:n.id,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),startTime:"".concat(n.startTime/1e3),username:"".concat(i&&i[n.counterpartNum]&&i[n.counterpartNum].username)||""}),k.currentCall.addTransferCalls({type:"transferred",displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),startTime:"".concat(u.getTimestampInSeconds())});else if(n&&!n.connected&&c&&!a){var l=s.find((function(e){return e.number===n.counterpartNum}));!n.connected&&l&&(k.currentCall.updateCurrentCall({transferring:!1}),k.currentCall.updateTransferSwitching(!1))}n&&!n.connected&&"out"===n.direction&&k.currentCall.checkOutgoingUpdate({outgoingSocket:!0,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),username:"".concat(i&&i[n.counterpartNum]&&i[n.counterpartNum].username)||""});case"onhold":var d=n.counterpartName,m=n.counterpartNum,p=n.startTime;c&&m&&d&&"<unknown>"!==d&&(k.currentCall.addTransferCalls({type:"destination",displayName:r.getDisplayName(n),number:m,startTime:"".concat(u.getTimestampInSeconds())}),k.currentCall.updateCurrentCall({displayName:r.getDisplayName(n),number:m,startTime:"".concat(p/1e3)}),k.island.setIslandView("call"))}}}(e,n),k.currentUser.updateConversations(e))})),h.current.on("queueUpdate",(function(e){a.dispatchQueueUpdate(e)})),h.current.on("queueMemberUpdate",(function(e){a.dispatchQueueMemberUpdate(e)})),h.current.on("takeOver",(function(){a.dispatchAlreadyLogin()})),h.current.on("serverReload",(function(){a.dispatchServerReload()})),function(){clearInterval(v.current),h.current.close()}}),[]),n.useEffect((function(){f&&(console.info("websocket reconnection"),h.current.disconnect(),h.current.connect(),g())}),[f]),l.default.createElement(l.default.Fragment,null,b)};
2
2
  //# sourceMappingURL=Socket.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Socket.js","sources":["../../src/components/Socket.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useEffect, useRef } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { Dispatch } from '../store'\nimport { io } from 'socket.io-client'\nimport { getDisplayName } from '../lib/phone/conversation'\nimport {\n dispatchMainPresence,\n dispatchConversations,\n dispatchQueueUpdate,\n dispatchQueueMemberUpdate,\n dispatchAlreadyLogin,\n} from '../events'\nimport { store } from '../store'\nimport { withTimeout } from '../utils'\nimport type {\n ConversationTypes,\n ExtensionTypes,\n QueuesUpdateTypes,\n QueueUpdateMemberTypes,\n MainPresenceTypes,\n} from '../types'\nimport { getTimestampInSeconds } from '../utils/genericFunctions/timestamp'\n\ninterface SocketProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n reload: boolean\n reloadedCallback: () => void\n}\n\nexport const Socket: FC<SocketProps> = ({\n hostName,\n username,\n authToken,\n reload,\n reloadedCallback,\n children,\n}) => {\n const dispatch = useDispatch<Dispatch>()\n const connectionCheckInterval = useRef<any>()\n const socket = useRef<any>()\n\n useEffect(() => {\n /**\n * Manages event and data for the currentUser\n *\n * @param res The data from the socket\n * @param conv The conversation data\n */\n const handleCurrentUserEvents = (res: ExtensionTypes, conv: ConversationTypes) => {\n // Handle transferring data\n const { transferring, transferSwitching, transferCalls } = store.getState().currentCall\n // Check conversation isn't empty\n if (Object.keys(conv).length > 0) {\n // With conversation\n if (res.status) {\n const { extensions } = store.getState().users\n switch (res.status) {\n case 'ringing':\n // The name and the number are updated here not in webrtc\n dispatch.currentCall.checkIncomingUpdatePlay({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n incomingSocket: true,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n break\n // @ts-ignore\n case 'busy':\n if (conv && conv.connected) {\n // Current call accepted and update connected call\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${conv.startTime / 1000}`,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'transferred',\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${getTimestampInSeconds()}`,\n })\n }\n // Handle not connected calls\n else if (conv && !conv.connected) {\n if (transferring && !transferSwitching) {\n // Handle hangup during transfer\n const inTransferCalls = transferCalls.find(\n (item) => item.number === conv.counterpartNum,\n )\n if (!conv.connected && inTransferCalls) {\n // Update transferring data for the current call\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n // Reset transfer switching\n // TODO - It needs to enhance how conversation connections (conv.connected) are updated server side\n // TODO - The transfer end is not handled when the an user hangups or after call switch\n dispatch.currentCall.updateTransferSwitching(false)\n }\n }\n }\n // Handle outgoing call\n if (conv && !conv.connected && conv.direction === 'out') {\n // Update the current outgoing conversation\n dispatch.currentCall.checkOutgoingUpdate({\n outgoingSocket: true,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n }\n case 'onhold':\n // The new conversation during transferring\n const { counterpartName, counterpartNum, startTime } = conv\n if (\n transferring &&\n counterpartNum &&\n counterpartName &&\n counterpartName !== '<unknown>'\n ) {\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'destination',\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${getTimestampInSeconds()}`,\n })\n // Set the current call informations\n dispatch.currentCall.updateCurrentCall({\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${startTime / 1000}`,\n })\n // Set the view of the island to call\n dispatch.island.setIslandView('call')\n }\n break\n default:\n break\n }\n }\n } else {\n // Without conversation for physical phone management\n // if (status) {\n // if (res.status == 'online' && userTotallyFree()) {\n // // Stop ringing sounds\n // dispatch.player.stopAudioPlayer()\n // // Reset current call info\n // dispatch.currentCall.reset()\n // }\n // }\n }\n }\n\n /**\n * Initialize socket connection and listeners\n */\n const initSocketConnection = () => {\n socket.current = io(hostName, {\n upgrade: false,\n transports: ['websocket'],\n reconnection: true,\n reconnectionDelay: 2000,\n })\n\n // Handle socket errors\n socket.current.on('connect', () => {\n console.debug(`Socket connected sid: ${socket.current.id}`)\n })\n socket.current.on('disconnect', (reason) => {\n console.log(`Socket disconnect - reason: ${reason}`)\n })\n socket.current.io.on('error', (err) => {\n console.debug(`Socket error: `, err)\n })\n socket.current.on('connect_error', (err) => {\n console.debug(`Socket connect_error: `, err)\n })\n socket.current.io.on('reconnect', (attempt) => {\n console.debug(`Socket reconnect attemp ${attempt} (sid: ${socket.current.id})`)\n })\n socket.current.io.on('reconnect_attempt', (attempt) => {\n console.debug(`Socket reconnect_attempt ${attempt}`)\n })\n socket.current.io.on('reconnect_error', (err) => {\n console.debug(`Socket reconnect_error: `, err)\n })\n socket.current.io.on('reconnect_failed', () => {\n console.debug(`Socket reconnect_failed`)\n })\n\n // Checks if socket is reachable every 5 seconds\n connectionCheckInterval.current = setInterval(() => {\n const start = Date.now()\n socket.current.volatile.emit(\n 'ping',\n withTimeout(\n () => {\n // Remove socket_down alert\n dispatch.alerts.removeAlert('socket_down')\n // Calculate and log latency\n const latency = Date.now() - start\n console.debug(`Socket latency: ${latency}ms`)\n console.debug('Socket is reachable!')\n },\n () => {\n // Set socket_down alert\n dispatch.alerts.setAlert('socket_down')\n console.debug('Socket is unreachable!')\n },\n 7 * 1000, // Waits for the response 7 seconds\n ),\n )\n }, 7 * 1000) // Executes a new check every 7 seconds\n\n // Handle connection message\n socket.current.on('connect', () => {\n console.log('Socket on: ' + hostName + ' is connected!')\n socket.current.emit('login', {\n accessKeyId: `${username}`,\n token: authToken,\n uaType: 'desktop',\n })\n })\n\n // Handle authentication success message\n socket.current.on('authe_ok', () => {\n console.log('Socket authentication success!')\n })\n\n socket.current.on('userMainPresenceUpdate', (res: MainPresenceTypes) => {\n // Update endpoints store\n store.dispatch.users.updateEndpointMainPresence({ ...res.mainPresence })\n // Dispatch dispatchMainPresence Event\n dispatchMainPresence(res)\n })\n\n socket.current.on('extenUpdate', (res: ExtensionTypes) => {\n // Update extensions and conversations in users store\n dispatch.users.updateExtension(res)\n // Dispatch conversations event\n dispatchConversations(res)\n // Initialize conversation\n const conv = res.conversations[Object.keys(res.conversations)[0]] || {}\n // Handle only the events of the user\n if (res.username === username) {\n handleCurrentUserEvents(res, conv)\n // Update the conversations of the user\n dispatch.currentUser.updateConversations(res)\n }\n })\n\n // `queueUpdate` is the socket event when the data of a queue updates\n socket.current.on('queueUpdate', (res: QueuesUpdateTypes) => {\n // Dispatch queueUpdate event\n dispatchQueueUpdate(res)\n })\n\n // `queueMemberUpdate` is the socket event when the data of a queue member changes\n socket.current.on('queueMemberUpdate', (res: QueueUpdateMemberTypes) => {\n // Dispatch queueMemberUpdate event\n dispatchQueueMemberUpdate(res)\n })\n\n // `takeOver` is the socket event when the user does login from another new window\n socket.current.on('takeOver', () => {\n // Dispatch takeOver event\n dispatchAlreadyLogin()\n })\n }\n\n initSocketConnection()\n\n // Stop the check socket interval\n // Close the socket connection\n return () => {\n clearInterval(connectionCheckInterval.current)\n socket.current.close()\n }\n }, [])\n\n // Manage reload events\n useEffect(() => {\n if (reload) {\n console.info('websocket reconnection')\n socket.current.disconnect()\n socket.current.connect()\n reloadedCallback()\n }\n }, [reload])\n\n return <>{children}</>\n}\n"],"names":["_a","hostName","username","authToken","reload","reloadedCallback","children","dispatch","useDispatch","connectionCheckInterval","useRef","socket","useEffect","current","io","upgrade","transports","reconnection","reconnectionDelay","on","console","debug","concat","id","reason","log","err","attempt","setInterval","start","Date","now","volatile","emit","withTimeout","alerts","removeAlert","latency","setAlert","accessKeyId","token","uaType","res","store","users","updateEndpointMainPresence","__assign","mainPresence","dispatchMainPresence","updateExtension","dispatchConversations","conv","conversations","Object","keys","getState","currentCall","transferring","transferSwitching","transferCalls","length","status","extensions","checkIncomingUpdatePlay","conversationId","displayName","getDisplayName","number","counterpartNum","incomingSocket","connected","updateCurrentCall","startTime","addTransferCalls","type","getTimestampInSeconds","inTransferCalls","find","item","updateTransferSwitching","direction","checkOutgoingUpdate","outgoingSocket","counterpartName","island","setIslandView","handleCurrentUserEvents","currentUser","updateConversations","dispatchQueueUpdate","dispatchQueueMemberUpdate","dispatchAlreadyLogin","clearInterval","close","info","disconnect","connect","React","createElement","Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"Socket.js","sources":["../../src/components/Socket.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useEffect, useRef } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { Dispatch } from '../store'\nimport { io } from 'socket.io-client'\nimport { getDisplayName } from '../lib/phone/conversation'\nimport {\n dispatchMainPresence,\n dispatchConversations,\n dispatchQueueUpdate,\n dispatchQueueMemberUpdate,\n dispatchAlreadyLogin,\n dispatchServerReload,\n} from '../events'\nimport { store } from '../store'\nimport { withTimeout } from '../utils'\nimport type {\n ConversationTypes,\n ExtensionTypes,\n QueuesUpdateTypes,\n QueueUpdateMemberTypes,\n MainPresenceTypes,\n} from '../types'\nimport { getTimestampInSeconds } from '../utils/genericFunctions/timestamp'\n\ninterface SocketProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n reload: boolean\n reloadedCallback: () => void\n}\n\nexport const Socket: FC<SocketProps> = ({\n hostName,\n username,\n authToken,\n reload,\n reloadedCallback,\n children,\n}) => {\n const dispatch = useDispatch<Dispatch>()\n const connectionCheckInterval = useRef<any>()\n const socket = useRef<any>()\n\n useEffect(() => {\n /**\n * Manages event and data for the currentUser\n *\n * @param res The data from the socket\n * @param conv The conversation data\n */\n const handleCurrentUserEvents = (res: ExtensionTypes, conv: ConversationTypes) => {\n // Handle transferring data\n const { transferring, transferSwitching, transferCalls } = store.getState().currentCall\n // Check conversation isn't empty\n if (Object.keys(conv).length > 0) {\n // With conversation\n if (res.status) {\n const { extensions } = store.getState().users\n switch (res.status) {\n case 'ringing':\n // The name and the number are updated here not in webrtc\n dispatch.currentCall.checkIncomingUpdatePlay({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n incomingSocket: true,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n break\n // @ts-ignore\n case 'busy':\n if (conv && conv.connected) {\n // Current call accepted and update connected call\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${conv.startTime / 1000}`,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'transferred',\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${getTimestampInSeconds()}`,\n })\n }\n // Handle not connected calls\n else if (conv && !conv.connected) {\n if (transferring && !transferSwitching) {\n // Handle hangup during transfer\n const inTransferCalls = transferCalls.find(\n (item) => item.number === conv.counterpartNum,\n )\n if (!conv.connected && inTransferCalls) {\n // Update transferring data for the current call\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n // Reset transfer switching\n // TODO - It needs to enhance how conversation connections (conv.connected) are updated server side\n // TODO - The transfer end is not handled when the an user hangups or after call switch\n dispatch.currentCall.updateTransferSwitching(false)\n }\n }\n }\n // Handle outgoing call\n if (conv && !conv.connected && conv.direction === 'out') {\n // Update the current outgoing conversation\n dispatch.currentCall.checkOutgoingUpdate({\n outgoingSocket: true,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n }\n case 'onhold':\n // The new conversation during transferring\n const { counterpartName, counterpartNum, startTime } = conv\n if (\n transferring &&\n counterpartNum &&\n counterpartName &&\n counterpartName !== '<unknown>'\n ) {\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'destination',\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${getTimestampInSeconds()}`,\n })\n // Set the current call informations\n dispatch.currentCall.updateCurrentCall({\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${startTime / 1000}`,\n })\n // Set the view of the island to call\n dispatch.island.setIslandView('call')\n }\n break\n default:\n break\n }\n }\n } else {\n // Without conversation for physical phone management\n // if (status) {\n // if (res.status == 'online' && userTotallyFree()) {\n // // Stop ringing sounds\n // dispatch.player.stopAudioPlayer()\n // // Reset current call info\n // dispatch.currentCall.reset()\n // }\n // }\n }\n }\n\n /**\n * Initialize socket connection and listeners\n */\n const initSocketConnection = () => {\n socket.current = io(hostName, {\n upgrade: false,\n transports: ['websocket'],\n reconnection: true,\n reconnectionDelay: 2000,\n })\n\n // Handle socket errors\n socket.current.on('connect', () => {\n console.debug(`Socket connected sid: ${socket.current.id}`)\n })\n socket.current.on('disconnect', (reason) => {\n console.log(`Socket disconnect - reason: ${reason}`)\n })\n socket.current.io.on('error', (err) => {\n console.debug(`Socket error: `, err)\n })\n socket.current.on('connect_error', (err) => {\n console.debug(`Socket connect_error: `, err)\n })\n socket.current.io.on('reconnect', (attempt) => {\n console.debug(`Socket reconnect attemp ${attempt} (sid: ${socket.current.id})`)\n })\n socket.current.io.on('reconnect_attempt', (attempt) => {\n console.debug(`Socket reconnect_attempt ${attempt}`)\n })\n socket.current.io.on('reconnect_error', (err) => {\n console.debug(`Socket reconnect_error: `, err)\n })\n socket.current.io.on('reconnect_failed', () => {\n console.debug(`Socket reconnect_failed`)\n })\n\n // Checks if socket is reachable every 5 seconds\n connectionCheckInterval.current = setInterval(() => {\n const start = Date.now()\n socket.current.volatile.emit(\n 'ping',\n withTimeout(\n () => {\n // Remove socket_down alert\n dispatch.alerts.removeAlert('socket_down')\n // Calculate and log latency\n const latency = Date.now() - start\n console.debug(`Socket latency: ${latency}ms`)\n console.debug('Socket is reachable!')\n },\n () => {\n // Set socket_down alert\n dispatch.alerts.setAlert('socket_down')\n console.debug('Socket is unreachable!')\n },\n 7 * 1000, // Waits for the response 7 seconds\n ),\n )\n }, 7 * 1000) // Executes a new check every 7 seconds\n\n // Handle connection message\n socket.current.on('connect', () => {\n console.log('Socket on: ' + hostName + ' is connected!')\n socket.current.emit('login', {\n accessKeyId: `${username}`,\n token: authToken,\n uaType: 'desktop',\n })\n })\n\n // Handle authentication success message\n socket.current.on('authe_ok', () => {\n console.log('Socket authentication success!')\n })\n\n socket.current.on('userMainPresenceUpdate', (res: MainPresenceTypes) => {\n // Update endpoints store\n store.dispatch.users.updateEndpointMainPresence({ ...res.mainPresence })\n // Dispatch dispatchMainPresence Event\n dispatchMainPresence(res)\n })\n\n socket.current.on('extenUpdate', (res: ExtensionTypes) => {\n // Update extensions and conversations in users store\n dispatch.users.updateExtension(res)\n // Dispatch conversations event\n dispatchConversations(res)\n // Initialize conversation\n const conv = res.conversations[Object.keys(res.conversations)[0]] || {}\n // Handle only the events of the user\n if (res.username === username) {\n handleCurrentUserEvents(res, conv)\n // Update the conversations of the user\n dispatch.currentUser.updateConversations(res)\n }\n })\n\n // `queueUpdate` is the socket event when the data of a queue updates\n socket.current.on('queueUpdate', (res: QueuesUpdateTypes) => {\n // Dispatch queueUpdate event\n dispatchQueueUpdate(res)\n })\n\n // `queueMemberUpdate` is the socket event when the data of a queue member changes\n socket.current.on('queueMemberUpdate', (res: QueueUpdateMemberTypes) => {\n // Dispatch queueMemberUpdate event\n dispatchQueueMemberUpdate(res)\n })\n\n // `takeOver` is the socket event when the user does login from another new window\n socket.current.on('takeOver', () => {\n // Dispatch takeOver event\n dispatchAlreadyLogin()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('serverReload', () => {\n // Dispatch serverReload event\n dispatchServerReload()\n })\n }\n\n initSocketConnection()\n\n // Stop the check socket interval\n // Close the socket connection\n return () => {\n clearInterval(connectionCheckInterval.current)\n socket.current.close()\n }\n }, [])\n\n // Manage reload events\n useEffect(() => {\n if (reload) {\n console.info('websocket reconnection')\n socket.current.disconnect()\n socket.current.connect()\n reloadedCallback()\n }\n }, [reload])\n\n return <>{children}</>\n}\n"],"names":["_a","hostName","username","authToken","reload","reloadedCallback","children","dispatch","useDispatch","connectionCheckInterval","useRef","socket","useEffect","current","io","upgrade","transports","reconnection","reconnectionDelay","on","console","debug","concat","id","reason","log","err","attempt","setInterval","start","Date","now","volatile","emit","withTimeout","alerts","removeAlert","latency","setAlert","accessKeyId","token","uaType","res","store","users","updateEndpointMainPresence","__assign","mainPresence","dispatchMainPresence","updateExtension","dispatchConversations","conv","conversations","Object","keys","getState","currentCall","transferring","transferSwitching","transferCalls","length","status","extensions","checkIncomingUpdatePlay","conversationId","displayName","getDisplayName","number","counterpartNum","incomingSocket","connected","updateCurrentCall","startTime","addTransferCalls","type","getTimestampInSeconds","inTransferCalls","find","item","updateTransferSwitching","direction","checkOutgoingUpdate","outgoingSocket","counterpartName","island","setIslandView","handleCurrentUserEvents","currentUser","updateConversations","dispatchQueueUpdate","dispatchQueueMemberUpdate","dispatchAlreadyLogin","dispatchServerReload","clearInterval","close","info","disconnect","connect","React","createElement","Fragment"],"mappings":"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"}
@@ -29,3 +29,9 @@ export declare function dispatchQueueMemberUpdate(event: QueueUpdateMemberTypes)
29
29
  * @param event The takeOver event from socket
30
30
  */
31
31
  export declare function dispatchAlreadyLogin(): void;
32
+ /**
33
+ * The dispatch function for server reload
34
+ *
35
+ * @param event The serverReload event from socket
36
+ */
37
+ export declare function dispatchServerReload(): void;
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),require("react");var e=require("../utils/genericFunctions/eventDispatch.js");exports.dispatchAlreadyLogin=function(){e.eventDispatch("phone-island-user-already-login",{})},exports.dispatchConversations=function(n){var s,t=((s={})[n.username]={conversations:n.conversations},s);e.eventDispatch("phone-island-conversations",t)},exports.dispatchMainPresence=function(n){var s,t=((s={})[n.mainPresence.username]={mainPresence:n.mainPresence.status},s);e.eventDispatch("phone-island-main-presence",t)},exports.dispatchQueueMemberUpdate=function(n){var s,t=((s={})[n.member]=n,s);e.eventDispatch("phone-island-queue-member-update",t)},exports.dispatchQueueUpdate=function(n){var s,t=((s={})[n.queue]=n,s);e.eventDispatch("phone-island-queue-update",t)};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),require("react");var e=require("../utils/genericFunctions/eventDispatch.js");exports.dispatchAlreadyLogin=function(){e.eventDispatch("phone-island-user-already-login",{})},exports.dispatchConversations=function(n){var s,t=((s={})[n.username]={conversations:n.conversations},s);e.eventDispatch("phone-island-conversations",t)},exports.dispatchMainPresence=function(n){var s,t=((s={})[n.mainPresence.username]={mainPresence:n.mainPresence.status},s);e.eventDispatch("phone-island-main-presence",t)},exports.dispatchQueueMemberUpdate=function(n){var s,t=((s={})[n.member]=n,s);e.eventDispatch("phone-island-queue-member-update",t)},exports.dispatchQueueUpdate=function(n){var s,t=((s={})[n.queue]=n,s);e.eventDispatch("phone-island-queue-update",t)},exports.dispatchServerReload=function(){e.eventDispatch("phone-island-server-reloaded",{})};
2
2
  //# sourceMappingURL=SocketEvents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SocketEvents.js","sources":["../../src/events/SocketEvents.ts"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { eventDispatch } from '../utils'\nimport type {\n MainPresenceTypes,\n MainPresenceEventTypes,\n ExtensionTypes,\n ConversationsEventType,\n QueuesUpdateTypes,\n QueuesEventType,\n QueueUpdateMemberTypes,\n QueuesMemberEventType,\n} from '../types'\n\n/**\n * The dispatch function for the userMainPresenceUpdate event\n *\n * @param event The userMainPresenceUpdate event from socket\n */\nexport function dispatchMainPresence(event: MainPresenceTypes) {\n const data: MainPresenceEventTypes = {\n [event.mainPresence.username]: {\n mainPresence: event.mainPresence.status,\n },\n }\n eventDispatch('phone-island-main-presence', data)\n}\n\n/**\n * The dispatch function for the extenUpdate event\n *\n * @param event The extenUpdate event from socket\n */\nexport function dispatchConversations(event: ExtensionTypes) {\n const data: ConversationsEventType = {\n [event.username]: {\n conversations: event.conversations,\n },\n }\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-conversations', data)\n}\n\n/**\n * The dispatch function for the queueUpdate event\n *\n * @param event The queueUpdate event from socket\n */\nexport function dispatchQueueUpdate(event: QueuesUpdateTypes) {\n const data: QueuesEventType = {\n [event.queue]: event,\n }\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-queue-update', data)\n}\n\n/**\n * The dispatch function for the queueMemberUpdate event\n *\n * @param event The queueMemberUpdate event from socket\n */\nexport function dispatchQueueMemberUpdate(event: QueueUpdateMemberTypes) {\n const data: QueuesMemberEventType = {\n [event.member]: event,\n }\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-queue-member-update', data)\n}\n\n/**\n * The dispatch function for the takeOver event\n *\n * @param event The takeOver event from socket\n */\nexport function dispatchAlreadyLogin() {\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-user-already-login', {})\n}\n"],"names":["eventDispatch","event","data","_a","username","conversations","mainPresence","status","member","queue"],"mappings":"yLA6EEA,gBAAc,kCAAmC,CAAA,EACnD,gCA5CM,SAAgCC,SAC9BC,IAAIC,EAAA,CAAA,GACPF,EAAMG,UAAW,CAChBC,cAAeJ,EAAMI,kBAIzBL,gBAAc,6BAA8BE,EAC9C,+BAtBM,SAA+BD,SAC7BC,IAAIC,EAAA,CAAA,GACPF,EAAMK,aAAaF,UAAW,CAC7BE,aAAcL,EAAMK,aAAaC,WAGrCP,gBAAc,6BAA8BE,EAC9C,oCAmCM,SAAoCD,SAClCC,IAAIC,EAAA,CAAA,GACPF,EAAMO,QAASP,KAGlBD,gBAAc,mCAAoCE,EACpD,8BAnBM,SAA8BD,SAC5BC,IAAIC,EAAA,CAAA,GACPF,EAAMQ,OAAQR,KAGjBD,gBAAc,4BAA6BE,EAC7C"}
1
+ {"version":3,"file":"SocketEvents.js","sources":["../../src/events/SocketEvents.ts"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { eventDispatch } from '../utils'\nimport type {\n MainPresenceTypes,\n MainPresenceEventTypes,\n ExtensionTypes,\n ConversationsEventType,\n QueuesUpdateTypes,\n QueuesEventType,\n QueueUpdateMemberTypes,\n QueuesMemberEventType,\n} from '../types'\n\n/**\n * The dispatch function for the userMainPresenceUpdate event\n *\n * @param event The userMainPresenceUpdate event from socket\n */\nexport function dispatchMainPresence(event: MainPresenceTypes) {\n const data: MainPresenceEventTypes = {\n [event.mainPresence.username]: {\n mainPresence: event.mainPresence.status,\n },\n }\n eventDispatch('phone-island-main-presence', data)\n}\n\n/**\n * The dispatch function for the extenUpdate event\n *\n * @param event The extenUpdate event from socket\n */\nexport function dispatchConversations(event: ExtensionTypes) {\n const data: ConversationsEventType = {\n [event.username]: {\n conversations: event.conversations,\n },\n }\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-conversations', data)\n}\n\n/**\n * The dispatch function for the queueUpdate event\n *\n * @param event The queueUpdate event from socket\n */\nexport function dispatchQueueUpdate(event: QueuesUpdateTypes) {\n const data: QueuesEventType = {\n [event.queue]: event,\n }\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-queue-update', data)\n}\n\n/**\n * The dispatch function for the queueMemberUpdate event\n *\n * @param event The queueMemberUpdate event from socket\n */\nexport function dispatchQueueMemberUpdate(event: QueueUpdateMemberTypes) {\n const data: QueuesMemberEventType = {\n [event.member]: event,\n }\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-queue-member-update', data)\n}\n\n/**\n * The dispatch function for the takeOver event\n *\n * @param event The takeOver event from socket\n */\nexport function dispatchAlreadyLogin() {\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-user-already-login', {})\n}\n\n/**\n * The dispatch function for server reload\n *\n * @param event The serverReload event from socket\n */\nexport function dispatchServerReload() {\n // Dispatch the event on window for external handlers\n eventDispatch('phone-island-server-reloaded', {})\n}\n"],"names":["eventDispatch","event","data","_a","username","conversations","mainPresence","status","member","queue"],"mappings":"yLA6EEA,gBAAc,kCAAmC,CAAA,EACnD,gCA5CM,SAAgCC,SAC9BC,IAAIC,EAAA,CAAA,GACPF,EAAMG,UAAW,CAChBC,cAAeJ,EAAMI,kBAIzBL,gBAAc,6BAA8BE,EAC9C,+BAtBM,SAA+BD,SAC7BC,IAAIC,EAAA,CAAA,GACPF,EAAMK,aAAaF,UAAW,CAC7BE,aAAcL,EAAMK,aAAaC,WAGrCP,gBAAc,6BAA8BE,EAC9C,oCAmCM,SAAoCD,SAClCC,IAAIC,EAAA,CAAA,GACPF,EAAMO,QAASP,KAGlBD,gBAAc,mCAAoCE,EACpD,8BAnBM,SAA8BD,SAC5BC,IAAIC,EAAA,CAAA,GACPF,EAAMQ,OAAQR,KAGjBD,gBAAc,4BAA6BE,EAC7C,0CAgCEF,gBAAc,+BAAgC,CAAA,EAChD"}
@@ -49,3 +49,4 @@ export declare function attendedTransfer(number: string): Promise<boolean | unde
49
49
  * Play the dtmf audio files
50
50
  */
51
51
  export declare function playDtmfAudio(key: string): void;
52
+ export declare function park(): void;
@@ -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"),o=require("../../store/index.js"),a=require("../user/default_device.js"),s=require("../../services/astproxy.js"),u=require("../../static/dtmf/index.js");function i(o){var a=this;t.getSupportedDevices((function(){return e.__awaiter(a,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(o,{audio:{mandatory:{echoCancellation:!1,googEchoCancellation:!1,googAutoGainControl:!1,googAutoGainControl2:!1,googNoiseSuppression:!1,googHighpassFilter:!1,googTypingNoiseDetection:!1}},audioSend:!0,audioRecv:!0,videoSend:!1,videoRecv:!1})];case 1:return e.sent(),[2]}}))}))}))}exports.answerIncomingCall=function(){a.isWebRTC()&&n.answerWebRTC()},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=o.store.getState().currentCall.conversationId,n=o.store.getState().currentUser.default_device,r&&(null==n?void 0:n.id)&&t?[4,s.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){i("sip:".concat(e,"@").concat(t))},exports.callSipURI=i,exports.hangupAllExtensions=function(){var e=o.store.getState().currentUser.conversations,t=function(t){Object.keys(e[t]).forEach((function(e){s.hangupConversation({convid:e,endpointId:t})}))};for(var r in e)t(r)},exports.hangupCurrentCall=function(){var e=o.store.getState().currentCall,t=e.outgoing,r=e.accepted;(t||r)&&n.hangup(),o.store.dispatch.player.stopAudioPlayer(),o.store.dispatch.currentCall.reset()},exports.muteCurrentCall=function(){a.isWebRTC()&&n.muteWebRTC()&&o.store.dispatch.currentCall.updateCurrentCall({muted:!0})},exports.pauseCurrentCall=function(){a.isWebRTC()&&n.pauseWebRTC()&&(o.store.dispatch.currentCall.updateCurrentCall({paused:!0}),o.store.dispatch.player.pauseRemoteAudio())},exports.playDtmfAudio=function(e){"*"===e&&(e="star"),"#"===e&&(e="pound"),o.store.dispatch.player.updateStartAudioPlayer({src:u.default["dtmf_".concat(e)]})},exports.unmuteCurrentCall=function(){a.isWebRTC()&&n.unmuteWebRTC()&&o.store.dispatch.currentCall.updateCurrentCall({muted:!1})},exports.unpauseCurrentCall=function(){a.isWebRTC()&&n.unpauseWebRTC()&&(o.store.dispatch.currentCall.updateCurrentCall({paused:!1}),o.store.dispatch.player.playRemoteAudio())};
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"),o=require("../../store/index.js"),a=require("../user/default_device.js"),s=require("../../services/astproxy.js"),i=require("../../static/dtmf/index.js");function u(o){var a=this;t.getSupportedDevices((function(){return e.__awaiter(a,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(o,{audio:{mandatory:{echoCancellation:!1,googEchoCancellation:!1,googAutoGainControl:!1,googAutoGainControl2:!1,googNoiseSuppression:!1,googHighpassFilter:!1,googTypingNoiseDetection:!1}},audioSend:!0,audioRecv:!0,videoSend:!1,videoRecv:!1})];case 1:return e.sent(),[2]}}))}))}))}exports.answerIncomingCall=function(){a.isWebRTC()&&n.answerWebRTC()},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=o.store.getState().currentCall.conversationId,n=o.store.getState().currentUser.default_device,r&&(null==n?void 0:n.id)&&t?[4,s.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){u("sip:".concat(e,"@").concat(t))},exports.callSipURI=u,exports.hangupAllExtensions=function(){var e=o.store.getState().currentUser.conversations,t=function(t){Object.keys(e[t]).forEach((function(e){s.hangupConversation({convid:e,endpointId:t})}))};for(var r in e)t(r)},exports.hangupCurrentCall=function(){var e=o.store.getState().currentCall,t=e.outgoing,r=e.accepted;(t||r)&&n.hangup(),o.store.dispatch.player.stopAudioPlayer(),o.store.dispatch.currentCall.reset()},exports.muteCurrentCall=function(){a.isWebRTC()&&n.muteWebRTC()&&o.store.dispatch.currentCall.updateCurrentCall({muted:!0})},exports.park=function(){var e,t=null===(e=o.store.getState().currentUser.endpoints)||void 0===e?void 0:e.mainextension[0].id,r=o.store.getState().currentCall.conversationId;t&&r&&s.parkConversation({applicantId:t,convid:r,endpointId:t})},exports.pauseCurrentCall=function(){a.isWebRTC()&&n.pauseWebRTC()&&(o.store.dispatch.currentCall.updateCurrentCall({paused:!0}),o.store.dispatch.player.pauseRemoteAudio())},exports.playDtmfAudio=function(e){"*"===e&&(e="star"),"#"===e&&(e="pound"),o.store.dispatch.player.updateStartAudioPlayer({src:i.default["dtmf_".concat(e)]})},exports.unmuteCurrentCall=function(){a.isWebRTC()&&n.unmuteWebRTC()&&o.store.dispatch.currentCall.updateCurrentCall({muted:!1})},exports.unpauseCurrentCall=function(){a.isWebRTC()&&n.unpauseWebRTC()&&(o.store.dispatch.currentCall.updateCurrentCall({paused:!1}),o.store.dispatch.player.playRemoteAudio())};
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} from '../../services/astproxy'\nimport dtmfAudios from '../../static/dtmf'\nimport { hangupConversation } from '../../services/astproxy'\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 callSipURI(sipURI)\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: false,\n googEchoCancellation: false,\n googAutoGainControl: false,\n googAutoGainControl2: false,\n googNoiseSuppression: false,\n googHighpassFilter: false,\n googTypingNoiseDetection: false,\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 }\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 hangup()\n }\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\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 }\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 }\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 }\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 }\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"],"names":["callSipURI","sipURI","_this","this","getSupportedDevices","__awaiter","Janus","log","call","audio","mandatory","echoCancellation","googEchoCancellation","googAutoGainControl","googAutoGainControl2","googNoiseSuppression","googHighpassFilter","googTypingNoiseDetection","audioSend","audioRecv","videoSend","videoRecv","_a","sent","isWebRTC","answerWebRTC","number","conversationId","store","getState","currentCall","default_device","currentUser","id","attendedTransferRequest","convid","to","endpointId","sipHost","concat","conversations","extension","Object","keys","forEach","hangupConversation","outgoing","accepted","hangup","dispatch","player","stopAudioPlayer","reset","muteWebRTC","updateCurrentCall","muted","pauseWebRTC","paused","pauseRemoteAudio","key","updateStartAudioPlayer","src","dtmfAudios","unmuteWebRTC","unpauseWebRTC","playRemoteAudio"],"mappings":"0XAqCM,SAAUA,EAAWC,GAA3B,IAsBCC,EAAAC,KArBCC,EAAmBA,qBAAC,WAAA,OAAAC,EAAAA,UAAAH,OAAA,OAAA,GAAA,yEAGlB,OADAI,UAAMC,IAAI,sBACJ,CAAA,EAAAC,EAAIA,KAACP,EAAQ,CACjBQ,MAAO,CACLC,UAAW,CACTC,kBAAkB,EAClBC,sBAAsB,EACtBC,qBAAqB,EACrBC,sBAAsB,EACtBC,sBAAsB,EACtBC,oBAAoB,EACpBC,0BAA0B,IAG9BC,WAAW,EACXC,WAAW,EACXC,WAAW,EACXC,WAAW,mBAfbC,EAAAC,cAiBD,GAAA,GACH,uCAMMC,EAAQA,YACVC,EAAAA,cAEJ,2BAoHM,SAAiCC,2HAKjC,OAHIC,EAAmBC,EAAAA,MAAMC,WAAWC,2BACpCC,EAAmBH,EAAAA,MAAMC,WAAWG,2BAExCL,IAAkBI,aAAA,EAAAA,EAAgBE,KAAMP,EACnC,CAAA,EAAMQ,mBAAwB,CACnCC,OAAQR,EACRS,GAAIV,EACJW,WAAYN,EAAeE,MAJmB,CAAA,EAAA,GAChD,KAAA,EAAA,MAAA,CAAA,EAAOX,iCAMV,qBAzKe,SAAWI,EAAgBY,GAEzCtC,EADe,OAAAuC,OAAOb,EAAU,KAAAa,OAAAD,GAElC,8DA6CU,IAAAE,EAAkBZ,EAAKA,MAACC,WAAWG,YAAWQ,yBAE3CC,GACgBC,OAAOC,KAAKH,EAAcC,IAClCG,SAAQ,SAACX,GACxBY,qBAAmB,CACjBV,OAAQF,EACRI,WAAYI,GAEhB,KAPF,IAAK,IAAMA,KAAaD,IAAbC,EASb,uCAMQ,IAAAnB,EAAyBM,EAAAA,MAAMC,WAAWC,YAAxCgB,EAAQxB,EAAAwB,SAAEC,cACdD,GAAYC,IACdC,EAAAA,SAEFpB,EAAAA,MAAMqB,SAASC,OAAOC,kBACtBvB,EAAAA,MAAMqB,SAASnB,YAAYsB,OAC7B,qCAOM5B,EAAQA,YACI6B,EAAAA,cAEZzB,QAAMqB,SAASnB,YAAYwB,kBAAkB,CAC3CC,OAAO,GAIf,sCAsBM/B,EAAQA,YACKgC,EAAAA,gBAEb5B,QAAMqB,SAASnB,YAAYwB,kBAAkB,CAC3CG,QAAQ,IAGV7B,EAAAA,MAAMqB,SAASC,OAAOQ,mBAG5B,wBAwDM,SAAwBC,GAChB,MAARA,IAAaA,EAAM,QACX,MAARA,IAAaA,EAAM,SACvB/B,EAAAA,MAAMqB,SAASC,OAAOU,uBAAuB,CAAEC,IAAKC,UAAW,QAAQvB,OAAAoB,KACzE,uCArFMnC,EAAQA,YACMuC,EAAAA,gBAEdnC,QAAMqB,SAASnB,YAAYwB,kBAAkB,CAC3CC,OAAO,GAIf,wCAwBM/B,EAAQA,YACOwC,EAAAA,kBAEfpC,QAAMqB,SAASnB,YAAYwB,kBAAkB,CAC3CG,QAAQ,IAGV7B,EAAAA,MAAMqB,SAASC,OAAOe,kBAG5B"}
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} from '../../services/astproxy'\nimport dtmfAudios from '../../static/dtmf'\nimport { hangupConversation, parkConversation } from '../../services/astproxy'\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 callSipURI(sipURI)\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: false,\n googEchoCancellation: false,\n googAutoGainControl: false,\n googAutoGainControl2: false,\n googNoiseSuppression: false,\n googHighpassFilter: false,\n googTypingNoiseDetection: false,\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 }\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 hangup()\n }\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\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 }\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 }\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 }\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 }\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\nexport function park() {\n const mainExtension = store.getState().currentUser.endpoints?.mainextension[0].id\n const conversationId = store.getState().currentCall.conversationId\n\n if (mainExtension && conversationId) {\n parkConversation({\n applicantId: mainExtension,\n convid: conversationId,\n endpointId: mainExtension,\n })\n }\n}\n"],"names":["callSipURI","sipURI","_this","this","getSupportedDevices","__awaiter","Janus","log","call","audio","mandatory","echoCancellation","googEchoCancellation","googAutoGainControl","googAutoGainControl2","googNoiseSuppression","googHighpassFilter","googTypingNoiseDetection","audioSend","audioRecv","videoSend","videoRecv","_a","sent","isWebRTC","answerWebRTC","number","conversationId","store","getState","currentCall","default_device","currentUser","id","attendedTransferRequest","convid","to","endpointId","sipHost","concat","conversations","extension","Object","keys","forEach","hangupConversation","outgoing","accepted","hangup","dispatch","player","stopAudioPlayer","reset","muteWebRTC","updateCurrentCall","muted","mainExtension","endpoints","mainextension","parkConversation","applicantId","pauseWebRTC","paused","pauseRemoteAudio","key","updateStartAudioPlayer","src","dtmfAudios","unmuteWebRTC","unpauseWebRTC","playRemoteAudio"],"mappings":"0XAqCM,SAAUA,EAAWC,GAA3B,IAsBCC,EAAAC,KArBCC,EAAmBA,qBAAC,WAAA,OAAAC,EAAAA,UAAAH,OAAA,OAAA,GAAA,yEAGlB,OADAI,UAAMC,IAAI,sBACJ,CAAA,EAAAC,EAAIA,KAACP,EAAQ,CACjBQ,MAAO,CACLC,UAAW,CACTC,kBAAkB,EAClBC,sBAAsB,EACtBC,qBAAqB,EACrBC,sBAAsB,EACtBC,sBAAsB,EACtBC,oBAAoB,EACpBC,0BAA0B,IAG9BC,WAAW,EACXC,WAAW,EACXC,WAAW,EACXC,WAAW,mBAfbC,EAAAC,cAiBD,GAAA,GACH,uCAMMC,EAAQA,YACVC,EAAAA,cAEJ,2BAoHM,SAAiCC,2HAKjC,OAHIC,EAAmBC,EAAAA,MAAMC,WAAWC,2BACpCC,EAAmBH,EAAAA,MAAMC,WAAWG,2BAExCL,IAAkBI,aAAA,EAAAA,EAAgBE,KAAMP,EACnC,CAAA,EAAMQ,mBAAwB,CACnCC,OAAQR,EACRS,GAAIV,EACJW,WAAYN,EAAeE,MAJmB,CAAA,EAAA,GAChD,KAAA,EAAA,MAAA,CAAA,EAAOX,iCAMV,qBAzKe,SAAWI,EAAgBY,GAEzCtC,EADe,OAAAuC,OAAOb,EAAU,KAAAa,OAAAD,GAElC,8DA6CU,IAAAE,EAAkBZ,EAAKA,MAACC,WAAWG,YAAWQ,yBAE3CC,GACgBC,OAAOC,KAAKH,EAAcC,IAClCG,SAAQ,SAACX,GACxBY,qBAAmB,CACjBV,OAAQF,EACRI,WAAYI,GAEhB,KAPF,IAAK,IAAMA,KAAaD,IAAbC,EASb,uCAMQ,IAAAnB,EAAyBM,EAAAA,MAAMC,WAAWC,YAAxCgB,EAAQxB,EAAAwB,SAAEC,cACdD,GAAYC,IACdC,EAAAA,SAEFpB,EAAAA,MAAMqB,SAASC,OAAOC,kBACtBvB,EAAAA,MAAMqB,SAASnB,YAAYsB,OAC7B,qCAOM5B,EAAQA,YACI6B,EAAAA,cAEZzB,QAAMqB,SAASnB,YAAYwB,kBAAkB,CAC3CC,OAAO,GAIf,gCA+FQC,EAAwD,QAAxClC,EAAAM,EAAAA,MAAMC,WAAWG,YAAYyB,iBAAW,IAAAnC,OAAA,EAAAA,EAAAoC,cAAc,GAAGzB,GACzEN,EAAiBC,EAAKA,MAACC,WAAWC,YAAYH,eAEhD6B,GAAiB7B,GACnBgC,mBAAiB,CACfC,YAAaJ,EACbrB,OAAQR,EACRU,WAAYmB,GAGlB,sCAnFMhC,EAAQA,YACKqC,EAAAA,gBAEbjC,QAAMqB,SAASnB,YAAYwB,kBAAkB,CAC3CQ,QAAQ,IAGVlC,EAAAA,MAAMqB,SAASC,OAAOa,mBAG5B,wBAwDM,SAAwBC,GAChB,MAARA,IAAaA,EAAM,QACX,MAARA,IAAaA,EAAM,SACvBpC,EAAAA,MAAMqB,SAASC,OAAOe,uBAAuB,CAAEC,IAAKC,UAAW,QAAQ5B,OAAAyB,KACzE,uCArFMxC,EAAQA,YACM4C,EAAAA,gBAEdxC,QAAMqB,SAASnB,YAAYwB,kBAAkB,CAC3CC,OAAO,GAIf,wCAwBM/B,EAAQA,YACO6C,EAAAA,kBAEfzC,QAAMqB,SAASnB,YAAYwB,kBAAkB,CAC3CQ,QAAQ,IAGVlC,EAAAA,MAAMqB,SAASC,OAAOoB,kBAG5B"}
@@ -13,6 +13,7 @@ export declare const currentCall: {
13
13
  accepted: boolean;
14
14
  outgoingSocket: boolean;
15
15
  outgoingWebRTC: boolean;
16
+ parked: boolean;
16
17
  outgoing: boolean;
17
18
  startTime: string;
18
19
  muted: boolean;
@@ -46,6 +47,7 @@ export declare const currentCall: {
46
47
  accepted: boolean;
47
48
  outgoingSocket: boolean;
48
49
  outgoingWebRTC: boolean;
50
+ parked: boolean;
49
51
  outgoing: boolean;
50
52
  startTime: string;
51
53
  muted: boolean;
@@ -65,6 +67,7 @@ export declare const currentCall: {
65
67
  number: string;
66
68
  incomingSocket: boolean;
67
69
  incomingWebRTC: boolean;
70
+ parked: boolean;
68
71
  incoming: boolean;
69
72
  acceptedSocket: boolean;
70
73
  acceptedWebRTC: boolean;
@@ -95,6 +98,7 @@ export declare const currentCall: {
95
98
  accepted: boolean;
96
99
  outgoingSocket: boolean;
97
100
  outgoingWebRTC: boolean;
101
+ parked: boolean;
98
102
  outgoing: boolean;
99
103
  startTime: string;
100
104
  muted: boolean;
@@ -120,6 +124,7 @@ export declare const currentCall: {
120
124
  accepted: boolean;
121
125
  outgoingSocket: boolean;
122
126
  outgoingWebRTC: boolean;
127
+ parked: boolean;
123
128
  outgoing: boolean;
124
129
  startTime: string;
125
130
  muted: boolean;
@@ -144,6 +149,7 @@ export declare const currentCall: {
144
149
  accepted: boolean;
145
150
  outgoingSocket: boolean;
146
151
  outgoingWebRTC: boolean;
152
+ parked: boolean;
147
153
  outgoing: boolean;
148
154
  startTime: string;
149
155
  muted: boolean;
@@ -169,6 +175,7 @@ export declare const currentCall: {
169
175
  accepted: boolean;
170
176
  outgoingSocket: boolean;
171
177
  outgoingWebRTC: boolean;
178
+ parked: boolean;
172
179
  outgoing: boolean;
173
180
  startTime: string;
174
181
  muted: boolean;
@@ -193,6 +200,7 @@ export declare const currentCall: {
193
200
  accepted: boolean;
194
201
  outgoingSocket: boolean;
195
202
  outgoingWebRTC: boolean;
203
+ parked: boolean;
196
204
  outgoing: boolean;
197
205
  startTime: string;
198
206
  muted: boolean;
@@ -218,6 +226,7 @@ export declare const currentCall: {
218
226
  accepted: boolean;
219
227
  outgoingSocket: boolean;
220
228
  outgoingWebRTC: boolean;
229
+ parked: boolean;
221
230
  outgoing: boolean;
222
231
  startTime: string;
223
232
  muted: boolean;
@@ -242,6 +251,7 @@ export declare const currentCall: {
242
251
  accepted: boolean;
243
252
  outgoingSocket: boolean;
244
253
  outgoingWebRTC: boolean;
254
+ parked: boolean;
245
255
  outgoing: boolean;
246
256
  startTime: string;
247
257
  muted: boolean;
@@ -266,6 +276,58 @@ export declare const currentCall: {
266
276
  accepted: boolean;
267
277
  outgoingSocket: boolean;
268
278
  outgoingWebRTC: boolean;
279
+ parked: boolean;
280
+ outgoing: boolean;
281
+ startTime: string;
282
+ muted: boolean;
283
+ paused: boolean;
284
+ keypadValue: string;
285
+ conversationId: string;
286
+ transferring: boolean;
287
+ transferringName: string;
288
+ transferringNumber: string;
289
+ transferringStartTime: string;
290
+ transferSwitching: boolean;
291
+ transferCalls: any[];
292
+ };
293
+ setParked: (state: {
294
+ displayName: string;
295
+ username: string;
296
+ number: string;
297
+ incomingSocket: boolean;
298
+ incomingWebRTC: boolean;
299
+ incoming: boolean;
300
+ acceptedSocket: boolean;
301
+ acceptedWebRTC: boolean;
302
+ accepted: boolean;
303
+ outgoingSocket: boolean;
304
+ outgoingWebRTC: boolean;
305
+ parked: boolean;
306
+ outgoing: boolean;
307
+ startTime: string;
308
+ muted: boolean;
309
+ paused: boolean;
310
+ keypadValue: string;
311
+ conversationId: string;
312
+ transferring: boolean;
313
+ transferringName: string;
314
+ transferringNumber: string;
315
+ transferringStartTime: string;
316
+ transferSwitching: boolean;
317
+ transferCalls: any[];
318
+ }, payload: boolean) => {
319
+ displayName: string;
320
+ username: string;
321
+ number: string;
322
+ incomingSocket: boolean;
323
+ incomingWebRTC: boolean;
324
+ incoming: boolean;
325
+ acceptedSocket: boolean;
326
+ acceptedWebRTC: boolean;
327
+ accepted: boolean;
328
+ outgoingSocket: boolean;
329
+ outgoingWebRTC: boolean;
330
+ parked: boolean;
269
331
  outgoing: boolean;
270
332
  startTime: string;
271
333
  muted: boolean;
@@ -291,6 +353,7 @@ export declare const currentCall: {
291
353
  accepted: boolean;
292
354
  outgoingSocket: boolean;
293
355
  outgoingWebRTC: boolean;
356
+ parked: boolean;
294
357
  outgoing: boolean;
295
358
  startTime: string;
296
359
  muted: boolean;
@@ -318,6 +381,7 @@ export declare const currentCall: {
318
381
  accepted: boolean;
319
382
  outgoingSocket: boolean;
320
383
  outgoingWebRTC: boolean;
384
+ parked: boolean;
321
385
  outgoing: boolean;
322
386
  startTime: string;
323
387
  muted: boolean;
@@ -344,6 +408,7 @@ export interface CurrentCallTypes {
344
408
  number?: string;
345
409
  incomingSocket?: boolean;
346
410
  incomingWebRTC?: boolean;
411
+ parked?: boolean;
347
412
  incoming?: boolean;
348
413
  acceptedSocket?: boolean;
349
414
  acceptedWebRTC?: boolean;