@nethesis/phone-island 0.7.121 → 0.7.122
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/App.js +1 -1
- package/dist/App.js.map +1 -1
- package/dist/components/Island.js +1 -1
- package/dist/components/Island.js.map +1 -1
- package/dist/components/KeypadView/Actions.js +1 -1
- package/dist/components/RecorderView/Actions.js +1 -1
- package/dist/components/RecorderView/Actions.js.map +1 -1
- package/dist/components/RecorderView/index.js +1 -1
- package/dist/components/RecorderView/index.js.map +1 -1
- package/dist/components/Socket.js +1 -1
- package/dist/components/SwitchInputView/DropdownContent.js +1 -1
- package/dist/components/SwitchInputView/DropdownContent.js.map +1 -1
- package/dist/events/CallEvents.js +1 -1
- package/dist/events/CallEvents.js.map +1 -1
- package/dist/index.css +1 -1
- package/dist/lib/phone/call.d.ts +0 -6
- package/dist/lib/phone/call.js +1 -1
- package/dist/lib/phone/call.js.map +1 -1
- package/dist/lib/webrtc/messages.d.ts +1 -7
- package/dist/lib/webrtc/messages.js +1 -1
- package/dist/lib/webrtc/messages.js.map +1 -1
- package/package.json +1 -1
package/dist/App.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("./components/Events.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("./components/Events.js"),n=require("./components/Socket.js"),s=require("./components/WebRTC.js"),o=require("./components/Island.js"),a=require("./components/RestAPI.js"),i=require("./utils/customHooks/useEventListener.js"),r=require("./utils/genericFunctions/eventDispatch.js"),u=require("./utils/genericFunctions/localStorage.js");require("./node_modules/react-redux/es/index.js");var d=require("./store/index.js");require("./node_modules/@fortawesome/react-fontawesome/index.es.js"),require("./node_modules/framer-motion/dist/framer-motion.js");var c=require("./node_modules/js-base64/base64.mjs.js"),l=require("./workers/wake_up.js"),p=require("./lib/i18n.js");require("./node_modules/react-tooltip/dist/react-tooltip.min.css.js");var h=require("./lib/webrtc/messages.js"),f=require("./node_modules/react-redux/es/components/Provider.js");function v(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("./node_modules/react-redux/node_modules/react-is/index.js"),require("./node_modules/react-redux/es/components/Context.js");var m=v(e),j=function(v){var j=v.dataConfig,I=v.showAlways,q=void 0!==I&&I,E=c.Base64.atob(j||"").split(":"),g=E[0],w=E[1],S=E[2],k=E[3],b=E[4],D=E[5],_=E[6],x=e.useState(!1),y=x[0],L=x[1],C=e.useState(!1),N=C[0],P=C[1],A=e.useState(!1),O=A[0],R=A[1];e.useEffect((function(){var e=new Worker(l.default,{type:"module"});return e.onmessage=function(e){"wakeup"===e.data&&L(!0)},function(){e.terminate()}}),[]),e.useEffect((function(){O&&N&&(L(!1),P(!1),R(!1))}),[O,N]),i.useEventListener("phone-island-call-keypad-close",(function(){d.store.dispatch.island.setIslandView("call"),r.eventDispatch("phone-island-call-keypad-closed",{})})),i.useEventListener("phone-island-call-transfer-close",(function(){d.store.dispatch.island.setIslandView("call"),r.eventDispatch("phone-island-call-transfer-closed",{})})),i.useEventListener("phone-island-recording-close",(function(){d.store.dispatch.island.setIslandView(null),r.eventDispatch("phone-island-recording-closed",{})})),i.useEventListener("phone-island-audio-player-close",(function(){d.store.dispatch.island.setIslandView(null),r.eventDispatch("phone-island-audio-player-closed",{})})),i.useEventListener("phone-island-detach",(function(e){h.detach(),d.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),r.eventDispatch("phone-island-detached",{})})),i.useEventListener("phone-island-audio-input-change",(function(e){u.setJSONItem("phone-island-audio-input-device",{deviceId:e.deviceId}),r.eventDispatch("phone-island-audio-input-changed",{})})),i.useEventListener("phone-island-audio-output-change",(function(e){var t=d.store.getState().player.remoteAudio;null==t||t.current.setSinkId(e.deviceId).then((function(){console.info("Default audio output device change with success!"),u.setJSONItem("phone-island-audio-output-device",{deviceId:e.deviceId}),r.eventDispatch("phone-island-audio-output-changed",{})})).catch((function(e){console.error("Default audio output device change error:",e)}))}));var T=e.useState(!0),V=T[0],F=T[1],H=e.useState(!0),J=H[0],W=H[1];e.useEffect((function(){V&&(p.loadI18n(),F(!1))}),[V]);var B=d.store.getState().player.remoteAudio;return e.useEffect((function(){var e;if(J&&B){var t=null===(e=u.getJSONItem("phone-island-audio-output-device"))||void 0===e?void 0:e.deviceId;r.eventDispatch("phone-island-audio-output-change",{deviceId:t}),W(!1)}}),[J,B]),m.default.createElement(m.default.Fragment,null,m.default.createElement(f.default,{store:d.store},m.default.createElement(s.WebRTC,{hostName:g,sipExten:k,sipSecret:b,sipHost:D,sipPort:_,reload:y,reloadedCallback:function(){return P(!0)}},m.default.createElement(a.RestAPI,{hostName:g,username:w,authToken:S},m.default.createElement(n.Socket,{hostName:g,username:w,authToken:S,reload:y,reloadedCallback:function(){return R(!0)}},m.default.createElement(t.Events,{sipHost:D},m.default.createElement(o.Island,{showAlways:q})))))))};j.displayName="PhoneIsland",exports.PhoneIsland=j;
|
|
2
2
|
//# sourceMappingURL=App.js.map
|
package/dist/App.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.js","sources":["../src/App.tsx"],"sourcesContent":["import React, { type FC, useState, useEffect } from 'react'\nimport { Events, Socket, WebRTC, Island, RestAPI } from './components'\nimport { Provider } from 'react-redux'\nimport { store } from './store'\nimport { Base64 } from 'js-base64'\nimport wakeUpWorker from './workers/wake_up'\nimport loadI18n from './lib/i18n'\n\nimport 'react-tooltip/dist/react-tooltip.css'\nimport { useEventListener, eventDispatch } from './utils'\nimport { detach } from './lib/webrtc/messages'\n\ninterface PhoneIslandProps {\n dataConfig: string\n showAlways?: boolean\n}\n\nexport const PhoneIsland: FC<PhoneIslandProps> = ({ dataConfig, showAlways = false }) => {\n const CONFIG: string[] = Base64.atob(dataConfig || '').split(':')\n const HOST_NAME: string = CONFIG[0]\n const USERNAME: string = CONFIG[1]\n const AUTH_TOKEN: string = CONFIG[2]\n const SIP_EXTEN: string = CONFIG[3]\n const SIP_SECRET: string = CONFIG[4]\n const SIP_HOST: string = CONFIG[5]\n const SIP_PORT: string = CONFIG[6]\n\n // Initialize the state to manage the reload events\n const [reload, setReload] = useState<boolean>(false)\n const [reloadedWebRTC, setReloadedWebRTC] = useState<boolean>(false)\n const [reloadedSocket, setReloadedSocket] = useState<boolean>(false)\n\n useEffect(() => {\n const worker = new Worker(wakeUpWorker, { type: 'module' })\n worker.onmessage = (event: MessageEvent<string>) => {\n // Handle wakeup message\n if (event.data === 'wakeup') {\n setReload(true)\n }\n }\n\n return () => {\n worker.terminate()\n }\n }, [])\n\n useEffect(() => {\n if (reloadedSocket && reloadedWebRTC) {\n setReload(false)\n setReloadedWebRTC(false)\n setReloadedSocket(false)\n }\n }, [reloadedSocket, reloadedWebRTC])\n\n useEventListener('phone-island-call-keypad-close', () => {\n store.dispatch.island.setIslandView('call')\n eventDispatch('phone-island-call-keypad-closed', {})\n })\n useEventListener('phone-island-call-transfer-close', () => {\n store.dispatch.island.setIslandView('call')\n eventDispatch('phone-island-call-transfer-closed', {})\n })\n useEventListener('phone-island-recording-close', () => {\n store.dispatch.island.setIslandView(null)\n eventDispatch('phone-island-recording-closed', {})\n })\n useEventListener('phone-island-audio-player-close', () => {\n store.dispatch.island.setIslandView(null)\n eventDispatch('phone-island-audio-player-closed', {})\n })\n\n useEventListener('phone-island-detach', (data) => {\n detach()\n store.dispatch.currentUser.updateCurrentDefaultDevice(data?.deviceInformationObject)\n eventDispatch('phone-island-detached', {})\n })\n\n const [firstRenderI18n, setFirstRenderI18n] = useState(true)\n //initialize i18n\n useEffect(() => {\n if (firstRenderI18n) {\n loadI18n()\n setFirstRenderI18n(false)\n }\n }, [firstRenderI18n])\n\n return (\n <>\n <Provider store={store}>\n <WebRTC\n hostName={HOST_NAME}\n sipExten={SIP_EXTEN}\n sipSecret={SIP_SECRET}\n sipHost={SIP_HOST}\n sipPort={SIP_PORT}\n reload={reload}\n reloadedCallback={() => setReloadedWebRTC(true)}\n >\n <RestAPI hostName={HOST_NAME} username={USERNAME} authToken={AUTH_TOKEN}>\n <Socket\n hostName={HOST_NAME}\n username={USERNAME}\n authToken={AUTH_TOKEN}\n reload={reload}\n reloadedCallback={() => setReloadedSocket(true)}\n >\n <Events sipHost={SIP_HOST}>\n <Island showAlways={showAlways} />\n </Events>\n </Socket>\n </RestAPI>\n </WebRTC>\n </Provider>\n </>\n )\n}\n\nPhoneIsland.displayName = 'PhoneIsland'\n"],"names":["PhoneIsland","_a","dataConfig","_b","showAlways","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","SIP_HOST","SIP_PORT","_c","useState","reload","setReload","_d","reloadedWebRTC","setReloadedWebRTC","_e","reloadedSocket","setReloadedSocket","useEffect","worker","Worker","wakeUpWorker","type","onmessage","event","data","terminate","useEventListener","store","dispatch","island","setIslandView","eventDispatch","detach","currentUser","updateCurrentDefaultDevice","deviceInformationObject","_f","firstRenderI18n","setFirstRenderI18n","loadI18n","React","createElement","Fragment","Provider","WebRTC","hostName","sipExten","sipSecret","sipHost","sipPort","reloadedCallback","RestAPI","username","authToken","Socket","Events","Island","displayName"],"mappings":"
|
|
1
|
+
{"version":3,"file":"App.js","sources":["../src/App.tsx"],"sourcesContent":["import React, { type FC, useState, useEffect } from 'react'\nimport { Events, Socket, WebRTC, Island, RestAPI } from './components'\nimport { Provider } from 'react-redux'\nimport { store } from './store'\nimport { Base64 } from 'js-base64'\nimport wakeUpWorker from './workers/wake_up'\nimport loadI18n from './lib/i18n'\n\nimport 'react-tooltip/dist/react-tooltip.css'\nimport { useEventListener, eventDispatch, setJSONItem, getJSONItem } from './utils'\nimport { detach } from './lib/webrtc/messages'\n\ninterface PhoneIslandProps {\n dataConfig: string\n showAlways?: boolean\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport const PhoneIsland: FC<PhoneIslandProps> = ({ dataConfig, showAlways = false }) => {\n const CONFIG: string[] = Base64.atob(dataConfig || '').split(':')\n const HOST_NAME: string = CONFIG[0]\n const USERNAME: string = CONFIG[1]\n const AUTH_TOKEN: string = CONFIG[2]\n const SIP_EXTEN: string = CONFIG[3]\n const SIP_SECRET: string = CONFIG[4]\n const SIP_HOST: string = CONFIG[5]\n const SIP_PORT: string = CONFIG[6]\n\n // Initialize the state to manage the reload events\n const [reload, setReload] = useState<boolean>(false)\n const [reloadedWebRTC, setReloadedWebRTC] = useState<boolean>(false)\n const [reloadedSocket, setReloadedSocket] = useState<boolean>(false)\n\n useEffect(() => {\n const worker = new Worker(wakeUpWorker, { type: 'module' })\n worker.onmessage = (event: MessageEvent<string>) => {\n // Handle wakeup message\n if (event.data === 'wakeup') {\n setReload(true)\n }\n }\n\n return () => {\n worker.terminate()\n }\n }, [])\n\n useEffect(() => {\n if (reloadedSocket && reloadedWebRTC) {\n setReload(false)\n setReloadedWebRTC(false)\n setReloadedSocket(false)\n }\n }, [reloadedSocket, reloadedWebRTC])\n\n useEventListener('phone-island-call-keypad-close', () => {\n store.dispatch.island.setIslandView('call')\n eventDispatch('phone-island-call-keypad-closed', {})\n })\n useEventListener('phone-island-call-transfer-close', () => {\n store.dispatch.island.setIslandView('call')\n eventDispatch('phone-island-call-transfer-closed', {})\n })\n useEventListener('phone-island-recording-close', () => {\n store.dispatch.island.setIslandView(null)\n eventDispatch('phone-island-recording-closed', {})\n })\n useEventListener('phone-island-audio-player-close', () => {\n store.dispatch.island.setIslandView(null)\n eventDispatch('phone-island-audio-player-closed', {})\n })\n\n useEventListener('phone-island-detach', (data) => {\n detach()\n store.dispatch.currentUser.updateCurrentDefaultDevice(data?.deviceInformationObject)\n eventDispatch('phone-island-detached', {})\n })\n\n useEventListener('phone-island-audio-input-change', (data: DeviceInputOutputTypes) => {\n setJSONItem('phone-island-audio-input-device', { deviceId: data.deviceId })\n eventDispatch('phone-island-audio-input-changed', {})\n })\n useEventListener('phone-island-audio-output-change', (data: DeviceInputOutputTypes) => {\n const remoteAudioElement: any = store.getState().player.remoteAudio\n // set audio output\n remoteAudioElement?.current\n .setSinkId(data.deviceId)\n .then(function () {\n console.info('Default audio output device change with success!')\n // set device to localstorage\n setJSONItem('phone-island-audio-output-device', { deviceId: data.deviceId })\n\n // dispatch event\n eventDispatch('phone-island-audio-output-changed', {})\n })\n .catch(function (err) {\n console.error('Default audio output device change error:', err)\n })\n })\n\n const [firstRenderI18n, setFirstRenderI18n] = useState(true)\n const [firstAudioOutputInit, setFirstAudioOutputInit] = useState(true)\n\n //initialize i18n\n useEffect(() => {\n if (firstRenderI18n) {\n loadI18n()\n setFirstRenderI18n(false)\n }\n }, [firstRenderI18n])\n\n const remoteAudioElement: any = store.getState().player.remoteAudio\n\n //initialize i18n\n useEffect(() => {\n if (firstAudioOutputInit && remoteAudioElement) {\n const defaultAudioOutputDevice: any = getJSONItem(`phone-island-audio-output-device`)?.deviceId\n eventDispatch('phone-island-audio-output-change', { deviceId: defaultAudioOutputDevice })\n setFirstAudioOutputInit(false)\n }\n }, [firstAudioOutputInit, remoteAudioElement])\n\n return (\n <>\n <Provider store={store}>\n <WebRTC\n hostName={HOST_NAME}\n sipExten={SIP_EXTEN}\n sipSecret={SIP_SECRET}\n sipHost={SIP_HOST}\n sipPort={SIP_PORT}\n reload={reload}\n reloadedCallback={() => setReloadedWebRTC(true)}\n >\n <RestAPI hostName={HOST_NAME} username={USERNAME} authToken={AUTH_TOKEN}>\n <Socket\n hostName={HOST_NAME}\n username={USERNAME}\n authToken={AUTH_TOKEN}\n reload={reload}\n reloadedCallback={() => setReloadedSocket(true)}\n >\n <Events sipHost={SIP_HOST}>\n <Island showAlways={showAlways} />\n </Events>\n </Socket>\n </RestAPI>\n </WebRTC>\n </Provider>\n </>\n )\n}\n\nPhoneIsland.displayName = 'PhoneIsland'\n"],"names":["PhoneIsland","_a","dataConfig","_b","showAlways","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","SIP_HOST","SIP_PORT","_c","useState","reload","setReload","_d","reloadedWebRTC","setReloadedWebRTC","_e","reloadedSocket","setReloadedSocket","useEffect","worker","Worker","wakeUpWorker","type","onmessage","event","data","terminate","useEventListener","store","dispatch","island","setIslandView","eventDispatch","detach","currentUser","updateCurrentDefaultDevice","deviceInformationObject","setJSONItem","deviceId","remoteAudioElement","getState","player","remoteAudio","current","setSinkId","then","console","info","catch","err","error","_f","firstRenderI18n","setFirstRenderI18n","_g","firstAudioOutputInit","setFirstAudioOutputInit","loadI18n","defaultAudioOutputDevice","getJSONItem","React","createElement","Fragment","Provider","WebRTC","hostName","sipExten","sipSecret","sipHost","sipPort","reloadedCallback","RestAPI","username","authToken","Socket","Events","Island","displayName"],"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
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var r=require("../utils/customHooks/useIsomorphicLayoutEffect.js"),t=require("./CallView/index.js"),l=require("./KeypadView/index.js"),a=require("./AudioPlayerView/index.js"),u=require("./AlertGuard.js"),n=require("./CallView/BackCall.js"),i=require("./ViewsTransition.js");require("../node_modules/@fortawesome/react-fontawesome/index.es.js"),require("../lib/webrtc/janus.js"),require("../store/index.js"),require("../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../node_modules/mic-check/lib/index.js"),require("../node_modules/react-tooltip/dist/react-tooltip.min.cjs.js"),require("../node_modules/react-i18next/node_modules/@babel/runtime/helpers/defineProperty.js"),require("../node_modules/react-i18next/node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../node_modules/react-i18next/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"),require("../node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var s=require("./TransferView/TransferList.js"),o=require("./RecorderView/index.js"),d=require("./IslandMotion.js"),c=require("./IslandDrag.js"),f=require("./Close.js"),m=require("../node_modules/react-redux/es/hooks/useSelector.js"),p=require("../node_modules/react-redux/es/hooks/useDispatch.js");function j(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var y=j(e),q=function(j){var q=j.showAlways,E=m.useSelector((function(e){return e.currentCall})),w=E.incoming,x=E.accepted,_=E.outgoing,h=E.transferring,V=m.useSelector((function(e){return e.island})).view,b=m.useSelector((function(e){return e.alerts.status})).activeAlertsCount,v=m.useSelector((function(e){return e.player})).audioPlayerLoop,g=e.useRef(null),P=p.useDispatch(),I=e.useRef(null),R=e.useRef(null),k=e.useRef(null),A=e.useRef(null),C=e.useRef(null);r.useIsomorphicLayoutEffect((function(){P.player.updatePlayer({audioPlayer:I,localAudio:R,localVideo:A,remoteVideo:C,remoteAudio:k})}),[]),e.useEffect((function(){(w||_)&&P.island.setIslandView("call")}),[w,_]);var S=e.useState(""),T=S[0],L=S[1];return e.useEffect((function(){setTimeout((function(){L(V)}),200)}),[V]),y.default.createElement("div",{ref:g,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"},(w||_||x||q||b>0||"player"===V||"recorder"===V)&&y.default.createElement(y.default.Fragment,null,y.default.createElement(c.IslandDrag,{islandContainerRef:g},y.default.createElement(n.default,{isVisible:"keypad"===V||"transfer"===V||h}),y.default.createElement(d.IslandMotion,null,y.default.createElement(u.AlertGuard,null,"call"===T?y.default.createElement(i.default,{forView:"call"},y.default.createElement(t.default,null)):"keypad"===T?y.default.createElement(i.default,{forView:"keypad"},y.default.createElement(l.default,null)):"transfer"===T?y.default.createElement(i.default,{forView:"transfer"},y.default.createElement(s.TransferListView,null)):"player"===T?y.default.createElement(i.default,{forView:"player"},y.default.createElement(a.KeypadView,null)):"recorder"===T?y.default.createElement(i.default,{forView:"recorder"},y.default.createElement(o.RecorderView,null)):y.default.createElement(y.default.Fragment,null))),y.default.createElement(f.Close,null))),y.default.createElement("div",{className:"pi-hidden"},y.default.createElement("audio",{loop:v,ref:I}),y.default.createElement("audio",{muted:!0,ref:R}),y.default.createElement("audio",{autoPlay:!0,ref:k}),y.default.createElement("video",{muted:!0,autoPlay:!0,ref:A}),y.default.createElement("video",{autoPlay:!0,muted:!0,ref:C})))};q.displayName="Island",exports.Island=q;
|
|
2
2
|
//# sourceMappingURL=Island.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Island.js","sources":["../../src/components/Island.tsx"],"sourcesContent":["// Copyright (C) 2022 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 ViewsTransition from './ViewsTransition'\nimport { TransferListView } from './TransferView'\nimport { RecorderView } from './RecorderView'\nimport IslandMotions from './IslandMotion'\nimport IslandDrag from './IslandDrag'\nimport Close from './Close'\n\n/**\n * Provides the Island logic\n *\n * @param showAlways Sets the Island ever visible\n */\nexport const Island: FC<IslandProps> = ({ showAlways }) => {\n // Get the currentCall info\n const { incoming, accepted, outgoing, transferring } = useSelector(\n (state: RootState) => state.currentCall,\n )\n\n // Get isOpen from island store\n const { view } = useSelector((state: RootState) => state.island)\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\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 const localVideo = useRef<HTMLVideoElement>(null)\n const remoteVideo = useRef<HTMLVideoElement>(null)\n\n useIsomorphicLayoutEffect(() => {\n dispatch.player.updatePlayer({\n audioPlayer: audioPlayer,\n localAudio: localAudio,\n localVideo: localVideo,\n remoteVideo: remoteVideo,\n remoteAudio: remoteAudio,\n })\n }, [])\n\n // Handle and apply view switch logic\n // ...set callview as the current view\n useEffect(() => {\n // Check and switch the view\n if (incoming || outgoing) {\n dispatch.island.setIslandView('call')\n }\n }, [incoming, outgoing])\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 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 <>\n <IslandDrag islandContainerRef={islandContainerRef}>\n {/* Add background call visibility logic */}\n <BackCall isVisible={view === 'keypad' || view === 'transfer' || transferring} />\n <IslandMotions>\n {/* The views logic */}\n <AlertGuard>\n {currentView === 'call' ? (\n <ViewsTransition forView='call'>\n <CallView />\n </ViewsTransition>\n ) : currentView === 'keypad' ? (\n <ViewsTransition forView='keypad'>\n <KeyboardView />\n </ViewsTransition>\n ) : currentView === 'transfer' ? (\n <ViewsTransition forView='transfer'>\n <TransferListView />\n </ViewsTransition>\n ) : currentView === 'player' ? (\n <ViewsTransition forView='player'>\n <AudioPlayerView />\n </ViewsTransition>\n ) : currentView === 'recorder' ? (\n <ViewsTransition forView='recorder'>\n <RecorderView />\n </ViewsTransition>\n ) : (\n <></>\n )}\n </AlertGuard>\n </IslandMotions>\n <Close />\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 <video muted={true} autoPlay ref={localVideo}></video>\n <video autoPlay muted={true} ref={remoteVideo}></video>\n </div>\n </div>\n )\n}\n\nIsland.displayName = 'Island'\n\ninterface IslandProps {\n showAlways?: boolean\n}\n"],"names":["Island","_a","showAlways","_b","useSelector","state","currentCall","incoming","accepted","outgoing","transferring","view","island","activeAlertsCount","alerts","status","audioPlayerLoop","player","islandContainerRef","useRef","dispatch","useDispatch","audioPlayer","localAudio","remoteAudio","localVideo","remoteVideo","useIsomorphicLayoutEffect","updatePlayer","useEffect","setIslandView","_c","useState","currentView","setCurrentView","setTimeout","React","ref","className","createElement","Fragment","IslandDrag","BackCall","isVisible","IslandMotions","AlertGuard","ViewsTransition","forView","CallView","KeyboardView","TransferListView","AudioPlayerView","RecorderView","Close","loop","muted","autoPlay","displayName"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Island.js","sources":["../../src/components/Island.tsx"],"sourcesContent":["// Copyright (C) 2022 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 ViewsTransition from './ViewsTransition'\nimport { TransferListView } from './TransferView'\nimport { RecorderView } from './RecorderView'\nimport IslandMotions from './IslandMotion'\nimport IslandDrag from './IslandDrag'\nimport Close from './Close'\n\n/**\n * Provides the Island logic\n *\n * @param showAlways Sets the Island ever visible\n */\nexport const Island: FC<IslandProps> = ({ showAlways }) => {\n // Get the currentCall info\n const { incoming, accepted, outgoing, transferring } = useSelector(\n (state: RootState) => state.currentCall,\n )\n\n // Get isOpen from island store\n const { view } = useSelector((state: RootState) => state.island)\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\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 const localVideo = useRef<HTMLVideoElement>(null)\n const remoteVideo = useRef<HTMLVideoElement>(null)\n\n useIsomorphicLayoutEffect(() => {\n dispatch.player.updatePlayer({\n audioPlayer: audioPlayer,\n localAudio: localAudio,\n localVideo: localVideo,\n remoteVideo: remoteVideo,\n remoteAudio: remoteAudio,\n })\n }, [])\n\n // Handle and apply view switch logic\n // ...set callview as the current view\n useEffect(() => {\n // Check and switch the view\n if (incoming || outgoing) {\n dispatch.island.setIslandView('call')\n }\n }, [incoming, outgoing])\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 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 <>\n <IslandDrag islandContainerRef={islandContainerRef}>\n {/* Add background call visibility logic */}\n <BackCall isVisible={view === 'keypad' || view === 'transfer' || transferring} />\n <IslandMotions>\n {/* The views logic */}\n <AlertGuard>\n {currentView === 'call' ? (\n <ViewsTransition forView='call'>\n <CallView />\n </ViewsTransition>\n ) : currentView === 'keypad' ? (\n <ViewsTransition forView='keypad'>\n <KeyboardView />\n </ViewsTransition>\n ) : currentView === 'transfer' ? (\n <ViewsTransition forView='transfer'>\n <TransferListView />\n </ViewsTransition>\n ) : currentView === 'player' ? (\n <ViewsTransition forView='player'>\n <AudioPlayerView />\n </ViewsTransition>\n ) : currentView === 'recorder' ? (\n <ViewsTransition forView='recorder'>\n <RecorderView />\n </ViewsTransition>\n ) : (\n <></>\n )}\n </AlertGuard>\n </IslandMotions>\n <Close />\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 <video muted={true} autoPlay ref={localVideo}></video>\n <video autoPlay muted={true} ref={remoteVideo}></video>\n </div>\n </div>\n )\n}\n\nIsland.displayName = 'Island'\n\ninterface IslandProps {\n showAlways?: boolean\n}\n"],"names":["Island","_a","showAlways","_b","useSelector","state","currentCall","incoming","accepted","outgoing","transferring","view","island","activeAlertsCount","alerts","status","audioPlayerLoop","player","islandContainerRef","useRef","dispatch","useDispatch","audioPlayer","localAudio","remoteAudio","localVideo","remoteVideo","useIsomorphicLayoutEffect","updatePlayer","useEffect","setIslandView","_c","useState","currentView","setCurrentView","setTimeout","React","ref","className","createElement","Fragment","IslandDrag","BackCall","isVisible","IslandMotions","AlertGuard","ViewsTransition","forView","CallView","KeyboardView","TransferListView","AudioPlayerView","RecorderView","Close","loop","muted","autoPlay","displayName"],"mappings":"kmDAwBaA,EAA0B,SAACC,GAAE,IAAAC,EAAUD,EAAAC,WAE5CC,EAAiDC,eACrD,SAACC,GAAqB,OAAAA,EAAMC,eADtBC,EAAQJ,EAAAI,SAAEC,EAAQL,EAAAK,SAAEC,EAAQN,EAAAM,SAAEC,EAAYP,EAAAO,aAK1CC,EAASP,eAAY,SAACC,GAAqB,OAAAA,EAAMO,eAGjDC,EAAsBT,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMS,OAAOC,4BAGrEC,EAAoBZ,eAAY,SAACC,GAAqB,OAAAA,EAAMY,0BAG9DC,EAAqBC,SAAY,MAGjCC,EAAWC,EAAAA,cAEXC,EAAcH,SAAyB,MACvCI,EAAaJ,SAAyB,MACtCK,EAAcL,SAAyB,MACvCM,EAAaN,SAAyB,MACtCO,EAAcP,SAAyB,MAE7CQ,EAAAA,2BAA0B,WACxBP,EAASH,OAAOW,aAAa,CAC3BN,YAAaA,EACbC,WAAYA,EACZE,WAAYA,EACZC,YAAaA,EACbF,YAAaA,GAEhB,GAAE,IAIHK,EAAAA,WAAU,YAEJtB,GAAYE,IACdW,EAASR,OAAOkB,cAAc,OAElC,GAAG,CAACvB,EAAUE,IAER,IAAAsB,EAAgCC,EAAAA,SAAc,IAA7CC,EAAWF,EAAA,GAAEG,EAAcH,EAAA,GASlC,OANAF,EAAAA,WAAU,WACRM,YAAW,WACTD,EAAevB,EAChB,GAAE,IACL,GAAG,CAACA,IAGFyB,EAAAA,6BACEC,IAAKnB,EACLoB,UAAU,yMAER/B,GACAE,GACAD,GACAN,GACAW,EAAoB,GACX,WAATF,GACS,aAATA,IACAyB,EAAA,QAAAG,cAAAH,EAAA,QAAAI,SAAA,KACEJ,EAAAA,QAAAG,cAACE,EAAAA,WAAU,CAACvB,mBAAoBA,GAE9BkB,UAAAG,cAACG,EAAQ,QAAA,CAACC,UAAoB,WAAThC,GAA8B,aAATA,GAAuBD,IACjE0B,UAAAG,cAACK,EAAAA,aAAa,KAEZR,EAAAA,QAAAG,cAACM,aAAU,KACQ,SAAhBZ,EACCG,EAAC,QAAAG,cAAAO,EAAAA,QAAgB,CAAAC,QAAQ,QACvBX,EAAAA,QAAAG,cAACS,EAAAA,QAAW,OAEI,WAAhBf,EACFG,EAAAA,QAAAG,cAACO,EAAAA,QAAgB,CAAAC,QAAQ,UACvBX,EAAAA,QAAAG,cAACU,EAAAA,QAAe,OAEA,aAAhBhB,EACFG,EAAAA,QAAAG,cAACO,EAAAA,QAAgB,CAAAC,QAAQ,YACvBX,EAAAA,QAAAG,cAACW,EAAAA,iBAAmB,OAEJ,WAAhBjB,EACFG,EAAAA,QAAAG,cAACO,EAAAA,QAAgB,CAAAC,QAAQ,UACvBX,EAAAA,QAAAG,cAACY,EAAAA,WAAkB,OAEH,aAAhBlB,EACFG,EAAAA,QAAAG,cAACO,EAAAA,QAAgB,CAAAC,QAAQ,YACvBX,EAAAA,QAACG,cAAAa,eAAe,OAGlBhB,EAAAA,QAAAG,cAAAH,UAAAI,SAAA,QAINJ,EAAAA,QAAAG,cAACc,EAAAA,MAAK,QAIZjB,EAAAA,QAAKG,cAAA,MAAA,CAAAD,UAAU,aACbF,EAAA,QAAAG,cAAA,QAAA,CAAOe,KAAMtC,EAAiBqB,IAAKf,IACnCc,EAAA,QAAAG,cAAA,QAAA,CAAOgB,OAAO,EAAMlB,IAAKd,IACzBa,EAAA,QAAAG,cAAA,QAAA,CAAOiB,UAAQ,EAACnB,IAAKb,IACrBY,UAAOG,cAAA,QAAA,CAAAgB,OAAO,EAAMC,UAAS,EAAAnB,IAAKZ,IAClCW,EAAAA,QAAAG,cAAA,QAAA,CAAOiB,UAAQ,EAACD,OAAO,EAAMlB,IAAKX,KAI1C,EAEA1B,EAAOyD,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js"),require("../../
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js"),require("../../lib/webrtc/janus.js"),require("../../store/index.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../../node_modules/mic-check/lib/index.js"),require("../../node_modules/socket.io-client/build/esm/index.js"),require("../Island.js");var r=require("../Button.js");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),require("../../node_modules/framer-motion/dist/framer-motion.js");var i=t(e),a=Array.from(Array(9).keys()),n=["*","0","#"];exports.default=function(e){var t=e.keyCallback;return i.default.createElement("div",{className:"pi-grid pi-grid-cols-3 pi-auto-cols-max pi-gap-y-6 pi-justify-items-center pi-place-items-center pi-justify-center pi-px-3"},a.map((function(e){return i.default.createElement(r.Button,{key:e+1,onClick:function(){return t(e+1)},variant:"default",className:"pi-text-2xl",style:{transform:"scale(1.15)"}},e+1)})),n.map((function(e){return i.default.createElement(r.Button,{key:e+1,onClick:function(){return t(e)},variant:"default",className:"pi-text-2xl",style:{transform:"scale(1.15)"}},e)})))};
|
|
2
2
|
//# sourceMappingURL=Actions.js.map
|
|
@@ -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"),r=require("../Button.js"),o=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),n=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),i=require("../../services/offhour.js");require("../../node_modules/react-redux/es/index.js");var
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("react"),r=require("../Button.js"),o=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),n=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),i=require("../../services/offhour.js");require("../../node_modules/react-redux/es/index.js");var a=require("../../lib/phone/call.js"),s=require("../../utils/customHooks/useEventListener.js"),l=require("../../utils/genericFunctions/eventDispatch.js");require("../../store/index.js");var d=require("../../events/RecorderEvents.js"),c=require("../../node_modules/react-tooltip/dist/react-tooltip.min.cjs.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/defineProperty.js"),require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../../node_modules/react-i18next/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 u=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var p=require("../SwitchInputView/DropdownContent.js"),m=require("../../node_modules/react-redux/es/utils/shallowEqual.js");require("../../node_modules/react-redux/es/components/Context.js"),require("../../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("../../node_modules/react-redux/node_modules/react-is/index.js");var f=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),g=require("../../node_modules/react-redux/es/hooks/useSelector.js");function h(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var v=h(t);exports.Actions=function(){var h=f.useDispatch(),j=g.useSelector((function(e){return{incoming:e.recorder.incoming,waiting:e.recorder.waiting,recording:e.recorder.recording,recorded:e.recorder.recorded,playing:e.recorder.playing}}),m.default),x=j.incoming,y=j.waiting,E=j.recording,_=j.recorded,q=j.playing;function w(){return e.__awaiter(this,void 0,void 0,(function(){var t;return e.__generator(this,(function(e){switch(e.label){case 0:return h.recorder.setRecording(!0),h.recorder.setWaiting(!0),[4,i.startAnnouncementRecording()];case 1:return(t=e.sent()).tempFilename&&h.recorder.setTempFilename(t.tempFilename),h.recorder.setStartTime("".concat(Date.now()/1e3)),l.eventDispatch("phone-island-recording-started",{}),[2]}}))}))}function b(){h.recorder.setWaiting(!0),a.hangupCurrentCall(),h.recorder.setRecorded(!0),l.eventDispatch("phone-island-recording-stopped",{})}function C(){h.player.startAudioPlayer((function(){h.recorder.setPlaying(!1),h.recorder.setPaused(!0)})),h.recorder.setPlaying(!0),l.eventDispatch("phone-island-recording-played",{})}function P(){h.player.pauseAudioPlayer(),h.recorder.setPlaying(!1),h.recorder.setPaused(!0),l.eventDispatch("phone-island-recording-paused",{})}function T(){h.recorder.resetRecorded(),l.eventDispatch("phone-island-recording-deleted",{})}function A(){d.dispatchRecordingSave(),h.island.setIslandView(null)}s.useEventListener("phone-island-recording-start",(function(e){w()})),s.useEventListener("phone-island-recording-stop",(function(e){b()})),s.useEventListener("phone-island-recording-play",(function(e){C()})),s.useEventListener("phone-island-recording-pause",(function(e){P()})),s.useEventListener("phone-island-recording-delete",(function(e){T()})),s.useEventListener("phone-island-recording-save",(function(e){A()})),t.useEffect((function(){E||h.recorder.setWaiting(!1)}),[E]),t.useEffect((function(){x&&(a.answerIncomingCall(),h.recorder.setIncoming(!1),h.recorder.setWaiting(!1))}),[x]);var F=u.useTranslation().t;return v.default.createElement("div",{className:"pi-flex pi-items-center pi-justify-center pi-pt-9 pi-gap-6",style:_?{paddingTop:"2rem"}:{}},E&&v.default.createElement(r.Button,{onClick:b,variant:"default",style:{transform:"scale(1.15)"},"data-tooltip-id":"tooltip","data-tooltip-content":F("Tooltip.Stop")},y?v.default.createElement(o.FontAwesomeIcon,{icon:n.faCircleNotch,className:"fa-spin pi-loader",size:"lg"}):v.default.createElement(o.FontAwesomeIcon,{icon:n.faStop,size:"xl"})),_&&!E&&v.default.createElement(v.default.Fragment,null,v.default.createElement(r.Button,{onClick:T,variant:"default","data-tooltip-id":"tooltip","data-tooltip-content":F("Tooltip.Delete")},v.default.createElement(o.FontAwesomeIcon,{icon:n.faTrash,size:"xl"})),q?v.default.createElement(r.Button,{onClick:P,variant:"default",style:{transform:"scale(1.15)"},"data-tooltip-id":"tooltip","data-tooltip-content":F("Tooltip.Pause")},v.default.createElement(o.FontAwesomeIcon,{icon:n.faPause,size:"xl"})):v.default.createElement(r.Button,{onClick:C,variant:"default",style:{transform:"scale(1.15)"},"data-tooltip-id":"tooltip","data-tooltip-content":F("Tooltip.Play")},v.default.createElement(o.FontAwesomeIcon,{icon:n.faPlay,size:"xl"})),v.default.createElement(r.Button,{onClick:A,variant:"green","data-tooltip-id":"tooltip","data-tooltip-content":F("Tooltip.Confirm")},v.default.createElement(o.FontAwesomeIcon,{icon:n.faCheck,size:"xl"}))),!E&&!_&&v.default.createElement(r.Button,{onClick:w,variant:"red",style:{transform:"scale(1.15)"},"data-tooltip-id":"tooltip","data-tooltip-content":F("Tooltip.Start recording"),className:"pi-flex pi-justify-center pi-ml-[4.7rem]"},y?v.default.createElement(o.FontAwesomeIcon,{icon:n.faCircleNotch,className:"fa-spin pi-loader",size:"lg"}):v.default.createElement(o.FontAwesomeIcon,{icon:n.faRecordVinyl,size:"xl"})),!E&&!_&&v.default.createElement("div",{className:"pi-flex-none pi-justify-end pi-ml-11 pi-w-2"},v.default.createElement(p.default,{"data-stop-propagation":!0})),v.default.createElement(c.Tooltip,{className:"pi-z-20",id:"tooltip",place:"bottom"}))};
|
|
2
2
|
//# sourceMappingURL=Actions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Actions.js","sources":["../../../src/components/RecorderView/Actions.tsx"],"sourcesContent":["//\n// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n//\n\nimport React, { type FC, useEffect } from 'react'\nimport { Button } from '../Button'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faPause,\n faPlay,\n faTrash,\n faCheck,\n faRecordVinyl,\n faStop,\n faCircleNotch,\n} from '@fortawesome/free-solid-svg-icons'\nimport { startAnnouncementRecording } from '../../services/offhour'\nimport { useDispatch, useSelector, shallowEqual } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { hangupCurrentCall, answerIncomingCall } from '../../lib/phone/call'\nimport { dispatchRecordingSave } from '../../events'\nimport { Tooltip } from 'react-tooltip/dist/react-tooltip.min.cjs'\nimport { useTranslation } from 'react-i18next'\nimport { useEventListener, eventDispatch } from '../../utils'\n\nexport const Actions: FC<{}> = () => {\n const dispatch = useDispatch<Dispatch>()\n const { incoming, waiting, recording, recorded, playing } = useSelector(\n (state: RootState) => ({\n incoming: state.recorder.incoming,\n waiting: state.recorder.waiting,\n recording: state.recorder.recording,\n recorded: state.recorder.recorded,\n playing: state.recorder.playing,\n }),\n shallowEqual,\n )\n\n async function handleStart() {\n // Update the recorder state\n dispatch.recorder.setRecording(true)\n dispatch.recorder.setWaiting(true)\n // Call the api to start the recording call\n const data: { tempFilename: string } | null = await startAnnouncementRecording()\n // Set the returned temp file name to the store\n if (data.tempFilename) dispatch.recorder.setTempFilename(data.tempFilename)\n // Set the start time of recording\n dispatch.recorder.setStartTime(`${Date.now() / 1000}`)\n eventDispatch('phone-island-recording-started', {})\n }\n useEventListener('phone-island-recording-start', (data: {}) => {\n handleStart()\n })\n\n function handleStop() {\n // Set waiting to true\n dispatch.recorder.setWaiting(true)\n // Call the function to hangup the current call used for recording\n hangupCurrentCall()\n dispatch.recorder.setRecorded(true)\n eventDispatch('phone-island-recording-stopped', {})\n }\n useEventListener('phone-island-recording-stop', (data: {}) => {\n handleStop()\n })\n\n function handlePlay() {\n dispatch.player.startAudioPlayer(() => {\n // The callback for the end event of the audio player\n dispatch.recorder.setPlaying(false)\n dispatch.recorder.setPaused(true)\n })\n dispatch.recorder.setPlaying(true)\n eventDispatch('phone-island-recording-played', {})\n }\n useEventListener('phone-island-recording-play', (data: {}) => {\n handlePlay()\n })\n\n function handlePause() {\n dispatch.player.pauseAudioPlayer()\n dispatch.recorder.setPlaying(false)\n dispatch.recorder.setPaused(true)\n eventDispatch('phone-island-recording-paused', {})\n }\n useEventListener('phone-island-recording-pause', (data: {}) => {\n handlePause()\n })\n\n function handleDelete() {\n dispatch.recorder.resetRecorded()\n eventDispatch('phone-island-recording-deleted', {})\n }\n useEventListener('phone-island-recording-delete', (data: {}) => {\n handleDelete()\n })\n\n function handleSaveRecording() {\n // Dispatch the reconrding save event\n dispatchRecordingSave()\n // Close the Island\n dispatch.island.setIslandView(null)\n }\n useEventListener('phone-island-recording-save', (data: {}) => {\n handleSaveRecording()\n })\n\n useEffect(() => {\n if (!recording) {\n dispatch.recorder.setWaiting(false)\n }\n }, [recording])\n\n useEffect(() => {\n if (incoming) {\n // Answer the incoming call for recording\n answerIncomingCall()\n // Reset incoming to recorder state\n dispatch.recorder.setIncoming(false)\n dispatch.recorder.setWaiting(false)\n }\n }, [incoming])\n\n const { t } = useTranslation()\n\n return (\n <div\n className={`pi-flex pi-justify-center pi-items-center pi-pt-9 pi-gap-6`}\n style={recorded ? { paddingTop: '2rem' } : {}}\n >\n {recording && (\n <Button\n onClick={handleStop}\n variant='default'\n style={{ transform: 'scale(1.15)' }}\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Stop')}\n >\n {waiting ? (\n <FontAwesomeIcon icon={faCircleNotch} className='fa-spin pi-loader' size='lg' />\n ) : (\n <FontAwesomeIcon icon={faStop} size='xl' />\n )}\n </Button>\n )}\n {recorded && !recording && (\n <>\n <Button\n onClick={handleDelete}\n variant='default'\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Delete')}\n >\n <FontAwesomeIcon icon={faTrash} size='xl' />\n </Button>\n {playing ? (\n <Button\n onClick={handlePause}\n variant='default'\n style={{ transform: 'scale(1.15)' }}\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Pause')}\n >\n <FontAwesomeIcon icon={faPause} size='xl' />\n </Button>\n ) : (\n <Button\n onClick={handlePlay}\n variant='default'\n style={{ transform: 'scale(1.15)' }}\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Play')}\n >\n <FontAwesomeIcon icon={faPlay} size='xl' />\n </Button>\n )}\n <Button\n onClick={handleSaveRecording}\n variant='green'\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Confirm')}\n >\n <FontAwesomeIcon icon={faCheck} size='xl' />\n </Button>\n </>\n )}\n {!recording && !recorded && (\n <Button\n onClick={handleStart}\n variant='red'\n style={{ transform: 'scale(1.15)' }}\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Start recording')}\n >\n {waiting ? (\n <FontAwesomeIcon icon={faCircleNotch} className='fa-spin pi-loader' size='lg' />\n ) : (\n <FontAwesomeIcon icon={faRecordVinyl} size='xl' />\n )}\n </Button>\n )}\n {/* Buttons tooltips */}\n <Tooltip className='pi-z-20' id='tooltip' place='bottom' />\n </div>\n )\n}\n"],"names":["dispatch","useDispatch","_a","useSelector","state","incoming","recorder","waiting","recording","recorded","playing","shallowEqual","handleStart","setRecording","setWaiting","startAnnouncementRecording","data","sent","tempFilename","setTempFilename","setStartTime","concat","Date","now","eventDispatch","handleStop","hangupCurrentCall","setRecorded","handlePlay","player","startAudioPlayer","setPlaying","setPaused","handlePause","pauseAudioPlayer","handleDelete","resetRecorded","handleSaveRecording","dispatchRecordingSave","island","setIslandView","useEventListener","useEffect","answerIncomingCall","setIncoming","t","useTranslation","React","className","style","paddingTop","createElement","Button","onClick","variant","transform","FontAwesomeIcon","icon","faCircleNotch","size","faStop","Fragment","faTrash","faPause","faPlay","faCheck","faRecordVinyl","Tooltip","id","place"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Actions.js","sources":["../../../src/components/RecorderView/Actions.tsx"],"sourcesContent":["//\n// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n//\n\nimport React, { type FC, useEffect } from 'react'\nimport { Button } from '../Button'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faPause,\n faPlay,\n faTrash,\n faCheck,\n faRecordVinyl,\n faStop,\n faCircleNotch,\n} from '@fortawesome/free-solid-svg-icons'\nimport { startAnnouncementRecording } from '../../services/offhour'\nimport { useDispatch, useSelector, shallowEqual } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { hangupCurrentCall, answerIncomingCall } from '../../lib/phone/call'\nimport { dispatchRecordingSave } from '../../events'\nimport { Tooltip } from 'react-tooltip/dist/react-tooltip.min.cjs'\nimport { useTranslation } from 'react-i18next'\nimport { useEventListener, eventDispatch } from '../../utils'\nimport DropdownContent from '../SwitchInputView/DropdownContent'\n\nexport const Actions: FC<{}> = () => {\n const dispatch = useDispatch<Dispatch>()\n const { incoming, waiting, recording, recorded, playing } = useSelector(\n (state: RootState) => ({\n incoming: state.recorder.incoming,\n waiting: state.recorder.waiting,\n recording: state.recorder.recording,\n recorded: state.recorder.recorded,\n playing: state.recorder.playing,\n }),\n shallowEqual,\n )\n\n async function handleStart() {\n // Update the recorder state\n dispatch.recorder.setRecording(true)\n dispatch.recorder.setWaiting(true)\n // Call the api to start the recording call\n const data: { tempFilename: string } | null = await startAnnouncementRecording()\n // Set the returned temp file name to the store\n if (data.tempFilename) dispatch.recorder.setTempFilename(data.tempFilename)\n // Set the start time of recording\n dispatch.recorder.setStartTime(`${Date.now() / 1000}`)\n eventDispatch('phone-island-recording-started', {})\n }\n useEventListener('phone-island-recording-start', (data: {}) => {\n handleStart()\n })\n\n function handleStop() {\n // Set waiting to true\n dispatch.recorder.setWaiting(true)\n // Call the function to hangup the current call used for recording\n hangupCurrentCall()\n dispatch.recorder.setRecorded(true)\n eventDispatch('phone-island-recording-stopped', {})\n }\n useEventListener('phone-island-recording-stop', (data: {}) => {\n handleStop()\n })\n\n function handlePlay() {\n dispatch.player.startAudioPlayer(() => {\n // The callback for the end event of the audio player\n dispatch.recorder.setPlaying(false)\n dispatch.recorder.setPaused(true)\n })\n dispatch.recorder.setPlaying(true)\n eventDispatch('phone-island-recording-played', {})\n }\n useEventListener('phone-island-recording-play', (data: {}) => {\n handlePlay()\n })\n\n function handlePause() {\n dispatch.player.pauseAudioPlayer()\n dispatch.recorder.setPlaying(false)\n dispatch.recorder.setPaused(true)\n eventDispatch('phone-island-recording-paused', {})\n }\n useEventListener('phone-island-recording-pause', (data: {}) => {\n handlePause()\n })\n\n function handleDelete() {\n dispatch.recorder.resetRecorded()\n eventDispatch('phone-island-recording-deleted', {})\n }\n useEventListener('phone-island-recording-delete', (data: {}) => {\n handleDelete()\n })\n\n function handleSaveRecording() {\n // Dispatch the reconrding save event\n dispatchRecordingSave()\n // Close the Island\n dispatch.island.setIslandView(null)\n }\n useEventListener('phone-island-recording-save', (data: {}) => {\n handleSaveRecording()\n })\n\n useEffect(() => {\n if (!recording) {\n dispatch.recorder.setWaiting(false)\n }\n }, [recording])\n\n useEffect(() => {\n if (incoming) {\n // Answer the incoming call for recording\n answerIncomingCall()\n // Reset incoming to recorder state\n dispatch.recorder.setIncoming(false)\n dispatch.recorder.setWaiting(false)\n }\n }, [incoming])\n\n const { t } = useTranslation()\n\n return (\n <div\n className={`pi-flex pi-items-center pi-justify-center pi-pt-9 pi-gap-6`}\n style={recorded ? { paddingTop: '2rem' } : {}}\n >\n {recording && (\n <Button\n onClick={handleStop}\n variant='default'\n style={{ transform: 'scale(1.15)' }}\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Stop')}\n >\n {waiting ? (\n <FontAwesomeIcon icon={faCircleNotch} className='fa-spin pi-loader' size='lg' />\n ) : (\n <FontAwesomeIcon icon={faStop} size='xl' />\n )}\n </Button>\n )}\n {recorded && !recording && (\n <>\n <Button\n onClick={handleDelete}\n variant='default'\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Delete')}\n >\n <FontAwesomeIcon icon={faTrash} size='xl' />\n </Button>\n {playing ? (\n <Button\n onClick={handlePause}\n variant='default'\n style={{ transform: 'scale(1.15)' }}\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Pause')}\n >\n <FontAwesomeIcon icon={faPause} size='xl' />\n </Button>\n ) : (\n <Button\n onClick={handlePlay}\n variant='default'\n style={{ transform: 'scale(1.15)' }}\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Play')}\n >\n <FontAwesomeIcon icon={faPlay} size='xl' />\n </Button>\n )}\n <Button\n onClick={handleSaveRecording}\n variant='green'\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Confirm')}\n >\n <FontAwesomeIcon icon={faCheck} size='xl' />\n </Button>\n </>\n )}\n {!recording && !recorded && (\n <Button\n onClick={handleStart}\n variant='red'\n style={{ transform: 'scale(1.15)' }}\n data-tooltip-id='tooltip'\n data-tooltip-content={t('Tooltip.Start recording')}\n className='pi-flex pi-justify-center pi-ml-[4.7rem]'\n >\n {waiting ? (\n <FontAwesomeIcon icon={faCircleNotch} className='fa-spin pi-loader' size='lg' />\n ) : (\n <FontAwesomeIcon icon={faRecordVinyl} size='xl' />\n )}\n </Button>\n )}\n {!recording && !recorded && (\n <div\n className='pi-flex-none pi-justify-end pi-ml-11 pi-w-2'\n >\n <DropdownContent data-stop-propagation={true}></DropdownContent>\n </div>\n )}\n {/* Buttons tooltips */}\n <Tooltip className='pi-z-20' id='tooltip' place='bottom' />\n </div>\n )\n}\n"],"names":["dispatch","useDispatch","_a","useSelector","state","incoming","recorder","waiting","recording","recorded","playing","shallowEqual","handleStart","setRecording","setWaiting","startAnnouncementRecording","data","sent","tempFilename","setTempFilename","setStartTime","concat","Date","now","eventDispatch","handleStop","hangupCurrentCall","setRecorded","handlePlay","player","startAudioPlayer","setPlaying","setPaused","handlePause","pauseAudioPlayer","handleDelete","resetRecorded","handleSaveRecording","dispatchRecordingSave","island","setIslandView","useEventListener","useEffect","answerIncomingCall","setIncoming","t","useTranslation","React","className","style","paddingTop","createElement","Button","onClick","variant","transform","FontAwesomeIcon","icon","faCircleNotch","size","faStop","Fragment","faTrash","faPause","faPlay","faCheck","faRecordVinyl","DropdownContent","Tooltip","id","place"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),r=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("./Actions.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),r=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("./Actions.js"),i=require("./BarsGroup.js"),n=require("../AudioPlayerView/Progress.js"),u=require("../../lib/phone/audio.js"),s=require("../../node_modules/webm-duration-fix/lib/index.js"),a=require("./Timer.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/defineProperty.js"),require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/typeof.js"),require("../../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../../node_modules/react-i18next/dist/es/context.js");var o=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/react-i18next/node_modules/@babel/runtime/helpers/slicedToArray.js");var l=require("../../node_modules/react-redux/es/hooks/useSelector.js"),d=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),c=require("../../node_modules/react-redux/es/utils/shallowEqual.js");function f(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var m=f(r);exports.RecorderView=function(){var f=l.useSelector((function(e){return e.island})).isOpen,p=r.useRef(null),x=r.useRef(null),b=r.useRef([]),h=d.useDispatch(),v=l.useSelector((function(e){return e.webrtc.localAudioStream})),j=l.useSelector((function(e){return{recording:e.recorder.recording,recorded:e.recorder.recorded,waiting:e.recorder.waiting}}),c.default),w=j.recording,_=j.recorded,q=j.waiting;function g(e){b.current.push(e.data)}function E(){return e.__awaiter(this,void 0,void 0,(function(){var r,t;return e.__generator(this,(function(e){switch(e.label){case 0:return[4,s.default(new Blob(b.current,{type:"audio/webm"}))];case 1:return r=e.sent(),t=URL.createObjectURL(r),u.updateAudioPlayerSource(t),[2]}}))}))}r.useEffect((function(){(null==v?void 0:v.active)&&w&&(x.current=new MediaRecorder(v,{mimeType:"audio/webm"}),x.current.ondataavailable=g,x.current.onstop=E,x.current.start())}),[null==v?void 0:v.active,w]),r.useEffect((function(){var e;_&&(b.current=[],null===(e=x.current)||void 0===e||e.stop())}),[_]),r.useEffect((function(){return h.recorder.setVisibleContainerRef(p),function(){h.recorder.reset()}}),[]);var y=o.useTranslation().t;return m.default.createElement(m.default.Fragment,null,f?m.default.createElement(m.default.Fragment,null," ",m.default.createElement("div",{className:"pi-flex pi-w-full pi-justify-center pi-items-center pi-pt-4 pi-pb-9"},m.default.createElement("div",{className:"pi-font-medium pi-text-4xl pi-w-fit pi-h-fit pi-text-white"},m.default.createElement(a.default,null))),m.default.createElement("div",{className:"pi-relative pi-w-full pi-justify-center ".concat(_?"":"pi-h-8"," pi-overflow-x-hidden pi-flex"),ref:p},_?m.default.createElement(n.Progress,null):w&&!q?Array.from({length:2}).map((function(e,r){return m.default.createElement(i.BarsGroup,{key:r,index:r,startAnimation:w,audioStream:v})})):w&&q?m.default.createElement("div",{className:"pi-sans pi-text-sm pi-w-fit pi-h-fit pi-text-white"},y("Common.Start recording message after")):m.default.createElement("div",{className:"pi-sans pi-text-sm pi-w-fit pi-h-fit pi-text-white"},y("Common.Start recording message before"))),m.default.createElement(t.Actions,null)):m.default.createElement("div",{className:"pi-font-medium pi-text-base"},"Recorder"))};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/RecorderView/index.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useState, useRef, useEffect, useCallback, memo } from 'react'\nimport { useDispatch, useSelector, shallowEqual } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { Actions } from './Actions'\nimport { BarsGroup } from './BarsGroup'\nimport Progress from '../AudioPlayerView/Progress'\nimport { updateAudioPlayerSource } from '../../lib/phone/audio'\nimport fixWebmDuration from 'webm-duration-fix'\nimport Timer from './Timer'\n\n// The number of groups to be created\n// ...the minimun to have this effect is 2\nconst BAR_GROUPS_COUNT = 2\n\n// The mime type of the recorded audio\nconst MIME_TYPE = 'audio/webm'\n\nexport const RecorderView: FC<RecorderViewProps> = () => {\n const { isOpen } = useSelector((state: RootState) => state.island)\n const visibleContainerRef = useRef<HTMLDivElement>(null)\n const recorderRef = useRef<MediaRecorder | null>(null)\n const mediaChunks = useRef<BlobPart[]>([])\n\n // Initialize state dispatch\n const dispatch = useDispatch<Dispatch>()\n\n // Retrieve the local audio stream from webrtc state\n const localAudioStream = useSelector((state: RootState) => state.webrtc.localAudioStream)\n\n // Retrieve the local audio stream from recorder state\n const { recording, recorded } = useSelector(\n (state: RootState) => ({\n recording: state.recorder.recording,\n recorded: state.recorder.recorded,\n }),\n shallowEqual,\n )\n\n function handleRecordedMedia(event: BlobEvent) {\n mediaChunks.current.push(event.data)\n }\n\n async function handleRecordingStopped() {\n const blob = await fixWebmDuration(new Blob(mediaChunks.current, { type: MIME_TYPE }))\n const audioURL = URL.createObjectURL(blob)\n // The next function is async\n updateAudioPlayerSource(audioURL)\n }\n\n // Handle and manage audio recording start\n useEffect(() => {\n // @ts-ignore\n if (localAudioStream?.active && recording) {\n recorderRef.current = new MediaRecorder(localAudioStream, {\n mimeType: MIME_TYPE,\n })\n recorderRef.current.ondataavailable = handleRecordedMedia\n recorderRef.current.onstop = handleRecordingStopped\n // Start the media recording\n recorderRef.current.start()\n }\n // @ts-ignore\n }, [localAudioStream?.active, recording])\n\n // Handle and manage audio recorded\n useEffect(() => {\n if (recorded) {\n mediaChunks.current = []\n recorderRef.current?.stop()\n }\n }, [recorded])\n\n // Handle view close and reset state\n useEffect(() => {\n // Set visible container reference to recorder state\n dispatch.recorder.setVisibleContainerRef(visibleContainerRef)\n\n return () => {\n dispatch.recorder.reset()\n }\n }, [])\n\n return (\n <>\n {isOpen ? (\n <>\n {' '}\n <div className='pi-flex pi-w-full pi-justify-center pi-items-center pi-pt-4 pi-pb-9'>\n <div className='pi-font-medium pi-text-4xl pi-w-fit pi-h-fit pi-text-white'>\n <Timer />\n </div>\n </div>\n {/* Bars animation section */}\n <div\n className={`pi-relative pi-w-full ${\n !recorded ? 'pi-h-8' : ''\n } pi-overflow-x-hidden pi-flex`}\n ref={visibleContainerRef}\n >\n {recorded ? (\n <Progress />\n ) : (\n // Create a custom numbers of bars groups\n Array.from({ length: BAR_GROUPS_COUNT }).map((_, i) => (\n <BarsGroup\n key={i}\n index={i}\n startAnimation={recording}\n audioStream={localAudioStream}\n />\n ))\n )}\n </div>\n {/* Actions section */}\n <Actions />\n </>\n ) : (\n <div className='pi-font-medium pi-text-base'>Recorder</div>\n )}\n </>\n )\n}\n\nexport interface RecorderViewProps {}\n"],"names":["isOpen","useSelector","state","island","visibleContainerRef","useRef","recorderRef","mediaChunks","dispatch","useDispatch","localAudioStream","webrtc","_a","recording","recorder","recorded","shallowEqual","handleRecordedMedia","event","current","push","data","handleRecordingStopped","fixWebmDuration","Blob","type","blob","sent","audioURL","URL","createObjectURL","updateAudioPlayerSource","useEffect","active","MediaRecorder","mimeType","ondataavailable","onstop","start","stop","setVisibleContainerRef","reset","React","createElement","Fragment","className","Timer","concat","ref","Progress","Array","from","length","map","_","i","BarsGroup","key","index","startAnimation","audioStream","Actions"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/RecorderView/index.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useState, useRef, useEffect, useCallback, memo } from 'react'\nimport { useDispatch, useSelector, shallowEqual } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { Actions } from './Actions'\nimport { BarsGroup } from './BarsGroup'\nimport Progress from '../AudioPlayerView/Progress'\nimport { updateAudioPlayerSource } from '../../lib/phone/audio'\nimport fixWebmDuration from 'webm-duration-fix'\nimport Timer from './Timer'\nimport { useTranslation } from 'react-i18next'\n\n// The number of groups to be created\n// ...the minimun to have this effect is 2\nconst BAR_GROUPS_COUNT = 2\n\n// The mime type of the recorded audio\nconst MIME_TYPE = 'audio/webm'\n\nexport const RecorderView: FC<RecorderViewProps> = () => {\n const { isOpen } = useSelector((state: RootState) => state.island)\n const visibleContainerRef = useRef<HTMLDivElement>(null)\n const recorderRef = useRef<MediaRecorder | null>(null)\n const mediaChunks = useRef<BlobPart[]>([])\n\n // Initialize state dispatch\n const dispatch = useDispatch<Dispatch>()\n\n // Retrieve the local audio stream from webrtc state\n const localAudioStream = useSelector((state: RootState) => state.webrtc.localAudioStream)\n\n // Retrieve the local audio stream from recorder state\n const { recording, recorded, waiting } = useSelector(\n (state: RootState) => ({\n recording: state.recorder.recording,\n recorded: state.recorder.recorded,\n waiting: state.recorder.waiting,\n }),\n shallowEqual,\n )\n\n function handleRecordedMedia(event: BlobEvent) {\n mediaChunks.current.push(event.data)\n }\n\n async function handleRecordingStopped() {\n const blob = await fixWebmDuration(new Blob(mediaChunks.current, { type: MIME_TYPE }))\n const audioURL = URL.createObjectURL(blob)\n // The next function is async\n updateAudioPlayerSource(audioURL)\n }\n\n // Handle and manage audio recording start\n useEffect(() => {\n // @ts-ignore\n if (localAudioStream?.active && recording) {\n recorderRef.current = new MediaRecorder(localAudioStream, {\n mimeType: MIME_TYPE,\n })\n recorderRef.current.ondataavailable = handleRecordedMedia\n recorderRef.current.onstop = handleRecordingStopped\n // Start the media recording\n recorderRef.current.start()\n }\n // @ts-ignore\n }, [localAudioStream?.active, recording])\n\n // Handle and manage audio recorded\n useEffect(() => {\n if (recorded) {\n mediaChunks.current = []\n recorderRef.current?.stop()\n }\n }, [recorded])\n\n // Handle view close and reset state\n useEffect(() => {\n // Set visible container reference to recorder state\n dispatch.recorder.setVisibleContainerRef(visibleContainerRef)\n\n return () => {\n dispatch.recorder.reset()\n }\n }, [])\n\n const { t } = useTranslation()\n\n return (\n <>\n {isOpen ? (\n <>\n {' '}\n <div className='pi-flex pi-w-full pi-justify-center pi-items-center pi-pt-4 pi-pb-9'>\n <div className='pi-font-medium pi-text-4xl pi-w-fit pi-h-fit pi-text-white'>\n <Timer />\n </div>\n </div>\n {/* Bars animation section */}\n <div\n className={`pi-relative pi-w-full pi-justify-center ${\n !recorded ? 'pi-h-8' : ''\n } pi-overflow-x-hidden pi-flex`}\n ref={visibleContainerRef}\n >\n {recorded ? (\n <Progress />\n ) : recording && !waiting ? (\n // Create a custom numbers of bars groups\n Array.from({ length: BAR_GROUPS_COUNT }).map((_, i) => (\n <BarsGroup\n key={i}\n index={i}\n startAnimation={recording}\n audioStream={localAudioStream}\n />\n ))\n ) : recording && waiting ? (\n <div className='pi-sans pi-text-sm pi-w-fit pi-h-fit pi-text-white'>\n {t('Common.Start recording message after')}\n </div>\n ) : (\n <div className='pi-sans pi-text-sm pi-w-fit pi-h-fit pi-text-white'>\n {t('Common.Start recording message before')}\n </div>\n )}\n </div>\n {/* Actions section */}\n <Actions />\n </>\n ) : (\n <div className='pi-font-medium pi-text-base'>Recorder</div>\n )}\n </>\n )\n}\n\nexport interface RecorderViewProps {}\n"],"names":["isOpen","useSelector","state","island","visibleContainerRef","useRef","recorderRef","mediaChunks","dispatch","useDispatch","localAudioStream","webrtc","_a","recording","recorder","recorded","waiting","shallowEqual","handleRecordedMedia","event","current","push","data","handleRecordingStopped","fixWebmDuration","Blob","type","blob","sent","audioURL","URL","createObjectURL","updateAudioPlayerSource","useEffect","active","MediaRecorder","mimeType","ondataavailable","onstop","start","stop","setVisibleContainerRef","reset","t","useTranslation","React","createElement","Fragment","className","Timer","concat","ref","Progress","Array","from","length","map","_","i","BarsGroup","key","index","startAnimation","audioStream","Actions"],"mappings":"m0CAqBmD,WACzC,IAAAA,EAAWC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,iBACrDC,EAAsBC,SAAuB,MAC7CC,EAAcD,SAA6B,MAC3CE,EAAcF,SAAmB,IAGjCG,EAAWC,EAAAA,cAGXC,EAAmBT,eAAY,SAACC,GAAqB,OAAAA,EAAMS,OAAOD,gBAAb,IAGrDE,EAAmCX,EAAAA,aACvC,SAACC,GAAqB,MAAC,CACrBW,UAAWX,EAAMY,SAASD,UAC1BE,SAAUb,EAAMY,SAASC,SACzBC,QAASd,EAAMY,SAASE,WAE1BC,EAAAA,SANMJ,EAASD,EAAAC,UAAEE,EAAQH,EAAAG,SAAEC,YAS7B,SAASE,EAAoBC,GAC3BZ,EAAYa,QAAQC,KAAKF,EAAMG,KAChC,CAED,SAAeC,qHACA,KAAA,EAAA,MAAA,CAAA,EAAMC,EAAAA,QAAgB,IAAIC,KAAKlB,EAAYa,QAAS,CAAEM,KA7BrD,+BA6BRC,EAAOf,EAAyEgB,OAChFC,EAAWC,IAAIC,gBAAgBJ,GAErCK,EAAuBA,wBAACH,aACzB,CAGDI,EAAAA,WAAU,YAEJvB,aAAgB,EAAhBA,EAAkBwB,SAAUrB,IAC9BP,EAAYc,QAAU,IAAIe,cAAczB,EAAkB,CACxD0B,SAxCU,eA0CZ9B,EAAYc,QAAQiB,gBAAkBnB,EACtCZ,EAAYc,QAAQkB,OAASf,EAE7BjB,EAAYc,QAAQmB,QAGvB,GAAE,CAAC7B,aAAgB,EAAhBA,EAAkBwB,OAAQrB,IAG9BoB,EAAAA,WAAU,iBACJlB,IACFR,EAAYa,QAAU,GACD,QAArBR,EAAAN,EAAYc,eAAS,IAAAR,GAAAA,EAAA4B,OAEzB,GAAG,CAACzB,IAGJkB,EAAAA,WAAU,WAIR,OAFAzB,EAASM,SAAS2B,uBAAuBrC,GAElC,WACLI,EAASM,SAAS4B,OACpB,CACD,GAAE,IAEK,IAAAC,EAAMC,qBAEd,OACEC,UACGC,cAAAD,EAAA,QAAAE,SAAA,KAAA/C,EACC6C,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACG,IACDF,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,uEACbH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,8DACbH,EAAAA,QAACC,cAAAG,UAAQ,QAIbJ,UAAAC,cAAA,MAAA,CACEE,UAAW,2CAAAE,OACRnC,EAAsB,GAAX,SACiB,iCAC/BoC,IAAK/C,GAEJW,EACC8B,EAAA,QAAAC,cAACM,EAAAA,SAAW,MACVvC,IAAcG,EAEhBqC,MAAMC,KAAK,CAAEC,OA9FF,IA8F8BC,KAAI,SAACC,EAAGC,GAAM,OACrDb,EAAAA,QAAAC,cAACa,EAASA,UACR,CAAAC,IAAKF,EACLG,MAAOH,EACPI,eAAgBjD,EAChBkD,YAAarD,GALsC,IAQrDG,GAAaG,EACf6B,UAAAC,cAAA,MAAA,CAAKE,UAAU,sDACZL,EAAE,yCAGLE,EAAK,QAAAC,cAAA,MAAA,CAAAE,UAAU,sDACZL,EAAE,2CAKTE,EAAAA,QAAAC,cAACkB,EAAAA,QAAU,OAGbnB,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,+BAA6B,YAIpD"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),n=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),r=require("../lib/phone/conversation.js"),c=require("../utils/genericFunctions/eventDispatch.js"),o=require("../utils/genericFunctions/withTimeout.js");require("../
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),n=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),r=require("../lib/phone/conversation.js"),c=require("../utils/genericFunctions/eventDispatch.js"),o=require("../utils/genericFunctions/withTimeout.js");require("../lib/webrtc/janus.js");var s=require("../store/index.js");require("../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../node_modules/mic-check/lib/index.js");var a=require("../events/SocketEvents.js"),u=require("../utils/genericFunctions/timestamp.js"),i=require("../lib/user/extensions.js"),d=require("../node_modules/react-redux/es/hooks/useSelector.js");require("../node_modules/react-redux/es/components/Context.js"),require("../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("../node_modules/react-redux/node_modules/react-is/index.js");var l=require("../node_modules/react-redux/es/hooks/useDispatch.js");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var m=p(n);exports.Socket=function(p){var f=p.hostName,g=p.username,v=p.authToken,h=p.reload,b=p.reloadedCallback,k=p.children,y=l.useDispatch(),_=n.useRef(),C=n.useRef(),N=d.useSelector((function(e){return e.currentUser}));return n.useEffect((function(){var n=function(e,n){var t,o=s.store.getState().currentCall,a=o.transferring,d=o.transferSwitching,l=o.transferCalls;if(Object.keys(n).length>0){if(e.status){var p=s.store.getState().users.extensions;switch(e.status){case"ringing":y.currentCall.checkIncomingUpdatePlay({conversationId:n.id,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),incomingSocket:!0,username:"".concat(p&&p[n.counterpartNum]&&p[n.counterpartNum].username)||"",ownerExtension:n.owner}),c.eventDispatch("phone-island-call-ringing",{});break;case"busy":if(n&&n.connected)y.currentCall.updateCurrentCall({conversationId:n.id,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),startTime:"".concat(n.startTime/1e3),ownerExtension:n.owner,username:"".concat(p&&p[n.counterpartNum]&&p[n.counterpartNum].username)||""}),y.currentCall.addTransferCalls({type:"transferred",displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),startTime:"".concat(u.getTimestampInSeconds())}),"webrtc"!==(null===(t=null==N?void 0:N.default_device)||void 0===t?void 0:t.type)&&function(e){y.currentCall.updateCurrentCall({conversationId:e.id,accepted:!0,incoming:"in"!==e.direction&&void 0}),s.store.dispatch.player.stopAudioPlayer()}(n);else if(n&&!n.connected&&a&&!d){var m=l.find((function(e){return e.number===n.counterpartNum}));!n.connected&&m&&(y.currentCall.updateCurrentCall({transferring:!1}),y.currentCall.updateTransferSwitching(!1))}n&&!n.connected&&"out"===n.direction&&y.currentCall.checkOutgoingUpdate({outgoingSocket:!0,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),username:"".concat(p&&p[n.counterpartNum]&&p[n.counterpartNum].username)||""});case"onhold":var f=n.counterpartName,g=n.counterpartNum,v=n.startTime;a&&g&&f&&"<unknown>"!==f&&(y.currentCall.addTransferCalls({type:"destination",displayName:r.getDisplayName(n),number:g,startTime:"".concat(u.getTimestampInSeconds())}),y.currentCall.updateCurrentCall({displayName:r.getDisplayName(n),number:g,startTime:"".concat(v/1e3),conversationId:n.id}),y.island.setIslandView("call"))}}}else"online"==e.status&&i.userTotallyFree()&&(y.player.stopAudioPlayer(),y.currentCall.reset())};return C.current=t.io("https://"+f,{upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3}),C.current.on("connect",(function(){console.debug("Socket connected sid: ".concat(C.current.id)),c.eventDispatch("phone-island-socket-connected",{})})),C.current.on("disconnect",(function(e){console.debug("Socket disconnect - reason: ".concat(e)),e.includes("server disconnect")?c.eventDispatch("phone-island-server-disconnected",{}):c.eventDispatch("phone-island-socket-disconnected",{})})),C.current.io.on("error",(function(e){console.debug("Socket error: ",e)})),C.current.on("connect_error",(function(e){console.debug("Socket connect_error: ",e)})),C.current.io.on("reconnect",(function(e){c.eventDispatch("phone-island-socket-reconnected",{}),console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(C.current.id,")"))})),C.current.io.on("reconnect_attempt",(function(e){console.debug("Socket reconnect_attempt ".concat(e))})),C.current.io.on("reconnect_error",(function(e){console.debug("Socket reconnect_error: ",e)})),C.current.io.on("reconnect_failed",(function(){console.debug("Socket reconnect_failed")})),_.current=setInterval((function(){var e=Date.now();C.current.volatile.emit("ping",o.withTimeout((function(){y.alerts.removeAlert("socket_down");var n=Date.now()-e;console.debug("Socket latency: ".concat(n,"ms")),console.debug("Socket is reachable!")}),(function(){y.alerts.setAlert("socket_down"),console.debug("Socket is unreachable!")}),7e3))}),7e3),C.current.on("connect",(function(){console.debug("Socket on: "+f+" is connected!"),C.current.emit("login",{accessKeyId:"".concat(g),token:v,uaType:"desktop"})})),C.current.on("authe_ok",(function(){console.debug("Socket authentication success!")})),C.current.on("userMainPresenceUpdate",(function(n){s.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),a.dispatchMainPresence(n)})),C.current.on("extenUpdate",(function(e){y.users.updateExtension(e),a.dispatchConversations(e);var t=e.conversations[Object.keys(e.conversations)[0]]||{};e.username===g&&(n(e,t),y.currentUser.updateConversations(e))})),C.current.on("queueUpdate",(function(e){a.dispatchQueueUpdate(e)})),C.current.on("queueMemberUpdate",(function(e){a.dispatchQueueMemberUpdate(e)})),C.current.on("takeOver",(function(){a.dispatchAlreadyLogin()})),C.current.on("serverReloaded",(function(){a.dispatchServerReload()})),C.current.on("parkingUpdate",(function(){a.dispatchParkingUpdate()})),function(){clearInterval(_.current),C.current.close()}}),[]),n.useEffect((function(){h&&(console.info("websocket reconnection"),C.current.disconnect(),C.current.connect(),b())}),[h]),m.default.createElement(m.default.Fragment,null,k)};
|
|
2
2
|
//# sourceMappingURL=Socket.js.map
|
|
@@ -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"),
|
|
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("../../node_modules/@headlessui/react/dist/components/menu/menu.js"),a=require("../../node_modules/@headlessui/react/dist/components/transitions/transition.js"),o=require("../../node_modules/i18next/dist/esm/i18next.js"),r=require("../../lib/user/default_device.js"),l=require("../../utils/customHooks/useEventListener.js"),c=require("../../utils/genericFunctions/eventDispatch.js"),s=require("../../utils/genericFunctions/localStorage.js"),u=require("../../node_modules/react-redux/es/hooks/useSelector.js");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var p=d(e);exports.default=function(d){d.username,d.status;var m=u.useSelector((function(e){return e.webrtc})).sipcall,f=u.useSelector((function(e){return e.player.remoteAudio})),v=e.useState(s.getJSONItem("phone-island-audio-input-device").deviceId||null),g=v[0],h=v[1],b=e.useState(s.getJSONItem("phone-island-audio-output-device").deviceId||null),y=b[0],I=b[1],x=function(e){h(e),m.webrtcStuff.myStream?null==m||m.replaceTracks({tracks:[{type:"audio",mid:"0",capture:{deviceId:{exact:e}}}],success:function(){console.info("Audio input device switch success!"),s.setJSONItem("phone-island-audio-input-device",{deviceId:e}),c.eventDispatch("phone-island-call-audio-input-switched",{})},error:function(e){console.error("Audio input device switch error:",e)}}):(s.setJSONItem("phone-island-audio-input-device",{deviceId:e}),c.eventDispatch("phone-island-call-audio-input-switched",{}))};l.useEventListener("phone-island-call-audio-input-switch",(function(e){x(e.deviceId)}));var E=function(e){I(e),null==f||f.current.setSinkId(e).then((function(){console.info("Audio output device switch success!"),s.setJSONItem("phone-island-audio-output-device",{deviceId:e}),c.eventDispatch("phone-island-call-audio-output-switched",{})})).catch((function(e){console.error("Audio output device switch error:",e)}))};l.useEventListener("phone-island-call-audio-output-switch",(function(e){E(e.deviceId)}));var w=e.useState([]),k=w[0],N=w[1];return e.useEffect((function(){var e=function(){navigator.mediaDevices.enumerateDevices().then((function(e){N(e)})).catch((function(e){console.error("error",e)}))};return e(),navigator.mediaDevices.addEventListener("devicechange",e),function(){navigator.mediaDevices.removeEventListener("devicechange",e)}}),[y,g]),p.default.createElement(p.default.Fragment,null,r.isWebRTC()?p.default.createElement(n.Menu,{as:"div",className:"relative inline-block text-left","data-stop-propagation":!0},p.default.createElement(n.Menu.Button,{className:"pi-bg-transparent enabled:hover:pi-bg-gray-500 focus:pi-ring-gray-500 pi-flex pi-font-sans pi-font-light pi-content-center pi-items-center pi-justify-center pi-tracking-wide pi-duration-200 pi-transform pi-outline-none focus:pi-ring-2 focus:pi-z-20 focus:pi-ring-offset-2 disabled:pi-opacity-75 pi-text-white pi-border pi-border-transparent focus:pi-ring-offset-black pi-rounded-full pi-text-sm pi-leading-4 pi-h-12 pi-w-12 pi-col-start-auto pi-transition-color pi-shrink-0","data-stop-propagation":!0},p.default.createElement(t.FontAwesomeIcon,{size:"xl",icon:i.faEllipsis,className:"pi-text-gray-100","data-stop-propagation":!0})),p.default.createElement(a.Transition,{as:e.Fragment,enter:"transition ease-out duration-100",enterFrom:"transform opacity-0 scale-95",enterTo:"transform opacity-100 scale-100",leave:"transition ease-in duration-75",leaveFrom:"transform opacity-100 scale-100",leaveTo:"transform opacity-0 scale-95"},p.default.createElement(n.Menu.Items,{className:"pi-max-h-[13.125rem] pi-z-50 pi-absolute pi-top-0 pi-right-[4.5rem] pi-mt-[-9.5rem] pi-w-56 pi-origin-top-right pi-rounded-md pi-shadow-lg pi-ring-1 pi-bg-black pi-bg-opacity-[0.99] pi-ring-black pi-ring-opacity-5 pi-focus:outline-none pi-cursor-auto pi-border-gray-600 pi-border pi-py-2 pi-overflow-y-auto pi-scrollbar-thin pi-scrollbar-thumb-gray-400 pi-dark:scrollbar-thumb-gray-400 pi-scrollbar-thumb-rounded-full pi-scrollbar-thumb-opacity-50 pi-scrollbar-track-gray-900 pi-dark:scrollbar-track-gray-900 pi-scrollbar-track-rounded-full pi-scrollbar-track-opacity-25","data-stop-propagation":!0},p.default.createElement("div",{className:"","data-stop-propagation":!0},p.default.createElement("div",{className:"pi-font-semibold pi-text-gray-50 pi-py-1 pi-px-4"},o.t("DropdownContent.Microphones")),k.filter((function(e){return"audioinput"===(null==e?void 0:e.kind)})).map((function(e,a){return p.default.createElement(n.Menu.Item,{key:a},(function(n){var o=n.active;return p.default.createElement("div",{className:"pi-flex pi-py-2 pi-px-2 ".concat(o?"pi-bg-gray-700":""),onClick:function(){return x(e.deviceId)},"data-stop-propagation":!0},g===(null==e?void 0:e.deviceId)&&p.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-400 pi-mr-2"}),!g&&"default"===(null==e?void 0:e.deviceId)&&p.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-400 pi-mr-2"}),p.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faMicrophone,className:"".concat(null!==g&&""!==g&&g!==(null==e?void 0:e.deviceId)?"pi-ml-6":""!==g&&null!==g&&g===(null==e?void 0:e.deviceId)?"":null===g&&"default"!==(null==e?void 0:e.deviceId)?"pi-ml-6":""," pi-text-gray-100 pi-mr-1")}),p.default.createElement("div",{className:"pi-text-gray-50"},(null==e?void 0:e.label)||"Input device ".concat(a+1)))}))})),p.default.createElement("div",{className:"pi-relative pi-py-2"},p.default.createElement("div",{className:"pi-absolute pi-inset-0 pi-flex pi-items-center","aria-hidden":"true"},p.default.createElement("div",{className:"pi-w-full pi-border-t pi-border-gray-600"}))),p.default.createElement("div",{className:"pi-font-semibold pi-text-gray-50 pi-py-1 pi-px-4","data-stop-propagation":!0},o.t("DropdownContent.Speakers")),k.filter((function(e){return"audiooutput"===(null==e?void 0:e.kind)})).map((function(e,a){return p.default.createElement(n.Menu.Item,{key:a},(function(n){var o=n.active;return p.default.createElement("div",{className:"pi-flex pi-py-2 pi-px-2 ".concat(o?"pi-bg-gray-700":""),onClick:function(){return E(null==e?void 0:e.deviceId)},"data-stop-propagation":!0},y===(null==e?void 0:e.deviceId)&&p.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-400 pi-mr-2"}),!y&&"default"===(null==e?void 0:e.deviceId)&&p.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-400 pi-mr-2"}),p.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faVolumeHigh,className:"".concat(null!==y&&""!==y&&y!==(null==e?void 0:e.deviceId)?"pi-ml-6":""!==y&&null!==y&&y===(null==e?void 0:e.deviceId)?"":null===y&&"default"!==(null==e?void 0:e.deviceId)?"pi-ml-6":""," pi-text-gray-100 pi-mr-1")}),p.default.createElement("div",{className:"pi-text-gray-50"},(null==e?void 0:e.label)||"Output device ".concat(a+1)))}))})))))):p.default.createElement("div",null))};
|
|
2
2
|
//# sourceMappingURL=DropdownContent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownContent.js","sources":["../../../src/components/SwitchInputView/DropdownContent.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, ComponentProps, Fragment, useState, useEffect } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faCheck, faEllipsis, faMicrophone, faVolumeHigh } from '@fortawesome/free-solid-svg-icons'\nimport { Menu, Transition } from '@headlessui/react'\nimport { t } from 'i18next'\nimport { isWebRTC } from '../../lib/user/default_device'\n\nconst DropdownContent: FC<DropdownContentProps> = ({ username, status }) => {\n const { sipcall }: any = useSelector((state: RootState) => state.webrtc)\n const remoteAudioElement: any = useSelector((state: RootState) => state.player.remoteAudio)\n\n const [selectedAudioInput, setSelectedAudioInput] = useState<string | null>(null)\n const [selectedAudioOutput, setSelectedAudioOutput] = useState<string | null>(null)\n\n const handleClickAudioInput = (audioInputDevice: string) => {\n setSelectedAudioInput(audioInputDevice)\n\n sipcall?.replaceTracks({\n tracks: [\n {\n type: 'audio',\n mid: '0', // We assume mid 0 is audio\n capture: { deviceId: { exact: audioInputDevice } },\n },\n ],\n error: function (err) {\n console.log('Audio input device switch error:', err)\n },\n })\n }\n\n const handleClickAudioOutput = (audioOutputDevice: string) => {\n setSelectedAudioOutput(audioOutputDevice)\n\n remoteAudioElement?.current\n .setSinkId(audioOutputDevice)\n .then(function () {})\n .catch(function (err) {\n console.log('Audio output device switch error:', err)\n })\n }\n\n const [actualDevice, setActualDevice]: any = useState([])\n\n useEffect(() => {\n const checkInputOutputDevices = () => {\n navigator.mediaDevices\n .enumerateDevices()\n .then((deviceInfos) => {\n setActualDevice(deviceInfos)\n })\n .catch((error) => {\n console.error('error', error)\n })\n }\n\n checkInputOutputDevices()\n\n navigator.mediaDevices.addEventListener('devicechange', checkInputOutputDevices)\n\n return () => {\n navigator.mediaDevices.removeEventListener('devicechange', checkInputOutputDevices)\n }\n }, [selectedAudioOutput, selectedAudioInput])\n return (\n <>\n {isWebRTC() ? (\n <Menu as='div' className='relative inline-block text-left' data-stop-propagation={true}>\n <Menu.Button\n className='pi-bg-transparent enabled:hover:pi-bg-gray-500 focus:pi-ring-gray-500 pi-flex pi-font-sans pi-font-light pi-content-center pi-items-center pi-justify-center pi-tracking-wide pi-duration-200 pi-transform pi-outline-none focus:pi-ring-2 focus:pi-z-20 focus:pi-ring-offset-2 disabled:pi-opacity-75 pi-text-white pi-border pi-border-transparent focus:pi-ring-offset-black pi-rounded-full pi-text-sm pi-leading-4 pi-h-12 pi-w-12 pi-col-start-auto pi-transition-color pi-shrink-0'\n data-stop-propagation={true}\n >\n <FontAwesomeIcon\n size='xl'\n icon={faEllipsis}\n className='pi-text-gray-100'\n data-stop-propagation={true}\n />\n </Menu.Button>\n\n <Transition\n as={Fragment}\n enter='transition ease-out duration-100'\n enterFrom='transform opacity-0 scale-95'\n enterTo='transform opacity-100 scale-100'\n leave='transition ease-in duration-75'\n leaveFrom='transform opacity-100 scale-100'\n leaveTo='transform opacity-0 scale-95'\n >\n <Menu.Items\n className='pi-max-h-[13.125rem] pi-z-50 pi-absolute pi-top-0 pi-right-[4.5rem] pi-mt-[-9.5rem] pi-w-56 pi-origin-top-right pi-rounded-md pi-shadow-lg pi-ring-1 pi-bg-black pi-bg-opacity-[0.99] pi-ring-black pi-ring-opacity-5 pi-focus:outline-none pi-cursor-auto pi-border-gray-600 pi-border pi-py-2 pi-overflow-y-auto pi-scrollbar-thin pi-scrollbar-thumb-gray-400 pi-dark:scrollbar-thumb-gray-400 pi-scrollbar-thumb-rounded-full pi-scrollbar-thumb-opacity-50 pi-scrollbar-track-gray-900 pi-dark:scrollbar-track-gray-900 pi-scrollbar-track-rounded-full pi-scrollbar-track-opacity-25'\n data-stop-propagation={true}\n >\n <div className='' data-stop-propagation={true}>\n {/* Microphones */}\n <div className='pi-font-semibold pi-text-gray-50 pi-py-1 pi-px-4'>\n {t('DropdownContent.Microphones')}\n </div>\n {actualDevice\n .filter((device) => device?.kind === 'audioinput')\n .map((audioDevice, index) => (\n <Menu.Item key={index}>\n {({ active }) => (\n <div\n className={`pi-flex pi-py-2 pi-px-2 ${active ? 'pi-bg-gray-700' : ''}`}\n onClick={() => handleClickAudioInput(audioDevice.deviceId)}\n data-stop-propagation={true}\n >\n {/* faCheck on selectedAudioInput */}\n {selectedAudioInput === audioDevice?.deviceId && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-400 pi-mr-2'\n />\n )}\n\n {/* faCheck if user has no selectedAudioInput and audioDevice is default */}\n {!selectedAudioInput && audioDevice?.deviceId === 'default' && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-400 pi-mr-2'\n />\n )}\n\n <FontAwesomeIcon\n size='lg'\n icon={faMicrophone}\n className={`${\n selectedAudioInput !== null &&\n selectedAudioInput !== '' &&\n selectedAudioInput !== audioDevice?.deviceId\n ? 'pi-ml-6'\n : selectedAudioInput !== '' &&\n selectedAudioInput !== null &&\n selectedAudioInput === audioDevice?.deviceId\n ? ''\n : selectedAudioInput === null && audioDevice?.deviceId !== 'default'\n ? 'pi-ml-6'\n : ''\n } pi-text-gray-100 pi-mr-1`}\n />\n <div className='pi-text-gray-50'>\n {audioDevice?.label || `Device ${index + 1}`}\n </div>\n </div>\n )}\n </Menu.Item>\n ))}\n {/* Divider */}\n <div className='pi-relative pi-py-2'>\n <div\n className='pi-absolute pi-inset-0 pi-flex pi-items-center'\n aria-hidden='true'\n >\n <div className='pi-w-full pi-border-t pi-border-gray-600' />\n </div>\n </div>\n {/* Speaker */}\n <div\n className='pi-font-semibold pi-text-gray-50 pi-py-1 pi-px-4'\n data-stop-propagation={true}\n >\n {t('DropdownContent.Speakers')}\n </div>\n {actualDevice\n .filter((device) => device?.kind === 'audiooutput')\n .map((audioDevice, index) => (\n <Menu.Item key={index}>\n {({ active }) => (\n <div\n className={`pi-flex pi-py-2 pi-px-2 ${active ? 'pi-bg-gray-700' : ''}`}\n onClick={() => handleClickAudioOutput(audioDevice?.deviceId)}\n data-stop-propagation={true}\n >\n {/* faCheck on selectedAudioOutput */}\n {selectedAudioOutput === audioDevice?.deviceId && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-400 pi-mr-2'\n />\n )}\n\n {/* faCheck if user has no selectedAudioInput and audioDevice is default */}\n {!selectedAudioOutput && audioDevice?.deviceId === 'default' && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-400 pi-mr-2'\n />\n )}\n\n <FontAwesomeIcon\n size='lg'\n icon={faVolumeHigh}\n className={`${\n selectedAudioOutput !== null &&\n selectedAudioOutput !== '' &&\n selectedAudioOutput !== audioDevice?.deviceId\n ? 'pi-ml-6'\n : selectedAudioOutput !== '' &&\n selectedAudioOutput !== null &&\n selectedAudioOutput === audioDevice?.deviceId\n ? ''\n : selectedAudioOutput === null &&\n audioDevice?.deviceId !== 'default'\n ? 'pi-ml-6'\n : ''\n } pi-text-gray-100 pi-mr-1`}\n />\n\n {/* <FontAwesomeIcon\n size='lg'\n icon={faMicrophone}\n className='pi-text-gray-100 pi-mr-2'\n /> */}\n <div className='pi-text-gray-50'>\n {audioDevice?.label || `Device ${index + 1}`}\n </div>\n </div>\n )}\n </Menu.Item>\n ))}\n {/* Video\n <div className='pi-font-semibold pi-text-gray-700 pi-py-1 pi-px-4'>\n Video\n </div>\n {actualDevice\n .filter((device) => device.kind === 'videoinput')\n .map((videoDevice, index) => (\n <Menu.Item key={index}>\n {({ active }) => (\n <div className='pi-text-gray-700'>\n Webcam: {videoDevice.label || `Device ${index + 1}`}\n </div>\n )}\n </Menu.Item>\n ))}*/}\n </div>\n </Menu.Items>\n </Transition>\n </Menu>\n ) : (\n <div></div>\n )}\n </>\n )\n}\n\ninterface DropdownContentProps extends ComponentProps<'div'> {\n username?: string\n status?: string\n}\n\nexport default DropdownContent\n"],"names":["_a","username","status","sipcall","useSelector","state","webrtc","remoteAudioElement","player","remoteAudio","_b","useState","selectedAudioInput","setSelectedAudioInput","_c","selectedAudioOutput","setSelectedAudioOutput","_d","actualDevice","setActualDevice","useEffect","checkInputOutputDevices","navigator","mediaDevices","enumerateDevices","then","deviceInfos","catch","error","console","addEventListener","removeEventListener","React","createElement","Fragment","isWebRTC","Menu","as","className","Button","FontAwesomeIcon","size","icon","faEllipsis","Transition","enter","enterFrom","enterTo","leave","leaveFrom","leaveTo","Items","t","filter","device","kind","map","audioDevice","index","Item","key","active","concat","onClick","audioInputDevice","deviceId","replaceTracks","tracks","type","mid","capture","exact","err","log","faCheck","faMicrophone","label","audioOutputDevice","current","setSinkId","faVolumeHigh"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DropdownContent.js","sources":["../../../src/components/SwitchInputView/DropdownContent.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, ComponentProps, Fragment, useState, useEffect } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faCheck, faEllipsis, faMicrophone, faVolumeHigh } from '@fortawesome/free-solid-svg-icons'\nimport { Menu, Transition } from '@headlessui/react'\nimport { t } from 'i18next'\nimport { isWebRTC } from '../../lib/user/default_device'\nimport { eventDispatch, getJSONItem, setJSONItem, useEventListener } from '../../utils'\n\nconst DropdownContent: FC<DropdownContentProps> = ({ username, status }) => {\n const { sipcall }: any = useSelector((state: RootState) => state.webrtc)\n const remoteAudioElement: any = useSelector((state: RootState) => state.player.remoteAudio)\n\n const [selectedAudioInput, setSelectedAudioInput] = useState<string | null>(\n getJSONItem('phone-island-audio-input-device').deviceId || null,\n )\n const [selectedAudioOutput, setSelectedAudioOutput] = useState<string | null>(\n getJSONItem('phone-island-audio-output-device').deviceId || null,\n )\n\n const handleClickAudioInput = (audioInputDevice: string) => {\n setSelectedAudioInput(audioInputDevice)\n\n if (sipcall.webrtcStuff.myStream) {\n sipcall?.replaceTracks({\n tracks: [\n {\n type: 'audio',\n mid: '0', // We assume mid 0 is audio\n capture: { deviceId: { exact: audioInputDevice } },\n },\n ],\n success: function () {\n console.info('Audio input device switch success!')\n // set device to localstorage\n setJSONItem('phone-island-audio-input-device', { deviceId: audioInputDevice })\n\n // dispatch event\n eventDispatch('phone-island-call-audio-input-switched', {})\n },\n error: function (err) {\n console.error('Audio input device switch error:', err)\n },\n })\n } else {\n // set device to localstorage\n setJSONItem('phone-island-audio-input-device', { deviceId: audioInputDevice })\n\n // dispatch event\n eventDispatch('phone-island-call-audio-input-switched', {})\n }\n }\n useEventListener('phone-island-call-audio-input-switch', (data: DeviceInputOutputTypes) => {\n handleClickAudioInput(data.deviceId)\n })\n\n const handleClickAudioOutput = (audioOutputDevice: string) => {\n setSelectedAudioOutput(audioOutputDevice)\n\n remoteAudioElement?.current\n .setSinkId(audioOutputDevice)\n .then(function () {\n console.info('Audio output device switch success!')\n // set device to localstorage\n setJSONItem('phone-island-audio-output-device', { deviceId: audioOutputDevice })\n\n // dispatch event\n eventDispatch('phone-island-call-audio-output-switched', {})\n })\n .catch(function (err) {\n console.error('Audio output device switch error:', err)\n })\n }\n useEventListener('phone-island-call-audio-output-switch', (data: DeviceInputOutputTypes) => {\n handleClickAudioOutput(data.deviceId)\n })\n\n const [actualDevice, setActualDevice]: any = useState([])\n\n useEffect(() => {\n const checkInputOutputDevices = () => {\n navigator.mediaDevices\n .enumerateDevices()\n .then((deviceInfos) => {\n setActualDevice(deviceInfos)\n })\n .catch((error) => {\n console.error('error', error)\n })\n }\n\n checkInputOutputDevices()\n\n navigator.mediaDevices.addEventListener('devicechange', checkInputOutputDevices)\n\n return () => {\n navigator.mediaDevices.removeEventListener('devicechange', checkInputOutputDevices)\n }\n }, [selectedAudioOutput, selectedAudioInput])\n return (\n <>\n {isWebRTC() ? (\n <Menu as='div' className='relative inline-block text-left' data-stop-propagation={true}>\n <Menu.Button\n className='pi-bg-transparent enabled:hover:pi-bg-gray-500 focus:pi-ring-gray-500 pi-flex pi-font-sans pi-font-light pi-content-center pi-items-center pi-justify-center pi-tracking-wide pi-duration-200 pi-transform pi-outline-none focus:pi-ring-2 focus:pi-z-20 focus:pi-ring-offset-2 disabled:pi-opacity-75 pi-text-white pi-border pi-border-transparent focus:pi-ring-offset-black pi-rounded-full pi-text-sm pi-leading-4 pi-h-12 pi-w-12 pi-col-start-auto pi-transition-color pi-shrink-0'\n data-stop-propagation={true}\n >\n <FontAwesomeIcon\n size='xl'\n icon={faEllipsis}\n className='pi-text-gray-100'\n data-stop-propagation={true}\n />\n </Menu.Button>\n\n <Transition\n as={Fragment}\n enter='transition ease-out duration-100'\n enterFrom='transform opacity-0 scale-95'\n enterTo='transform opacity-100 scale-100'\n leave='transition ease-in duration-75'\n leaveFrom='transform opacity-100 scale-100'\n leaveTo='transform opacity-0 scale-95'\n >\n <Menu.Items\n className='pi-max-h-[13.125rem] pi-z-50 pi-absolute pi-top-0 pi-right-[4.5rem] pi-mt-[-9.5rem] pi-w-56 pi-origin-top-right pi-rounded-md pi-shadow-lg pi-ring-1 pi-bg-black pi-bg-opacity-[0.99] pi-ring-black pi-ring-opacity-5 pi-focus:outline-none pi-cursor-auto pi-border-gray-600 pi-border pi-py-2 pi-overflow-y-auto pi-scrollbar-thin pi-scrollbar-thumb-gray-400 pi-dark:scrollbar-thumb-gray-400 pi-scrollbar-thumb-rounded-full pi-scrollbar-thumb-opacity-50 pi-scrollbar-track-gray-900 pi-dark:scrollbar-track-gray-900 pi-scrollbar-track-rounded-full pi-scrollbar-track-opacity-25'\n data-stop-propagation={true}\n >\n <div className='' data-stop-propagation={true}>\n {/* Microphones */}\n <div className='pi-font-semibold pi-text-gray-50 pi-py-1 pi-px-4'>\n {t('DropdownContent.Microphones')}\n </div>\n {actualDevice\n .filter((device) => device?.kind === 'audioinput')\n .map((audioDevice, index) => (\n <Menu.Item key={index}>\n {({ active }) => (\n <div\n className={`pi-flex pi-py-2 pi-px-2 ${active ? 'pi-bg-gray-700' : ''}`}\n onClick={() => handleClickAudioInput(audioDevice.deviceId)}\n data-stop-propagation={true}\n >\n {/* faCheck on selectedAudioInput */}\n {selectedAudioInput === audioDevice?.deviceId && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-400 pi-mr-2'\n />\n )}\n\n {/* faCheck if user has no selectedAudioInput and audioDevice is default */}\n {!selectedAudioInput && audioDevice?.deviceId === 'default' && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-400 pi-mr-2'\n />\n )}\n\n <FontAwesomeIcon\n size='lg'\n icon={faMicrophone}\n className={`${\n selectedAudioInput !== null &&\n selectedAudioInput !== '' &&\n selectedAudioInput !== audioDevice?.deviceId\n ? 'pi-ml-6'\n : selectedAudioInput !== '' &&\n selectedAudioInput !== null &&\n selectedAudioInput === audioDevice?.deviceId\n ? ''\n : selectedAudioInput === null && audioDevice?.deviceId !== 'default'\n ? 'pi-ml-6'\n : ''\n } pi-text-gray-100 pi-mr-1`}\n />\n <div className='pi-text-gray-50'>\n {audioDevice?.label || `Input device ${index + 1}`}\n </div>\n </div>\n )}\n </Menu.Item>\n ))}\n {/* Divider */}\n <div className='pi-relative pi-py-2'>\n <div\n className='pi-absolute pi-inset-0 pi-flex pi-items-center'\n aria-hidden='true'\n >\n <div className='pi-w-full pi-border-t pi-border-gray-600' />\n </div>\n </div>\n {/* Speaker */}\n <div\n className='pi-font-semibold pi-text-gray-50 pi-py-1 pi-px-4'\n data-stop-propagation={true}\n >\n {t('DropdownContent.Speakers')}\n </div>\n {actualDevice\n .filter((device) => device?.kind === 'audiooutput')\n .map((audioDevice, index) => (\n <Menu.Item key={index}>\n {({ active }) => (\n <div\n className={`pi-flex pi-py-2 pi-px-2 ${active ? 'pi-bg-gray-700' : ''}`}\n onClick={() => handleClickAudioOutput(audioDevice?.deviceId)}\n data-stop-propagation={true}\n >\n {/* faCheck on selectedAudioOutput */}\n {selectedAudioOutput === audioDevice?.deviceId && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-400 pi-mr-2'\n />\n )}\n\n {/* faCheck if user has no selectedAudioInput and audioDevice is default */}\n {!selectedAudioOutput && audioDevice?.deviceId === 'default' && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-400 pi-mr-2'\n />\n )}\n\n <FontAwesomeIcon\n size='lg'\n icon={faVolumeHigh}\n className={`${\n selectedAudioOutput !== null &&\n selectedAudioOutput !== '' &&\n selectedAudioOutput !== audioDevice?.deviceId\n ? 'pi-ml-6'\n : selectedAudioOutput !== '' &&\n selectedAudioOutput !== null &&\n selectedAudioOutput === audioDevice?.deviceId\n ? ''\n : selectedAudioOutput === null &&\n audioDevice?.deviceId !== 'default'\n ? 'pi-ml-6'\n : ''\n } pi-text-gray-100 pi-mr-1`}\n />\n\n {/* <FontAwesomeIcon\n size='lg'\n icon={faMicrophone}\n className='pi-text-gray-100 pi-mr-2'\n /> */}\n <div className='pi-text-gray-50'>\n {audioDevice?.label || `Output device ${index + 1}`}\n </div>\n </div>\n )}\n </Menu.Item>\n ))}\n {/* Video\n <div className='pi-font-semibold pi-text-gray-700 pi-py-1 pi-px-4'>\n Video\n </div>\n {actualDevice\n .filter((device) => device.kind === 'videoinput')\n .map((videoDevice, index) => (\n <Menu.Item key={index}>\n {({ active }) => (\n <div className='pi-text-gray-700'>\n Webcam: {videoDevice.label || `Device ${index + 1}`}\n </div>\n )}\n </Menu.Item>\n ))}*/}\n </div>\n </Menu.Items>\n </Transition>\n </Menu>\n ) : (\n <div></div>\n )}\n </>\n )\n}\n\ninterface DropdownContentProps extends ComponentProps<'div'> {\n username?: string\n status?: string\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport default DropdownContent\n"],"names":["_a","username","status","sipcall","useSelector","state","webrtc","remoteAudioElement","player","remoteAudio","_b","useState","getJSONItem","deviceId","selectedAudioInput","setSelectedAudioInput","_c","selectedAudioOutput","setSelectedAudioOutput","handleClickAudioInput","audioInputDevice","webrtcStuff","myStream","replaceTracks","tracks","type","mid","capture","exact","success","console","info","setJSONItem","eventDispatch","error","err","useEventListener","data","handleClickAudioOutput","audioOutputDevice","current","setSinkId","then","catch","_d","actualDevice","setActualDevice","useEffect","checkInputOutputDevices","navigator","mediaDevices","enumerateDevices","deviceInfos","addEventListener","removeEventListener","React","createElement","Fragment","isWebRTC","Menu","as","className","Button","FontAwesomeIcon","size","icon","faEllipsis","Transition","enter","enterFrom","enterTo","leave","leaveFrom","leaveTo","Items","t","filter","device","kind","map","audioDevice","index","Item","key","active","concat","onClick","faCheck","faMicrophone","label","faVolumeHigh"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
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/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
|
|
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/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 a=u(e);exports.CallEvents=function(e){var u=e.sipHost,r=l.useDispatch();return n.useEventListener("phone-island-call-start",(function(e){var n=e.number.replace(/\s/g,"");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",{})})),n.useEventListener("phone-island-call-intrude",(function(e){r.listen.setUpdateIntrudeStatus(!0,e.number),t.eventDispatch("phone-island-call-intruded",{})})),a.default.createElement(a.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) 2022 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 useEventListener('phone-island-call-start', (data: CallStartTypes) => {\n const number = data.number.replace(/\\s/g, '')\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-
|
|
1
|
+
{"version":3,"file":"CallEvents.js","sources":["../../src/events/CallEvents.tsx"],"sourcesContent":["// Copyright (C) 2022 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 useEventListener('phone-island-call-start', (data: CallStartTypes) => {\n const number = data.number.replace(/\\s/g, '')\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 })\n\n useEventListener('phone-island-call-intrude', (data: ListenIntrudeTypes) => {\n dispatch.listen.setUpdateIntrudeStatus(true, data.number)\n eventDispatch('phone-island-call-intruded', {})\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","callNumber","pauseCurrentCall","unpauseCurrentCall","muteCurrentCall","unmuteCurrentCall","parkCurrentCall","answerIncomingCall","hangupCurrentCall","listen","setUpdateListenStatus","eventDispatch","setUpdateIntrudeStatus","React","name"],"mappings":"ycAkBmD,SAACA,GAAE,IAAAC,EAAOD,EAAAC,QACrDC,EAAWC,EAAAA,cA0CjB,OArCAC,mBAAiB,2BAA2B,SAACC,GAC3C,IAAMC,EAASD,EAAKC,OAAOC,QAAQ,MAAO,IAC1CC,aAAWF,EAAQL,EACrB,IACAG,EAAgBA,iBAAC,0BAA0B,WACzCK,EAAAA,kBACF,IACAL,EAAgBA,iBAAC,4BAA4B,WAC3CM,EAAAA,oBACF,IACAN,EAAgBA,iBAAC,0BAA0B,WACzCO,EAAAA,iBACF,IACAP,EAAgBA,iBAAC,4BAA4B,WAC3CQ,EAAAA,mBACF,IAEAR,EAAgBA,iBAAC,0BAA0B,WACzCS,EAAAA,iBACF,IACAT,EAAgBA,iBAAC,4BAA4B,WAC3CU,EAAAA,oBACF,IACAV,EAAgBA,iBAAC,yBAAyB,WACxCW,EAAAA,mBACF,IAEAX,mBAAiB,4BAA4B,SAACC,GAC5CH,EAASc,OAAOC,uBAAsB,EAAMZ,EAAKC,QACjDY,gBAAc,6BAA8B,CAAA,EAC9C,IAEAd,mBAAiB,6BAA6B,SAACC,GAC7CH,EAASc,OAAOG,wBAAuB,EAAMd,EAAKC,QAClDY,gBAAc,6BAA8B,CAAA,EAC9C,IAEOE,gDACT,sCAKgB,SAA4BC,EAAmBf,QAAnB,IAAAe,IAAAA,EAAiB,SAAE,IAAAf,IAAAA,EAAmB,IAChF,IAAMD,EAAiC,CACrCgB,KAAIA,EACJf,OAAMA,GAERY,gBAAc,qCAAsCb,EACtD"}
|
package/dist/index.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@supports (-moz-appearance:none){*{scrollbar-color:auto;scrollbar-width:auto}}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pi-pointer-events-none{pointer-events:none}.pi-pointer-events-auto{pointer-events:auto}.pi-absolute{position:absolute}.pi-relative{position:relative}.pi-inset-0{bottom:0;left:0;right:0;top:0}.pi-left-0{left:0}.pi-top-0{top:0}.pi-right-0{right:0}.pi-right-\[4\.5rem\]{right:4.5rem}.pi-z-20{z-index:20}.pi-z-1000{z-index:1000}.pi-z-30{z-index:30}.-pi-z-10{z-index:-10}.pi-z-50{z-index:50}.pi-col-start-auto{grid-column-start:auto}.pi-mt-4{margin-top:1rem}.pi-ml-4{margin-left:1rem}.pi-ml-8{margin-left:2rem}.pi-ml-16{margin-left:4rem}.pi-mb-6{margin-bottom:1.5rem}.pi-mt-1{margin-top:.25rem}.-pi-mt-10{margin-top:-2.5rem}.pi-mt-\[-9\.5rem\]{margin-top:-9.5rem}.pi-mr-2{margin-right:.5rem}.pi-ml-6{margin-left:1.5rem}.pi-mr-1{margin-right:.25rem}.pi-mt-7{margin-top:1.75rem}.pi-inline-block{display:inline-block}.pi-flex{display:flex}.pi-grid{display:grid}.pi-hidden{display:none}.pi-h-6{height:1.5rem}.pi-h-12{height:3rem}.pi-h-8{height:2rem}.pi-h-9{height:2.25rem}.pi-h-fit{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.pi-h-full{height:100%}.pi-h-1{height:.25rem}.pi-h-3{height:.75rem}.pi-max-h-\[13\.125rem\]{max-height:13.125rem}.pi-min-h-full{min-height:100%}.pi-w-6{width:1.5rem}.pi-w-12{width:3rem}.pi-w-fit{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.pi-w-0\.5{width:.125rem}.pi-w-0{width:0}.pi-w-9{width:2.25rem}.pi-w-full{width:100%}.pi-w-44{width:11rem}.pi-w-16{width:4rem}.pi-w-56{width:14rem}.pi-w-3{width:.75rem}.pi-min-w-full{min-width:100%}.pi-flex-shrink-0,.pi-shrink-0{flex-shrink:0}.pi-flex-grow-0{flex-grow:0}.pi-origin-top-right{-webkit-transform-origin:top right;transform-origin:top right}.pi-rotate-135{--tw-rotate:135deg}.pi-rotate-135,.pi-rotate-90{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-90{--tw-rotate:90deg}.pi--rotate-45{--tw-rotate:-45deg}.pi--rotate-45,.pi-rotate-\[135deg\]{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-\[135deg\]{--tw-rotate:135deg}.pi-transform{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@-webkit-keyframes pi-ping{75%,to{opacity:0;-webkit-transform:scale(2);transform:scale(2)}}@keyframes pi-ping{75%,to{opacity:0;-webkit-transform:scale(2);transform:scale(2)}}.pi-animate-ping{-webkit-animation:pi-ping 1s cubic-bezier(0,0,.2,1) infinite;animation:pi-ping 1s cubic-bezier(0,0,.2,1) infinite}.pi-cursor-pointer{cursor:pointer}.pi-cursor-auto{cursor:auto}.pi-auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.pi-grid-cols-\[12rem\,1rem\]{grid-template-columns:12rem 1rem}.pi-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.pi-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.pi-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.pi-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.pi-flex-col{flex-direction:column}.pi-place-items-center{place-items:center}.pi-content-center{align-content:center}.pi-items-center{align-items:center}.pi-justify-start{justify-content:flex-start}.pi-justify-end{justify-content:flex-end}.pi-justify-center{justify-content:center}.pi-justify-between{justify-content:space-between}.pi-justify-items-end{justify-items:end}.pi-justify-items-center{justify-items:center}.pi-gap-1{gap:.25rem}.pi-gap-4{gap:1rem}.pi-gap-2{gap:.5rem}.pi-gap-5{gap:1.25rem}.pi-gap-7{gap:1.75rem}.pi-gap-3\.5{gap:.875rem}.pi-gap-3{gap:.75rem}.pi-gap-6{gap:1.5rem}.pi-gap-y-5{row-gap:1.25rem}.pi-gap-y-6{row-gap:1.5rem}.pi-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.pi-overflow-hidden{overflow:hidden}.pi-overflow-y-auto{overflow-y:auto}.pi-overflow-x-hidden{overflow-x:hidden}.pi-truncate{overflow:hidden;white-space:nowrap}.pi-text-ellipsis,.pi-truncate{text-overflow:ellipsis}.pi-whitespace-nowrap{white-space:nowrap}.pi-rounded-sm{border-radius:.125rem}.pi-rounded-full{border-radius:9999px}.pi-rounded-3xl{border-radius:1.5rem}.pi-rounded-md{border-radius:.375rem}.pi-rounded-2xl{border-radius:1rem}.pi-rounded-xl{border-radius:.75rem}.pi-border{border-width:1px}.pi-border-4{border-width:4px}.pi-border-2{border-width:2px}.pi-border-t{border-top-width:1px}.pi-border-transparent{border-color:transparent}.pi-border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.pi-border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.pi-border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}.pi-border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.pi-border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.pi-border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.pi-border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.pi-bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.pi-bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.pi-bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.pi-bg-transparent{background-color:initial}.pi-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.pi-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.pi-bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity))}.pi-bg-sky-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.pi-bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.pi-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.pi-bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.pi-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.pi-bg-opacity-\[0\.99\]{--tw-bg-opacity:0.99}.pi-bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.pi-bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.pi-from-transparent{--tw-gradient-from:transparent;--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-from-black{--tw-gradient-from:#000;--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-to-gray-500{--tw-gradient-to:#6b7280}.pi-to-black{--tw-gradient-to:#000}.pi-to-transparent{--tw-gradient-to:transparent}.pi-bg-cover{background-size:cover}.pi-p-4{padding:1rem}.pi-px-3{padding-left:.75rem;padding-right:.75rem}.pi-py-2{padding-bottom:.5rem;padding-top:.5rem}.pi-px-6{padding-left:1.5rem;padding-right:1.5rem}.pi-px-4{padding-left:1rem;padding-right:1rem}.pi-px-2{padding-left:.5rem;padding-right:.5rem}.pi-px-0\.5{padding-left:.125rem;padding-right:.125rem}.pi-px-0{padding-left:0;padding-right:0}.pi-py-1{padding-bottom:.25rem;padding-top:.25rem}.pi-pr-2{padding-right:.5rem}.pi-pt-7{padding-top:1.75rem}.pi-pt-3{padding-top:.75rem}.pi-pt-9{padding-top:2.25rem}.pi-pt-4{padding-top:1rem}.pi-pb-9{padding-bottom:2.25rem}.pi-pr-4{padding-right:1rem}.pi-text-center{text-align:center}.pi-font-sans{font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.pi-text-sm{font-size:.875rem;line-height:1.25rem}.pi-text-base{font-size:1rem;line-height:1.5rem}.pi-text-xs{font-size:.75rem;line-height:1rem}.pi-text-2xl{font-size:1.5rem;line-height:2rem}.pi-text-xl{font-size:1.25rem;line-height:1.75rem}.pi-text-4xl{font-size:2.25rem;line-height:2.5rem}.pi-font-light{font-weight:300}.pi-font-medium{font-weight:500}.pi-font-bold{font-weight:700}.pi-font-semibold{font-weight:600}.pi-leading-4{line-height:1rem}.pi-tracking-wide{letter-spacing:.025em}.pi-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.pi-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.pi-text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.pi-text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.pi-text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.pi-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.pi-opacity-60{opacity:.6}.pi-shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.pi-outline-none{outline:2px solid transparent;outline-offset:2px}.pi-ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.pi-ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity))}.pi-ring-opacity-5{--tw-ring-opacity:0.05}.pi-transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,-webkit-transform,-webkit-filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-transform,-webkit-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-shadow{transition-duration:.15s;transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-duration-200{transition-duration:.2s}.pi-scrollbar-thin::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}.pi-scrollbar-thin::-webkit-scrollbar-track:hover{background-color:var(--scrollbar-track-hover,var(--scrollbar-track))}.pi-scrollbar-thin::-webkit-scrollbar-track:active{background-color:var(--scrollbar-track-active,var(--scrollbar-track-hover,var(--scrollbar-track)))}.pi-scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}.pi-scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--scrollbar-thumb-hover,var(--scrollbar-thumb))}.pi-scrollbar-thin::-webkit-scrollbar-thumb:active{background-color:var(--scrollbar-thumb-active,var(--scrollbar-thumb-hover,var(--scrollbar-thumb)))}.pi-scrollbar-thin::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}.pi-scrollbar-thin::-webkit-scrollbar-corner:hover{background-color:var(--scrollbar-corner-hover,var(--scrollbar-corner))}.pi-scrollbar-thin::-webkit-scrollbar-corner:active{background-color:var(--scrollbar-corner-active,var(--scrollbar-corner-hover,var(--scrollbar-corner)))}@supports (-moz-appearance:none){.pi-scrollbar-thin{scrollbar-color:var(--scrollbar-thumb,initial) var(--scrollbar-track,initial);scrollbar-width:thin}}.pi-scrollbar-thin::-webkit-scrollbar{display:block;height:8px;width:8px}.pi-scrollbar-track-gray-900{--scrollbar-track:#111827!important}.pi-scrollbar-thumb-gray-400{--scrollbar-thumb:#9ca3af!important}.pi-scrollbar-track-rounded-full{--scrollbar-track-radius:9999px}.pi-scrollbar-thumb-rounded-full{--scrollbar-thumb-radius:9999px}.hover\:pi-scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1;-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:pi-bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.hover\:pi-bg-sky-700:hover{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.hover\:pi-shadow-2xl:hover{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:pi-z-20:focus{z-index:20}.focus\:pi-border-emerald-500:focus{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.focus\:pi-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:pi-outline-0:focus{outline-width:0}.focus\:pi-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-0:focus,.focus\:pi-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:pi-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-red-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity))}.focus\:pi-ring-green-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.focus\:pi-ring-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity))}.focus\:pi-ring-sky-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity))}.focus\:pi-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:pi-ring-offset-black:focus{--tw-ring-offset-color:#000}.focus\:pi-ring-offset-white:focus{--tw-ring-offset-color:#fff}.active\:pi-border-emerald-500:active{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.enabled\:hover\:pi-border-gray-500:hover:enabled{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.enabled\:hover\:pi-bg-red-700:hover:enabled{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.enabled\:hover\:pi-bg-green-700:hover:enabled{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.enabled\:hover\:pi-bg-gray-500:hover:enabled{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.disabled\:pi-opacity-75:disabled{opacity:.75}
|
|
1
|
+
@supports (-moz-appearance:none){*{scrollbar-color:auto;scrollbar-width:auto}}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pi-pointer-events-none{pointer-events:none}.pi-pointer-events-auto{pointer-events:auto}.pi-absolute{position:absolute}.pi-relative{position:relative}.pi-inset-0{bottom:0;left:0;right:0;top:0}.pi-left-0{left:0}.pi-top-0{top:0}.pi-right-0{right:0}.pi-right-\[4\.5rem\]{right:4.5rem}.pi-z-20{z-index:20}.pi-z-1000{z-index:1000}.pi-z-30{z-index:30}.-pi-z-10{z-index:-10}.pi-z-50{z-index:50}.pi-col-start-auto{grid-column-start:auto}.pi-mt-4{margin-top:1rem}.pi-ml-4{margin-left:1rem}.pi-ml-8{margin-left:2rem}.pi-ml-16{margin-left:4rem}.pi-mb-6{margin-bottom:1.5rem}.pi-mt-1{margin-top:.25rem}.-pi-mt-10{margin-top:-2.5rem}.pi-ml-\[4\.7rem\]{margin-left:4.7rem}.pi-ml-11{margin-left:2.75rem}.pi-mt-\[-9\.5rem\]{margin-top:-9.5rem}.pi-mr-2{margin-right:.5rem}.pi-ml-6{margin-left:1.5rem}.pi-mr-1{margin-right:.25rem}.pi-mt-7{margin-top:1.75rem}.pi-inline-block{display:inline-block}.pi-flex{display:flex}.pi-grid{display:grid}.pi-hidden{display:none}.pi-h-6{height:1.5rem}.pi-h-12{height:3rem}.pi-h-8{height:2rem}.pi-h-9{height:2.25rem}.pi-h-fit{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.pi-h-full{height:100%}.pi-h-1{height:.25rem}.pi-h-3{height:.75rem}.pi-max-h-\[13\.125rem\]{max-height:13.125rem}.pi-min-h-full{min-height:100%}.pi-w-6{width:1.5rem}.pi-w-12{width:3rem}.pi-w-fit{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.pi-w-0\.5{width:.125rem}.pi-w-0{width:0}.pi-w-9{width:2.25rem}.pi-w-full{width:100%}.pi-w-44{width:11rem}.pi-w-16{width:4rem}.pi-w-2{width:.5rem}.pi-w-56{width:14rem}.pi-w-3{width:.75rem}.pi-min-w-full{min-width:100%}.pi-flex-none{flex:none}.pi-flex-shrink-0,.pi-shrink-0{flex-shrink:0}.pi-flex-grow-0{flex-grow:0}.pi-origin-top-right{-webkit-transform-origin:top right;transform-origin:top right}.pi-rotate-135{--tw-rotate:135deg}.pi-rotate-135,.pi-rotate-90{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-90{--tw-rotate:90deg}.pi--rotate-45{--tw-rotate:-45deg}.pi--rotate-45,.pi-rotate-\[135deg\]{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-\[135deg\]{--tw-rotate:135deg}.pi-transform{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@-webkit-keyframes pi-ping{75%,to{opacity:0;-webkit-transform:scale(2);transform:scale(2)}}@keyframes pi-ping{75%,to{opacity:0;-webkit-transform:scale(2);transform:scale(2)}}.pi-animate-ping{-webkit-animation:pi-ping 1s cubic-bezier(0,0,.2,1) infinite;animation:pi-ping 1s cubic-bezier(0,0,.2,1) infinite}.pi-cursor-pointer{cursor:pointer}.pi-cursor-auto{cursor:auto}.pi-auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.pi-grid-cols-\[12rem\,1rem\]{grid-template-columns:12rem 1rem}.pi-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.pi-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.pi-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.pi-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.pi-flex-col{flex-direction:column}.pi-place-items-center{place-items:center}.pi-content-center{align-content:center}.pi-items-center{align-items:center}.pi-justify-start{justify-content:flex-start}.pi-justify-end{justify-content:flex-end}.pi-justify-center{justify-content:center}.pi-justify-between{justify-content:space-between}.pi-justify-items-end{justify-items:end}.pi-justify-items-center{justify-items:center}.pi-gap-1{gap:.25rem}.pi-gap-4{gap:1rem}.pi-gap-2{gap:.5rem}.pi-gap-5{gap:1.25rem}.pi-gap-7{gap:1.75rem}.pi-gap-3\.5{gap:.875rem}.pi-gap-3{gap:.75rem}.pi-gap-6{gap:1.5rem}.pi-gap-y-5{row-gap:1.25rem}.pi-gap-y-6{row-gap:1.5rem}.pi-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.pi-overflow-hidden{overflow:hidden}.pi-overflow-y-auto{overflow-y:auto}.pi-overflow-x-hidden{overflow-x:hidden}.pi-truncate{overflow:hidden;white-space:nowrap}.pi-text-ellipsis,.pi-truncate{text-overflow:ellipsis}.pi-whitespace-nowrap{white-space:nowrap}.pi-rounded-sm{border-radius:.125rem}.pi-rounded-full{border-radius:9999px}.pi-rounded-3xl{border-radius:1.5rem}.pi-rounded-md{border-radius:.375rem}.pi-rounded-2xl{border-radius:1rem}.pi-rounded-xl{border-radius:.75rem}.pi-border{border-width:1px}.pi-border-4{border-width:4px}.pi-border-2{border-width:2px}.pi-border-t{border-top-width:1px}.pi-border-transparent{border-color:transparent}.pi-border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.pi-border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.pi-border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}.pi-border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.pi-border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.pi-border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.pi-border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.pi-bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.pi-bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.pi-bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.pi-bg-transparent{background-color:initial}.pi-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.pi-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.pi-bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity))}.pi-bg-sky-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.pi-bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.pi-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.pi-bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.pi-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.pi-bg-opacity-\[0\.99\]{--tw-bg-opacity:0.99}.pi-bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.pi-bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.pi-from-transparent{--tw-gradient-from:transparent;--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-from-black{--tw-gradient-from:#000;--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-to-gray-500{--tw-gradient-to:#6b7280}.pi-to-black{--tw-gradient-to:#000}.pi-to-transparent{--tw-gradient-to:transparent}.pi-bg-cover{background-size:cover}.pi-p-4{padding:1rem}.pi-px-3{padding-left:.75rem;padding-right:.75rem}.pi-py-2{padding-bottom:.5rem;padding-top:.5rem}.pi-px-6{padding-left:1.5rem;padding-right:1.5rem}.pi-px-4{padding-left:1rem;padding-right:1rem}.pi-px-2{padding-left:.5rem;padding-right:.5rem}.pi-px-0\.5{padding-left:.125rem;padding-right:.125rem}.pi-px-0{padding-left:0;padding-right:0}.pi-py-1{padding-bottom:.25rem;padding-top:.25rem}.pi-pr-2{padding-right:.5rem}.pi-pt-7{padding-top:1.75rem}.pi-pt-3{padding-top:.75rem}.pi-pt-9{padding-top:2.25rem}.pi-pt-4{padding-top:1rem}.pi-pb-9{padding-bottom:2.25rem}.pi-pr-4{padding-right:1rem}.pi-text-center{text-align:center}.pi-font-sans{font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.pi-text-sm{font-size:.875rem;line-height:1.25rem}.pi-text-base{font-size:1rem;line-height:1.5rem}.pi-text-xs{font-size:.75rem;line-height:1rem}.pi-text-2xl{font-size:1.5rem;line-height:2rem}.pi-text-xl{font-size:1.25rem;line-height:1.75rem}.pi-text-4xl{font-size:2.25rem;line-height:2.5rem}.pi-font-light{font-weight:300}.pi-font-medium{font-weight:500}.pi-font-bold{font-weight:700}.pi-font-semibold{font-weight:600}.pi-leading-4{line-height:1rem}.pi-tracking-wide{letter-spacing:.025em}.pi-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.pi-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.pi-text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.pi-text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.pi-text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.pi-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.pi-opacity-60{opacity:.6}.pi-shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.pi-outline-none{outline:2px solid transparent;outline-offset:2px}.pi-ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.pi-ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity))}.pi-ring-opacity-5{--tw-ring-opacity:0.05}.pi-transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,-webkit-transform,-webkit-filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-transform,-webkit-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-shadow{transition-duration:.15s;transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-duration-200{transition-duration:.2s}.pi-scrollbar-thin::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}.pi-scrollbar-thin::-webkit-scrollbar-track:hover{background-color:var(--scrollbar-track-hover,var(--scrollbar-track))}.pi-scrollbar-thin::-webkit-scrollbar-track:active{background-color:var(--scrollbar-track-active,var(--scrollbar-track-hover,var(--scrollbar-track)))}.pi-scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}.pi-scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--scrollbar-thumb-hover,var(--scrollbar-thumb))}.pi-scrollbar-thin::-webkit-scrollbar-thumb:active{background-color:var(--scrollbar-thumb-active,var(--scrollbar-thumb-hover,var(--scrollbar-thumb)))}.pi-scrollbar-thin::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}.pi-scrollbar-thin::-webkit-scrollbar-corner:hover{background-color:var(--scrollbar-corner-hover,var(--scrollbar-corner))}.pi-scrollbar-thin::-webkit-scrollbar-corner:active{background-color:var(--scrollbar-corner-active,var(--scrollbar-corner-hover,var(--scrollbar-corner)))}@supports (-moz-appearance:none){.pi-scrollbar-thin{scrollbar-color:var(--scrollbar-thumb,initial) var(--scrollbar-track,initial);scrollbar-width:thin}}.pi-scrollbar-thin::-webkit-scrollbar{display:block;height:8px;width:8px}.pi-scrollbar-track-gray-900{--scrollbar-track:#111827!important}.pi-scrollbar-thumb-gray-400{--scrollbar-thumb:#9ca3af!important}.pi-scrollbar-track-rounded-full{--scrollbar-track-radius:9999px}.pi-scrollbar-thumb-rounded-full{--scrollbar-thumb-radius:9999px}.hover\:pi-scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1;-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:pi-bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.hover\:pi-bg-sky-700:hover{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.hover\:pi-shadow-2xl:hover{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:pi-z-20:focus{z-index:20}.focus\:pi-border-emerald-500:focus{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.focus\:pi-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:pi-outline-0:focus{outline-width:0}.focus\:pi-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-0:focus,.focus\:pi-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:pi-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-red-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity))}.focus\:pi-ring-green-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.focus\:pi-ring-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity))}.focus\:pi-ring-sky-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity))}.focus\:pi-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:pi-ring-offset-black:focus{--tw-ring-offset-color:#000}.focus\:pi-ring-offset-white:focus{--tw-ring-offset-color:#fff}.active\:pi-border-emerald-500:active{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.enabled\:hover\:pi-border-gray-500:hover:enabled{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.enabled\:hover\:pi-bg-red-700:hover:enabled{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.enabled\:hover\:pi-bg-green-700:hover:enabled{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.enabled\:hover\:pi-bg-gray-500:hover:enabled{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.disabled\:pi-opacity-75:disabled{opacity:.75}
|
package/dist/lib/phone/call.d.ts
CHANGED
|
@@ -3,12 +3,6 @@
|
|
|
3
3
|
* @param number The number string
|
|
4
4
|
*/
|
|
5
5
|
export declare function callNumber(number: string, sipHost: string): void;
|
|
6
|
-
/**
|
|
7
|
-
* Starts a call to a SIP URI
|
|
8
|
-
*
|
|
9
|
-
* @param sipURI The SIP URI string
|
|
10
|
-
*/
|
|
11
|
-
export declare function callSipURI(sipURI: string): void;
|
|
12
6
|
/**
|
|
13
7
|
* Answer incoming call
|
|
14
8
|
*/
|
package/dist/lib/phone/call.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("../
|
|
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"),a=require("../../services/astproxy.js"),s=require("../../static/dtmf/index.js");require("react");var i=require("../../utils/genericFunctions/eventDispatch.js");exports.answerIncomingCall=function(){n.isWebRTC()?t.answerWebRTC():a.answerPhysical(),i.eventDispatch("phone-island-call-answered",{})},exports.attendedTransfer=function(t){return e.__awaiter(this,void 0,void 0,(function(){var n,s;return e.__generator(this,(function(e){switch(e.label){case 0:return n=r.store.getState().currentCall.conversationId,s=r.store.getState().currentUser.default_device,n&&(null==s?void 0:s.id)&&t?[4,a.attendedTransfer({convid:n,to:t,endpointId:s.id})]:[3,2];case 1:return[2,e.sent()];case 2:return[2]}}))}))},exports.callNumber=function(e,r){var s="sip:".concat(e,"@").concat(r);n.isWebRTC()?t.callSipURI(s):a.callPhysical(e),i.eventDispatch("phone-island-call-started",{})},exports.hangupAllExtensions=function(){var e=r.store.getState().currentUser.conversations,t=function(t){Object.keys(e[t]).forEach((function(e){a.hangupConversation({convid:e,endpointId:t})}))};for(var n in e)t(n)},exports.hangupCurrentCall=function(){var e=r.store.getState().currentCall,s=e.outgoing,l=e.accepted;(s||l)&&(n.isWebRTC()?t.hangup():a.hangupPhysical(),r.store.dispatch.player.stopAudioPlayer(),r.store.dispatch.currentCall.reset(),r.store.dispatch.listen.reset(),i.eventDispatch("phone-island-call-end",{}))},exports.muteCurrentCall=function(){n.isWebRTC()?t.muteWebRTC()&&r.store.dispatch.currentCall.updateCurrentCall({muted:!0}):a.mutePhysical(),i.eventDispatch("phone-island-call-muted",{})},exports.parkCurrentCall=function(){var e,t,n,s,l=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,o=null===(s=null===(n=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===n?void 0:n.currentUser)||void 0===s?void 0:s.conversations,u={};if(l){if(o)for(var c in o)if(o.hasOwnProperty(c)){var d=o[c];Object.keys(d).length>0&&(u={numberParkId:c,idConversation:l})}Object.keys(u).length>0&&(null==u?void 0:u.numberParkId)&&(a.parkConversation({applicantId:null==u?void 0:u.numberParkId,convid:l,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()):a.pausePhysical(!0),i.eventDispatch("phone-island-call-held",{})},exports.playDtmfAudio=function(e){"*"===e&&(e="star"),"#"===e&&(e="pound"),r.store.dispatch.player.updateStartAudioPlayer({src:s.default["dtmf_".concat(e)]})},exports.unmuteCurrentCall=function(){n.isWebRTC()?t.unmuteWebRTC()&&r.store.dispatch.currentCall.updateCurrentCall({muted:!1}):a.unmutePhysical(),i.eventDispatch("phone-island-call-unmuted",{})},exports.unpauseCurrentCall=function(){n.isWebRTC()?t.unpauseWebRTC()&&(r.store.dispatch.currentCall.updateCurrentCall({paused:!1}),r.store.dispatch.player.playRemoteAudio()):a.pausePhysical(!1),i.eventDispatch("phone-island-call-unheld",{})};
|
|
2
2
|
//# sourceMappingURL=call.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call.js","sources":["../../../src/lib/phone/call.ts"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { getSupportedDevices } from '../devices/devices'\nimport Janus from '../webrtc/janus'\nimport {\n call,\n hangup,\n answerWebRTC,\n muteWebRTC,\n unmuteWebRTC,\n pauseWebRTC,\n unpauseWebRTC,\n} from '../webrtc/messages'\nimport { store } from '../../store'\nimport { isWebRTC } from '../user/default_device'\nimport {\n blindTransfer as blindTransferRequest,\n attendedTransfer as attendedTransferRequest,\n hangupPhysical,\n answerPhysical,\n mutePhysical,\n unmutePhysical,\n pausePhysical,\n callPhysical,\n} from '../../services/astproxy'\nimport dtmfAudios from '../../static/dtmf'\nimport { hangupConversation, parkConversation } from '../../services/astproxy'\nimport { eventDispatch } from '../../utils'\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 if (isWebRTC()) {\n callSipURI(sipURI)\n } else {\n callPhysical(number)\n }\n\n eventDispatch('phone-island-call-started', {})\n}\n\n/**\n * Starts a call to a SIP URI\n *\n * @param sipURI The SIP URI string\n */\nexport function callSipURI(sipURI: string) {\n getSupportedDevices(async () => {\n // @ts-ignore\n Janus.log('This is a SIP call')\n await call(sipURI, {\n audio: {\n mandatory: {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n googEchoCancellation: true,\n googAutoGainControl: true,\n googNoiseSuppression: true,\n googHighpassFilter: true,\n googTypingNoiseDetection: true,\n googNoiseReduction: true,\n volume: 1.0,\n },\n },\n audioSend: true,\n audioRecv: true,\n videoSend: false,\n videoRecv: false,\n })\n })\n}\n\n/**\n * Answer incoming call\n */\nexport function answerIncomingCall() {\n if (isWebRTC()) {\n answerWebRTC()\n } else {\n answerPhysical()\n }\n\n eventDispatch('phone-island-call-answered', {})\n}\n\n/**\n * Hangup all the conversations of all the extensions of the current user\n */\nexport function hangupAllExtensions() {\n // Get current user endpoints\n const { conversations } = store.getState().currentUser\n // Hangup all the conversations of all extensions of the current user\n for (const extension in conversations) {\n const conversationsIds = Object.keys(conversations[extension])\n conversationsIds.forEach((id) => {\n hangupConversation({\n convid: id,\n endpointId: extension,\n })\n })\n }\n}\n\n/**\n * Hangup current call\n */\nexport function hangupCurrentCall() {\n const { outgoing, accepted } = store.getState().currentCall\n if (outgoing || accepted) {\n 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 eventDispatch('phone-island-call-end', {})\n }\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()\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 unmutePhysical()\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 blindTransfer(number: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n const { default_device } = store.getState().currentUser\n // Transfer the call through blind transfer\n if (conversationId && default_device?.id && number) {\n return await blindTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: default_device.id,\n })\n }\n}\n\n/**\n * Transfer the current call through a attended transfer\n */\nexport async function attendedTransfer(number: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n const { default_device } = store.getState().currentUser\n // Transfer the call through attended transfer\n if (conversationId && default_device?.id && number) {\n return await attendedTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: default_device.id,\n })\n }\n}\n\n/**\n * Play the dtmf audio files\n */\nexport function playDtmfAudio(key: string) {\n if (key === '*') key = 'star'\n if (key === '#') key = 'pound'\n store.dispatch.player.updateStartAudioPlayer({ src: dtmfAudios[`dtmf_${key}`] })\n}\n\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"],"names":["callSipURI","sipURI","_this","this","getSupportedDevices","__awaiter","Janus","log","call","audio","mandatory","echoCancellation","noiseSuppression","autoGainControl","googEchoCancellation","googAutoGainControl","googNoiseSuppression","googHighpassFilter","googTypingNoiseDetection","googNoiseReduction","volume","audioSend","audioRecv","videoSend","videoRecv","_a","sent","isWebRTC","answerWebRTC","answerPhysical","eventDispatch","number","conversationId","store","getState","currentCall","default_device","currentUser","id","attendedTransferRequest","convid","to","endpointId","sipHost","concat","callPhysical","conversations","extension","Object","keys","forEach","hangupConversation","outgoing","accepted","hangup","hangupPhysical","dispatch","player","stopAudioPlayer","reset","listen","muteWebRTC","updateCurrentCall","muted","mutePhysical","_b","userConversationInformations","_d","_c","parkingInformation","key","hasOwnProperty","conversation","length","numberParkId","idConversation","parkConversation","applicantId","setParked","pauseWebRTC","paused","pauseRemoteAudio","pausePhysical","updateStartAudioPlayer","src","dtmfAudios","unmuteWebRTC","unmutePhysical","unpauseWebRTC","playRemoteAudio"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"call.js","sources":["../../../src/lib/phone/call.ts"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport {\n callSipURI,\n hangup,\n answerWebRTC,\n muteWebRTC,\n unmuteWebRTC,\n pauseWebRTC,\n unpauseWebRTC,\n} from '../webrtc/messages'\nimport { store } from '../../store'\nimport { isWebRTC } from '../user/default_device'\nimport {\n blindTransfer as blindTransferRequest,\n attendedTransfer as attendedTransferRequest,\n hangupPhysical,\n answerPhysical,\n mutePhysical,\n unmutePhysical,\n pausePhysical,\n callPhysical,\n} from '../../services/astproxy'\nimport dtmfAudios from '../../static/dtmf'\nimport { hangupConversation, parkConversation } from '../../services/astproxy'\nimport { eventDispatch } from '../../utils'\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 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\n eventDispatch('phone-island-call-answered', {})\n}\n\n/**\n * Hangup all the conversations of all the extensions of the current user\n */\nexport function hangupAllExtensions() {\n // Get current user endpoints\n const { conversations } = store.getState().currentUser\n // Hangup all the conversations of all extensions of the current user\n for (const extension in conversations) {\n const conversationsIds = Object.keys(conversations[extension])\n conversationsIds.forEach((id) => {\n hangupConversation({\n convid: id,\n endpointId: extension,\n })\n })\n }\n}\n\n/**\n * Hangup current call\n */\nexport function hangupCurrentCall() {\n const { outgoing, accepted } = store.getState().currentCall\n if (outgoing || accepted) {\n 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 eventDispatch('phone-island-call-end', {})\n }\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()\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 unmutePhysical()\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 blindTransfer(number: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n const { default_device } = store.getState().currentUser\n // Transfer the call through blind transfer\n if (conversationId && default_device?.id && number) {\n return await blindTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: default_device.id,\n })\n }\n}\n\n/**\n * Transfer the current call through a attended transfer\n */\nexport async function attendedTransfer(number: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n const { default_device } = store.getState().currentUser\n // Transfer the call through attended transfer\n if (conversationId && default_device?.id && number) {\n return await attendedTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: default_device.id,\n })\n }\n}\n\n/**\n * Play the dtmf audio files\n */\nexport function playDtmfAudio(key: string) {\n if (key === '*') key = 'star'\n if (key === '#') key = 'pound'\n store.dispatch.player.updateStartAudioPlayer({ src: dtmfAudios[`dtmf_${key}`] })\n}\n\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"],"names":["isWebRTC","answerWebRTC","answerPhysical","eventDispatch","number","conversationId","store","getState","currentCall","default_device","currentUser","id","attendedTransferRequest","convid","to","endpointId","_a","sipHost","sipURI","concat","callSipURI","callPhysical","conversations","extension","Object","keys","forEach","hangupConversation","outgoing","accepted","hangup","hangupPhysical","dispatch","player","stopAudioPlayer","reset","listen","muteWebRTC","updateCurrentCall","muted","mutePhysical","_b","userConversationInformations","_d","_c","parkingInformation","key","hasOwnProperty","conversation","length","numberParkId","idConversation","parkConversation","applicantId","setParked","pauseWebRTC","paused","pauseRemoteAudio","pausePhysical","updateStartAudioPlayer","src","dtmfAudios","unmuteWebRTC","unmutePhysical","unpauseWebRTC","playRemoteAudio"],"mappings":"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"}
|
|
@@ -10,13 +10,7 @@ export declare function hangup(): void;
|
|
|
10
10
|
export declare function unregister(): void;
|
|
11
11
|
export declare function detach(): any;
|
|
12
12
|
export declare function handleRemote(jsep: any): void;
|
|
13
|
-
|
|
14
|
-
* Starts a call to a sipuri
|
|
15
|
-
*
|
|
16
|
-
* @param sipURI The sipuri to be called
|
|
17
|
-
* @param mediaObj The object containing the media constrains
|
|
18
|
-
* @returns
|
|
19
|
-
*/
|
|
13
|
+
export declare function callSipURI(sipURI: string): void;
|
|
20
14
|
export declare function call(sipURI: string, mediaObj: object): Promise<unknown>;
|
|
21
15
|
/**
|
|
22
16
|
* Mute current call so the counterpart can't listen the current user
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./janus.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("./janus.js"),r=require("../../store/index.js"),o=require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),s=require("../devices/devices.js");require("react");var n=require("../../utils/genericFunctions/localStorage.js");function i(e,o){return new Promise((function(s,n){var i=r.store.getState().webrtc.sipcall;e&&o&&i.createOffer({media:o,success:function(r){t.default.debug("Got SDP!"),t.default.debug(r),i.send({message:{request:"call",uri:e},jsep:r}),s(!0)},error:function(e){t.default.error("WebRTC error...",e),t.default.error("WebRTC error call on createOffer: ",e),n(!1)}})}))}exports.answerWebRTC=function(){var e=r.store.getState().webrtc,o=e.sipcall,s=e.jsepGlobal;if(o&&s){var i=n.getJSONItem("phone-island-audio-input-device").deviceId||null;o.createAnswer({jsep:s,media:{audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,googEchoCancellation:!0,googAutoGainControl:!0,googNoiseSuppression:!0,googHighpassFilter:!0,googTypingNoiseDetection:!0,googNoiseReduction:!0,volume:1,deviceId:i},audioSend:!0,audioRecv:!1,videoSend:!1,videoRecv:!1},success:function(e){o.send({message:{request:"accept"},jsep:e})},error:function(e){t.default.error("WebRTC error:",e),o.send({message:{request:"decline",code:480}})}})}},exports.call=i,exports.callSipURI=function(r){var o=this;s.getSupportedDevices((function(){return e.__awaiter(o,void 0,void 0,(function(){var o;return e.__generator(this,(function(e){switch(e.label){case 0:return t.default.log("This is a SIP call"),o=n.getJSONItem("phone-island-audio-input-device").deviceId||null,[4,i(r,{audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,googEchoCancellation:!0,googAutoGainControl:!0,googNoiseSuppression:!0,googHighpassFilter:!0,googTypingNoiseDetection:!0,googNoiseReduction:!0,volume:1,deviceId:o},audioSend:!0,audioRecv:!0,videoSend:!1,videoRecv:!1})];case 1:return e.sent(),[2]}}))}))}))},exports.detach=function(){var e=r.store.getState().webrtc.sipcall;if(e)return e.detach()},exports.handleRemote=function(e){var t=r.store.getState().webrtc.sipcall;t&&t.handleRemoteJsep({jsep:e,error:function(){t.send({message:{request:"hangup"}}),t.hangup()}})},exports.hangup=function(){var e=r.store.getState().webrtc.sipcall;e&&e.send({message:{request:"hangup"}})},exports.muteWebRTC=function(){var e=r.store.getState().webrtc.sipcall;return e.muteAudio(),e.isAudioMuted()},exports.pauseWebRTC=function(){var e=r.store.getState().webrtc.sipcall;try{return e.send({message:{request:"hold"}}),!0}catch(e){return console.error(e),!1}},exports.register=function(e){var t=e.sipExten,o=e.sipSecret,s=e.sipHost,n=e.sipPort,i=r.store.getState().webrtc.sipcall,a=r.store.getState().currentUser.name;i&&i.send({message:{request:"register",username:"sip:".concat(t,"@").concat(s),display_name:a||"",secret:o,proxy:"sip:".concat(s,":").concat(n),outbound_proxy:"sip:".concat(s,":").concat(n),sips:!1,refresh:!1}})},exports.sendDTMF=function(e){var t=r.store.getState().webrtc.sipcall;"chrome"===o.default.browserDetails.browser?t.dtmf({dtmf:{tones:e}}):t.send({message:{request:"dtmf_info",digit:"".concat(e)}})},exports.unmuteWebRTC=function(){var e=r.store.getState().webrtc.sipcall;return e.unmuteAudio(),!e.isAudioMuted()},exports.unpauseWebRTC=function(){var e=r.store.getState().webrtc.sipcall;try{return e.send({message:{request:"unhold"}}),!0}catch(e){return console.error(e),!1}},exports.unregister=function(){var e=r.store.getState().webrtc.sipcall;e&&e.send({message:{request:"unregister"}})};
|
|
2
2
|
//# sourceMappingURL=messages.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sources":["../../../src/lib/webrtc/messages.ts"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport Janus from './janus'\nimport { store } from '../../store'\nimport adapter from 'webrtc-adapter'\n\nexport function register({\n sipExten,\n sipSecret,\n sipHost,\n sipPort,\n}: {\n sipExten: string\n sipSecret: string\n sipHost: string\n sipPort: string\n}) {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n const { name } = store.getState().currentUser\n if (sipcall) {\n sipcall.send({\n message: {\n request: 'register',\n username: `sip:${sipExten}@${sipHost}`,\n display_name: name || '',\n secret: sipSecret,\n proxy: `sip:${sipHost}:${sipPort}`,\n outbound_proxy: `sip:${sipHost}:${sipPort}`,\n sips: false,\n refresh: false,\n },\n })\n }\n}\n\nexport function answerWebRTC() {\n const { sipcall, jsepGlobal }: { sipcall: any; jsepGlobal: any } = store.getState().webrtc\n if (sipcall && jsepGlobal) {\n sipcall.createAnswer({\n jsep: jsepGlobal,\n media: {\n audio: true,\n videoSend: false,\n videoRecv: false,\n },\n success: (jsep) => {\n sipcall.send({\n message: {\n request: 'accept',\n },\n jsep: jsep,\n })\n },\n error: (error) => {\n // @ts-ignore\n Janus.error('WebRTC error:', error)\n sipcall.send({\n message: {\n request: 'decline',\n code: 480,\n },\n })\n },\n })\n }\n}\n\nexport function decline() {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipcall) {\n sipcall.send({\n message: {\n request: 'decline',\n },\n })\n }\n}\n\nexport function hangup() {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipcall) {\n sipcall.send({\n message: {\n request: 'hangup',\n },\n })\n }\n}\n\nexport function unregister() {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipcall) {\n sipcall.send({\n message: {\n request: 'unregister',\n },\n })\n }\n}\n\nexport function detach() {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipcall) {\n return sipcall.detach()\n }\n}\n\nexport function handleRemote(jsep) {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipcall) {\n sipcall.handleRemoteJsep({\n jsep: jsep,\n error: function () {\n var hangup = {\n request: 'hangup',\n }\n sipcall.send({\n message: hangup,\n })\n sipcall.hangup()\n },\n })\n }\n}\n\n/**\n * Starts a call to a sipuri\n *\n * @param sipURI The sipuri to be called\n * @param mediaObj The object containing the media constrains\n * @returns\n */\nexport function call(sipURI: string, mediaObj: object) {\n return new Promise((resolve, reject) => {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipURI && mediaObj) {\n sipcall.createOffer({\n media: mediaObj,\n success: function (jsep: any) {\n // @ts-ignore\n Janus.debug('Got SDP!')\n // @ts-ignore\n Janus.debug(jsep)\n sipcall.send({\n message: {\n request: 'call',\n uri: sipURI,\n },\n jsep: jsep,\n })\n resolve(true)\n },\n error: function (error) {\n // @ts-ignore\n Janus.error('ebRTC error...', error)\n // @ts-ignore\n Janus.error('WebRTC error call on createOffer: ', error)\n reject(false)\n },\n })\n }\n })\n}\n\n/**\n * Mute current call so the counterpart can't listen the current user\n * @returns The muted status\n */\nexport function muteWebRTC(): boolean {\n // Initialize sipcall\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n // Uset the janus library functions to mute call\n sipcall.muteAudio()\n return sipcall.isAudioMuted()\n}\n\n/**\n * Unmute current call so the counterpart can listen the current user\n * @returns The muted status\n */\nexport function unmuteWebRTC(): boolean {\n // Initialize sipcall\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n // Use the janus library functions to unmute call\n sipcall.unmuteAudio()\n return !sipcall.isAudioMuted()\n}\n\n/**\n * Pause current call so the counterpart listens the pause ringtone\n * @returns The true if no errors occurs\n */\nexport function pauseWebRTC() {\n // Initialize sipcall\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n // Send hold message\n try {\n sipcall.send({\n message: {\n request: 'hold',\n },\n })\n return true\n } catch (err) {\n console.error(err)\n return false\n }\n}\n\n/**\n * Unpause the current call so the counterpart listens the current user\n * @returns The true if no errors occurs\n */\nexport function unpauseWebRTC() {\n // Initialize sipcall\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n // Send hold message\n try {\n sipcall.send({\n message: {\n request: 'unhold',\n },\n })\n return true\n } catch (err) {\n console.error(err)\n return false\n }\n}\n\n/**\n * Send DTMF messages to Janus\n */\nexport function sendDTMF(key: string) {\n // Initialize sipcall\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (adapter.browserDetails.browser === 'chrome') {\n sipcall.dtmf({\n dtmf: {\n tones: key,\n },\n })\n } else {\n sipcall.send({\n message: {\n request: 'dtmf_info',\n digit: `${key}`,\n },\n })\n }\n}\n"],"names":["_a","store","getState","webrtc","sipcall","jsepGlobal","createAnswer","jsep","media","audio","videoSend","videoRecv","success","send","message","request","error","Janus","code","sipURI","mediaObj","Promise","resolve","reject","createOffer","debug","uri","detach","handleRemoteJsep","hangup","muteAudio","isAudioMuted","err","console","sipExten","sipSecret","sipHost","sipPort","name","currentUser","username","concat","display_name","secret","proxy","outbound_proxy","sips","refresh","key","adapter","browserDetails","browser","dtmf","tones","digit","unmuteAudio"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"messages.js","sources":["../../../src/lib/webrtc/messages.ts"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport Janus from './janus'\nimport { store } from '../../store'\nimport adapter from 'webrtc-adapter'\nimport { getSupportedDevices } from '../devices/devices'\nimport { getJSONItem } from '../../utils'\n\nexport function register({\n sipExten,\n sipSecret,\n sipHost,\n sipPort,\n}: {\n sipExten: string\n sipSecret: string\n sipHost: string\n sipPort: string\n}) {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n const { name } = store.getState().currentUser\n if (sipcall) {\n sipcall.send({\n message: {\n request: 'register',\n username: `sip:${sipExten}@${sipHost}`,\n display_name: name || '',\n secret: sipSecret,\n proxy: `sip:${sipHost}:${sipPort}`,\n outbound_proxy: `sip:${sipHost}:${sipPort}`,\n sips: false,\n refresh: false,\n },\n })\n }\n}\n\nexport function answerWebRTC() {\n const { sipcall, jsepGlobal }: { sipcall: any; jsepGlobal: any } = store.getState().webrtc\n if (sipcall && jsepGlobal) {\n // get current input device id from localstorage\n let currentDeviceInputId = getJSONItem('phone-island-audio-input-device').deviceId || null;\n\n sipcall.createAnswer({\n jsep: jsepGlobal,\n /*media: {\n audio: true,\n videoSend: false,\n videoRecv: false,\n },*/\n media: {\n audio: {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n googEchoCancellation: true,\n googAutoGainControl: true,\n googNoiseSuppression: true,\n googHighpassFilter: true,\n googTypingNoiseDetection: true,\n googNoiseReduction: true,\n volume: 1.0,\n deviceId: currentDeviceInputId,\n },\n audioSend: true,\n audioRecv: false,\n videoSend: false,\n videoRecv: false,\n },\n success: (jsep) => {\n sipcall.send({\n message: {\n request: 'accept',\n },\n jsep: jsep,\n })\n },\n error: (error) => {\n // @ts-ignore\n Janus.error('WebRTC error:', error)\n sipcall.send({\n message: {\n request: 'decline',\n code: 480,\n },\n })\n },\n })\n }\n}\n\nexport function decline() {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipcall) {\n sipcall.send({\n message: {\n request: 'decline',\n },\n })\n }\n}\n\nexport function hangup() {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipcall) {\n sipcall.send({\n message: {\n request: 'hangup',\n },\n })\n }\n}\n\nexport function unregister() {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipcall) {\n sipcall.send({\n message: {\n request: 'unregister',\n },\n })\n }\n}\n\nexport function detach() {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipcall) {\n return sipcall.detach()\n }\n}\n\nexport function handleRemote(jsep) {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipcall) {\n sipcall.handleRemoteJsep({\n jsep: jsep,\n error: function () {\n var hangup = {\n request: 'hangup',\n }\n sipcall.send({\n message: hangup,\n })\n sipcall.hangup()\n },\n })\n }\n}\n\nexport function callSipURI(sipURI: string) {\n getSupportedDevices(async () => {\n // @ts-ignore\n Janus.log('This is a SIP call')\n\n // get current input device id from localstorage\n let currentDeviceInputId = getJSONItem('phone-island-audio-input-device').deviceId || null\n\n await call(sipURI, {\n audio: {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n googEchoCancellation: true,\n googAutoGainControl: true,\n googNoiseSuppression: true,\n googHighpassFilter: true,\n googTypingNoiseDetection: true,\n googNoiseReduction: true,\n volume: 1.0,\n deviceId: currentDeviceInputId,\n },\n audioSend: true,\n audioRecv: true,\n videoSend: false,\n videoRecv: false,\n })\n })\n}\n\nexport function call(sipURI: string, mediaObj: object) {\n return new Promise((resolve, reject) => {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (sipURI && mediaObj) {\n sipcall.createOffer({\n media: mediaObj,\n success: function (jsep: any) {\n // @ts-ignore\n Janus.debug('Got SDP!')\n // @ts-ignore\n Janus.debug(jsep)\n sipcall.send({\n message: {\n request: 'call',\n uri: sipURI,\n },\n jsep: jsep,\n })\n resolve(true)\n },\n error: function (error) {\n // @ts-ignore\n Janus.error('WebRTC error...', error)\n // @ts-ignore\n Janus.error('WebRTC error call on createOffer: ', error)\n reject(false)\n },\n })\n }\n })\n}\n\n/**\n * Mute current call so the counterpart can't listen the current user\n * @returns The muted status\n */\nexport function muteWebRTC(): boolean {\n // Initialize sipcall\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n // Uset the janus library functions to mute call\n sipcall.muteAudio()\n return sipcall.isAudioMuted()\n}\n\n/**\n * Unmute current call so the counterpart can listen the current user\n * @returns The muted status\n */\nexport function unmuteWebRTC(): boolean {\n // Initialize sipcall\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n // Use the janus library functions to unmute call\n sipcall.unmuteAudio()\n return !sipcall.isAudioMuted()\n}\n\n/**\n * Pause current call so the counterpart listens the pause ringtone\n * @returns The true if no errors occurs\n */\nexport function pauseWebRTC() {\n // Initialize sipcall\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n // Send hold message\n try {\n sipcall.send({\n message: {\n request: 'hold',\n },\n })\n return true\n } catch (err) {\n console.error(err)\n return false\n }\n}\n\n/**\n * Unpause the current call so the counterpart listens the current user\n * @returns The true if no errors occurs\n */\nexport function unpauseWebRTC() {\n // Initialize sipcall\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n // Send hold message\n try {\n sipcall.send({\n message: {\n request: 'unhold',\n },\n })\n return true\n } catch (err) {\n console.error(err)\n return false\n }\n}\n\n/**\n * Send DTMF messages to Janus\n */\nexport function sendDTMF(key: string) {\n // Initialize sipcall\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n if (adapter.browserDetails.browser === 'chrome') {\n sipcall.dtmf({\n dtmf: {\n tones: key,\n },\n })\n } else {\n sipcall.send({\n message: {\n request: 'dtmf_info',\n digit: `${key}`,\n },\n })\n }\n}\n"],"names":["call","sipURI","mediaObj","Promise","resolve","reject","sipcall","store","getState","webrtc","createOffer","media","success","jsep","Janus","debug","send","message","request","uri","error","_a","jsepGlobal","currentDeviceInputId","getJSONItem","deviceId","createAnswer","audio","echoCancellation","noiseSuppression","autoGainControl","googEchoCancellation","googAutoGainControl","googNoiseSuppression","googHighpassFilter","googTypingNoiseDetection","googNoiseReduction","volume","audioSend","audioRecv","videoSend","videoRecv","code","_this","this","getSupportedDevices","__awaiter","log","sent","detach","handleRemoteJsep","hangup","muteAudio","isAudioMuted","err","console","sipExten","sipSecret","sipHost","sipPort","name","currentUser","username","concat","display_name","secret","proxy","outbound_proxy","sips","refresh","key","adapter","browserDetails","browser","dtmf","tones","digit","unmuteAudio"],"mappings":"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"}
|