@nethesis/phone-island 1.0.8 → 1.0.9-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +79 -0
- package/dist/components/SettingsView/index.js +1 -1
- package/dist/components/SettingsView/index.js.map +1 -1
- package/dist/components/SideView/hooks/useSideViewLogic.js +1 -1
- package/dist/components/SideView/hooks/useSideViewLogic.js.map +1 -1
- package/dist/components/Socket.js +1 -1
- package/dist/components/Socket.js.map +1 -1
- package/dist/components/VideoView/index.js +1 -1
- package/dist/components/VideoView/index.js.map +1 -1
- package/dist/components/WebRTC.js +1 -1
- package/dist/components/WebRTC.js.map +1 -1
- package/dist/events/SocketEvents.js +1 -1
- package/dist/events/SocketEvents.js.map +1 -1
- package/dist/lib/phone/call.js +1 -1
- package/dist/lib/phone/call.js.map +1 -1
- package/dist/lib/webrtc/messages.js +1 -1
- package/dist/lib/webrtc/messages.js.map +1 -1
- package/dist/node_modules/@fortawesome/fontawesome-svg-core/index.mjs.js +7 -1
- package/dist/node_modules/@fortawesome/fontawesome-svg-core/index.mjs.js.map +1 -1
- package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js +1 -1
- package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js.map +1 -1
- package/dist/node_modules/@fortawesome/react-fontawesome/index.es.js +1 -1
- package/dist/node_modules/@fortawesome/react-fontawesome/index.es.js.map +1 -1
- package/dist/package.json.js +1 -1
- package/package.json +5 -6
package/README.md
CHANGED
|
@@ -13,6 +13,85 @@ Available as widget on `jsDelivr`
|
|
|
13
13
|
[](https://cdn.jsdelivr.net/gh/nethesis/phone-island/dist-widget/index.widget.js)
|
|
14
14
|
[](https://cdn.jsdelivr.net/gh/nethesis/phone-island/dist-widget/index.widget.css)
|
|
15
15
|
|
|
16
|
+
## Integrate in any template
|
|
17
|
+
|
|
18
|
+
Phone Island can be embedded in any HTML template, CMS page or server-rendered application without a React-specific integration.
|
|
19
|
+
|
|
20
|
+
To embed the standalone widget you need:
|
|
21
|
+
|
|
22
|
+
1. the CDN CSS file
|
|
23
|
+
2. the CDN JavaScript bundle
|
|
24
|
+
3. a container element with class `phone-island`
|
|
25
|
+
4. a Base64 config token in `data-config`
|
|
26
|
+
5. a host-side JavaScript file that dispatches commands and listens to Phone Island browser events
|
|
27
|
+
|
|
28
|
+
### Minimal HTML example
|
|
29
|
+
|
|
30
|
+
```html
|
|
31
|
+
<!doctype html>
|
|
32
|
+
<html lang="en">
|
|
33
|
+
<head>
|
|
34
|
+
<meta charset="utf-8" />
|
|
35
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
36
|
+
<title>Phone Island integration</title>
|
|
37
|
+
|
|
38
|
+
<link
|
|
39
|
+
rel="stylesheet"
|
|
40
|
+
href="https://cdn.jsdelivr.net/gh/nethesis/phone-island@latest/dist-widget/index.widget.css"
|
|
41
|
+
/>
|
|
42
|
+
</head>
|
|
43
|
+
<body>
|
|
44
|
+
<div class="phone-island" data-config="YOUR_BASE64_CONFIG_TOKEN"></div>
|
|
45
|
+
|
|
46
|
+
<script src="https://cdn.jsdelivr.net/gh/nethesis/phone-island@latest/dist-widget/index.widget.js"></script>
|
|
47
|
+
<script src="./phone-island-integration.js"></script>
|
|
48
|
+
</body>
|
|
49
|
+
</html>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Host-side integration script
|
|
53
|
+
|
|
54
|
+
Create a file such as `phone-island-integration.js` and use it to control the widget from your page.
|
|
55
|
+
|
|
56
|
+
```javascript
|
|
57
|
+
function dispatchPhoneIslandEvent(eventName, detail = {}) {
|
|
58
|
+
window.dispatchEvent(new CustomEvent(eventName, { detail }))
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
window.addEventListener('phone-island-call-started', (event) => {
|
|
62
|
+
console.log('Call started', event.detail)
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
window.addEventListener('phone-island-video-call-started', (event) => {
|
|
66
|
+
console.log('Video call started', event.detail)
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
document.getElementById('call-200')?.addEventListener('click', () => {
|
|
70
|
+
dispatchPhoneIslandEvent('phone-island-call-start', { number: '200' })
|
|
71
|
+
})
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Base64 config token
|
|
75
|
+
|
|
76
|
+
The standalone widget expects a Base64 string in this format:
|
|
77
|
+
|
|
78
|
+
```text
|
|
79
|
+
<cti_host>:<cti_username>:<cti_token>:<sip_ext>:<sip_secret>:<sip_host>:<sip_port>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Example generation:
|
|
83
|
+
|
|
84
|
+
```sh
|
|
85
|
+
echo -n "<cti_host>:<cti_username>:<cti_token>:<sip_ext>:<sip_secret>:<sip_host>:<sip_port>" | base64 -w0
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Full example
|
|
89
|
+
|
|
90
|
+
For a complete browser integration example, including event log, device switching, toast notifications and debug actions, see:
|
|
91
|
+
|
|
92
|
+
1. `widget-example/index.html`
|
|
93
|
+
2. `widget-example/index.js`
|
|
94
|
+
|
|
16
95
|
## Online Demo
|
|
17
96
|
|
|
18
97
|
The repository root now contains a demo entrypoint for GitHub Pages.
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),i=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),r=require("../Button.js"),n=require("./MicrophoneView.js"),a=require("./AudioView.js"),l=require("./ThemeView.js"),s=require("../CustomThemedTooltip.js");require("../../node_modules/@babel/runtime/helpers/defineProperty.js"),require("../../node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../../node_modules/@babel/runtime/helpers/typeof.js"),require("../../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../../node_modules/react-i18next/dist/es/context.js");var o=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var u=require("./VideoInputView.js"),d=require("../../node_modules/react-redux/es/hooks/useSelector.js"),c=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),i=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),r=require("../Button.js"),n=require("./MicrophoneView.js"),a=require("./AudioView.js"),l=require("./ThemeView.js"),s=require("../CustomThemedTooltip.js");require("../../node_modules/@babel/runtime/helpers/defineProperty.js"),require("../../node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../../node_modules/@babel/runtime/helpers/typeof.js"),require("../../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../../node_modules/react-i18next/dist/es/context.js");var o=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var u=require("./VideoInputView.js"),d=require("../../node_modules/react-redux/es/hooks/useSelector.js"),c=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var m=p(e);exports.MicrophoneView=n.default,exports.AudioView=a.default,exports.ThemeView=l.default,exports.VideoInputView=u.default,exports.SettingsView=function(){var e=d.useSelector((function(e){return e.island})),p=e.settingsView,f=e.previousView,g=o.useTranslation().t,h=c.useDispatch(),w=function(e){var r=e.icon,n=e.label,a=e.onClick;return m.default.createElement("button",{onClick:a,className:"pi-flex pi-items-center pi-justify-between pi-px-4 pi-py-3 pi-text-base pi-font-normal pi-leading-6 dark:pi-text-gray-200 pi-text-gray-700 hover:pi-bg-gray-200 dark:hover:pi-bg-gray-700 dark:pi-bg-gray-950 pi-bg-gray-50 pi-rounded-md"},m.default.createElement("div",{className:"pi-flex pi-items-center pi-gap-3"},m.default.createElement(t.FontAwesomeIcon,{icon:r,className:"pi-w-5 pi-h-5"}),m.default.createElement("span",null,n)),m.default.createElement(t.FontAwesomeIcon,{icon:i.faAngleRight,className:"pi-w-5 pi-h-5"}))},x=m.default.createElement("div",{className:"pi-flex pi-flex-col pi-w-full"},m.default.createElement("div",{className:"pi-flex pi-items-center pi-justify-between pi-text-gray-900 dark:pi-text-gray-50"},m.default.createElement("h1",{className:"pi-text-lg pi-font-medium pi-leading-7"},g("Settings.Settings")),m.default.createElement(r.Button,{onClick:function(){return h.island.setIslandView("".concat(f||"call"))},variant:"transparentSettings","data-tooltip-id":"tooltip-close-settings","data-tooltip-content":g("Common.Close")||""},m.default.createElement(t.FontAwesomeIcon,{icon:i.faXmark,className:"pi-w-5 pi-h-5"}))),m.default.createElement("div",{className:"pi-border-t pi-border-gray-300 dark:pi-border-gray-600 pi-mt-1"}),m.default.createElement("div",{className:"pi-flex pi-flex-col pi-mt-2"},m.default.createElement(w,{icon:i.faMicrophone,label:g("Settings.Microphones"),onClick:function(){return h.island.setSettingsView("microphone")}}),m.default.createElement(w,{icon:i.faVolumeHigh,label:g("Settings.Speakers"),onClick:function(){return h.island.setSettingsView("audioInput")}}),m.default.createElement(w,{icon:i.faVideo,label:g("Settings.Cameras"),onClick:function(){return h.island.setSettingsView("videoInput")}}),m.default.createElement(w,{icon:i.faPalette,label:g("Settings.Theme"),onClick:function(){return h.island.setSettingsView("theme")}})));return m.default.createElement(m.default.Fragment,null,function(){switch(p){case"main":default:return x;case"microphone":return m.default.createElement(n.default,null);case"audioInput":return m.default.createElement(a.default,null);case"videoInput":return m.default.createElement(u.default,null);case"theme":return m.default.createElement(l.default,null)}}(),m.default.createElement(s.CustomThemedTooltip,{id:"tooltip-close-settings",place:"bottom"}))};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/SettingsView/index.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { RootState, Dispatch } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faAngleRight,\n faMicrophone,\n faPalette,\n faVideo,\n faVolumeHigh,\n faXmark,\n} from '@fortawesome/free-solid-svg-icons'\nimport { Button } from '../Button'\nimport MicrophoneView from './MicrophoneView'\nimport AudioView from './AudioView'\nimport ThemeView from './ThemeView'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\nimport { useTranslation } from 'react-i18next'\nimport VideoInputView from './VideoInputView'\n\nexport const SettingsView: FC<SettingsViewProps> = () => {\n const { settingsView, previousView } = useSelector((state: RootState) => state.island)\n const { t } = useTranslation()\n const dispatch = useDispatch<Dispatch>()\n\n const SettingsMenuItem = ({ icon, label, onClick }) => (\n <button\n onClick={onClick}\n className='pi-flex pi-items-center pi-justify-between pi-px-4 pi-py-3 pi-text-base pi-font-normal pi-leading-6 dark:pi-text-gray-200 pi-text-gray-700 hover:pi-bg-gray-200 dark:hover:pi-bg-gray-700 dark:pi-bg-gray-950 pi-bg-gray-50 pi-rounded-md'\n >\n <div className='pi-flex pi-items-center pi-gap-3'>\n <FontAwesomeIcon icon={icon} className='pi-w-5 pi-h-5' />\n <span>{label}</span>\n </div>\n <FontAwesomeIcon icon={faAngleRight} className='pi-w-5 pi-h-5' />\n </button>\n )\n\n // main settings view\n const MainSettings = (\n <div className='pi-flex pi-flex-col pi-w-full'>\n {/* Header */}\n <div className='pi-flex pi-items-center pi-justify-between pi-text-gray-900 dark:pi-text-gray-50'>\n <h1 className='pi-text-lg pi-font-medium pi-leading-7'>{t('Settings.Settings')}</h1>\n <Button\n onClick={() => dispatch.island.setIslandView(`${previousView || 'call'}`)}\n variant='transparentSettings'\n data-tooltip-id='tooltip-close-settings'\n data-tooltip-content={t('Common.Close') || ''}\n >\n <FontAwesomeIcon icon={faXmark} className='pi-w-5 pi-h-5' />\n </Button>\n </div>\n\n {/* Divider */}\n <div className='pi-border-t pi-border-gray-300 dark:pi-border-gray-600 pi-mt-1' />\n\n {/* Menu Items */}\n <div className='pi-flex pi-flex-col pi-mt-2'>\n <SettingsMenuItem\n icon={faMicrophone}\n label={t('Settings.Microphones')}\n onClick={() => dispatch.island.setSettingsView('microphone')}\n />\n <SettingsMenuItem\n icon={faVolumeHigh}\n label={t('Settings.Speakers')}\n onClick={() => dispatch.island.setSettingsView('audioInput')}\n />\n <SettingsMenuItem\n icon={faVideo}\n label={t('Settings.Cameras')}\n onClick={() => dispatch.island.setSettingsView('videoInput')}\n />\n <SettingsMenuItem\n icon={faPalette}\n label={t('Settings.Theme')}\n onClick={() => dispatch.island.setSettingsView('theme')}\n />\n </div>\n </div>\n )\n\n return (\n <>\n {(() => {\n switch (settingsView) {\n case 'main':\n return MainSettings\n case 'microphone':\n return <MicrophoneView />\n case 'audioInput':\n return <AudioView />\n case 'videoInput':\n return <VideoInputView />\n case 'theme':\n return <ThemeView />\n default:\n return MainSettings\n }\n })()}\n <CustomThemedTooltip id='tooltip-close-settings' place='bottom' />\n </>\n )\n}\n\nexport interface SettingsViewProps {}\n"],"names":["_a","useSelector","state","island","settingsView","previousView","t","useTranslation","dispatch","useDispatch","SettingsMenuItem","icon","label","onClick","React","className","createElement","FontAwesomeIcon","faAngleRight","MainSettings","Button","setIslandView","concat","variant","faXmark","faMicrophone","setSettingsView","faVolumeHigh","faVideo","faPalette","Fragment","MicrophoneView","AudioView","VideoInputView","ThemeView","CustomThemedTooltip","id","place"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/SettingsView/index.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { RootState, Dispatch } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faAngleRight,\n faMicrophone,\n faPalette,\n faVideo,\n faVolumeHigh,\n faXmark,\n} from '@fortawesome/free-solid-svg-icons'\nimport { Button } from '../Button'\nimport MicrophoneView from './MicrophoneView'\nimport AudioView from './AudioView'\nimport ThemeView from './ThemeView'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\nimport { useTranslation } from 'react-i18next'\nimport VideoInputView from './VideoInputView'\n\nexport const SettingsView: FC<SettingsViewProps> = () => {\n const { settingsView, previousView } = useSelector((state: RootState) => state.island)\n const { t } = useTranslation()\n const dispatch = useDispatch<Dispatch>()\n\n const SettingsMenuItem = ({ icon, label, onClick }) => (\n <button\n onClick={onClick}\n className='pi-flex pi-items-center pi-justify-between pi-px-4 pi-py-3 pi-text-base pi-font-normal pi-leading-6 dark:pi-text-gray-200 pi-text-gray-700 hover:pi-bg-gray-200 dark:hover:pi-bg-gray-700 dark:pi-bg-gray-950 pi-bg-gray-50 pi-rounded-md'\n >\n <div className='pi-flex pi-items-center pi-gap-3'>\n <FontAwesomeIcon icon={icon} className='pi-w-5 pi-h-5' />\n <span>{label}</span>\n </div>\n <FontAwesomeIcon icon={faAngleRight} className='pi-w-5 pi-h-5' />\n </button>\n )\n\n // main settings view\n const MainSettings = (\n <div className='pi-flex pi-flex-col pi-w-full'>\n {/* Header */}\n <div className='pi-flex pi-items-center pi-justify-between pi-text-gray-900 dark:pi-text-gray-50'>\n <h1 className='pi-text-lg pi-font-medium pi-leading-7'>{t('Settings.Settings')}</h1>\n <Button\n onClick={() => dispatch.island.setIslandView(`${previousView || 'call'}`)}\n variant='transparentSettings'\n data-tooltip-id='tooltip-close-settings'\n data-tooltip-content={t('Common.Close') || ''}\n >\n <FontAwesomeIcon icon={faXmark} className='pi-w-5 pi-h-5' />\n </Button>\n </div>\n\n {/* Divider */}\n <div className='pi-border-t pi-border-gray-300 dark:pi-border-gray-600 pi-mt-1' />\n\n {/* Menu Items */}\n <div className='pi-flex pi-flex-col pi-mt-2'>\n <SettingsMenuItem\n icon={faMicrophone}\n label={t('Settings.Microphones')}\n onClick={() => dispatch.island.setSettingsView('microphone')}\n />\n <SettingsMenuItem\n icon={faVolumeHigh}\n label={t('Settings.Speakers')}\n onClick={() => dispatch.island.setSettingsView('audioInput')}\n />\n <SettingsMenuItem\n icon={faVideo}\n label={t('Settings.Cameras')}\n onClick={() => dispatch.island.setSettingsView('videoInput')}\n />\n <SettingsMenuItem\n icon={faPalette}\n label={t('Settings.Theme')}\n onClick={() => dispatch.island.setSettingsView('theme')}\n />\n </div>\n </div>\n )\n\n return (\n <>\n {(() => {\n switch (settingsView) {\n case 'main':\n return MainSettings\n case 'microphone':\n return <MicrophoneView />\n case 'audioInput':\n return <AudioView />\n case 'videoInput':\n return <VideoInputView />\n case 'theme':\n return <ThemeView />\n default:\n return MainSettings\n }\n })()}\n <CustomThemedTooltip id='tooltip-close-settings' place='bottom' />\n </>\n )\n}\n\nexport interface SettingsViewProps {}\n\nexport { default as AudioView } from './AudioView'\nexport { default as MicrophoneView } from './MicrophoneView'\nexport { default as ThemeView } from './ThemeView'\nexport { default as VideoInputView } from './VideoInputView'\n"],"names":["_a","useSelector","state","island","settingsView","previousView","t","useTranslation","dispatch","useDispatch","SettingsMenuItem","icon","label","onClick","React","className","createElement","FontAwesomeIcon","faAngleRight","MainSettings","Button","setIslandView","concat","variant","faXmark","faMicrophone","setSettingsView","faVolumeHigh","faVideo","faPalette","Fragment","MicrophoneView","AudioView","VideoInputView","ThemeView","CustomThemedTooltip","id","place"],"mappings":"+0CAuBmD,WAC3C,IAAAA,EAAiCC,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMC,MAAM,IAA7EC,iBAAcC,iBACdC,EAAMC,qBACRC,EAAWC,EAAAA,cAEXC,EAAmB,SAACV,GAAE,IAAAW,SAAMC,EAAKZ,EAAAY,MAAEC,EAAOb,EAAAa,QAAO,OACrDC,EAAAA,gCACED,QAASA,EACTE,UAAU,6OAEVD,EAAAA,QAAKE,cAAA,MAAA,CAAAD,UAAU,oCACbD,EAAC,QAAAE,cAAAC,mBAAgBN,KAAMA,EAAMI,UAAU,kBACvCD,EAAAA,QAAOE,cAAA,OAAA,KAAAJ,IAETE,UAACE,cAAAC,EAAAA,gBAAgB,CAAAN,KAAMO,EAAAA,aAAcH,UAAU,kBATI,EAcjDI,EACJL,EAAAA,QAAKE,cAAA,MAAA,CAAAD,UAAU,iCAEbD,EAAAA,QAAKE,cAAA,MAAA,CAAAD,UAAU,oFACbD,UAAIE,cAAA,KAAA,CAAAD,UAAU,0CAA0CT,EAAE,sBAC1DQ,EAAAA,QAAAE,cAACI,SAAM,CACLP,QAAS,WAAM,OAAAL,EAASL,OAAOkB,cAAc,GAAAC,OAAGjB,GAAgB,QAAjD,EACfkB,QAAQ,sBAAqB,kBACb,yBAAwB,uBAClBjB,EAAE,iBAAmB,IAE3CQ,UAACE,cAAAC,EAAAA,gBAAgB,CAAAN,KAAMa,EAAAA,QAAST,UAAU,oBAK9CD,EAAAA,QAAKE,cAAA,MAAA,CAAAD,UAAU,mEAGfD,EAAAA,QAAKE,cAAA,MAAA,CAAAD,UAAU,+BACbD,EAAC,QAAAE,cAAAN,EACC,CAAAC,KAAMc,eACNb,MAAON,EAAE,wBACTO,QAAS,WAAM,OAAAL,EAASL,OAAOuB,gBAAgB,aAAhC,IAEjBZ,EAAC,QAAAE,cAAAN,EACC,CAAAC,KAAMgB,eACNf,MAAON,EAAE,qBACTO,QAAS,WAAM,OAAAL,EAASL,OAAOuB,gBAAgB,aAAhC,IAEjBZ,EAAC,QAAAE,cAAAN,EACC,CAAAC,KAAMiB,UACNhB,MAAON,EAAE,oBACTO,QAAS,WAAM,OAAAL,EAASL,OAAOuB,gBAAgB,aAAhC,IAEjBZ,UAAAE,cAACN,EAAgB,CACfC,KAAMkB,EAAAA,UACNjB,MAAON,EAAE,kBACTO,QAAS,WAAM,OAAAL,EAASL,OAAOuB,gBAAgB,QAAQ,MAM/D,OACEZ,UAAAE,cAAAF,EAAA,QAAAgB,SAAA,KACG,WACC,OAAQ1B,GACN,IAAK,OAUL,QACE,OAAOe,EATT,IAAK,aACH,OAAOL,UAAAE,cAACe,EAAc,QAAA,MACxB,IAAK,aACH,OAAOjB,UAAAE,cAACgB,EAAS,QAAA,MACnB,IAAK,aACH,OAAOlB,UAAAE,cAACiB,EAAc,QAAA,MACxB,IAAK,QACH,OAAOnB,UAAAE,cAACkB,EAAS,QAAA,MAItB,CAfA,GAgBDpB,UAAAE,cAACmB,EAAAA,oBAAmB,CAACC,GAAG,yBAAyBC,MAAM,WAG7D"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../node_modules/tslib/tslib.es6.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../node_modules/tslib/tslib.es6.js"),i=require("react");require("../../../node_modules/react-redux/es/index.js");var n=require("../../../store/index.js"),r=require("../../../utils/deviceUtils.js"),o=require("../../../lib/webrtc/janus.js"),u=require("../../../lib/phone/trunk.js"),l=require("../../../lib/devices/devices.js"),t=require("../../../utils/genericFunctions/eventDispatch.js"),s=require("../../../lib/phone/call.js"),a=require("../../../node_modules/react-redux/es/hooks/useDispatch.js"),d=require("../../../node_modules/react-redux/es/hooks/useSelector.js");exports.useSideViewLogic=function(c){var v,p,h,f,b,g,m,_,S=a.useDispatch(),j=d.useSelector((function(e){return e.currentUser})),k=d.useSelector((function(e){return e.users})),w=d.useSelector((function(e){return e.paramUrl})),q=n.store.select.mediaDevices.videoInputDevices(n.store.getState()),C=i.useRef(o.default),V=d.useSelector((function(e){return e.currentUser.conversations})),D=i.useState([]),T=D[0],U=D[1],y=i.useState(!0),I=y[0],x=y[1],O=i.useCallback((function(){var e=Object.values(V).find((function(e){return Object.keys(e).length>0}));return e?Object.values(e)[0]:null}),[V]),Q=i.useCallback((function(e){if(S.island.toggleSideViewVisible(!1),"openUrl"===e){var i=Object.values(V).find((function(e){return Object.keys(e).length>0})),n=i?Object.values(i)[0]:null;if((null==n?void 0:n.connected)&&"in"===(null==n?void 0:n.direction)){var r={counterpartNum:n.counterpartNum,counterpartName:n.counterpartName,owner:n.owner,uniqueId:n.uniqueId,linkedId:n.linkedId,throughQueue:n.throughQueue,throughTrunk:n.throughTrunk,direction:n.direction,connected:n.connected};t.eventDispatch("phone-island-url-parameter-opened",r)}}else null!==e&&S.island.setIslandView(e)}),[S.island,V]),E=i.useCallback((function(){return e.__awaiter(void 0,void 0,void 0,(function(){var i;return e.__generator(this,(function(e){switch(e.label){case 0:return q.length>0?[4,l.checkWebCamPermission()]:[3,2];case 1:return i=e.sent(),x(i),[2,i];case 2:return x(!1),[2,!1]}}))}))}),[q.length]),M=i.useCallback((function(){return e.__awaiter(void 0,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return[4,E()];case 1:return e.sent()&&(Q("video"),n.store.dispatch.currentCall.updateCurrentCall({isLocalVideoEnabled:!0,isStartingVideoCall:!0})),[2]}}))}))}),[E,Q]),N=i.useCallback((function(){Q("video"),n.store.dispatch.screenShare.update({isStartingScreenShare:!0})}),[Q]),P=i.useMemo((function(){var e;return(null===(e=null==j?void 0:j.profile)||void 0===e?void 0:e.macro_permissions)||{}}),[null===(v=null==j?void 0:j.profile)||void 0===v?void 0:v.macro_permissions]),A=i.useMemo((function(){var e,i,n,r,o,u,l,t,a,d=O(),c=(null===(n=null===(i=null===(e=null==P?void 0:P.settings)||void 0===e?void 0:e.permissions)||void 0===i?void 0:i.recording)||void 0===n?void 0:n.value)||!1,v=s.isRecordingControlAvailable(d);return{canRecord:c&&v,canShareScreen:"safari"!==(null===(u=null===(o=null===(r=null==C?void 0:C.current)||void 0===r?void 0:r.webRTCAdapter)||void 0===o?void 0:o.browserDetails)||void 0===u?void 0:u.browser)&&((null===(a=null===(t=null===(l=null==P?void 0:P.nethvoice_cti)||void 0===l?void 0:l.permissions)||void 0===t?void 0:t.screen_sharing)||void 0===a?void 0:a.value)||!1),canSwitchDevice:(null==T?void 0:T.length)>0}}),[null===(f=null===(h=null===(p=null==P?void 0:P.settings)||void 0===p?void 0:p.permissions)||void 0===h?void 0:h.recording)||void 0===f?void 0:f.value,null===(m=null===(g=null===(b=null==P?void 0:P.nethvoice_cti)||void 0===b?void 0:b.permissions)||void 0===g?void 0:g.screen_sharing)||void 0===m?void 0:m.value,O,V,null==T?void 0:T.length,null===(_=null==j?void 0:j.default_device)||void 0===_?void 0:_.type,c]),R=i.useMemo((function(){var e=O();if("never"===w.openParamUrlType)return!1;if(!(null==e?void 0:e.connected)||"in"!==(null==e?void 0:e.direction))return!1;if("button"===w.openParamUrlType){if(w.onlyQueues&&(null==e?void 0:e.throughQueue))return!0;if(!w.onlyQueues&&(u.isFromTrunk(e.counterpartNum)||(null==e?void 0:e.throughQueue)))return!0}return!1}),[O,w.onlyQueues,w.openParamUrlType]);i.useEffect((function(){if(j&&k){var e=r.getAvailableDevices(j,k);U(e)}}),[j,k]);var L=i.useCallback((function(){var e=O(),i=(null==e?void 0:e.linkedId)||(null==e?void 0:e.uniqueId)||null;i&&(S.island.toggleSideViewVisible(!1),t.eventDispatch("phone-island-transcription-open",{linkedid:i,uniqueid:i}))}),[S.island,O]),B=i.useMemo((function(){return(null==j?void 0:j.call_transcription_enabled)||!1}),[null==j?void 0:j.call_transcription_enabled]);return e.__assign(e.__assign({userInformation:j,availableDevices:T,videoInputDevices:q,isVideoCallButtonVisible:I,isUrlButtonEnabled:R,hasValidUrl:w.hasValidUrl,isTranscriptionEnabled:B},A),{goToVideoCall:M,goToScreenSharing:N,closeSideViewAndLaunchEvent:Q,openTranscriptionView:L})};
|
|
2
2
|
//# sourceMappingURL=useSideViewLogic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSideViewLogic.js","sources":["../../../../src/components/SideView/hooks/useSideViewLogic.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState, store } from '../../../store'\nimport { getAvailableDevices } from '../../../utils/deviceUtils'\nimport JanusLib from '../../../lib/webrtc/janus.js'\nimport { isFromTrunk } from '../../../lib/user/extensions'\nimport { checkWebCamPermission } from '../../../lib/devices/devices'\nimport { eventDispatch } from '../../../utils'\n\nexport interface UseSideViewLogicResult {\n userInformation: RootState['currentUser']\n availableDevices: any[]\n videoInputDevices: any[]\n isVideoCallButtonVisible: boolean\n isUrlButtonEnabled: boolean\n hasValidUrl: boolean\n isTranscriptionEnabled: boolean\n canRecord: boolean\n canShareScreen: boolean\n canSwitchDevice: boolean\n goToVideoCall: () => Promise<void>\n goToScreenSharing: () => void\n closeSideViewAndLaunchEvent: (viewType: any) => void\n openTranscriptionView: () => void\n}\n\nexport const useSideViewLogic = (uaType?: string): UseSideViewLogicResult => {\n const dispatch = useDispatch<Dispatch>()\n const userInformation = useSelector((state: RootState) => state.currentUser)\n const allUsersInformation = useSelector((state: RootState) => state.users)\n const paramUrlData = useSelector((state: RootState) => state.paramUrl)\n const videoInputDevices = store.select.mediaDevices.videoInputDevices(store.getState())\n const janus = useRef<any>(JanusLib)\n const conversations = useSelector((state: RootState) => state.currentUser.conversations)\n\n const [availableDevices, setAvailableDevices] = useState<any[]>([])\n const [isVideoCallButtonVisible, setIsVideoCallButtonVisible] = useState(true)\n\n const getActiveConversationData = useCallback(() => {\n const activeConversation = Object.values(conversations).find((conv) => Object.keys(conv).length > 0)\n return activeConversation ? (Object.values(activeConversation)[0] as any) : null\n }, [conversations])\n\n const closeSideViewAndLaunchEvent = useCallback(\n (viewType: any) => {\n dispatch.island.toggleSideViewVisible(false)\n if (viewType === 'openUrl') {\n const activeConversation = Object.values(conversations).find(\n (conv) => Object.keys(conv).length > 0,\n )\n const conversationData = activeConversation ? Object.values(activeConversation)[0] : null\n\n if (conversationData?.connected && conversationData?.direction === 'in') {\n const eventData = {\n counterpartNum: conversationData.counterpartNum,\n counterpartName: conversationData.counterpartName,\n owner: conversationData.owner,\n uniqueId: conversationData.uniqueId,\n linkedId: conversationData.linkedId,\n throughQueue: conversationData.throughQueue,\n throughTrunk: conversationData.throughTrunk,\n direction: conversationData.direction,\n connected: conversationData.connected,\n }\n eventDispatch('phone-island-url-parameter-opened', eventData)\n }\n } else if (viewType !== null) {\n dispatch.island.setIslandView(viewType)\n }\n },\n [dispatch.island, conversations],\n )\n\n const checkCameraPermission = useCallback(async () => {\n if (videoInputDevices.length > 0) {\n const isWebCamAccepted = await checkWebCamPermission()\n setIsVideoCallButtonVisible(isWebCamAccepted)\n return isWebCamAccepted\n } else {\n setIsVideoCallButtonVisible(false)\n return false\n }\n }, [videoInputDevices.length])\n\n const goToVideoCall = useCallback(async () => {\n const cameraPermission = await checkCameraPermission()\n if (cameraPermission) {\n closeSideViewAndLaunchEvent('video')\n store.dispatch.currentCall.updateCurrentCall({\n isLocalVideoEnabled: true,\n isStartingVideoCall: true,\n })\n }\n }, [checkCameraPermission, closeSideViewAndLaunchEvent])\n\n const goToScreenSharing = useCallback(() => {\n closeSideViewAndLaunchEvent('video')\n store.dispatch.screenShare.update({\n isStartingScreenShare: true,\n })\n }, [closeSideViewAndLaunchEvent])\n\n const permissions = useMemo(\n () => userInformation?.profile?.macro_permissions || {},\n [userInformation?.profile?.macro_permissions],\n )\n\n const userCapabilities = useMemo(\n () => ({\n canRecord: permissions?.settings?.permissions?.recording?.value || false,\n canShareScreen:\n janus?.current?.webRTCAdapter?.browserDetails?.browser !== 'safari' &&\n (permissions?.nethvoice_cti?.permissions?.screen_sharing?.value || false),\n canSwitchDevice: availableDevices?.length > 0,\n }),\n [\n permissions?.settings?.permissions?.recording?.value,\n permissions?.nethvoice_cti?.permissions?.screen_sharing?.value,\n availableDevices?.length,\n userInformation?.default_device?.type,\n uaType,\n ],\n )\n\n const isUrlButtonEnabled = useMemo(() => {\n const conversationData = getActiveConversationData()\n\n // If param url type is 'never', return false\n if (paramUrlData.openParamUrlType === 'never') {\n return false\n }\n\n if (!conversationData?.connected || conversationData?.direction !== 'in') {\n return false\n }\n\n // open param url type is set to 'button'\n if (paramUrlData.openParamUrlType === 'button') {\n if (paramUrlData.onlyQueues && conversationData?.throughQueue) {\n return true\n } else if (\n !paramUrlData.onlyQueues &&\n (isFromTrunk(conversationData.counterpartNum) || conversationData?.throughQueue)\n ) {\n return true\n }\n }\n\n return false\n }, [getActiveConversationData, paramUrlData.onlyQueues, paramUrlData.openParamUrlType])\n\n useEffect(() => {\n if (userInformation && allUsersInformation) {\n const devices = getAvailableDevices(userInformation, allUsersInformation)\n setAvailableDevices(devices)\n }\n }, [userInformation, allUsersInformation])\n\n const openTranscriptionView = useCallback(() => {\n const conversationData = getActiveConversationData()\n const transcriptionId = conversationData?.linkedId || conversationData?.uniqueId || null\n\n if (!transcriptionId) {\n return\n }\n\n // Close SideView, collapse actions, and open TranscriptionView\n dispatch.island.toggleSideViewVisible(false)\n eventDispatch('phone-island-transcription-open', {\n linkedid: transcriptionId,\n uniqueid: transcriptionId,\n })\n }, [dispatch.island, getActiveConversationData])\n\n const isTranscriptionEnabled = useMemo(\n () => userInformation?.call_transcription_enabled || false,\n [userInformation?.call_transcription_enabled],\n )\n\n return {\n userInformation,\n availableDevices,\n videoInputDevices,\n isVideoCallButtonVisible,\n isUrlButtonEnabled,\n hasValidUrl: paramUrlData.hasValidUrl,\n isTranscriptionEnabled,\n ...userCapabilities,\n goToVideoCall,\n goToScreenSharing,\n closeSideViewAndLaunchEvent,\n openTranscriptionView,\n }\n}\n"],"names":["uaType","dispatch","useDispatch","userInformation","useSelector","state","currentUser","allUsersInformation","users","paramUrlData","paramUrl","videoInputDevices","store","select","mediaDevices","getState","janus","useRef","JanusLib","conversations","_j","useState","availableDevices","setAvailableDevices","_k","isVideoCallButtonVisible","setIsVideoCallButtonVisible","getActiveConversationData","useCallback","activeConversation","Object","values","find","conv","keys","length","closeSideViewAndLaunchEvent","viewType","island","toggleSideViewVisible","conversationData","connected","direction","eventData","counterpartNum","counterpartName","owner","uniqueId","linkedId","throughQueue","throughTrunk","eventDispatch","setIslandView","checkCameraPermission","__awaiter","checkWebCamPermission","isWebCamAccepted","_a","sent","goToVideoCall","currentCall","updateCurrentCall","isLocalVideoEnabled","isStartingVideoCall","goToScreenSharing","screenShare","update","isStartingScreenShare","permissions","useMemo","profile","macro_permissions","userCapabilities","canRecord","_c","settings","_b","recording","value","canShareScreen","_f","_d","current","webRTCAdapter","_e","browserDetails","browser","_h","nethvoice_cti","_g","screen_sharing","canSwitchDevice","default_device","type","isUrlButtonEnabled","openParamUrlType","onlyQueues","isFromTrunk","useEffect","devices","getAvailableDevices","openTranscriptionView","transcriptionId","linkedid","uniqueid","isTranscriptionEnabled","call_transcription_enabled","__assign","hasValidUrl"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useSideViewLogic.js","sources":["../../../../src/components/SideView/hooks/useSideViewLogic.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState, store } from '../../../store'\nimport { getAvailableDevices } from '../../../utils/deviceUtils'\nimport JanusLib from '../../../lib/webrtc/janus.js'\nimport { isFromTrunk } from '../../../lib/user/extensions'\nimport { checkWebCamPermission } from '../../../lib/devices/devices'\nimport { eventDispatch } from '../../../utils'\nimport { isRecordingControlAvailable } from '../../../lib/phone/call'\n\nexport interface UseSideViewLogicResult {\n userInformation: RootState['currentUser']\n availableDevices: any[]\n videoInputDevices: any[]\n isVideoCallButtonVisible: boolean\n isUrlButtonEnabled: boolean\n hasValidUrl: boolean\n isTranscriptionEnabled: boolean\n canRecord: boolean\n canShareScreen: boolean\n canSwitchDevice: boolean\n goToVideoCall: () => Promise<void>\n goToScreenSharing: () => void\n closeSideViewAndLaunchEvent: (viewType: any) => void\n openTranscriptionView: () => void\n}\n\nexport const useSideViewLogic = (uaType?: string): UseSideViewLogicResult => {\n const dispatch = useDispatch<Dispatch>()\n const userInformation = useSelector((state: RootState) => state.currentUser)\n const allUsersInformation = useSelector((state: RootState) => state.users)\n const paramUrlData = useSelector((state: RootState) => state.paramUrl)\n const videoInputDevices = store.select.mediaDevices.videoInputDevices(store.getState())\n const janus = useRef<any>(JanusLib)\n const conversations = useSelector((state: RootState) => state.currentUser.conversations)\n\n const [availableDevices, setAvailableDevices] = useState<any[]>([])\n const [isVideoCallButtonVisible, setIsVideoCallButtonVisible] = useState(true)\n\n const getActiveConversationData = useCallback(() => {\n const activeConversation = Object.values(conversations).find((conv) => Object.keys(conv).length > 0)\n return activeConversation ? (Object.values(activeConversation)[0] as any) : null\n }, [conversations])\n\n const closeSideViewAndLaunchEvent = useCallback(\n (viewType: any) => {\n dispatch.island.toggleSideViewVisible(false)\n if (viewType === 'openUrl') {\n const activeConversation = Object.values(conversations).find(\n (conv) => Object.keys(conv).length > 0,\n )\n const conversationData = activeConversation ? Object.values(activeConversation)[0] : null\n\n if (conversationData?.connected && conversationData?.direction === 'in') {\n const eventData = {\n counterpartNum: conversationData.counterpartNum,\n counterpartName: conversationData.counterpartName,\n owner: conversationData.owner,\n uniqueId: conversationData.uniqueId,\n linkedId: conversationData.linkedId,\n throughQueue: conversationData.throughQueue,\n throughTrunk: conversationData.throughTrunk,\n direction: conversationData.direction,\n connected: conversationData.connected,\n }\n eventDispatch('phone-island-url-parameter-opened', eventData)\n }\n } else if (viewType !== null) {\n dispatch.island.setIslandView(viewType)\n }\n },\n [dispatch.island, conversations],\n )\n\n const checkCameraPermission = useCallback(async () => {\n if (videoInputDevices.length > 0) {\n const isWebCamAccepted = await checkWebCamPermission()\n setIsVideoCallButtonVisible(isWebCamAccepted)\n return isWebCamAccepted\n } else {\n setIsVideoCallButtonVisible(false)\n return false\n }\n }, [videoInputDevices.length])\n\n const goToVideoCall = useCallback(async () => {\n const cameraPermission = await checkCameraPermission()\n if (cameraPermission) {\n closeSideViewAndLaunchEvent('video')\n store.dispatch.currentCall.updateCurrentCall({\n isLocalVideoEnabled: true,\n isStartingVideoCall: true,\n })\n }\n }, [checkCameraPermission, closeSideViewAndLaunchEvent])\n\n const goToScreenSharing = useCallback(() => {\n closeSideViewAndLaunchEvent('video')\n store.dispatch.screenShare.update({\n isStartingScreenShare: true,\n })\n }, [closeSideViewAndLaunchEvent])\n\n const permissions = useMemo(\n () => userInformation?.profile?.macro_permissions || {},\n [userInformation?.profile?.macro_permissions],\n )\n\n const userCapabilities = useMemo(() => {\n const activeConversation = getActiveConversationData()\n const recordingPermission = permissions?.settings?.permissions?.recording?.value || false\n const recordingControlAvailable = isRecordingControlAvailable(activeConversation)\n const canRecord = recordingPermission && recordingControlAvailable\n\n return {\n canRecord,\n canShareScreen:\n janus?.current?.webRTCAdapter?.browserDetails?.browser !== 'safari' &&\n (permissions?.nethvoice_cti?.permissions?.screen_sharing?.value || false),\n canSwitchDevice: availableDevices?.length > 0,\n }\n }, [\n permissions?.settings?.permissions?.recording?.value,\n permissions?.nethvoice_cti?.permissions?.screen_sharing?.value,\n getActiveConversationData,\n conversations,\n availableDevices?.length,\n userInformation?.default_device?.type,\n uaType,\n ])\n\n const isUrlButtonEnabled = useMemo(() => {\n const conversationData = getActiveConversationData()\n\n // If param url type is 'never', return false\n if (paramUrlData.openParamUrlType === 'never') {\n return false\n }\n\n if (!conversationData?.connected || conversationData?.direction !== 'in') {\n return false\n }\n\n // open param url type is set to 'button'\n if (paramUrlData.openParamUrlType === 'button') {\n if (paramUrlData.onlyQueues && conversationData?.throughQueue) {\n return true\n } else if (\n !paramUrlData.onlyQueues &&\n (isFromTrunk(conversationData.counterpartNum) || conversationData?.throughQueue)\n ) {\n return true\n }\n }\n\n return false\n }, [getActiveConversationData, paramUrlData.onlyQueues, paramUrlData.openParamUrlType])\n\n useEffect(() => {\n if (userInformation && allUsersInformation) {\n const devices = getAvailableDevices(userInformation, allUsersInformation)\n setAvailableDevices(devices)\n }\n }, [userInformation, allUsersInformation])\n\n const openTranscriptionView = useCallback(() => {\n const conversationData = getActiveConversationData()\n const transcriptionId = conversationData?.linkedId || conversationData?.uniqueId || null\n\n if (!transcriptionId) {\n return\n }\n\n // Close SideView, collapse actions, and open TranscriptionView\n dispatch.island.toggleSideViewVisible(false)\n eventDispatch('phone-island-transcription-open', {\n linkedid: transcriptionId,\n uniqueid: transcriptionId,\n })\n }, [dispatch.island, getActiveConversationData])\n\n const isTranscriptionEnabled = useMemo(\n () => userInformation?.call_transcription_enabled || false,\n [userInformation?.call_transcription_enabled],\n )\n\n return {\n userInformation,\n availableDevices,\n videoInputDevices,\n isVideoCallButtonVisible,\n isUrlButtonEnabled,\n hasValidUrl: paramUrlData.hasValidUrl,\n isTranscriptionEnabled,\n ...userCapabilities,\n goToVideoCall,\n goToScreenSharing,\n closeSideViewAndLaunchEvent,\n openTranscriptionView,\n }\n}\n"],"names":["uaType","dispatch","useDispatch","userInformation","useSelector","state","currentUser","allUsersInformation","users","paramUrlData","paramUrl","videoInputDevices","store","select","mediaDevices","getState","janus","useRef","JanusLib","conversations","_j","useState","availableDevices","setAvailableDevices","_k","isVideoCallButtonVisible","setIsVideoCallButtonVisible","getActiveConversationData","useCallback","activeConversation","Object","values","find","conv","keys","length","closeSideViewAndLaunchEvent","viewType","island","toggleSideViewVisible","conversationData","connected","direction","eventData","counterpartNum","counterpartName","owner","uniqueId","linkedId","throughQueue","throughTrunk","eventDispatch","setIslandView","checkCameraPermission","__awaiter","checkWebCamPermission","isWebCamAccepted","_a","sent","goToVideoCall","currentCall","updateCurrentCall","isLocalVideoEnabled","isStartingVideoCall","goToScreenSharing","screenShare","update","isStartingScreenShare","permissions","useMemo","profile","macro_permissions","userCapabilities","recordingPermission","_c","settings","_b","recording","value","recordingControlAvailable","isRecordingControlAvailable","canRecord","canShareScreen","_f","_d","current","webRTCAdapter","_e","browserDetails","browser","_h","nethvoice_cti","_g","screen_sharing","canSwitchDevice","default_device","type","isUrlButtonEnabled","openParamUrlType","onlyQueues","isFromTrunk","useEffect","devices","getAvailableDevices","openTranscriptionView","transcriptionId","linkedid","uniqueid","isTranscriptionEnabled","call_transcription_enabled","__assign","hasValidUrl"],"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("./RestAPI.js"),i=require("../lib/phone/conversation.js"),o=require("../services/user.js"),c=require("../static/busy_ringtone.js"),u=require("../utils/customHooks/useEventListener.js"),a=require("../utils/genericFunctions/eventDispatch.js"),s=require("../utils/genericFunctions/withTimeout.js"),l=require("../store/index.js");require("../lib/webrtc/janus.js"),require("../node_modules/webrtc-adapter/src/js/adapter_core.js");var d=require("../lib/devices/devices.js"),p=require("../lib/user/default_device.js"),v=require("../utils/genericFunctions/isEmpty.js"),m=require("../utils/streaming/getStreamingSourceId.js"),g=require("../events/SocketEvents.js"),f=require("../utils/genericFunctions/timestamp.js"),h=require("../lib/user/extensions.js"),b=require("../utils/streaming/isFromStreaming.js"),S=require("../lib/phone/queue.js"),k=require("../lib/phone/trunk.js"),y=require("../node_modules/react-redux/es/hooks/useDispatch.js");function w(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var C=w(n);exports.Socket=function(w){var q=w.hostName,N=w.username,_=w.authToken,T=w.reload,I=w.reloadedCallback,D=w.children,U=w.uaType,j=y.useDispatch(),x=n.useRef(),E=n.useRef(),P=n.useRef(!1),O=n.useRef(0),F=n.useRef(null);u.useEventListener("phone-island-start-transcription",(function(e){if(E.current){var n=(null==e?void 0:e.linkedid)||(null==e?void 0:e.uniqueid)||null;if(!n)return;E.current.emit("start_transcription",{linkedid:n,uniqueid:(null==e?void 0:e.uniqueid)||n})}})),u.useEventListener("phone-island-stop-transcription",(function(e){if(E.current){var n=(null==e?void 0:e.linkedid)||(null==e?void 0:e.uniqueid)||null;if(!n)return;E.current.emit("stop_transcription",{linkedid:n,uniqueid:(null==e?void 0:e.uniqueid)||n})}})),u.useEventListener("phone-island-current-user-queue-call-waiting",(function(e){j.currentCall.updateCurrentCall({throughQueue:!0,queueId:(null==e?void 0:e.queueId)||"",queueName:(null==e?void 0:e.queueName)||"",queueNumber:(null==e?void 0:e.queueNumber)||"",queuePosition:(null==e?void 0:e.queuePosition)||"",queueWaitingTime:(null==e?void 0:e.queueWaitingTime)||0})})),u.useEventListener("phone-island-current-user-queue-call-connected",(function(e){j.currentCall.updateCurrentCall({throughQueue:!0,queueId:(null==e?void 0:e.queueId)||"",queueName:(null==e?void 0:e.queueName)||"",queueNumber:(null==e?void 0:e.queueNumber)||"",queuePosition:(null==e?void 0:e.queuePosition)||"",queueWaitingTime:(null==e?void 0:e.queueWaitingTime)||0})}));return n.useEffect((function(){var n,u=function(e){if(e.counterpartNum&&b.isFromStreaming(e.counterpartNum)){j.island.setIsFromStreaming(!0),j.currentCall.updateCurrentCall({streamingSourceNumber:e.counterpartNum});var n=m.getStreamingSourceId(e.counterpartNum);n&&o.subscribe({id:n}).catch((function(e){return console.error("Error subscribing to streaming source:",e)}))}},y=function(e){var n,t,r,i;if(e){var o=function(e){return S.getCurrentCallQueueContext(e,l.store.getState().queue)}(e),c=function(e,n){var t=l.store.getState().currentCall;return{conversationId:e.id,linkedId:e.linkedId,uniqueId:e.uniqueId,ownerExtension:e.owner,number:"".concat(e.counterpartNum||""),queueId:(null==n?void 0:n.queueId)||t.queueId||"",queueName:(null==n?void 0:n.queueName)||t.queueName||"",queueNumber:(null==n?void 0:n.queueNumber)||t.queueNumber||"",queuePosition:(null==n?void 0:n.queuePosition)||"",queueWaitingTime:(null==n?void 0:n.queueWaitingTime)||0}}(e,o);if(Boolean(c.queueId||c.queueName||c.queueNumber))if(e.connected)((null===(r=F.current)||void 0===r?void 0:r.conversationId)!==e.id||"connected"!==(null===(i=F.current)||void 0===i?void 0:i.phase))&&(g.dispatchCurrentUserQueueCallConnected(c),F.current={conversationId:e.id,phase:"connected"});else((null===(n=F.current)||void 0===n?void 0:n.conversationId)!==e.id||"waiting"!==(null===(t=F.current)||void 0===t?void 0:t.phase))&&(g.dispatchCurrentUserQueueCallWaiting(c),F.current={conversationId:e.id,phase:"waiting"});else F.current=null}else F.current=null},w=function(n,t){var r=l.store.getState().currentCall,c=r.transferring,s=r.transferSwitching,d=r.transferCalls,v=l.store.getState().island.view;if(Object.keys(t).length>0){if(n.status){var m=l.store.getState().users.extensions,g=l.store.getState().currentUser.default_device,b=l.store.getState().currentUser,S=b.endpoints,w=b.username,C=l.store.getState().currentCall;C.incoming,C.outgoing;var q=function(){if(!m||!w)return!1;var e=Object.values(m).filter((function(e){return(null==e?void 0:e.username)===w}));return null==e?void 0:e.some((function(e){var n=null==S?void 0:S.extension.find((function(n){return n.id===(null==e?void 0:e.exten)}));return"nethlink"===(null==n?void 0:n.type)&&"offline"!==(null==e?void 0:e.status)}))};switch(n.status){case"ringing":if(function(e){var n=l.store.getState().currentCall,t=n.accepted,r=n.ownerExtension;return t&&!!r&&!!e&&r!==e}(t.owner))break;y(t),u(t),("mobile"===U&&q()||"desktop"===U&&("webrtc"===(null==g?void 0:g.type)||void 0===(null==g?void 0:g.type)&&!q()||!q()&&"physical"===(null==g?void 0:g.type)))&&(j.currentCall.checkIncomingUpdatePlay({conversationId:t.id,displayName:i.getDisplayName(t),number:"".concat(t.counterpartNum),incomingSocket:!0,incoming:!0,username:"".concat(m&&m[t.counterpartNum]&&m[t.counterpartNum].username)||"",ownerExtension:t.owner}),l.store.dispatch.island.setIslandView("call")),P.current||(P.current=!0,o.getCurrentUserInfo().then((function(n){n&&(j.currentUser.updateCurrentUser(n),a.eventDispatch("phone-island-user-informations-update",e.__assign({},n)),n.settings&&n.settings.open_param_url?j.paramUrl.setOpenParamUrlType(n.settings.open_param_url):j.paramUrl.setOpenParamUrlType("never"))})).catch((function(e){console.error("Error getting current user info:",e)})).finally((function(){setTimeout((function(){P.current=!1}),100)})));var N=l.store.getState().paramUrl.openParamUrlType,_=l.store.getState().island.urlOpened;if("ringing"===N&&!_){var T=k.isFromTrunk(t.counterpartNum);l.store.dispatch.paramUrl.setThroughTrunk(T),l.store.dispatch.island.setUrlOpened(!1),a.eventDispatch("phone-island-url-parameter-opened",{counterpartNum:t.counterpartNum,counterpartName:i.getDisplayName(t),owner:t.owner,uniqueId:t.uniqueId,linkedId:t.linkedId,throughQueue:t.throughQueue,throughTrunk:T,direction:t.direction,connected:t.connected})}break;case"busy":if(y(t),u(t),"mobile"===U&&q()||"desktop"===U&&("webrtc"===(null==g?void 0:g.type)||void 0===(null==g?void 0:g.type)&&!q()||!q()&&"physical"===(null==g?void 0:g.type))){if(t&&t.connected)j.currentCall.updateCurrentCall({conversationId:t.id,displayName:i.getDisplayName(t),number:"".concat(t.counterpartNum),ownerExtension:t.owner,username:"".concat(m&&m[t.counterpartNum]&&m[t.counterpartNum].username)||"",chDest:(null==t?void 0:t.chDest)||{},chSource:(null==t?void 0:t.chSource)||{}}),j.currentCall.checkAcceptedUpdate({acceptedSocket:!0}),j.currentCall.addTransferCalls({type:"transferred",displayName:i.getDisplayName(t),number:"".concat(t.counterpartNum),startTime:"".concat(f.getTimestampInSeconds())}),l.store.getState().island.isFromStreaming&&"out"===t.direction&&setTimeout((function(){j.island.setIslandView("streamingAnswer")}),200),p.isPhysical()&&function(e){j.currentCall.updateCurrentCall({conversationId:e.id,accepted:!0,incoming:"in"!==e.direction&&void 0}),a.eventDispatch("phone-island-call-answered",{}),l.store.dispatch.player.stopAudioPlayer(),l.store.dispatch.player.setAudioPlayerLoop(!1)}(t),"call"===v&&c&&j.currentCall.updateCurrentCall({transferring:!1});if(d.length>1)j.currentCall.deleteTransferCalls();else if(t&&!t.connected){if(c&&!s){var I=d.find((function(e){return e.number===t.counterpartNum}));!t.connected&&I&&(j.currentCall.updateCurrentCall({transferring:!1}),a.eventDispatch("phone-island-call-transfer-failed",{}),j.currentCall.updateTransferSwitching(!1))}"REC"===(null==t?void 0:t.counterpartName)&&j.physicalRecorder.setRecordingTempVariable(!0)}t&&!t.connected&&"out"===t.direction&&j.currentCall.checkOutgoingUpdate({outgoingSocket:!0,outgoing:"REC"!==(null==t?void 0:t.counterpartName),displayName:i.getDisplayName(t),number:"".concat(null==t?void 0:t.counterpartNum),username:"".concat(m&&m[null==t?void 0:t.counterpartNum]&&m[null==t?void 0:t.counterpartNum].username)||""})}break;case"onhold":y(t);var D=t.counterpartName,x=t.counterpartNum,E=t.startTime;c&&x&&D&&"<unknown>"!==D&&(j.currentCall.addTransferCalls({type:"destination",displayName:i.getDisplayName(t),number:x,startTime:"".concat(f.getTimestampInSeconds())}),j.currentCall.updateCurrentCall({displayName:i.getDisplayName(t),number:x,startTime:"".concat(E/1e3),conversationId:t.id}),j.island.setIslandView("call"));break;case"busy_ringing":a.eventDispatch("phone-island-call-ringing",{})}}}else"online"==n.status&&h.userTotallyFree()&&(y(null),j.player.stopAudioPlayer(),j.currentCall.reset(),j.physicalRecorder.setRecordingTempVariable(!1),j.island.setIsFromStreaming(!1))};return n={upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3},"new"===r.getApiMode(N)&&(n.path="/api/ws"),E.current=t.io("https://"+q,n),j.websocket.update({socket:E.current}),E.current.on("connect",(function(){console.debug("Socket connected sid: ".concat(E.current.id)),a.eventDispatch("phone-island-socket-connected",{})})),E.current.on("disconnect",(function(e){console.debug("Socket disconnect - reason: ".concat(e)),x.current&&(clearInterval(x.current),x.current=null),e.includes("server disconnect")?a.eventDispatch("phone-island-server-disconnected",{}):a.eventDispatch("phone-island-socket-disconnected",{})})),E.current.io.on("error",(function(e){console.debug("Socket error: ",e)})),E.current.on("connect_error",(function(e){console.debug("Socket connect_error: ",e)})),E.current.io.on("reconnect",(function(e){O.current=0,a.eventDispatch("phone-island-socket-reconnected",{}),console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(E.current.id,")"))})),E.current.io.on("reconnect_attempt",(function(e){console.debug("Socket reconnect_attempt ".concat(e))})),E.current.io.on("reconnect_error",(function(e){console.debug("Socket reconnect_error: ",e)})),E.current.io.on("reconnect_failed",(function(){console.debug("Socket reconnect_failed")})),E.current.on("connect",(function(){console.debug("Socket on: "+q+" is connected!"),E.current.emit("login",{accessKeyId:"".concat(N),token:_,uaType:U})})),E.current.on("authe_ok",(function(){console.debug("Socket authentication success!"),a.eventDispatch("phone-island-socket-authorized",{}),x.current&&clearInterval(x.current),x.current=setInterval((function(){E.current.volatile.emit("ping",s.withTimeout((function(){O.current=0,setTimeout((function(){j.alerts.removeAlert("socket_down"),a.eventDispatch("phone-island-alert-removed",{type:"socket_down"}),a.eventDispatch("phone-island-socket-disconnected-popup-close",{})}),0)}),(function(){O.current++,console.debug("Socket ping timeout (".concat(O.current,"/").concat(3,"), connected: ").concat(E.current.connected)),setTimeout((function(){var e,n,t=E.current.connected&&O.current>=3;if(!E.current.connected||t){var r=l.store.getState().webrtc.sipcall,i=l.store.getState().currentCall,o=i.accepted,c=i.outgoing,u=null===(n=null===(e=null==r?void 0:r.webrtcStuff)||void 0===e?void 0:e.pc)||void 0===n?void 0:n.iceConnectionState;if((o||c)&&("connected"===u||"completed"===u))return void console.debug("Socket unreachable but active call with ICE connected - skipping socket_down alert",{iceState:u,accepted:o,outgoing:c,isStaleConnection:t,timestamp:(new Date).toISOString()});t&&(console.warn("Stale socket connection detected - forcing reconnection"),E.current.disconnect()),j.alerts.setAlert("socket_down"),a.eventDispatch("phone-island-socket-disconnected-popup-open",{}),console.error("Socket is unreachable!")}}),0)}),5e3))}),5e3)})),E.current.on("userMainPresenceUpdate",(function(n){l.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),g.dispatchMainPresence(n)})),E.current.on("extenHangup",(function(e){var n,t,r=l.store.getState().currentUser,i=r.endpoints,o=r.username,u=l.store.getState().conference,s=u.isActive,d=u.conferenceStartedFrom,p=l.store.getState().island,v=p.view,m=p.previewCallFromMobileOrNethlink,g=((null==i?void 0:i.extension)||[]).find((function(n){return n.id===e.callerNum})),f=null==g?void 0:g.type,h=l.store.getState().currentUser.conversations,b=void 0,S=!1;if(e.callerNum&&h[e.callerNum]){var k=h[e.callerNum],y=Object.keys(k);if(y.length>0){for(var w=null,C=0,q=y;C<q.length;C++){var N=q[C],_=null==k?void 0:k[N];if(_)if(w){var T=!!w.connected,I=!!_.connected;if(!I||T){var D=null!==(n=w.startTime)&&void 0!==n?n:0,U=null!==(t=_.startTime)&&void 0!==t?t:0;I===T&&U>D&&(w=_)}else w=_}else w=_}b=null==w?void 0:w.linkedId,S=(null==w?void 0:w.connected)||!1}}if(b&&S&&a.eventDispatch("phone-island-summary-call-check",{linkedid:b}),"normal_clearing"===e.cause&&("physical"===f||"mobile"===f)||"normal_clearing"===e.cause&&("webrtc"===f||"nethlink"===f)&&m||"user_busy"===(null==e?void 0:e.cause)||"not_defined"===(null==e?void 0:e.cause)||"call_rejected"===(null==e?void 0:e.cause)||"interworking"===(null==e?void 0:e.cause)?(setTimeout((function(){l.store.dispatch.island.toggleAvoidToShow(!1),l.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!1)}),500),s&&d!==o&&l.store.dispatch.conference.resetConference()):"normal_circuit_congestion"===(null==e?void 0:e.cause)&&s&&d===o?setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800):"normal_clearing"!==e.cause&&"user_busy"!==(null==e?void 0:e.cause)&&"not_defined"!==(null==e?void 0:e.cause)&&"call_rejected"!==(null==e?void 0:e.cause)||"webrtc"!==f&&"nethlink"!==f||!s||d===o||l.store.dispatch.conference.resetConference(),("normal_clearing"===e.cause&&("webrtc"===f||"nethlink"===f)||"call_rejected"===(null==e?void 0:e.cause))&&s&&d===o){var j=l.store.getState().conference,x=j.usersList,E=j.pendingUsers,P=x&&Object.keys(x).length>0,O=E&&Object.keys(E).length>0;P||O?setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800):l.store.dispatch.conference.resetConference()}if("interworking"===(null==e?void 0:e.cause)&&s&&d===o&&"waitingConference"!==v&&setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800),"user_busy"===(null==e?void 0:e.cause)){var F=l.store.getState().currentUser,A=F.endpoints,V=F.username,R=((null==A?void 0:A.extension)||[]).map((function(e){return e.id})),M=l.store.getState().currentCall,L=M.incoming,Q=M.accepted,W=M.transferring,B=l.store.getState().conference,H=B.isActive,z=B.conferenceStartedFrom;!(L&&e.callerNum&&R.includes(e.callerNum))&&(!Q||H||W)&&(l.store.dispatch.island.setOperatorBusyActive({callerNumber:e.callerNum||"Unknown"}),setTimeout((function(){l.store.dispatch.player.stopAudioPlayer()}),4e3),setTimeout((function(){l.store.dispatch.player.updateStartAudioPlayer({src:c.default,loop:!0}),l.store.dispatch.island.setIslandView("operatorBusy")}),600),H&&z===V&&setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),4e3))}if("subscriber_absent"===(null==e?void 0:e.cause)){var J=l.store.getState().conference,K=J.isActive,G=J.conferenceStartedFrom,X=l.store.getState().currentUser.username;if(K&&G===X){var Y=l.store.getState().conference;x=Y.usersList,E=Y.pendingUsers,P=x&&Object.keys(x).length>0,O=E&&Object.keys(E).length>0,P||O?(setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800),E&&E[e.callerNum]&&l.store.dispatch.conference.removePendingUser(e.callerNum)):l.store.dispatch.conference.resetConference()}}})),E.current.on("extenConnected",(function(e){var n=l.store.getState().currentUser,t=n.default_device,r=n.endpoints,i=((null==r?void 0:r.extension)||[]).find((function(n){return n.id===e.extenConnected})),o=null==i?void 0:i.type;(("webrtc"===(null==t?void 0:t.type)||"nethlink"===(null==t?void 0:t.type))&&o&&("mobile"===o||"physical"===o)||"physical"===(null==t?void 0:t.type)&&o&&"physical"!==o)&&(l.store.dispatch.island.toggleAvoidToShow(!0),l.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!0),a.eventDispatch("phone-island-call-answered",{extensionType:o}))})),E.current.on("extenUpdate",(function(e){var n,t;j.users.updateExtension(e);var r=l.store.getState().users.extensions,i={},o=l.store.getState().currentUser;for(var c in r){var u=r[c].username,a=r[c].exten;i[u]||(i[u]=[]),i[u].push(a)}var s=i[e.username],d=e.conversations[Object.keys(e.conversations)[0]]||{},p=!1;if((null==e?void 0:e.username)===N&&!v.isEmpty(d)&&(null==d?void 0:d.owner)){var m=null===(t=null===(n=null==o?void 0:o.endpoints)||void 0===n?void 0:n.extension)||void 0===t?void 0:t.find((function(e){return e.id===d.owner}));m&&"mobile"===m.type&&(p=!0)}if(g.dispatchExtensions(e),v.isEmpty(d)){var f=null==s?void 0:s.some((function(e){var n,t=null===(n=r[e])||void 0===n?void 0:n.conversations;return!v.isEmpty(t)}));f||g.dispatchConversations(e)}else p||g.dispatchConversations(e);p&&"busy"===(null==e?void 0:e.status)&&(null==e?void 0:e.username)===N&&(l.store.dispatch.island.toggleAvoidToShow(!0),l.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!0)),e.username===N&&(w(e,d),j.currentUser.updateConversations(e))})),E.current.on("queueUpdate",(function(e){j.queue.updateQueue(e);var n,t,r,i=(n=l.store.getState().currentUser.conversations,t=l.store.getState().currentCall.conversationId,r=null,Object.values(n||{}).forEach((function(e){Object.values(e||{}).forEach((function(e){(null==r?void 0:r.id)&&r.id===t||(t&&e.id===t||!r||e.connected&&!r.connected||e.connected===r.connected&&e.startTime>r.startTime)&&(r=e)}))})),r);i&&y(i),g.dispatchQueueUpdate(e)})),E.current.on("queueMemberUpdate",(function(e){j.queue.updateQueueMember(e),g.dispatchQueueMemberUpdate(e)})),E.current.on("takeOver",(function(){g.dispatchAlreadyLogin()})),E.current.on("serverReloaded",(function(){g.dispatchServerReload()})),E.current.on("parkingUpdate",(function(e){g.dispatchParkingUpdate(e)})),E.current.on("actionNethLink",(function(e,n){g.dispatchUrlCall(e,n)})),E.current.on("satellite/summary",(function(e){(null==e?void 0:e.uniqueid)&&a.eventDispatch("phone-island-summary-ready",{linkedid:null==e?void 0:e.uniqueid,display_name:null==e?void 0:e.display_name,display_number:null==e?void 0:e.display_number})})),E.current.on("message",(function(e){switch(e.message){case"screenSharingStart":j.island.toggleSideViewVisible(!1),j.island.toggleTranscriptionViewVisible(!1),j.island.setIslandView("video"),j.screenShare.update({isJoiningScreenShare:!0,room:e.roomId});break;case"screenSharingStop":j.island.toggleSideViewVisible(!1),j.island.toggleTranscriptionViewVisible(!1),j.island.setIslandView("video"),j.screenShare.update({isLeavingScreenShare:!0});break;default:console.warn("Socket: unknown message type ",e.message)}})),E.current.on("updateDefaultDevice",(function(n){g.dispatchDefaultDeviceUpdate(n);var t=l.store.getState().users.extensions,r=l.store.getState().currentUser.endpoints;if(t&&r){var i=Object.values(t).filter((function(e){return(null==e?void 0:e.exten)===n}));if(0!==i.length){var o=i[0],c=r.extension.find((function(e){return e.id===o.exten}));c&&(o=e.__assign(e.__assign({},o),{type:c.type})),l.store.dispatch.currentUser.updateCurrentDefaultDevice(o),d.checkMediaPermissions()}}})),E.current.on("confBridgeUpdate",(function(n){if(n&&(null==n?void 0:n.users)){var t=null==n?void 0:n.id,r=null==n?void 0:n.users,i=l.store.getState().conference.usersList,o=e.__assign({},r);i&&Object.keys(o).forEach((function(n){i[n]&&(o[n]=e.__assign(e.__assign({},o[n]),{muted:i[n].muted}))})),l.store.dispatch.conference.updateConferenceUsersList(o),l.store.dispatch.conference.updateConferenceId(t)}})),E.current.on("confBridgeEnd",(function(e){e&&(null==e?void 0:e.id)&&(l.store.dispatch.conference.resetConference(),a.eventDispatch("phone-island-conference-finished",{}))})),E.current.on("callWebrtc",(function(e){a.eventDispatch("phone-island-call-start",{number:e})})),E.current.on("newVoiceMessageCounter",(function(e){a.eventDispatch("phone-island-voicemail-received",{voicemailInfo:e})})),E.current.on("streamingSourceUpdate",(function(e){a.eventDispatch("phone-island-streaming-information-received",{res:e});var n=e.streaming||e.res&&e.res.streaming;if(n){var t=n.source,r=n.image;if(t&&r){l.store.getState().island.isFromStreaming;var i=l.store.getState().currentCall.streamingSourceNumber;m.getStreamingSourceId(i),j.streaming.updateSourceImage({source:t,image:r})}}})),E.current.on("satellite/transcription",(function(e){a.eventDispatch("phone-island-conversation-transcription",e)})),function(){clearInterval(x.current),E.current.close()}}),[q,N,_,U,j]),n.useEffect((function(){var e;if(T){console.info("Socket reload requested");var n=l.store.getState().alerts.data,t=l.store.getState().island.forceReload;(null===(e=n.socket_down)||void 0===e?void 0:e.active)||!1||t?(console.info(t?"Force reload requested, performing Socket reconnection":"Socket down detected (alert active), performing reconnection"),t&&l.store.dispatch.island.setForceReload(!1),x.current&&(clearInterval(x.current),x.current=null),setTimeout((function(){E.current.disconnect(),E.current.connect(),I()}),100)):(console.info("Socket already connected (no alert active), skipping reconnection"),I())}}),[T]),C.default.createElement(C.default.Fragment,null,D)};
|
|
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("./RestAPI.js"),i=require("../lib/phone/conversation.js"),o=require("../services/user.js"),c=require("../static/busy_ringtone.js"),u=require("../utils/customHooks/useEventListener.js"),a=require("../utils/genericFunctions/eventDispatch.js"),s=require("../utils/genericFunctions/withTimeout.js"),l=require("../store/index.js");require("../lib/webrtc/janus.js"),require("../node_modules/webrtc-adapter/src/js/adapter_core.js");var d=require("../lib/devices/devices.js"),p=require("../lib/user/default_device.js"),v=require("../utils/genericFunctions/isEmpty.js"),m=require("../utils/streaming/getStreamingSourceId.js"),g=require("../events/SocketEvents.js"),f=require("../utils/genericFunctions/timestamp.js"),h=require("../lib/user/extensions.js"),b=require("../utils/streaming/isFromStreaming.js"),S=require("../lib/phone/queue.js"),k=require("../lib/phone/trunk.js"),y=require("../node_modules/react-redux/es/hooks/useDispatch.js");function w(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var C=w(n);exports.Socket=function(w){var q=w.hostName,N=w.username,_=w.authToken,T=w.reload,I=w.reloadedCallback,U=w.children,D=w.uaType,j=y.useDispatch(),x=n.useRef(),E=n.useRef(),P=n.useRef(!1),O=n.useRef(0),F=n.useRef(null);u.useEventListener("phone-island-start-transcription",(function(e){if(E.current){var n=(null==e?void 0:e.linkedid)||(null==e?void 0:e.uniqueid)||null;if(!n)return;E.current.emit("start_transcription",{linkedid:n,uniqueid:(null==e?void 0:e.uniqueid)||n})}})),u.useEventListener("phone-island-stop-transcription",(function(e){if(E.current){var n=(null==e?void 0:e.linkedid)||(null==e?void 0:e.uniqueid)||null;if(!n)return;E.current.emit("stop_transcription",{linkedid:n,uniqueid:(null==e?void 0:e.uniqueid)||n})}})),u.useEventListener("phone-island-current-user-queue-call-waiting",(function(e){j.currentCall.updateCurrentCall({throughQueue:!0,queueId:(null==e?void 0:e.queueId)||"",queueName:(null==e?void 0:e.queueName)||"",queueNumber:(null==e?void 0:e.queueNumber)||"",queuePosition:(null==e?void 0:e.queuePosition)||"",queueWaitingTime:(null==e?void 0:e.queueWaitingTime)||0})})),u.useEventListener("phone-island-current-user-queue-call-connected",(function(e){j.currentCall.updateCurrentCall({throughQueue:!0,queueId:(null==e?void 0:e.queueId)||"",queueName:(null==e?void 0:e.queueName)||"",queueNumber:(null==e?void 0:e.queueNumber)||"",queuePosition:(null==e?void 0:e.queuePosition)||"",queueWaitingTime:(null==e?void 0:e.queueWaitingTime)||0})}));return n.useEffect((function(){var n,u=function(e){if(e.counterpartNum&&b.isFromStreaming(e.counterpartNum)){j.island.setIsFromStreaming(!0),j.currentCall.updateCurrentCall({streamingSourceNumber:e.counterpartNum});var n=m.getStreamingSourceId(e.counterpartNum);n&&o.subscribe({id:n}).catch((function(e){return console.error("Error subscribing to streaming source:",e)}))}},y=function(e){var n,t,r,i;if(e){var o=function(e){return S.getCurrentCallQueueContext(e,l.store.getState().queue)}(e),c=function(e,n){var t=l.store.getState().currentCall;return{conversationId:e.id,linkedId:e.linkedId,uniqueId:e.uniqueId,ownerExtension:e.owner,number:"".concat(e.counterpartNum||""),queueId:(null==n?void 0:n.queueId)||t.queueId||"",queueName:(null==n?void 0:n.queueName)||t.queueName||"",queueNumber:(null==n?void 0:n.queueNumber)||t.queueNumber||"",queuePosition:(null==n?void 0:n.queuePosition)||"",queueWaitingTime:(null==n?void 0:n.queueWaitingTime)||0}}(e,o);if(Boolean(c.queueId||c.queueName||c.queueNumber))if(e.connected)((null===(r=F.current)||void 0===r?void 0:r.conversationId)!==e.id||"connected"!==(null===(i=F.current)||void 0===i?void 0:i.phase))&&(g.dispatchCurrentUserQueueCallConnected(c),F.current={conversationId:e.id,phase:"connected"});else((null===(n=F.current)||void 0===n?void 0:n.conversationId)!==e.id||"waiting"!==(null===(t=F.current)||void 0===t?void 0:t.phase))&&(g.dispatchCurrentUserQueueCallWaiting(c),F.current={conversationId:e.id,phase:"waiting"});else F.current=null}else F.current=null},w=function(n,t){var r=l.store.getState().currentCall,c=r.transferring,s=r.transferSwitching,d=r.transferCalls,v=l.store.getState().island.view;if(Object.keys(t).length>0){if(n.status){var m=l.store.getState().users.extensions,g=l.store.getState().currentUser.default_device,b=l.store.getState().currentUser,S=b.endpoints,w=b.username,C=l.store.getState().currentCall;C.incoming,C.outgoing;var q=function(){if(!m||!w)return!1;var e=Object.values(m).filter((function(e){return(null==e?void 0:e.username)===w}));return null==e?void 0:e.some((function(e){var n=null==S?void 0:S.extension.find((function(n){return n.id===(null==e?void 0:e.exten)}));return"nethlink"===(null==n?void 0:n.type)&&"offline"!==(null==e?void 0:e.status)}))};switch(n.status){case"ringing":if(function(e){var n=l.store.getState().currentCall,t=n.accepted,r=n.ownerExtension;return t&&!!r&&!!e&&r!==e}(t.owner))break;y(t),u(t),("mobile"===D&&q()||"desktop"===D&&("webrtc"===(null==g?void 0:g.type)||void 0===(null==g?void 0:g.type)&&!q()||!q()&&"physical"===(null==g?void 0:g.type)))&&(j.currentCall.checkIncomingUpdatePlay({conversationId:t.id,displayName:i.getDisplayName(t),number:"".concat(t.counterpartNum),incomingSocket:!0,incoming:!0,username:"".concat(m&&m[t.counterpartNum]&&m[t.counterpartNum].username)||"",ownerExtension:t.owner}),l.store.dispatch.island.setIslandView("call")),P.current||(P.current=!0,o.getCurrentUserInfo().then((function(n){n&&(j.currentUser.updateCurrentUser(n),a.eventDispatch("phone-island-user-informations-update",e.__assign({},n)),n.settings&&n.settings.open_param_url?j.paramUrl.setOpenParamUrlType(n.settings.open_param_url):j.paramUrl.setOpenParamUrlType("never"))})).catch((function(e){console.error("Error getting current user info:",e)})).finally((function(){setTimeout((function(){P.current=!1}),100)})));var N=l.store.getState().paramUrl.openParamUrlType,_=l.store.getState().island.urlOpened;if("ringing"===N&&!_){var T=k.isFromTrunk(t.counterpartNum);l.store.dispatch.paramUrl.setThroughTrunk(T),l.store.dispatch.island.setUrlOpened(!1),a.eventDispatch("phone-island-url-parameter-opened",{counterpartNum:t.counterpartNum,counterpartName:i.getDisplayName(t),owner:t.owner,uniqueId:t.uniqueId,linkedId:t.linkedId,throughQueue:t.throughQueue,throughTrunk:T,direction:t.direction,connected:t.connected})}break;case"busy":if(y(t),u(t),"mobile"===D&&q()||"desktop"===D&&("webrtc"===(null==g?void 0:g.type)||void 0===(null==g?void 0:g.type)&&!q()||!q()&&"physical"===(null==g?void 0:g.type))){if(t&&t.connected)j.currentCall.updateCurrentCall({conversationId:t.id,displayName:i.getDisplayName(t),number:"".concat(t.counterpartNum),ownerExtension:t.owner,username:"".concat(m&&m[t.counterpartNum]&&m[t.counterpartNum].username)||"",chDest:(null==t?void 0:t.chDest)||{},chSource:(null==t?void 0:t.chSource)||{}}),j.currentCall.checkAcceptedUpdate({acceptedSocket:!0}),j.currentCall.addTransferCalls({type:"transferred",displayName:i.getDisplayName(t),number:"".concat(t.counterpartNum),startTime:"".concat(f.getTimestampInSeconds())}),l.store.getState().island.isFromStreaming&&"out"===t.direction&&setTimeout((function(){j.island.setIslandView("streamingAnswer")}),200),p.isPhysical()&&function(e){j.currentCall.updateCurrentCall({conversationId:e.id,accepted:!0,incoming:"in"!==e.direction&&void 0}),a.eventDispatch("phone-island-call-answered",{}),l.store.dispatch.player.stopAudioPlayer(),l.store.dispatch.player.setAudioPlayerLoop(!1)}(t),"call"===v&&c&&j.currentCall.updateCurrentCall({transferring:!1});if(d.length>1)j.currentCall.deleteTransferCalls();else if(t&&!t.connected){if(c&&!s){var I=d.find((function(e){return e.number===t.counterpartNum}));!t.connected&&I&&(j.currentCall.updateCurrentCall({transferring:!1}),a.eventDispatch("phone-island-call-transfer-failed",{}),j.currentCall.updateTransferSwitching(!1))}"REC"===(null==t?void 0:t.counterpartName)&&j.physicalRecorder.setRecordingTempVariable(!0)}t&&!t.connected&&"out"===t.direction&&j.currentCall.checkOutgoingUpdate({outgoingSocket:!0,outgoing:"REC"!==(null==t?void 0:t.counterpartName),displayName:i.getDisplayName(t),number:"".concat(null==t?void 0:t.counterpartNum),username:"".concat(m&&m[null==t?void 0:t.counterpartNum]&&m[null==t?void 0:t.counterpartNum].username)||""})}break;case"onhold":y(t);var U=t.counterpartName,x=t.counterpartNum,E=t.startTime;c&&x&&U&&"<unknown>"!==U&&(j.currentCall.addTransferCalls({type:"destination",displayName:i.getDisplayName(t),number:x,startTime:"".concat(f.getTimestampInSeconds())}),j.currentCall.updateCurrentCall({displayName:i.getDisplayName(t),number:x,startTime:"".concat(E/1e3),conversationId:t.id}),j.island.setIslandView("call"));break;case"busy_ringing":a.eventDispatch("phone-island-call-ringing",{})}}}else"online"==n.status&&h.userTotallyFree()&&(y(null),j.player.stopAudioPlayer(),j.currentCall.reset(),j.physicalRecorder.setRecordingTempVariable(!1),j.island.setIsFromStreaming(!1))};return n={upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3},"new"===r.getApiMode(N)&&(n.path="/api/ws"),E.current=t.io("https://"+q,n),j.websocket.update({socket:E.current}),E.current.on("connect",(function(){console.debug("Socket connected sid: ".concat(E.current.id)),a.eventDispatch("phone-island-socket-connected",{})})),E.current.on("disconnect",(function(e){console.debug("Socket disconnect - reason: ".concat(e)),x.current&&(clearInterval(x.current),x.current=null),e.includes("server disconnect")?a.eventDispatch("phone-island-server-disconnected",{}):a.eventDispatch("phone-island-socket-disconnected",{})})),E.current.io.on("error",(function(e){console.debug("Socket error: ",e)})),E.current.on("connect_error",(function(e){console.debug("Socket connect_error: ",e)})),E.current.io.on("reconnect",(function(e){O.current=0,a.eventDispatch("phone-island-socket-reconnected",{}),console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(E.current.id,")"))})),E.current.io.on("reconnect_attempt",(function(e){console.debug("Socket reconnect_attempt ".concat(e))})),E.current.io.on("reconnect_error",(function(e){console.debug("Socket reconnect_error: ",e)})),E.current.io.on("reconnect_failed",(function(){console.debug("Socket reconnect_failed")})),E.current.on("connect",(function(){console.debug("Socket on: "+q+" is connected!"),E.current.emit("login",{accessKeyId:"".concat(N),token:_,uaType:D})})),E.current.on("authe_ok",(function(){console.debug("Socket authentication success!"),a.eventDispatch("phone-island-socket-authorized",{}),x.current&&clearInterval(x.current),x.current=setInterval((function(){E.current.volatile.emit("ping",s.withTimeout((function(){O.current=0,setTimeout((function(){j.alerts.removeAlert("socket_down"),a.eventDispatch("phone-island-alert-removed",{type:"socket_down"}),a.eventDispatch("phone-island-socket-disconnected-popup-close",{})}),0)}),(function(){O.current++,console.debug("Socket ping timeout (".concat(O.current,"/").concat(3,"), connected: ").concat(E.current.connected)),setTimeout((function(){var e,n,t=E.current.connected&&O.current>=3;if(!E.current.connected||t){var r=l.store.getState().webrtc.sipcall,i=l.store.getState().currentCall,o=i.accepted,c=i.outgoing,u=null===(n=null===(e=null==r?void 0:r.webrtcStuff)||void 0===e?void 0:e.pc)||void 0===n?void 0:n.iceConnectionState;if((o||c)&&("connected"===u||"completed"===u))return void console.debug("Socket unreachable but active call with ICE connected - skipping socket_down alert",{iceState:u,accepted:o,outgoing:c,isStaleConnection:t,timestamp:(new Date).toISOString()});t&&(console.warn("Stale socket connection detected - forcing reconnection"),E.current.disconnect()),j.alerts.setAlert("socket_down"),a.eventDispatch("phone-island-socket-disconnected-popup-open",{}),console.error("Socket is unreachable!")}}),0)}),5e3))}),5e3)})),E.current.on("userMainPresenceUpdate",(function(n){l.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),g.dispatchMainPresence(n)})),E.current.on("extenHangup",(function(e){var n,t,r=l.store.getState().currentUser,i=r.endpoints,o=r.username,u=l.store.getState().conference,s=u.isActive,d=u.conferenceStartedFrom,p=l.store.getState().island,v=p.view,m=p.previewCallFromMobileOrNethlink,g=((null==i?void 0:i.extension)||[]).find((function(n){return n.id===e.callerNum})),f=null==g?void 0:g.type,h=l.store.getState().currentUser.conversations,b=void 0,S=!1;if(e.callerNum&&h[e.callerNum]){var k=h[e.callerNum],y=Object.keys(k);if(y.length>0){for(var w=null,C=0,q=y;C<q.length;C++){var N=q[C],_=null==k?void 0:k[N];if(_)if(w){var T=!!w.connected,I=!!_.connected;if(!I||T){var U=null!==(n=w.startTime)&&void 0!==n?n:0,D=null!==(t=_.startTime)&&void 0!==t?t:0;I===T&&D>U&&(w=_)}else w=_}else w=_}b=null==w?void 0:w.linkedId,S=(null==w?void 0:w.connected)||!1}}if(b&&S&&a.eventDispatch("phone-island-summary-call-check",{linkedid:b}),"normal_clearing"===e.cause&&("physical"===f||"mobile"===f)||"normal_clearing"===e.cause&&("webrtc"===f||"nethlink"===f)&&m||"user_busy"===(null==e?void 0:e.cause)||"not_defined"===(null==e?void 0:e.cause)||"call_rejected"===(null==e?void 0:e.cause)||"interworking"===(null==e?void 0:e.cause)?(setTimeout((function(){l.store.dispatch.island.toggleAvoidToShow(!1),l.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!1)}),500),s&&d!==o&&l.store.dispatch.conference.resetConference()):"normal_circuit_congestion"===(null==e?void 0:e.cause)&&s&&d===o?setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800):"normal_clearing"!==e.cause&&"user_busy"!==(null==e?void 0:e.cause)&&"not_defined"!==(null==e?void 0:e.cause)&&"call_rejected"!==(null==e?void 0:e.cause)||"webrtc"!==f&&"nethlink"!==f||!s||d===o||l.store.dispatch.conference.resetConference(),("normal_clearing"===e.cause&&("webrtc"===f||"nethlink"===f)||"call_rejected"===(null==e?void 0:e.cause))&&s&&d===o){var j=l.store.getState().conference,x=j.usersList,E=j.pendingUsers,P=x&&Object.keys(x).length>0,O=E&&Object.keys(E).length>0;P||O?setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800):l.store.dispatch.conference.resetConference()}if("interworking"===(null==e?void 0:e.cause)&&s&&d===o&&"waitingConference"!==v&&setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800),"user_busy"===(null==e?void 0:e.cause)){var F=l.store.getState().currentUser,V=F.endpoints,A=F.username,R=((null==V?void 0:V.extension)||[]).map((function(e){return e.id})),M=l.store.getState().currentCall,L=M.incoming,Q=M.accepted,W=M.transferring,B=l.store.getState().conference,H=B.isActive,z=B.conferenceStartedFrom;!(L&&e.callerNum&&R.includes(e.callerNum))&&(!Q||H||W)&&(l.store.dispatch.island.setOperatorBusyActive({callerNumber:e.callerNum||"Unknown"}),setTimeout((function(){l.store.dispatch.player.stopAudioPlayer()}),4e3),setTimeout((function(){l.store.dispatch.player.updateStartAudioPlayer({src:c.default,loop:!0}),l.store.dispatch.island.setIslandView("operatorBusy")}),600),H&&z===A&&setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),4e3))}if("subscriber_absent"===(null==e?void 0:e.cause)){var J=l.store.getState().conference,K=J.isActive,G=J.conferenceStartedFrom,X=l.store.getState().currentUser.username;if(K&&G===X){var Y=l.store.getState().conference;x=Y.usersList,E=Y.pendingUsers,P=x&&Object.keys(x).length>0,O=E&&Object.keys(E).length>0,P||O?(setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800),E&&E[e.callerNum]&&l.store.dispatch.conference.removePendingUser(e.callerNum)):l.store.dispatch.conference.resetConference()}}})),E.current.on("extenConnected",(function(e){var n=l.store.getState().currentUser,t=n.default_device,r=n.endpoints,i=((null==r?void 0:r.extension)||[]).find((function(n){return n.id===e.extenConnected})),o=null==i?void 0:i.type;(("webrtc"===(null==t?void 0:t.type)||"nethlink"===(null==t?void 0:t.type))&&o&&("mobile"===o||"physical"===o)||"physical"===(null==t?void 0:t.type)&&o&&"physical"!==o)&&(l.store.dispatch.island.toggleAvoidToShow(!0),l.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!0),a.eventDispatch("phone-island-call-answered",{extensionType:o}))})),E.current.on("extenUpdate",(function(e){var n,t;j.users.updateExtension(e);var r=l.store.getState().users.extensions,i={},o=l.store.getState().currentUser;for(var c in r){var u=r[c].username,a=r[c].exten;i[u]||(i[u]=[]),i[u].push(a)}var s=i[e.username],d=e.conversations[Object.keys(e.conversations)[0]]||{},p=!1;if((null==e?void 0:e.username)===N&&!v.isEmpty(d)&&(null==d?void 0:d.owner)){var m=null===(t=null===(n=null==o?void 0:o.endpoints)||void 0===n?void 0:n.extension)||void 0===t?void 0:t.find((function(e){return e.id===d.owner}));m&&"mobile"===m.type&&(p=!0)}if(g.dispatchExtensions(e),v.isEmpty(d)){var f=null==s?void 0:s.some((function(e){var n,t=null===(n=r[e])||void 0===n?void 0:n.conversations;return!v.isEmpty(t)}));f||g.dispatchConversations(e)}else p||g.dispatchConversations(e);p&&"busy"===(null==e?void 0:e.status)&&(null==e?void 0:e.username)===N&&(l.store.dispatch.island.toggleAvoidToShow(!0),l.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!0)),e.username===N&&(w(e,d),j.currentUser.updateConversations(e))})),E.current.on("queueUpdate",(function(e){j.queue.updateQueue(e);var n,t,r,i=(n=l.store.getState().currentUser.conversations,t=l.store.getState().currentCall.conversationId,r=null,Object.values(n||{}).forEach((function(e){Object.values(e||{}).forEach((function(e){(null==r?void 0:r.id)&&r.id===t||(t&&e.id===t||!r||e.connected&&!r.connected||e.connected===r.connected&&e.startTime>r.startTime)&&(r=e)}))})),r);i&&y(i),g.dispatchQueueUpdate(e)})),E.current.on("queueMemberUpdate",(function(e){j.queue.updateQueueMember(e),g.dispatchQueueMemberUpdate(e)})),E.current.on("takeOver",(function(){g.dispatchAlreadyLogin()})),E.current.on("serverReloaded",(function(){g.dispatchServerReload()})),E.current.on("parkingUpdate",(function(e){g.dispatchParkingUpdate(e)})),E.current.on("actionNethLink",(function(e,n){g.dispatchUrlCall(e,n)})),E.current.on("satellite/summary",(function(e){(null==e?void 0:e.uniqueid)&&a.eventDispatch("phone-island-summary-ready",{linkedid:null==e?void 0:e.uniqueid,display_name:null==e?void 0:e.display_name,display_number:null==e?void 0:e.display_number})})),E.current.on("message",(function(e){switch(e.message){case"videoCallStart":var n=l.store.getState(),t=n.currentCall,r=t.incoming,i=t.outgoing,o=t.accepted,c=n.currentUser.default_device,u=n.island,a=u.isFromStreaming,s=u.view;("webrtc"===(null==c?void 0:c.type)||"nethlink"===(null==c?void 0:c.type))&&(r||i||o)&&!a&&"video"!==s&&(j.island.toggleSideViewVisible(!1),j.island.toggleTranscriptionViewVisible(!1),j.island.setIslandView("video")),g.dispatchVideoCallStarted({initiator:"remote",callUser:e.callUser,destUser:e.destUser});break;case"screenSharingStart":j.island.toggleSideViewVisible(!1),j.island.toggleTranscriptionViewVisible(!1),j.island.setIslandView("video"),j.screenShare.update({isJoiningScreenShare:!0,room:e.roomId});break;case"screenSharingStop":j.island.toggleSideViewVisible(!1),j.island.toggleTranscriptionViewVisible(!1),j.island.setIslandView("video"),j.screenShare.update({isLeavingScreenShare:!0});break;default:console.warn("Socket: unknown message type ",e.message)}})),E.current.on("updateDefaultDevice",(function(n){g.dispatchDefaultDeviceUpdate(n);var t=l.store.getState().users.extensions,r=l.store.getState().currentUser.endpoints;if(t&&r){var i=Object.values(t).filter((function(e){return(null==e?void 0:e.exten)===n}));if(0!==i.length){var o=i[0],c=r.extension.find((function(e){return e.id===o.exten}));c&&(o=e.__assign(e.__assign({},o),{type:c.type})),l.store.dispatch.currentUser.updateCurrentDefaultDevice(o),d.checkMediaPermissions()}}})),E.current.on("confBridgeUpdate",(function(n){if(n&&(null==n?void 0:n.users)){var t=null==n?void 0:n.id,r=null==n?void 0:n.users,i=l.store.getState().conference.usersList,o=e.__assign({},r);i&&Object.keys(o).forEach((function(n){i[n]&&(o[n]=e.__assign(e.__assign({},o[n]),{muted:i[n].muted}))})),l.store.dispatch.conference.updateConferenceUsersList(o),l.store.dispatch.conference.updateConferenceId(t)}})),E.current.on("confBridgeEnd",(function(e){e&&(null==e?void 0:e.id)&&(l.store.dispatch.conference.resetConference(),a.eventDispatch("phone-island-conference-finished",{}))})),E.current.on("callWebrtc",(function(e){a.eventDispatch("phone-island-call-start",{number:e})})),E.current.on("newVoiceMessageCounter",(function(e){a.eventDispatch("phone-island-voicemail-received",{voicemailInfo:e})})),E.current.on("streamingSourceUpdate",(function(e){a.eventDispatch("phone-island-streaming-information-received",{res:e});var n=e.streaming||e.res&&e.res.streaming;if(n){var t=n.source,r=n.image;if(t&&r){l.store.getState().island.isFromStreaming;var i=l.store.getState().currentCall.streamingSourceNumber;m.getStreamingSourceId(i),j.streaming.updateSourceImage({source:t,image:r})}}})),E.current.on("satellite/transcription",(function(e){a.eventDispatch("phone-island-conversation-transcription",e)})),function(){clearInterval(x.current),E.current.close()}}),[q,N,_,D,j]),n.useEffect((function(){var e;if(T){console.info("Socket reload requested");var n=l.store.getState().alerts.data,t=l.store.getState().island.forceReload;(null===(e=n.socket_down)||void 0===e?void 0:e.active)||!1||t?(console.info(t?"Force reload requested, performing Socket reconnection":"Socket down detected (alert active), performing reconnection"),t&&l.store.dispatch.island.setForceReload(!1),x.current&&(clearInterval(x.current),x.current=null),setTimeout((function(){E.current.disconnect(),E.current.connect(),I()}),100)):(console.info("Socket already connected (no alert active), skipping reconnection"),I())}}),[T]),C.default.createElement(C.default.Fragment,null,U)};
|
|
2
2
|
//# sourceMappingURL=Socket.js.map
|