@nethesis/phone-island 1.1.3-dev.1 → 1.1.4

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");require("../../node_modules/react-redux/es/index.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 r=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var t=require("../../node_modules/@fortawesome/react-fontawesome/dist/index.js"),o=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),i=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),n=require("../../node_modules/react-redux/es/hooks/useSelector.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=s(e),a="tooltip-device",u={webrtc:{icon:o.faHeadset,labelKey:"Call.Web phone"},nethlink:{icon:o.faDesktop,labelKey:"Call.Desktop phone"},physical:{icon:i.faOfficePhone,labelKey:"Common.Physical phone"},mobile:{icon:o.faMobileScreen,labelKey:"Phone Island.Mobile app"}},d=e.memo(function(){var e=r.useTranslation().t,o=n.useSelector(function(e){return e.currentCall}),i=o.counterpartDeviceType,s=o.number,d=i?u[i]:void 0;if(!d)return null;var c=e(d.labelKey),p=s?"".concat(c,": ").concat(s):c;return l.default.createElement("span",{className:"pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-h-5 pi-w-5 pi-text-iconPrimaryNeutral dark:pi-text-iconPrimaryNeutralDark","data-tooltip-id":a,"data-tooltip-content":p,"aria-label":p},l.default.createElement(t.FontAwesomeIcon,{icon:d.icon,className:"pi-h-5 pi-w-5"}))});exports.DEVICE_TOOLTIP_ID=a,exports.default=d;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.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 r=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var t=require("../../node_modules/@fortawesome/react-fontawesome/dist/index.js"),o=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),i=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),n=require("../../lib/phone/counterpartDevice.js"),s=require("../../node_modules/react-redux/es/hooks/useSelector.js");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=l(e),u="tooltip-device",c={webrtc:{icon:o.faHeadset,labelKey:"Call.Web phone"},nethlink:{icon:o.faDesktop,labelKey:"Call.Desktop phone"},physical:{icon:i.faOfficePhone,labelKey:"Common.Physical phone"},mobile:{icon:o.faMobileScreen,labelKey:"Phone Island.Mobile app"}},d=e.memo(function(){var e=r.useTranslation().t,o=s.useSelector(function(e){return e.currentCall.counterpartDeviceType}),i=s.useSelector(function(e){return n.getMainExtensionNumber(e.currentCall.number,e.users)}),l=o?c[o]:void 0;if(!l)return null;var d=e(l.labelKey),p=i?"".concat(d,": ").concat(i):d;return a.default.createElement("span",{className:"pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-h-5 pi-w-5 pi-text-iconPrimaryNeutral dark:pi-text-iconPrimaryNeutralDark","data-tooltip-id":u,"data-tooltip-content":p,"aria-label":p},a.default.createElement(t.FontAwesomeIcon,{icon:l.icon,className:"pi-h-5 pi-w-5"}))});exports.DEVICE_TOOLTIP_ID=u,exports.default=d;
2
2
  //# sourceMappingURL=DeviceIcon.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DeviceIcon.js","sources":["../../../src/components/CallView/DeviceIcon.tsx"],"sourcesContent":["// Copyright (C) 2026 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, memo } from 'react'\nimport { useSelector } from 'react-redux'\nimport { useTranslation } from 'react-i18next'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport type { IconProp } from '@fortawesome/fontawesome-svg-core'\nimport { faDesktop, faHeadset, faMobileScreen } from '@fortawesome/free-solid-svg-icons'\nimport { faOfficePhone } from '@nethesis/nethesis-solid-svg-icons'\nimport { RootState } from '../../store'\n\nexport const DEVICE_TOOLTIP_ID = 'tooltip-device'\n\nconst DEVICE_ICONS: Record<string, { icon: IconProp; labelKey: string }> = {\n webrtc: { icon: faHeadset, labelKey: 'Call.Web phone' },\n nethlink: { icon: faDesktop, labelKey: 'Call.Desktop phone' },\n physical: { icon: faOfficePhone as IconProp, labelKey: 'Common.Physical phone' },\n mobile: { icon: faMobileScreen, labelKey: 'Phone Island.Mobile app' },\n}\n\nconst DeviceIcon: FC = () => {\n const { t } = useTranslation()\n const { counterpartDeviceType, number } = useSelector((state: RootState) => state.currentCall)\n\n const device = counterpartDeviceType ? DEVICE_ICONS[counterpartDeviceType] : undefined\n if (!device) return null\n\n const label = t(device.labelKey)\n const tooltipContent = number ? `${label}: ${number}` : label\n\n return (\n <span\n className='pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-h-5 pi-w-5 pi-text-iconPrimaryNeutral dark:pi-text-iconPrimaryNeutralDark'\n data-tooltip-id={DEVICE_TOOLTIP_ID}\n data-tooltip-content={tooltipContent}\n aria-label={tooltipContent}\n >\n <FontAwesomeIcon icon={device.icon} className='pi-h-5 pi-w-5' />\n </span>\n )\n}\n\nexport default memo(DeviceIcon)\n"],"names":["DEVICE_TOOLTIP_ID","DEVICE_ICONS","webrtc","icon","faHeadset","labelKey","nethlink","faDesktop","physical","faOfficePhone","mobile","faMobileScreen","memo","t","useTranslation","_a","useSelector","state","currentCall","counterpartDeviceType","number","device","undefined","label","tooltipContent","concat","React","createElement","className","FontAwesomeIcon"],"mappings":"+gCAYaA,EAAoB,iBAE3BC,EAAqE,CACzEC,OAAQ,CAAEC,KAAMC,YAAWC,SAAU,kBACrCC,SAAU,CAAEH,KAAMI,YAAWF,SAAU,sBACvCG,SAAU,CAAEL,KAAMM,gBAA2BJ,SAAU,yBACvDK,OAAQ,CAAEP,KAAMQ,iBAAgBN,SAAU,4BAyB7BO,EAAAA,EAAAA,KAtBQ,WACb,IAAAC,EAAMC,qBACRC,EAAoCC,EAAAA,YAAY,SAACC,GAAqB,OAAAA,EAAMC,WAAW,GAArFC,0BAAuBC,WAEzBC,EAASF,EAAwBlB,EAAakB,QAAyBG,EAC7E,IAAKD,EAAQ,OAAO,KAEpB,IAAME,EAAQV,EAAEQ,EAAOhB,UACjBmB,EAAiBJ,EAAS,GAAAK,OAAGF,EAAK,MAAAE,OAAKL,GAAWG,EAExD,OACEG,UACEC,cAAA,OAAA,CAAAC,UAAU,+JACO5B,EAAiB,uBACZwB,EAAc,aACxBA,GAEZE,UAAAC,cAACE,EAAeA,gBAAA,CAAC1B,KAAMkB,EAAOlB,KAAMyB,UAAU,kBAGpD"}
1
+ {"version":3,"file":"DeviceIcon.js","sources":["../../../src/components/CallView/DeviceIcon.tsx"],"sourcesContent":["// Copyright (C) 2026 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, memo } from 'react'\nimport { useSelector } from 'react-redux'\nimport { useTranslation } from 'react-i18next'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport type { IconProp } from '@fortawesome/fontawesome-svg-core'\nimport { faDesktop, faHeadset, faMobileScreen } from '@fortawesome/free-solid-svg-icons'\nimport { faOfficePhone } from '@nethesis/nethesis-solid-svg-icons'\nimport { RootState } from '../../store'\nimport { getMainExtensionNumber } from '../../lib/phone/counterpartDevice'\n\nexport const DEVICE_TOOLTIP_ID = 'tooltip-device'\n\nconst DEVICE_ICONS: Record<string, { icon: IconProp; labelKey: string }> = {\n webrtc: { icon: faHeadset, labelKey: 'Call.Web phone' },\n nethlink: { icon: faDesktop, labelKey: 'Call.Desktop phone' },\n physical: { icon: faOfficePhone as IconProp, labelKey: 'Common.Physical phone' },\n mobile: { icon: faMobileScreen, labelKey: 'Phone Island.Mobile app' },\n}\n\nconst DeviceIcon: FC = () => {\n const { t } = useTranslation()\n const counterpartDeviceType = useSelector(\n (state: RootState) => state.currentCall.counterpartDeviceType,\n )\n const number = useSelector((state: RootState) =>\n getMainExtensionNumber(state.currentCall.number, state.users),\n )\n\n const device = counterpartDeviceType ? DEVICE_ICONS[counterpartDeviceType] : undefined\n if (!device) return null\n\n const label = t(device.labelKey)\n const tooltipContent = number ? `${label}: ${number}` : label\n\n return (\n <span\n className='pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-h-5 pi-w-5 pi-text-iconPrimaryNeutral dark:pi-text-iconPrimaryNeutralDark'\n data-tooltip-id={DEVICE_TOOLTIP_ID}\n data-tooltip-content={tooltipContent}\n aria-label={tooltipContent}\n >\n <FontAwesomeIcon icon={device.icon} className='pi-h-5 pi-w-5' />\n </span>\n )\n}\n\nexport default memo(DeviceIcon)\n"],"names":["DEVICE_TOOLTIP_ID","DEVICE_ICONS","webrtc","icon","faHeadset","labelKey","nethlink","faDesktop","physical","faOfficePhone","mobile","faMobileScreen","memo","t","useTranslation","counterpartDeviceType","useSelector","state","currentCall","number","getMainExtensionNumber","users","device","undefined","label","tooltipContent","concat","React","createElement","className","FontAwesomeIcon"],"mappings":"ikCAaaA,EAAoB,iBAE3BC,EAAqE,CACzEC,OAAQ,CAAEC,KAAMC,YAAWC,SAAU,kBACrCC,SAAU,CAAEH,KAAMI,YAAWF,SAAU,sBACvCG,SAAU,CAAEL,KAAMM,gBAA2BJ,SAAU,yBACvDK,OAAQ,CAAEP,KAAMQ,iBAAgBN,SAAU,4BA8B7BO,EAAAA,EAAAA,KA3BQ,WACb,IAAAC,EAAMC,qBACRC,EAAwBC,cAC5B,SAACC,GAAqB,OAAAA,EAAMC,YAAYH,qBAAlB,GAElBI,EAASH,cAAY,SAACC,GAC1B,OAAAG,EAAAA,uBAAuBH,EAAMC,YAAYC,OAAQF,EAAMI,MAAvD,GAGIC,EAASP,EAAwBd,EAAac,QAAyBQ,EAC7E,IAAKD,EAAQ,OAAO,KAEpB,IAAME,EAAQX,EAAES,EAAOjB,UACjBoB,EAAiBN,EAAS,GAAAO,OAAGF,EAAK,MAAAE,OAAKP,GAAWK,EAExD,OACEG,UACEC,cAAA,OAAA,CAAAC,UAAU,+JACO7B,EAAiB,uBACZyB,EAAc,aACxBA,GAEZE,UAAAC,cAACE,EAAeA,gBAAA,CAAC3B,KAAMmB,EAAOnB,KAAM0B,UAAU,kBAGpD"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("react");require("../../node_modules/react-redux/es/index.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 r=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var i=require("../../node_modules/@fortawesome/react-fontawesome/dist/index.js"),n=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),o=require("../CustomThemedTooltip.js"),a=require("../../node_modules/react-redux/es/hooks/useSelector.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=s(t),u="tooltip-number-popover",c=function(e){var t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="fixed",t.style.top="-1000px",t.style.opacity="0",document.body.appendChild(t),t.select();var r=!1;try{r=document.execCommand("copy")}catch(e){r=!1}return document.body.removeChild(t),r},p=t.memo(function(){var s=r.useTranslation().t,p=a.useSelector(function(e){return e.currentCall}).number,d=t.useState(!1),m=d[0],f=d[1],b=t.useRef(null),v=t.useRef(!0);t.useEffect(function(){return v.current=!0,function(){v.current=!1,b.current&&clearTimeout(b.current)}},[]),t.useEffect(function(){f(!1)},[p]);var h=t.useCallback(function(){return e.__awaiter(void 0,void 0,void 0,function(){return e.__generator(this,function(t){switch(t.label){case 0:return p?[4,(r=p,e.__awaiter(void 0,void 0,void 0,function(){var t;return e.__generator(this,function(e){switch(e.label){case 0:if(!(null===(t=null===navigator||void 0===navigator?void 0:navigator.clipboard)||void 0===t?void 0:t.writeText)||!window.isSecureContext)return[3,4];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,navigator.clipboard.writeText(r)];case 2:return e.sent(),[2,!0];case 3:return e.sent(),[2,c(r)];case 4:return[2,c(r)]}})}))]:[2];case 1:return t.sent()&&v.current?(f(!0),b.current&&clearTimeout(b.current),b.current=setTimeout(function(){v.current&&f(!1)},2e3),[2]):[2]}var r})})},[p]);return p?l.default.createElement("span",{className:"pi-inline-flex pi-flex-none pi-items-center","data-stop-propagation":!0},l.default.createElement("button",{type:"button",className:"pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-h-6 pi-w-6 pi--m-1 pi-p-1 pi-rounded-md pi-bg-transparent pi-text-gray-700 dark:pi-text-gray-200 hover:pi-bg-gray-200/70 dark:hover:pi-bg-gray-700/70 focus:pi-outline-none focus-visible:pi-ring-2 focus-visible:pi-ring-emerald-500","data-tooltip-id":u,"data-stop-propagation":!0,"aria-label":s("Call.Show number")||""},l.default.createElement(i.FontAwesomeIcon,{icon:n.faEllipsis,className:"pi-h-4 pi-w-4","data-stop-propagation":!0})),l.default.createElement(o.CustomThemedTooltip,{id:u,place:"bottom",offset:12,maxWidth:"300px",openOnClick:!0,clickable:!0,globalCloseEvents:{clickOutsideAnchor:!0,escape:!0}},l.default.createElement("div",{className:"pi-flex pi-items-center pi-gap-2","data-stop-propagation":!0},l.default.createElement("span",{className:"pi-whitespace-nowrap","data-stop-propagation":!0},p),l.default.createElement("button",{type:"button",onClick:h,className:"pi-inline-flex pi-items-center pi-justify-center pi-h-4 pi-w-4 pi-p-0 pi-bg-transparent focus:pi-outline-none ".concat(m?"pi-text-inherit":"pi-text-emerald-500 dark:pi-text-emerald-700"),"data-stop-propagation":!0,"aria-label":s(m?"Call.Copied":"Call.Copy number")||""},l.default.createElement(i.FontAwesomeIcon,{icon:m?n.faCheck:n.faCopy,className:"pi-h-4 pi-w-4","data-stop-propagation":!0}))))):null});exports.default=p;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("react");require("../../node_modules/react-redux/es/index.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 r=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var i=require("../../node_modules/@fortawesome/react-fontawesome/dist/index.js"),n=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),o=require("../CustomThemedTooltip.js"),a=require("../../lib/phone/counterpartDevice.js"),s=require("../../node_modules/react-redux/es/hooks/useSelector.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=u(t),c="tooltip-number-popover",p=function(e){var t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="fixed",t.style.top="-1000px",t.style.opacity="0",document.body.appendChild(t),t.select();var r=!1;try{r=document.execCommand("copy")}catch(e){r=!1}return document.body.removeChild(t),r},d=t.memo(function(){var u=r.useTranslation().t,d=s.useSelector(function(e){return a.getMainExtensionNumber(e.currentCall.number,e.users)}),m=t.useState(!1),f=m[0],b=m[1],v=t.useRef(null),h=t.useRef(!0);t.useEffect(function(){return h.current=!0,function(){h.current=!1,v.current&&clearTimeout(v.current)}},[]),t.useEffect(function(){b(!1)},[d]);var x=t.useCallback(function(){return e.__awaiter(void 0,void 0,void 0,function(){return e.__generator(this,function(t){switch(t.label){case 0:return d?[4,(r=d,e.__awaiter(void 0,void 0,void 0,function(){var t;return e.__generator(this,function(e){switch(e.label){case 0:if(!(null===(t=null===navigator||void 0===navigator?void 0:navigator.clipboard)||void 0===t?void 0:t.writeText)||!window.isSecureContext)return[3,4];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,navigator.clipboard.writeText(r)];case 2:return e.sent(),[2,!0];case 3:return e.sent(),[2,p(r)];case 4:return[2,p(r)]}})}))]:[2];case 1:return t.sent()&&h.current?(b(!0),v.current&&clearTimeout(v.current),v.current=setTimeout(function(){h.current&&b(!1)},2e3),[2]):[2]}var r})})},[d]);return d?l.default.createElement("span",{className:"pi-inline-flex pi-flex-none pi-items-center","data-stop-propagation":!0},l.default.createElement("button",{type:"button",className:"pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-h-6 pi-w-6 pi--m-1 pi-p-1 pi-rounded-md pi-bg-transparent pi-text-gray-700 dark:pi-text-gray-200 hover:pi-bg-gray-200/70 dark:hover:pi-bg-gray-700/70 focus:pi-outline-none focus-visible:pi-ring-2 focus-visible:pi-ring-emerald-500","data-tooltip-id":c,"data-stop-propagation":!0,"aria-label":u("Call.Show number")||""},l.default.createElement(i.FontAwesomeIcon,{icon:n.faEllipsis,className:"pi-h-4 pi-w-4","data-stop-propagation":!0})),l.default.createElement(o.CustomThemedTooltip,{id:c,place:"bottom",offset:12,maxWidth:"300px",openOnClick:!0,clickable:!0,globalCloseEvents:{clickOutsideAnchor:!0,escape:!0}},l.default.createElement("div",{className:"pi-flex pi-items-center pi-gap-2","data-stop-propagation":!0},l.default.createElement("span",{className:"pi-whitespace-nowrap","data-stop-propagation":!0},d),l.default.createElement("button",{type:"button",onClick:x,className:"pi-inline-flex pi-items-center pi-justify-center pi-h-4 pi-w-4 pi-p-0 pi-bg-transparent focus:pi-outline-none ".concat(f?"pi-text-inherit":"pi-text-emerald-500 dark:pi-text-emerald-700"),"data-stop-propagation":!0,"aria-label":u(f?"Call.Copied":"Call.Copy number")||""},l.default.createElement(i.FontAwesomeIcon,{icon:f?n.faCheck:n.faCopy,className:"pi-h-4 pi-w-4","data-stop-propagation":!0}))))):null});exports.default=d;
2
2
  //# sourceMappingURL=NumberPopover.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NumberPopover.js","sources":["../../../src/components/CallView/NumberPopover.tsx"],"sourcesContent":["// Copyright (C) 2026 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, memo, useCallback, useEffect, useRef, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport { useTranslation } from 'react-i18next'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faCheck, faCopy, faEllipsis } from '@fortawesome/free-solid-svg-icons'\nimport { RootState } from '../../store'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\n\nconst NUMBER_POPOVER_ID = 'tooltip-number-popover'\nconst COPIED_FEEDBACK_MS = 2000\n\nconst copyWithTextarea = (text: string): boolean => {\n const textarea = document.createElement('textarea')\n textarea.value = text\n textarea.setAttribute('readonly', '')\n textarea.style.position = 'fixed'\n textarea.style.top = '-1000px'\n textarea.style.opacity = '0'\n document.body.appendChild(textarea)\n textarea.select()\n let copied = false\n try {\n copied = document.execCommand('copy')\n } catch (error) {\n copied = false\n }\n document.body.removeChild(textarea)\n return copied\n}\n\nconst copyToClipboard = async (text: string): Promise<boolean> => {\n if (navigator?.clipboard?.writeText && window.isSecureContext) {\n try {\n await navigator.clipboard.writeText(text)\n return true\n } catch (error) {\n return copyWithTextarea(text)\n }\n }\n return copyWithTextarea(text)\n}\n\nconst NumberPopover: FC = () => {\n const { t } = useTranslation()\n const { number } = useSelector((state: RootState) => state.currentCall)\n const [copied, setCopied] = useState(false)\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const isMountedRef = useRef(true)\n\n useEffect(() => {\n isMountedRef.current = true\n return () => {\n isMountedRef.current = false\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n }\n }, [])\n\n useEffect(() => {\n setCopied(false)\n }, [number])\n\n const handleCopy = useCallback(async () => {\n if (!number) return\n const success = await copyToClipboard(number)\n if (!success || !isMountedRef.current) return\n setCopied(true)\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n timeoutRef.current = setTimeout(() => {\n if (isMountedRef.current) setCopied(false)\n }, COPIED_FEEDBACK_MS)\n }, [number])\n\n if (!number) return null\n\n return (\n <span className='pi-inline-flex pi-flex-none pi-items-center' data-stop-propagation={true}>\n <button\n type='button'\n className='pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-h-6 pi-w-6 pi--m-1 pi-p-1 pi-rounded-md pi-bg-transparent pi-text-gray-700 dark:pi-text-gray-200 hover:pi-bg-gray-200/70 dark:hover:pi-bg-gray-700/70 focus:pi-outline-none focus-visible:pi-ring-2 focus-visible:pi-ring-emerald-500'\n data-tooltip-id={NUMBER_POPOVER_ID}\n data-stop-propagation={true}\n aria-label={t('Call.Show number') || ''}\n >\n <FontAwesomeIcon icon={faEllipsis} className='pi-h-4 pi-w-4' data-stop-propagation={true} />\n </button>\n <CustomThemedTooltip\n id={NUMBER_POPOVER_ID}\n place='bottom'\n offset={12}\n maxWidth='300px'\n openOnClick\n clickable\n globalCloseEvents={{ clickOutsideAnchor: true, escape: true }}\n >\n <div className='pi-flex pi-items-center pi-gap-2' data-stop-propagation={true}>\n <span className='pi-whitespace-nowrap' data-stop-propagation={true}>\n {number}\n </span>\n <button\n type='button'\n onClick={handleCopy}\n className={`pi-inline-flex pi-items-center pi-justify-center pi-h-4 pi-w-4 pi-p-0 pi-bg-transparent focus:pi-outline-none ${\n copied ? 'pi-text-inherit' : 'pi-text-emerald-500 dark:pi-text-emerald-700'\n }`}\n data-stop-propagation={true}\n aria-label={(copied ? t('Call.Copied') : t('Call.Copy number')) || ''}\n >\n <FontAwesomeIcon\n icon={copied ? faCheck : faCopy}\n className='pi-h-4 pi-w-4'\n data-stop-propagation={true}\n />\n </button>\n </div>\n </CustomThemedTooltip>\n </span>\n )\n}\n\nexport default memo(NumberPopover)\n"],"names":["NUMBER_POPOVER_ID","copyWithTextarea","text","textarea","document","createElement","value","setAttribute","style","position","top","opacity","body","appendChild","select","copied","execCommand","error","removeChild","memo","t","useTranslation","number","useSelector","state","currentCall","_a","useState","setCopied","timeoutRef","useRef","isMountedRef","useEffect","current","clearTimeout","handleCopy","useCallback","__awaiter","navigator","clipboard","writeText","window","isSecureContext","_b","sent","setTimeout","React","className","type","FontAwesomeIcon","icon","faEllipsis","CustomThemedTooltip","id","place","offset","maxWidth","openOnClick","clickable","globalCloseEvents","clickOutsideAnchor","escape","onClick","concat","faCheck","faCopy"],"mappings":"yhCAWMA,EAAoB,yBAGpBC,EAAmB,SAACC,GACxB,IAAMC,EAAWC,SAASC,cAAc,YACxCF,EAASG,MAAQJ,EACjBC,EAASI,aAAa,WAAY,IAClCJ,EAASK,MAAMC,SAAW,QAC1BN,EAASK,MAAME,IAAM,UACrBP,EAASK,MAAMG,QAAU,IACzBP,SAASQ,KAAKC,YAAYV,GAC1BA,EAASW,SACT,IAAIC,GAAS,EACb,IACEA,EAASX,SAASY,YAAY,OAC/B,CAAC,MAAOC,GACPF,GAAS,CACV,CAED,OADAX,SAASQ,KAAKM,YAAYf,GACnBY,CACT,EA2FeI,EAAAA,EAAAA,KA7EW,WAChB,IAAAC,EAAMC,qBACNC,EAAWC,cAAY,SAACC,GAAqB,OAAAA,EAAMC,qBACrDC,EAAsBC,EAAAA,UAAS,GAA9BZ,EAAMW,EAAA,GAAEE,EAASF,EAAA,GAClBG,EAAaC,SAA6C,MAC1DC,EAAeD,UAAO,GAE5BE,EAAAA,UAAU,WAER,OADAD,EAAaE,SAAU,EAChB,WACLF,EAAaE,SAAU,EACnBJ,EAAWI,SAASC,aAAaL,EAAWI,QAClD,CACD,EAAE,IAEHD,EAAAA,UAAU,WACRJ,GAAU,EACZ,EAAG,CAACN,IAEJ,IAAMa,EAAaC,cAAY,WAAA,OAAAC,EAAAA,eAAA,OAAA,OAAA,EAAA,wEAC7B,OAAKf,EACW,CAAA,GAjCWpB,EAiCWoB,EAjCCe,EAAAA,eAAA,OAAA,OAAA,EAAA,8EACrC,KAAoB,QAApBX,EAAA,OAAAY,oBAAAA,iBAAAA,UAAWC,iBAAS,IAAAb,OAAA,EAAAA,EAAEc,aAAaC,OAAOC,gBAA1C,MAAyD,CAAA,EAAA,oBAEzD,6BAAM,CAAA,EAAAJ,UAAUC,UAAUC,UAAUtC,WACpC,OADAyC,EAAAC,OACA,CAAA,GAAO,UAEP,gBAAA,CAAA,EAAO3C,EAAiBC,IAG5B,KAAA,EAAA,MAAA,CAAA,EAAOD,EAAiBC,WAuBH,CAAA,UAEnB,OADgBwB,EAA6BkB,QAC5Bb,EAAaE,SAC9BL,GAAU,GACNC,EAAWI,SAASC,aAAaL,EAAWI,SAChDJ,EAAWI,QAAUY,WAAW,WAC1Bd,EAAaE,SAASL,GAAU,EACrC,EA5DsB,UAuDsB,CAAA,GAlCzB,IAAO1B,GAwC5B,EAAA,EAAE,CAACoB,IAEJ,OAAKA,EAGHwB,EAAAA,QAAMzC,cAAA,OAAA,CAAA0C,UAAU,uEAAqE,GACnFD,EAAA,QAAAzC,cAAA,SAAA,CACE2C,KAAK,SACLD,UAAU,ySAAwS,kBACjS/C,EAAiB,yBACX,EACX,aAAAoB,EAAE,qBAAuB,IAErC0B,EAAAA,QAAAzC,cAAC4C,kBAAe,CAACC,KAAMC,EAAAA,WAAYJ,UAAU,gBAAe,yBAAwB,KAEtFD,UAAAzC,cAAC+C,EAAmBA,oBAAA,CAClBC,GAAIrD,EACJsD,MAAM,SACNC,OAAQ,GACRC,SAAS,QACTC,aAAW,EACXC,WAAS,EACTC,kBAAmB,CAAEC,oBAAoB,EAAMC,QAAQ,IAEvDf,EAAA,QAAAzC,cAAA,MAAA,CAAK0C,UAAU,mCAAkC,yBAAwB,GACvED,UAAAzC,cAAA,OAAA,CAAM0C,UAAU,gDAA8C,GAC3DzB,GAEHwB,EAAAA,QAAAzC,cAAA,SAAA,CACE2C,KAAK,SACLc,QAAS3B,EACTY,UAAW,iHACTgB,OAAAhD,EAAS,kBAAoB,gDAER,yBAAA,eACDK,EAATL,EAAW,cAAmB,qBAAwB,IAEnE+B,EAAC,QAAAzC,cAAA4C,EAAeA,gBACd,CAAAC,KAAMnC,EAASiD,EAAAA,QAAUC,EAAAA,OACzBlB,UAAU,gBACa,yBAAA,QAtCf,IA6CtB"}
1
+ {"version":3,"file":"NumberPopover.js","sources":["../../../src/components/CallView/NumberPopover.tsx"],"sourcesContent":["// Copyright (C) 2026 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, memo, useCallback, useEffect, useRef, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport { useTranslation } from 'react-i18next'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faCheck, faCopy, faEllipsis } from '@fortawesome/free-solid-svg-icons'\nimport { RootState } from '../../store'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\nimport { getMainExtensionNumber } from '../../lib/phone/counterpartDevice'\n\nconst NUMBER_POPOVER_ID = 'tooltip-number-popover'\nconst COPIED_FEEDBACK_MS = 2000\n\nconst copyWithTextarea = (text: string): boolean => {\n const textarea = document.createElement('textarea')\n textarea.value = text\n textarea.setAttribute('readonly', '')\n textarea.style.position = 'fixed'\n textarea.style.top = '-1000px'\n textarea.style.opacity = '0'\n document.body.appendChild(textarea)\n textarea.select()\n let copied = false\n try {\n copied = document.execCommand('copy')\n } catch (error) {\n copied = false\n }\n document.body.removeChild(textarea)\n return copied\n}\n\nconst copyToClipboard = async (text: string): Promise<boolean> => {\n if (navigator?.clipboard?.writeText && window.isSecureContext) {\n try {\n await navigator.clipboard.writeText(text)\n return true\n } catch (error) {\n return copyWithTextarea(text)\n }\n }\n return copyWithTextarea(text)\n}\n\nconst NumberPopover: FC = () => {\n const { t } = useTranslation()\n const number = useSelector((state: RootState) =>\n getMainExtensionNumber(state.currentCall.number, state.users),\n )\n const [copied, setCopied] = useState(false)\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const isMountedRef = useRef(true)\n\n useEffect(() => {\n isMountedRef.current = true\n return () => {\n isMountedRef.current = false\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n }\n }, [])\n\n useEffect(() => {\n setCopied(false)\n }, [number])\n\n const handleCopy = useCallback(async () => {\n if (!number) return\n const success = await copyToClipboard(number)\n if (!success || !isMountedRef.current) return\n setCopied(true)\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n timeoutRef.current = setTimeout(() => {\n if (isMountedRef.current) setCopied(false)\n }, COPIED_FEEDBACK_MS)\n }, [number])\n\n if (!number) return null\n\n return (\n <span className='pi-inline-flex pi-flex-none pi-items-center' data-stop-propagation={true}>\n <button\n type='button'\n className='pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-h-6 pi-w-6 pi--m-1 pi-p-1 pi-rounded-md pi-bg-transparent pi-text-gray-700 dark:pi-text-gray-200 hover:pi-bg-gray-200/70 dark:hover:pi-bg-gray-700/70 focus:pi-outline-none focus-visible:pi-ring-2 focus-visible:pi-ring-emerald-500'\n data-tooltip-id={NUMBER_POPOVER_ID}\n data-stop-propagation={true}\n aria-label={t('Call.Show number') || ''}\n >\n <FontAwesomeIcon icon={faEllipsis} className='pi-h-4 pi-w-4' data-stop-propagation={true} />\n </button>\n <CustomThemedTooltip\n id={NUMBER_POPOVER_ID}\n place='bottom'\n offset={12}\n maxWidth='300px'\n openOnClick\n clickable\n globalCloseEvents={{ clickOutsideAnchor: true, escape: true }}\n >\n <div className='pi-flex pi-items-center pi-gap-2' data-stop-propagation={true}>\n <span className='pi-whitespace-nowrap' data-stop-propagation={true}>\n {number}\n </span>\n <button\n type='button'\n onClick={handleCopy}\n className={`pi-inline-flex pi-items-center pi-justify-center pi-h-4 pi-w-4 pi-p-0 pi-bg-transparent focus:pi-outline-none ${\n copied ? 'pi-text-inherit' : 'pi-text-emerald-500 dark:pi-text-emerald-700'\n }`}\n data-stop-propagation={true}\n aria-label={(copied ? t('Call.Copied') : t('Call.Copy number')) || ''}\n >\n <FontAwesomeIcon\n icon={copied ? faCheck : faCopy}\n className='pi-h-4 pi-w-4'\n data-stop-propagation={true}\n />\n </button>\n </div>\n </CustomThemedTooltip>\n </span>\n )\n}\n\nexport default memo(NumberPopover)\n"],"names":["NUMBER_POPOVER_ID","copyWithTextarea","text","textarea","document","createElement","value","setAttribute","style","position","top","opacity","body","appendChild","select","copied","execCommand","error","removeChild","memo","t","useTranslation","number","useSelector","state","getMainExtensionNumber","currentCall","users","_a","useState","setCopied","timeoutRef","useRef","isMountedRef","useEffect","current","clearTimeout","handleCopy","useCallback","__awaiter","navigator","clipboard","writeText","window","isSecureContext","_b","sent","setTimeout","React","className","type","FontAwesomeIcon","icon","faEllipsis","CustomThemedTooltip","id","place","offset","maxWidth","openOnClick","clickable","globalCloseEvents","clickOutsideAnchor","escape","onClick","concat","faCheck","faCopy"],"mappings":"2kCAYMA,EAAoB,yBAGpBC,EAAmB,SAACC,GACxB,IAAMC,EAAWC,SAASC,cAAc,YACxCF,EAASG,MAAQJ,EACjBC,EAASI,aAAa,WAAY,IAClCJ,EAASK,MAAMC,SAAW,QAC1BN,EAASK,MAAME,IAAM,UACrBP,EAASK,MAAMG,QAAU,IACzBP,SAASQ,KAAKC,YAAYV,GAC1BA,EAASW,SACT,IAAIC,GAAS,EACb,IACEA,EAASX,SAASY,YAAY,OAC/B,CAAC,MAAOC,GACPF,GAAS,CACV,CAED,OADAX,SAASQ,KAAKM,YAAYf,GACnBY,CACT,EA6FeI,EAAAA,EAAAA,KA/EW,WAChB,IAAAC,EAAMC,qBACRC,EAASC,cAAY,SAACC,GAC1B,OAAAC,EAAAA,uBAAuBD,EAAME,YAAYJ,OAAQE,EAAMG,MAAvD,GAEIC,EAAsBC,EAAAA,UAAS,GAA9Bd,EAAMa,EAAA,GAAEE,EAASF,EAAA,GAClBG,EAAaC,SAA6C,MAC1DC,EAAeD,UAAO,GAE5BE,EAAAA,UAAU,WAER,OADAD,EAAaE,SAAU,EAChB,WACLF,EAAaE,SAAU,EACnBJ,EAAWI,SAASC,aAAaL,EAAWI,QAClD,CACD,EAAE,IAEHD,EAAAA,UAAU,WACRJ,GAAU,EACZ,EAAG,CAACR,IAEJ,IAAMe,EAAaC,cAAY,WAAA,OAAAC,EAAAA,eAAA,OAAA,OAAA,EAAA,wEAC7B,OAAKjB,EACW,CAAA,GAnCWpB,EAmCWoB,EAnCCiB,EAAAA,eAAA,OAAA,OAAA,EAAA,8EACrC,KAAoB,QAApBX,EAAA,OAAAY,oBAAAA,iBAAAA,UAAWC,iBAAS,IAAAb,OAAA,EAAAA,EAAEc,aAAaC,OAAOC,gBAA1C,MAAyD,CAAA,EAAA,oBAEzD,6BAAM,CAAA,EAAAJ,UAAUC,UAAUC,UAAUxC,WACpC,OADA2C,EAAAC,OACA,CAAA,GAAO,UAEP,gBAAA,CAAA,EAAO7C,EAAiBC,IAG5B,KAAA,EAAA,MAAA,CAAA,EAAOD,EAAiBC,WAyBH,CAAA,UAEnB,OADgB0B,EAA6BkB,QAC5Bb,EAAaE,SAC9BL,GAAU,GACNC,EAAWI,SAASC,aAAaL,EAAWI,SAChDJ,EAAWI,QAAUY,WAAW,WAC1Bd,EAAaE,SAASL,GAAU,EACrC,EA9DsB,UAyDsB,CAAA,GApCzB,IAAO5B,GA0C5B,EAAA,EAAE,CAACoB,IAEJ,OAAKA,EAGH0B,EAAAA,QAAM3C,cAAA,OAAA,CAAA4C,UAAU,uEAAqE,GACnFD,EAAA,QAAA3C,cAAA,SAAA,CACE6C,KAAK,SACLD,UAAU,ySAAwS,kBACjSjD,EAAiB,yBACX,EACX,aAAAoB,EAAE,qBAAuB,IAErC4B,EAAAA,QAAA3C,cAAC8C,kBAAe,CAACC,KAAMC,EAAAA,WAAYJ,UAAU,gBAAe,yBAAwB,KAEtFD,UAAA3C,cAACiD,EAAmBA,oBAAA,CAClBC,GAAIvD,EACJwD,MAAM,SACNC,OAAQ,GACRC,SAAS,QACTC,aAAW,EACXC,WAAS,EACTC,kBAAmB,CAAEC,oBAAoB,EAAMC,QAAQ,IAEvDf,EAAA,QAAA3C,cAAA,MAAA,CAAK4C,UAAU,mCAAkC,yBAAwB,GACvED,UAAA3C,cAAA,OAAA,CAAM4C,UAAU,gDAA8C,GAC3D3B,GAEH0B,EAAAA,QAAA3C,cAAA,SAAA,CACE6C,KAAK,SACLc,QAAS3B,EACTY,UAAW,iHACTgB,OAAAlD,EAAS,kBAAoB,gDAER,yBAAA,eACDK,EAATL,EAAW,cAAmB,qBAAwB,IAEnEiC,EAAC,QAAA3C,cAAA8C,EAAeA,gBACd,CAAAC,KAAMrC,EAASmD,EAAAA,QAAUC,EAAAA,OACzBlB,UAAU,gBACa,yBAAA,QAtCf,IA6CtB"}
@@ -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 i=require("../../../store/index.js"),r=require("../../../utils/deviceUtils.js"),t=require("../../../lib/webrtc/janus.js"),u=require("../../../lib/phone/trunk.js"),o=require("../../../lib/devices/devices.js"),l=require("../../../utils/genericFunctions/eventDispatch.js"),s=require("../../../node_modules/react-redux/es/hooks/useDispatch.js"),a=require("../../../node_modules/react-redux/es/hooks/useSelector.js");exports.useSideViewLogic=function(d){var c,v,h,p,f,g,b,m,_=s.useDispatch(),S=a.useSelector(function(e){return e.currentUser}),k=a.useSelector(function(e){return e.users}),w=a.useSelector(function(e){return e.paramUrl}),j=i.store.select.mediaDevices.videoInputDevices(i.store.getState()),q=n.useRef(t.default),V=a.useSelector(function(e){return e.currentUser.conversations}),C=n.useState([]),D=C[0],y=C[1],T=n.useState(!0),U=T[0],I=T[1],x=n.useCallback(function(){var e=Object.values(V).find(function(e){return Object.keys(e).length>0});return e?Object.values(e)[0]:null},[V]),O=n.useCallback(function(e){if(_.island.toggleSideViewVisible(!1),"openUrl"===e){var n=Object.values(V).find(function(e){return Object.keys(e).length>0}),i=n?Object.values(n)[0]:null;if((null==i?void 0:i.connected)&&"in"===(null==i?void 0:i.direction)){var r={counterpartNum:i.counterpartNum,counterpartName:i.counterpartName,owner:i.owner,uniqueId:i.uniqueId,linkedId:i.linkedId,throughQueue:i.throughQueue,throughTrunk:i.throughTrunk,direction:i.direction,connected:i.connected};l.eventDispatch("phone-island-url-parameter-opened",r)}}else null!==e&&_.island.setIslandView(e)},[_.island,V]),Q=n.useCallback(function(){return e.__awaiter(void 0,void 0,void 0,function(){var n;return e.__generator(this,function(e){switch(e.label){case 0:return j.length>0?[4,o.checkWebCamPermission()]:[3,2];case 1:return n=e.sent(),I(n),[2,n];case 2:return I(!1),[2,!1]}})})},[j.length]),M=n.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,Q()];case 1:return e.sent()&&(O("video"),i.store.dispatch.currentCall.updateCurrentCall({isLocalVideoEnabled:!0,isStartingVideoCall:!0})),[2]}})})},[Q,O]),E=n.useCallback(function(){return e.__awaiter(void 0,void 0,void 0,function(){var n,r;return e.__generator(this,function(e){switch(e.label){case 0:if(i.store.getState().screenShare.active)return O("video"),[2];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,navigator.mediaDevices.getDisplayMedia({video:!0})];case 2:return n=e.sent(),[3,4];case 3:return r=e.sent(),console.warn("Screen share not started:",r),[2];case 4:return i.store.dispatch.screenShare.update({pendingScreenStream:n,isStartingScreenShare:!0}),O("video"),[2]}})})},[O]),N=n.useMemo(function(){var e;return(null===(e=null==S?void 0:S.profile)||void 0===e?void 0:e.macro_permissions)||{}},[null===(c=null==S?void 0:S.profile)||void 0===c?void 0:c.macro_permissions]),P=n.useMemo(function(){var e,n,i,r,t,u,o,l,s;return{canRecord:(null===(i=null===(n=null===(e=null==N?void 0:N.settings)||void 0===e?void 0:e.permissions)||void 0===n?void 0:n.recording)||void 0===i?void 0:i.value)||!1,canShareScreen:"safari"!==(null===(u=null===(t=null===(r=null==q?void 0:q.current)||void 0===r?void 0:r.webRTCAdapter)||void 0===t?void 0:t.browserDetails)||void 0===u?void 0:u.browser)&&((null===(s=null===(l=null===(o=null==N?void 0:N.nethvoice_cti)||void 0===o?void 0:o.permissions)||void 0===l?void 0:l.screen_sharing)||void 0===s?void 0:s.value)||!1),canSwitchDevice:(null==D?void 0:D.length)>0}},[null===(p=null===(h=null===(v=null==N?void 0:N.settings)||void 0===v?void 0:v.permissions)||void 0===h?void 0:h.recording)||void 0===p?void 0:p.value,null===(b=null===(g=null===(f=null==N?void 0:N.nethvoice_cti)||void 0===f?void 0:f.permissions)||void 0===g?void 0:g.screen_sharing)||void 0===b?void 0:b.value,null==D?void 0:D.length,null===(m=null==S?void 0:S.default_device)||void 0===m?void 0:m.type,d]),A=n.useMemo(function(){var e=x();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},[x,w.onlyQueues,w.openParamUrlType]);n.useEffect(function(){if(S&&k){var e=r.getAvailableDevices(S,k);y(e)}},[S,k]);var L=n.useCallback(function(){var e=x(),n=(null==e?void 0:e.linkedId)||(null==e?void 0:e.linkedid),i=(null==e?void 0:e.uniqueId)||(null==e?void 0:e.uniqueid);(n||i)&&(_.island.toggleSideViewVisible(!1),l.eventDispatch("phone-island-transcription-open",{linkedid:n,uniqueid:i}))},[_.island,x]),R=n.useMemo(function(){return(null==S?void 0:S.call_transcription_enabled)||!1},[null==S?void 0:S.call_transcription_enabled]);return e.__assign(e.__assign({userInformation:S,availableDevices:D,videoInputDevices:j,isVideoCallButtonVisible:U,isUrlButtonEnabled:A,hasValidUrl:w.hasValidUrl,isTranscriptionEnabled:R},P),{goToVideoCall:M,goToScreenSharing:E,closeSideViewAndLaunchEvent:O,openTranscriptionView:L})};
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 i=require("../../../store/index.js"),r=require("../../../utils/deviceUtils.js"),t=require("../../../lib/webrtc/janus.js"),o=require("../../../lib/phone/trunk.js"),u=require("../../../lib/devices/devices.js"),l=require("../../../utils/genericFunctions/eventDispatch.js"),s=require("../../../node_modules/react-redux/es/hooks/useDispatch.js"),a=require("../../../node_modules/react-redux/es/hooks/useSelector.js");exports.useSideViewLogic=function(d){var c,v,h,p,f,g,b,m,_=s.useDispatch(),S=a.useSelector(function(e){return e.currentUser}),k=a.useSelector(function(e){return e.users}),w=a.useSelector(function(e){return e.paramUrl}),j=i.store.select.mediaDevices.videoInputDevices(i.store.getState()),q=n.useRef(t.default),C=a.useSelector(function(e){return e.currentUser.conversations}),V=n.useState([]),D=V[0],y=V[1],T=n.useState(!0),U=T[0],I=T[1],x=n.useCallback(function(){var e=Object.values(C).find(function(e){return Object.keys(e).length>0});return e?Object.values(e)[0]:null},[C]),O=n.useCallback(function(e){if(_.island.toggleSideViewVisible(!1),"openUrl"===e){var n=Object.values(C).find(function(e){return Object.keys(e).length>0}),i=n?Object.values(n)[0]:null;if((null==i?void 0:i.connected)&&"in"===(null==i?void 0:i.direction)){var r={counterpartNum:i.counterpartNum,counterpartName:i.counterpartName,owner:i.owner,uniqueId:i.uniqueId,linkedId:i.linkedId,throughQueue:i.throughQueue,throughTrunk:i.throughTrunk,direction:i.direction,connected:i.connected};l.eventDispatch("phone-island-url-parameter-opened",r)}}else null!==e&&_.island.setIslandView(e)},[_.island,C]),Q=n.useCallback(function(){return e.__awaiter(void 0,void 0,void 0,function(){var n;return e.__generator(this,function(e){switch(e.label){case 0:return j.length>0?[4,u.checkWebCamPermission()]:[3,2];case 1:return n=e.sent(),I(n),[2,n];case 2:return I(!1),[2,!1]}})})},[j.length]),E=n.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,Q()];case 1:return e.sent()&&(O("video"),i.store.dispatch.currentCall.updateCurrentCall({isLocalVideoEnabled:!0,isStartingVideoCall:!0})),[2]}})})},[Q,O]),M=n.useCallback(function(){return e.__awaiter(void 0,void 0,void 0,function(){var n,r;return e.__generator(this,function(e){switch(e.label){case 0:if(i.store.getState().screenShare.active)return O("video"),[2];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,navigator.mediaDevices.getDisplayMedia({video:!0})];case 2:return n=e.sent(),[3,4];case 3:return r=e.sent(),console.warn("Screen share not started:",r),[2];case 4:return!i.store.getState().currentCall.accepted||i.store.getState().screenShare.active?(n.getTracks().forEach(function(e){return e.stop()}),[2]):(i.store.dispatch.screenShare.update({pendingScreenStream:n,isStartingScreenShare:!0}),O("video"),[2])}})})},[O]),N=n.useMemo(function(){var e;return(null===(e=null==S?void 0:S.profile)||void 0===e?void 0:e.macro_permissions)||{}},[null===(c=null==S?void 0:S.profile)||void 0===c?void 0:c.macro_permissions]),P=n.useMemo(function(){var e,n,i,r,t,o,u,l,s;return{canRecord:(null===(i=null===(n=null===(e=null==N?void 0:N.settings)||void 0===e?void 0:e.permissions)||void 0===n?void 0:n.recording)||void 0===i?void 0:i.value)||!1,canShareScreen:"safari"!==(null===(o=null===(t=null===(r=null==q?void 0:q.current)||void 0===r?void 0:r.webRTCAdapter)||void 0===t?void 0:t.browserDetails)||void 0===o?void 0:o.browser)&&((null===(s=null===(l=null===(u=null==N?void 0:N.nethvoice_cti)||void 0===u?void 0:u.permissions)||void 0===l?void 0:l.screen_sharing)||void 0===s?void 0:s.value)||!1),canSwitchDevice:(null==D?void 0:D.length)>0}},[null===(p=null===(h=null===(v=null==N?void 0:N.settings)||void 0===v?void 0:v.permissions)||void 0===h?void 0:h.recording)||void 0===p?void 0:p.value,null===(b=null===(g=null===(f=null==N?void 0:N.nethvoice_cti)||void 0===f?void 0:f.permissions)||void 0===g?void 0:g.screen_sharing)||void 0===b?void 0:b.value,null==D?void 0:D.length,null===(m=null==S?void 0:S.default_device)||void 0===m?void 0:m.type,d]),A=n.useMemo(function(){var e=x();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&&(o.isFromTrunk(e.counterpartNum)||(null==e?void 0:e.throughQueue)))return!0}return!1},[x,w.onlyQueues,w.openParamUrlType]);n.useEffect(function(){if(S&&k){var e=r.getAvailableDevices(S,k);y(e)}},[S,k]);var L=n.useCallback(function(){var e=x(),n=(null==e?void 0:e.linkedId)||(null==e?void 0:e.linkedid),i=(null==e?void 0:e.uniqueId)||(null==e?void 0:e.uniqueid);(n||i)&&(_.island.toggleSideViewVisible(!1),l.eventDispatch("phone-island-transcription-open",{linkedid:n,uniqueid:i}))},[_.island,x]),R=n.useMemo(function(){return(null==S?void 0:S.call_transcription_enabled)||!1},[null==S?void 0:S.call_transcription_enabled]);return e.__assign(e.__assign({userInformation:S,availableDevices:D,videoInputDevices:j,isVideoCallButtonVisible:U,isUrlButtonEnabled:A,hasValidUrl:w.hasValidUrl,isTranscriptionEnabled:R},P),{goToVideoCall:E,goToScreenSharing:M,closeSideViewAndLaunchEvent:O,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(async () => {\n // Pick the screen before anything else: the picker opens right away and, if the\n // user cancels, the island stays on the call view with nothing to undo\n if (store.getState().screenShare.active) {\n closeSideViewAndLaunchEvent('video')\n return\n }\n let pendingScreenStream: MediaStream\n try {\n pendingScreenStream = await navigator.mediaDevices.getDisplayMedia({ video: true })\n } catch (error) {\n console.warn('Screen share not started:', error)\n return\n }\n store.dispatch.screenShare.update({\n pendingScreenStream,\n isStartingScreenShare: true,\n })\n closeSideViewAndLaunchEvent('video')\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 linkedId = conversationData?.linkedId || conversationData?.linkedid\n const uniqueId = conversationData?.uniqueId || conversationData?.uniqueid\n\n if (!linkedId && !uniqueId) {\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: linkedId,\n uniqueid: uniqueId,\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","active","navigator","getDisplayMedia","video","pendingScreenStream","console","warn","error_1","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","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'\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(async () => {\n // Pick the screen before anything else: the picker opens right away and, if the\n // user cancels, the island stays on the call view with nothing to undo\n if (store.getState().screenShare.active) {\n closeSideViewAndLaunchEvent('video')\n return\n }\n let pendingScreenStream: MediaStream\n try {\n pendingScreenStream = await navigator.mediaDevices.getDisplayMedia({ video: true })\n } catch (error) {\n console.warn('Screen share not started:', error)\n return\n }\n if (!store.getState().currentCall.accepted || store.getState().screenShare.active) {\n pendingScreenStream.getTracks().forEach((track) => track.stop())\n return\n }\n store.dispatch.screenShare.update({\n pendingScreenStream,\n isStartingScreenShare: true,\n })\n closeSideViewAndLaunchEvent('video')\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 linkedId = conversationData?.linkedId || conversationData?.linkedid\n const uniqueId = conversationData?.uniqueId || conversationData?.uniqueid\n\n if (!linkedId && !uniqueId) {\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: linkedId,\n uniqueid: uniqueId,\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","active","navigator","getDisplayMedia","video","pendingScreenStream","console","warn","error_1","accepted","getTracks","forEach","track","stop","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","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("../lib/phone/counterpartDevice.js"),u=require("../services/phonebook.js"),c=require("../services/user.js"),a=require("../static/busy_ringtone.js"),s=require("../utils/customHooks/useEventListener.js"),l=require("../utils/genericFunctions/eventDispatch.js"),d=require("../utils/genericFunctions/withTimeout.js"),v=require("../utils/genericFunctions/summaryEvents.js"),p=require("../store/index.js");require("../lib/webrtc/janus.js"),require("../node_modules/webrtc-adapter/src/js/adapter_core.js");var m=require("../lib/devices/devices.js"),f=require("../lib/user/default_device.js"),g=require("../utils/genericFunctions/isEmpty.js"),h=require("../utils/streaming/getStreamingSourceId.js"),b=require("../events/SocketEvents.js"),k=require("../utils/genericFunctions/timestamp.js"),y=require("../lib/user/extensions.js"),S=require("../utils/streaming/isFromStreaming.js"),q=require("../lib/phone/queue.js"),w=require("../lib/phone/trunk.js"),C=require("../node_modules/react-redux/es/hooks/useDispatch.js");function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var N=_(n);exports.Socket=function(_){var T=_.hostName,I=_.username,D=_.authToken,j=_.reload,U=_.reloadedCallback,x=_.children,E=_.uaType,O=C.useDispatch(),P=n.useRef(),A=n.useRef(),F=n.useRef(!1),M=n.useRef(0),R=n.useRef(null),V=n.useRef(new Map),L=n.useRef(new Map),Q=n.useRef(new Set),W=n.useRef(null),B=n.useRef(!1),K=n.useRef({linkedid:null,uniqueid:null});s.useEventListener("phone-island-start-transcription",function(e){if(A.current){var n=(null==e?void 0:e.linkedid)||(null==e?void 0:e.linkedId)||(null==e?void 0:e.uniqueid)||(null==e?void 0:e.uniqueId)||null,t=(null==e?void 0:e.uniqueid)||(null==e?void 0:e.uniqueId)||n;if(!n&&!t)return;K.current={linkedid:n,uniqueid:t},A.current.emit("start_transcription",{linkedid:n,uniqueid:t})}}),s.useEventListener("phone-island-stop-transcription",function(e){if(A.current){var n=(null==e?void 0:e.linkedid)||(null==e?void 0:e.linkedId)||(null==e?void 0:e.uniqueid)||(null==e?void 0:e.uniqueId)||null,t=(null==e?void 0:e.uniqueid)||(null==e?void 0:e.uniqueId)||n;if(!n&&!t)return;K.current={linkedid:null,uniqueid:null},A.current.emit("stop_transcription",{linkedid:n,uniqueid:t})}}),s.useEventListener("phone-island-current-user-queue-call-waiting",function(e){O.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})}),s.useEventListener("phone-island-current-user-queue-call-connected",function(e){O.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=function(e){if(e.counterpartNum&&S.isFromStreaming(e.counterpartNum)){O.island.setIsFromStreaming(!0),O.currentCall.updateCurrentCall({streamingSourceNumber:e.counterpartNum});var n=h.getStreamingSourceId(e.counterpartNum);n&&c.subscribe({id:n}).catch(function(e){return console.error("Error subscribing to streaming source:",e)})}},s=function(e){return(e||"").replace(/\D/g,"")},C=function(e){var n=i.getDisplayName(e),t=((null==e?void 0:e.counterpartNum)||"").trim();return n&&n!==t&&!i.isNumberOnlyName(n)?n:(t?L.current.get(s(t)):void 0)||n},_=function(e){if(e){var n=(e.counterpartNum||"").trim();if(!(n.length<3)){var t=(e.counterpartName||"").trim();if(!t||"<unknown>"===t||t===n||i.isNumberOnlyName(t)){var r=p.store.getState().users.extensions;if(!(r&&r[n]||S.isFromStreaming(n))){var o=s(n);L.current.has(o)||e.id&&Q.current.has(e.id)||(e.id&&(Q.current.size>500&&Q.current.clear(),Q.current.add(e.id)),u.searchPhonebook(1,n,"").then(function(e){var n=((null==e?void 0:e.rows)||[]).find(function(e){return[e.extension,e.workphone,e.homephone,e.cellphone,e.fax].some(function(e){var n=s(e);return 0!==n.length&&(n===o||!(Math.min(n.length,o.length)<6)&&(n.endsWith(o)||o.endsWith(n)))})}),t=((null==n?void 0:n.name)||(null==n?void 0:n.company)||"").trim();if(t){L.current.set(o,t);var r=p.store.getState().currentCall;s(r.number)===o&&O.currentCall.updateCurrentCall({displayName:t})}}).catch(function(){}))}}}}},N=function(e){return q.getCurrentCallQueueContext(e,p.store.getState().queue)},j=function(e,n){var t=p.store.getState().currentCall,r=(null==n?void 0:n.queueId)||t.queueId||"",i=(null==n?void 0:n.queueName)||t.queueName||"",o=(null==n?void 0:n.queueNumber)||t.queueNumber||"";return{conversationId:e.id,linkedId:e.linkedId,uniqueId:e.uniqueId,ownerExtension:e.owner,number:"".concat(e.counterpartNum||""),queueId:r,queueName:i,queueNumber:o,queuePosition:(null==n?void 0:n.queuePosition)||"",queueWaitingTime:(null==n?void 0:n.queueWaitingTime)||0}},U=function(e){var n,t,r,i;if(e){var o=N(e),u=j(e,o);if(Boolean(u.queueId||u.queueName||u.queueNumber))if(e.connected)((null===(r=R.current)||void 0===r?void 0:r.conversationId)!==e.id||"connected"!==(null===(i=R.current)||void 0===i?void 0:i.phase))&&(b.dispatchCurrentUserQueueCallConnected(u),R.current={conversationId:e.id,phase:"connected"});else((null===(n=R.current)||void 0===n?void 0:n.conversationId)!==e.id||"waiting"!==(null===(t=R.current)||void 0===t?void 0:t.phase))&&(b.dispatchCurrentUserQueueCallWaiting(u),R.current={conversationId:e.id,phase:"waiting"});else R.current=null}else R.current=null},x=function(e){return(null==e?void 0:e.linkedId)||(null==e?void 0:e.linkedid)||""},z=function(e){return(null==e?void 0:e.uniqueId)||(null==e?void 0:e.uniqueid)||""},H=function(e){return!!(null==e?void 0:e.connected)&&!!x(e)&&!!z(e)},J=function(n){var t=p.store.getState().currentUser.conversations,r=n?null==t?void 0:t[n]:void 0,i=function(e){var n,t=null,r=Object.entries(e||{}).filter(function(e){var n=e[1];return n&&Object.keys(n).length>0});return r.forEach(function(e){var r,i,o=e[0],u=e[1];if(!t)return t=u,void(n=o);var c=H(t),a=H(u);if(a&&!c)return t=u,void(n=o);if(a===c){var s=!!t.connected,l=!!u.connected;if(l&&!s)return t=u,void(n=o);var d=null!==(r=t.startTime)&&void 0!==r?r:0,v=null!==(i=u.startTime)&&void 0!==i?i:0;l===s&&v>d&&(t=u,n=o)}}),{conversation:t,key:n,count:r.length}}(r);if(H(i.conversation))return e.__assign(e.__assign({},i),{source:"live",cacheAgeMs:void 0,hasConversationForCaller:!!r,liveConversationKeys:Object.keys(r||{})});var o=function(n){if(!n)return null;var t=V.current.get(n);if(!t)return null;var r=Date.now()-t.cachedAt;return r>6e5?(V.current.delete(n),null):e.__assign(e.__assign({},t),{cacheAgeMs:r})}(n);return o&&H(o.conversation)?{conversation:o.conversation,key:o.conversation.id,count:i.count,source:"cache",cacheAgeMs:o.cacheAgeMs,hasConversationForCaller:!!r,liveConversationKeys:Object.keys(r||{})}:e.__assign(e.__assign({},i),{source:i.conversation?"live_invalid":"none",cacheAgeMs:null==o?void 0:o.cacheAgeMs,hasConversationForCaller:!!r,liveConversationKeys:Object.keys(r||{})})},G=function(t,r){var u=p.store.getState().currentCall,a=u.transferring,s=u.transferSwitching,d=u.transferCalls,v=p.store.getState().island.view;if(Object.keys(r).length>0){if(t.status){var m=p.store.getState().users.extensions,g=p.store.getState().currentUser.default_device,h=p.store.getState().currentUser,b=h.endpoints,S=h.username,q=function(){if(!m||!S)return!1;var e=Object.values(m).filter(function(e){return(null==e?void 0:e.username)===S});return null==e?void 0:e.some(function(e){var n=null==b?void 0:b.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(t.status){case"ringing":if(function(e){var n=p.store.getState().currentCall,t=n.accepted,r=n.ownerExtension;return t&&!!r&&!!e&&r!==e}(r.owner))break;var T=N(r),I=j(r,T);U(r),n(r),_(r),("mobile"===E&&q()||"desktop"===E&&("webrtc"===(null==g?void 0:g.type)||void 0===(null==g?void 0:g.type)&&!q()||!q()&&"physical"===(null==g?void 0:g.type)))&&(O.currentCall.checkIncomingUpdatePlay({conversationId:r.id,displayName:C(r),number:"".concat(r.counterpartNum),incomingSocket:!0,incoming:!0,throughQueue:Boolean(I.queueId||I.queueName||I.queueNumber),queueId:I.queueId,queueName:I.queueName,queueNumber:I.queueNumber,queuePosition:I.queuePosition,queueWaitingTime:I.queueWaitingTime,username:"".concat(m&&m[r.counterpartNum]&&m[r.counterpartNum].username)||"",ownerExtension:r.owner,counterpartDeviceType:o.getCounterpartDeviceType(r,p.store.getState().users)}),p.store.dispatch.island.setIslandView("call")),F.current||(F.current=!0,c.getCurrentUserInfo().then(function(n){n&&(O.currentUser.updateCurrentUser(n),l.eventDispatch("phone-island-user-informations-update",e.__assign({},n)),n.settings&&n.settings.open_param_url?O.paramUrl.setOpenParamUrlType(n.settings.open_param_url):O.paramUrl.setOpenParamUrlType("never"))}).catch(function(e){console.error("Error getting current user info:",e)}).finally(function(){setTimeout(function(){F.current=!1},100)}));var D=p.store.getState().paramUrl.openParamUrlType,x=p.store.getState().island.urlOpened;if("ringing"===D&&!x){var P=w.isFromTrunk(r.counterpartNum);p.store.dispatch.paramUrl.setThroughTrunk(P),p.store.dispatch.island.setUrlOpened(!1),l.eventDispatch("phone-island-url-parameter-opened",{counterpartNum:r.counterpartNum,counterpartName:C(r),owner:r.owner,uniqueId:r.uniqueId,linkedId:r.linkedId,throughQueue:r.throughQueue,throughTrunk:P,direction:r.direction,connected:r.connected})}break;case"busy":if(U(r),n(r),"mobile"===E&&q()||"desktop"===E&&("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(r&&r.connected)O.currentCall.updateCurrentCall({conversationId:r.id,displayName:C(r),number:"".concat(r.counterpartNum),ownerExtension:r.owner,username:"".concat(m&&m[r.counterpartNum]&&m[r.counterpartNum].username)||"",chDest:(null==r?void 0:r.chDest)||{},chSource:(null==r?void 0:r.chSource)||{},counterpartDeviceType:o.getCounterpartDeviceType(r,p.store.getState().users)}),O.currentCall.checkAcceptedUpdate({acceptedSocket:!0}),O.currentCall.addTransferCalls({type:"transferred",displayName:C(r),number:"".concat(r.counterpartNum),startTime:"".concat(k.getTimestampInSeconds())}),p.store.getState().island.isFromStreaming&&"out"===r.direction&&setTimeout(function(){O.island.setIslandView("streamingAnswer")},200),f.isPhysical()&&function(e){O.currentCall.updateCurrentCall({conversationId:e.id,accepted:!0,incoming:"in"!==e.direction&&void 0}),l.eventDispatch("phone-island-call-answered",{}),p.store.dispatch.player.stopAudioPlayer(),p.store.dispatch.player.setAudioPlayerLoop(!1)}(r),"call"===v&&a&&O.currentCall.updateCurrentCall({transferring:!1});if(d.length>1)O.currentCall.deleteTransferCalls();else if(r&&!r.connected){if(a&&!s){var A=d.find(function(e){return e.number===r.counterpartNum});!r.connected&&A&&(O.currentCall.updateCurrentCall({transferring:!1}),l.eventDispatch("phone-island-call-transfer-failed",{}),O.currentCall.updateTransferSwitching(!1))}"REC"===(null==r?void 0:r.counterpartName)&&O.physicalRecorder.setRecordingTempVariable(!0)}r&&!r.connected&&"out"===r.direction&&("REC"!==(null==r?void 0:r.counterpartName)&&_(r),O.currentCall.checkOutgoingUpdate({outgoingSocket:!0,outgoing:"REC"!==(null==r?void 0:r.counterpartName),displayName:C(r),counterpartDeviceType:"",number:"".concat(null==r?void 0:r.counterpartNum),username:"".concat(m&&m[null==r?void 0:r.counterpartNum]&&m[null==r?void 0:r.counterpartNum].username)||""}))}break;case"onhold":U(r);var M=r.counterpartName,R=r.counterpartNum,V=r.startTime;a&&R&&M&&"<unknown>"!==M&&(O.currentCall.addTransferCalls({type:"destination",displayName:i.getDisplayName(r),number:R,startTime:"".concat(k.getTimestampInSeconds())}),O.currentCall.updateCurrentCall({displayName:i.getDisplayName(r),number:R,startTime:"".concat(V/1e3),conversationId:r.id,counterpartDeviceType:""}),O.island.setIslandView("call"));break;case"busy_ringing":l.eventDispatch("phone-island-call-ringing",{})}}}else"online"==t.status&&y.userTotallyFree()&&(U(null),O.player.stopAudioPlayer(),O.currentCall.reset(),O.listen.reset(),O.physicalRecorder.setRecordingTempVariable(!1),O.island.setIsFromStreaming(!1))};return function(){var n=r.getApiMode(I);B.current=!1;var i={upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3};"new"===n&&(i.path="/api/ws"),A.current=t.io("https://"+T,i),O.websocket.update({socket:A.current}),A.current.on("connect",function(){console.debug("Socket connected sid: ".concat(A.current.id)),l.eventDispatch("phone-island-socket-connected",{})}),A.current.on("disconnect",function(e){console.debug("Socket disconnect - reason: ".concat(e)),W.current=null,B.current=!0,P.current&&(clearInterval(P.current),P.current=null),e.includes("server disconnect")?l.eventDispatch("phone-island-server-disconnected",{}):l.eventDispatch("phone-island-socket-disconnected",{})}),A.current.io.on("error",function(e){console.debug("Socket error: ",e)}),A.current.on("connect_error",function(e){console.debug("Socket connect_error: ",e)}),A.current.io.on("reconnect",function(e){M.current=0,console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(A.current.id,")"))}),A.current.io.on("reconnect_attempt",function(e){console.debug("Socket reconnect_attempt ".concat(e))}),A.current.io.on("reconnect_error",function(e){console.debug("Socket reconnect_error: ",e)}),A.current.io.on("reconnect_failed",function(){console.debug("Socket reconnect_failed")}),A.current.on("connect",function(){console.debug("Socket on: "+T+" is connected!"),M.current=0,W.current=Date.now(),A.current.emit("login",{accessKeyId:"".concat(I),token:D,uaType:E})});var o=function(){setTimeout(function(){O.alerts.removeAlert("socket_down"),l.eventDispatch("phone-island-alert-removed",{type:"socket_down"}),l.eventDispatch("phone-island-socket-disconnected-popup-close",{})},0)};A.current.on("authe_ok",function(){console.debug("Socket authentication success!"),W.current=null,M.current=0,l.eventDispatch("phone-island-socket-authorized",{}),B.current&&(B.current=!1,l.eventDispatch("phone-island-socket-reconnected",{})),o(),P.current&&clearInterval(P.current),P.current=setInterval(function(){var e=A.current.id;A.current.volatile.emit("ping",d.withTimeout(function(){M.current=0,o()},function(){A.current.connected&&A.current.id!==e||(M.current++,console.debug("Socket ping timeout (".concat(M.current,"/").concat(3,"), connected: ").concat(A.current.connected)),setTimeout(function(){var e,n,t=A.current.connected&&M.current>=3;if(!A.current.connected||t){var r=p.store.getState().webrtc.sipcall,i=p.store.getState().currentCall,o=i.accepted,u=i.outgoing,c=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||u)&&("connected"===c||"completed"===c))return void console.debug("Socket unreachable but active call with ICE connected - skipping socket_down alert",{iceState:c,accepted:o,outgoing:u,isStaleConnection:t,timestamp:(new Date).toISOString()});t&&(console.warn("Stale socket connection detected - forcing reconnection"),A.current.disconnect(),A.current.connect()),O.alerts.setAlert("socket_down"),l.eventDispatch("phone-island-socket-disconnected-popup-open",{}),console.error("Socket is unreachable!")}},0))},5e3))},5e3)}),A.current.on("userMainPresenceUpdate",function(n){p.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),b.dispatchMainPresence(n)}),A.current.on("extenHangup",function(e){var n=p.store.getState().currentUser,t=n.endpoints,r=n.username,i=n.call_summary_enabled,o=p.store.getState().conference,u=o.isActive,c=o.conferenceStartedFrom,s=p.store.getState().island,d=s.view,v=s.previewCallFromMobileOrNethlink,m=(null==t?void 0:t.extension)||[],f=m.map(function(e){return e.id}),g=null==e?void 0:e.callerNum;!f.includes(g)&&f.includes(null==e?void 0:e.channelExten)&&(g=null==e?void 0:e.channelExten);var h=m.find(function(n){return n.id===e.callerNum}),b=null==h?void 0:h.type,k=J(g).conversation,y=x(k),S=z(k),q=(null==k?void 0:k.connected)||!1;if(S&&y&&q&&(i&&l.eventDispatch("phone-island-summary-call-check",{linkedid:y,uniqueid:S}),g&&V.current.delete(g)),"normal_clearing"===e.cause&&("physical"===b||"mobile"===b)||"normal_clearing"===e.cause&&("webrtc"===b||"nethlink"===b)&&v||"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(){p.store.dispatch.island.toggleAvoidToShow(!1),p.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!1)},500),u&&c!==r&&p.store.dispatch.conference.resetConference()):"normal_circuit_congestion"===(null==e?void 0:e.cause)&&u&&c===r?setTimeout(function(){l.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"!==b&&"nethlink"!==b||!u||c===r||p.store.dispatch.conference.resetConference(),("normal_clearing"===e.cause&&("webrtc"===b||"nethlink"===b)||"call_rejected"===(null==e?void 0:e.cause))&&u&&c===r){var w=p.store.getState().conference,C=w.usersList,_=w.pendingUsers,N=C&&Object.keys(C).length>0,T=_&&Object.keys(_).length>0;N||T?setTimeout(function(){l.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})},800):p.store.dispatch.conference.resetConference()}if("interworking"===(null==e?void 0:e.cause)&&u&&c===r&&"waitingConference"!==d&&setTimeout(function(){l.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})},800),"user_busy"===(null==e?void 0:e.cause)){var I=p.store.getState().currentUser,D=I.endpoints,j=I.username,U=((null==D?void 0:D.extension)||[]).map(function(e){return e.id}),E=p.store.getState().currentCall,O=E.incoming,P=E.accepted,A=E.transferring,F=p.store.getState().conference,M=F.isActive,R=F.conferenceStartedFrom;!(O&&!!e.callerNum&&U.includes(e.callerNum))&&(!P||M||A)&&(p.store.dispatch.island.setOperatorBusyActive({callerNumber:e.callerNum||"Unknown"}),setTimeout(function(){p.store.dispatch.player.stopAudioPlayer()},4e3),setTimeout(function(){p.store.dispatch.player.updateStartAudioPlayer({src:a.default,loop:!0}),p.store.dispatch.island.setIslandView("operatorBusy")},600),M&&R===j&&setTimeout(function(){l.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})},4e3))}if("subscriber_absent"===(null==e?void 0:e.cause)){var L=p.store.getState().conference,Q=L.isActive,W=L.conferenceStartedFrom,B=p.store.getState().currentUser.username;if(Q&&W===B){var K=p.store.getState().conference;C=K.usersList,_=K.pendingUsers,N=C&&Object.keys(C).length>0,T=_&&Object.keys(_).length>0;N||T?(setTimeout(function(){l.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})},800),_&&_[e.callerNum]&&p.store.dispatch.conference.removePendingUser(e.callerNum)):p.store.dispatch.conference.resetConference()}}}),A.current.on("extenConnected",function(e){var n=p.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)&&(p.store.dispatch.island.toggleAvoidToShow(!0),p.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!0),l.eventDispatch("phone-island-call-answered",{extensionType:o}))}),A.current.on("extenUpdate",function(e){var n,t,r;O.users.updateExtension(e);var i=p.store.getState().users.extensions,o={},u=p.store.getState().currentUser;for(var c in i){var a=i[c].username,s=i[c].exten;o[a]||(o[a]=[]),o[a].push(s)}var l,d,v=o[e.username],m=Object.keys(e.conversations||{}),f=e.username===I,h=(null===(n=e.conversations)||void 0===n?void 0:n[m[0]])||{};f&&(l=e.exten,d=e.conversations,l&&Object.values(d||{}).forEach(function(e){H(e)&&V.current.set(l,{conversation:e,cachedAt:Date.now()})}));var k=!1;if((null==e?void 0:e.username)===I&&!g.isEmpty(h)&&(null==h?void 0:h.owner)){var y=null===(r=null===(t=null==u?void 0:u.endpoints)||void 0===t?void 0:t.extension)||void 0===r?void 0:r.find(function(e){return e.id===h.owner});y&&"mobile"===y.type&&(k=!0)}if(b.dispatchExtensions(e),g.isEmpty(h)){var S=null==v?void 0:v.some(function(e){var n,t=null===(n=i[e])||void 0===n?void 0:n.conversations;return!g.isEmpty(t)});S||b.dispatchConversations(e)}else k||b.dispatchConversations(e);k&&"busy"===(null==e?void 0:e.status)&&(null==e?void 0:e.username)===I&&(p.store.dispatch.island.toggleAvoidToShow(!0),p.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!0)),e.username===I&&(G(e,h),O.currentUser.updateConversations(e))}),A.current.on("queueUpdate",function(e){O.queue.updateQueue(e);var n,t,r,i=(n=p.store.getState().currentUser.conversations,t=p.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&&U(i),b.dispatchQueueUpdate(e)}),A.current.on("queueMemberUpdate",function(e){O.queue.updateQueueMember(e),b.dispatchQueueMemberUpdate(e)}),A.current.on("takeOver",function(){b.dispatchAlreadyLogin()}),A.current.on("serverReloaded",function(){b.dispatchServerReload()}),A.current.on("parkingUpdate",function(e){b.dispatchParkingUpdate(e)}),A.current.on("actionNethLink",function(e,n){b.dispatchUrlCall(e,n)}),A.current.on("satellite/summary",function(e){var n=(null==e?void 0:e.uniqueid)||(null==e?void 0:e.uniqueId),t=(null==e?void 0:e.linkedid)||(null==e?void 0:e.linkedId);n&&v.dispatchSummaryReady({linkedid:t,uniqueid:n,display_name:null==e?void 0:e.display_name,display_number:null==e?void 0:e.display_number,source:"socket"})}),A.current.on("message",function(e){switch(e.message){case"videoCallStart":var n=p.store.getState(),t=n.currentCall,r=t.incoming,i=t.outgoing,o=t.accepted,u=n.currentUser.default_device,c=n.island,a=c.isFromStreaming,s=c.view;("webrtc"===(null==u?void 0:u.type)||"nethlink"===(null==u?void 0:u.type))&&(r||i||o)&&!a&&"video"!==s&&(O.island.toggleSideViewVisible(!1),O.island.toggleTranscriptionViewVisible(!1),O.island.setIslandView("video")),b.dispatchVideoCallStarted({initiator:"remote",callUser:e.callUser,destUser:e.destUser});break;case"screenSharingStart":O.island.toggleSideViewVisible(!1),O.island.toggleTranscriptionViewVisible(!1),O.island.setIslandView("video"),O.screenShare.update({isJoiningScreenShare:!0,room:e.roomId});break;case"screenSharingStop":O.island.toggleSideViewVisible(!1),O.island.toggleTranscriptionViewVisible(!1),O.island.setIslandView("video"),O.screenShare.update({isLeavingScreenShare:!0});break;default:console.warn("Socket: unknown message type ",e.message)}}),A.current.on("updateDefaultDevice",function(n){b.dispatchDefaultDeviceUpdate(n);var t=p.store.getState().users.extensions,r=p.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],u=r.extension.find(function(e){return e.id===o.exten});u&&(o=e.__assign(e.__assign({},o),{type:u.type})),p.store.dispatch.currentUser.updateCurrentDefaultDevice(o),m.checkMediaPermissions()}}}),A.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=p.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}))}),p.store.dispatch.conference.updateConferenceUsersList(o),p.store.dispatch.conference.updateConferenceId(t)}}),A.current.on("confBridgeEnd",function(e){e&&(null==e?void 0:e.id)&&(p.store.dispatch.conference.resetConference(),l.eventDispatch("phone-island-conference-finished",{}))}),A.current.on("callWebrtc",function(e){l.eventDispatch("phone-island-call-start",{number:e})}),A.current.on("newVoiceMessageCounter",function(e){l.eventDispatch("phone-island-voicemail-received",{voicemailInfo:e})}),A.current.on("streamingSourceUpdate",function(e){l.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;t&&r&&O.streaming.updateSourceImage({source:t,image:r})}}),A.current.on("satellite/transcription",function(e){var n=K.current,t=null==e?void 0:e.uniqueid,r=null==e?void 0:e.linkedid;if(n.linkedid&&t){var i=function(e){return null!=e&&(e===n.linkedid||e===n.uniqueid)};if(!i(t)&&!i(r))return}l.eventDispatch("phone-island-conversation-transcription",e)})}(),function(){clearInterval(P.current),L.current.clear(),Q.current.clear(),A.current.close()}},[T,I,D,E,O]),n.useEffect(function(){var e,n;if(j){console.info("Socket reload requested");var t=p.store.getState().alerts.data,r=p.store.getState().island.forceReload,i=(null===(e=t.socket_down)||void 0===e?void 0:e.active)||!1,o=!(null===(n=A.current)||void 0===n?void 0:n.connected);!o&&null!==W.current&&Date.now()-W.current<3e4&&!r?(console.info("Socket connected and authenticating, skipping reconnection"),U()):i||o||r?(console.info(r?"Force reload requested, performing Socket reconnection":"Socket down detected (alert active or disconnected), performing reconnection"),P.current&&(clearInterval(P.current),P.current=null),setTimeout(function(){A.current.disconnect(),A.current.connect(),U()},100)):(console.info("Socket already connected (no alert active), skipping reconnection"),U())}},[j]),N.default.createElement(N.default.Fragment,null,x)};
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("../lib/phone/counterpartDevice.js"),u=require("../services/phonebook.js"),c=require("../services/user.js"),a=require("../static/busy_ringtone.js"),s=require("../utils/customHooks/useEventListener.js"),l=require("../utils/genericFunctions/eventDispatch.js"),d=require("../utils/genericFunctions/withTimeout.js"),v=require("../utils/genericFunctions/summaryEvents.js"),p=require("../store/index.js");require("../lib/webrtc/janus.js"),require("../node_modules/webrtc-adapter/src/js/adapter_core.js");var m=require("../lib/devices/devices.js"),f=require("../lib/user/default_device.js"),g=require("../utils/genericFunctions/isEmpty.js"),h=require("../utils/streaming/getStreamingSourceId.js"),b=require("../events/SocketEvents.js"),k=require("../utils/genericFunctions/timestamp.js"),y=require("../lib/user/extensions.js"),S=require("../utils/streaming/isFromStreaming.js"),q=require("../lib/phone/queue.js"),w=require("../lib/phone/trunk.js"),C=require("../node_modules/react-redux/es/hooks/useDispatch.js");function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var N=_(n);exports.Socket=function(_){var I=_.hostName,T=_.username,D=_.authToken,j=_.reload,U=_.reloadedCallback,x=_.children,E=_.uaType,O=C.useDispatch(),P=n.useRef(),A=n.useRef(),F=n.useRef(!1),M=n.useRef(0),R=n.useRef(null),V=n.useRef(new Map),L=n.useRef(new Map),Q=n.useRef(new Set),W=n.useRef(null),B=n.useRef(!1),K=n.useRef({linkedid:null,uniqueid:null});s.useEventListener("phone-island-start-transcription",function(e){if(A.current){var n=(null==e?void 0:e.linkedid)||(null==e?void 0:e.linkedId)||(null==e?void 0:e.uniqueid)||(null==e?void 0:e.uniqueId)||null,t=(null==e?void 0:e.uniqueid)||(null==e?void 0:e.uniqueId)||n;if(!n&&!t)return;K.current={linkedid:n,uniqueid:t},A.current.emit("start_transcription",{linkedid:n,uniqueid:t})}}),s.useEventListener("phone-island-stop-transcription",function(e){if(A.current){var n=(null==e?void 0:e.linkedid)||(null==e?void 0:e.linkedId)||(null==e?void 0:e.uniqueid)||(null==e?void 0:e.uniqueId)||null,t=(null==e?void 0:e.uniqueid)||(null==e?void 0:e.uniqueId)||n;if(!n&&!t)return;K.current={linkedid:null,uniqueid:null},A.current.emit("stop_transcription",{linkedid:n,uniqueid:t})}}),s.useEventListener("phone-island-current-user-queue-call-waiting",function(e){O.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})}),s.useEventListener("phone-island-current-user-queue-call-connected",function(e){O.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=function(e){if(e.counterpartNum&&S.isFromStreaming(e.counterpartNum)){O.island.setIsFromStreaming(!0),O.currentCall.updateCurrentCall({streamingSourceNumber:e.counterpartNum});var n=h.getStreamingSourceId(e.counterpartNum);n&&c.subscribe({id:n}).catch(function(e){return console.error("Error subscribing to streaming source:",e)})}},s=function(e){return(e||"").replace(/\D/g,"")},C=function(e){var n=i.getDisplayName(e),t=((null==e?void 0:e.counterpartNum)||"").trim();return n&&n!==t&&!i.isNumberOnlyName(n)?n:(t?L.current.get(s(t)):void 0)||n},_=function(e){if(e){var n=(e.counterpartNum||"").trim();if(!(n.length<3)){var t=(e.counterpartName||"").trim();if(!t||"<unknown>"===t||t===n||i.isNumberOnlyName(t)){var r=p.store.getState().users.extensions;if(!(r&&r[n]||S.isFromStreaming(n))){var o=s(n);L.current.has(o)||e.id&&Q.current.has(e.id)||(e.id&&(Q.current.size>500&&Q.current.clear(),Q.current.add(e.id)),u.searchPhonebook(1,n,"").then(function(e){var n=((null==e?void 0:e.rows)||[]).find(function(e){return[e.extension,e.workphone,e.homephone,e.cellphone,e.fax].some(function(e){var n=s(e);return 0!==n.length&&(n===o||!(Math.min(n.length,o.length)<6)&&(n.endsWith(o)||o.endsWith(n)))})}),t=((null==n?void 0:n.name)||(null==n?void 0:n.company)||"").trim();if(t){L.current.set(o,t);var r=p.store.getState().currentCall;s(r.number)===o&&O.currentCall.updateCurrentCall({displayName:t})}}).catch(function(){}))}}}}},N=function(e){return q.getCurrentCallQueueContext(e,p.store.getState().queue)},j=function(e,n){var t=p.store.getState().currentCall,r=(null==n?void 0:n.queueId)||t.queueId||"",i=(null==n?void 0:n.queueName)||t.queueName||"",o=(null==n?void 0:n.queueNumber)||t.queueNumber||"";return{conversationId:e.id,linkedId:e.linkedId,uniqueId:e.uniqueId,ownerExtension:e.owner,number:"".concat(e.counterpartNum||""),queueId:r,queueName:i,queueNumber:o,queuePosition:(null==n?void 0:n.queuePosition)||"",queueWaitingTime:(null==n?void 0:n.queueWaitingTime)||0}},U=function(e){var n,t,r,i;if(e){var o=N(e),u=j(e,o);if(Boolean(u.queueId||u.queueName||u.queueNumber))if(e.connected)((null===(r=R.current)||void 0===r?void 0:r.conversationId)!==e.id||"connected"!==(null===(i=R.current)||void 0===i?void 0:i.phase))&&(b.dispatchCurrentUserQueueCallConnected(u),R.current={conversationId:e.id,phase:"connected"});else((null===(n=R.current)||void 0===n?void 0:n.conversationId)!==e.id||"waiting"!==(null===(t=R.current)||void 0===t?void 0:t.phase))&&(b.dispatchCurrentUserQueueCallWaiting(u),R.current={conversationId:e.id,phase:"waiting"});else R.current=null}else R.current=null},x=function(e){return(null==e?void 0:e.linkedId)||(null==e?void 0:e.linkedid)||""},z=function(e){return(null==e?void 0:e.uniqueId)||(null==e?void 0:e.uniqueid)||""},H=function(e){return!!(null==e?void 0:e.connected)&&!!x(e)&&!!z(e)},J=function(n){var t=p.store.getState().currentUser.conversations,r=n?null==t?void 0:t[n]:void 0,i=function(e){var n,t=null,r=Object.entries(e||{}).filter(function(e){var n=e[1];return n&&Object.keys(n).length>0});return r.forEach(function(e){var r,i,o=e[0],u=e[1];if(!t)return t=u,void(n=o);var c=H(t),a=H(u);if(a&&!c)return t=u,void(n=o);if(a===c){var s=!!t.connected,l=!!u.connected;if(l&&!s)return t=u,void(n=o);var d=null!==(r=t.startTime)&&void 0!==r?r:0,v=null!==(i=u.startTime)&&void 0!==i?i:0;l===s&&v>d&&(t=u,n=o)}}),{conversation:t,key:n,count:r.length}}(r);if(H(i.conversation))return e.__assign(e.__assign({},i),{source:"live",cacheAgeMs:void 0,hasConversationForCaller:!!r,liveConversationKeys:Object.keys(r||{})});var o=function(n){if(!n)return null;var t=V.current.get(n);if(!t)return null;var r=Date.now()-t.cachedAt;return r>6e5?(V.current.delete(n),null):e.__assign(e.__assign({},t),{cacheAgeMs:r})}(n);return o&&H(o.conversation)?{conversation:o.conversation,key:o.conversation.id,count:i.count,source:"cache",cacheAgeMs:o.cacheAgeMs,hasConversationForCaller:!!r,liveConversationKeys:Object.keys(r||{})}:e.__assign(e.__assign({},i),{source:i.conversation?"live_invalid":"none",cacheAgeMs:null==o?void 0:o.cacheAgeMs,hasConversationForCaller:!!r,liveConversationKeys:Object.keys(r||{})})},G=function(t,r){var u=p.store.getState().currentCall,a=u.transferring,s=u.transferSwitching,d=u.transferCalls,v=p.store.getState().island.view;if(Object.keys(r).length>0){if(t.status){var m=p.store.getState().users.extensions,g=p.store.getState().currentUser.default_device,h=p.store.getState().currentUser,b=h.endpoints,S=h.username,q=function(){if(!m||!S)return!1;var e=Object.values(m).filter(function(e){return(null==e?void 0:e.username)===S});return null==e?void 0:e.some(function(e){var n=null==b?void 0:b.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(t.status){case"ringing":if(function(e){var n=p.store.getState().currentCall,t=n.accepted,r=n.ownerExtension;return t&&!!r&&!!e&&r!==e}(r.owner))break;var I=N(r),T=j(r,I);U(r),n(r),_(r),("mobile"===E&&q()||"desktop"===E&&("webrtc"===(null==g?void 0:g.type)||void 0===(null==g?void 0:g.type)&&!q()||!q()&&"physical"===(null==g?void 0:g.type)))&&(O.currentCall.checkIncomingUpdatePlay({conversationId:r.id,displayName:C(r),number:"".concat(r.counterpartNum),incomingSocket:!0,incoming:!0,throughQueue:Boolean(T.queueId||T.queueName||T.queueNumber),queueId:T.queueId,queueName:T.queueName,queueNumber:T.queueNumber,queuePosition:T.queuePosition,queueWaitingTime:T.queueWaitingTime,username:"".concat(m&&m[r.counterpartNum]&&m[r.counterpartNum].username)||"",ownerExtension:r.owner,counterpartDeviceType:o.getCounterpartDeviceType(r,p.store.getState().users)}),p.store.dispatch.island.setIslandView("call")),F.current||(F.current=!0,c.getCurrentUserInfo().then(function(n){n&&(O.currentUser.updateCurrentUser(n),l.eventDispatch("phone-island-user-informations-update",e.__assign({},n)),n.settings&&n.settings.open_param_url?O.paramUrl.setOpenParamUrlType(n.settings.open_param_url):O.paramUrl.setOpenParamUrlType("never"))}).catch(function(e){console.error("Error getting current user info:",e)}).finally(function(){setTimeout(function(){F.current=!1},100)}));var D=p.store.getState().paramUrl.openParamUrlType,x=p.store.getState().island.urlOpened;if("ringing"===D&&!x){var P=w.isFromTrunk(r.counterpartNum);p.store.dispatch.paramUrl.setThroughTrunk(P),p.store.dispatch.island.setUrlOpened(!1),l.eventDispatch("phone-island-url-parameter-opened",{counterpartNum:r.counterpartNum,counterpartName:C(r),owner:r.owner,uniqueId:r.uniqueId,linkedId:r.linkedId,throughQueue:r.throughQueue,throughTrunk:P,direction:r.direction,connected:r.connected})}break;case"busy":if(U(r),n(r),"mobile"===E&&q()||"desktop"===E&&("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(r&&r.connected)O.currentCall.updateCurrentCall({conversationId:r.id,displayName:C(r),number:"".concat(r.counterpartNum),ownerExtension:r.owner,username:"".concat(m&&m[r.counterpartNum]&&m[r.counterpartNum].username)||"",chDest:(null==r?void 0:r.chDest)||{},chSource:(null==r?void 0:r.chSource)||{},counterpartDeviceType:o.getCounterpartDeviceType(r,p.store.getState().users)}),O.currentCall.checkAcceptedUpdate({acceptedSocket:!0}),O.currentCall.addTransferCalls({type:"transferred",displayName:C(r),number:"".concat(r.counterpartNum),startTime:"".concat(k.getTimestampInSeconds())}),p.store.getState().island.isFromStreaming&&"out"===r.direction&&setTimeout(function(){O.island.setIslandView("streamingAnswer")},200),f.isPhysical()&&function(e){O.currentCall.updateCurrentCall({conversationId:e.id,accepted:!0,incoming:"in"!==e.direction&&void 0}),l.eventDispatch("phone-island-call-answered",{}),p.store.dispatch.player.stopAudioPlayer(),p.store.dispatch.player.setAudioPlayerLoop(!1)}(r),"call"===v&&a&&O.currentCall.updateCurrentCall({transferring:!1});if(d.length>1)O.currentCall.deleteTransferCalls();else if(r&&!r.connected){if(a&&!s){var A=d.find(function(e){return e.number===r.counterpartNum});!r.connected&&A&&(O.currentCall.updateCurrentCall({transferring:!1}),l.eventDispatch("phone-island-call-transfer-failed",{}),O.currentCall.updateTransferSwitching(!1))}"REC"===(null==r?void 0:r.counterpartName)&&O.physicalRecorder.setRecordingTempVariable(!0)}r&&!r.connected&&"out"===r.direction&&("REC"!==(null==r?void 0:r.counterpartName)&&_(r),O.currentCall.checkOutgoingUpdate({outgoingSocket:!0,outgoing:"REC"!==(null==r?void 0:r.counterpartName),displayName:C(r),counterpartDeviceType:"",number:"".concat(null==r?void 0:r.counterpartNum),username:"".concat(m&&m[null==r?void 0:r.counterpartNum]&&m[null==r?void 0:r.counterpartNum].username)||""}))}break;case"onhold":U(r);var M=r.counterpartName,R=r.counterpartNum,V=r.startTime;a&&R&&M&&"<unknown>"!==M&&(O.currentCall.addTransferCalls({type:"destination",displayName:i.getDisplayName(r),number:R,startTime:"".concat(k.getTimestampInSeconds())}),O.currentCall.updateCurrentCall({displayName:i.getDisplayName(r),number:R,startTime:"".concat(V/1e3),conversationId:r.id,counterpartDeviceType:""}),O.island.setIslandView("call"));break;case"busy_ringing":l.eventDispatch("phone-island-call-ringing",{})}}}else"online"==t.status&&y.userTotallyFree()&&(U(null),O.player.stopAudioPlayer(),O.currentCall.reset(),O.listen.reset(),O.physicalRecorder.setRecordingTempVariable(!1),O.island.setIsFromStreaming(!1))};return function(){var n=r.getApiMode(T);B.current=!1;var i={upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3};"new"===n&&(i.path="/api/ws"),A.current=t.io("https://"+I,i),O.websocket.update({socket:A.current}),A.current.on("connect",function(){console.debug("Socket connected sid: ".concat(A.current.id)),l.eventDispatch("phone-island-socket-connected",{})}),A.current.on("disconnect",function(e){console.debug("Socket disconnect - reason: ".concat(e)),W.current=null,B.current=!0,P.current&&(clearInterval(P.current),P.current=null),e.includes("server disconnect")?l.eventDispatch("phone-island-server-disconnected",{}):l.eventDispatch("phone-island-socket-disconnected",{})}),A.current.io.on("error",function(e){console.debug("Socket error: ",e)}),A.current.on("connect_error",function(e){console.debug("Socket connect_error: ",e)}),A.current.io.on("reconnect",function(e){M.current=0,console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(A.current.id,")"))}),A.current.io.on("reconnect_attempt",function(e){console.debug("Socket reconnect_attempt ".concat(e))}),A.current.io.on("reconnect_error",function(e){console.debug("Socket reconnect_error: ",e)}),A.current.io.on("reconnect_failed",function(){console.debug("Socket reconnect_failed")}),A.current.on("connect",function(){console.debug("Socket on: "+I+" is connected!"),M.current=0,W.current=Date.now(),A.current.emit("login",{accessKeyId:"".concat(T),token:D,uaType:E})});var o=function(){setTimeout(function(){O.alerts.removeAlert("socket_down"),l.eventDispatch("phone-island-alert-removed",{type:"socket_down"}),l.eventDispatch("phone-island-socket-disconnected-popup-close",{})},0)};A.current.on("authe_ok",function(){console.debug("Socket authentication success!"),W.current=null,M.current=0,l.eventDispatch("phone-island-socket-authorized",{}),B.current&&(B.current=!1,l.eventDispatch("phone-island-socket-reconnected",{})),o(),P.current&&clearInterval(P.current),P.current=setInterval(function(){var e=A.current.id;A.current.volatile.emit("ping",d.withTimeout(function(){M.current=0,o()},function(){A.current.connected&&A.current.id!==e||(M.current++,console.debug("Socket ping timeout (".concat(M.current,"/").concat(3,"), connected: ").concat(A.current.connected)),setTimeout(function(){var e,n,t=A.current.connected&&M.current>=3;if(!A.current.connected||t){var r=p.store.getState().webrtc.sipcall,i=p.store.getState().currentCall,o=i.accepted,u=i.outgoing,c=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||u)&&("connected"===c||"completed"===c))return void console.debug("Socket unreachable but active call with ICE connected - skipping socket_down alert",{iceState:c,accepted:o,outgoing:u,isStaleConnection:t,timestamp:(new Date).toISOString()});t&&(console.warn("Stale socket connection detected - forcing reconnection"),A.current.disconnect(),A.current.connect()),O.alerts.setAlert("socket_down"),l.eventDispatch("phone-island-socket-disconnected-popup-open",{}),console.error("Socket is unreachable!")}},0))},5e3))},5e3)}),A.current.on("userMainPresenceUpdate",function(n){p.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),b.dispatchMainPresence(n)}),A.current.on("extenHangup",function(e){var n=p.store.getState().currentUser,t=n.endpoints,r=n.username,i=n.call_summary_enabled,o=p.store.getState().conference,u=o.isActive,c=o.conferenceStartedFrom,s=p.store.getState().island,d=s.view,v=s.previewCallFromMobileOrNethlink,m=(null==t?void 0:t.extension)||[],f=m.map(function(e){return e.id}),g=null==e?void 0:e.callerNum;!f.includes(g)&&f.includes(null==e?void 0:e.channelExten)&&(g=null==e?void 0:e.channelExten);var h=m.find(function(n){return n.id===e.callerNum}),b=null==h?void 0:h.type,k=J(g).conversation,y=x(k),S=z(k),q=(null==k?void 0:k.connected)||!1;if(S&&y&&q&&(i&&l.eventDispatch("phone-island-summary-call-check",{linkedid:y,uniqueid:S}),g&&V.current.delete(g)),"normal_clearing"===e.cause&&("physical"===b||"mobile"===b)||"normal_clearing"===e.cause&&("webrtc"===b||"nethlink"===b)&&v||"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(){p.store.dispatch.island.toggleAvoidToShow(!1),p.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!1)},500),u&&c!==r&&p.store.dispatch.conference.resetConference()):"normal_circuit_congestion"===(null==e?void 0:e.cause)&&u&&c===r?setTimeout(function(){l.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"!==b&&"nethlink"!==b||!u||c===r||p.store.dispatch.conference.resetConference(),("normal_clearing"===e.cause&&("webrtc"===b||"nethlink"===b)||"call_rejected"===(null==e?void 0:e.cause))&&u&&c===r){var w=p.store.getState().conference,C=w.usersList,_=w.pendingUsers,N=C&&Object.keys(C).length>0,I=_&&Object.keys(_).length>0;N||I?setTimeout(function(){l.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})},800):p.store.dispatch.conference.resetConference()}if("interworking"===(null==e?void 0:e.cause)&&u&&c===r&&"waitingConference"!==d&&setTimeout(function(){l.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})},800),"user_busy"===(null==e?void 0:e.cause)){var T=p.store.getState().currentUser,D=T.endpoints,j=T.username,U=((null==D?void 0:D.extension)||[]).map(function(e){return e.id}),E=p.store.getState().currentCall,O=E.incoming,P=E.accepted,A=E.transferring,F=p.store.getState().conference,M=F.isActive,R=F.conferenceStartedFrom;!(O&&!!e.callerNum&&U.includes(e.callerNum))&&(!P||M||A)&&(p.store.dispatch.island.setOperatorBusyActive({callerNumber:e.callerNum||"Unknown"}),setTimeout(function(){p.store.dispatch.player.stopAudioPlayer()},4e3),setTimeout(function(){p.store.dispatch.player.updateStartAudioPlayer({src:a.default,loop:!0}),p.store.dispatch.island.setIslandView("operatorBusy")},600),M&&R===j&&setTimeout(function(){l.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})},4e3))}if("subscriber_absent"===(null==e?void 0:e.cause)){var L=p.store.getState().conference,Q=L.isActive,W=L.conferenceStartedFrom,B=p.store.getState().currentUser.username;if(Q&&W===B){var K=p.store.getState().conference;C=K.usersList,_=K.pendingUsers,N=C&&Object.keys(C).length>0,I=_&&Object.keys(_).length>0;N||I?(setTimeout(function(){l.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})},800),_&&_[e.callerNum]&&p.store.dispatch.conference.removePendingUser(e.callerNum)):p.store.dispatch.conference.resetConference()}}}),A.current.on("extenConnected",function(e){var n=p.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)&&(p.store.dispatch.island.toggleAvoidToShow(!0),p.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!0),l.eventDispatch("phone-island-call-answered",{extensionType:o}))}),A.current.on("extenUpdate",function(e){var n,t,r;O.users.updateExtension(e);var i=p.store.getState().users.extensions,o={},u=p.store.getState().currentUser;for(var c in i){var a=i[c].username,s=i[c].exten;o[a]||(o[a]=[]),o[a].push(s)}var l,d,v=o[e.username],m=Object.keys(e.conversations||{}),f=e.username===T,h=(null===(n=e.conversations)||void 0===n?void 0:n[m[0]])||{};f&&(l=e.exten,d=e.conversations,l&&Object.values(d||{}).forEach(function(e){H(e)&&V.current.set(l,{conversation:e,cachedAt:Date.now()})}));var k=!1;if((null==e?void 0:e.username)===T&&!g.isEmpty(h)&&(null==h?void 0:h.owner)){var y=null===(r=null===(t=null==u?void 0:u.endpoints)||void 0===t?void 0:t.extension)||void 0===r?void 0:r.find(function(e){return e.id===h.owner});y&&"mobile"===y.type&&(k=!0)}if(b.dispatchExtensions(e),g.isEmpty(h)){var S=null==v?void 0:v.some(function(e){var n,t=null===(n=i[e])||void 0===n?void 0:n.conversations;return!g.isEmpty(t)});S||b.dispatchConversations(e)}else k||b.dispatchConversations(e);k&&"busy"===(null==e?void 0:e.status)&&(null==e?void 0:e.username)===T&&(p.store.dispatch.island.toggleAvoidToShow(!0),p.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!0)),e.username===T&&(G(e,h),O.currentUser.updateConversations(e))}),A.current.on("queueUpdate",function(e){O.queue.updateQueue(e);var n,t,r,i=(n=p.store.getState().currentUser.conversations,t=p.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&&U(i),b.dispatchQueueUpdate(e)}),A.current.on("queueMemberUpdate",function(e){O.queue.updateQueueMember(e),b.dispatchQueueMemberUpdate(e)}),A.current.on("takeOver",function(){b.dispatchAlreadyLogin()}),A.current.on("serverReloaded",function(){b.dispatchServerReload()}),A.current.on("parkingUpdate",function(e){b.dispatchParkingUpdate(e)}),A.current.on("actionNethLink",function(e,n){b.dispatchUrlCall(e,n)}),A.current.on("satellite/summary",function(e){var n=(null==e?void 0:e.uniqueid)||(null==e?void 0:e.uniqueId),t=(null==e?void 0:e.linkedid)||(null==e?void 0:e.linkedId);n&&v.dispatchSummaryReady({linkedid:t,uniqueid:n,display_name:null==e?void 0:e.display_name,display_number:null==e?void 0:e.display_number,source:"socket"})}),A.current.on("message",function(e){switch(e.message){case"videoCallStart":var n=p.store.getState(),t=n.currentCall,r=t.incoming,i=t.outgoing,o=t.accepted,u=n.currentUser.default_device,c=n.island,a=c.isFromStreaming,s=c.view;("webrtc"===(null==u?void 0:u.type)||"nethlink"===(null==u?void 0:u.type))&&(r||i||o)&&!a&&"video"!==s&&(O.island.toggleSideViewVisible(!1),O.island.toggleTranscriptionViewVisible(!1),O.island.setIslandView("video")),b.dispatchVideoCallStarted({initiator:"remote",callUser:e.callUser,destUser:e.destUser});break;case"screenSharingStart":O.island.toggleSideViewVisible(!1),O.island.toggleTranscriptionViewVisible(!1),O.island.setIslandView("video"),O.screenShare.update({isJoiningScreenShare:!0,room:e.roomId});break;case"screenSharingStop":var l=p.store.getState().screenShare.room,d=e.roomId;if(l&&d&&"".concat(d)!=="".concat(l))break;O.island.toggleSideViewVisible(!1),O.island.toggleTranscriptionViewVisible(!1),O.island.setIslandView("video"),O.screenShare.update({isLeavingScreenShare:!0});break;default:console.warn("Socket: unknown message type ",e.message)}}),A.current.on("updateDefaultDevice",function(n){b.dispatchDefaultDeviceUpdate(n);var t=p.store.getState().users.extensions,r=p.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],u=r.extension.find(function(e){return e.id===o.exten});u&&(o=e.__assign(e.__assign({},o),{type:u.type})),p.store.dispatch.currentUser.updateCurrentDefaultDevice(o),m.checkMediaPermissions()}}}),A.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=p.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}))}),p.store.dispatch.conference.updateConferenceUsersList(o),p.store.dispatch.conference.updateConferenceId(t)}}),A.current.on("confBridgeEnd",function(e){e&&(null==e?void 0:e.id)&&(p.store.dispatch.conference.resetConference(),l.eventDispatch("phone-island-conference-finished",{}))}),A.current.on("callWebrtc",function(e){l.eventDispatch("phone-island-call-start",{number:e})}),A.current.on("newVoiceMessageCounter",function(e){l.eventDispatch("phone-island-voicemail-received",{voicemailInfo:e})}),A.current.on("streamingSourceUpdate",function(e){l.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;t&&r&&O.streaming.updateSourceImage({source:t,image:r})}}),A.current.on("satellite/transcription",function(e){var n=K.current,t=null==e?void 0:e.uniqueid,r=null==e?void 0:e.linkedid;if(n.linkedid&&t){var i=function(e){return null!=e&&(e===n.linkedid||e===n.uniqueid)};if(!i(t)&&!i(r))return}l.eventDispatch("phone-island-conversation-transcription",e)})}(),function(){clearInterval(P.current),L.current.clear(),Q.current.clear(),A.current.close()}},[I,T,D,E,O]),n.useEffect(function(){var e,n;if(j){console.info("Socket reload requested");var t=p.store.getState().alerts.data,r=p.store.getState().island.forceReload,i=(null===(e=t.socket_down)||void 0===e?void 0:e.active)||!1,o=!(null===(n=A.current)||void 0===n?void 0:n.connected);!o&&null!==W.current&&Date.now()-W.current<3e4&&!r?(console.info("Socket connected and authenticating, skipping reconnection"),U()):i||o||r?(console.info(r?"Force reload requested, performing Socket reconnection":"Socket down detected (alert active or disconnected), performing reconnection"),P.current&&(clearInterval(P.current),P.current=null),setTimeout(function(){A.current.disconnect(),A.current.connect(),U()},100)):(console.info("Socket already connected (no alert active), skipping reconnection"),U())}},[j]),N.default.createElement(N.default.Fragment,null,x)};
2
2
  //# sourceMappingURL=Socket.js.map