@nethesis/phone-island 0.7.98 → 0.7.100

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.
@@ -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"),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})),y&&v.default.createElement(d.TransferActions,null))):v.default.createElement(v.default.Fragment,null),v.default.createElement(f.Tooltip,{className:"pi-z-20",id:"tooltip",place:"bottom"}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("react"),n=require("../../node_modules/@nethesis/nethesis-light-svg-icons/index.mjs.js"),a=require("../../lib/phone/call.js"),r=require("../../static/icons/PhoneKeypadLight.js"),o=require("../../static/icons/PhoneKeypadSolid.js"),i=require("../../utils/customHooks/useEventListener.js");require("../../node_modules/react-redux/es/index.js");var l=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 s=require("../../lib/webrtc/messages.js");require("../../node_modules/mic-check/lib/index.js");var u=require("../../static/outgoing_ringtone.js");require("../Island.js");var c=require("../Button.js"),d=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),f=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js");require("../../node_modules/framer-motion/dist/framer-motion.js");var p=require("../TransferView/TransferActions.js"),m=require("../../node_modules/react-tooltip/dist/react-tooltip.min.cjs.js"),j=require("../../node_modules/react-redux/es/hooks/useSelector.js"),v=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function C(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var E=C(t);exports.default=function(){var t=j.useSelector((function(e){return e.currentCall})),C=t.paused,g=t.muted,x=j.useSelector((function(e){return e.currentCall.parked})),w=j.useSelector((function(e){return e.island})),y=w.view,q=w.actionsExpanded,h=j.useSelector((function(e){return e.currentCall.transferring})),k=v.useDispatch();return i.useEventListener("phone-island-transfer-call",(function(t){!function(t){e.__awaiter(this,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return[4,a.attendedTransfer(t)];case 1:return e.sent()&&(k.currentCall.updateCurrentCall({transferring:!0,paused:!1}),k.player.playRemoteAudio()),[2]}}))}))}(t.to)})),E.default.createElement(E.default.Fragment,null,E.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"},E.default.createElement(c.Button,{variant:"default",active:!!C,onClick:function(){return C?a.unpauseCurrentCall():a.pauseCurrentCall()},"data-tooltip-id":"tooltip","data-tooltip-content":C?"Play":"Pause"},C?E.default.createElement(d.FontAwesomeIcon,{size:"xl",icon:f.faPlay}):E.default.createElement(d.FontAwesomeIcon,{size:"xl",icon:n.faPause})),E.default.createElement(c.Button,{variant:"default",active:!!g,onClick:function(){return g?a.unmuteCurrentCall():a.muteCurrentCall()},"data-tooltip-id":"tooltip","data-tooltip-content":g?"Unmute":"Mute"},g?E.default.createElement(d.FontAwesomeIcon,{size:"xl",icon:f.faMicrophoneSlash}):E.default.createElement(d.FontAwesomeIcon,{size:"xl",icon:n.faMicrophone})),E.default.createElement(c.Button,{active:h,onClick:h?function(){s.sendDTMF("*"),l.store.getState().player.audioPlayerPlaying||k.player.updateStartAudioPlayer({src:u.default,loop:!0}),setTimeout((function(){s.sendDTMF("1"),k.player.stopAudioPlayer(),h&&setTimeout((function(){k.currentCall.updateTransferring(!1)}),500)}),500)}:function(){k.island.setIslandView("transfer"!==y?"transfer":"call"),a.pauseCurrentCall()},variant:"default","data-tooltip-id":"tooltip","data-tooltip-content":h?"Cancel transfer":"Transfer"},h?E.default.createElement(d.FontAwesomeIcon,{className:"",size:"xl",icon:f.faArrowDownUpAcrossLine}):E.default.createElement(d.FontAwesomeIcon,{size:"xl",icon:n.faArrowDownArrowUp})),E.default.createElement(c.Button,{active:q,variant:"transparent",onClick:function(){q?k.island.toggleActionsExpanded(!1):k.island.toggleActionsExpanded(!0)},"data-tooltip-id":"tooltip","data-tooltip-content":q?"Collapse":"Expand"},q?E.default.createElement(d.FontAwesomeIcon,{className:"",size:"xl",icon:n.faChevronUp}):E.default.createElement(d.FontAwesomeIcon,{size:"xl",icon:n.faChevronDown}))),q?E.default.createElement(E.default.Fragment,null," ",E.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"},E.default.createElement(c.Button,{active:"keypad"===y,variant:"default",onClick:function(){k.island.setIslandView("keypad"!==y?"keypad":"call")},"data-tooltip-id":"tooltip","data-tooltip-content":"Keyboard"},"keypad"===y?E.default.createElement(o.default,null):E.default.createElement(r.default,null)),E.default.createElement(c.Button,{active:x,variant:"default",onClick:function(){a.park(),k.currentCall.setParked(!0)},"data-tooltip-id":"tooltip","data-tooltip-content":"Park"},E.default.createElement(d.FontAwesomeIcon,{size:"xl",icon:x?f.faCircleParking:n.faCircleParking})),h&&E.default.createElement(p.TransferActions,null))):E.default.createElement(E.default.Fragment,null),E.default.createElement(m.Tooltip,{className:"pi-z-20",id:"tooltip",place:"bottom"}))};
2
2
  //# sourceMappingURL=Actions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Actions.js","sources":["../../../src/components/CallView/Actions.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport {\n 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 {transferring && <TransferActions />}\n </div>\n </>\n ) : (\n <></>\n )}\n {/* Buttons tooltips */}\n <Tooltip className='pi-z-20' id='tooltip' place='bottom' />\n </>\n )\n}\n\nexport default Actions\n"],"names":["_a","useSelector","state","currentCall","paused","muted","parked","_b","island","view","actionsExpanded","transferring","dispatch","useDispatch","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
+ {"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 attendedTransfer,\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'\nimport { useEventListener } from '../../utils'\n\nconst Actions: FC = () => {\n // Get multiple values from currentCall store\n const { paused, muted } = useSelector((state: RootState) => state.currentCall)\n const parked = useSelector((state: RootState) => state.currentCall.parked)\n\n // Get isOpen and view from island store\n const { view, actionsExpanded } = useSelector((state: RootState) => state.island)\n const transferring = useSelector((state: RootState) => state.currentCall.transferring)\n\n const dispatch = useDispatch<Dispatch>()\n\n function openKeypad() {\n dispatch.island.setIslandView(view !== 'keypad' ? 'keypad' : 'call')\n }\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 /**\n * Event listner for phone-island-transfer-call event\n */\n useEventListener('phone-island-transfer-call', (data) => {\n const transferNumber = data.to\n handleAttendedTransfer(transferNumber)\n })\n\n async function handleAttendedTransfer(number: string) {\n // Send attended transfer message\n const transferringMessageSent = await attendedTransfer(number)\n if (transferringMessageSent) {\n // Set transferring and disable pause\n dispatch.currentCall.updateCurrentCall({\n transferring: true,\n paused: false,\n })\n // Play the remote audio element\n dispatch.player.playRemoteAudio()\n }\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\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 {transferring && <TransferActions />}\n </div>\n </>\n ) : (\n <></>\n )}\n {/* Buttons tooltips */}\n <Tooltip className='pi-z-20' id='tooltip' place='bottom' />\n </>\n )\n}\n\nexport default Actions\n"],"names":["_a","useSelector","state","currentCall","paused","muted","parked","_b","island","view","actionsExpanded","transferring","dispatch","useDispatch","useEventListener","data","number","attendedTransfer","sent","updateCurrentCall","player","playRemoteAudio","handleAttendedTransfer","to","React","createElement","Fragment","className","Button","variant","active","onClick","unpauseCurrentCall","pauseCurrentCall","FontAwesomeIcon","size","icon","faPlay","faPauseRegular","unmuteCurrentCall","muteCurrentCall","faMicrophoneSlash","faMicrophoneLight","sendDTMF","store","getState","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("../../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())};
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"),i=require("../user/default_device.js"),a=require("../../services/astproxy.js"),s=require("../../static/dtmf/index.js");function u(o){var i=this;t.getSupportedDevices((function(){return e.__awaiter(i,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(){i.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,a.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){a.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(){i.isWebRTC()&&n.muteWebRTC()&&o.store.dispatch.currentCall.updateCurrentCall({muted:!0})},exports.park=function(){var e,t,r,n,i=null===(t=null===(e=null===o.store||void 0===o.store?void 0:o.store.getState())||void 0===e?void 0:e.currentCall)||void 0===t?void 0:t.conversationId;if(i){var s=i.split(">"),u=s[0],d=null==u?void 0:u.match(/\/(\d+)-/),l=s[1],c=null==l?void 0:l.match(/\/(\d+)-/),p=null===(n=null===(r=null===o.store||void 0===o.store?void 0:o.store.getState())||void 0===r?void 0:r.currentUser)||void 0===n?void 0:n.endpoints;if(Array.isArray(p.extension)){var v=p.extension.map((function(e){return e.id}));if(-1!==v.indexOf(d[1])){var C=d[1];a.parkConversation({applicantId:C,convid:i,endpointId:C})}else if(-1!==v.indexOf(c[1])){C=c[1];a.parkConversation({applicantId:C,convid:i,endpointId:C})}}}},exports.pauseCurrentCall=function(){i.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:s.default["dtmf_".concat(e)]})},exports.unmuteCurrentCall=function(){i.isWebRTC()&&n.unmuteWebRTC()&&o.store.dispatch.currentCall.updateCurrentCall({muted:!1})},exports.unpauseCurrentCall=function(){i.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, 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"}
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 conversationId = store?.getState()?.currentCall?.conversationId\n\n if (conversationId) {\n let conversationIdSplitted = conversationId.split('>')\n let firstConversationIdSplitted = conversationIdSplitted[0]\n let firstConversationIdNumber: any = firstConversationIdSplitted?.match(/\\/(\\d+)-/)\n let secondConversationIdSplitted = conversationIdSplitted[1]\n let secondConversationIdNumber: any = secondConversationIdSplitted?.match(/\\/(\\d+)-/)\n\n const endpoints: any = store?.getState()?.currentUser?.endpoints\n\n if (Array.isArray(endpoints.extension)) {\n // Get id from extensions\n const extensionIds = endpoints.extension.map((endpoint) => endpoint.id)\n // Map id and check if conversation id numbers is equal to extension id\n if (extensionIds.indexOf(firstConversationIdNumber[1]) !== -1) {\n const endpointId = firstConversationIdNumber[1]\n parkConversation({\n applicantId: endpointId,\n convid: conversationId,\n endpointId: endpointId,\n })\n } else if (extensionIds.indexOf(secondConversationIdNumber[1]) !== -1) {\n const endpointId = secondConversationIdNumber[1]\n parkConversation({\n applicantId: endpointId,\n convid: conversationId,\n endpointId: endpointId,\n })\n }\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","_b","conversationIdSplitted","split","firstConversationIdSplitted","firstConversationIdNumber","match","secondConversationIdSplitted","secondConversationIdNumber","endpoints","_d","_c","Array","isArray","extensionIds","map","endpoint","indexOf","parkConversation","applicantId","pauseWebRTC","paused","pauseRemoteAudio","key","updateStartAudioPlayer","src","dtmfAudios","unmuteWebRTC","unpauseWebRTC","playRemoteAudio"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nethesis/phone-island",
3
3
  "author": "Nethesis",
4
- "version": "0.7.98",
4
+ "version": "0.7.100",
5
5
  "description": "NethVoice CTI Phone Island",
6
6
  "keywords": [
7
7
  "nethserver",