@nethesis/phone-island 0.8.38 → 0.8.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../styles/Island.styles.js");require("../../node_modules/react-redux/es/index.js");var i=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),n=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),r=require("../../lib/phone/call.js");require("../../store/index.js"),require("../../node_modules/socket.io-client/build/esm/index.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../../lib/webrtc/janus.js"),require("../../node_modules/mic-check/lib/index.js");var l=require("../../lib/user/default_device.js");require("../Island.js");var a=require("../Button.js"),s=require("../AudioBars.js");require("../../node_modules/i18next/dist/esm/i18next.js");var o=require("./Timer.js"),u=require("./Number.js"),d=require("./DisplayName.js"),c=require("./Avatar.js"),p=require("./Actions.js"),m=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 f=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var v=require("../../node_modules/react-tooltip/dist/react-tooltip.min.mjs.js"),g=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),E=require("../../node_modules/react-redux/es/hooks/useSelector.js");function j(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var w=j(e);function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../styles/Island.styles.js");require("../../node_modules/react-redux/es/index.js");var i=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),n=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),r=require("../../lib/phone/call.js");require("../../store/index.js"),require("../../node_modules/socket.io-client/build/esm/index.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../../lib/webrtc/janus.js"),require("../../node_modules/mic-check/lib/index.js");var l=require("../../lib/user/default_device.js");require("../Island.js");var a=require("../Button.js"),s=require("../AudioBars.js");require("../../node_modules/i18next/dist/esm/i18next.js");var o=require("./Timer.js"),u=require("./Number.js"),d=require("./DisplayName.js"),c=require("./Avatar.js"),p=require("./Actions.js"),m=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 f=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var v=require("../../node_modules/react-tooltip/dist/react-tooltip.min.mjs.js"),g=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),E=require("../../node_modules/react-redux/es/hooks/useSelector.js");function j(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var w=j(e);function b(e,t){return!e&&!t}exports.default=function(){var e=E.useSelector((function(e){return e.currentCall})),j=e.incoming,h=e.accepted,x=e.outgoing,q=e.startTime,y=e.paused,_=e.number,N=e.isRecording,I=E.useSelector((function(e){return e.currentCall})),A=E.useSelector((function(e){return e.island})).isOpen,S=E.useSelector((function(e){return e.webrtc})).remoteAudioStream,z=E.useSelector((function(e){return e.listen})),T=E.useSelector((function(e){return e.listen})),F=T.isListen,L=T.isIntrude,P=E.useSelector((function(e){return e.alerts})).data,C=f.useTranslation().t,k=Object.values(P).filter((function(e){return e.active})),H=k.length>0?k[k.length-1]:null,O=E.useSelector((function(e){return e.currentUser})),B=function(){var e;return w.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"},w.default.createElement(i.FontAwesomeIcon,{size:"sm",icon:g.faOfficePhone,className:"pi-mr-1"}),w.default.createElement("span",{className:"pi-max-w-16 pi-truncate"},(null===(e=null==O?void 0:O.default_device)||void 0===e?void 0:e.description)||C("Common.Physical phone")))},D=function(e){return w.default.createElement("div",{className:"".concat(A?"pi-h-12 pi-w-12":"pi-h-6 pi-w-6"," pi-flex pi-justify-center pi-items-center")},w.default.createElement("div",{className:"".concat(A?"pi-h-8":"pi-h-4 pi-w-4 pi-rounded-full"," pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden")},w.default.createElement("span",{className:"".concat(A?"pi-w-8 pi-h-8":"pi-h-6 pi-w-6"," pi-animate-ping pi-absolute pi-inline-flex pi-rounded-full ").concat("red"===e?"pi-bg-red-400":"pi-bg-green-400"," pi-opacity-75 ")}),w.default.createElement(i.FontAwesomeIcon,{className:"pi-w-4 pi-h-6 pi-rotate-45 ".concat("red"===e?"pi-text-red-500":"pi-text-green-500"),icon:n.faCircle})))};return w.default.createElement(w.default.Fragment,null,null!==H?null:w.default.createElement("div",{className:"pi-bg-red pi-content-center pi-justify-center"},w.default.createElement(t.StyledCallView,{incoming:j,accepted:h,outgoing:x,isOpen:A},w.default.createElement(t.StyledTopContent,{isOpen:A,incoming:j,accepted:h,outgoing:x},(null==z?void 0:z.isListen)?w.default.createElement(i.FontAwesomeIcon,{className:"".concat(A?"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"),icon:n.faEarListen}):(null==z?void 0:z.isIntrude)?w.default.createElement(i.FontAwesomeIcon,{className:"".concat(A?"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"),icon:n.faHandPointUp}):""!==_&&""!==(null==I?void 0:I.username)&&"undefined"!==(null==I?void 0:I.username)?w.default.createElement(c.default,null):(!j||""!==(null==I?void 0:I.username)&&"undefined"!==(null==I?void 0:I.username))&&(!h||x||""!==(null==I?void 0:I.username)&&"undefined"!==(null==I?void 0:I.username))?!x||""!==(null==I?void 0:I.username)&&"undefined"!==(null==I?void 0:I.username)?x&&h&&(""===(null==I?void 0:I.username)||"undefined"===(null==I?void 0:I.username))?w.default.createElement(i.FontAwesomeIcon,{className:"".concat(A?"pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover pi-rotate-[135deg]":"pi-relative pi-z-30 pi-h-6 pi-w-6 pi-rounded-sm pi-bg-cover pi-rotate-[135deg]"),icon:n.faArrowLeft}):w.default.createElement(w.default.Fragment,null):w.default.createElement(i.FontAwesomeIcon,{className:"".concat(A?"pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover pi-rotate-[135deg]":"pi-relative pi-z-30 pi-h-6 pi-w-6 pi-rounded-sm pi-bg-cover pi-rotate-[135deg]"),icon:n.faArrowLeft}):w.default.createElement(i.FontAwesomeIcon,{className:"".concat(A?"pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover pi--rotate-45":"pi-relative pi-z-30 pi-h-6 pi-w-6 pi-rounded-sm pi-bg-cover pi--rotate-45"),icon:n.faArrowLeft}),A?(null==z?void 0:z.isIntrude)?w.default.createElement(t.StyledDetails,null,w.default.createElement("span",{className:"pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base"}," ",C("Common.Intrude"),(null==z?void 0:z.isIntrudeExtension)?" - ".concat(null==z?void 0:z.isIntrudeExtension):""),h?l.isPhysical()?B():w.default.createElement(o.default,{startTime:q,isHome:!0}):(null==z?void 0:z.isIntrudeExtension)?"".concat(null==z?void 0:z.isIntrudeExtension):""):(null==z?void 0:z.isListen)?w.default.createElement(t.StyledDetails,null,w.default.createElement("span",{className:"pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base"}," ",C("Common.Listen"),(null==z?void 0:z.isListenExtension)?" - ".concat(null==z?void 0:z.isListenExtension):""),h?l.isPhysical()?B():w.default.createElement(o.default,{startTime:q,isHome:!0}):(null==z?void 0:z.isListenExtension)?"".concat(null==z?void 0:z.isListenExtension):""," "):w.default.createElement(t.StyledDetails,null,w.default.createElement(d.default,null),h?l.isPhysical()?B():w.default.createElement(o.default,{startTime:q,isHome:!0}):w.default.createElement(u.default,null)):null,!A&&!h&&w.default.createElement(d.default,null),!A&&h&&w.default.createElement(o.default,{startTime:q,isHome:!0}),h&&N?D("red"):h&&S&&!l.isPhysical()?w.default.createElement(w.default.Fragment,null,w.default.createElement(s.AudioBars,{audioStream:S,paused:y,size:A?"large":"small"})):h&&l.isPhysical()?D("green"):w.default.createElement(w.default.Fragment,null)),A&&w.default.createElement("div",{className:"".concat(F||L?"":"pi-grid pi-gap-y-5"," ")},h&&w.default.createElement(p.default,null),w.default.createElement("div",{className:"pi-grid ".concat(b(x,h)?"pi-grid-cols-2":h?"pi-grid-cols-1 pi-justify-items-center":"pi-grid-cols-1 pi-justify-items-end"," pi-gap-3.5")},w.default.createElement(m.default,{description:C("Tooltip.Hangup and transfer")}),b(x,h)&&w.default.createElement(a.Button,{onClick:r.answerIncomingCall,variant:"green","data-tooltip-id":"tooltip-answer-left","data-tooltip-content":C("Tooltip.Answer")||""},w.default.createElement(i.FontAwesomeIcon,{className:"pi-w-6 pi-h-6",icon:n.faPhone}))))),w.default.createElement(v.Tooltip,{className:"pi-z-20",id:"tooltip-answer-left",place:"left"})))};
|
|
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 } from 'react'\nimport { StyledDetails, StyledCallView, StyledTopContent } from '../../styles/Island.styles'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faPhone,\n faEarListen,\n faHandPointUp,\n faArrowLeft,\n faCircle,\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 { Tooltip } from 'react-tooltip'\nimport { faOfficePhone } from '@nethesis/nethesis-solid-svg-icons'\nimport { isPhysical } from '../../lib/user/default_device'\n\nfunction isAnswerVisible(outgoing: boolean, accepted: boolean): boolean {\n return !outgoing && !accepted\n}\n\n/**\n * The main view to manage calls, the starting point for calls actions flows\n */\nconst CallView: FC<CallViewProps> = () => {\n // Get multiple values from currentCall state\n const { incoming, accepted, outgoing, startTime, paused, number, isRecording } = useSelector(\n (state: RootState) => state.currentCall,\n )\n\n const currentCallDetails: any = useSelector((state: RootState) => state.currentCall)\n // Get isOpen and view from island state\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n // Retrieve the audio stream from the webrtc state\n const { remoteAudioStream } = useSelector((state: RootState) => state.webrtc)\n\n const intrudeListenStatus = useSelector((state: RootState) => state.listen)\n const { isListen, isIntrude } = useSelector((state: RootState) => state.listen)\n const { data } = useSelector((state: RootState) => state.alerts)\n\n const { t } = useTranslation()\n const activeAlerts = Object.values(data).filter((alert: any) => alert.active)\n const latestAlert = activeAlerts.length > 0 ? activeAlerts[activeAlerts.length - 1] : null\n const currentUser = useSelector((state: RootState) => state.currentUser)\n\n const landlinePhoneDiv = () => {\n return (\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 }\n\n const pulseIcon = (color: string) => {\n return (\n <div\n className={`${\n !isOpen ? 'pi-h-6 pi-w-6' : 'pi-h-12 pi-w-12'\n } pi-flex pi-justify-center pi-items-center`}\n >\n <div\n className={`${\n !isOpen ? 'pi-h-4 pi-w-4 pi-rounded-full' : 'pi-h-8'\n } pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden`}\n >\n <span\n className={`${\n !isOpen ? 'pi-h-6 pi-w-6' : 'pi-w-8 pi-h-8'\n } pi-animate-ping pi-absolute pi-inline-flex pi-rounded-full ${\n color === 'red' ? 'pi-bg-red-400' : 'animationDotBackgroundGreen'\n } pi-opacity-75 `}\n ></span>\n <FontAwesomeIcon\n className={`pi-w-4 pi-h-6 pi-rotate-45 ${\n color === 'red' ? 'pi-text-red-500' : 'animationDotTextGreen'\n }`}\n icon={faCircle}\n ></FontAwesomeIcon>\n </div>\n </div>\n )\n }\n\n return (\n <>\n {/* Avoid alert message and incoming call message for slow connections */}\n {latestAlert !== null ? null : (\n <div className='pi-bg-red pi-content-center pi-justify-center'>\n <StyledCallView\n incoming={incoming}\n accepted={accepted}\n outgoing={outgoing}\n isOpen={isOpen}\n >\n <StyledTopContent\n isOpen={isOpen}\n incoming={incoming}\n accepted={accepted}\n outgoing={outgoing}\n >\n {intrudeListenStatus?.isListen ? (\n <FontAwesomeIcon\n className={`${\n 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 icon={faEarListen}\n />\n ) : intrudeListenStatus?.isIntrude ? (\n <FontAwesomeIcon\n // className='pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover'\n className={`${\n 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 icon={faHandPointUp}\n />\n ) : number !== '' &&\n currentCallDetails?.username !== '' &&\n currentCallDetails?.username !== 'undefined' ? (\n <Avatar />\n ) : incoming &&\n (currentCallDetails?.username === '' ||\n currentCallDetails?.username === 'undefined') ? (\n <FontAwesomeIcon\n // className='pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover'\n className={`${\n isOpen\n ? 'pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover pi--rotate-45'\n : 'pi-relative pi-z-30 pi-h-6 pi-w-6 pi-rounded-sm pi-bg-cover pi--rotate-45'\n }`}\n icon={faArrowLeft}\n />\n ) : accepted &&\n !outgoing &&\n (currentCallDetails?.username === '' ||\n currentCallDetails?.username === 'undefined') ? (\n <FontAwesomeIcon\n // className='pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover'\n className={`${\n isOpen\n ? 'pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover pi--rotate-45'\n : 'pi-relative pi-z-30 pi-h-6 pi-w-6 pi-rounded-sm pi-bg-cover pi--rotate-45'\n }`}\n icon={faArrowLeft}\n />\n ) : outgoing &&\n (currentCallDetails?.username === '' ||\n currentCallDetails?.username === 'undefined') ? (\n // set a loading avatar when the call is not attached to a user\n <FontAwesomeIcon\n className={`${\n isOpen\n ? 'pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover pi-rotate-[135deg]'\n : 'pi-relative pi-z-30 pi-h-6 pi-w-6 pi-rounded-sm pi-bg-cover pi-rotate-[135deg]'\n }`}\n icon={faArrowLeft}\n />\n ) : outgoing &&\n accepted &&\n (currentCallDetails?.username === '' ||\n currentCallDetails?.username === 'undefined') ? (\n // set a loading avatar when the call is not attached to a user\n <FontAwesomeIcon\n className={`${\n isOpen\n ? 'pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover pi-rotate-[135deg]'\n : 'pi-relative pi-z-30 pi-h-6 pi-w-6 pi-rounded-sm pi-bg-cover pi-rotate-[135deg]'\n }`}\n icon={faArrowLeft}\n />\n ) : (\n <></>\n )}\n {isOpen ? (\n intrudeListenStatus?.isIntrude ? (\n <StyledDetails>\n <span className='pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base'>\n {' '}\n {t('Common.Intrude')}\n {intrudeListenStatus?.isIntrudeExtension\n ? ` - ${intrudeListenStatus?.isIntrudeExtension}`\n : ''}\n </span>\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isHome />\n ) : (\n landlinePhoneDiv()\n )\n ) : intrudeListenStatus?.isIntrudeExtension ? (\n `${intrudeListenStatus?.isIntrudeExtension}`\n ) : (\n ''\n )}\n </StyledDetails>\n ) : intrudeListenStatus?.isListen ? (\n <StyledDetails>\n <span className='pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base'>\n {' '}\n {t('Common.Listen')}\n {intrudeListenStatus?.isListenExtension\n ? ` - ${intrudeListenStatus?.isListenExtension}`\n : ''}\n </span>\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isHome />\n ) : (\n landlinePhoneDiv()\n )\n ) : intrudeListenStatus?.isListenExtension ? (\n `${intrudeListenStatus?.isListenExtension}`\n ) : (\n ''\n )}{' '}\n </StyledDetails>\n ) : (\n <StyledDetails>\n <DisplayName />\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isHome />\n ) : (\n landlinePhoneDiv()\n )\n ) : (\n <Number />\n )}\n </StyledDetails>\n )\n ) : null}\n {/* The display name when collepsed */}\n {!isOpen && !accepted && <DisplayName />}\n {/* The timer when collapsed */}\n {!isOpen && accepted && <Timer startTime={startTime} isHome />}\n {accepted && isRecording ? (\n pulseIcon('red')\n ) : accepted && remoteAudioStream && !isPhysical() ? (\n <>\n <AudioBars\n audioStream={remoteAudioStream}\n paused={paused}\n size={isOpen ? 'large' : 'small'}\n />\n </>\n ) : accepted && isPhysical() ? (\n pulseIcon('green')\n ) : (\n <></>\n )}\n </StyledTopContent>\n {isOpen && (\n <div className={`${!(isListen || isIntrude) ? 'pi-grid pi-gap-y-5' : ''} `}>\n {accepted && <Actions />}\n <div\n className={`pi-grid ${\n isAnswerVisible(outgoing, accepted)\n ? 'pi-grid-cols-2'\n : accepted\n ? 'pi-grid-cols-1 pi-justify-items-center'\n : 'pi-grid-cols-1 pi-justify-items-end'\n } pi-gap-3.5`}\n >\n {/* The button to hangup the currentCall */}\n {/* {incoming || outgoing ? (\n <Button onClick={hangupCurrentCall} variant='red'>\n <FontAwesomeIcon className='pi-rotate-135 pi-w-6 pi-h-6' icon={faPhone} />\n </Button>\n ) : ( */}\n <Hangup description={t('Tooltip.Hangup and transfer')} />\n {/* )} */}\n {/* The button to answer the incoming call */}\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 </StyledCallView>\n <Tooltip className='pi-z-20' id='tooltip-answer-left' place='left' />\n </div>\n )}\n </>\n )\n}\n\nexport default CallView\n\nexport interface CallViewProps {}\n"],"names":["isAnswerVisible","outgoing","accepted","_a","useSelector","state","currentCall","incoming","startTime","paused","number","isRecording","currentCallDetails","isOpen","island","remoteAudioStream","webrtc","intrudeListenStatus","listen","_b","isListen","isIntrude","data","alerts","t","useTranslation","activeAlerts","Object","values","filter","alert","active","latestAlert","length","currentUser","landlinePhoneDiv","React","createElement","className","FontAwesomeIcon","size","icon","faOfficePhone","default_device","description","pulseIcon","color","concat","faCircle","Fragment","StyledCallView","StyledTopContent","faEarListen","faHandPointUp","username","Avatar","faArrowLeft","StyledDetails","isIntrudeExtension","isPhysical","Timer","isHome","isListenExtension","DisplayName","Number","AudioBars","audioStream","Actions","Hangup","Button","onClick","answerIncomingCall","variant","faPhone","Tooltip","id","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 } from 'react'\nimport { StyledDetails, StyledCallView, StyledTopContent } from '../../styles/Island.styles'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faPhone,\n faEarListen,\n faHandPointUp,\n faArrowLeft,\n faCircle,\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 { Tooltip } from 'react-tooltip'\nimport { faOfficePhone } from '@nethesis/nethesis-solid-svg-icons'\nimport { isPhysical } from '../../lib/user/default_device'\n\nfunction isAnswerVisible(outgoing: boolean, accepted: boolean): boolean {\n return !outgoing && !accepted\n}\n\n/**\n * The main view to manage calls, the starting point for calls actions flows\n */\nconst CallView: FC<CallViewProps> = () => {\n // Get multiple values from currentCall state\n const { incoming, accepted, outgoing, startTime, paused, number, isRecording } = useSelector(\n (state: RootState) => state.currentCall,\n )\n\n const currentCallDetails: any = useSelector((state: RootState) => state.currentCall)\n // Get isOpen and view from island state\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n // Retrieve the audio stream from the webrtc state\n const { remoteAudioStream } = useSelector((state: RootState) => state.webrtc)\n\n const intrudeListenStatus = useSelector((state: RootState) => state.listen)\n const { isListen, isIntrude } = useSelector((state: RootState) => state.listen)\n const { data } = useSelector((state: RootState) => state.alerts)\n\n const { t } = useTranslation()\n const activeAlerts = Object.values(data).filter((alert: any) => alert.active)\n const latestAlert = activeAlerts.length > 0 ? activeAlerts[activeAlerts.length - 1] : null\n const currentUser = useSelector((state: RootState) => state.currentUser)\n\n const landlinePhoneDiv = () => {\n return (\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 }\n\n const pulseIcon = (color: string) => {\n return (\n <div\n className={`${\n !isOpen ? 'pi-h-6 pi-w-6' : 'pi-h-12 pi-w-12'\n } pi-flex pi-justify-center pi-items-center`}\n >\n <div\n className={`${\n !isOpen ? 'pi-h-4 pi-w-4 pi-rounded-full' : 'pi-h-8'\n } pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden`}\n >\n <span\n className={`${\n !isOpen ? 'pi-h-6 pi-w-6' : 'pi-w-8 pi-h-8'\n } pi-animate-ping pi-absolute pi-inline-flex pi-rounded-full ${\n color === 'red' ? 'pi-bg-red-400' : 'pi-bg-green-400'\n } pi-opacity-75 `}\n ></span>\n <FontAwesomeIcon\n className={`pi-w-4 pi-h-6 pi-rotate-45 ${\n color === 'red' ? 'pi-text-red-500' : 'pi-text-green-500'\n }`}\n icon={faCircle}\n ></FontAwesomeIcon>\n </div>\n </div>\n )\n }\n\n return (\n <>\n {/* Avoid alert message and incoming call message for slow connections */}\n {latestAlert !== null ? null : (\n <div className='pi-bg-red pi-content-center pi-justify-center'>\n <StyledCallView\n incoming={incoming}\n accepted={accepted}\n outgoing={outgoing}\n isOpen={isOpen}\n >\n <StyledTopContent\n isOpen={isOpen}\n incoming={incoming}\n accepted={accepted}\n outgoing={outgoing}\n >\n {intrudeListenStatus?.isListen ? (\n <FontAwesomeIcon\n className={`${\n 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 icon={faEarListen}\n />\n ) : intrudeListenStatus?.isIntrude ? (\n <FontAwesomeIcon\n // className='pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover'\n className={`${\n 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 icon={faHandPointUp}\n />\n ) : number !== '' &&\n currentCallDetails?.username !== '' &&\n currentCallDetails?.username !== 'undefined' ? (\n <Avatar />\n ) : incoming &&\n (currentCallDetails?.username === '' ||\n currentCallDetails?.username === 'undefined') ? (\n <FontAwesomeIcon\n // className='pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover'\n className={`${\n isOpen\n ? 'pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover pi--rotate-45'\n : 'pi-relative pi-z-30 pi-h-6 pi-w-6 pi-rounded-sm pi-bg-cover pi--rotate-45'\n }`}\n icon={faArrowLeft}\n />\n ) : accepted &&\n !outgoing &&\n (currentCallDetails?.username === '' ||\n currentCallDetails?.username === 'undefined') ? (\n <FontAwesomeIcon\n // className='pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover'\n className={`${\n isOpen\n ? 'pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover pi--rotate-45'\n : 'pi-relative pi-z-30 pi-h-6 pi-w-6 pi-rounded-sm pi-bg-cover pi--rotate-45'\n }`}\n icon={faArrowLeft}\n />\n ) : outgoing &&\n (currentCallDetails?.username === '' ||\n currentCallDetails?.username === 'undefined') ? (\n // set a loading avatar when the call is not attached to a user\n <FontAwesomeIcon\n className={`${\n isOpen\n ? 'pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover pi-rotate-[135deg]'\n : 'pi-relative pi-z-30 pi-h-6 pi-w-6 pi-rounded-sm pi-bg-cover pi-rotate-[135deg]'\n }`}\n icon={faArrowLeft}\n />\n ) : outgoing &&\n accepted &&\n (currentCallDetails?.username === '' ||\n currentCallDetails?.username === 'undefined') ? (\n // set a loading avatar when the call is not attached to a user\n <FontAwesomeIcon\n className={`${\n isOpen\n ? 'pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover pi-rotate-[135deg]'\n : 'pi-relative pi-z-30 pi-h-6 pi-w-6 pi-rounded-sm pi-bg-cover pi-rotate-[135deg]'\n }`}\n icon={faArrowLeft}\n />\n ) : (\n <></>\n )}\n {isOpen ? (\n intrudeListenStatus?.isIntrude ? (\n <StyledDetails>\n <span className='pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base'>\n {' '}\n {t('Common.Intrude')}\n {intrudeListenStatus?.isIntrudeExtension\n ? ` - ${intrudeListenStatus?.isIntrudeExtension}`\n : ''}\n </span>\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isHome />\n ) : (\n landlinePhoneDiv()\n )\n ) : intrudeListenStatus?.isIntrudeExtension ? (\n `${intrudeListenStatus?.isIntrudeExtension}`\n ) : (\n ''\n )}\n </StyledDetails>\n ) : intrudeListenStatus?.isListen ? (\n <StyledDetails>\n <span className='pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base'>\n {' '}\n {t('Common.Listen')}\n {intrudeListenStatus?.isListenExtension\n ? ` - ${intrudeListenStatus?.isListenExtension}`\n : ''}\n </span>\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isHome />\n ) : (\n landlinePhoneDiv()\n )\n ) : intrudeListenStatus?.isListenExtension ? (\n `${intrudeListenStatus?.isListenExtension}`\n ) : (\n ''\n )}{' '}\n </StyledDetails>\n ) : (\n <StyledDetails>\n <DisplayName />\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isHome />\n ) : (\n landlinePhoneDiv()\n )\n ) : (\n <Number />\n )}\n </StyledDetails>\n )\n ) : null}\n {/* The display name when collepsed */}\n {!isOpen && !accepted && <DisplayName />}\n {/* The timer when collapsed */}\n {!isOpen && accepted && <Timer startTime={startTime} isHome />}\n {accepted && isRecording ? (\n pulseIcon('red')\n ) : accepted && remoteAudioStream && !isPhysical() ? (\n <>\n <AudioBars\n audioStream={remoteAudioStream}\n paused={paused}\n size={isOpen ? 'large' : 'small'}\n />\n </>\n ) : accepted && isPhysical() ? (\n pulseIcon('green')\n ) : (\n <></>\n )}\n </StyledTopContent>\n {isOpen && (\n <div className={`${!(isListen || isIntrude) ? 'pi-grid pi-gap-y-5' : ''} `}>\n {accepted && <Actions />}\n <div\n className={`pi-grid ${\n isAnswerVisible(outgoing, accepted)\n ? 'pi-grid-cols-2'\n : accepted\n ? 'pi-grid-cols-1 pi-justify-items-center'\n : 'pi-grid-cols-1 pi-justify-items-end'\n } pi-gap-3.5`}\n >\n {/* The button to hangup the currentCall */}\n {/* {incoming || outgoing ? (\n <Button onClick={hangupCurrentCall} variant='red'>\n <FontAwesomeIcon className='pi-rotate-135 pi-w-6 pi-h-6' icon={faPhone} />\n </Button>\n ) : ( */}\n <Hangup description={t('Tooltip.Hangup and transfer')} />\n {/* )} */}\n {/* The button to answer the incoming call */}\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 </StyledCallView>\n <Tooltip className='pi-z-20' id='tooltip-answer-left' place='left' />\n </div>\n )}\n </>\n )\n}\n\nexport default CallView\n\nexport interface CallViewProps {}\n"],"names":["isAnswerVisible","outgoing","accepted","_a","useSelector","state","currentCall","incoming","startTime","paused","number","isRecording","currentCallDetails","isOpen","island","remoteAudioStream","webrtc","intrudeListenStatus","listen","_b","isListen","isIntrude","data","alerts","t","useTranslation","activeAlerts","Object","values","filter","alert","active","latestAlert","length","currentUser","landlinePhoneDiv","React","createElement","className","FontAwesomeIcon","size","icon","faOfficePhone","default_device","description","pulseIcon","color","concat","faCircle","Fragment","StyledCallView","StyledTopContent","faEarListen","faHandPointUp","username","Avatar","faArrowLeft","StyledDetails","isIntrudeExtension","isPhysical","Timer","isHome","isListenExtension","DisplayName","Number","AudioBars","audioStream","Actions","Hangup","Button","onClick","answerIncomingCall","variant","faPhone","Tooltip","id","place"],"mappings":"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"}
|