@nethesis/phone-island 1.0.8-dev.6 → 1.0.8-dev.7

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");var t=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),i=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js");require("../../node_modules/tslib/tslib.es6.js");var n=require("../../utils/streaming/streamingUtils.js");require("../../store/index.js");var a=require("../../lib/phone/call.js");require("../../node_modules/socket.io-client/build/esm/index.js");var l=require("../../lib/user/default_device.js");require("../../node_modules/mic-check/lib/index.js"),require("../../lib/webrtc/janus.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../Island.js");var r=require("../Button.js"),o=require("../AudioBars.js");require("../../node_modules/i18next/dist/esm/i18next.js");var s=require("../CustomThemedTooltip.js");require("../TranscriptionView/TranscriptionView.js");var u=require("./Timer.js"),c=require("./Number.js"),d=require("./DisplayName.js"),p=require("./Avatar.js"),m=require("./Actions.js"),f=require("../Hangup.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 g=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var v=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),E=require("../StreamingImage/index.js"),x=require("../VideoStreamingSkeleton/index.js"),w=require("../VideoStreamingEmptyState/index.js"),j=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),h=require("../../node_modules/react-redux/es/hooks/useSelector.js");function b(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var N=b(e);function q(e,t){return!e&&!t}var y=e.memo((function(e){var t=e.children;return N.default.createElement("div",{className:"pi-grid pi-min-w-0 pi-self-center pi-gap-1 pi-grid-cols-1 pi-grid-rows-2"},t)}));y.displayName="Details";var _=e.memo((function(e){var n=e.label,a=e.tooltipContent;return n?N.default.createElement("span",{className:"pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-text-iconSecondary","data-tooltip-id":a?"tooltip-queue":void 0,"data-tooltip-content":a||""},N.default.createElement(t.FontAwesomeIcon,{icon:i.faUsers,className:"pi-h-4 pi-w-4"})):null}));_.displayName="QueueBadge";var T=e.memo((function(){var b,T=g.useTranslation().t,A=j.useDispatch(),k=h.useSelector((function(e){return e.currentCall})),C=k.incoming,S=k.accepted,I=k.outgoing,F=k.startTime,P=k.paused,M=k.number,O=k.isRecording,U=k.username,B=k.streamingSourceNumber,L=k.queueName,V=k.queueNumber,W=k.throughQueue,z=h.useSelector((function(e){return e.island})),D=z.isOpen,H=z.isFromStreaming,Q=h.useSelector((function(e){return e.webrtc})).remoteAudioStream,R=h.useSelector((function(e){return e.listen})),G=R.isListen,J=R.isIntrude,K=R.isListenExtension,X=R.isIntrudeExtension,Y=h.useSelector((function(e){return e.alerts})).data,Z=h.useSelector((function(e){return e.currentUser})),$=h.useSelector((function(e){return e.streaming})),ee=$.videoSources,te=$.sourceImages,ie=e.useMemo((function(){return Object.values(Y).filter((function(e){return e.active}))}),[Y]),ne=e.useMemo((function(){return ie.length>0?ie[ie.length-1]:null}),[ie]),ae=e.useMemo((function(){return H&&B&&!S}),[H,B,S]),le=e.useMemo((function(){if(!B||!ee)return{canUnlock:!1,tooltipText:""};var e=Object.values(ee).find((function(e){return(null==e?void 0:e.extension)===B})),t=Boolean((null==e?void 0:e.cmdOpen)&&""!==(null==e?void 0:e.cmdOpen.trim()));return{canUnlock:t,tooltipText:t&&e?"".concat(T("VideoStreaming.Open"),": ").concat(null==e?void 0:e.description):""}}),[B,ee,T]),re=e.useMemo((function(){return""!==U&&"undefined"!==U}),[U]),oe=e.useMemo((function(){return L||V||""}),[L,V]),se=e.useMemo((function(){return W&&oe?"".concat(T("Common.Queue"),": ").concat(oe):""}),[W,oe,T]),ue=e.useCallback((function(){var e;return N.default.createElement("div",{className:"pi-text-gray-600 dark:pi-text-gray-300 pi-font-normal pi-text-sm pi-flex pi-items-center pi-truncate"},N.default.createElement(t.FontAwesomeIcon,{size:"sm",icon:v.faOfficePhone,className:"pi-mr-1"}),N.default.createElement("span",{className:"pi-max-w-16 pi-truncate"},(null===(e=null==Z?void 0:Z.default_device)||void 0===e?void 0:e.description)||T("Common.Physical phone")))}),[null===(b=null==Z?void 0:Z.default_device)||void 0===b?void 0:b.description,T]),ce=e.useCallback((function(e){var n=D?"pi-h-12 pi-w-12":"pi-h-6 pi-w-6",a=D?"pi-h-8":"pi-h-4 pi-w-4 pi-rounded-full",l=D?"pi-w-8 pi-h-8":"pi-h-6 pi-w-6",r="red"===e?"pi-bg-red-400":"pi-bg-green-400",o="red"===e?"pi-text-red-500":"pi-text-green-500";return N.default.createElement("div",{className:"".concat(n," pi-flex pi-justify-center pi-items-center")},N.default.createElement("div",{className:"".concat(a," pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden")},N.default.createElement("span",{className:"".concat(l," pi-animate-ping pi-absolute pi-inline-flex pi-rounded-full ").concat(r," pi-opacity-75")}),N.default.createElement(t.FontAwesomeIcon,{className:"pi-w-4 pi-h-6 pi-rotate-45 ".concat(o),icon:i.faCircle})))}),[D]),de=e.useMemo((function(){var e="pi-grid pi-items-center";return D&&(e="pi-grid pi-items-start",S?e+=" pi-grid-rows-[72px_1fr]":C?e+=" pi-grid-cols-[256px_114px]":I&&(e+=" pi-grid-cols-[1fr_84px]")),ae?"pi-flex pi-flex-col":e}),[D,S,C,I,ae]),pe=e.useMemo((function(){return"pi-grid ".concat(D&&!S&&I?"pi-grid-cols-[48px_1fr]":D&&!S&&C?"pi-grid-cols-[48px_1fr_1px]":D&&S?"pi-grid-cols-[48px_164px_48px]":D||S?"pi-grid-cols-[24px_66px_24px]":"pi-grid-cols-[24px_102px]"," pi-gap-").concat(D?"5":"3"," pi-items-").concat(D?"start":"center"," pi-justify-center pi-w-full")}),[D,S,C,I]),me=e.useMemo((function(){return ae?"pi-grid-cols-3":q(I,S)?"pi-grid-cols-2":S?"pi-grid-cols-1 pi-justify-items-center":"pi-grid-cols-1 pi-justify-items-end"}),[ae,I,S]),fe=e.useCallback((function(){var e=D?"pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover":"pi-relative pi-z-30 pi-h-6 pi-w-6 pi-rounded-sm pi-bg-cover";return G?N.default.createElement(t.FontAwesomeIcon,{className:e,icon:i.faEarListen}):J?N.default.createElement(t.FontAwesomeIcon,{className:e,icon:i.faHandPointUp}):""!==M&&re?N.default.createElement(p.default,null):C&&!re?N.default.createElement(t.FontAwesomeIcon,{className:"".concat(e," pi--rotate-45"),icon:i.faArrowLeft}):!S||I||re?I&&!re?N.default.createElement(t.FontAwesomeIcon,{className:"".concat(e," pi-rotate-[135deg]"),icon:i.faArrowLeft}):null:N.default.createElement(t.FontAwesomeIcon,{className:"".concat(e," pi--rotate-45"),icon:i.faArrowLeft})}),[D,G,J,M,re,C,I,S]),ge=e.useCallback((function(){return D?J?N.default.createElement(y,null,N.default.createElement("span",{className:"pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base"},T("Common.Intrude"),X?" - ".concat(X):""),S?l.isPhysical()?ue():N.default.createElement(u.default,{startTime:F,isNotAlwaysWhite:!0}):X?"".concat(X):""):G?N.default.createElement(y,null,N.default.createElement("span",{className:"pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base"},T("Common.Listen"),K?" - ".concat(K):""),S?l.isPhysical()?ue():N.default.createElement(u.default,{startTime:F,isNotAlwaysWhite:!0}):K?"".concat(K):""):N.default.createElement(y,null,S&&W&&oe?N.default.createElement("div",{className:"pi-flex pi-min-w-0 pi-items-center pi-gap-2"},N.default.createElement("div",{className:"pi-min-w-0 pi-flex-1"},N.default.createElement(d.default,null)),N.default.createElement(_,{label:oe,tooltipContent:se})):N.default.createElement(d.default,null),S?l.isPhysical()?ue():N.default.createElement(u.default,{startTime:F,isNotAlwaysWhite:!0}):N.default.createElement(c.default,null)):null}),[D,J,G,S,F,X,K,T,ue,S,W,oe,se]),ve=e.useCallback((function(){return S&&O?ce("red"):S&&Q&&!l.isPhysical()?N.default.createElement(o.AudioBars,{audioStream:Q,paused:P,size:D?"large":"small"}):S&&l.isPhysical()?ce("green"):null}),[S,O,Q,D,P,ce]),Ee=e.useCallback((function(){if(!ee||0===Object.keys(ee).length||!B)return N.default.createElement(x.default,{className:"pi-w-full pi-h-40 pi-mt-4"});var e=Object.values(ee).find((function(e){return e.extension===B}));return e&&(te[e.id]||e.image)?N.default.createElement(E.default,null):N.default.createElement(w.default,{className:"pi-w-full pi-h-40 pi-mt-4"})}),[B,ee,te]);if(null!==ne)return null;return N.default.createElement("div",{className:"pi-bg-red pi-content-center pi-justify-center"},N.default.createElement("div",{className:de},ae?N.default.createElement(N.default.Fragment,null,N.default.createElement("div",{className:"pi-flex pi-items-center pi-justify-between"},N.default.createElement("div",{className:"pi-flex pi-items-center pi-gap-4"},fe(),N.default.createElement("div",{className:"pi-flex pi-flex-col pi-justify-center pi-space-y-2"},N.default.createElement(d.default,null),N.default.createElement(c.default,null))),N.default.createElement("div",{className:"pi-flex pi-gap-2"},N.default.createElement(f.default,{description:T("Tooltip.Hangup")}),!I&&N.default.createElement(r.Button,{onClick:function(){return a.answerIncomingCall(),void setTimeout((function(){A.island.setIslandView("streamingAnswer")}),200)},variant:"green","data-tooltip-id":"tooltip-answer","data-tooltip-content":T("Tooltip.Answer")||""},N.default.createElement(t.FontAwesomeIcon,{className:"pi-w-5 pi-h-5",icon:i.faPhone})),(null==le?void 0:le.canUnlock)&&N.default.createElement(r.Button,{variant:"default",onClick:n.handleStreamingUnlock,"data-tooltip-id":"tooltip-unlock","data-tooltip-content":null==le?void 0:le.tooltipText},N.default.createElement(t.FontAwesomeIcon,{className:"pi-w-5 pi-h-5",icon:i.faUnlock})))),Ee()):N.default.createElement(N.default.Fragment,null,N.default.createElement("div",{className:pe},fe(),ge(),!D&&!S&&N.default.createElement(d.default,null),!D&&S&&N.default.createElement(u.default,{startTime:F,isNotAlwaysWhite:!0}),ve()),D&&N.default.createElement(N.default.Fragment,null,N.default.createElement("div",{className:"".concat(G||J?"":"pi-grid pi-gap-y-5")},S&&N.default.createElement(m.default,null),N.default.createElement("div",{className:"pi-grid ".concat(me," pi-gap-3.5")},N.default.createElement(f.default,{description:T("Tooltip.Hangup and transfer")}),q(I,S)&&N.default.createElement(r.Button,{onClick:a.answerIncomingCall,variant:"green","data-tooltip-id":"tooltip-answer-left","data-tooltip-content":T("Tooltip.Answer")||""},N.default.createElement(t.FontAwesomeIcon,{className:"pi-w-6 pi-h-6",icon:i.faPhone}))))))),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-answer-left",place:"left"}),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-answer",place:"left"}),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-unlock",place:"left"}),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-display-name",place:"bottom"}),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-queue",place:"bottom"}))}));exports.default=T;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),i=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),n=require("../../utils/streaming/streamingUtils.js"),a=require("../../lib/phone/call.js");require("../../node_modules/tslib/tslib.es6.js"),require("../../store/index.js"),require("../../node_modules/socket.io-client/build/esm/index.js");var l=require("../../lib/user/default_device.js");require("../../node_modules/mic-check/lib/index.js"),require("../../lib/webrtc/janus.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../Island.js");var r=require("../Button.js"),o=require("../AudioBars.js");require("../../node_modules/i18next/dist/esm/i18next.js");var s=require("../CustomThemedTooltip.js");require("../TranscriptionView/TranscriptionView.js");var u=require("./Timer.js"),c=require("./Number.js"),d=require("./DisplayName.js"),p=require("./Avatar.js"),m=require("./Actions.js"),f=require("../Hangup.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 g=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var v=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),E=require("../StreamingImage/index.js"),x=require("../VideoStreamingSkeleton/index.js"),w=require("../VideoStreamingEmptyState/index.js"),j=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),h=require("../../node_modules/react-redux/es/hooks/useSelector.js");function b(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var N=b(e);function q(e,t){return!e&&!t}var y=e.memo((function(e){var t=e.children;return N.default.createElement("div",{className:"pi-grid pi-min-w-0 pi-self-center pi-gap-1 pi-grid-cols-1 pi-grid-rows-2"},t)}));y.displayName="Details";var _=e.memo((function(e){var n=e.label,a=e.tooltipContent;return n?N.default.createElement("span",{className:"pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-text-iconSecondary","data-tooltip-id":a?"tooltip-queue":void 0,"data-tooltip-content":a||""},N.default.createElement(t.FontAwesomeIcon,{icon:i.faUsers,className:"pi-h-4 pi-w-4"})):null}));_.displayName="QueueBadge";var T=e.memo((function(){var b,T=g.useTranslation().t,A=j.useDispatch(),k=h.useSelector((function(e){return e.currentCall})),C=k.incoming,S=k.accepted,I=k.outgoing,F=k.startTime,P=k.paused,M=k.number,O=k.isRecording,U=k.username,B=k.streamingSourceNumber,L=k.queueName,V=k.queueNumber,W=k.throughQueue,z=h.useSelector((function(e){return e.island})),D=z.isOpen,H=z.isFromStreaming,Q=h.useSelector((function(e){return e.webrtc})).remoteAudioStream,R=h.useSelector((function(e){return e.listen})),G=R.isListen,J=R.isIntrude,K=R.isListenExtension,X=R.isIntrudeExtension,Y=h.useSelector((function(e){return e.alerts})).data,Z=h.useSelector((function(e){return e.currentUser})),$=h.useSelector((function(e){return e.streaming})),ee=$.videoSources,te=$.sourceImages,ie=e.useMemo((function(){return Object.values(Y).filter((function(e){return e.active}))}),[Y]),ne=e.useMemo((function(){return ie.length>0?ie[ie.length-1]:null}),[ie]),ae=e.useMemo((function(){return H&&B&&!S}),[H,B,S]),le=e.useMemo((function(){if(!B||!ee)return{canUnlock:!1,tooltipText:""};var e=Object.values(ee).find((function(e){return(null==e?void 0:e.extension)===B})),t=Boolean((null==e?void 0:e.cmdOpen)&&""!==(null==e?void 0:e.cmdOpen.trim()));return{canUnlock:t,tooltipText:t&&e?"".concat(T("VideoStreaming.Open"),": ").concat(null==e?void 0:e.description):""}}),[B,ee,T]),re=e.useMemo((function(){return""!==U&&"undefined"!==U}),[U]),oe=e.useMemo((function(){return L||V||""}),[L,V]),se=e.useMemo((function(){return W&&oe?"".concat(T("Common.Queue"),": ").concat(oe):""}),[W,oe,T]),ue=e.useCallback((function(){var e;return N.default.createElement("div",{className:"pi-text-gray-600 dark:pi-text-gray-300 pi-font-normal pi-text-sm pi-flex pi-items-center pi-truncate"},N.default.createElement(t.FontAwesomeIcon,{size:"sm",icon:v.faOfficePhone,className:"pi-mr-1"}),N.default.createElement("span",{className:"pi-max-w-16 pi-truncate"},(null===(e=null==Z?void 0:Z.default_device)||void 0===e?void 0:e.description)||T("Common.Physical phone")))}),[null===(b=null==Z?void 0:Z.default_device)||void 0===b?void 0:b.description,T]),ce=e.useCallback((function(e){var n=D?"pi-h-12 pi-w-12":"pi-h-6 pi-w-6",a=D?"pi-h-8":"pi-h-4 pi-w-4 pi-rounded-full",l=D?"pi-w-8 pi-h-8":"pi-h-6 pi-w-6",r="red"===e?"pi-bg-red-400":"pi-bg-green-400",o="red"===e?"pi-text-red-500":"pi-text-green-500";return N.default.createElement("div",{className:"".concat(n," pi-flex pi-justify-center pi-items-center")},N.default.createElement("div",{className:"".concat(a," pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden")},N.default.createElement("span",{className:"".concat(l," pi-animate-ping pi-absolute pi-inline-flex pi-rounded-full ").concat(r," pi-opacity-75")}),N.default.createElement(t.FontAwesomeIcon,{className:"pi-w-4 pi-h-6 pi-rotate-45 ".concat(o),icon:i.faCircle})))}),[D]),de=e.useMemo((function(){var e="pi-grid pi-items-center";return D&&(e="pi-grid pi-items-start",S?e+=" pi-grid-rows-[72px_1fr]":C?e+=" pi-grid-cols-[256px_114px]":I&&(e+=" pi-grid-cols-[1fr_84px]")),ae?"pi-flex pi-flex-col":e}),[D,S,C,I,ae]),pe=e.useMemo((function(){return"pi-grid ".concat(D&&!S&&I?"pi-grid-cols-[48px_1fr]":D&&!S&&C?"pi-grid-cols-[48px_1fr_1px]":D&&S?"pi-grid-cols-[48px_164px_48px]":D||S?"pi-grid-cols-[24px_66px_24px]":"pi-grid-cols-[24px_102px]"," pi-gap-").concat(D?"5":"3"," pi-items-").concat(D?"start":"center"," pi-justify-center pi-w-full")}),[D,S,C,I]),me=e.useMemo((function(){return ae?"pi-grid-cols-3":q(I,S)?"pi-grid-cols-2":S?"pi-grid-cols-1 pi-justify-items-center":"pi-grid-cols-1 pi-justify-items-end"}),[ae,I,S]),fe=e.useCallback((function(){var e=D?"pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover":"pi-relative pi-z-30 pi-h-6 pi-w-6 pi-rounded-sm pi-bg-cover";return G?N.default.createElement(t.FontAwesomeIcon,{className:e,icon:i.faEarListen}):J?N.default.createElement(t.FontAwesomeIcon,{className:e,icon:i.faHandPointUp}):""!==M&&re?N.default.createElement(p.default,null):C&&!re?N.default.createElement(t.FontAwesomeIcon,{className:"".concat(e," pi--rotate-45"),icon:i.faArrowLeft}):!S||I||re?I&&!re?N.default.createElement(t.FontAwesomeIcon,{className:"".concat(e," pi-rotate-[135deg]"),icon:i.faArrowLeft}):null:N.default.createElement(t.FontAwesomeIcon,{className:"".concat(e," pi--rotate-45"),icon:i.faArrowLeft})}),[D,G,J,M,re,C,I,S]),ge=e.useCallback((function(){return D?J?N.default.createElement(y,null,N.default.createElement("span",{className:"pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base"},T("Common.Intrude"),X?" - ".concat(X):""),S?l.isPhysical()?ue():N.default.createElement(u.default,{startTime:F,isNotAlwaysWhite:!0}):X?"".concat(X):""):G?N.default.createElement(y,null,N.default.createElement("span",{className:"pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base"},T("Common.Listen"),K?" - ".concat(K):""),S?l.isPhysical()?ue():N.default.createElement(u.default,{startTime:F,isNotAlwaysWhite:!0}):K?"".concat(K):""):N.default.createElement(y,null,S&&W&&oe?N.default.createElement("div",{className:"pi-flex pi-min-w-0 pi-items-center pi-gap-2"},N.default.createElement("div",{className:"pi-min-w-0 pi-flex-1"},N.default.createElement(d.default,null)),N.default.createElement(_,{label:oe,tooltipContent:se})):N.default.createElement(d.default,null),S?l.isPhysical()?ue():N.default.createElement(u.default,{startTime:F,isNotAlwaysWhite:!0}):N.default.createElement(c.default,null)):null}),[D,J,G,S,F,X,K,T,ue,S,W,oe,se]),ve=e.useCallback((function(){return S&&O?ce("red"):S&&Q&&!l.isPhysical()?N.default.createElement(o.AudioBars,{audioStream:Q,paused:P,size:D?"large":"small"}):S&&l.isPhysical()?ce("green"):null}),[S,O,Q,D,P,ce]),Ee=e.useCallback((function(){if(!ee||0===Object.keys(ee).length||!B)return N.default.createElement(x.default,{className:"pi-w-full pi-h-40 pi-mt-4"});var e=Object.values(ee).find((function(e){return e.extension===B}));return e&&(te[e.id]||e.image)?N.default.createElement(E.default,null):N.default.createElement(w.default,{className:"pi-w-full pi-h-40 pi-mt-4"})}),[B,ee,te]);if(null!==ne)return null;return N.default.createElement("div",{className:"pi-bg-red pi-content-center pi-justify-center"},N.default.createElement("div",{className:de},ae?N.default.createElement(N.default.Fragment,null,N.default.createElement("div",{className:"pi-flex pi-items-center pi-justify-between"},N.default.createElement("div",{className:"pi-flex pi-items-center pi-gap-4"},fe(),N.default.createElement("div",{className:"pi-flex pi-flex-col pi-justify-center pi-space-y-2"},N.default.createElement(d.default,null),N.default.createElement(c.default,null))),N.default.createElement("div",{className:"pi-flex pi-gap-2"},N.default.createElement(f.default,{description:T("Tooltip.Hangup")}),!I&&N.default.createElement(r.Button,{onClick:function(){return a.answerIncomingCall(),void setTimeout((function(){A.island.setIslandView("streamingAnswer")}),200)},variant:"green","data-tooltip-id":"tooltip-answer","data-tooltip-content":T("Tooltip.Answer")||""},N.default.createElement(t.FontAwesomeIcon,{className:"pi-w-5 pi-h-5",icon:i.faPhone})),(null==le?void 0:le.canUnlock)&&N.default.createElement(r.Button,{variant:"default",onClick:n.handleStreamingUnlock,"data-tooltip-id":"tooltip-unlock","data-tooltip-content":null==le?void 0:le.tooltipText},N.default.createElement(t.FontAwesomeIcon,{className:"pi-w-5 pi-h-5",icon:i.faUnlock})))),Ee()):N.default.createElement(N.default.Fragment,null,N.default.createElement("div",{className:pe},fe(),ge(),!D&&!S&&N.default.createElement(d.default,null),!D&&S&&N.default.createElement(u.default,{startTime:F,isNotAlwaysWhite:!0}),ve()),D&&N.default.createElement(N.default.Fragment,null,N.default.createElement("div",{className:"".concat(G||J?"":"pi-grid pi-gap-y-5")},S&&N.default.createElement(m.default,null),N.default.createElement("div",{className:"pi-grid ".concat(me," pi-gap-3.5")},N.default.createElement(f.default,{description:T("Tooltip.Hangup and transfer")}),q(I,S)&&N.default.createElement(r.Button,{onClick:a.answerIncomingCall,variant:"green","data-tooltip-id":"tooltip-answer-left","data-tooltip-content":T("Tooltip.Answer")||""},N.default.createElement(t.FontAwesomeIcon,{className:"pi-w-6 pi-h-6",icon:i.faPhone}))))))),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-answer-left",place:"left"}),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-answer",place:"left"}),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-unlock",place:"left"}),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-display-name",place:"bottom"}),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-queue",place:"bottom"}))}));exports.default=T;
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/CallView/index.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useMemo, useCallback, memo } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState, Dispatch } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faPhone,\n faEarListen,\n faHandPointUp,\n faArrowLeft,\n faCircle,\n faUnlock,\n faUsers,\n} from '@fortawesome/free-solid-svg-icons'\nimport { Button } from '../'\nimport Timer from './Timer'\nimport Number from './Number'\nimport DisplayName from './DisplayName'\nimport { AudioBars } from '../'\nimport { answerIncomingCall } from '../../lib/phone/call'\nimport Avatar from './Avatar'\nimport Actions from './Actions'\nimport Hangup from '../Hangup'\nimport { useTranslation } from 'react-i18next'\nimport { faOfficePhone } from '@nethesis/nethesis-solid-svg-icons'\nimport { isPhysical } from '../../lib/user/default_device'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\nimport StreamingImage from '../StreamingImage'\nimport VideoStreamingSkeleton from '../VideoStreamingSkeleton'\nimport VideoStreamingEmptyState from '../VideoStreamingEmptyState'\nimport { handleStreamingUnlock } from '../../utils'\nimport { useDispatch } from 'react-redux'\n\nfunction isAnswerVisible(outgoing: boolean, accepted: boolean): boolean {\n return !outgoing && !accepted\n}\n\nconst Details = memo(({ children }: { children: React.ReactNode }) => (\n <div className='pi-grid pi-min-w-0 pi-self-center pi-gap-1 pi-grid-cols-1 pi-grid-rows-2'>\n {children}\n </div>\n))\nDetails.displayName = 'Details'\n\nconst QueueBadge = memo(\n ({\n label,\n tooltipContent,\n }: {\n label: string\n tooltipContent?: string\n }) => {\n if (!label) {\n return null\n }\n\n return (\n <span\n className='pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-text-iconSecondary'\n data-tooltip-id={tooltipContent ? 'tooltip-queue' : undefined}\n data-tooltip-content={tooltipContent || ''}\n >\n <FontAwesomeIcon icon={faUsers} className='pi-h-4 pi-w-4' />\n </span>\n )\n },\n)\nQueueBadge.displayName = 'QueueBadge'\n\n/**\n * The main view to manage calls, the starting point for calls actions flows\n */\nconst CallView: FC<CallViewProps> = () => {\n const { t } = useTranslation()\n const dispatch = useDispatch<Dispatch>()\n\n const currentCall = useSelector((state: RootState) => state.currentCall)\n const {\n incoming,\n accepted,\n outgoing,\n startTime,\n paused,\n number,\n isRecording,\n username,\n streamingSourceNumber,\n queueName,\n queueNumber,\n throughQueue,\n } = currentCall\n\n const { isOpen, isFromStreaming } = useSelector((state: RootState) => state.island)\n const { remoteAudioStream } = useSelector((state: RootState) => state.webrtc)\n const listenState = useSelector((state: RootState) => state.listen)\n const { isListen, isIntrude, isListenExtension, isIntrudeExtension } = listenState\n const { data: alertsData } = useSelector((state: RootState) => state.alerts)\n const currentUser = useSelector((state: RootState) => state.currentUser)\n const { videoSources, sourceImages } = useSelector((state: RootState) => state.streaming)\n\n const activeAlerts = useMemo(\n () => Object.values(alertsData).filter((alert: any) => alert.active),\n [alertsData],\n )\n\n const latestAlert = useMemo(\n () => (activeAlerts.length > 0 ? activeAlerts[activeAlerts.length - 1] : null),\n [activeAlerts],\n )\n\n const shouldShowStreamingImage = useMemo(\n () => isFromStreaming && streamingSourceNumber && !accepted,\n [isFromStreaming, streamingSourceNumber, accepted],\n )\n\n // Check if unlock button should be shown and get tooltip text\n const unlockData = useMemo(() => {\n if (!streamingSourceNumber || !videoSources) return { canUnlock: false, tooltipText: '' }\n\n const source = Object.values(videoSources).find(\n (source) => source?.extension === streamingSourceNumber,\n )\n\n const canUnlock = Boolean(source?.cmdOpen && source?.cmdOpen.trim() !== '')\n const tooltipText =\n canUnlock && source ? `${t('VideoStreaming.Open')}: ${source?.description}` : ''\n\n return { canUnlock, tooltipText }\n }, [streamingSourceNumber, videoSources, t])\n\n const hasValidUsername = useMemo(() => username !== '' && username !== 'undefined', [username])\n\n const queueLabel = useMemo(() => queueName || queueNumber || '', [queueName, queueNumber])\n\n const queueTooltipContent = useMemo(() => {\n if (!throughQueue || !queueLabel) {\n return ''\n }\n\n return `${t('Common.Queue')}: ${queueLabel}`\n }, [throughQueue, queueLabel, t])\n\n const renderLandlinePhoneDiv = useCallback(\n () => (\n <div className='pi-text-gray-600 dark:pi-text-gray-300 pi-font-normal pi-text-sm pi-flex pi-items-center pi-truncate'>\n <FontAwesomeIcon size='sm' icon={faOfficePhone} className='pi-mr-1' />\n <span className='pi-max-w-16 pi-truncate'>\n {currentUser?.default_device?.description || t('Common.Physical phone')}\n </span>\n </div>\n ),\n [currentUser?.default_device?.description, t],\n )\n\n const renderPulseIcon = useCallback(\n (color: string) => {\n const sizeClasses = !isOpen ? 'pi-h-6 pi-w-6' : 'pi-h-12 pi-w-12'\n const innerSizeClasses = !isOpen ? 'pi-h-4 pi-w-4 pi-rounded-full' : 'pi-h-8'\n const animationSizeClasses = !isOpen ? 'pi-h-6 pi-w-6' : 'pi-w-8 pi-h-8'\n const colorClasses = color === 'red' ? 'pi-bg-red-400' : 'pi-bg-green-400'\n const textColorClasses = color === 'red' ? 'pi-text-red-500' : 'pi-text-green-500'\n\n return (\n <div className={`${sizeClasses} pi-flex pi-justify-center pi-items-center`}>\n <div\n className={`${innerSizeClasses} pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden`}\n >\n <span\n className={`${animationSizeClasses} pi-animate-ping pi-absolute pi-inline-flex pi-rounded-full ${colorClasses} pi-opacity-75`}\n ></span>\n <FontAwesomeIcon\n className={`pi-w-4 pi-h-6 pi-rotate-45 ${textColorClasses}`}\n icon={faCircle}\n />\n </div>\n </div>\n )\n },\n [isOpen],\n )\n\n const callViewClasses = useMemo(() => {\n let baseClasses = 'pi-grid pi-items-center'\n\n if (isOpen) {\n baseClasses = 'pi-grid pi-items-start'\n\n if (accepted) {\n baseClasses += ' pi-grid-rows-[72px_1fr]'\n } else if (incoming) {\n baseClasses += ' pi-grid-cols-[256px_114px]'\n } else if (outgoing) {\n baseClasses += ' pi-grid-cols-[1fr_84px]'\n }\n }\n\n return shouldShowStreamingImage ? 'pi-flex pi-flex-col' : baseClasses\n }, [isOpen, accepted, incoming, outgoing, shouldShowStreamingImage])\n\n const topContentClasses = useMemo(() => {\n let columns = ''\n\n if (isOpen && !accepted && outgoing) {\n columns = 'pi-grid-cols-[48px_1fr]'\n } else if (isOpen && !accepted && incoming) {\n columns = 'pi-grid-cols-[48px_1fr_1px]'\n } else if (isOpen && accepted) {\n columns = 'pi-grid-cols-[48px_164px_48px]'\n } else if (!isOpen && !accepted) {\n columns = 'pi-grid-cols-[24px_102px]'\n } else {\n columns = 'pi-grid-cols-[24px_66px_24px]'\n }\n\n return `pi-grid ${columns} pi-gap-${isOpen ? '5' : '3'} pi-items-${\n isOpen ? 'start' : 'center'\n } pi-justify-center pi-w-full`\n }, [isOpen, accepted, incoming, outgoing])\n\n const getGridClasses = useMemo(() => {\n if (shouldShowStreamingImage) return 'pi-grid-cols-3'\n if (isAnswerVisible(outgoing, accepted)) return 'pi-grid-cols-2'\n if (accepted) return 'pi-grid-cols-1 pi-justify-items-center'\n return 'pi-grid-cols-1 pi-justify-items-end'\n }, [shouldShowStreamingImage, outgoing, accepted])\n\n const renderStatusIcon = useCallback(() => {\n const iconSizeClass = isOpen\n ? 'pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover'\n : 'pi-relative pi-z-30 pi-h-6 pi-w-6 pi-rounded-sm pi-bg-cover'\n\n if (isListen) {\n return <FontAwesomeIcon className={iconSizeClass} icon={faEarListen} />\n }\n\n if (isIntrude) {\n return <FontAwesomeIcon className={iconSizeClass} icon={faHandPointUp} />\n }\n\n if (number !== '' && hasValidUsername) {\n return <Avatar />\n }\n\n if (incoming && !hasValidUsername) {\n return <FontAwesomeIcon className={`${iconSizeClass} pi--rotate-45`} icon={faArrowLeft} />\n }\n\n if (accepted && !outgoing && !hasValidUsername) {\n return <FontAwesomeIcon className={`${iconSizeClass} pi--rotate-45`} icon={faArrowLeft} />\n }\n\n if (outgoing && !hasValidUsername) {\n return (\n <FontAwesomeIcon className={`${iconSizeClass} pi-rotate-[135deg]`} icon={faArrowLeft} />\n )\n }\n\n return null\n }, [isOpen, isListen, isIntrude, number, hasValidUsername, incoming, outgoing, accepted])\n\n const renderDetails = useCallback(() => {\n if (!isOpen) return null\n\n if (isIntrude) {\n return (\n <Details>\n <span className='pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base'>\n {t('Common.Intrude')}\n {isIntrudeExtension ? ` - ${isIntrudeExtension}` : ''}\n </span>\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isNotAlwaysWhite />\n ) : (\n renderLandlinePhoneDiv()\n )\n ) : isIntrudeExtension ? (\n `${isIntrudeExtension}`\n ) : (\n ''\n )}\n </Details>\n )\n }\n\n if (isListen) {\n return (\n <Details>\n <span className='pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base'>\n {t('Common.Listen')}\n {isListenExtension ? ` - ${isListenExtension}` : ''}\n </span>\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isNotAlwaysWhite />\n ) : (\n renderLandlinePhoneDiv()\n )\n ) : isListenExtension ? (\n `${isListenExtension}`\n ) : (\n ''\n )}\n </Details>\n )\n }\n\n return (\n <Details>\n {accepted && throughQueue && queueLabel ? (\n <div className='pi-flex pi-min-w-0 pi-items-center pi-gap-2'>\n <div className='pi-min-w-0 pi-flex-1'>\n <DisplayName />\n </div>\n <QueueBadge label={queueLabel} tooltipContent={queueTooltipContent} />\n </div>\n ) : (\n <DisplayName />\n )}\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isNotAlwaysWhite />\n ) : (\n renderLandlinePhoneDiv()\n )\n ) : (\n <Number />\n )}\n </Details>\n )\n }, [\n isOpen,\n isIntrude,\n isListen,\n accepted,\n startTime,\n isIntrudeExtension,\n isListenExtension,\n t,\n renderLandlinePhoneDiv,\n accepted,\n throughQueue,\n queueLabel,\n queueTooltipContent,\n ])\n\n const renderAudioIndicator = useCallback(() => {\n if (accepted && isRecording) {\n return renderPulseIcon('red')\n }\n\n if (accepted && remoteAudioStream && !isPhysical()) {\n return (\n <AudioBars\n audioStream={remoteAudioStream}\n paused={paused}\n size={isOpen ? 'large' : 'small'}\n />\n )\n }\n\n if (accepted && isPhysical()) {\n return renderPulseIcon('green')\n }\n\n return null\n }, [accepted, isRecording, remoteAudioStream, isOpen, paused, renderPulseIcon])\n\n const renderStreamingContent = useCallback(() => {\n // Show skeleton while videoSources are loading or if streaming source number is not set yet\n if (!videoSources || Object.keys(videoSources).length === 0 || !streamingSourceNumber) {\n return <VideoStreamingSkeleton className='pi-w-full pi-h-40 pi-mt-4' />\n }\n\n // Find the streaming source\n const source = Object.values(videoSources).find(\n (source) => source.extension === streamingSourceNumber,\n )\n\n // If source doesn't exist, show empty state\n if (!source) {\n return <VideoStreamingEmptyState className='pi-w-full pi-h-40 pi-mt-4' />\n }\n\n // Check if image is available\n const hasImage = sourceImages[source.id] || source.image\n\n // If no image available, show empty state\n if (!hasImage) {\n return <VideoStreamingEmptyState className='pi-w-full pi-h-40 pi-mt-4' />\n }\n\n // If we have an image, show StreamingImage component\n return <StreamingImage />\n }, [streamingSourceNumber, videoSources, sourceImages])\n\n // Early return AFTER all hooks have been called\n if (latestAlert !== null) {\n return null\n }\n\n const setVideoStreamingAnswer = () => {\n answerIncomingCall()\n // Set view as video streaming answer with a small delay\n setTimeout(() => {\n dispatch.island.setIslandView('streamingAnswer')\n }, 200)\n }\n\n return (\n <div className='pi-bg-red pi-content-center pi-justify-center'>\n <div className={callViewClasses}>\n {shouldShowStreamingImage ? (\n <>\n <div className='pi-flex pi-items-center pi-justify-between'>\n <div className='pi-flex pi-items-center pi-gap-4'>\n {renderStatusIcon()}\n <div className='pi-flex pi-flex-col pi-justify-center pi-space-y-2'>\n <DisplayName />\n <Number />\n </div>\n </div>\n\n <div className='pi-flex pi-gap-2'>\n <Hangup description={t('Tooltip.Hangup')} />\n {!outgoing && (\n <Button\n onClick={() => setVideoStreamingAnswer()}\n variant='green'\n data-tooltip-id='tooltip-answer'\n data-tooltip-content={t('Tooltip.Answer') || ''}\n >\n <FontAwesomeIcon className='pi-w-5 pi-h-5' icon={faPhone} />\n </Button>\n )}\n {/* Open door button - only show if cmdOpen is valid */}\n {unlockData?.canUnlock && (\n <Button\n variant='default'\n onClick={handleStreamingUnlock}\n data-tooltip-id='tooltip-unlock'\n data-tooltip-content={unlockData?.tooltipText}\n >\n <FontAwesomeIcon className='pi-w-5 pi-h-5' icon={faUnlock} />\n </Button>\n )}\n </div>\n </div>\n\n {renderStreamingContent()}\n </>\n ) : (\n <>\n <div className={topContentClasses}>\n {renderStatusIcon()}\n {renderDetails()}\n\n {!isOpen && !accepted && <DisplayName />}\n {!isOpen && accepted && <Timer startTime={startTime} isNotAlwaysWhite />}\n\n {renderAudioIndicator()}\n </div>\n\n {isOpen && (\n <>\n <div className={`${!(isListen || isIntrude) ? 'pi-grid pi-gap-y-5' : ''}`}>\n {accepted && <Actions />}\n <div className={`pi-grid ${getGridClasses} pi-gap-3.5`}>\n <Hangup description={t('Tooltip.Hangup and transfer')} />\n\n {isAnswerVisible(outgoing, accepted) && (\n <Button\n onClick={answerIncomingCall}\n variant='green'\n data-tooltip-id='tooltip-answer-left'\n data-tooltip-content={t('Tooltip.Answer') || ''}\n >\n <FontAwesomeIcon className='pi-w-6 pi-h-6' icon={faPhone} />\n </Button>\n )}\n </div>\n </div>\n </>\n )}\n </>\n )}\n </div>\n <CustomThemedTooltip id='tooltip-answer-left' place='left' />\n <CustomThemedTooltip id='tooltip-answer' place='left' />\n <CustomThemedTooltip id='tooltip-unlock' place='left' />\n <CustomThemedTooltip id='tooltip-display-name' place='bottom' />\n <CustomThemedTooltip id='tooltip-queue' place='bottom' />\n </div>\n )\n}\n\nexport default memo(CallView)\n\nexport interface CallViewProps {}\n"],"names":["isAnswerVisible","outgoing","accepted","Details","memo","_a","children","React","className","displayName","QueueBadge","label","tooltipContent","createElement","undefined","FontAwesomeIcon","icon","faUsers","t","useTranslation","dispatch","useDispatch","currentCall","useSelector","state","incoming","startTime","paused","number","isRecording","username","streamingSourceNumber","queueName","queueNumber","throughQueue","_b","island","isOpen","isFromStreaming","remoteAudioStream","webrtc","listenState","listen","isListen","isIntrude","isListenExtension","isIntrudeExtension","alertsData","alerts","currentUser","_c","streaming","videoSources","sourceImages","activeAlerts","useMemo","Object","values","filter","alert","active","latestAlert","length","shouldShowStreamingImage","unlockData","canUnlock","tooltipText","source","find","extension","Boolean","cmdOpen","trim","concat","description","hasValidUsername","queueLabel","queueTooltipContent","renderLandlinePhoneDiv","useCallback","size","faOfficePhone","default_device","renderPulseIcon","color","sizeClasses","innerSizeClasses","animationSizeClasses","colorClasses","textColorClasses","faCircle","callViewClasses","baseClasses","topContentClasses","getGridClasses","renderStatusIcon","iconSizeClass","faEarListen","faHandPointUp","Avatar","faArrowLeft","renderDetails","isPhysical","Timer","isNotAlwaysWhite","DisplayName","Number","renderAudioIndicator","AudioBars","audioStream","renderStreamingContent","keys","VideoStreamingSkeleton","id","image","StreamingImage","VideoStreamingEmptyState","Fragment","Hangup","Button","onClick","answerIncomingCall","setTimeout","setIslandView","variant","faPhone","handleStreamingUnlock","faUnlock","Actions","CustomThemedTooltip","place"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/CallView/index.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useMemo, useCallback, memo } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState, Dispatch } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faPhone,\n faEarListen,\n faHandPointUp,\n faArrowLeft,\n faCircle,\n faUnlock,\n faUsers,\n} from '@fortawesome/free-solid-svg-icons'\nimport { Button } from '../'\nimport Timer from './Timer'\nimport Number from './Number'\nimport DisplayName from './DisplayName'\nimport { AudioBars } from '../'\nimport { answerIncomingCall } from '../../lib/phone/call'\nimport Avatar from './Avatar'\nimport Actions from './Actions'\nimport Hangup from '../Hangup'\nimport { useTranslation } from 'react-i18next'\nimport { faOfficePhone } from '@nethesis/nethesis-solid-svg-icons'\nimport { isPhysical } from '../../lib/user/default_device'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\nimport StreamingImage from '../StreamingImage'\nimport VideoStreamingSkeleton from '../VideoStreamingSkeleton'\nimport VideoStreamingEmptyState from '../VideoStreamingEmptyState'\nimport { handleStreamingUnlock } from '../../utils'\nimport { useDispatch } from 'react-redux'\n\nfunction isAnswerVisible(outgoing: boolean, accepted: boolean): boolean {\n return !outgoing && !accepted\n}\n\nconst Details = memo(({ children }: { children: React.ReactNode }) => (\n <div className='pi-grid pi-min-w-0 pi-self-center pi-gap-1 pi-grid-cols-1 pi-grid-rows-2'>\n {children}\n </div>\n))\nDetails.displayName = 'Details'\n\nconst QueueBadge = memo(\n ({\n label,\n tooltipContent,\n }: {\n label: string\n tooltipContent?: string\n }) => {\n if (!label) {\n return null\n }\n\n return (\n <span\n className='pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-text-iconSecondary'\n data-tooltip-id={tooltipContent ? 'tooltip-queue' : undefined}\n data-tooltip-content={tooltipContent || ''}\n >\n <FontAwesomeIcon icon={faUsers} className='pi-h-4 pi-w-4' />\n </span>\n )\n },\n)\nQueueBadge.displayName = 'QueueBadge'\n\n/**\n * The main view to manage calls, the starting point for calls actions flows\n */\nconst CallView: FC<CallViewProps> = () => {\n const { t } = useTranslation()\n const dispatch = useDispatch<Dispatch>()\n\n const currentCall = useSelector((state: RootState) => state.currentCall)\n const {\n incoming,\n accepted,\n outgoing,\n startTime,\n paused,\n number,\n isRecording,\n username,\n streamingSourceNumber,\n queueName,\n queueNumber,\n throughQueue,\n } = currentCall\n\n const { isOpen, isFromStreaming } = useSelector((state: RootState) => state.island)\n const { remoteAudioStream } = useSelector((state: RootState) => state.webrtc)\n const listenState = useSelector((state: RootState) => state.listen)\n const { isListen, isIntrude, isListenExtension, isIntrudeExtension } = listenState\n const { data: alertsData } = useSelector((state: RootState) => state.alerts)\n const currentUser = useSelector((state: RootState) => state.currentUser)\n const { videoSources, sourceImages } = useSelector((state: RootState) => state.streaming)\n\n const activeAlerts = useMemo(\n () => Object.values(alertsData).filter((alert: any) => alert.active),\n [alertsData],\n )\n\n const latestAlert = useMemo(\n () => (activeAlerts.length > 0 ? activeAlerts[activeAlerts.length - 1] : null),\n [activeAlerts],\n )\n\n const shouldShowStreamingImage = useMemo(\n () => isFromStreaming && streamingSourceNumber && !accepted,\n [isFromStreaming, streamingSourceNumber, accepted],\n )\n\n // Check if unlock button should be shown and get tooltip text\n const unlockData = useMemo(() => {\n if (!streamingSourceNumber || !videoSources) return { canUnlock: false, tooltipText: '' }\n\n const source = Object.values(videoSources).find(\n (source) => source?.extension === streamingSourceNumber,\n )\n\n const canUnlock = Boolean(source?.cmdOpen && source?.cmdOpen.trim() !== '')\n const tooltipText =\n canUnlock && source ? `${t('VideoStreaming.Open')}: ${source?.description}` : ''\n\n return { canUnlock, tooltipText }\n }, [streamingSourceNumber, videoSources, t])\n\n const hasValidUsername = useMemo(() => username !== '' && username !== 'undefined', [username])\n\n const queueLabel = useMemo(() => queueName || queueNumber || '', [queueName, queueNumber])\n\n const queueTooltipContent = useMemo(() => {\n if (!throughQueue || !queueLabel) {\n return ''\n }\n\n return `${t('Common.Queue')}: ${queueLabel}`\n }, [throughQueue, queueLabel, t])\n\n const renderLandlinePhoneDiv = useCallback(\n () => (\n <div className='pi-text-gray-600 dark:pi-text-gray-300 pi-font-normal pi-text-sm pi-flex pi-items-center pi-truncate'>\n <FontAwesomeIcon size='sm' icon={faOfficePhone} className='pi-mr-1' />\n <span className='pi-max-w-16 pi-truncate'>\n {currentUser?.default_device?.description || t('Common.Physical phone')}\n </span>\n </div>\n ),\n [currentUser?.default_device?.description, t],\n )\n\n const renderPulseIcon = useCallback(\n (color: string) => {\n const sizeClasses = !isOpen ? 'pi-h-6 pi-w-6' : 'pi-h-12 pi-w-12'\n const innerSizeClasses = !isOpen ? 'pi-h-4 pi-w-4 pi-rounded-full' : 'pi-h-8'\n const animationSizeClasses = !isOpen ? 'pi-h-6 pi-w-6' : 'pi-w-8 pi-h-8'\n const colorClasses = color === 'red' ? 'pi-bg-red-400' : 'pi-bg-green-400'\n const textColorClasses = color === 'red' ? 'pi-text-red-500' : 'pi-text-green-500'\n\n return (\n <div className={`${sizeClasses} pi-flex pi-justify-center pi-items-center`}>\n <div\n className={`${innerSizeClasses} pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden`}\n >\n <span\n className={`${animationSizeClasses} pi-animate-ping pi-absolute pi-inline-flex pi-rounded-full ${colorClasses} pi-opacity-75`}\n ></span>\n <FontAwesomeIcon\n className={`pi-w-4 pi-h-6 pi-rotate-45 ${textColorClasses}`}\n icon={faCircle}\n />\n </div>\n </div>\n )\n },\n [isOpen],\n )\n\n const callViewClasses = useMemo(() => {\n let baseClasses = 'pi-grid pi-items-center'\n\n if (isOpen) {\n baseClasses = 'pi-grid pi-items-start'\n\n if (accepted) {\n baseClasses += ' pi-grid-rows-[72px_1fr]'\n } else if (incoming) {\n baseClasses += ' pi-grid-cols-[256px_114px]'\n } else if (outgoing) {\n baseClasses += ' pi-grid-cols-[1fr_84px]'\n }\n }\n\n return shouldShowStreamingImage ? 'pi-flex pi-flex-col' : baseClasses\n }, [isOpen, accepted, incoming, outgoing, shouldShowStreamingImage])\n\n const topContentClasses = useMemo(() => {\n let columns = ''\n\n if (isOpen && !accepted && outgoing) {\n columns = 'pi-grid-cols-[48px_1fr]'\n } else if (isOpen && !accepted && incoming) {\n columns = 'pi-grid-cols-[48px_1fr_1px]'\n } else if (isOpen && accepted) {\n columns = 'pi-grid-cols-[48px_164px_48px]'\n } else if (!isOpen && !accepted) {\n columns = 'pi-grid-cols-[24px_102px]'\n } else {\n columns = 'pi-grid-cols-[24px_66px_24px]'\n }\n\n return `pi-grid ${columns} pi-gap-${isOpen ? '5' : '3'} pi-items-${\n isOpen ? 'start' : 'center'\n } pi-justify-center pi-w-full`\n }, [isOpen, accepted, incoming, outgoing])\n\n const getGridClasses = useMemo(() => {\n if (shouldShowStreamingImage) return 'pi-grid-cols-3'\n if (isAnswerVisible(outgoing, accepted)) return 'pi-grid-cols-2'\n if (accepted) return 'pi-grid-cols-1 pi-justify-items-center'\n return 'pi-grid-cols-1 pi-justify-items-end'\n }, [shouldShowStreamingImage, outgoing, accepted])\n\n const renderStatusIcon = useCallback(() => {\n const iconSizeClass = isOpen\n ? 'pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover'\n : 'pi-relative pi-z-30 pi-h-6 pi-w-6 pi-rounded-sm pi-bg-cover'\n\n if (isListen) {\n return <FontAwesomeIcon className={iconSizeClass} icon={faEarListen} />\n }\n\n if (isIntrude) {\n return <FontAwesomeIcon className={iconSizeClass} icon={faHandPointUp} />\n }\n\n if (number !== '' && hasValidUsername) {\n return <Avatar />\n }\n\n if (incoming && !hasValidUsername) {\n return <FontAwesomeIcon className={`${iconSizeClass} pi--rotate-45`} icon={faArrowLeft} />\n }\n\n if (accepted && !outgoing && !hasValidUsername) {\n return <FontAwesomeIcon className={`${iconSizeClass} pi--rotate-45`} icon={faArrowLeft} />\n }\n\n if (outgoing && !hasValidUsername) {\n return (\n <FontAwesomeIcon className={`${iconSizeClass} pi-rotate-[135deg]`} icon={faArrowLeft} />\n )\n }\n\n return null\n }, [isOpen, isListen, isIntrude, number, hasValidUsername, incoming, outgoing, accepted])\n\n const renderDetails = useCallback(() => {\n if (!isOpen) return null\n\n if (isIntrude) {\n return (\n <Details>\n <span className='pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base'>\n {t('Common.Intrude')}\n {isIntrudeExtension ? ` - ${isIntrudeExtension}` : ''}\n </span>\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isNotAlwaysWhite />\n ) : (\n renderLandlinePhoneDiv()\n )\n ) : isIntrudeExtension ? (\n `${isIntrudeExtension}`\n ) : (\n ''\n )}\n </Details>\n )\n }\n\n if (isListen) {\n return (\n <Details>\n <span className='pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base'>\n {t('Common.Listen')}\n {isListenExtension ? ` - ${isListenExtension}` : ''}\n </span>\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isNotAlwaysWhite />\n ) : (\n renderLandlinePhoneDiv()\n )\n ) : isListenExtension ? (\n `${isListenExtension}`\n ) : (\n ''\n )}\n </Details>\n )\n }\n\n return (\n <Details>\n {accepted && throughQueue && queueLabel ? (\n <div className='pi-flex pi-min-w-0 pi-items-center pi-gap-2'>\n <div className='pi-min-w-0 pi-flex-1'>\n <DisplayName />\n </div>\n <QueueBadge label={queueLabel} tooltipContent={queueTooltipContent} />\n </div>\n ) : (\n <DisplayName />\n )}\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isNotAlwaysWhite />\n ) : (\n renderLandlinePhoneDiv()\n )\n ) : (\n <Number />\n )}\n </Details>\n )\n }, [\n isOpen,\n isIntrude,\n isListen,\n accepted,\n startTime,\n isIntrudeExtension,\n isListenExtension,\n t,\n renderLandlinePhoneDiv,\n accepted,\n throughQueue,\n queueLabel,\n queueTooltipContent,\n ])\n\n const renderAudioIndicator = useCallback(() => {\n if (accepted && isRecording) {\n return renderPulseIcon('red')\n }\n\n if (accepted && remoteAudioStream && !isPhysical()) {\n return (\n <AudioBars\n audioStream={remoteAudioStream}\n paused={paused}\n size={isOpen ? 'large' : 'small'}\n />\n )\n }\n\n if (accepted && isPhysical()) {\n return renderPulseIcon('green')\n }\n\n return null\n }, [accepted, isRecording, remoteAudioStream, isOpen, paused, renderPulseIcon])\n\n const renderStreamingContent = useCallback(() => {\n // Show skeleton while videoSources are loading or if streaming source number is not set yet\n if (!videoSources || Object.keys(videoSources).length === 0 || !streamingSourceNumber) {\n return <VideoStreamingSkeleton className='pi-w-full pi-h-40 pi-mt-4' />\n }\n\n // Find the streaming source\n const source = Object.values(videoSources).find(\n (source) => source.extension === streamingSourceNumber,\n )\n\n // If source doesn't exist, show empty state\n if (!source) {\n return <VideoStreamingEmptyState className='pi-w-full pi-h-40 pi-mt-4' />\n }\n\n // Check if image is available\n const hasImage = sourceImages[source.id] || source.image\n\n // If no image available, show empty state\n if (!hasImage) {\n return <VideoStreamingEmptyState className='pi-w-full pi-h-40 pi-mt-4' />\n }\n\n // If we have an image, show StreamingImage component\n return <StreamingImage />\n }, [streamingSourceNumber, videoSources, sourceImages])\n\n // Early return AFTER all hooks have been called\n if (latestAlert !== null) {\n return null\n }\n\n const setVideoStreamingAnswer = () => {\n answerIncomingCall()\n // Set view as video streaming answer with a small delay\n setTimeout(() => {\n dispatch.island.setIslandView('streamingAnswer')\n }, 200)\n }\n\n return (\n <div className='pi-bg-red pi-content-center pi-justify-center'>\n <div className={callViewClasses}>\n {shouldShowStreamingImage ? (\n <>\n <div className='pi-flex pi-items-center pi-justify-between'>\n <div className='pi-flex pi-items-center pi-gap-4'>\n {renderStatusIcon()}\n <div className='pi-flex pi-flex-col pi-justify-center pi-space-y-2'>\n <DisplayName />\n <Number />\n </div>\n </div>\n\n <div className='pi-flex pi-gap-2'>\n <Hangup description={t('Tooltip.Hangup')} />\n {!outgoing && (\n <Button\n onClick={() => setVideoStreamingAnswer()}\n variant='green'\n data-tooltip-id='tooltip-answer'\n data-tooltip-content={t('Tooltip.Answer') || ''}\n >\n <FontAwesomeIcon className='pi-w-5 pi-h-5' icon={faPhone} />\n </Button>\n )}\n {/* Open door button - only show if cmdOpen is valid */}\n {unlockData?.canUnlock && (\n <Button\n variant='default'\n onClick={handleStreamingUnlock}\n data-tooltip-id='tooltip-unlock'\n data-tooltip-content={unlockData?.tooltipText}\n >\n <FontAwesomeIcon className='pi-w-5 pi-h-5' icon={faUnlock} />\n </Button>\n )}\n </div>\n </div>\n\n {renderStreamingContent()}\n </>\n ) : (\n <>\n <div className={topContentClasses}>\n {renderStatusIcon()}\n {renderDetails()}\n\n {!isOpen && !accepted && <DisplayName />}\n {!isOpen && accepted && <Timer startTime={startTime} isNotAlwaysWhite />}\n\n {renderAudioIndicator()}\n </div>\n\n {isOpen && (\n <>\n <div className={`${!(isListen || isIntrude) ? 'pi-grid pi-gap-y-5' : ''}`}>\n {accepted && <Actions />}\n <div className={`pi-grid ${getGridClasses} pi-gap-3.5`}>\n <Hangup description={t('Tooltip.Hangup and transfer')} />\n\n {isAnswerVisible(outgoing, accepted) && (\n <Button\n onClick={answerIncomingCall}\n variant='green'\n data-tooltip-id='tooltip-answer-left'\n data-tooltip-content={t('Tooltip.Answer') || ''}\n >\n <FontAwesomeIcon className='pi-w-6 pi-h-6' icon={faPhone} />\n </Button>\n )}\n </div>\n </div>\n </>\n )}\n </>\n )}\n </div>\n <CustomThemedTooltip id='tooltip-answer-left' place='left' />\n <CustomThemedTooltip id='tooltip-answer' place='left' />\n <CustomThemedTooltip id='tooltip-unlock' place='left' />\n <CustomThemedTooltip id='tooltip-display-name' place='bottom' />\n <CustomThemedTooltip id='tooltip-queue' place='bottom' />\n </div>\n )\n}\n\nexport default memo(CallView)\n\nexport interface CallViewProps {}\n"],"names":["isAnswerVisible","outgoing","accepted","Details","memo","_a","children","React","className","displayName","QueueBadge","label","tooltipContent","createElement","undefined","FontAwesomeIcon","icon","faUsers","t","useTranslation","dispatch","useDispatch","currentCall","useSelector","state","incoming","startTime","paused","number","isRecording","username","streamingSourceNumber","queueName","queueNumber","throughQueue","_b","island","isOpen","isFromStreaming","remoteAudioStream","webrtc","listenState","listen","isListen","isIntrude","isListenExtension","isIntrudeExtension","alertsData","alerts","currentUser","_c","streaming","videoSources","sourceImages","activeAlerts","useMemo","Object","values","filter","alert","active","latestAlert","length","shouldShowStreamingImage","unlockData","canUnlock","tooltipText","source","find","extension","Boolean","cmdOpen","trim","concat","description","hasValidUsername","queueLabel","queueTooltipContent","renderLandlinePhoneDiv","useCallback","size","faOfficePhone","default_device","renderPulseIcon","color","sizeClasses","innerSizeClasses","animationSizeClasses","colorClasses","textColorClasses","faCircle","callViewClasses","baseClasses","topContentClasses","getGridClasses","renderStatusIcon","iconSizeClass","faEarListen","faHandPointUp","Avatar","faArrowLeft","renderDetails","isPhysical","Timer","isNotAlwaysWhite","DisplayName","Number","renderAudioIndicator","AudioBars","audioStream","renderStreamingContent","keys","VideoStreamingSkeleton","id","image","StreamingImage","VideoStreamingEmptyState","Fragment","Hangup","Button","onClick","answerIncomingCall","setTimeout","setIslandView","variant","faPhone","handleStreamingUnlock","faUnlock","Actions","CustomThemedTooltip","place"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../utils/customHooks/useIsomorphicLayoutEffect.js");require("../node_modules/tslib/tslib.es6.js");var i=require("../store/index.js"),r=require("./CallView/index.js"),n=require("./KeypadView/index.js"),l=require("./AudioPlayerView/index.js"),u=require("./AlertGuard.js"),a=require("./CallView/BackCall.js"),s=require("./SideView/SideView.js"),o=require("./ViewsTransition.js"),c=require("./RecorderView/index.js"),d=require("./IslandMotion.js"),f=require("./IslandDrag.js"),w=require("./PhysicalRecorderView/index.js"),p=require("./SettingsView/index.js"),m=require("./SwitchDeviceView/index.js"),V=require("../utils/genericFunctions/isBackCallVisible.js"),v=require("./VideoView/index.js"),y=require("./ConferenceView/index.js"),E=require("./ContactView/ContactListView.js"),g=require("./StreamingAnswerView/index.js"),j=require("./OperatorBusyView/index.js"),h=require("./TranscriptionView/TranscriptionView.js"),q=require("../node_modules/react-redux/es/hooks/useSelector.js"),S=require("../node_modules/react-redux/es/hooks/useDispatch.js");function x(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var C=x(e),A=function(x){var A=x.showAlways,I=x.uaType;x.urlParamWithEvent;var R=q.useSelector((function(e){return e.currentCall})),b=R.incoming,P=R.accepted,k=R.outgoing,B=q.useSelector((function(e){return e.island})),D=B.view,T=B.sideViewIsVisible,_=B.transcriptionViewIsVisible,L=B.avoidToShow,O=B.previousView,F=B.isFromStreaming,K=q.useSelector((function(e){return{recording:e.physicalRecorder.recording}})).recording,M=q.useSelector((function(e){return e.alerts.status})).activeAlertsCount,N=q.useSelector((function(e){return e.player})).audioPlayerLoop,W=q.useSelector((function(e){return e.conference})).isActive,G=q.useSelector((function(e){return e.currentUser})),U=G.default_device,z=G.endpoints,H=G.username,J=q.useSelector((function(e){return e.users})).extensions,Q=e.useRef(null),X=S.useDispatch(),Y=e.useRef(null),Z=e.useRef(null),$=e.useRef(null);t.useIsomorphicLayoutEffect((function(){X.player.updatePlayer({audioPlayer:Y,localAudio:Z,remoteAudio:$})}),[]),e.useEffect((function(){var e=i.store.getState().conference,t=e.isActive,r=e.conferenceStartedFrom,n=e.isOwnerInside,l=i.store.getState().currentUser.username;(b||k)&&t&&r===l&&n?X.island.setIslandView("waitingConference"):(b||k)&&F&&P&&!L?X.island.setIslandView("streamingAnswer"):!b&&!k||L||X.island.setIslandView("call")}),[b,k,P,L,W,F]),e.useEffect((function(){K&&X.island.setIslandView("physicalPhoneRecorder")}),[D]);var ee=e.useState(""),te=ee[0],ie=ee[1];e.useEffect((function(){setTimeout((function(){ie(D)}),200)}),[D]);var re,ne=function(){if(!J||!H)return!1;var e=Object.values(J).filter((function(e){return(null==e?void 0:e.username)===H}));return null==e?void 0:e.some((function(e){var t=null==z?void 0:z.extension.find((function(t){return t.id===(null==e?void 0:e.exten)}));return"nethlink"===(null==t?void 0:t.type)&&"offline"!==(null==e?void 0:e.status)}))};return C.default.createElement("div",{ref:Q,className:"pi-absolute pi-min-w-full pi-min-h-full pi-left-0 pi-top-0 pi-overflow-hidden pi-pointer-events-none pi-flex pi-items-center pi-justify-center pi-content-center pi-phone-island-container pi-z-1000"},(b||k||P||A||M>0||"player"===D||"recorder"===D||"physicalPhoneRecorder"===D||"waitingConference"===D&&W||"transfer"===D&&W||"settings"===D&&W||"operatorBusy"===D&&("mobile"===I&&ne()||"desktop"===I&&("webrtc"===(null==U?void 0:U.type)||void 0===(null==U?void 0:U.type)&&!ne()||!ne()&&"physical"===(null==U?void 0:U.type)))||"settings"===D&&("recorder"===O||"player"===O))&&!L&&C.default.createElement(C.default.Fragment,null,C.default.createElement(f.IslandDrag,{islandContainerRef:Q},C.default.createElement(a.default,{isVisible:V.isBackCallActive()}),C.default.createElement(s.default,{isVisible:T,uaType:I}),C.default.createElement(h.default,{isVisible:_}),C.default.createElement(d.IslandMotion,null,C.default.createElement(u.AlertGuard,{uaType:I},(re={call:r.default?C.default.createElement(r.default,null):null,keypad:n.default?C.default.createElement(n.default,null):null,transfer:E.ContactListView?C.default.createElement(E.ContactListView,null):null,player:l.KeypadView?C.default.createElement(l.KeypadView,null):null,recorder:c.RecorderView?C.default.createElement(c.RecorderView,null):null,physicalPhoneRecorder:w.PhysicalRecorderView?C.default.createElement(w.PhysicalRecorderView,null):null,settings:p.SettingsView?C.default.createElement(p.SettingsView,null):null,video:v.VideoView?C.default.createElement(v.VideoView,null):null,switchDevice:m.SwitchDeviceView?C.default.createElement(m.SwitchDeviceView,null):null,waitingConference:y.WaitingConferenceView?C.default.createElement(y.WaitingConferenceView,null):null,streamingAnswer:g.StreamingAnswerView?C.default.createElement(g.StreamingAnswerView,null):null,operatorBusy:j.OperatorBusyView?C.default.createElement(j.OperatorBusyView,null):null},te in re&&re[te]?C.default.createElement(o.default,{forView:te},re[te]):C.default.createElement(C.default.Fragment,null)))))),C.default.createElement("div",{className:"pi-hidden"},C.default.createElement("audio",{loop:N,ref:Y}),C.default.createElement("audio",{muted:!0,ref:Z}),C.default.createElement("audio",{autoPlay:!0,ref:$})))};A.displayName="Island",exports.Island=A;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../utils/customHooks/useIsomorphicLayoutEffect.js");require("../node_modules/tslib/tslib.es6.js");var r=require("../store/index.js"),i=require("./CallView/index.js"),n=require("./KeypadView/index.js"),l=require("./AudioPlayerView/index.js"),u=require("./AlertGuard.js"),a=require("./CallView/BackCall.js"),s=require("./SideView/SideView.js"),o=require("./ViewsTransition.js"),c=require("./RecorderView/index.js"),d=require("./IslandMotion.js"),f=require("./IslandDrag.js"),w=require("./PhysicalRecorderView/index.js"),p=require("./SettingsView/index.js"),m=require("./SwitchDeviceView/index.js"),V=require("../utils/genericFunctions/isBackCallVisible.js"),v=require("./VideoView/index.js"),y=require("./ConferenceView/index.js"),E=require("./ContactView/ContactListView.js"),j=require("./StreamingAnswerView/index.js"),h=require("./OperatorBusyView/index.js"),g=require("./TranscriptionView/TranscriptionView.js"),q=require("../node_modules/react-redux/es/hooks/useSelector.js"),S=require("../node_modules/react-redux/es/hooks/useDispatch.js");function x(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var C=x(e),R=function(x){var R=x.showAlways,b=x.uaType;x.urlParamWithEvent;var A=q.useSelector((function(e){return e.currentCall})),I=A.incoming,P=A.accepted,k=A.outgoing,B=q.useSelector((function(e){return e.island})),D=B.view,T=B.sideViewIsVisible,_=B.transcriptionViewIsVisible,L=B.avoidToShow,O=B.previousView,F=q.useSelector((function(e){return{recording:e.physicalRecorder.recording}})).recording,K=q.useSelector((function(e){return e.alerts.status})).activeAlertsCount,M=q.useSelector((function(e){return e.player})).audioPlayerLoop,N=q.useSelector((function(e){return e.conference})).isActive,W=q.useSelector((function(e){return e.currentUser})),G=W.default_device,U=W.endpoints,z=W.username,H=q.useSelector((function(e){return e.users})).extensions,J=e.useRef(null),Q=S.useDispatch(),X=e.useRef(null),Y=e.useRef(null),Z=e.useRef(null);t.useIsomorphicLayoutEffect((function(){Q.player.updatePlayer({audioPlayer:X,localAudio:Y,remoteAudio:Z})}),[]),e.useEffect((function(){var e=r.store.getState().conference,t=e.isActive,i=e.conferenceStartedFrom,n=e.isOwnerInside,l=r.store.getState().currentUser.username;(I||k)&&t&&i===l&&n?Q.island.setIslandView("waitingConference"):!I&&!k||L||Q.island.setIslandView("call")}),[I,k,L,N]),e.useEffect((function(){F&&Q.island.setIslandView("physicalPhoneRecorder")}),[D]);var $=e.useState(""),ee=$[0],te=$[1];e.useEffect((function(){setTimeout((function(){te(D)}),200)}),[D]);var re,ie=function(){if(!H||!z)return!1;var e=Object.values(H).filter((function(e){return(null==e?void 0:e.username)===z}));return null==e?void 0:e.some((function(e){var t=null==U?void 0:U.extension.find((function(t){return t.id===(null==e?void 0:e.exten)}));return"nethlink"===(null==t?void 0:t.type)&&"offline"!==(null==e?void 0:e.status)}))};return C.default.createElement("div",{ref:J,className:"pi-absolute pi-min-w-full pi-min-h-full pi-left-0 pi-top-0 pi-overflow-hidden pi-pointer-events-none pi-flex pi-items-center pi-justify-center pi-content-center pi-phone-island-container pi-z-1000"},(I||k||P||R||K>0||"player"===D||"recorder"===D||"physicalPhoneRecorder"===D||"waitingConference"===D&&N||"transfer"===D&&N||"settings"===D&&N||"operatorBusy"===D&&("mobile"===b&&ie()||"desktop"===b&&("webrtc"===(null==G?void 0:G.type)||void 0===(null==G?void 0:G.type)&&!ie()||!ie()&&"physical"===(null==G?void 0:G.type)))||"settings"===D&&("recorder"===O||"player"===O))&&!L&&C.default.createElement(C.default.Fragment,null,C.default.createElement(f.IslandDrag,{islandContainerRef:J},C.default.createElement(a.default,{isVisible:V.isBackCallActive()}),C.default.createElement(s.default,{isVisible:T,uaType:b}),C.default.createElement(g.default,{isVisible:_}),C.default.createElement(d.IslandMotion,null,C.default.createElement(u.AlertGuard,{uaType:b},(re={call:i.default?C.default.createElement(i.default,null):null,keypad:n.default?C.default.createElement(n.default,null):null,transfer:E.ContactListView?C.default.createElement(E.ContactListView,null):null,player:l.KeypadView?C.default.createElement(l.KeypadView,null):null,recorder:c.RecorderView?C.default.createElement(c.RecorderView,null):null,physicalPhoneRecorder:w.PhysicalRecorderView?C.default.createElement(w.PhysicalRecorderView,null):null,settings:p.SettingsView?C.default.createElement(p.SettingsView,null):null,video:v.VideoView?C.default.createElement(v.VideoView,null):null,switchDevice:m.SwitchDeviceView?C.default.createElement(m.SwitchDeviceView,null):null,waitingConference:y.WaitingConferenceView?C.default.createElement(y.WaitingConferenceView,null):null,streamingAnswer:j.StreamingAnswerView?C.default.createElement(j.StreamingAnswerView,null):null,operatorBusy:h.OperatorBusyView?C.default.createElement(h.OperatorBusyView,null):null},ee in re&&re[ee]?C.default.createElement(o.default,{forView:ee},re[ee]):C.default.createElement(C.default.Fragment,null)))))),C.default.createElement("div",{className:"pi-hidden"},C.default.createElement("audio",{loop:M,ref:X}),C.default.createElement("audio",{muted:!0,ref:Y}),C.default.createElement("audio",{autoPlay:!0,ref:Z})))};R.displayName="Island",exports.Island=R;
2
2
  //# sourceMappingURL=Island.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Island.js","sources":["../../src/components/Island.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { useState, useRef, useEffect, type FC } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { RootState, Dispatch } from '../store'\nimport { useIsomorphicLayoutEffect } from '../utils'\nimport CallView from './CallView'\nimport KeyboardView from './KeypadView'\nimport AudioPlayerView from './AudioPlayerView'\nimport { AlertGuard } from './AlertGuard'\nimport BackCall from './CallView/BackCall'\nimport SideView from './SideView/SideView'\nimport ViewsTransition from './ViewsTransition'\nimport { RecorderView } from './RecorderView'\nimport IslandMotions from './IslandMotion'\nimport IslandDrag from './IslandDrag'\nimport { PhysicalRecorderView } from './PhysicalRecorderView'\nimport { SettingsView } from './SettingsView'\nimport { SwitchDeviceView } from './SwitchDeviceView'\nimport { isBackCallActive } from '../utils/genericFunctions/isBackCallVisible'\nimport VideoView from './VideoView'\nimport { WaitingConferenceView } from './ConferenceView'\nimport { store } from '../store'\nimport { ContactListView } from './ContactView/ContactListView'\nimport StreamingAnswerView from './StreamingAnswerView'\nimport { OperatorBusyView } from './OperatorBusyView'\nimport { TranscriptionView } from './TranscriptionView'\n\n/**\n * Provides the Island logic\n *\n * @param showAlways Sets the Island ever visible\n */\nexport const Island: FC<IslandProps> = ({ showAlways, uaType, urlParamWithEvent }) => {\n // Get the currentCall info\n const { incoming, accepted, outgoing } = useSelector((state: RootState) => state.currentCall)\n\n const {\n view,\n sideViewIsVisible,\n transcriptionViewIsVisible,\n avoidToShow,\n previousView,\n isFromStreaming,\n } = useSelector((state: RootState) => state.island)\n const { recording } = useSelector((state: RootState) => ({\n recording: state.physicalRecorder.recording,\n }))\n\n // Get activeAlertsCount from island store\n const { activeAlertsCount } = useSelector((state: RootState) => state.alerts.status)\n\n // Get audioPlayerLoop value from player store\n const { audioPlayerLoop } = useSelector((state: RootState) => state.player)\n const { isActive } = useSelector((state: RootState) => state.conference)\n\n // Get user information for device logic\n const { default_device, endpoints, username } = useSelector(\n (state: RootState) => state.currentUser,\n )\n const { extensions } = useSelector((state: RootState) => state.users)\n\n // The Container reference\n const islandContainerRef = useRef<any>(null)\n\n // Initialize useDispatch\n const dispatch = useDispatch<Dispatch>()\n\n const audioPlayer = useRef<HTMLAudioElement>(null)\n const localAudio = useRef<HTMLAudioElement>(null)\n const remoteAudio = useRef<HTMLAudioElement>(null)\n\n useIsomorphicLayoutEffect(() => {\n dispatch.player.updatePlayer({\n audioPlayer: audioPlayer,\n localAudio: localAudio,\n remoteAudio: remoteAudio,\n })\n }, [])\n\n // Handle and apply view switch logic\n // ...set callview as the current view\n useEffect(() => {\n const { isActive, conferenceStartedFrom, isOwnerInside } = store.getState().conference\n const { username } = store.getState().currentUser\n // Check and switch the view\n if ((incoming || outgoing) && isActive && conferenceStartedFrom === username && isOwnerInside) {\n dispatch.island.setIslandView('waitingConference')\n } else if ((incoming || outgoing) && isFromStreaming && accepted && !avoidToShow) {\n dispatch.island.setIslandView('streamingAnswer')\n } else if ((incoming || outgoing) && !avoidToShow) {\n dispatch.island.setIslandView('call')\n }\n }, [incoming, outgoing, accepted, avoidToShow, isActive, isFromStreaming])\n\n useEffect(() => {\n if (recording) {\n dispatch.island.setIslandView('physicalPhoneRecorder')\n }\n }, [view])\n\n const [currentView, setCurrentView] = useState<any>('')\n\n // Handle island view change\n useEffect(() => {\n setTimeout(() => {\n setCurrentView(view)\n }, 200)\n }, [view])\n\n // Check if there's an online NethLink device\n const hasOnlineNethlink = () => {\n if (!extensions || !username) return false\n\n // Get all extensions for current user\n const userExtensions: any = Object.values(extensions).filter(\n (ext) => ext?.username === username,\n )\n\n // Check if any extension is nethlink type and online\n return userExtensions?.some((ext) => {\n const endpointExtension = endpoints?.extension.find((endpoint) => endpoint.id === ext?.exten)\n return endpointExtension?.type === 'nethlink' && ext?.status !== 'offline'\n })\n }\n\n return (\n <div\n ref={islandContainerRef}\n className='pi-absolute pi-min-w-full pi-min-h-full pi-left-0 pi-top-0 pi-overflow-hidden pi-pointer-events-none pi-flex pi-items-center pi-justify-center pi-content-center pi-phone-island-container pi-z-1000'\n >\n {(incoming ||\n outgoing ||\n accepted ||\n showAlways ||\n activeAlertsCount > 0 ||\n view === 'player' ||\n view === 'recorder' ||\n view === 'physicalPhoneRecorder' ||\n (view === 'waitingConference' && isActive) ||\n (view === 'transfer' && isActive) ||\n (view === 'settings' && isActive) ||\n (view === 'operatorBusy' &&\n ((uaType === 'mobile' && hasOnlineNethlink()) ||\n (uaType === 'desktop' &&\n (default_device?.type === 'webrtc' ||\n (default_device?.type === undefined && !hasOnlineNethlink()) ||\n (!hasOnlineNethlink() && default_device?.type === 'physical'))))) ||\n (view === 'settings' && (previousView === 'recorder' || previousView === 'player'))) &&\n !avoidToShow && (\n <>\n <IslandDrag islandContainerRef={islandContainerRef}>\n {/* Add background call visibility logic */}\n <BackCall isVisible={isBackCallActive()} />\n <SideView isVisible={sideViewIsVisible} uaType={uaType} />\n <TranscriptionView isVisible={transcriptionViewIsVisible} />\n <IslandMotions>\n {/* The views logic */}\n <AlertGuard uaType={uaType}>\n {(() => {\n const views = {\n call: CallView ? <CallView /> : null,\n keypad: KeyboardView ? <KeyboardView /> : null,\n transfer: ContactListView ? <ContactListView /> : null,\n player: AudioPlayerView ? <AudioPlayerView /> : null,\n recorder: RecorderView ? <RecorderView /> : null,\n physicalPhoneRecorder: PhysicalRecorderView ? <PhysicalRecorderView /> : null,\n settings: SettingsView ? <SettingsView /> : null,\n video: VideoView ? <VideoView /> : null,\n switchDevice: SwitchDeviceView ? <SwitchDeviceView /> : null,\n waitingConference: WaitingConferenceView ? <WaitingConferenceView /> : null,\n streamingAnswer: StreamingAnswerView ? <StreamingAnswerView /> : null,\n operatorBusy: OperatorBusyView ? <OperatorBusyView /> : null,\n }\n\n return currentView in views && views[currentView as keyof typeof views] ? (\n <ViewsTransition forView={currentView}>\n {views[currentView as keyof typeof views]}\n </ViewsTransition>\n ) : (\n <></>\n )\n })()}\n </AlertGuard>\n </IslandMotions>\n </IslandDrag>\n </>\n )}\n <div className='pi-hidden'>\n <audio loop={audioPlayerLoop} ref={audioPlayer}></audio>\n <audio muted={true} ref={localAudio}></audio>\n <audio autoPlay ref={remoteAudio}></audio>\n </div>\n </div>\n )\n}\n\nIsland.displayName = 'Island'\n\ninterface IslandProps {\n showAlways?: boolean\n uaType?: string\n urlParamWithEvent?: boolean\n}\n"],"names":["Island","_a","showAlways","uaType","urlParamWithEvent","_b","useSelector","state","currentCall","incoming","accepted","outgoing","_c","island","view","sideViewIsVisible","transcriptionViewIsVisible","avoidToShow","previousView","isFromStreaming","recording","physicalRecorder","activeAlertsCount","alerts","status","audioPlayerLoop","player","isActive","conference","_d","currentUser","default_device","endpoints","username","extensions","users","islandContainerRef","useRef","dispatch","useDispatch","audioPlayer","localAudio","remoteAudio","useIsomorphicLayoutEffect","updatePlayer","useEffect","store","getState","conferenceStartedFrom","isOwnerInside","setIslandView","_e","useState","currentView","setCurrentView","setTimeout","views","hasOnlineNethlink","userExtensions","Object","values","filter","ext","some","endpointExtension","extension","find","endpoint","id","exten","type","React","ref","className","undefined","createElement","Fragment","IslandDrag","BackCall","isVisible","isBackCallActive","SideView","TranscriptionView","IslandMotions","AlertGuard","call","CallView","keypad","KeyboardView","transfer","ContactListView","AudioPlayerView","KeypadView","recorder","RecorderView","physicalPhoneRecorder","PhysicalRecorderView","settings","SettingsView","video","VideoView","switchDevice","SwitchDeviceView","waitingConference","WaitingConferenceView","streamingAnswer","StreamingAnswerView","operatorBusy","OperatorBusyView","ViewsTransition","forView","loop","muted","autoPlay","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"Island.js","sources":["../../src/components/Island.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { useState, useRef, useEffect, type FC } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { RootState, Dispatch } from '../store'\nimport { useIsomorphicLayoutEffect } from '../utils'\nimport CallView from './CallView'\nimport KeyboardView from './KeypadView'\nimport AudioPlayerView from './AudioPlayerView'\nimport { AlertGuard } from './AlertGuard'\nimport BackCall from './CallView/BackCall'\nimport SideView from './SideView/SideView'\nimport ViewsTransition from './ViewsTransition'\nimport { RecorderView } from './RecorderView'\nimport IslandMotions from './IslandMotion'\nimport IslandDrag from './IslandDrag'\nimport { PhysicalRecorderView } from './PhysicalRecorderView'\nimport { SettingsView } from './SettingsView'\nimport { SwitchDeviceView } from './SwitchDeviceView'\nimport { isBackCallActive } from '../utils/genericFunctions/isBackCallVisible'\nimport VideoView from './VideoView'\nimport { WaitingConferenceView } from './ConferenceView'\nimport { store } from '../store'\nimport { ContactListView } from './ContactView/ContactListView'\nimport StreamingAnswerView from './StreamingAnswerView'\nimport { OperatorBusyView } from './OperatorBusyView'\nimport { TranscriptionView } from './TranscriptionView'\n\n/**\n * Provides the Island logic\n *\n * @param showAlways Sets the Island ever visible\n */\nexport const Island: FC<IslandProps> = ({ showAlways, uaType, urlParamWithEvent }) => {\n // Get the currentCall info\n const { incoming, accepted, outgoing } = useSelector((state: RootState) => state.currentCall)\n\n const { view, sideViewIsVisible, transcriptionViewIsVisible, avoidToShow, previousView } =\n useSelector((state: RootState) => state.island)\n const { recording } = useSelector((state: RootState) => ({\n recording: state.physicalRecorder.recording,\n }))\n\n // Get activeAlertsCount from island store\n const { activeAlertsCount } = useSelector((state: RootState) => state.alerts.status)\n\n // Get audioPlayerLoop value from player store\n const { audioPlayerLoop } = useSelector((state: RootState) => state.player)\n const { isActive } = useSelector((state: RootState) => state.conference)\n\n // Get user information for device logic\n const { default_device, endpoints, username } = useSelector(\n (state: RootState) => state.currentUser,\n )\n const { extensions } = useSelector((state: RootState) => state.users)\n\n // The Container reference\n const islandContainerRef = useRef<any>(null)\n\n // Initialize useDispatch\n const dispatch = useDispatch<Dispatch>()\n\n const audioPlayer = useRef<HTMLAudioElement>(null)\n const localAudio = useRef<HTMLAudioElement>(null)\n const remoteAudio = useRef<HTMLAudioElement>(null)\n\n useIsomorphicLayoutEffect(() => {\n dispatch.player.updatePlayer({\n audioPlayer: audioPlayer,\n localAudio: localAudio,\n remoteAudio: remoteAudio,\n })\n }, [])\n\n // Handle and apply view switch logic\n // ...set callview as the current view\n useEffect(() => {\n const { isActive, conferenceStartedFrom, isOwnerInside } = store.getState().conference\n const { username } = store.getState().currentUser\n // Check and switch the view\n if ((incoming || outgoing) && isActive && conferenceStartedFrom === username && isOwnerInside) {\n dispatch.island.setIslandView('waitingConference')\n } else if ((incoming || outgoing) && !avoidToShow) {\n dispatch.island.setIslandView('call')\n }\n }, [incoming, outgoing, avoidToShow, isActive])\n\n useEffect(() => {\n if (recording) {\n dispatch.island.setIslandView('physicalPhoneRecorder')\n }\n }, [view])\n\n const [currentView, setCurrentView] = useState<any>('')\n\n // Handle island view change\n useEffect(() => {\n setTimeout(() => {\n setCurrentView(view)\n }, 200)\n }, [view])\n\n // Check if there's an online NethLink device\n const hasOnlineNethlink = () => {\n if (!extensions || !username) return false\n\n // Get all extensions for current user\n const userExtensions: any = Object.values(extensions).filter(\n (ext) => ext?.username === username,\n )\n\n // Check if any extension is nethlink type and online\n return userExtensions?.some((ext) => {\n const endpointExtension = endpoints?.extension.find((endpoint) => endpoint.id === ext?.exten)\n return endpointExtension?.type === 'nethlink' && ext?.status !== 'offline'\n })\n }\n\n return (\n <div\n ref={islandContainerRef}\n className='pi-absolute pi-min-w-full pi-min-h-full pi-left-0 pi-top-0 pi-overflow-hidden pi-pointer-events-none pi-flex pi-items-center pi-justify-center pi-content-center pi-phone-island-container pi-z-1000'\n >\n {(incoming ||\n outgoing ||\n accepted ||\n showAlways ||\n activeAlertsCount > 0 ||\n view === 'player' ||\n view === 'recorder' ||\n view === 'physicalPhoneRecorder' ||\n (view === 'waitingConference' && isActive) ||\n (view === 'transfer' && isActive) ||\n (view === 'settings' && isActive) ||\n (view === 'operatorBusy' &&\n ((uaType === 'mobile' && hasOnlineNethlink()) ||\n (uaType === 'desktop' &&\n (default_device?.type === 'webrtc' ||\n (default_device?.type === undefined && !hasOnlineNethlink()) ||\n (!hasOnlineNethlink() && default_device?.type === 'physical'))))) ||\n (view === 'settings' && (previousView === 'recorder' || previousView === 'player'))) &&\n !avoidToShow && (\n <>\n <IslandDrag islandContainerRef={islandContainerRef}>\n {/* Add background call visibility logic */}\n <BackCall isVisible={isBackCallActive()} />\n <SideView isVisible={sideViewIsVisible} uaType={uaType} />\n <TranscriptionView isVisible={transcriptionViewIsVisible} />\n <IslandMotions>\n {/* The views logic */}\n <AlertGuard uaType={uaType}>\n {(() => {\n const views = {\n call: CallView ? <CallView /> : null,\n keypad: KeyboardView ? <KeyboardView /> : null,\n transfer: ContactListView ? <ContactListView /> : null,\n player: AudioPlayerView ? <AudioPlayerView /> : null,\n recorder: RecorderView ? <RecorderView /> : null,\n physicalPhoneRecorder: PhysicalRecorderView ? <PhysicalRecorderView /> : null,\n settings: SettingsView ? <SettingsView /> : null,\n video: VideoView ? <VideoView /> : null,\n switchDevice: SwitchDeviceView ? <SwitchDeviceView /> : null,\n waitingConference: WaitingConferenceView ? <WaitingConferenceView /> : null,\n streamingAnswer: StreamingAnswerView ? <StreamingAnswerView /> : null,\n operatorBusy: OperatorBusyView ? <OperatorBusyView /> : null,\n }\n\n return currentView in views && views[currentView as keyof typeof views] ? (\n <ViewsTransition forView={currentView}>\n {views[currentView as keyof typeof views]}\n </ViewsTransition>\n ) : (\n <></>\n )\n })()}\n </AlertGuard>\n </IslandMotions>\n </IslandDrag>\n </>\n )}\n <div className='pi-hidden'>\n <audio loop={audioPlayerLoop} ref={audioPlayer}></audio>\n <audio muted={true} ref={localAudio}></audio>\n <audio autoPlay ref={remoteAudio}></audio>\n </div>\n </div>\n )\n}\n\nIsland.displayName = 'Island'\n\ninterface IslandProps {\n showAlways?: boolean\n uaType?: string\n urlParamWithEvent?: boolean\n}\n"],"names":["Island","_a","showAlways","uaType","urlParamWithEvent","_b","useSelector","state","currentCall","incoming","accepted","outgoing","_c","island","view","sideViewIsVisible","transcriptionViewIsVisible","avoidToShow","previousView","recording","physicalRecorder","activeAlertsCount","alerts","status","audioPlayerLoop","player","isActive","conference","_d","currentUser","default_device","endpoints","username","extensions","users","islandContainerRef","useRef","dispatch","useDispatch","audioPlayer","localAudio","remoteAudio","useIsomorphicLayoutEffect","updatePlayer","useEffect","store","getState","conferenceStartedFrom","isOwnerInside","setIslandView","_e","useState","currentView","setCurrentView","setTimeout","views","hasOnlineNethlink","userExtensions","Object","values","filter","ext","some","endpointExtension","extension","find","endpoint","id","exten","type","React","ref","className","undefined","createElement","Fragment","IslandDrag","BackCall","isVisible","isBackCallActive","SideView","TranscriptionView","IslandMotions","AlertGuard","call","CallView","keypad","KeyboardView","transfer","ContactListView","AudioPlayerView","KeypadView","recorder","RecorderView","physicalPhoneRecorder","PhysicalRecorderView","settings","SettingsView","video","VideoView","switchDevice","SwitchDeviceView","waitingConference","WaitingConferenceView","streamingAnswer","StreamingAnswerView","operatorBusy","OperatorBusyView","ViewsTransition","forView","loop","muted","autoPlay","displayName"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),t=require("react"),n=require("../utils/customHooks/useEventListener.js"),i=require("../utils/genericFunctions/eventDispatch.js"),s=require("../store/index.js");require("../node_modules/react-redux/es/index.js");var a=require("../lib/phone/call.js"),r=require("../node_modules/react-redux/es/hooks/useDispatch.js");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=l(t),u="debug-streaming-source",c="debug-streaming-source",d="data:image/svg+xml;charset=UTF-8,".concat(encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="800" viewBox="0 0 1200 800">\n <defs>\n <linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">\n <stop offset="0%" stop-color="#0f172a"/>\n <stop offset="50%" stop-color="#1d4ed8"/>\n <stop offset="100%" stop-color="#16a34a"/>\n </linearGradient>\n </defs>\n <rect width="1200" height="800" fill="url(#bg)"/>\n <circle cx="980" cy="170" r="110" fill="rgba(255,255,255,0.14)"/>\n <circle cx="240" cy="600" r="150" fill="rgba(255,255,255,0.1)"/>\n <rect x="110" y="110" width="980" height="580" rx="36" fill="rgba(15,23,42,0.28)" stroke="rgba(255,255,255,0.3)" stroke-width="6"/>\n <text x="150" y="185" fill="#ffffff" font-family="Arial, Helvetica, sans-serif" font-size="44" font-weight="700">Debug Streaming Source</text>\n <text x="150" y="240" fill="rgba(255,255,255,0.88)" font-family="Arial, Helvetica, sans-serif" font-size="28">Simulated incoming preview for Phone Island testing</text>\n <rect x="150" y="300" width="420" height="220" rx="24" fill="rgba(255,255,255,0.16)"/>\n <rect x="630" y="300" width="310" height="220" rx="24" fill="rgba(15,23,42,0.36)"/>\n <rect x="970" y="300" width="70" height="220" rx="24" fill="rgba(15,23,42,0.5)"/>\n <text x="182" y="372" fill="#e2e8f0" font-family="Arial, Helvetica, sans-serif" font-size="24">Front gate</text>\n <text x="182" y="418" fill="#ffffff" font-family="Arial, Helvetica, sans-serif" font-size="62" font-weight="700">Video Entry Panel</text>\n <text x="182" y="470" fill="#dbeafe" font-family="Arial, Helvetica, sans-serif" font-size="26">Motion preview and answer-state layout</text>\n <text x="182" y="605" fill="#ffffff" font-family="Arial, Helvetica, sans-serif" font-size="30">Testing image only</text>\n </svg>'));exports.CallEvents=function(t){var l=t.sipHost,f=r.useDispatch();return n.useEventListener("phone-island-call-start",(function(e){var t=function(e){return e.replace(/[^0-9+*#]/g,"")}(e.number);a.callNumber(t,l)})),n.useEventListener("phone-island-call-hold",(function(){a.pauseCurrentCall()})),n.useEventListener("phone-island-call-unhold",(function(){a.unpauseCurrentCall()})),n.useEventListener("phone-island-call-mute",(function(){a.muteCurrentCall()})),n.useEventListener("phone-island-call-unmute",(function(){a.unmuteCurrentCall()})),n.useEventListener("phone-island-call-park",(function(){a.parkCurrentCall()})),n.useEventListener("phone-island-call-answer",(function(){a.answerIncomingCall()})),n.useEventListener("phone-island-call-end",(function(){a.hangupCurrentCall()})),n.useEventListener("phone-island-debug-streaming-call-start",(function(){!function(){var t,n=s.store.getState().currentCall,a=n.incoming,r=n.outgoing,l=n.accepted;if(a||r||l)console.warn("Debug streaming simulation skipped because a call is already active");else{var o=s.store.getState().streaming.videoSources;f.streaming.updateVideoSources(e.__assign(e.__assign({},o),((t={})[u]={id:u,extension:c,description:"Debug Streaming Video Source",cmdOpen:"",frameRate:"1",password:"",url:"debug://streaming-source",user:"debug",image:d},t))),f.streaming.updateSourceImage({source:u,image:d}),f.player.stopAudioPlayer(),f.currentCall.reset(),f.listen.reset(),f.island.resetOperatorBusyCompletely(),f.island.setIsFromStreaming(!0),f.island.toggleAvoidToShow(!1),f.island.toggleIsOpen(!0),f.currentCall.updateCurrentCall({incoming:!0,accepted:!1,outgoing:!1,displayName:"Debug Doorbell",number:c,username:c,streamingSourceNumber:c,isDebugStreamingSimulation:!0}),f.island.setIslandView("call"),i.eventDispatch("phone-island-call-ringing",{})}}()})),n.useEventListener("phone-island-call-listen",(function(e){f.listen.setUpdateListenStatus(!0,e.number),i.eventDispatch("phone-island-call-listened",{}),f.island.toggleActionsExpanded(!1)})),n.useEventListener("phone-island-call-intrude",(function(e){f.listen.setUpdateIntrudeStatus(!0,e.number),i.eventDispatch("phone-island-call-intruded",{}),f.island.toggleActionsExpanded(!1)})),o.default.createElement(o.default.Fragment,null)},exports.dispatchOutgoingCallStarted=function(e,t){void 0===e&&(e=""),void 0===t&&(t="");var n={name:e,number:t};i.eventDispatch("phone-island-outgoing-call-started",n)};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),n=require("../utils/customHooks/useEventListener.js"),t=require("../utils/genericFunctions/eventDispatch.js");require("../node_modules/tslib/tslib.es6.js"),require("../store/index.js"),require("../node_modules/react-redux/es/index.js");var s=require("../lib/phone/call.js"),l=require("../node_modules/react-redux/es/hooks/useDispatch.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=u(e);exports.CallEvents=function(e){var u=e.sipHost,r=l.useDispatch();return n.useEventListener("phone-island-call-start",(function(e){var n=function(e){return e.replace(/[^0-9+*#]/g,"")}(e.number);s.callNumber(n,u)})),n.useEventListener("phone-island-call-hold",(function(){s.pauseCurrentCall()})),n.useEventListener("phone-island-call-unhold",(function(){s.unpauseCurrentCall()})),n.useEventListener("phone-island-call-mute",(function(){s.muteCurrentCall()})),n.useEventListener("phone-island-call-unmute",(function(){s.unmuteCurrentCall()})),n.useEventListener("phone-island-call-park",(function(){s.parkCurrentCall()})),n.useEventListener("phone-island-call-answer",(function(){s.answerIncomingCall()})),n.useEventListener("phone-island-call-end",(function(){s.hangupCurrentCall()})),n.useEventListener("phone-island-call-listen",(function(e){r.listen.setUpdateListenStatus(!0,e.number),t.eventDispatch("phone-island-call-listened",{}),r.island.toggleActionsExpanded(!1)})),n.useEventListener("phone-island-call-intrude",(function(e){r.listen.setUpdateIntrudeStatus(!0,e.number),t.eventDispatch("phone-island-call-intruded",{}),r.island.toggleActionsExpanded(!1)})),i.default.createElement(i.default.Fragment,null)},exports.dispatchOutgoingCallStarted=function(e,n){void 0===e&&(e=""),void 0===n&&(n="");var s={name:e,number:n};t.eventDispatch("phone-island-outgoing-call-started",s)};
2
2
  //# sourceMappingURL=CallEvents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CallEvents.js","sources":["../../src/events/CallEvents.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC } from 'react'\nimport { useEventListener, eventDispatch } from '../utils'\nimport { useDispatch } from 'react-redux'\nimport { Dispatch, store } from '../store'\nimport {\n callNumber,\n muteCurrentCall,\n unmuteCurrentCall,\n pauseCurrentCall,\n unpauseCurrentCall,\n parkCurrentCall,\n answerIncomingCall,\n hangupCurrentCall,\n} from '../lib/phone/call'\n\nconst DEBUG_STREAMING_SOURCE_ID = 'debug-streaming-source'\nconst DEBUG_STREAMING_SOURCE_EXTENSION = 'debug-streaming-source'\nconst DEBUG_STREAMING_SOURCE_IMAGE = `data:image/svg+xml;charset=UTF-8,${encodeURIComponent(\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1200\" height=\"800\" viewBox=\"0 0 1200 800\">\n <defs>\n <linearGradient id=\"bg\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n <stop offset=\"0%\" stop-color=\"#0f172a\"/>\n <stop offset=\"50%\" stop-color=\"#1d4ed8\"/>\n <stop offset=\"100%\" stop-color=\"#16a34a\"/>\n </linearGradient>\n </defs>\n <rect width=\"1200\" height=\"800\" fill=\"url(#bg)\"/>\n <circle cx=\"980\" cy=\"170\" r=\"110\" fill=\"rgba(255,255,255,0.14)\"/>\n <circle cx=\"240\" cy=\"600\" r=\"150\" fill=\"rgba(255,255,255,0.1)\"/>\n <rect x=\"110\" y=\"110\" width=\"980\" height=\"580\" rx=\"36\" fill=\"rgba(15,23,42,0.28)\" stroke=\"rgba(255,255,255,0.3)\" stroke-width=\"6\"/>\n <text x=\"150\" y=\"185\" fill=\"#ffffff\" font-family=\"Arial, Helvetica, sans-serif\" font-size=\"44\" font-weight=\"700\">Debug Streaming Source</text>\n <text x=\"150\" y=\"240\" fill=\"rgba(255,255,255,0.88)\" font-family=\"Arial, Helvetica, sans-serif\" font-size=\"28\">Simulated incoming preview for Phone Island testing</text>\n <rect x=\"150\" y=\"300\" width=\"420\" height=\"220\" rx=\"24\" fill=\"rgba(255,255,255,0.16)\"/>\n <rect x=\"630\" y=\"300\" width=\"310\" height=\"220\" rx=\"24\" fill=\"rgba(15,23,42,0.36)\"/>\n <rect x=\"970\" y=\"300\" width=\"70\" height=\"220\" rx=\"24\" fill=\"rgba(15,23,42,0.5)\"/>\n <text x=\"182\" y=\"372\" fill=\"#e2e8f0\" font-family=\"Arial, Helvetica, sans-serif\" font-size=\"24\">Front gate</text>\n <text x=\"182\" y=\"418\" fill=\"#ffffff\" font-family=\"Arial, Helvetica, sans-serif\" font-size=\"62\" font-weight=\"700\">Video Entry Panel</text>\n <text x=\"182\" y=\"470\" fill=\"#dbeafe\" font-family=\"Arial, Helvetica, sans-serif\" font-size=\"26\">Motion preview and answer-state layout</text>\n <text x=\"182\" y=\"605\" fill=\"#ffffff\" font-family=\"Arial, Helvetica, sans-serif\" font-size=\"30\">Testing image only</text>\n </svg>`,\n)}`\n\nexport const CallEvents: FC<{ sipHost: string }> = ({ sipHost }) => {\n const dispatch = useDispatch<Dispatch>()\n\n const startDebugStreamingSimulation = () => {\n const { incoming, outgoing, accepted } = store.getState().currentCall\n\n if (incoming || outgoing || accepted) {\n console.warn('Debug streaming simulation skipped because a call is already active')\n return\n }\n\n const { videoSources } = store.getState().streaming\n\n dispatch.streaming.updateVideoSources({\n ...videoSources,\n [DEBUG_STREAMING_SOURCE_ID]: {\n id: DEBUG_STREAMING_SOURCE_ID,\n extension: DEBUG_STREAMING_SOURCE_EXTENSION,\n description: 'Debug Streaming Video Source',\n cmdOpen: '',\n frameRate: '1',\n password: '',\n url: 'debug://streaming-source',\n user: 'debug',\n image: DEBUG_STREAMING_SOURCE_IMAGE,\n },\n })\n dispatch.streaming.updateSourceImage({\n source: DEBUG_STREAMING_SOURCE_ID,\n image: DEBUG_STREAMING_SOURCE_IMAGE,\n })\n\n dispatch.player.stopAudioPlayer()\n dispatch.currentCall.reset()\n dispatch.listen.reset()\n dispatch.island.resetOperatorBusyCompletely()\n dispatch.island.setIsFromStreaming(true)\n dispatch.island.toggleAvoidToShow(false)\n dispatch.island.toggleIsOpen(true)\n dispatch.currentCall.updateCurrentCall({\n incoming: true,\n accepted: false,\n outgoing: false,\n displayName: 'Debug Doorbell',\n number: DEBUG_STREAMING_SOURCE_EXTENSION,\n username: DEBUG_STREAMING_SOURCE_EXTENSION,\n streamingSourceNumber: DEBUG_STREAMING_SOURCE_EXTENSION,\n isDebugStreamingSimulation: true,\n })\n dispatch.island.setIslandView('call')\n eventDispatch('phone-island-call-ringing', {})\n }\n\n /**\n * Event listner for phone-island-call-* events\n */\n // Clean up phone number from unwanted characters\n const sanitizePhoneNumber = (number: string): any => {\n // Keep only numbers (0-9) and special characters (+, *, #)\n return number.replace(/[^0-9+*#]/g, '')\n }\n\n useEventListener('phone-island-call-start', (data: CallStartTypes) => {\n const number = sanitizePhoneNumber(data.number)\n callNumber(number, sipHost)\n })\n useEventListener('phone-island-call-hold', () => {\n pauseCurrentCall()\n })\n useEventListener('phone-island-call-unhold', () => {\n unpauseCurrentCall()\n })\n useEventListener('phone-island-call-mute', () => {\n muteCurrentCall()\n })\n useEventListener('phone-island-call-unmute', () => {\n unmuteCurrentCall()\n })\n\n useEventListener('phone-island-call-park', () => {\n parkCurrentCall()\n })\n useEventListener('phone-island-call-answer', () => {\n answerIncomingCall()\n })\n useEventListener('phone-island-call-end', () => {\n hangupCurrentCall()\n })\n useEventListener('phone-island-debug-streaming-call-start', () => {\n startDebugStreamingSimulation()\n })\n\n useEventListener('phone-island-call-listen', (data: ListenIntrudeTypes) => {\n dispatch.listen.setUpdateListenStatus(true, data.number)\n eventDispatch('phone-island-call-listened', {})\n dispatch.island.toggleActionsExpanded(false)\n })\n\n useEventListener('phone-island-call-intrude', (data: ListenIntrudeTypes) => {\n dispatch.listen.setUpdateIntrudeStatus(true, data.number)\n eventDispatch('phone-island-call-intruded', {})\n dispatch.island.toggleActionsExpanded(false)\n })\n\n return <></>\n}\n\n/**\n * Dispatch the phone-island-outgoing-call-started event\n */\nexport function dispatchOutgoingCallStarted(name: string = '', number: string = '') {\n const data: OutgoingCallStartedTypes = {\n name,\n number,\n }\n eventDispatch('phone-island-outgoing-call-started', data)\n}\n\ninterface CallStartTypes {\n number: string\n}\n\ninterface OutgoingCallStartedTypes {\n name: string\n number: string\n}\n\ninterface ListenIntrudeTypes {\n number: string\n}\n"],"names":["DEBUG_STREAMING_SOURCE_ID","DEBUG_STREAMING_SOURCE_EXTENSION","DEBUG_STREAMING_SOURCE_IMAGE","concat","encodeURIComponent","_a","sipHost","dispatch","useDispatch","useEventListener","data","number","replace","sanitizePhoneNumber","callNumber","pauseCurrentCall","unpauseCurrentCall","muteCurrentCall","unmuteCurrentCall","parkCurrentCall","answerIncomingCall","hangupCurrentCall","_b","store","getState","currentCall","incoming","outgoing","accepted","console","warn","videoSources","streaming","updateVideoSources","id","extension","description","cmdOpen","frameRate","password","url","user","image","updateSourceImage","source","player","stopAudioPlayer","reset","listen","island","resetOperatorBusyCompletely","setIsFromStreaming","toggleAvoidToShow","toggleIsOpen","updateCurrentCall","displayName","username","streamingSourceNumber","isDebugStreamingSimulation","setIslandView","eventDispatch","startDebugStreamingSimulation","setUpdateListenStatus","toggleActionsExpanded","setUpdateIntrudeStatus","React","name"],"mappings":"qgBAkBMA,EAA4B,yBAC5BC,EAAmC,yBACnCC,EAA+B,oCAAoCC,OAAAC,mBACvE,kzDAwBiD,SAACC,GAAE,IAAAC,EAAOD,EAAAC,QACrDC,EAAWC,EAAAA,cAuGjB,OA1CAC,mBAAiB,2BAA2B,SAACC,GAC3C,IAAMC,EANoB,SAACA,GAE3B,OAAOA,EAAOC,QAAQ,aAAc,GACtC,CAGiBC,CAAoBH,EAAKC,QACxCG,aAAWH,EAAQL,EACrB,IACAG,EAAgBA,iBAAC,0BAA0B,WACzCM,EAAAA,kBACF,IACAN,EAAgBA,iBAAC,4BAA4B,WAC3CO,EAAAA,oBACF,IACAP,EAAgBA,iBAAC,0BAA0B,WACzCQ,EAAAA,iBACF,IACAR,EAAgBA,iBAAC,4BAA4B,WAC3CS,EAAAA,mBACF,IAEAT,EAAgBA,iBAAC,0BAA0B,WACzCU,EAAAA,iBACF,IACAV,EAAgBA,iBAAC,4BAA4B,WAC3CW,EAAAA,oBACF,IACAX,EAAgBA,iBAAC,yBAAyB,WACxCY,EAAAA,mBACF,IACAZ,EAAgBA,iBAAC,2CAA2C,YArFtB,iBAC9Ba,EAAmCC,EAAKA,MAACC,WAAWC,YAAlDC,EAAQJ,EAAAI,SAAEC,EAAQL,EAAAK,SAAEC,aAE5B,GAAIF,GAAYC,GAAYC,EAC1BC,QAAQC,KAAK,2EADf,CAKQ,IAAAC,EAAiBR,EAAKA,MAACC,WAAWQ,UAASD,aAEnDxB,EAASyB,UAAUC,4CACdF,KAAY1B,EAAA,CAAA,GACdL,GAA4B,CAC3BkC,GAAIlC,EACJmC,UAAWlC,EACXmC,YAAa,+BACbC,QAAS,GACTC,UAAW,IACXC,SAAU,GACVC,IAAK,2BACLC,KAAM,QACNC,MAAOxC,GACRG,KAEHE,EAASyB,UAAUW,kBAAkB,CACnCC,OAAQ5C,EACR0C,MAAOxC,IAGTK,EAASsC,OAAOC,kBAChBvC,EAASkB,YAAYsB,QACrBxC,EAASyC,OAAOD,QAChBxC,EAAS0C,OAAOC,8BAChB3C,EAAS0C,OAAOE,oBAAmB,GACnC5C,EAAS0C,OAAOG,mBAAkB,GAClC7C,EAAS0C,OAAOI,cAAa,GAC7B9C,EAASkB,YAAY6B,kBAAkB,CACrC5B,UAAU,EACVE,UAAU,EACVD,UAAU,EACV4B,YAAa,iBACb5C,OAAQV,EACRuD,SAAUvD,EACVwD,sBAAuBxD,EACvByD,4BAA4B,IAE9BnD,EAAS0C,OAAOU,cAAc,QAC9BC,gBAAc,4BAA6B,CAAA,EAzC1C,CA0CH,CAsCEC,EACF,IAEApD,mBAAiB,4BAA4B,SAACC,GAC5CH,EAASyC,OAAOc,uBAAsB,EAAMpD,EAAKC,QACjDiD,gBAAc,6BAA8B,CAAA,GAC5CrD,EAAS0C,OAAOc,uBAAsB,EACxC,IAEAtD,mBAAiB,6BAA6B,SAACC,GAC7CH,EAASyC,OAAOgB,wBAAuB,EAAMtD,EAAKC,QAClDiD,gBAAc,6BAA8B,CAAA,GAC5CrD,EAAS0C,OAAOc,uBAAsB,EACxC,IAEOE,gDACT,sCAKgB,SAA4BC,EAAmBvD,QAAnB,IAAAuD,IAAAA,EAAiB,SAAE,IAAAvD,IAAAA,EAAmB,IAChF,IAAMD,EAAiC,CACrCwD,KAAIA,EACJvD,OAAMA,GAERiD,gBAAc,qCAAsClD,EACtD"}
1
+ {"version":3,"file":"CallEvents.js","sources":["../../src/events/CallEvents.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC } from 'react'\nimport { useEventListener, eventDispatch } from '../utils'\nimport { useDispatch } from 'react-redux'\nimport { Dispatch } from '../store'\nimport {\n callNumber,\n muteCurrentCall,\n unmuteCurrentCall,\n pauseCurrentCall,\n unpauseCurrentCall,\n parkCurrentCall,\n answerIncomingCall,\n hangupCurrentCall,\n} from '../lib/phone/call'\n\nexport const CallEvents: FC<{ sipHost: string }> = ({ sipHost }) => {\n const dispatch = useDispatch<Dispatch>()\n\n /**\n * Event listner for phone-island-call-* events\n */\n // Clean up phone number from unwanted characters\n const sanitizePhoneNumber = (number: string): any => {\n // Keep only numbers (0-9) and special characters (+, *, #)\n return number.replace(/[^0-9+*#]/g, '')\n }\n\n useEventListener('phone-island-call-start', (data: CallStartTypes) => {\n const number = sanitizePhoneNumber(data.number)\n callNumber(number, sipHost)\n })\n useEventListener('phone-island-call-hold', () => {\n pauseCurrentCall()\n })\n useEventListener('phone-island-call-unhold', () => {\n unpauseCurrentCall()\n })\n useEventListener('phone-island-call-mute', () => {\n muteCurrentCall()\n })\n useEventListener('phone-island-call-unmute', () => {\n unmuteCurrentCall()\n })\n\n useEventListener('phone-island-call-park', () => {\n parkCurrentCall()\n })\n useEventListener('phone-island-call-answer', () => {\n answerIncomingCall()\n })\n useEventListener('phone-island-call-end', () => {\n hangupCurrentCall()\n })\n\n useEventListener('phone-island-call-listen', (data: ListenIntrudeTypes) => {\n dispatch.listen.setUpdateListenStatus(true, data.number)\n eventDispatch('phone-island-call-listened', {})\n dispatch.island.toggleActionsExpanded(false)\n })\n\n useEventListener('phone-island-call-intrude', (data: ListenIntrudeTypes) => {\n dispatch.listen.setUpdateIntrudeStatus(true, data.number)\n eventDispatch('phone-island-call-intruded', {})\n dispatch.island.toggleActionsExpanded(false)\n })\n\n return <></>\n}\n\n/**\n * Dispatch the phone-island-outgoing-call-started event\n */\nexport function dispatchOutgoingCallStarted(name: string = '', number: string = '') {\n const data: OutgoingCallStartedTypes = {\n name,\n number,\n }\n eventDispatch('phone-island-outgoing-call-started', data)\n}\n\ninterface CallStartTypes {\n number: string\n}\n\ninterface OutgoingCallStartedTypes {\n name: string\n number: string\n}\n\ninterface ListenIntrudeTypes {\n number: string\n}\n"],"names":["_a","sipHost","dispatch","useDispatch","useEventListener","data","number","replace","sanitizePhoneNumber","callNumber","pauseCurrentCall","unpauseCurrentCall","muteCurrentCall","unmuteCurrentCall","parkCurrentCall","answerIncomingCall","hangupCurrentCall","listen","setUpdateListenStatus","eventDispatch","island","toggleActionsExpanded","setUpdateIntrudeStatus","React","name"],"mappings":"ohBAkBmD,SAACA,GAAE,IAAAC,EAAOD,EAAAC,QACrDC,EAAWC,EAAAA,cAkDjB,OAvCAC,mBAAiB,2BAA2B,SAACC,GAC3C,IAAMC,EANoB,SAACA,GAE3B,OAAOA,EAAOC,QAAQ,aAAc,GACtC,CAGiBC,CAAoBH,EAAKC,QACxCG,aAAWH,EAAQL,EACrB,IACAG,EAAgBA,iBAAC,0BAA0B,WACzCM,EAAAA,kBACF,IACAN,EAAgBA,iBAAC,4BAA4B,WAC3CO,EAAAA,oBACF,IACAP,EAAgBA,iBAAC,0BAA0B,WACzCQ,EAAAA,iBACF,IACAR,EAAgBA,iBAAC,4BAA4B,WAC3CS,EAAAA,mBACF,IAEAT,EAAgBA,iBAAC,0BAA0B,WACzCU,EAAAA,iBACF,IACAV,EAAgBA,iBAAC,4BAA4B,WAC3CW,EAAAA,oBACF,IACAX,EAAgBA,iBAAC,yBAAyB,WACxCY,EAAAA,mBACF,IAEAZ,mBAAiB,4BAA4B,SAACC,GAC5CH,EAASe,OAAOC,uBAAsB,EAAMb,EAAKC,QACjDa,gBAAc,6BAA8B,CAAA,GAC5CjB,EAASkB,OAAOC,uBAAsB,EACxC,IAEAjB,mBAAiB,6BAA6B,SAACC,GAC7CH,EAASe,OAAOK,wBAAuB,EAAMjB,EAAKC,QAClDa,gBAAc,6BAA8B,CAAA,GAC5CjB,EAASkB,OAAOC,uBAAsB,EACxC,IAEOE,gDACT,sCAKgB,SAA4BC,EAAmBlB,QAAnB,IAAAkB,IAAAA,EAAiB,SAAE,IAAAlB,IAAAA,EAAmB,IAChF,IAAMD,EAAiC,CACrCmB,KAAIA,EACJlB,OAAMA,GAERa,gBAAc,qCAAsCd,EACtD"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("../webrtc/messages.js"),r=require("../../store/index.js"),n=require("../user/default_device.js"),s=require("../../services/astproxy.js"),i=require("../../static/dtmf/index.js");require("react");var o=require("../../utils/genericFunctions/eventDispatch.js"),a=require("../../services/user.js"),c=require("../../utils/genericFunctions/isEmpty.js"),u=require("../../utils/streaming/getStreamingSourceId.js");function l(){var e=r.store.getState().currentCall,i=e.outgoing,c=e.accepted,l=e.streamingSourceNumber,d=e.isDebugStreamingSimulation,p=r.store.getState().island.isFromStreaming;if(d)return r.store.dispatch.player.stopAudioPlayer(),r.store.dispatch.currentCall.reset(),r.store.dispatch.listen.reset(),r.store.dispatch.island.setIsFromStreaming(!1),r.store.dispatch.island.resetOperatorBusy(),void o.eventDispatch("phone-island-call-ended",{});if(i||c){if(n.isWebRTC()?t.hangup():s.hangupPhysical(),r.store.dispatch.player.stopAudioPlayer(),r.store.dispatch.currentCall.reset(),r.store.dispatch.listen.reset(),p&&l){var v=u.getStreamingSourceId(l);v&&(a.unsubscribe({id:v}).then((function(){return console.debug("Unsubscribed from streaming source: ".concat(v))})).catch((function(e){return console.error("Error unsubscribing from streaming source:",e)})),r.store.dispatch.streaming.clearSourceImages())}r.store.dispatch.island.setIsFromStreaming(!1)}r.store.dispatch.island.resetOperatorBusy(),o.eventDispatch("phone-island-call-ended",{})}function d(){n.isWebRTC()?t.unpauseWebRTC()&&(r.store.dispatch.currentCall.updateCurrentCall({paused:!1}),r.store.dispatch.player.playRemoteAudio()):s.pausePhysical(!1);o.eventDispatch("phone-island-call-unheld",{})}function p(t){return e.__awaiter(this,void 0,void 0,(function(){var n,i,o;return e.__generator(this,(function(e){switch(e.label){case 0:return n=r.store.getState().currentCall.conversationId,i=r.store.getState().currentUser.default_device,o=(null==i?void 0:i.id)||(null==i?void 0:i.exten),n&&o&&t?[4,s.attendedTransfer({convid:n,to:t,endpointId:o})]:[3,2];case 1:return[2,e.sent()];case 2:return[2]}}))}))}function v(){var t;return e.__awaiter(this,void 0,void 0,(function(){var n,i,a,u,l,d,p,v,f,h,g,C,m,b;return e.__generator(this,(function(e){switch(e.label){case 0:if(n=null===(t=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===t?void 0:t.currentCall,i=n.accepted,a=n.chSource,u=n.chDest,l=n.incoming,d=n.outgoing,p=n.incomingSocket,v=n.outgoingSocket,f=n.conversationId,h=r.store.getState().currentUser.default_device,g=(null==h?void 0:h.id)||(null==h?void 0:h.exten),C="",i&&(l||p)&&!c.isEmpty(a)?C=null==a?void 0:a.callerNum:i&&(d||v)&&!c.isEmpty(u)&&(C=null==u?void 0:u.callerNum),""===g||""===f||""===C)return[3,4];if(!(m={convid:null==f?void 0:f.toString(),addEndpointId:null==C?void 0:C.toString(),ownerEndpointId:null==g?void 0:g.toString()}))return[3,4];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,s.startConf(m)];case 2:return e.sent()?(r.store.dispatch.currentCall.updateCurrentCall({conferencing:!0,paused:!1}),o.eventDispatch("phone-island-call-conferenced",{}),[2,!0]):[2,!1];case 3:return b=e.sent(),console.error(b),[2,!1];case 4:return[2,!1]}}))}))}function f(){return e.__awaiter(this,void 0,void 0,(function(){var t,n,i;return e.__generator(this,(function(e){switch(e.label){case 0:if(""===(t=r.store.getState().conference.conferenceId))return[3,4];if(!(n={confId:null==t?void 0:t.toString()}))return[3,4];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,s.endConf(n)];case 2:return e.sent()?(o.eventDispatch("phone-island-owner-conference-finished",{}),[2,!0]):[2,!1];case 3:return i=e.sent(),console.error(i),[2,!1];case 4:return[2,!1]}}))}))}var h=function(){return!!r.store.getState().island.isConferenceList},g=function(e,t){var n=r.store.getState(),s=n.currentUser.username,i=n.conference,a=i.isActive,c=i.isOwnerInside,u=i.conferenceId,d=n.users.extensions;!a&&s&&(t.conference.setConferenceActive(!0),t.conference.setConferenceStartedFrom(s));var p=d?Object.values(d).find((function(t){return t.exten===e})):null,v=(null==p?void 0:p.name)||e;t.conference.addPendingUser({id:"".concat(u,"-").concat(e),name:v,owner:!1,muted:!1,extenId:e,joinTime:Date.now()}),c&&(l(),t.conference.toggleIsOwnerInside(!1)),requestAnimationFrame((function(){setTimeout((function(){o.eventDispatch("phone-island-call-start",{number:e})}),1e3)}))};function C(t,r){return e.__awaiter(this,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return d(),[4,p(t)];case 1:return e.sent()&&(r.currentCall.updateCurrentCall({transferring:!0,paused:!1}),requestAnimationFrame((function(){r.player.playRemoteAudio(),o.eventDispatch("phone-island-call-transfered",{})}))),[2]}}))}))}exports.answerIncomingCall=function(){if(r.store.getState().currentCall.isDebugStreamingSimulation)return r.store.dispatch.currentCall.updateCurrentCall({incoming:!1,accepted:!0,startTime:"".concat(Math.floor(Date.now()/1e3))}),r.store.dispatch.island.setIslandView("streamingAnswer"),r.store.dispatch.island.toggleIsOpen(!0),r.store.dispatch.island.resetOperatorBusyCompletely(),void o.eventDispatch("phone-island-call-answered",{extensionType:"debug"});n.isWebRTC()?t.answerWebRTC():s.answerPhysical(),r.store.dispatch.island.resetOperatorBusyCompletely()},exports.attendedTransfer=p,exports.blindTransferFunction=function(t,n){return e.__awaiter(this,void 0,void 0,(function(){var i;return e.__generator(this,(function(e){switch(e.label){case 0:return(i=r.store.getState().currentCall.conversationId)&&n&&t?[4,s.blindTransfer({convid:i,to:t,endpointId:n})]:[3,2];case 1:return[2,e.sent()];case 2:return[2]}}))}))},exports.callNumber=function(e,i){var a="sip:".concat(e,"@").concat(i);r.store.dispatch.island.resetOperatorBusy(),r.store.dispatch.island.setOperatorBusyCalledNumber(e),n.isWebRTC()?t.callSipURI(a):s.callPhysical(e),o.eventDispatch("phone-island-call-started",{})},exports.clickTransferOrConference=function(t,n){return e.__awaiter(void 0,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return h()?r.store.getState().conference.isActive?[3,2]:[4,v()]:[3,3];case 1:if(!e.sent())return[2];e.label=2;case 2:return g(t,n),[3,4];case 3:C(t,n),e.label=4;case 4:return[2]}}))}))},exports.endConference=f,exports.forceHangupConversation=function(){var e=r.store.getState().currentUser.conversations,t=function(t){Object.keys(e[t]).forEach((function(e){s.forceHangup({convid:e,endpointId:t,endpointType:"extension"})}))};for(var n in e)t(n)},exports.handleAttendedTransfer=C,exports.hangupAllExtensions=function(){var e=r.store.getState().currentUser.conversations,t=function(t){Object.keys(e[t]).forEach((function(e){s.hangupConversation({convid:e,endpointId:t})}))};for(var n in e)t(n)},exports.hangupCurrentCall=l,exports.hangupCurrentPhysicalRecording=function(){s.hangupPhysicalRecordingCall(),r.store.dispatch.player.stopAudioPlayer(),r.store.dispatch.physicalRecorder.reset(),r.store.dispatch.physicalRecorder.setRecording(!1),r.store.dispatch.island.setIslandView(null),r.store.dispatch.listen.reset(),o.eventDispatch("phone-island-call-ended",{})},exports.isInsideConferenceList=h,exports.joinConference=function(){return e.__awaiter(this,void 0,void 0,(function(){var t,n,i,a;return e.__generator(this,(function(e){switch(e.label){case 0:if(t=r.store.getState().currentUser.default_device,""===(n=(null==t?void 0:t.id)||(null==t?void 0:t.exten)))return[3,4];if(!(i={endpointId:null==n?void 0:n.toString()}))return[3,4];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,s.joinMyConf(i)];case 2:return e.sent()?(o.eventDispatch("phone-island-owner-conference-enter",{}),[2,!0]):[2,!1];case 3:return a=e.sent(),console.error(a),[2,!1];case 4:return[2,!1]}}))}))},exports.muteAllUsersConference=function(t,n){var i;return e.__awaiter(this,void 0,void 0,(function(){var o,a,c,u,l,d,p,v;return e.__generator(this,(function(e){switch(e.label){case 0:if(""===t)return[2,!1];if(!(o=r.store.getState().conference.usersList)||0===Object.keys(o).length)return[2,!1];e.label=1;case 1:e.trys.push([1,6,,7]),a=Object.values(o),c=n?s.unmuteUserConf:s.muteUserConf,u=0,l=a,e.label=2;case 2:return u<l.length?(d=l[u],p={confId:null==t?void 0:t.toString(),userId:null===(i=d.id)||void 0===i?void 0:i.toString()},[4,c(p)]):[3,5];case 3:e.sent()&&r.store.dispatch.conference.toggleUserMuted({extenId:d.extenId,muted:!n}),e.label=4;case 4:return u++,[3,2];case 5:return[2,!0];case 6:return v=e.sent(),console.error(v),[2,!1];case 7:return[2]}}))}))},exports.muteCurrentCall=function(){n.isWebRTC()?t.muteWebRTC()&&r.store.dispatch.currentCall.updateCurrentCall({muted:!0}):s.mutePhysical(!0),o.eventDispatch("phone-island-call-muted",{})},exports.muteUserConference=function(t,r,n){return e.__awaiter(this,void 0,void 0,(function(){var i,o;return e.__generator(this,(function(e){switch(e.label){case 0:if(""===t||""===r)return[2,!1];i={confId:null==t?void 0:t.toString(),userId:null==r?void 0:r.toString()},e.label=1;case 1:return e.trys.push([1,3,,4]),[4,(n?s.unmuteUserConf:s.muteUserConf)(i)];case 2:return[2,!!e.sent()];case 3:return o=e.sent(),console.error(o),[2,!1];case 4:return[2]}}))}))},exports.parkCurrentCall=function(){var e,t,n,i,a=null===(t=null===(e=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===e?void 0:e.currentCall)||void 0===t?void 0:t.conversationId,c=null===(i=null===(n=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===n?void 0:n.currentUser)||void 0===i?void 0:i.conversations,u={};if(a){if(c)for(var l in c)if(c.hasOwnProperty(l)){var d=c[l];Object.keys(d).length>0&&(u={numberParkId:l,idConversation:a})}Object.keys(u).length>0&&(null==u?void 0:u.numberParkId)&&(s.parkConversation({applicantId:null==u?void 0:u.numberParkId,convid:a,endpointId:null==u?void 0:u.numberParkId}),r.store.dispatch.currentCall.setParked(!0),o.eventDispatch("phone-island-call-parked",{}))}},exports.pauseCurrentCall=function(){n.isWebRTC()?t.pauseWebRTC()&&(r.store.dispatch.currentCall.updateCurrentCall({paused:!0}),r.store.dispatch.player.pauseRemoteAudio()):s.pausePhysical(!0),o.eventDispatch("phone-island-call-held",{})},exports.playDtmfAudio=function(e){"*"===e&&(e="star"),"#"===e&&(e="pound"),r.store.dispatch.player.updateStartAudioPlayer({src:i.default["dtmf_".concat(e)]})},exports.recordCurrentCall=function(t){var n,i,o,a;return e.__awaiter(this,void 0,void 0,(function(){var c,u,l,d,p,v,f;return e.__generator(this,(function(e){switch(e.label){case 0:return r.store.dispatch.currentCall.updateRecordingStatus(!t),c=null===(i=null===(n=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===n?void 0:n.currentUser)||void 0===i?void 0:i.conversations,(u=function(e){for(var t in e)if(0!==Object.keys(e[t]).length){var r=Object.values(e[t])[0];return{id:r.id,recording:r.recording}}return null}(c))?[3,1]:[2];case 1:switch(l=null===(o=null==u?void 0:u.id)||void 0===o?void 0:o.match(/\/(\d+)-/),d=l[1],p={convid:null===(a=null==u?void 0:u.id)||void 0===a?void 0:a.toString(),endpointId:null==d?void 0:d.toString()},v="",null==u?void 0:u.recording){case"false":v="start_record";break;case"true":v="mute_record";break;case"mute":v="unmute_record";break;default:v=""}if(!p)return[3,5];e.label=2;case 2:return e.trys.push([2,4,,5]),[4,s.toggleRecord(v,p)];case 3:return e.sent(),[3,5];case 4:return f=e.sent(),console.error(f),[2,[]];case 5:return[2]}}))}))},exports.removeUserConference=function(t,n){return e.__awaiter(this,void 0,void 0,(function(){var i,o,a=this;return e.__generator(this,(function(c){switch(c.label){case 0:if(""===t||""===n)return[3,4];if(!(i={confId:null==t?void 0:t.toString(),extenId:null==n?void 0:n.toString()}))return[3,4];c.label=1;case 1:return c.trys.push([1,3,,4]),[4,s.hangupUserConf(i)];case 2:return c.sent()?(setTimeout((function(){return e.__awaiter(a,void 0,void 0,(function(){var t,s;return e.__generator(this,(function(e){switch(e.label){case 0:return t=r.store.getState().conference.usersList,s=Object.values(t||{}).filter((function(e){return!e.owner&&e.extenId!==n})).length,0!==s?[3,2]:[4,f()];case 1:e.sent(),e.label=2;case 2:return[2]}}))}))}),500),[2,!0]):[2,!1];case 3:return o=c.sent(),console.error(o),[2,!1];case 4:return[2,!1]}}))}))},exports.startConference=v,exports.unmuteCurrentCall=function(){n.isWebRTC()?t.unmuteWebRTC()&&r.store.dispatch.currentCall.updateCurrentCall({muted:!1}):s.mutePhysical(!1),o.eventDispatch("phone-island-call-unmuted",{})},exports.unpauseCurrentCall=d,exports.waitingConferenceView=g;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("../webrtc/messages.js"),r=require("../../store/index.js"),n=require("../user/default_device.js"),s=require("../../services/astproxy.js"),o=require("../../static/dtmf/index.js");require("react");var i=require("../../utils/genericFunctions/eventDispatch.js"),a=require("../../services/user.js"),c=require("../../utils/genericFunctions/isEmpty.js"),u=require("../../utils/streaming/getStreamingSourceId.js");function l(){var e=r.store.getState().currentCall,o=e.outgoing,c=e.accepted,l=e.streamingSourceNumber,d=r.store.getState().island.isFromStreaming;if(o||c){if(n.isWebRTC()?t.hangup():s.hangupPhysical(),r.store.dispatch.player.stopAudioPlayer(),r.store.dispatch.currentCall.reset(),r.store.dispatch.listen.reset(),d&&l){var p=u.getStreamingSourceId(l);p&&(a.unsubscribe({id:p}).then((function(){return console.debug("Unsubscribed from streaming source: ".concat(p))})).catch((function(e){return console.error("Error unsubscribing from streaming source:",e)})),r.store.dispatch.streaming.clearSourceImages())}r.store.dispatch.island.setIsFromStreaming(!1)}r.store.dispatch.island.resetOperatorBusy(),i.eventDispatch("phone-island-call-ended",{})}function d(){n.isWebRTC()?t.unpauseWebRTC()&&(r.store.dispatch.currentCall.updateCurrentCall({paused:!1}),r.store.dispatch.player.playRemoteAudio()):s.pausePhysical(!1);i.eventDispatch("phone-island-call-unheld",{})}function p(t){return e.__awaiter(this,void 0,void 0,(function(){var n,o,i;return e.__generator(this,(function(e){switch(e.label){case 0:return n=r.store.getState().currentCall.conversationId,o=r.store.getState().currentUser.default_device,i=(null==o?void 0:o.id)||(null==o?void 0:o.exten),n&&i&&t?[4,s.attendedTransfer({convid:n,to:t,endpointId:i})]:[3,2];case 1:return[2,e.sent()];case 2:return[2]}}))}))}function v(){var t;return e.__awaiter(this,void 0,void 0,(function(){var n,o,a,u,l,d,p,v,f,h,g,C,m,b;return e.__generator(this,(function(e){switch(e.label){case 0:if(n=null===(t=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===t?void 0:t.currentCall,o=n.accepted,a=n.chSource,u=n.chDest,l=n.incoming,d=n.outgoing,p=n.incomingSocket,v=n.outgoingSocket,f=n.conversationId,h=r.store.getState().currentUser.default_device,g=(null==h?void 0:h.id)||(null==h?void 0:h.exten),C="",o&&(l||p)&&!c.isEmpty(a)?C=null==a?void 0:a.callerNum:o&&(d||v)&&!c.isEmpty(u)&&(C=null==u?void 0:u.callerNum),""===g||""===f||""===C)return[3,4];if(!(m={convid:null==f?void 0:f.toString(),addEndpointId:null==C?void 0:C.toString(),ownerEndpointId:null==g?void 0:g.toString()}))return[3,4];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,s.startConf(m)];case 2:return e.sent()?(r.store.dispatch.currentCall.updateCurrentCall({conferencing:!0,paused:!1}),i.eventDispatch("phone-island-call-conferenced",{}),[2,!0]):[2,!1];case 3:return b=e.sent(),console.error(b),[2,!1];case 4:return[2,!1]}}))}))}function f(){return e.__awaiter(this,void 0,void 0,(function(){var t,n,o;return e.__generator(this,(function(e){switch(e.label){case 0:if(""===(t=r.store.getState().conference.conferenceId))return[3,4];if(!(n={confId:null==t?void 0:t.toString()}))return[3,4];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,s.endConf(n)];case 2:return e.sent()?(i.eventDispatch("phone-island-owner-conference-finished",{}),[2,!0]):[2,!1];case 3:return o=e.sent(),console.error(o),[2,!1];case 4:return[2,!1]}}))}))}var h=function(){return!!r.store.getState().island.isConferenceList},g=function(e,t){var n=r.store.getState(),s=n.currentUser.username,o=n.conference,a=o.isActive,c=o.isOwnerInside,u=o.conferenceId,d=n.users.extensions;!a&&s&&(t.conference.setConferenceActive(!0),t.conference.setConferenceStartedFrom(s));var p=d?Object.values(d).find((function(t){return t.exten===e})):null,v=(null==p?void 0:p.name)||e;t.conference.addPendingUser({id:"".concat(u,"-").concat(e),name:v,owner:!1,muted:!1,extenId:e,joinTime:Date.now()}),c&&(l(),t.conference.toggleIsOwnerInside(!1)),requestAnimationFrame((function(){setTimeout((function(){i.eventDispatch("phone-island-call-start",{number:e})}),1e3)}))};function C(t,r){return e.__awaiter(this,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return d(),[4,p(t)];case 1:return e.sent()&&(r.currentCall.updateCurrentCall({transferring:!0,paused:!1}),requestAnimationFrame((function(){r.player.playRemoteAudio(),i.eventDispatch("phone-island-call-transfered",{})}))),[2]}}))}))}exports.answerIncomingCall=function(){n.isWebRTC()?t.answerWebRTC():s.answerPhysical(),r.store.dispatch.island.resetOperatorBusyCompletely()},exports.attendedTransfer=p,exports.blindTransferFunction=function(t,n){return e.__awaiter(this,void 0,void 0,(function(){var o;return e.__generator(this,(function(e){switch(e.label){case 0:return(o=r.store.getState().currentCall.conversationId)&&n&&t?[4,s.blindTransfer({convid:o,to:t,endpointId:n})]:[3,2];case 1:return[2,e.sent()];case 2:return[2]}}))}))},exports.callNumber=function(e,o){var a="sip:".concat(e,"@").concat(o);r.store.dispatch.island.resetOperatorBusy(),r.store.dispatch.island.setOperatorBusyCalledNumber(e),n.isWebRTC()?t.callSipURI(a):s.callPhysical(e),i.eventDispatch("phone-island-call-started",{})},exports.clickTransferOrConference=function(t,n){return e.__awaiter(void 0,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return h()?r.store.getState().conference.isActive?[3,2]:[4,v()]:[3,3];case 1:if(!e.sent())return[2];e.label=2;case 2:return g(t,n),[3,4];case 3:C(t,n),e.label=4;case 4:return[2]}}))}))},exports.endConference=f,exports.forceHangupConversation=function(){var e=r.store.getState().currentUser.conversations,t=function(t){Object.keys(e[t]).forEach((function(e){s.forceHangup({convid:e,endpointId:t,endpointType:"extension"})}))};for(var n in e)t(n)},exports.handleAttendedTransfer=C,exports.hangupAllExtensions=function(){var e=r.store.getState().currentUser.conversations,t=function(t){Object.keys(e[t]).forEach((function(e){s.hangupConversation({convid:e,endpointId:t})}))};for(var n in e)t(n)},exports.hangupCurrentCall=l,exports.hangupCurrentPhysicalRecording=function(){s.hangupPhysicalRecordingCall(),r.store.dispatch.player.stopAudioPlayer(),r.store.dispatch.physicalRecorder.reset(),r.store.dispatch.physicalRecorder.setRecording(!1),r.store.dispatch.island.setIslandView(null),r.store.dispatch.listen.reset(),i.eventDispatch("phone-island-call-ended",{})},exports.isInsideConferenceList=h,exports.joinConference=function(){return e.__awaiter(this,void 0,void 0,(function(){var t,n,o,a;return e.__generator(this,(function(e){switch(e.label){case 0:if(t=r.store.getState().currentUser.default_device,""===(n=(null==t?void 0:t.id)||(null==t?void 0:t.exten)))return[3,4];if(!(o={endpointId:null==n?void 0:n.toString()}))return[3,4];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,s.joinMyConf(o)];case 2:return e.sent()?(i.eventDispatch("phone-island-owner-conference-enter",{}),[2,!0]):[2,!1];case 3:return a=e.sent(),console.error(a),[2,!1];case 4:return[2,!1]}}))}))},exports.muteAllUsersConference=function(t,n){var o;return e.__awaiter(this,void 0,void 0,(function(){var i,a,c,u,l,d,p,v;return e.__generator(this,(function(e){switch(e.label){case 0:if(""===t)return[2,!1];if(!(i=r.store.getState().conference.usersList)||0===Object.keys(i).length)return[2,!1];e.label=1;case 1:e.trys.push([1,6,,7]),a=Object.values(i),c=n?s.unmuteUserConf:s.muteUserConf,u=0,l=a,e.label=2;case 2:return u<l.length?(d=l[u],p={confId:null==t?void 0:t.toString(),userId:null===(o=d.id)||void 0===o?void 0:o.toString()},[4,c(p)]):[3,5];case 3:e.sent()&&r.store.dispatch.conference.toggleUserMuted({extenId:d.extenId,muted:!n}),e.label=4;case 4:return u++,[3,2];case 5:return[2,!0];case 6:return v=e.sent(),console.error(v),[2,!1];case 7:return[2]}}))}))},exports.muteCurrentCall=function(){n.isWebRTC()?t.muteWebRTC()&&r.store.dispatch.currentCall.updateCurrentCall({muted:!0}):s.mutePhysical(!0),i.eventDispatch("phone-island-call-muted",{})},exports.muteUserConference=function(t,r,n){return e.__awaiter(this,void 0,void 0,(function(){var o,i;return e.__generator(this,(function(e){switch(e.label){case 0:if(""===t||""===r)return[2,!1];o={confId:null==t?void 0:t.toString(),userId:null==r?void 0:r.toString()},e.label=1;case 1:return e.trys.push([1,3,,4]),[4,(n?s.unmuteUserConf:s.muteUserConf)(o)];case 2:return[2,!!e.sent()];case 3:return i=e.sent(),console.error(i),[2,!1];case 4:return[2]}}))}))},exports.parkCurrentCall=function(){var e,t,n,o,a=null===(t=null===(e=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===e?void 0:e.currentCall)||void 0===t?void 0:t.conversationId,c=null===(o=null===(n=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===n?void 0:n.currentUser)||void 0===o?void 0:o.conversations,u={};if(a){if(c)for(var l in c)if(c.hasOwnProperty(l)){var d=c[l];Object.keys(d).length>0&&(u={numberParkId:l,idConversation:a})}Object.keys(u).length>0&&(null==u?void 0:u.numberParkId)&&(s.parkConversation({applicantId:null==u?void 0:u.numberParkId,convid:a,endpointId:null==u?void 0:u.numberParkId}),r.store.dispatch.currentCall.setParked(!0),i.eventDispatch("phone-island-call-parked",{}))}},exports.pauseCurrentCall=function(){n.isWebRTC()?t.pauseWebRTC()&&(r.store.dispatch.currentCall.updateCurrentCall({paused:!0}),r.store.dispatch.player.pauseRemoteAudio()):s.pausePhysical(!0),i.eventDispatch("phone-island-call-held",{})},exports.playDtmfAudio=function(e){"*"===e&&(e="star"),"#"===e&&(e="pound"),r.store.dispatch.player.updateStartAudioPlayer({src:o.default["dtmf_".concat(e)]})},exports.recordCurrentCall=function(t){var n,o,i,a;return e.__awaiter(this,void 0,void 0,(function(){var c,u,l,d,p,v,f;return e.__generator(this,(function(e){switch(e.label){case 0:return r.store.dispatch.currentCall.updateRecordingStatus(!t),c=null===(o=null===(n=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===n?void 0:n.currentUser)||void 0===o?void 0:o.conversations,(u=function(e){for(var t in e)if(0!==Object.keys(e[t]).length){var r=Object.values(e[t])[0];return{id:r.id,recording:r.recording}}return null}(c))?[3,1]:[2];case 1:switch(l=null===(i=null==u?void 0:u.id)||void 0===i?void 0:i.match(/\/(\d+)-/),d=l[1],p={convid:null===(a=null==u?void 0:u.id)||void 0===a?void 0:a.toString(),endpointId:null==d?void 0:d.toString()},v="",null==u?void 0:u.recording){case"false":v="start_record";break;case"true":v="mute_record";break;case"mute":v="unmute_record";break;default:v=""}if(!p)return[3,5];e.label=2;case 2:return e.trys.push([2,4,,5]),[4,s.toggleRecord(v,p)];case 3:return e.sent(),[3,5];case 4:return f=e.sent(),console.error(f),[2,[]];case 5:return[2]}}))}))},exports.removeUserConference=function(t,n){return e.__awaiter(this,void 0,void 0,(function(){var o,i,a=this;return e.__generator(this,(function(c){switch(c.label){case 0:if(""===t||""===n)return[3,4];if(!(o={confId:null==t?void 0:t.toString(),extenId:null==n?void 0:n.toString()}))return[3,4];c.label=1;case 1:return c.trys.push([1,3,,4]),[4,s.hangupUserConf(o)];case 2:return c.sent()?(setTimeout((function(){return e.__awaiter(a,void 0,void 0,(function(){var t,s;return e.__generator(this,(function(e){switch(e.label){case 0:return t=r.store.getState().conference.usersList,s=Object.values(t||{}).filter((function(e){return!e.owner&&e.extenId!==n})).length,0!==s?[3,2]:[4,f()];case 1:e.sent(),e.label=2;case 2:return[2]}}))}))}),500),[2,!0]):[2,!1];case 3:return i=c.sent(),console.error(i),[2,!1];case 4:return[2,!1]}}))}))},exports.startConference=v,exports.unmuteCurrentCall=function(){n.isWebRTC()?t.unmuteWebRTC()&&r.store.dispatch.currentCall.updateCurrentCall({muted:!1}):s.mutePhysical(!1),i.eventDispatch("phone-island-call-unmuted",{})},exports.unpauseCurrentCall=d,exports.waitingConferenceView=g;
2
2
  //# sourceMappingURL=call.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"call.js","sources":["../../../src/lib/phone/call.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport {\n callSipURI,\n hangup,\n answerWebRTC,\n muteWebRTC,\n unmuteWebRTC,\n pauseWebRTC,\n unpauseWebRTC,\n} from '../webrtc/messages'\nimport { Dispatch, store } from '../../store'\nimport { isWebRTC } from '../user/default_device'\nimport {\n blindTransfer as blindTransferRequest,\n attendedTransfer as attendedTransferRequest,\n hangupPhysical,\n answerPhysical,\n mutePhysical,\n pausePhysical,\n callPhysical,\n toggleRecord,\n hangupPhysicalRecordingCall,\n startConf,\n joinMyConf,\n endConf,\n muteUserConf,\n unmuteUserConf,\n hangupUserConf,\n forceHangup,\n} from '../../services/astproxy'\nimport dtmfAudios from '../../static/dtmf'\nimport { hangupConversation, parkConversation } from '../../services/astproxy'\nimport { eventDispatch } from '../../utils'\nimport { isEmpty } from '../../utils/genericFunctions/isEmpty'\nimport { getStreamingSourceId } from '../../utils/streaming/getStreamingSourceId'\nimport { unsubscribe } from '../../services/user'\n\n/**\n * Starts a call to a number\n * @param number The number string\n */\nexport function callNumber(number: string, sipHost: string) {\n const sipURI = `sip:${number}@${sipHost}`\n\n // Reset any previous operator busy state when starting a new call\n store.dispatch.island.resetOperatorBusy()\n // Save the called number for potential operator busy scenarios\n store.dispatch.island.setOperatorBusyCalledNumber(number)\n\n if (isWebRTC()) {\n callSipURI(sipURI)\n } else {\n callPhysical(number)\n }\n\n eventDispatch('phone-island-call-started', {})\n}\n\n/**\n * Answer incoming call\n */\nexport function answerIncomingCall() {\n const { isDebugStreamingSimulation } = store.getState().currentCall\n\n if (isDebugStreamingSimulation) {\n store.dispatch.currentCall.updateCurrentCall({\n incoming: false,\n accepted: true,\n startTime: `${Math.floor(Date.now() / 1000)}`,\n })\n store.dispatch.island.setIslandView('streamingAnswer')\n store.dispatch.island.toggleIsOpen(true)\n store.dispatch.island.resetOperatorBusyCompletely()\n eventDispatch('phone-island-call-answered', { extensionType: 'debug' })\n return\n }\n\n if (isWebRTC()) {\n answerWebRTC()\n } else {\n answerPhysical()\n }\n // Reset operator busy completely when call is answered successfully\n store.dispatch.island.resetOperatorBusyCompletely()\n}\n\n/**\n * Hangup all the conversations of all the extensions of the current user\n */\nexport function hangupAllExtensions() {\n // Get current user endpoints\n const { conversations } = store.getState().currentUser\n // Hangup all the conversations of all extensions of the current user\n for (const extension in conversations) {\n const conversationsIds = Object.keys(conversations[extension])\n conversationsIds.forEach((id) => {\n hangupConversation({\n convid: id,\n endpointId: extension,\n })\n })\n }\n}\n\nexport function forceHangupConversation() {\n // Get current user endpoints\n const { conversations } = store.getState().currentUser\n // Hangup all the conversations of all extensions of the current user\n for (const extension in conversations) {\n const conversationsIds = Object.keys(conversations[extension])\n conversationsIds.forEach((id) => {\n forceHangup({\n convid: id,\n endpointId: extension,\n endpointType: 'extension',\n })\n })\n }\n}\n\n/**\n * Hangup current call\n */\nexport function hangupCurrentCall() {\n const { outgoing, accepted, streamingSourceNumber, isDebugStreamingSimulation } =\n store.getState().currentCall\n const { isFromStreaming } = store.getState().island\n\n if (isDebugStreamingSimulation) {\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\n store.dispatch.listen.reset()\n store.dispatch.island.setIsFromStreaming(false)\n store.dispatch.island.resetOperatorBusy()\n eventDispatch('phone-island-call-ended', {})\n return\n }\n\n if (outgoing || accepted) {\n if (isWebRTC()) {\n hangup()\n } else {\n hangupPhysical()\n }\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\n store.dispatch.listen.reset()\n\n // If call was from a streaming source, unsubscribe and clear images\n if (isFromStreaming && streamingSourceNumber) {\n const sourceId = getStreamingSourceId(streamingSourceNumber)\n if (sourceId) {\n // Unsubscribe from streaming updates\n unsubscribe({ id: sourceId })\n .then(() => console.debug(`Unsubscribed from streaming source: ${sourceId}`))\n .catch((error) => console.error('Error unsubscribing from streaming source:', error))\n\n // Clear source images to free up memory\n store.dispatch.streaming.clearSourceImages()\n }\n }\n\n // Reset isFromStreaming flag\n store.dispatch.island.setIsFromStreaming(false)\n }\n // Reset operator busy state when call ends\n store.dispatch.island.resetOperatorBusy()\n // Caller close the call before the call is accepted\n eventDispatch('phone-island-call-ended', {})\n}\n\n/**\n * Hangup current physical recording\n */\nexport function hangupCurrentPhysicalRecording() {\n hangupPhysicalRecordingCall()\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.physicalRecorder.reset()\n store.dispatch.physicalRecorder.setRecording(false)\n store.dispatch.island.setIslandView(null)\n store.dispatch.listen.reset()\n // Caller close the call before the call is accepted\n eventDispatch('phone-island-call-ended', {})\n}\n\n/**\n * Mute the current call\n */\nexport function muteCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const muted = muteWebRTC()\n if (muted) {\n store.dispatch.currentCall.updateCurrentCall({\n muted: true,\n })\n }\n } else {\n mutePhysical(true)\n }\n eventDispatch('phone-island-call-muted', {})\n}\n\n/**\n * Unmute the current call\n */\nexport function unmuteCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const unmuted = unmuteWebRTC()\n if (unmuted) {\n store.dispatch.currentCall.updateCurrentCall({\n muted: false,\n })\n }\n } else {\n mutePhysical(false)\n }\n eventDispatch('phone-island-call-unmuted', {})\n}\n\n/**\n * Pause the current call\n */\nexport function pauseCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const paused = pauseWebRTC()\n if (paused) {\n store.dispatch.currentCall.updateCurrentCall({\n paused: true,\n })\n // Pause remote audio\n store.dispatch.player.pauseRemoteAudio()\n }\n } else {\n pausePhysical(true)\n }\n eventDispatch('phone-island-call-held', {})\n}\n\n/**\n * Unpause the current call\n */\nexport function unpauseCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const unpaused = unpauseWebRTC()\n if (unpaused) {\n store.dispatch.currentCall.updateCurrentCall({\n paused: false,\n })\n // Play remote audio\n store.dispatch.player.playRemoteAudio()\n }\n } else {\n pausePhysical(false)\n }\n eventDispatch('phone-island-call-unheld', {})\n}\n\n/**\n * Transfer the current call through a blind transfer (not in use)\n */\nexport async function blindTransferFunction(number: string, endpointIdInConversation: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n // Transfer the call through blind transfer\n if (conversationId && endpointIdInConversation && number) {\n return await blindTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: endpointIdInConversation,\n })\n }\n}\n\n/**\n * Transfer the current call through a attended transfer\n */\nexport async function attendedTransfer(number: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n const { default_device } = store.getState().currentUser\n let default_device_details = default_device?.id || default_device?.exten\n // Transfer the call through attended transfer\n if (conversationId && default_device_details && number) {\n return await attendedTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: default_device_details,\n })\n }\n}\n\n/**\n * Play the dtmf audio files\n */\nexport function playDtmfAudio(key: string) {\n if (key === '*') key = 'star'\n if (key === '#') key = 'pound'\n store.dispatch.player.updateStartAudioPlayer({ src: dtmfAudios[`dtmf_${key}`] })\n}\n\n/**\n * Park the current call\n */\nexport function parkCurrentCall() {\n const conversationId = store?.getState()?.currentCall?.conversationId\n const userConversationInformations = store?.getState()?.currentUser?.conversations\n\n let parkingInformation: any = {}\n\n if (conversationId) {\n if (userConversationInformations) {\n for (const key in userConversationInformations) {\n if (userConversationInformations.hasOwnProperty(key)) {\n const conversation = userConversationInformations[key]\n if (Object.keys(conversation).length > 0) {\n parkingInformation = {\n numberParkId: key,\n idConversation: conversationId,\n }\n }\n }\n }\n }\n\n if (Object.keys(parkingInformation).length > 0) {\n if (parkingInformation?.numberParkId) {\n // If park information are not empty park call\n parkConversation({\n applicantId: parkingInformation?.numberParkId,\n convid: conversationId,\n endpointId: parkingInformation?.numberParkId,\n })\n\n store.dispatch.currentCall.setParked(true)\n\n eventDispatch('phone-island-call-parked', {})\n }\n }\n }\n}\n\nconst findFirstExtesnionNotEmpty = (data) => {\n for (const key in data) {\n if (Object.keys(data[key]).length !== 0) {\n const firstEntry: any = Object.values(data[key])[0]\n return {\n id: firstEntry.id,\n recording: firstEntry.recording,\n }\n }\n }\n return null\n}\n\nexport async function recordCurrentCall(recordingValue: boolean) {\n store.dispatch.currentCall.updateRecordingStatus(!recordingValue)\n const userConversationInformations = store?.getState()?.currentUser?.conversations\n\n const firstExtensionNotEmpty = findFirstExtesnionNotEmpty(userConversationInformations)\n\n if (!firstExtensionNotEmpty) {\n return\n } else {\n const numberToSendCall = firstExtensionNotEmpty?.id?.match(/\\/(\\d+)-/)\n const endpointId = numberToSendCall[1]\n\n const listenInformations = {\n convid: firstExtensionNotEmpty?.id?.toString(),\n endpointId: endpointId?.toString(),\n }\n\n let recordingValues = ''\n switch (firstExtensionNotEmpty?.recording) {\n case 'false':\n recordingValues = 'start_record'\n break\n case 'true':\n recordingValues = 'mute_record'\n break\n case 'mute':\n recordingValues = 'unmute_record'\n break\n default:\n recordingValues = ''\n break\n }\n\n if (listenInformations) {\n try {\n await toggleRecord(recordingValues, listenInformations)\n } catch (e) {\n console.error(e)\n return []\n }\n }\n }\n}\n\nexport async function startConference() {\n const {\n accepted,\n chSource,\n chDest,\n incoming,\n outgoing,\n incomingSocket,\n outgoingSocket,\n conversationId,\n }: any = store?.getState()?.currentCall\n const { default_device } = store.getState().currentUser\n const defaultDeviceId = default_device?.id || default_device?.exten\n let addedUserExtension = ''\n if (accepted && (incoming || incomingSocket) && !isEmpty(chSource)) {\n addedUserExtension = chSource?.callerNum\n } else if (accepted && (outgoing || outgoingSocket) && !isEmpty(chDest)) {\n addedUserExtension = chDest?.callerNum\n }\n\n if (defaultDeviceId !== '' && conversationId !== '' && addedUserExtension !== '') {\n const startConferenceInformations = {\n convid: conversationId?.toString(),\n addEndpointId: addedUserExtension?.toString(),\n ownerEndpointId: defaultDeviceId?.toString(),\n }\n\n if (startConferenceInformations) {\n try {\n const result = await startConf(startConferenceInformations)\n if (result) {\n // Set conferencing and disable pause\n store.dispatch.currentCall.updateCurrentCall({\n conferencing: true,\n paused: false,\n })\n\n eventDispatch('phone-island-call-conferenced', {})\n return true\n }\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport async function joinConference() {\n const { default_device } = store.getState().currentUser\n const defaultDeviceId = default_device?.id || default_device?.exten\n\n if (defaultDeviceId !== '') {\n const joinConferenceInformation = {\n endpointId: defaultDeviceId?.toString(),\n }\n\n if (joinConferenceInformation) {\n try {\n const result = await joinMyConf(joinConferenceInformation)\n if (result) {\n eventDispatch('phone-island-owner-conference-enter', {})\n return true\n }\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport async function endConference() {\n const { conferenceId } = store.getState().conference\n\n if (conferenceId !== '') {\n const endConferenceInformation = {\n confId: conferenceId?.toString(),\n }\n\n if (endConferenceInformation) {\n try {\n const result = await endConf(endConferenceInformation)\n if (result) {\n eventDispatch('phone-island-owner-conference-finished', {})\n return true\n }\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport async function muteUserConference(confId, userId, isAlreadyMuted) {\n if (confId === '' || userId === '') {\n return false\n }\n\n const muteUnmuteUserInformation = {\n confId: confId?.toString(),\n userId: userId?.toString(),\n }\n\n try {\n // Check if the user is already muted\n const actionFunction = isAlreadyMuted ? unmuteUserConf : muteUserConf\n const result = await actionFunction(muteUnmuteUserInformation)\n return !!result\n } catch (e) {\n console.error(e)\n return false\n }\n}\n\nexport async function muteAllUsersConference(confId, isAlreadyMuted) {\n if (confId === '') {\n return false\n }\n\n // Get the conference users from the store\n const { usersList } = store.getState().conference\n\n if (!usersList || Object.keys(usersList).length === 0) {\n return false\n }\n\n try {\n // Iterate through all users (except the owner) and mute/unmute them\n const nonOwnerUsers = Object.values(usersList)\n\n // Determine which function to use based on isAlreadyMuted\n const actionFunction = isAlreadyMuted ? unmuteUserConf : muteUserConf\n\n // For each user, call the appropriate function directly\n for (const user of nonOwnerUsers) {\n const muteUnmuteUserInformation = {\n confId: confId?.toString(),\n userId: user.id?.toString(),\n }\n\n const result = await actionFunction(muteUnmuteUserInformation)\n\n if (result) {\n store.dispatch.conference.toggleUserMuted({\n extenId: user.extenId,\n muted: !isAlreadyMuted,\n })\n }\n }\n\n return true\n } catch (e) {\n console.error(e)\n return false\n }\n}\n\nexport async function removeUserConference(conferenceId, extensionId) {\n if (conferenceId !== '' && extensionId !== '') {\n const removeUserInformation = {\n confId: conferenceId?.toString(),\n extenId: extensionId?.toString(),\n }\n\n if (removeUserInformation) {\n try {\n const result = await hangupUserConf(removeUserInformation)\n if (result) {\n // Check if this was the last participant (excluding owner)\n setTimeout(async () => {\n const { usersList } = store.getState().conference\n const remainingParticipants = Object.values(usersList || {}).filter(\n (user) => !user.owner && user.extenId !== extensionId,\n ).length\n\n // If no more participants left, end the conference\n if (remainingParticipants === 0) {\n await endConference()\n }\n }, 500)\n\n return true\n }\n\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport const clickTransferOrConference = async (number: string, dispatch: Dispatch) => {\n if (isInsideConferenceList()) {\n const { isActive } = store.getState().conference\n\n // Put current call user inside conference mode (only for first user to add not for the second one)\n // If conference is not active, start it first, otherwise proceed directly\n if (!isActive) {\n const conferenceStarted = await startConference()\n if (!conferenceStarted) {\n return // Early return if conference failed to start\n }\n }\n\n // Proceed to waiting conference view (common path for both cases)\n waitingConferenceView(number, dispatch)\n } else {\n handleAttendedTransfer(number, dispatch)\n }\n}\n\nexport const isInsideConferenceList = () => {\n const { isConferenceList } = store.getState().island\n if (isConferenceList) {\n return true\n }\n return false\n}\n\nexport const waitingConferenceView = (numberToCall, dispatch: Dispatch) => {\n // Get all required state in one call to minimize store access\n const state = store.getState()\n const { username } = state.currentUser\n const { isActive, isOwnerInside, conferenceId } = state.conference\n const { extensions } = state.users\n\n // Show current waiting user in back view (only on first)\n if (!isActive && username) {\n dispatch.conference.setConferenceActive(true)\n dispatch.conference.setConferenceStartedFrom(username)\n }\n\n // Add pending user to track the participant being added (before socket confirms)\n const extension = extensions\n ? Object.values(extensions).find((ext: any) => ext.exten === numberToCall)\n : null\n const extensionName = extension?.name || numberToCall\n\n dispatch.conference.addPendingUser({\n id: `${conferenceId}-${numberToCall}`,\n name: extensionName,\n owner: false,\n muted: false,\n extenId: numberToCall,\n joinTime: Date.now(),\n })\n\n // If owner has already started the conference, hangup before making a new call\n if (isOwnerInside) {\n hangupCurrentCall()\n dispatch.conference.toggleIsOwnerInside(false)\n }\n\n // Start new call with selected user from conference list\n // Use requestAnimationFrame to ensure state updates are complete before dispatching event\n requestAnimationFrame(() => {\n setTimeout(() => {\n eventDispatch('phone-island-call-start', { number: numberToCall })\n }, 1000)\n })\n}\n\nexport async function handleAttendedTransfer(number: string, dispatch: Dispatch) {\n // Send attended transfer message\n unpauseCurrentCall()\n const transferringMessageSent = await attendedTransfer(number)\n if (transferringMessageSent) {\n // Set transferring and disable pause\n dispatch.currentCall.updateCurrentCall({\n transferring: true,\n paused: false,\n })\n\n // Use requestAnimationFrame to ensure state update is complete before audio operations\n requestAnimationFrame(() => {\n dispatch.player.playRemoteAudio()\n eventDispatch('phone-island-call-transfered', {})\n })\n }\n}\n"],"names":["hangupCurrentCall","_a","store","getState","currentCall","outgoing","accepted","streamingSourceNumber","isDebugStreamingSimulation","isFromStreaming","island","dispatch","player","stopAudioPlayer","reset","listen","setIsFromStreaming","resetOperatorBusy","eventDispatch","isWebRTC","hangup","hangupPhysical","sourceId_1","getStreamingSourceId","unsubscribe","id","then","console","debug","concat","catch","error","streaming","clearSourceImages","unpauseCurrentCall","unpauseWebRTC","updateCurrentCall","paused","playRemoteAudio","pausePhysical","attendedTransfer","number","conversationId","default_device","currentUser","default_device_details","exten","attendedTransferRequest","convid","to","endpointId","startConference","_b","chSource","chDest","incoming","incomingSocket","outgoingSocket","defaultDeviceId","addedUserExtension","isEmpty","callerNum","startConferenceInformations","toString","addEndpointId","ownerEndpointId","startConf","_c","sent","conferencing","e_2","endConference","conferenceId","conference","endConferenceInformation","confId","endConf","e_4","isInsideConferenceList","isConferenceList","waitingConferenceView","numberToCall","state","username","isActive","isOwnerInside","extensions","users","setConferenceActive","setConferenceStartedFrom","extension","Object","values","find","ext","extensionName","name","addPendingUser","owner","muted","extenId","joinTime","Date","now","toggleIsOwnerInside","requestAnimationFrame","setTimeout","handleAttendedTransfer","transferring","startTime","Math","floor","setIslandView","toggleIsOpen","resetOperatorBusyCompletely","extensionType","answerWebRTC","answerPhysical","endpointIdInConversation","blindTransferRequest","sipHost","sipURI","setOperatorBusyCalledNumber","callSipURI","callPhysical","__awaiter","conversations","keys","forEach","forceHangup","endpointType","hangupConversation","hangupPhysicalRecordingCall","physicalRecorder","setRecording","joinConferenceInformation","joinMyConf","e_3","isAlreadyMuted","usersList","length","nonOwnerUsers","actionFunction","unmuteUserConf","muteUserConf","_i","nonOwnerUsers_1","user","muteUnmuteUserInformation","userId","toggleUserMuted","e_6","muteWebRTC","mutePhysical","e_5","userConversationInformations","_d","parkingInformation","key","hasOwnProperty","conversation","numberParkId","idConversation","parkConversation","applicantId","setParked","pauseWebRTC","pauseRemoteAudio","updateStartAudioPlayer","src","dtmfAudios","recordingValue","updateRecordingStatus","firstExtensionNotEmpty","data","firstEntry","recording","findFirstExtesnionNotEmpty","numberToSendCall","match","listenInformations","recordingValues","toggleRecord","_e","e_1","extensionId","removeUserInformation","hangupUserConf","_this","remainingParticipants","filter","e_7","unmuteWebRTC"],"mappings":"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"}
1
+ {"version":3,"file":"call.js","sources":["../../../src/lib/phone/call.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport {\n callSipURI,\n hangup,\n answerWebRTC,\n muteWebRTC,\n unmuteWebRTC,\n pauseWebRTC,\n unpauseWebRTC,\n} from '../webrtc/messages'\nimport { Dispatch, store } from '../../store'\nimport { isWebRTC } from '../user/default_device'\nimport {\n blindTransfer as blindTransferRequest,\n attendedTransfer as attendedTransferRequest,\n hangupPhysical,\n answerPhysical,\n mutePhysical,\n pausePhysical,\n callPhysical,\n toggleRecord,\n hangupPhysicalRecordingCall,\n startConf,\n joinMyConf,\n endConf,\n muteUserConf,\n unmuteUserConf,\n hangupUserConf,\n forceHangup,\n} from '../../services/astproxy'\nimport dtmfAudios from '../../static/dtmf'\nimport { hangupConversation, parkConversation } from '../../services/astproxy'\nimport { eventDispatch } from '../../utils'\nimport { isEmpty } from '../../utils/genericFunctions/isEmpty'\nimport { getStreamingSourceId } from '../../utils/streaming/getStreamingSourceId'\nimport { unsubscribe } from '../../services/user'\n\n/**\n * Starts a call to a number\n * @param number The number string\n */\nexport function callNumber(number: string, sipHost: string) {\n const sipURI = `sip:${number}@${sipHost}`\n\n // Reset any previous operator busy state when starting a new call\n store.dispatch.island.resetOperatorBusy()\n // Save the called number for potential operator busy scenarios\n store.dispatch.island.setOperatorBusyCalledNumber(number)\n\n if (isWebRTC()) {\n callSipURI(sipURI)\n } else {\n callPhysical(number)\n }\n\n eventDispatch('phone-island-call-started', {})\n}\n\n/**\n * Answer incoming call\n */\nexport function answerIncomingCall() {\n if (isWebRTC()) {\n answerWebRTC()\n } else {\n answerPhysical()\n }\n // Reset operator busy completely when call is answered successfully\n store.dispatch.island.resetOperatorBusyCompletely()\n}\n\n/**\n * Hangup all the conversations of all the extensions of the current user\n */\nexport function hangupAllExtensions() {\n // Get current user endpoints\n const { conversations } = store.getState().currentUser\n // Hangup all the conversations of all extensions of the current user\n for (const extension in conversations) {\n const conversationsIds = Object.keys(conversations[extension])\n conversationsIds.forEach((id) => {\n hangupConversation({\n convid: id,\n endpointId: extension,\n })\n })\n }\n}\n\nexport function forceHangupConversation() {\n // Get current user endpoints\n const { conversations } = store.getState().currentUser\n // Hangup all the conversations of all extensions of the current user\n for (const extension in conversations) {\n const conversationsIds = Object.keys(conversations[extension])\n conversationsIds.forEach((id) => {\n forceHangup({\n convid: id,\n endpointId: extension,\n endpointType: 'extension',\n })\n })\n }\n}\n\n/**\n * Hangup current call\n */\nexport function hangupCurrentCall() {\n const { outgoing, accepted, streamingSourceNumber } = store.getState().currentCall\n const { isFromStreaming } = store.getState().island\n\n if (outgoing || accepted) {\n if (isWebRTC()) {\n hangup()\n } else {\n hangupPhysical()\n }\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\n store.dispatch.listen.reset()\n\n // If call was from a streaming source, unsubscribe and clear images\n if (isFromStreaming && streamingSourceNumber) {\n const sourceId = getStreamingSourceId(streamingSourceNumber)\n if (sourceId) {\n // Unsubscribe from streaming updates\n unsubscribe({ id: sourceId })\n .then(() => console.debug(`Unsubscribed from streaming source: ${sourceId}`))\n .catch((error) => console.error('Error unsubscribing from streaming source:', error))\n\n // Clear source images to free up memory\n store.dispatch.streaming.clearSourceImages()\n }\n }\n\n // Reset isFromStreaming flag\n store.dispatch.island.setIsFromStreaming(false)\n }\n // Reset operator busy state when call ends\n store.dispatch.island.resetOperatorBusy()\n // Caller close the call before the call is accepted\n eventDispatch('phone-island-call-ended', {})\n}\n\n/**\n * Hangup current physical recording\n */\nexport function hangupCurrentPhysicalRecording() {\n hangupPhysicalRecordingCall()\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.physicalRecorder.reset()\n store.dispatch.physicalRecorder.setRecording(false)\n store.dispatch.island.setIslandView(null)\n store.dispatch.listen.reset()\n // Caller close the call before the call is accepted\n eventDispatch('phone-island-call-ended', {})\n}\n\n/**\n * Mute the current call\n */\nexport function muteCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const muted = muteWebRTC()\n if (muted) {\n store.dispatch.currentCall.updateCurrentCall({\n muted: true,\n })\n }\n } else {\n mutePhysical(true)\n }\n eventDispatch('phone-island-call-muted', {})\n}\n\n/**\n * Unmute the current call\n */\nexport function unmuteCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const unmuted = unmuteWebRTC()\n if (unmuted) {\n store.dispatch.currentCall.updateCurrentCall({\n muted: false,\n })\n }\n } else {\n mutePhysical(false)\n }\n eventDispatch('phone-island-call-unmuted', {})\n}\n\n/**\n * Pause the current call\n */\nexport function pauseCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const paused = pauseWebRTC()\n if (paused) {\n store.dispatch.currentCall.updateCurrentCall({\n paused: true,\n })\n // Pause remote audio\n store.dispatch.player.pauseRemoteAudio()\n }\n } else {\n pausePhysical(true)\n }\n eventDispatch('phone-island-call-held', {})\n}\n\n/**\n * Unpause the current call\n */\nexport function unpauseCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const unpaused = unpauseWebRTC()\n if (unpaused) {\n store.dispatch.currentCall.updateCurrentCall({\n paused: false,\n })\n // Play remote audio\n store.dispatch.player.playRemoteAudio()\n }\n } else {\n pausePhysical(false)\n }\n eventDispatch('phone-island-call-unheld', {})\n}\n\n/**\n * Transfer the current call through a blind transfer (not in use)\n */\nexport async function blindTransferFunction(number: string, endpointIdInConversation: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n // Transfer the call through blind transfer\n if (conversationId && endpointIdInConversation && number) {\n return await blindTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: endpointIdInConversation,\n })\n }\n}\n\n/**\n * Transfer the current call through a attended transfer\n */\nexport async function attendedTransfer(number: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n const { default_device } = store.getState().currentUser\n let default_device_details = default_device?.id || default_device?.exten\n // Transfer the call through attended transfer\n if (conversationId && default_device_details && number) {\n return await attendedTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: default_device_details,\n })\n }\n}\n\n/**\n * Play the dtmf audio files\n */\nexport function playDtmfAudio(key: string) {\n if (key === '*') key = 'star'\n if (key === '#') key = 'pound'\n store.dispatch.player.updateStartAudioPlayer({ src: dtmfAudios[`dtmf_${key}`] })\n}\n\n/**\n * Park the current call\n */\nexport function parkCurrentCall() {\n const conversationId = store?.getState()?.currentCall?.conversationId\n const userConversationInformations = store?.getState()?.currentUser?.conversations\n\n let parkingInformation: any = {}\n\n if (conversationId) {\n if (userConversationInformations) {\n for (const key in userConversationInformations) {\n if (userConversationInformations.hasOwnProperty(key)) {\n const conversation = userConversationInformations[key]\n if (Object.keys(conversation).length > 0) {\n parkingInformation = {\n numberParkId: key,\n idConversation: conversationId,\n }\n }\n }\n }\n }\n\n if (Object.keys(parkingInformation).length > 0) {\n if (parkingInformation?.numberParkId) {\n // If park information are not empty park call\n parkConversation({\n applicantId: parkingInformation?.numberParkId,\n convid: conversationId,\n endpointId: parkingInformation?.numberParkId,\n })\n\n store.dispatch.currentCall.setParked(true)\n\n eventDispatch('phone-island-call-parked', {})\n }\n }\n }\n}\n\nconst findFirstExtesnionNotEmpty = (data) => {\n for (const key in data) {\n if (Object.keys(data[key]).length !== 0) {\n const firstEntry: any = Object.values(data[key])[0]\n return {\n id: firstEntry.id,\n recording: firstEntry.recording,\n }\n }\n }\n return null\n}\n\nexport async function recordCurrentCall(recordingValue: boolean) {\n store.dispatch.currentCall.updateRecordingStatus(!recordingValue)\n const userConversationInformations = store?.getState()?.currentUser?.conversations\n\n const firstExtensionNotEmpty = findFirstExtesnionNotEmpty(userConversationInformations)\n\n if (!firstExtensionNotEmpty) {\n return\n } else {\n const numberToSendCall = firstExtensionNotEmpty?.id?.match(/\\/(\\d+)-/)\n const endpointId = numberToSendCall[1]\n\n const listenInformations = {\n convid: firstExtensionNotEmpty?.id?.toString(),\n endpointId: endpointId?.toString(),\n }\n\n let recordingValues = ''\n switch (firstExtensionNotEmpty?.recording) {\n case 'false':\n recordingValues = 'start_record'\n break\n case 'true':\n recordingValues = 'mute_record'\n break\n case 'mute':\n recordingValues = 'unmute_record'\n break\n default:\n recordingValues = ''\n break\n }\n\n if (listenInformations) {\n try {\n await toggleRecord(recordingValues, listenInformations)\n } catch (e) {\n console.error(e)\n return []\n }\n }\n }\n}\n\nexport async function startConference() {\n const {\n accepted,\n chSource,\n chDest,\n incoming,\n outgoing,\n incomingSocket,\n outgoingSocket,\n conversationId,\n }: any = store?.getState()?.currentCall\n const { default_device } = store.getState().currentUser\n const defaultDeviceId = default_device?.id || default_device?.exten\n let addedUserExtension = ''\n if (accepted && (incoming || incomingSocket) && !isEmpty(chSource)) {\n addedUserExtension = chSource?.callerNum\n } else if (accepted && (outgoing || outgoingSocket) && !isEmpty(chDest)) {\n addedUserExtension = chDest?.callerNum\n }\n\n if (defaultDeviceId !== '' && conversationId !== '' && addedUserExtension !== '') {\n const startConferenceInformations = {\n convid: conversationId?.toString(),\n addEndpointId: addedUserExtension?.toString(),\n ownerEndpointId: defaultDeviceId?.toString(),\n }\n\n if (startConferenceInformations) {\n try {\n const result = await startConf(startConferenceInformations)\n if (result) {\n // Set conferencing and disable pause\n store.dispatch.currentCall.updateCurrentCall({\n conferencing: true,\n paused: false,\n })\n\n eventDispatch('phone-island-call-conferenced', {})\n return true\n }\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport async function joinConference() {\n const { default_device } = store.getState().currentUser\n const defaultDeviceId = default_device?.id || default_device?.exten\n\n if (defaultDeviceId !== '') {\n const joinConferenceInformation = {\n endpointId: defaultDeviceId?.toString(),\n }\n\n if (joinConferenceInformation) {\n try {\n const result = await joinMyConf(joinConferenceInformation)\n if (result) {\n eventDispatch('phone-island-owner-conference-enter', {})\n return true\n }\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport async function endConference() {\n const { conferenceId } = store.getState().conference\n\n if (conferenceId !== '') {\n const endConferenceInformation = {\n confId: conferenceId?.toString(),\n }\n\n if (endConferenceInformation) {\n try {\n const result = await endConf(endConferenceInformation)\n if (result) {\n eventDispatch('phone-island-owner-conference-finished', {})\n return true\n }\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport async function muteUserConference(confId, userId, isAlreadyMuted) {\n if (confId === '' || userId === '') {\n return false\n }\n\n const muteUnmuteUserInformation = {\n confId: confId?.toString(),\n userId: userId?.toString(),\n }\n\n try {\n // Check if the user is already muted\n const actionFunction = isAlreadyMuted ? unmuteUserConf : muteUserConf\n const result = await actionFunction(muteUnmuteUserInformation)\n return !!result\n } catch (e) {\n console.error(e)\n return false\n }\n}\n\nexport async function muteAllUsersConference(confId, isAlreadyMuted) {\n if (confId === '') {\n return false\n }\n\n // Get the conference users from the store\n const { usersList } = store.getState().conference\n\n if (!usersList || Object.keys(usersList).length === 0) {\n return false\n }\n\n try {\n // Iterate through all users (except the owner) and mute/unmute them\n const nonOwnerUsers = Object.values(usersList)\n\n // Determine which function to use based on isAlreadyMuted\n const actionFunction = isAlreadyMuted ? unmuteUserConf : muteUserConf\n\n // For each user, call the appropriate function directly\n for (const user of nonOwnerUsers) {\n const muteUnmuteUserInformation = {\n confId: confId?.toString(),\n userId: user.id?.toString(),\n }\n\n const result = await actionFunction(muteUnmuteUserInformation)\n\n if (result) {\n store.dispatch.conference.toggleUserMuted({\n extenId: user.extenId,\n muted: !isAlreadyMuted,\n })\n }\n }\n\n return true\n } catch (e) {\n console.error(e)\n return false\n }\n}\n\nexport async function removeUserConference(conferenceId, extensionId) {\n if (conferenceId !== '' && extensionId !== '') {\n const removeUserInformation = {\n confId: conferenceId?.toString(),\n extenId: extensionId?.toString(),\n }\n\n if (removeUserInformation) {\n try {\n const result = await hangupUserConf(removeUserInformation)\n if (result) {\n // Check if this was the last participant (excluding owner)\n setTimeout(async () => {\n const { usersList } = store.getState().conference\n const remainingParticipants = Object.values(usersList || {}).filter(\n (user) => !user.owner && user.extenId !== extensionId,\n ).length\n\n // If no more participants left, end the conference\n if (remainingParticipants === 0) {\n await endConference()\n }\n }, 500)\n\n return true\n }\n\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport const clickTransferOrConference = async (number: string, dispatch: Dispatch) => {\n if (isInsideConferenceList()) {\n const { isActive } = store.getState().conference\n\n // Put current call user inside conference mode (only for first user to add not for the second one)\n // If conference is not active, start it first, otherwise proceed directly\n if (!isActive) {\n const conferenceStarted = await startConference()\n if (!conferenceStarted) {\n return // Early return if conference failed to start\n }\n }\n\n // Proceed to waiting conference view (common path for both cases)\n waitingConferenceView(number, dispatch)\n } else {\n handleAttendedTransfer(number, dispatch)\n }\n}\n\nexport const isInsideConferenceList = () => {\n const { isConferenceList } = store.getState().island\n if (isConferenceList) {\n return true\n }\n return false\n}\n\nexport const waitingConferenceView = (numberToCall, dispatch: Dispatch) => {\n // Get all required state in one call to minimize store access\n const state = store.getState()\n const { username } = state.currentUser\n const { isActive, isOwnerInside, conferenceId } = state.conference\n const { extensions } = state.users\n\n // Show current waiting user in back view (only on first)\n if (!isActive && username) {\n dispatch.conference.setConferenceActive(true)\n dispatch.conference.setConferenceStartedFrom(username)\n }\n\n // Add pending user to track the participant being added (before socket confirms)\n const extension = extensions\n ? Object.values(extensions).find((ext: any) => ext.exten === numberToCall)\n : null\n const extensionName = extension?.name || numberToCall\n\n dispatch.conference.addPendingUser({\n id: `${conferenceId}-${numberToCall}`,\n name: extensionName,\n owner: false,\n muted: false,\n extenId: numberToCall,\n joinTime: Date.now(),\n })\n\n // If owner has already started the conference, hangup before making a new call\n if (isOwnerInside) {\n hangupCurrentCall()\n dispatch.conference.toggleIsOwnerInside(false)\n }\n\n // Start new call with selected user from conference list\n // Use requestAnimationFrame to ensure state updates are complete before dispatching event\n requestAnimationFrame(() => {\n setTimeout(() => {\n eventDispatch('phone-island-call-start', { number: numberToCall })\n }, 1000)\n })\n}\n\nexport async function handleAttendedTransfer(number: string, dispatch: Dispatch) {\n // Send attended transfer message\n unpauseCurrentCall()\n const transferringMessageSent = await attendedTransfer(number)\n if (transferringMessageSent) {\n // Set transferring and disable pause\n dispatch.currentCall.updateCurrentCall({\n transferring: true,\n paused: false,\n })\n\n // Use requestAnimationFrame to ensure state update is complete before audio operations\n requestAnimationFrame(() => {\n dispatch.player.playRemoteAudio()\n eventDispatch('phone-island-call-transfered', {})\n })\n }\n}\n"],"names":["hangupCurrentCall","_a","store","getState","currentCall","outgoing","accepted","streamingSourceNumber","isFromStreaming","island","isWebRTC","hangup","hangupPhysical","dispatch","player","stopAudioPlayer","reset","listen","sourceId_1","getStreamingSourceId","unsubscribe","id","then","console","debug","concat","catch","error","streaming","clearSourceImages","setIsFromStreaming","resetOperatorBusy","eventDispatch","unpauseCurrentCall","unpauseWebRTC","updateCurrentCall","paused","playRemoteAudio","pausePhysical","attendedTransfer","number","conversationId","default_device","currentUser","default_device_details","exten","attendedTransferRequest","convid","to","endpointId","startConference","_b","chSource","chDest","incoming","incomingSocket","outgoingSocket","defaultDeviceId","addedUserExtension","isEmpty","callerNum","startConferenceInformations","toString","addEndpointId","ownerEndpointId","startConf","_c","sent","conferencing","e_2","endConference","conferenceId","conference","endConferenceInformation","confId","endConf","e_4","isInsideConferenceList","isConferenceList","waitingConferenceView","numberToCall","state","username","isActive","isOwnerInside","extensions","users","setConferenceActive","setConferenceStartedFrom","extension","Object","values","find","ext","extensionName","name","addPendingUser","owner","muted","extenId","joinTime","Date","now","toggleIsOwnerInside","requestAnimationFrame","setTimeout","handleAttendedTransfer","transferring","answerWebRTC","answerPhysical","resetOperatorBusyCompletely","endpointIdInConversation","blindTransferRequest","sipHost","sipURI","setOperatorBusyCalledNumber","callSipURI","callPhysical","__awaiter","conversations","keys","forEach","forceHangup","endpointType","hangupConversation","hangupPhysicalRecordingCall","physicalRecorder","setRecording","setIslandView","joinConferenceInformation","joinMyConf","e_3","isAlreadyMuted","usersList","length","nonOwnerUsers","actionFunction","unmuteUserConf","muteUserConf","_i","nonOwnerUsers_1","user","muteUnmuteUserInformation","userId","toggleUserMuted","e_6","muteWebRTC","mutePhysical","e_5","userConversationInformations","_d","parkingInformation","key","hasOwnProperty","conversation","numberParkId","idConversation","parkConversation","applicantId","setParked","pauseWebRTC","pauseRemoteAudio","updateStartAudioPlayer","src","dtmfAudios","recordingValue","updateRecordingStatus","firstExtensionNotEmpty","data","firstEntry","recording","findFirstExtesnionNotEmpty","numberToSendCall","match","listenInformations","recordingValues","toggleRecord","_e","e_1","extensionId","removeUserInformation","hangupUserConf","_this","remainingParticipants","filter","e_7","unmuteWebRTC"],"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("../node_modules/@rematch/core/dist/core.esm.js"),r=require("../events/CallEvents.js");require("react");var t=require("../utils/genericFunctions/eventDispatch.js");require("../store/index.js"),require("../node_modules/react-redux/es/index.js");var i={displayName:"",username:"",number:"",incomingSocket:!1,incomingWebRTC:!1,incoming:!1,acceptedSocket:!1,acceptedWebRTC:!1,accepted:!1,outgoingSocket:!1,outgoingWebRTC:!1,parked:!1,outgoing:!1,startTime:"",muted:!1,paused:!1,keypadValue:"",conversationId:"",transferring:!1,conferencing:!1,transferringName:"",transferringNumber:"",transferringStartTime:"",transferSwitching:!1,transferCalls:new Array,ownerExtension:"",isRecording:!1,isLocalVideoEnabled:!1,showRemoteVideoPlaceHolder:!0,hasVideoTrackAdded:!1,isStartingVideoCall:!1,streamingSourceNumber:"",isDebugStreamingSimulation:!1,chDest:new Array,chSource:new Array,throughQueue:!1,queueId:"",queueName:"",queueNumber:"",queuePosition:"",queueWaitingTime:0},a=n.createModel()({state:i,reducers:{updateCurrentCall:function(n,r){return Number(r.startTime)&&n.startTime&&delete r.startTime,!1===r.throughQueue&&(r.queueId="",r.queueName="",r.queueNumber="",r.queuePosition="",r.queueWaitingTime=0),e.__assign(e.__assign(e.__assign({},n),r),{transferCalls:n.transferCalls})},updateKeypadValue:function(n,r){return e.__assign(e.__assign({},n),{keypadValue:r})},updateTransferring:function(n,r){return e.__assign(e.__assign({},n),{transferring:r})},updateTransferSwitching:function(n,r){return e.__assign(e.__assign({},n),{transferSwitching:r})},addTransferCalls:function(n,r){return n.transferCalls.find((function(e){return e.number===r.number}))?n:e.__assign(e.__assign({},n),{transferCalls:e.__spreadArray(e.__spreadArray([],n.transferCalls,!0),[r],!1)})},deleteTransferCalls:function(n){return e.__assign(e.__assign({},n),{transferCalls:n.transferCalls.filter((function(e){return"transferred"!==e.type}))})},setParked:function(e,n){return e.parked=n,e},updateRecordingStatus:function(e,n){return e.isRecording=n,e},updateStartTime:function(e,n){return e.startTime=n,e},updateIncoming:function(e,n){return e.incoming=n,e},reset:function(){return i},setLocalVideoEnabled:function(e,n){return e.isLocalVideoEnabled=n,e},setVideoTrackAdded:function(e,n){return e.hasVideoTrackAdded=n,e},updateConferencing:function(n,r){return e.__assign(e.__assign({},n),{conferencing:r})}},effects:function(n){return{checkIncomingUpdatePlay:function(r,t){var i,a,u,s,o,d,l,c;if("webrtc"===(null===(a=null===(i=null==t?void 0:t.currentUser)||void 0===i?void 0:i.default_device)||void 0===a?void 0:a.type)&&(null==r?void 0:r.incomingWebRTC)||"physical"===(null===(s=null===(u=null==t?void 0:t.currentUser)||void 0===u?void 0:u.default_device)||void 0===s?void 0:s.type)&&(null==r?void 0:r.incomingSocket)||"nethlink"===(null===(d=null===(o=null==t?void 0:t.currentUser)||void 0===o?void 0:o.default_device)||void 0===d?void 0:d.type)&&(null==r?void 0:r.incomingWebRTC)){r.incoming=!0;var g=t.ringtones?(null===(l=t.ringtones.availableRingtones.find((function(e){return e.name===t.ringtones.selectedRingtone})))||void 0===l?void 0:l.base64Audio)||(null===(c=t.ringtones.availableRingtones[0])||void 0===c?void 0:c.base64Audio):void 0;g&&n.player.updateStartAudioPlayer({src:g,loop:!0,useRingtoneOutput:!0})}n.currentCall.updateCurrentCall(e.__assign({},r))},checkOutgoingUpdate:function(t,i){var a,u,s;("webrtc"===(null===(a=i.currentUser.default_device)||void 0===a?void 0:a.type)&&t.outgoingWebRTC||"physical"===(null===(u=i.currentUser.default_device)||void 0===u?void 0:u.type)&&t.outgoingSocket||"nethlink"===(null===(s=i.currentUser.default_device)||void 0===s?void 0:s.type)&&t.outgoingWebRTC)&&(t.outgoing=!0,r.dispatchOutgoingCallStarted(t.displayName,t.number)),n.currentCall.updateCurrentCall(e.__assign({},t))},checkAcceptedUpdate:function(r,i){var a,u,s;("webrtc"===(null===(a=i.currentUser.default_device)||void 0===a?void 0:a.type)&&r.acceptedWebRTC||"physical"===(null===(u=i.currentUser.default_device)||void 0===u?void 0:u.type)&&r.acceptedSocket||"nethlink"===(null===(s=i.currentUser.default_device)||void 0===s?void 0:s.type)&&r.acceptedWebRTC)&&(r.accepted=!0,t.eventDispatch("phone-island-call-answered",{})),n.currentCall.updateCurrentCall(e.__assign({},r))}}}});exports.currentCall=a;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),n=require("../node_modules/@rematch/core/dist/core.esm.js"),r=require("../events/CallEvents.js");require("react");var t=require("../utils/genericFunctions/eventDispatch.js");require("../store/index.js"),require("../node_modules/react-redux/es/index.js");var i={displayName:"",username:"",number:"",incomingSocket:!1,incomingWebRTC:!1,incoming:!1,acceptedSocket:!1,acceptedWebRTC:!1,accepted:!1,outgoingSocket:!1,outgoingWebRTC:!1,parked:!1,outgoing:!1,startTime:"",muted:!1,paused:!1,keypadValue:"",conversationId:"",transferring:!1,conferencing:!1,transferringName:"",transferringNumber:"",transferringStartTime:"",transferSwitching:!1,transferCalls:new Array,ownerExtension:"",isRecording:!1,isLocalVideoEnabled:!1,showRemoteVideoPlaceHolder:!0,hasVideoTrackAdded:!1,isStartingVideoCall:!1,streamingSourceNumber:"",chDest:new Array,chSource:new Array,throughQueue:!1,queueId:"",queueName:"",queueNumber:"",queuePosition:"",queueWaitingTime:0},a=n.createModel()({state:i,reducers:{updateCurrentCall:function(n,r){return Number(r.startTime)&&n.startTime&&delete r.startTime,!1===r.throughQueue&&(r.queueId="",r.queueName="",r.queueNumber="",r.queuePosition="",r.queueWaitingTime=0),e.__assign(e.__assign(e.__assign({},n),r),{transferCalls:n.transferCalls})},updateKeypadValue:function(n,r){return e.__assign(e.__assign({},n),{keypadValue:r})},updateTransferring:function(n,r){return e.__assign(e.__assign({},n),{transferring:r})},updateTransferSwitching:function(n,r){return e.__assign(e.__assign({},n),{transferSwitching:r})},addTransferCalls:function(n,r){return n.transferCalls.find((function(e){return e.number===r.number}))?n:e.__assign(e.__assign({},n),{transferCalls:e.__spreadArray(e.__spreadArray([],n.transferCalls,!0),[r],!1)})},deleteTransferCalls:function(n){return e.__assign(e.__assign({},n),{transferCalls:n.transferCalls.filter((function(e){return"transferred"!==e.type}))})},setParked:function(e,n){return e.parked=n,e},updateRecordingStatus:function(e,n){return e.isRecording=n,e},updateStartTime:function(e,n){return e.startTime=n,e},updateIncoming:function(e,n){return e.incoming=n,e},reset:function(){return i},setLocalVideoEnabled:function(e,n){return e.isLocalVideoEnabled=n,e},setVideoTrackAdded:function(e,n){return e.hasVideoTrackAdded=n,e},updateConferencing:function(n,r){return e.__assign(e.__assign({},n),{conferencing:r})}},effects:function(n){return{checkIncomingUpdatePlay:function(r,t){var i,a,u,s,o,d,l,c;if("webrtc"===(null===(a=null===(i=null==t?void 0:t.currentUser)||void 0===i?void 0:i.default_device)||void 0===a?void 0:a.type)&&(null==r?void 0:r.incomingWebRTC)||"physical"===(null===(s=null===(u=null==t?void 0:t.currentUser)||void 0===u?void 0:u.default_device)||void 0===s?void 0:s.type)&&(null==r?void 0:r.incomingSocket)||"nethlink"===(null===(d=null===(o=null==t?void 0:t.currentUser)||void 0===o?void 0:o.default_device)||void 0===d?void 0:d.type)&&(null==r?void 0:r.incomingWebRTC)){r.incoming=!0;var g=t.ringtones?(null===(l=t.ringtones.availableRingtones.find((function(e){return e.name===t.ringtones.selectedRingtone})))||void 0===l?void 0:l.base64Audio)||(null===(c=t.ringtones.availableRingtones[0])||void 0===c?void 0:c.base64Audio):void 0;g&&n.player.updateStartAudioPlayer({src:g,loop:!0,useRingtoneOutput:!0})}n.currentCall.updateCurrentCall(e.__assign({},r))},checkOutgoingUpdate:function(t,i){var a,u,s;("webrtc"===(null===(a=i.currentUser.default_device)||void 0===a?void 0:a.type)&&t.outgoingWebRTC||"physical"===(null===(u=i.currentUser.default_device)||void 0===u?void 0:u.type)&&t.outgoingSocket||"nethlink"===(null===(s=i.currentUser.default_device)||void 0===s?void 0:s.type)&&t.outgoingWebRTC)&&(t.outgoing=!0,r.dispatchOutgoingCallStarted(t.displayName,t.number)),n.currentCall.updateCurrentCall(e.__assign({},t))},checkAcceptedUpdate:function(r,i){var a,u,s;("webrtc"===(null===(a=i.currentUser.default_device)||void 0===a?void 0:a.type)&&r.acceptedWebRTC||"physical"===(null===(u=i.currentUser.default_device)||void 0===u?void 0:u.type)&&r.acceptedSocket||"nethlink"===(null===(s=i.currentUser.default_device)||void 0===s?void 0:s.type)&&r.acceptedWebRTC)&&(r.accepted=!0,t.eventDispatch("phone-island-call-answered",{})),n.currentCall.updateCurrentCall(e.__assign({},r))}}}});exports.currentCall=a;
2
2
  //# sourceMappingURL=currentCall.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"currentCall.js","sources":["../../src/models/currentCall.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { createModel } from '@rematch/core'\nimport type { RootModel } from '.'\nimport { dispatchOutgoingCallStarted } from '../events/index'\nimport { eventDispatch } from '../utils'\nimport { PhonebookContact } from '../types/phonebook'\n\nconst defaultState = {\n displayName: '',\n username: '',\n number: '',\n incomingSocket: false,\n incomingWebRTC: false,\n incoming: false,\n acceptedSocket: false,\n acceptedWebRTC: false,\n accepted: false,\n outgoingSocket: false,\n outgoingWebRTC: false,\n parked: false,\n outgoing: false,\n startTime: '',\n muted: false,\n paused: false,\n keypadValue: '',\n conversationId: '',\n transferring: false,\n conferencing: false,\n transferringName: '',\n transferringNumber: '',\n transferringStartTime: '',\n transferSwitching: false,\n transferCalls: new Array(),\n ownerExtension: '',\n isRecording: false,\n isLocalVideoEnabled: false,\n showRemoteVideoPlaceHolder: true,\n hasVideoTrackAdded: false,\n isStartingVideoCall: false,\n streamingSourceNumber: '',\n isDebugStreamingSimulation: false,\n chDest: new Array(),\n chSource: new Array(),\n throughQueue: false,\n queueId: '',\n queueName: '',\n queueNumber: '',\n queuePosition: '',\n queueWaitingTime: 0,\n}\n\nexport const currentCall = createModel<RootModel>()({\n state: defaultState,\n reducers: {\n updateCurrentCall: (state, payload: CurrentCallTypes) => {\n if (Number(payload.startTime) && state.startTime) {\n // avoid updating startTime if it's already set (e.g. while switching to a video call)\n delete payload.startTime\n }\n\n if (payload.throughQueue === false) {\n payload.queueId = ''\n payload.queueName = ''\n payload.queueNumber = ''\n payload.queuePosition = ''\n payload.queueWaitingTime = 0\n }\n\n return {\n ...state,\n ...payload,\n transferCalls: state.transferCalls,\n }\n },\n updateKeypadValue: (state, payload: string) => {\n return {\n ...state,\n keypadValue: payload,\n }\n },\n updateTransferring: (state, payload: boolean) => {\n return {\n ...state,\n transferring: payload,\n }\n },\n updateTransferSwitching: (state, payload: boolean) => {\n return {\n ...state,\n transferSwitching: payload,\n }\n },\n addTransferCalls: (state, payload: TransferCallsTypes) => {\n if (state.transferCalls.find((item) => item.number === payload.number)) {\n return state\n } else {\n return {\n ...state,\n transferCalls: [...state.transferCalls, payload],\n }\n }\n },\n deleteTransferCalls: (state) => {\n return {\n ...state,\n transferCalls: state.transferCalls.filter((item) => item.type !== 'transferred'),\n }\n },\n setParked: (state, payload: boolean) => {\n state.parked = payload\n return state\n },\n updateRecordingStatus: (state, payload: boolean) => {\n state.isRecording = payload\n return state\n },\n updateStartTime: (state, payload: string) => {\n state.startTime = payload\n return state\n },\n updateIncoming: (state, payload: boolean) => {\n state.incoming = payload\n return state\n },\n reset: () => {\n return defaultState\n },\n setLocalVideoEnabled: (state, payload: boolean) => {\n state.isLocalVideoEnabled = payload\n return state\n },\n setVideoTrackAdded: (state, payload: boolean) => {\n state.hasVideoTrackAdded = payload\n return state\n },\n updateConferencing: (state, payload: boolean) => {\n return {\n ...state,\n conferencing: payload,\n }\n },\n },\n effects: (dispatch) => ({\n checkIncomingUpdatePlay: (payload: CurrentCallTypes, rootState) => {\n // Check call type and incoming confirmation source\n if (\n (rootState?.currentUser?.default_device?.type === 'webrtc' && payload?.incomingWebRTC) ||\n (rootState?.currentUser?.default_device?.type === 'physical' && payload?.incomingSocket) ||\n (rootState?.currentUser?.default_device?.type === 'nethlink' && payload?.incomingWebRTC)\n ) {\n payload.incoming = true\n\n // Get selected ringtone from store and play the audio\n const selectedRingtoneAudio = rootState.ringtones\n ? (rootState.ringtones.availableRingtones as any[]).find(\n (r: any) => r.name === rootState.ringtones.selectedRingtone,\n )?.base64Audio || rootState.ringtones.availableRingtones[0]?.base64Audio\n : undefined\n \n if (selectedRingtoneAudio) {\n dispatch.player.updateStartAudioPlayer({ src: selectedRingtoneAudio, loop: true, useRingtoneOutput: true })\n }\n }\n // Update the current call values and set incoming\n dispatch.currentCall.updateCurrentCall({\n ...payload,\n })\n },\n checkOutgoingUpdate: (payload: CurrentCallTypes, rootState) => {\n // Check call type and outgoing confirmation source\n if (\n (rootState.currentUser.default_device?.type === 'webrtc' && payload.outgoingWebRTC) ||\n (rootState.currentUser.default_device?.type === 'physical' && payload.outgoingSocket) ||\n (rootState.currentUser.default_device?.type === 'nethlink' && payload.outgoingWebRTC)\n ) {\n payload.outgoing = true\n // Dispatch an event for outgoing call\n dispatchOutgoingCallStarted(payload.displayName, payload.number)\n }\n // Update the current call values and set outgoing\n dispatch.currentCall.updateCurrentCall({\n ...payload,\n })\n },\n checkAcceptedUpdate: (payload: CurrentCallTypes, rootState) => {\n // Check call type and accepted confirmation source\n if (\n (rootState.currentUser.default_device?.type === 'webrtc' && payload.acceptedWebRTC) ||\n (rootState.currentUser.default_device?.type === 'physical' && payload.acceptedSocket) ||\n (rootState.currentUser.default_device?.type === 'nethlink' && payload.acceptedWebRTC)\n ) {\n payload.accepted = true\n eventDispatch('phone-island-call-answered', {})\n }\n // Update the current call values\n dispatch.currentCall.updateCurrentCall({\n ...payload,\n })\n },\n }),\n})\n\nexport type TransferCallsTypes = {\n type: 'transferred' | 'destination'\n displayName: string\n number: string\n startTime: string\n}\n\nexport type chDestTypes = {\n type: 'dest'\n channel: string\n callerNum: string\n startTime: number\n callerName: string\n bridgedNum: string\n bridgedName: string\n inConference: boolean\n channelStatus: string\n bridgedChannel: string\n}\n\nexport type chSourceTypes = {\n type: 'source'\n channel: string\n callerNum: string\n startTime: number\n callerName: string\n bridgedNum: string\n bridgedName: string\n inConference: boolean\n channelStatus: string\n bridgedChannel: string\n}\n\nexport interface CurrentCallTypes {\n displayName?: string\n username?: string\n number?: string\n incomingSocket?: boolean\n incomingWebRTC?: boolean\n parked?: boolean\n incoming?: boolean\n acceptedSocket?: boolean\n acceptedWebRTC?: boolean\n accepted?: boolean\n outgoingSocket?: boolean\n outgoingWebRTC?: boolean\n outgoing?: boolean\n startTime?: string\n muted?: boolean\n paused?: boolean\n conversationId?: string\n transferring?: boolean\n conferencing?: boolean\n transferringName?: string\n transferringNumber?: string\n transferringStartTime?: string\n transferSwitching?: boolean\n transferCalls?: TransferCallsTypes[]\n ownerExtension?: string\n isRecording?: boolean\n isLocalVideoEnabled?: boolean\n hasVideoTrackAdded?: boolean\n showRemoteVideoPlaceHolder?: boolean\n isStartingVideoCall?: boolean\n streamingSourceNumber?: string\n isDebugStreamingSimulation?: boolean\n chDest?: any\n chSource?: any\n throughQueue?: boolean\n queueId?: string\n queueName?: string\n queueNumber?: string\n queuePosition?: string\n queueWaitingTime?: number\n}\n"],"names":["defaultState","displayName","username","number","incomingSocket","incomingWebRTC","incoming","acceptedSocket","acceptedWebRTC","accepted","outgoingSocket","outgoingWebRTC","parked","outgoing","startTime","muted","paused","keypadValue","conversationId","transferring","conferencing","transferringName","transferringNumber","transferringStartTime","transferSwitching","transferCalls","Array","ownerExtension","isRecording","isLocalVideoEnabled","showRemoteVideoPlaceHolder","hasVideoTrackAdded","isStartingVideoCall","streamingSourceNumber","isDebugStreamingSimulation","chDest","chSource","throughQueue","queueId","queueName","queueNumber","queuePosition","queueWaitingTime","currentCall","createModel","state","reducers","updateCurrentCall","payload","Number","__assign","updateKeypadValue","updateTransferring","updateTransferSwitching","addTransferCalls","find","item","__spreadArray","deleteTransferCalls","filter","type","setParked","updateRecordingStatus","updateStartTime","updateIncoming","reset","setLocalVideoEnabled","setVideoTrackAdded","updateConferencing","effects","dispatch","checkIncomingUpdatePlay","rootState","_b","_a","currentUser","default_device","_d","_c","_f","_e","selectedRingtoneAudio","ringtones","_g","availableRingtones","r","name","selectedRingtone","base64Audio","_h","undefined","player","updateStartAudioPlayer","src","loop","useRingtoneOutput","checkOutgoingUpdate","dispatchOutgoingCallStarted","checkAcceptedUpdate","eventDispatch"],"mappings":"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"}
1
+ {"version":3,"file":"currentCall.js","sources":["../../src/models/currentCall.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { createModel } from '@rematch/core'\nimport type { RootModel } from '.'\nimport { dispatchOutgoingCallStarted } from '../events/index'\nimport { eventDispatch } from '../utils'\nimport { PhonebookContact } from '../types/phonebook'\n\nconst defaultState = {\n displayName: '',\n username: '',\n number: '',\n incomingSocket: false,\n incomingWebRTC: false,\n incoming: false,\n acceptedSocket: false,\n acceptedWebRTC: false,\n accepted: false,\n outgoingSocket: false,\n outgoingWebRTC: false,\n parked: false,\n outgoing: false,\n startTime: '',\n muted: false,\n paused: false,\n keypadValue: '',\n conversationId: '',\n transferring: false,\n conferencing: false,\n transferringName: '',\n transferringNumber: '',\n transferringStartTime: '',\n transferSwitching: false,\n transferCalls: new Array(),\n ownerExtension: '',\n isRecording: false,\n isLocalVideoEnabled: false,\n showRemoteVideoPlaceHolder: true,\n hasVideoTrackAdded: false,\n isStartingVideoCall: false,\n streamingSourceNumber: '',\n chDest: new Array(),\n chSource: new Array(),\n throughQueue: false,\n queueId: '',\n queueName: '',\n queueNumber: '',\n queuePosition: '',\n queueWaitingTime: 0,\n}\n\nexport const currentCall = createModel<RootModel>()({\n state: defaultState,\n reducers: {\n updateCurrentCall: (state, payload: CurrentCallTypes) => {\n if (Number(payload.startTime) && state.startTime) {\n // avoid updating startTime if it's already set (e.g. while switching to a video call)\n delete payload.startTime\n }\n\n if (payload.throughQueue === false) {\n payload.queueId = ''\n payload.queueName = ''\n payload.queueNumber = ''\n payload.queuePosition = ''\n payload.queueWaitingTime = 0\n }\n\n return {\n ...state,\n ...payload,\n transferCalls: state.transferCalls,\n }\n },\n updateKeypadValue: (state, payload: string) => {\n return {\n ...state,\n keypadValue: payload,\n }\n },\n updateTransferring: (state, payload: boolean) => {\n return {\n ...state,\n transferring: payload,\n }\n },\n updateTransferSwitching: (state, payload: boolean) => {\n return {\n ...state,\n transferSwitching: payload,\n }\n },\n addTransferCalls: (state, payload: TransferCallsTypes) => {\n if (state.transferCalls.find((item) => item.number === payload.number)) {\n return state\n } else {\n return {\n ...state,\n transferCalls: [...state.transferCalls, payload],\n }\n }\n },\n deleteTransferCalls: (state) => {\n return {\n ...state,\n transferCalls: state.transferCalls.filter((item) => item.type !== 'transferred'),\n }\n },\n setParked: (state, payload: boolean) => {\n state.parked = payload\n return state\n },\n updateRecordingStatus: (state, payload: boolean) => {\n state.isRecording = payload\n return state\n },\n updateStartTime: (state, payload: string) => {\n state.startTime = payload\n return state\n },\n updateIncoming: (state, payload: boolean) => {\n state.incoming = payload\n return state\n },\n reset: () => {\n return defaultState\n },\n setLocalVideoEnabled: (state, payload: boolean) => {\n state.isLocalVideoEnabled = payload\n return state\n },\n setVideoTrackAdded: (state, payload: boolean) => {\n state.hasVideoTrackAdded = payload\n return state\n },\n updateConferencing: (state, payload: boolean) => {\n return {\n ...state,\n conferencing: payload,\n }\n },\n },\n effects: (dispatch) => ({\n checkIncomingUpdatePlay: (payload: CurrentCallTypes, rootState) => {\n // Check call type and incoming confirmation source\n if (\n (rootState?.currentUser?.default_device?.type === 'webrtc' && payload?.incomingWebRTC) ||\n (rootState?.currentUser?.default_device?.type === 'physical' && payload?.incomingSocket) ||\n (rootState?.currentUser?.default_device?.type === 'nethlink' && payload?.incomingWebRTC)\n ) {\n payload.incoming = true\n\n // Get selected ringtone from store and play the audio\n const selectedRingtoneAudio = rootState.ringtones\n ? (rootState.ringtones.availableRingtones as any[]).find(\n (r: any) => r.name === rootState.ringtones.selectedRingtone,\n )?.base64Audio || rootState.ringtones.availableRingtones[0]?.base64Audio\n : undefined\n \n if (selectedRingtoneAudio) {\n dispatch.player.updateStartAudioPlayer({ src: selectedRingtoneAudio, loop: true, useRingtoneOutput: true })\n }\n }\n // Update the current call values and set incoming\n dispatch.currentCall.updateCurrentCall({\n ...payload,\n })\n },\n checkOutgoingUpdate: (payload: CurrentCallTypes, rootState) => {\n // Check call type and outgoing confirmation source\n if (\n (rootState.currentUser.default_device?.type === 'webrtc' && payload.outgoingWebRTC) ||\n (rootState.currentUser.default_device?.type === 'physical' && payload.outgoingSocket) ||\n (rootState.currentUser.default_device?.type === 'nethlink' && payload.outgoingWebRTC)\n ) {\n payload.outgoing = true\n // Dispatch an event for outgoing call\n dispatchOutgoingCallStarted(payload.displayName, payload.number)\n }\n // Update the current call values and set outgoing\n dispatch.currentCall.updateCurrentCall({\n ...payload,\n })\n },\n checkAcceptedUpdate: (payload: CurrentCallTypes, rootState) => {\n // Check call type and accepted confirmation source\n if (\n (rootState.currentUser.default_device?.type === 'webrtc' && payload.acceptedWebRTC) ||\n (rootState.currentUser.default_device?.type === 'physical' && payload.acceptedSocket) ||\n (rootState.currentUser.default_device?.type === 'nethlink' && payload.acceptedWebRTC)\n ) {\n payload.accepted = true\n eventDispatch('phone-island-call-answered', {})\n }\n // Update the current call values\n dispatch.currentCall.updateCurrentCall({\n ...payload,\n })\n },\n }),\n})\n\nexport type TransferCallsTypes = {\n type: 'transferred' | 'destination'\n displayName: string\n number: string\n startTime: string\n}\n\nexport type chDestTypes = {\n type: 'dest'\n channel: string\n callerNum: string\n startTime: number\n callerName: string\n bridgedNum: string\n bridgedName: string\n inConference: boolean\n channelStatus: string\n bridgedChannel: string\n}\n\nexport type chSourceTypes = {\n type: 'source'\n channel: string\n callerNum: string\n startTime: number\n callerName: string\n bridgedNum: string\n bridgedName: string\n inConference: boolean\n channelStatus: string\n bridgedChannel: string\n}\n\nexport interface CurrentCallTypes {\n displayName?: string\n username?: string\n number?: string\n incomingSocket?: boolean\n incomingWebRTC?: boolean\n parked?: boolean\n incoming?: boolean\n acceptedSocket?: boolean\n acceptedWebRTC?: boolean\n accepted?: boolean\n outgoingSocket?: boolean\n outgoingWebRTC?: boolean\n outgoing?: boolean\n startTime?: string\n muted?: boolean\n paused?: boolean\n conversationId?: string\n transferring?: boolean\n conferencing?: boolean\n transferringName?: string\n transferringNumber?: string\n transferringStartTime?: string\n transferSwitching?: boolean\n transferCalls?: TransferCallsTypes[]\n ownerExtension?: string\n isRecording?: boolean\n isLocalVideoEnabled?: boolean\n hasVideoTrackAdded?: boolean\n showRemoteVideoPlaceHolder?: boolean\n isStartingVideoCall?: boolean\n streamingSourceNumber?: string\n chDest?: any\n chSource?: any\n throughQueue?: boolean\n queueId?: string\n queueName?: string\n queueNumber?: string\n queuePosition?: string\n queueWaitingTime?: number\n}\n"],"names":["defaultState","displayName","username","number","incomingSocket","incomingWebRTC","incoming","acceptedSocket","acceptedWebRTC","accepted","outgoingSocket","outgoingWebRTC","parked","outgoing","startTime","muted","paused","keypadValue","conversationId","transferring","conferencing","transferringName","transferringNumber","transferringStartTime","transferSwitching","transferCalls","Array","ownerExtension","isRecording","isLocalVideoEnabled","showRemoteVideoPlaceHolder","hasVideoTrackAdded","isStartingVideoCall","streamingSourceNumber","chDest","chSource","throughQueue","queueId","queueName","queueNumber","queuePosition","queueWaitingTime","currentCall","createModel","state","reducers","updateCurrentCall","payload","Number","__assign","updateKeypadValue","updateTransferring","updateTransferSwitching","addTransferCalls","find","item","__spreadArray","deleteTransferCalls","filter","type","setParked","updateRecordingStatus","updateStartTime","updateIncoming","reset","setLocalVideoEnabled","setVideoTrackAdded","updateConferencing","effects","dispatch","checkIncomingUpdatePlay","rootState","_b","_a","currentUser","default_device","_d","_c","_f","_e","selectedRingtoneAudio","ringtones","_g","availableRingtones","r","name","selectedRingtone","base64Audio","_h","undefined","player","updateStartAudioPlayer","src","loop","useRingtoneOutput","checkOutgoingUpdate","dispatchOutgoingCallStarted","checkAcceptedUpdate","eventDispatch"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e="@nethesis/phone-island",s="Nethesis",t="1.0.8-dev.6",i="NethVoice CTI Phone Island",r=["nethserver","nethesis","nethvoice","phone","island"],o="https://github.com/nethesis/phone-island#readme",n="https://github.com/nethesis/dev/issues",p={type:"git",url:"https://github.com/nethesis/phone-island.git"},l=["dist"],d="dist/index.js",a="dist/index.d.ts",c={access:"public"},m={main:!1,types:!1,default:{distDir:"./dist-widget"}},u={"@fortawesome/fontawesome-svg-core":"6.2.1","@fortawesome/free-solid-svg-icons":"6.2.1","@fortawesome/react-fontawesome":"0.2.0","@headlessui/react":"^2.2.8","@nethesis/nethesis-solid-svg-icons":"github:nethesis/Font-Awesome#ns-solid","@rematch/core":"^2.2.0","@rematch/immer":"^2.1.3","@rematch/select":"^3.1.2","@testing-library/jest-dom":"^5.11.4","@testing-library/user-event":"^12.1.10","framer-motion":"^12.0.0",i18next:"^22.4.9","i18next-browser-languagedetector":"^7.0.1","i18next-http-backend":"^2.1.1","js-base64":"^3.7.3",lodash:"^4.17.21","mic-check":"^1.1.0",react:"^18.2.0","react-dom":"^18.2.0","react-i18next":"^12.1.5","react-moment":"^1.1.2","react-redux":"^8.0.5","react-tooltip":"^5.28.0","socket.io-client":"^4.5.3","styled-components":"^5.3.6","webrtc-adapter":"^9.0.1"},h={start:"npm run dev",dev:"node scripts/generate-dev-host.js && parcel .dev/phone-island-dev.html --port 6006 --open",test:"tsc --noEmit",watch:"rollup -w -c","watch:css":"BROWSERSLIST_IGNORE_OLD_DATA=1 npx tailwindcss -o ./dist/index.css --watch",build:"rm -rf ./dist && npm run build:css && rollup -c","build:css":"BROWSERSLIST_IGNORE_OLD_DATA=1 NODE_ENV=production npx tailwindcss -o ./dist/index.css --minify","build:win":"del /s /q dist && npm run build:wincss && rollup -c --configPlugin typescript","build:wincss":"set BROWSERSLIST_IGNORE_OLD_DATA=1 && set NODE_ENV=production && npx tailwindcss -o ./dist/index.css --minify","build:widget":"rm -rf ./dist-widget && parcel build ./src/index.widget.tsx --no-source-maps","serve:widget":"rm -rf ./widget-example/static/* && cp -rf ./dist-widget/* ./widget-example/static && npx http-server ./widget-example -o -c-1",release:"npm publish","release:widget":"node check-publish.js patch && npm version patch -m v%s",format:"prettier --write './**/*.{js,jsx,ts,tsx,css,md,json}' --config ./.prettierrc",bump:"node bump-version.js","build-pack":"npm run bump && npm run build && npm pack","build-pack:win":"npm run bump && npm run build:win && npm pack","publish:minor":"node check-publish.js minor && npm version minor --allow-same-version -m v%s --force","publish:major":"node check-publish.js major && npm version major --allow-same-version -m v%s --force","publish:patch":"node check-publish.js patch && npm version patch --allow-same-version -m v%s --force","publish:dev":"node publish-dev.js",preversion:"rm -rf dist-widget && npm run build:widget && git add dist-widget/index.widget.js dist-widget/index.widget.css && git commit -m 'chore(widget): release for jsDelivr'",postversion:"git push origin main --tags","revert-bump":"node revert-bump.js"},b={production:[">0.2%","not dead","not op_mini all"],development:["last 1 chrome version","last 1 firefox version","last 1 safari version"]},g={"@babel/core":"^7.20.2","@babel/preset-env":"^7.20.2","@parcel/transformer-typescript-types":"^2.8.0","@rollup/plugin-babel":"^6.0.2","@rollup/plugin-commonjs":"^23.0.2","@rollup/plugin-json":"^6.1.0","@rollup/plugin-node-resolve":"^15.0.1","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-typescript":"^9.0.2","@testing-library/react":"^13.4.0","@types/audioworklet":"^0.0.98","@types/jest":"^29.2.2","@types/react":"^18.0.26","@types/react-dom":"^18.0.9","@types/styled-components":"^5.1.26",babel:"^6.23.0",buffer:"^5.7.1",parcel:"^2.0.0",postcss:"^8.4.49",prettier:"^2.8.0","prop-types":"^15.8.1",rollup:"^2.79.1","rollup-plugin-generate-package-json":"^3.2.0","rollup-plugin-postcss":"^4.0.2","tailwind-scrollbar":"^3.1.0",tailwindcss:"^3.4.16",typescript:"^4.8.4","webm-duration-fix":"^1.0.4",webpack:"^5.74.0"},v={"@tootallnate/once":"^3.0.0",esbuild:"^0.25.11","nth-check":"^2.0.1","serialize-javascript":"^7.0.0",tar:"^7.5.1"},w="GPL-3.0-or-later",x={name:e,author:s,version:t,description:i,keywords:r,homepage:o,bugs:n,repository:p,private:!1,files:l,main:d,types:a,publishConfig:c,targets:m,dependencies:u,scripts:h,browserslist:b,devDependencies:g,overrides:v,license:w};exports.author=s,exports.browserslist=b,exports.bugs=n,exports.default=x,exports.dependencies=u,exports.description=i,exports.devDependencies=g,exports.files=l,exports.homepage=o,exports.keywords=r,exports.license=w,exports.main=d,exports.name=e,exports.overrides=v,exports.publishConfig=c,exports.repository=p,exports.scripts=h,exports.targets=m,exports.types=a,exports.version=t;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e="@nethesis/phone-island",s="Nethesis",t="1.0.8-dev.7",i="NethVoice CTI Phone Island",r=["nethserver","nethesis","nethvoice","phone","island"],o="https://github.com/nethesis/phone-island#readme",n="https://github.com/nethesis/dev/issues",p={type:"git",url:"https://github.com/nethesis/phone-island.git"},l=["dist"],d="dist/index.js",a="dist/index.d.ts",c={access:"public"},m={main:!1,types:!1,default:{distDir:"./dist-widget"}},u={"@fortawesome/fontawesome-svg-core":"6.2.1","@fortawesome/free-solid-svg-icons":"6.2.1","@fortawesome/react-fontawesome":"0.2.0","@headlessui/react":"^2.2.8","@nethesis/nethesis-solid-svg-icons":"github:nethesis/Font-Awesome#ns-solid","@rematch/core":"^2.2.0","@rematch/immer":"^2.1.3","@rematch/select":"^3.1.2","@testing-library/jest-dom":"^5.11.4","@testing-library/user-event":"^12.1.10","framer-motion":"^12.0.0",i18next:"^22.4.9","i18next-browser-languagedetector":"^7.0.1","i18next-http-backend":"^2.1.1","js-base64":"^3.7.3",lodash:"^4.17.21","mic-check":"^1.1.0",react:"^18.2.0","react-dom":"^18.2.0","react-i18next":"^12.1.5","react-moment":"^1.1.2","react-redux":"^8.0.5","react-tooltip":"^5.28.0","socket.io-client":"^4.5.3","styled-components":"^5.3.6","webrtc-adapter":"^9.0.1"},h={start:"npm run dev",dev:"node scripts/generate-dev-host.js && parcel .dev/phone-island-dev.html --port 6006 --open",test:"tsc --noEmit",watch:"rollup -w -c","watch:css":"BROWSERSLIST_IGNORE_OLD_DATA=1 npx tailwindcss -o ./dist/index.css --watch",build:"rm -rf ./dist && npm run build:css && rollup -c","build:css":"BROWSERSLIST_IGNORE_OLD_DATA=1 NODE_ENV=production npx tailwindcss -o ./dist/index.css --minify","build:win":"del /s /q dist && npm run build:wincss && rollup -c --configPlugin typescript","build:wincss":"set BROWSERSLIST_IGNORE_OLD_DATA=1 && set NODE_ENV=production && npx tailwindcss -o ./dist/index.css --minify","build:widget":"rm -rf ./dist-widget && parcel build ./src/index.widget.tsx --no-source-maps","serve:widget":"rm -rf ./widget-example/static/* && cp -rf ./dist-widget/* ./widget-example/static && npx http-server ./widget-example -o -c-1",release:"npm publish","release:widget":"node check-publish.js patch && npm version patch -m v%s",format:"prettier --write './**/*.{js,jsx,ts,tsx,css,md,json}' --config ./.prettierrc",bump:"node bump-version.js","build-pack":"npm run bump && npm run build && npm pack","build-pack:win":"npm run bump && npm run build:win && npm pack","publish:minor":"node check-publish.js minor && npm version minor --allow-same-version -m v%s --force","publish:major":"node check-publish.js major && npm version major --allow-same-version -m v%s --force","publish:patch":"node check-publish.js patch && npm version patch --allow-same-version -m v%s --force","publish:dev":"node publish-dev.js",preversion:"rm -rf dist-widget && npm run build:widget && git add dist-widget/index.widget.js dist-widget/index.widget.css && git commit -m 'chore(widget): release for jsDelivr'",postversion:"git push origin main --tags","revert-bump":"node revert-bump.js"},b={production:[">0.2%","not dead","not op_mini all"],development:["last 1 chrome version","last 1 firefox version","last 1 safari version"]},g={"@babel/core":"^7.20.2","@babel/preset-env":"^7.20.2","@parcel/transformer-typescript-types":"^2.8.0","@rollup/plugin-babel":"^6.0.2","@rollup/plugin-commonjs":"^23.0.2","@rollup/plugin-json":"^6.1.0","@rollup/plugin-node-resolve":"^15.0.1","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-typescript":"^9.0.2","@testing-library/react":"^13.4.0","@types/audioworklet":"^0.0.98","@types/jest":"^29.2.2","@types/react":"^18.0.26","@types/react-dom":"^18.0.9","@types/styled-components":"^5.1.26",babel:"^6.23.0",buffer:"^5.7.1",parcel:"^2.0.0",postcss:"^8.4.49",prettier:"^2.8.0","prop-types":"^15.8.1",rollup:"^2.79.1","rollup-plugin-generate-package-json":"^3.2.0","rollup-plugin-postcss":"^4.0.2","tailwind-scrollbar":"^3.1.0",tailwindcss:"^3.4.16",typescript:"^4.8.4","webm-duration-fix":"^1.0.4",webpack:"^5.74.0"},v={"@tootallnate/once":"^3.0.0",esbuild:"^0.25.11","nth-check":"^2.0.1","serialize-javascript":"^7.0.0",tar:"^7.5.1"},w="GPL-3.0-or-later",x={name:e,author:s,version:t,description:i,keywords:r,homepage:o,bugs:n,repository:p,private:!1,files:l,main:d,types:a,publishConfig:c,targets:m,dependencies:u,scripts:h,browserslist:b,devDependencies:g,overrides:v,license:w};exports.author=s,exports.browserslist=b,exports.bugs=n,exports.default=x,exports.dependencies=u,exports.description=i,exports.devDependencies=g,exports.files=l,exports.homepage=o,exports.keywords=r,exports.license=w,exports.main=d,exports.name=e,exports.overrides=v,exports.publishConfig=c,exports.repository=p,exports.scripts=h,exports.targets=m,exports.types=a,exports.version=t;
2
2
  //# sourceMappingURL=package.json.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nethesis/phone-island",
3
3
  "author": "Nethesis",
4
- "version": "1.0.8-dev.6",
4
+ "version": "1.0.8-dev.7",
5
5
  "description": "NethVoice CTI Phone Island",
6
6
  "keywords": [
7
7
  "nethserver",