@nethesis/phone-island 1.0.0-dev.1 → 1.0.0-dev.10
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/AudioPlayerView/index.js +1 -1
- package/dist/components/AudioPlayerView/index.js.map +1 -1
- package/dist/components/CallView/Number.js +1 -1
- package/dist/components/CallView/Number.js.map +1 -1
- package/dist/components/CallView/Timer.js +1 -1
- package/dist/components/CallView/Timer.js.map +1 -1
- package/dist/components/IslandDrag.js +1 -1
- package/dist/components/IslandDrag.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/Socket.js.map +1 -1
- package/dist/components/SwitchInputView/{index.js → Index.js} +1 -1
- package/dist/components/SwitchInputView/Index.js.map +1 -0
- package/dist/components/TranscriptionView/TranscriptionView.js +1 -1
- package/dist/components/TranscriptionView/TranscriptionView.js.map +1 -1
- package/dist/components/WebRTC.js.map +1 -1
- package/dist/index.css +1 -1
- package/dist/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js +2 -0
- package/dist/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js.map +1 -0
- package/dist/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js.map +1 -0
- package/dist/node_modules/js-base64/base64.mjs.js +1 -1
- package/dist/node_modules/js-base64/base64.mjs.js.map +1 -1
- package/dist/node_modules/styled-components/dist/styled-components.browser.esm.js +1 -1
- package/dist/node_modules/styled-components/dist/styled-components.browser.esm.js.map +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/common_shim.js +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/common_shim.js.map +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/utils.js +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/utils.js.map +1 -1
- package/dist/package.json.js +1 -1
- package/dist/services/user.js +1 -1
- package/dist/services/user.js.map +1 -1
- package/dist/styles/CustomRange.styles.js +1 -1
- package/dist/styles/CustomRange.styles.js.map +1 -1
- package/dist/styles/Island.styles.js +1 -1
- package/dist/styles/Island.styles.js.map +1 -1
- package/package.json +1 -1
- package/dist/components/SwitchInputView/index.js.map +0 -1
- package/dist/node_modules/styled-components/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js +0 -2
- package/dist/node_modules/styled-components/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js.map +0 -1
- package/dist/node_modules/styled-components/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js.map +0 -1
- /package/dist/node_modules/{styled-components/node_modules/@emotion → @emotion}/memoize/dist/emotion-memoize.esm.js +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react")
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../node_modules/react-moment/dist/index.js"),r=require("../../lib/user/default_device.js");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=a(e);exports.default=function(e){var a=e.size,n=void 0===a?"large":a,l=e.startTime,o=e.isNotAlwaysWhite,u=e.isInsideConference;return i.default.createElement(i.default.Fragment,null,null!=l&&!r.isPhysical()&&i.default.createElement("div",{style:{fontSize:"large"===n?"1.125rem":"1rem",height:"fit-content",letterSpacing:"0.5px",maxWidth:"fit-content"}},i.default.createElement(t.default,{date:Number(l),interval:1e3,format:"hh:mm:ss",trim:!1,unix:!0,durationFromNow:!0,className:"".concat(void 0!==o&&o?"pi-text-gray-950 dark:pi-text-gray-50":"pi-text-gray-50 dark:pi-text-gray-50"," ").concat(u?"pi-font-mono":"")})))};
|
|
2
2
|
//# sourceMappingURL=Timer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Timer.js","sources":["../../../src/components/CallView/Timer.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC } from 'react'\nimport
|
|
1
|
+
{"version":3,"file":"Timer.js","sources":["../../../src/components/CallView/Timer.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC } from 'react'\nimport Moment from 'react-moment'\nimport { isPhysical } from '../../lib/user/default_device'\n\nconst Timer: FC<TimerProps> = ({\n size = 'large',\n startTime,\n isNotAlwaysWhite,\n isInsideConference,\n}) => {\n return (\n <>\n {startTime != null && !isPhysical() && (\n <div\n style={{\n fontSize: size === 'large' ? '1.125rem' : '1rem',\n height: 'fit-content',\n letterSpacing: '0.5px',\n maxWidth: 'fit-content',\n }}\n >\n <Moment\n date={Number(startTime)}\n interval={1000}\n format='hh:mm:ss'\n trim={false}\n unix\n durationFromNow\n className={`${\n isNotAlwaysWhite !== undefined && isNotAlwaysWhite\n ? 'pi-text-gray-950 dark:pi-text-gray-50'\n : 'pi-text-gray-50 dark:pi-text-gray-50'\n } ${isInsideConference ? 'pi-font-mono' : ''}`}\n />\n </div>\n )}\n </>\n )\n}\n\nexport default Timer\n\nexport interface TimerProps {\n size?: 'small' | 'large'\n startTime: string\n // when the timer is used in the home view or in the pill view\n // TODO rename prop: it is used also in video view\n isNotAlwaysWhite?: boolean\n isInsideConference?: boolean\n}\n"],"names":["_a","_b","size","startTime","isNotAlwaysWhite","isInsideConference","React","createElement","Fragment","isPhysical","style","fontSize","height","letterSpacing","maxWidth","Moment","date","Number","interval","format","trim","unix","durationFromNow","className","concat","undefined"],"mappings":"uSAO8B,SAACA,GAC7B,IAAAC,EAAAD,EAAAE,KAAAA,OAAO,IAAAD,EAAA,QAAOA,EACdE,EAASH,EAAAG,UACTC,EAAgBJ,EAAAI,iBAChBC,EAAkBL,EAAAK,mBAElB,OACEC,EAAA,QAAAC,cAAAD,EAAA,QAAAE,SAAA,KACgB,MAAbL,IAAsBM,EAAAA,cACrBH,EAAA,QAAAC,cAAA,MAAA,CACEG,MAAO,CACLC,SAAmB,UAATT,EAAmB,WAAa,OAC1CU,OAAQ,cACRC,cAAe,QACfC,SAAU,gBAGZR,EAAAA,QAAAC,cAACQ,UAAM,CACLC,KAAMC,OAAOd,GACbe,SAAU,IACVC,OAAO,WACPC,MAAM,EACNC,QACAC,iBAAe,EACfC,UAAW,GACTC,YAAqBC,IAArBrB,GAAkCA,EAC9B,wCACA,uCAAsC,KAAAoB,OACxCnB,EAAqB,eAAiB,OAMtD"}
|
|
@@ -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("../store/index.js");require("../node_modules/react-redux/es/index.js");var o=require("../utils/customHooks/useEventListener.js"),s=require("../utils/customHooks/useLocalStorage.js"),n=require("../utils/customHooks/useLongPress.js"),i=require("../utils/genericFunctions/styleTransformValues.js"),a=require("../lib/island/island.js"),u=require("../node_modules/framer-motion/dist/es/gestures/drag/use-drag-controls.mjs.js"),l=require("../node_modules/framer-motion/dist/es/animation/hooks/use-animation.mjs.js"),d=require("../node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs.js"),c=require("../node_modules/react-redux/es/hooks/useSelector.js"),m=require("../node_modules/react-redux/es/hooks/useDispatch.js");function p(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("../node_modules/tslib/tslib.es6.js"),t=require("react"),r=require("../store/index.js");require("../node_modules/react-redux/es/index.js");var o=require("../utils/customHooks/useEventListener.js"),s=require("../utils/customHooks/useLocalStorage.js"),n=require("../utils/customHooks/useLongPress.js"),i=require("../utils/genericFunctions/styleTransformValues.js"),a=require("../lib/island/island.js"),u=require("../node_modules/framer-motion/dist/es/gestures/drag/use-drag-controls.mjs.js"),l=require("../node_modules/framer-motion/dist/es/animation/hooks/use-animation.mjs.js"),d=require("../node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs.js"),c=require("../node_modules/react-redux/es/hooks/useSelector.js"),m=require("../node_modules/react-redux/es/hooks/useDispatch.js");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var f=p(t),g=function(p){var g=p.children,v=p.islandContainerRef,j=c.useSelector((function(e){return e.island})).startPosition,x=t.useState(!1),h=x[0],y=x[1],_=m.useDispatch(),q=u.useDragControls(),b=l.useAnimation(),S=s.useLocalStorage("phone-island",null),D=S[0],P=S[1],L=t.useRef(null),k=t.useState(D&&D.position?D.position:null),C=k[0],w=k[1];o.useEventListener("phone-island-reset-position",(function(){return e.__awaiter(void 0,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return localStorage.removeItem("phone-island"),w(null),[4,b.start({x:j.x,y:j.y,transition:{duration:.3,ease:"easeOut"}})];case 1:return e.sent(),[2]}}))}))}));var E=n.useLongPress((function(){}),(function(e){var t,o;if(e&&e.target){var s=e.target;if(s.closest('[data-stop-propagation="true"]')||s.hasAttribute("data-stop-propagation"))return}!(null===(o=null===(t=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===t?void 0:t.island)||void 0===o?void 0:o.isOpen)&&_.island.handleToggleIsOpen()}),h,(function(){return y(!1)}),{shouldPreventDefault:!0,delay:250});return f.default.createElement(d.motion.div,e.__assign({drag:!0,onPointerDown:function(e){var t=e.target;t.closest('[data-stop-propagation="true"]')||t.hasAttribute("data-stop-propagation")||q.start(e)},onDragStart:function(){y(!0)},dragTransition:{power:0,timeConstant:300},initial:{x:(null==C?void 0:C.x)||j.x,y:(null==C?void 0:C.y)||j.y},animate:b,dragControls:q,dragListener:!1,dragConstraints:v,onDragEnd:function(){if(L.current){var e=i.styleTransformValues(L.current),t=e.x,r=e.y;t=a.xPosition(Math.round(t),L.current,v.current),r=a.yPosition(Math.round(r),L.current,v.current),P({position:{x:t,y:r}}),w({x:t,y:r})}},ref:L},E,{className:"pi-absolute"}),g&&g)};exports.IslandDrag=g,exports.default=g;
|
|
2
2
|
//# sourceMappingURL=IslandDrag.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IslandDrag.js","sources":["../../src/components/IslandDrag.tsx"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useState, useRef, MutableRefObject } from 'react'\nimport { RootState, Dispatch, store } from '../store'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { motion, useDragControls, useAnimation } from 'framer-motion'\nimport { useLongPress, useLocalStorage, styleTransformValues, useEventListener } from '../utils'\nimport { xPosition, yPosition } from '../lib/island/island'\n\nexport const IslandDrag: FC<IslandDragProps> = ({ children, islandContainerRef }) => {\n const { startPosition } = useSelector((state: RootState) => state.island)\n\n // Initialize the moved property\n const [moved, setMoved] = useState<boolean>(false)\n\n // Initialize dispatch\n const dispatch = useDispatch<Dispatch>()\n\n // Initialize Island drag controls\n const controls = useDragControls()\n\n // Initialize animation controls for reset functionality\n const animationControls = useAnimation()\n\n // Initialize Island storage\n const [phoneIslandStorage, setPhoneIslandStorage] =\n useLocalStorage<PhoneIslandStorageTypes | null>('phone-island', null)\n\n // The Island reference\n const islandRef = useRef<any>(null)\n\n // Initialize position or get from storage\n const [position, setPosition] = useState<PositionTypes | null>(\n phoneIslandStorage && phoneIslandStorage.position ? phoneIslandStorage.position : null,\n )\n\n // Handles reset position to default\n const handleResetPosition = async () => {\n // Clear localStorage\n localStorage.removeItem('phone-island')\n \n // Reset position state\n setPosition(null)\n \n // Animate back to default position\n await animationControls.start({\n x: startPosition.x,\n y: startPosition.y,\n transition: {\n duration: 0.3,\n ease: 'easeOut',\n },\n })\n }\n\n // Listen for reset position event\n useEventListener('phone-island-reset-position', handleResetPosition)\n\n // Handles the drag started event\n function handleStartDrag(event: React.PointerEvent<Element>) {\n const target = event.target as HTMLElement\n if (\n target.closest('[data-stop-propagation=\"true\"]') ||\n target.hasAttribute('data-stop-propagation')\n ) {\n return\n }\n\n controls.start(event)\n }\n\n // Handles log press event\n const handleLongPress = () => {}\n\n const handleIslandClick = (event?: React.MouseEvent<Element> | any) => {\n if (event && event.target) {\n const target = event.target as HTMLElement\n if (\n target.closest('[data-stop-propagation=\"true\"]') ||\n target.hasAttribute('data-stop-propagation')\n ) {\n return\n }\n }\n\n // Only if phone island is close is possible to open it trough the click\n const isPhoneIslandAlreadyOpen = store?.getState()?.island?.isOpen\n !isPhoneIslandAlreadyOpen && dispatch.island.handleToggleIsOpen()\n }\n\n // Handles drag end event\n const handleDragEnd = () => {\n // Get initial transform values\n let { x, y }: any = styleTransformValues(islandRef.current)\n // Round position\n x = xPosition(Math.round(x), islandRef.current, islandContainerRef.current)\n y = yPosition(Math.round(y), islandRef.current, islandContainerRef.current)\n // Save the new position to localstorage\n setPhoneIslandStorage({\n position: {\n x,\n y,\n },\n })\n // Set position to variable\n setPosition({\n x,\n y,\n })\n }\n\n // Handles drag started event\n function handleDragStarted() {\n setMoved(true)\n }\n\n // Initialize the longPressEvent object\n const longPressEvent = useLongPress(\n handleLongPress,\n handleIslandClick,\n moved,\n () => setMoved(false),\n {\n shouldPreventDefault: true,\n delay: 250,\n },\n )\n\n return (\n <motion.div\n drag\n onPointerDown={handleStartDrag}\n onDragStart={handleDragStarted}\n dragTransition={{ \n power: 0,\n timeConstant: 300\n }}\n initial={{\n x: position?.x || startPosition.x,\n y: position?.y || startPosition.y,\n }}\n animate={animationControls}\n dragControls={controls}\n dragListener={false}\n dragConstraints={islandContainerRef}\n onDragEnd={handleDragEnd}\n ref={islandRef}\n {...longPressEvent}\n className='pi-absolute'\n >\n {children && children}\n </motion.div>\n )\n}\n\nexport default IslandDrag\n\nexport interface IslandDragProps {\n children: ReactNode\n islandContainerRef: MutableRefObject<HTMLDivElement>\n}\n\ninterface PhoneIslandStorageTypes {\n position: PositionTypes\n}\n\ninterface PositionTypes {\n x: number\n y: number\n}\n"],"names":["IslandDrag","_a","children","islandContainerRef","startPosition","useSelector","state","island","_b","useState","moved","setMoved","dispatch","useDispatch","controls","useDragControls","animationControls","useAnimation","_c","useLocalStorage","phoneIslandStorage","setPhoneIslandStorage","islandRef","useRef","_d","position","setPosition","useEventListener","__awaiter","localStorage","removeItem","start","x","y","transition","duration","ease","sent","longPressEvent","useLongPress","event","target","closest","hasAttribute","store","getState","isOpen","handleToggleIsOpen","shouldPreventDefault","delay","React","createElement","motion","div","drag","onPointerDown","onDragStart","dragTransition","power","timeConstant","initial","animate","dragControls","dragListener","dragConstraints","onDragEnd","
|
|
1
|
+
{"version":3,"file":"IslandDrag.js","sources":["../../src/components/IslandDrag.tsx"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useState, useRef, MutableRefObject } from 'react'\nimport { RootState, Dispatch, store } from '../store'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { motion, useDragControls, useAnimation } from 'framer-motion'\nimport { useLongPress, useLocalStorage, styleTransformValues, useEventListener } from '../utils'\nimport { xPosition, yPosition } from '../lib/island/island'\n\nexport const IslandDrag: FC<IslandDragProps> = ({ children, islandContainerRef }) => {\n const { startPosition } = useSelector((state: RootState) => state.island)\n\n // Initialize the moved property\n const [moved, setMoved] = useState<boolean>(false)\n\n // Initialize dispatch\n const dispatch = useDispatch<Dispatch>()\n\n // Initialize Island drag controls\n const controls = useDragControls()\n\n // Initialize animation controls for reset functionality\n const animationControls = useAnimation()\n\n // Initialize Island storage\n const [phoneIslandStorage, setPhoneIslandStorage] =\n useLocalStorage<PhoneIslandStorageTypes | null>('phone-island', null)\n\n // The Island reference\n const islandRef = useRef<any>(null)\n\n // Initialize position or get from storage\n const [position, setPosition] = useState<PositionTypes | null>(\n phoneIslandStorage && phoneIslandStorage.position ? phoneIslandStorage.position : null,\n )\n\n // Handles reset position to default\n const handleResetPosition = async () => {\n // Clear localStorage\n localStorage.removeItem('phone-island')\n \n // Reset position state\n setPosition(null)\n \n // Animate back to default position\n await animationControls.start({\n x: startPosition.x,\n y: startPosition.y,\n transition: {\n duration: 0.3,\n ease: 'easeOut',\n },\n })\n }\n\n // Listen for reset position event\n useEventListener('phone-island-reset-position', handleResetPosition)\n\n // Handles the drag started event\n function handleStartDrag(event: React.PointerEvent<Element>) {\n const target = event.target as HTMLElement\n if (\n target.closest('[data-stop-propagation=\"true\"]') ||\n target.hasAttribute('data-stop-propagation')\n ) {\n return\n }\n\n controls.start(event)\n }\n\n // Handles log press event\n const handleLongPress = () => {}\n\n const handleIslandClick = (event?: React.MouseEvent<Element> | any) => {\n if (event && event.target) {\n const target = event.target as HTMLElement\n if (\n target.closest('[data-stop-propagation=\"true\"]') ||\n target.hasAttribute('data-stop-propagation')\n ) {\n return\n }\n }\n\n // Only if phone island is close is possible to open it trough the click\n const isPhoneIslandAlreadyOpen = store?.getState()?.island?.isOpen\n !isPhoneIslandAlreadyOpen && dispatch.island.handleToggleIsOpen()\n }\n\n // Handles drag end event\n const handleDragEnd = () => {\n if (!islandRef.current) return\n // Get initial transform values\n let { x, y }: any = styleTransformValues(islandRef.current)\n // Round position\n x = xPosition(Math.round(x), islandRef.current, islandContainerRef.current)\n y = yPosition(Math.round(y), islandRef.current, islandContainerRef.current)\n // Save the new position to localstorage\n setPhoneIslandStorage({\n position: {\n x,\n y,\n },\n })\n // Set position to variable\n setPosition({\n x,\n y,\n })\n }\n\n // Handles drag started event\n function handleDragStarted() {\n setMoved(true)\n }\n\n // Initialize the longPressEvent object\n const longPressEvent = useLongPress(\n handleLongPress,\n handleIslandClick,\n moved,\n () => setMoved(false),\n {\n shouldPreventDefault: true,\n delay: 250,\n },\n )\n\n return (\n <motion.div\n drag\n onPointerDown={handleStartDrag}\n onDragStart={handleDragStarted}\n dragTransition={{ \n power: 0,\n timeConstant: 300\n }}\n initial={{\n x: position?.x || startPosition.x,\n y: position?.y || startPosition.y,\n }}\n animate={animationControls}\n dragControls={controls}\n dragListener={false}\n dragConstraints={islandContainerRef}\n onDragEnd={handleDragEnd}\n ref={islandRef}\n {...longPressEvent}\n className='pi-absolute'\n >\n {children && children}\n </motion.div>\n )\n}\n\nexport default IslandDrag\n\nexport interface IslandDragProps {\n children: ReactNode\n islandContainerRef: MutableRefObject<HTMLDivElement>\n}\n\ninterface PhoneIslandStorageTypes {\n position: PositionTypes\n}\n\ninterface PositionTypes {\n x: number\n y: number\n}\n"],"names":["IslandDrag","_a","children","islandContainerRef","startPosition","useSelector","state","island","_b","useState","moved","setMoved","dispatch","useDispatch","controls","useDragControls","animationControls","useAnimation","_c","useLocalStorage","phoneIslandStorage","setPhoneIslandStorage","islandRef","useRef","_d","position","setPosition","useEventListener","__awaiter","localStorage","removeItem","start","x","y","transition","duration","ease","sent","longPressEvent","useLongPress","event","target","closest","hasAttribute","store","getState","isOpen","handleToggleIsOpen","shouldPreventDefault","delay","React","createElement","motion","div","drag","onPointerDown","onDragStart","dragTransition","power","timeConstant","initial","animate","dragControls","dragListener","dragConstraints","onDragEnd","current","styleTransformValues","xPosition","Math","round","yPosition","ref","className"],"mappings":"k8BAUaA,EAAkC,SAACC,OAAEC,EAAQD,EAAAC,SAAEC,EAAkBF,EAAAE,mBACpEC,EAAkBC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,wBAG5DC,EAAoBC,EAAAA,UAAkB,GAArCC,EAAKF,EAAA,GAAEG,EAAQH,EAAA,GAGhBI,EAAWC,EAAAA,cAGXC,EAAWC,EAAAA,kBAGXC,EAAoBC,EAAAA,eAGpBC,EACJC,EAAAA,gBAAgD,eAAgB,MAD3DC,EAAkBF,EAAA,GAAEG,OAIrBC,EAAYC,SAAY,MAGxBC,EAA0Bf,EAAAA,SAC9BW,GAAsBA,EAAmBK,SAAWL,EAAmBK,SAAW,MAD7EA,EAAQD,EAAA,GAAEE,EAAWF,EAAA,GAwB5BG,mBAAiB,+BAnBW,WAAA,OAAAC,EAAAA,eAAA,OAAA,OAAA,GAAA,yEAQ1B,OANAC,aAAaC,WAAW,gBAGxBJ,EAAY,MAGN,CAAA,EAAAV,EAAkBe,MAAM,CAC5BC,EAAG5B,EAAc4B,EACjBC,EAAG7B,EAAc6B,EACjBC,WAAY,CACVC,SAAU,GACVC,KAAM,4BALVnC,EAAAoC,qBAyEF,IAAMC,EAAiBC,EAAAA,cA9CC,eAEE,SAACC,WACzB,GAAIA,GAASA,EAAMC,OAAQ,CACzB,IAAMA,EAASD,EAAMC,OACrB,GACEA,EAAOC,QAAQ,mCACfD,EAAOE,aAAa,yBAEpB,MAEH,GAGyD,QAAzBnC,EAAiB,QAAjBP,SAAA2C,EAAAA,YAAK,IAALA,EAAKA,WAAA,EAALA,EAAAA,MAAOC,kBAAU,IAAA5C,OAAA,EAAAA,EAAEM,cAAM,IAAAC,OAAA,EAAAA,EAAEsC,SAC/BlC,EAASL,OAAOwC,oBAC/C,GAiCErC,GACA,WAAM,OAAAC,GAAS,KACf,CACEqC,sBAAsB,EACtBC,MAAO,MAIX,OACEC,EAAC,QAAAC,cAAAC,SAAOC,gBACNC,MAAI,EACJC,cAzEJ,SAAyBf,GACvB,IAAMC,EAASD,EAAMC,OAEnBA,EAAOC,QAAQ,mCACfD,EAAOE,aAAa,0BAKtB7B,EAASiB,MAAMS,EAChB,EAgEGgB,YApBJ,WACE7C,GAAS,EACV,EAmBG8C,eAAgB,CACdC,MAAO,EACPC,aAAc,KAEhBC,QAAS,CACP5B,GAAGP,aAAQ,EAARA,EAAUO,IAAK5B,EAAc4B,EAChCC,GAAGR,aAAQ,EAARA,EAAUQ,IAAK7B,EAAc6B,GAElC4B,QAAS7C,EACT8C,aAAchD,EACdiD,cAAc,EACdC,gBAAiB7D,EACjB8D,UAvDkB,WACpB,GAAK3C,EAAU4C,QAAf,CAEI,IAAAjE,EAAgBkE,EAAAA,qBAAqB7C,EAAU4C,SAA7ClC,EAAC/B,EAAA+B,EAAEC,MAETD,EAAIoC,EAAAA,UAAUC,KAAKC,MAAMtC,GAAIV,EAAU4C,QAAS/D,EAAmB+D,SACnEjC,EAAIsC,EAAAA,UAAUF,KAAKC,MAAMrC,GAAIX,EAAU4C,QAAS/D,EAAmB+D,SAEnE7C,EAAsB,CACpBI,SAAU,CACRO,EAACA,EACDC,EAACA,KAILP,EAAY,CACVM,EAACA,EACDC,EAACA,GAhB2B,CAkBhC,EAqCIuC,IAAKlD,GACDgB,EACJ,CAAAmC,UAAU,gBAETvE,GAAYA,EAGnB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("react");require("../../node_modules/react-redux/es/index.js");var r=require("./Actions.js"),i=require("./BarsGroup.js"),a=require("../AudioPlayerView/Progress.js"),n=require("../../lib/phone/audio.js"),s=require("../../node_modules/webm-duration-fix/lib/index.js"),l=require("./Timer.js");require("../../node_modules/@babel/runtime/helpers/defineProperty.js"),require("../../node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../../node_modules/@babel/runtime/helpers/typeof.js"),require("../../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../../node_modules/react-i18next/dist/es/context.js");var o=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var u=require("../Button.js"),d=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),c=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js")
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("react");require("../../node_modules/react-redux/es/index.js");var r=require("./Actions.js"),i=require("./BarsGroup.js"),a=require("../AudioPlayerView/Progress.js"),n=require("../../lib/phone/audio.js"),s=require("../../node_modules/webm-duration-fix/lib/index.js"),l=require("./Timer.js");require("../../node_modules/@babel/runtime/helpers/defineProperty.js"),require("../../node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../../node_modules/@babel/runtime/helpers/typeof.js"),require("../../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../../node_modules/react-i18next/dist/es/context.js");var o=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var u=require("../Button.js"),d=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),c=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),f=require("../../node_modules/react-redux/es/hooks/useSelector.js"),m=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),p=require("../../node_modules/react-redux/es/utils/shallowEqual.js");function x(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var v=x(t),w="audio/webm";exports.RecorderView=function(){var x=f.useSelector((function(e){return e.island})).isOpen,b=f.useSelector((function(e){return e.player})).audioPlayerPlaying,h=t.useRef(null),g=t.useRef(null),j=t.useRef([]),y=m.useDispatch(),E=f.useSelector((function(e){return e.webrtc.localAudioStream})),q=f.useSelector((function(e){return{recording:e.recorder.recording,recorded:e.recorder.recorded,waiting:e.recorder.waiting}}),p.default),_=q.recording,N=q.recorded,k=q.waiting;function A(e){j.current.push(e.data)}function P(){return e.__awaiter(this,void 0,void 0,(function(){var t,r;return e.__generator(this,(function(e){switch(e.label){case 0:return[4,s.default(new Blob(j.current,{type:w}))];case 1:return t=e.sent(),r=URL.createObjectURL(t),n.updateAudioPlayerSource(r),[2]}}))}))}t.useEffect((function(){(null==E?void 0:E.active)&&_&&(g.current=new MediaRecorder(E,{mimeType:w}),g.current.ondataavailable=A,g.current.onstop=P,g.current.start())}),[null==E?void 0:E.active,_]),t.useEffect((function(){var e;N&&(j.current=[],null===(e=g.current)||void 0===e||e.stop())}),[N]),t.useEffect((function(){return y.recorder.setVisibleContainerRef(h),function(){y.recorder.reset()}}),[]);var S=o.useTranslation().t;return v.default.createElement(v.default.Fragment,null,x?v.default.createElement(v.default.Fragment,null," ",v.default.createElement("div",{className:"pi-flex pi-items-center pi-justify-between pi-text-gray-900 dark:pi-text-gray-50"},v.default.createElement("h1",{className:"pi-text-lg pi-font-medium pi-leading-7"},S("Common.Record message")),v.default.createElement(u.Button,{onClick:function(){y.island.resetPlayerClose()},variant:"transparentSettings","data-tooltip-id":"tooltip-close-settings","data-tooltip-content":S("Common.Close")||""},v.default.createElement(d.FontAwesomeIcon,{icon:c.faXmark,className:"pi-w-5 pi-h-5"}))),v.default.createElement("div",{className:"pi-pt-4"},v.default.createElement("div",{className:"".concat(!_||k||b?"pi-mb-3":""," pi-flex pi-w-full pi-justify-center pi-items-center")},v.default.createElement("div",{className:"pi-font-medium pi-text-4xl pi-w-fit pi-h-fit dark:pi-text-white"},v.default.createElement(l.default,null))),v.default.createElement("div",{className:"pi-relative pi-w-full pi-justify-center pi-overflow-hidden pi-flex pi-items-center",ref:h},N?v.default.createElement(a.Progress,null):_&&!k?v.default.createElement("div",{className:"pi-flex pi-items-center pi-justify-between pi-w-full pi-pb-3 pi-overflow-hidden"},v.default.createElement(u.Button,{variant:"transparent",disabled:!0,className:"pi-flex pi-flex-none"},v.default.createElement(d.FontAwesomeIcon,{icon:c.faPlay,className:"pi-h-4 pi-w-4 pi-text-gray-700 dark:pi-text-gray-200"})),v.default.createElement("div",{className:"pi-relative pi-overflow-hidden pi-flex pi-flex-grow pi-justify-center pi-h-4"},Array.from({length:2}).map((function(e,t){return v.default.createElement(i.BarsGroup,{key:t,index:t,startAnimation:_,audioStream:E})}))),v.default.createElement(u.Button,{variant:"transparent",disabled:!0,className:"pi-flex pi-flex-none"},v.default.createElement(d.FontAwesomeIcon,{icon:c.faTrash,className:"pi-h-4 pi-w-4 pi-text-gray-700 dark:pi-text-gray-200"}))):_&&k?v.default.createElement("div",{className:"pi-sans pi-text-sm pi-w-fit pi-h-fit dark:pi-text-white pi-pb-7"},S("Common.Start recording message after")):v.default.createElement("div",{className:"pi-sans pi-text-sm pi-w-fit pi-h-fit dark:pi-text-white pi-pb-7"},S("Common.Start recording message before")))),v.default.createElement(r.Actions,null)):v.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) 2024 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'\nimport { Button } from '../Button'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faTrash, faXmark, faPlay } from '@fortawesome/free-solid-svg-icons'\nimport { eventDispatch } from '../../utils'\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 { audioPlayerPlaying } = useSelector((state: RootState) => state.player)\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 function playerClose() {\n if (audioPlayerPlaying) {\n dispatch.player.stopAudioPlayer()\n eventDispatch('phone-island-audio-player-close', {})\n }\n dispatch.island.resetPlayerClose()\n }\n\n function close() {\n dispatch.island.resetPlayerClose()\n }\n\n return (\n <>\n {isOpen ? (\n <>\n {' '}\n <div className='pi-flex pi-items-center pi-justify-between pi-text-gray-900 dark:pi-text-gray-50'>\n <h1 className='pi-text-lg pi-font-medium pi-leading-7'>{t('Common.Record message')}</h1>\n <Button\n onClick={() => close()}\n variant='transparentSettings'\n data-tooltip-id='tooltip-close-settings'\n data-tooltip-content={t('Common.Close') || ''}\n >\n <FontAwesomeIcon icon={faXmark} className='pi-w-5 pi-h-5' />\n </Button>\n </div>\n <div className='pi-pt-4'>\n <div\n className={`${\n !recording || waiting || audioPlayerPlaying ? 'pi-mb-3' : ''\n } pi-flex pi-w-full pi-justify-center pi-items-center`}\n >\n <div className='pi-font-medium pi-text-4xl pi-w-fit pi-h-fit dark: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 pi-overflow-hidden pi-flex pi-items-center`}\n ref={visibleContainerRef}\n >\n {recorded ? (\n <Progress />\n ) : recording && !waiting ? (\n <div className='pi-flex pi-items-center pi-justify-between pi-w-full pi-pb-3 pi-overflow-hidden'>\n {/* Play button (disabled) on left */}\n <Button variant='transparent' disabled className='pi-flex pi-flex-none'>\n <FontAwesomeIcon\n icon={faPlay}\n className='pi-h-4 pi-w-4 pi-text-gray-700 dark:pi-text-gray-200'\n />\n </Button>\n\n {/* Audio visualization in the middle */}\n <div className='pi-relative pi-overflow-hidden pi-flex pi-flex-grow pi-justify-center pi-h-4'>\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 </div>\n\n {/* Trash button (disabled) on right */}\n <Button variant='transparent' disabled className='pi-flex pi-flex-none'>\n <FontAwesomeIcon\n icon={faTrash}\n className='pi-h-4 pi-w-4 pi-text-gray-700 dark:pi-text-gray-200'\n />\n </Button>\n </div>\n ) : recording && waiting ? (\n <div className='pi-sans pi-text-sm pi-w-fit pi-h-fit dark:pi-text-white pi-pb-7'>\n {t('Common.Start recording message after')}\n </div>\n ) : (\n <div className='pi-sans pi-text-sm pi-w-fit pi-h-fit dark:pi-text-white pi-pb-7'>\n {t('Common.Start recording message before')}\n </div>\n )}\n </div>\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":["MIME_TYPE","isOpen","useSelector","state","island","audioPlayerPlaying","player","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","Button","onClick","resetPlayerClose","variant","FontAwesomeIcon","icon","faXmark","concat","Timer","ref","Progress","disabled","faPlay","Array","from","length","map","_","i","BarsGroup","key","index","startAnimation","audioStream","faTrash","Actions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/RecorderView/index.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useRef, useEffect } 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'\nimport { Button } from '../Button'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faTrash, faXmark, faPlay } from '@fortawesome/free-solid-svg-icons'\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 { audioPlayerPlaying } = useSelector((state: RootState) => state.player)\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 function close() {\n dispatch.island.resetPlayerClose()\n }\n\n return (\n <>\n {isOpen ? (\n <>\n {' '}\n <div className='pi-flex pi-items-center pi-justify-between pi-text-gray-900 dark:pi-text-gray-50'>\n <h1 className='pi-text-lg pi-font-medium pi-leading-7'>{t('Common.Record message')}</h1>\n <Button\n onClick={() => close()}\n variant='transparentSettings'\n data-tooltip-id='tooltip-close-settings'\n data-tooltip-content={t('Common.Close') || ''}\n >\n <FontAwesomeIcon icon={faXmark} className='pi-w-5 pi-h-5' />\n </Button>\n </div>\n <div className='pi-pt-4'>\n <div\n className={`${\n !recording || waiting || audioPlayerPlaying ? 'pi-mb-3' : ''\n } pi-flex pi-w-full pi-justify-center pi-items-center`}\n >\n <div className='pi-font-medium pi-text-4xl pi-w-fit pi-h-fit dark: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 pi-overflow-hidden pi-flex pi-items-center`}\n ref={visibleContainerRef}\n >\n {recorded ? (\n <Progress />\n ) : recording && !waiting ? (\n <div className='pi-flex pi-items-center pi-justify-between pi-w-full pi-pb-3 pi-overflow-hidden'>\n {/* Play button (disabled) on left */}\n <Button variant='transparent' disabled className='pi-flex pi-flex-none'>\n <FontAwesomeIcon\n icon={faPlay}\n className='pi-h-4 pi-w-4 pi-text-gray-700 dark:pi-text-gray-200'\n />\n </Button>\n\n {/* Audio visualization in the middle */}\n <div className='pi-relative pi-overflow-hidden pi-flex pi-flex-grow pi-justify-center pi-h-4'>\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 </div>\n\n {/* Trash button (disabled) on right */}\n <Button variant='transparent' disabled className='pi-flex pi-flex-none'>\n <FontAwesomeIcon\n icon={faTrash}\n className='pi-h-4 pi-w-4 pi-text-gray-700 dark:pi-text-gray-200'\n />\n </Button>\n </div>\n ) : recording && waiting ? (\n <div className='pi-sans pi-text-sm pi-w-fit pi-h-fit dark:pi-text-white pi-pb-7'>\n {t('Common.Start recording message after')}\n </div>\n ) : (\n <div className='pi-sans pi-text-sm pi-w-fit pi-h-fit dark:pi-text-white pi-pb-7'>\n {t('Common.Start recording message before')}\n </div>\n )}\n </div>\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":["MIME_TYPE","isOpen","useSelector","state","island","audioPlayerPlaying","player","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","Button","onClick","resetPlayerClose","variant","FontAwesomeIcon","icon","faXmark","concat","Timer","ref","Progress","disabled","faPlay","Array","from","length","map","_","i","BarsGroup","key","index","startAnimation","audioStream","faTrash","Actions"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),n=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),r=require("./RestAPI.js"),i=require("../lib/phone/conversation.js"),o=require("../services/user.js"),c=require("../static/busy_ringtone.js"),s=require("../utils/customHooks/useEventListener.js"),a=require("../utils/genericFunctions/eventDispatch.js"),u=require("../utils/genericFunctions/withTimeout.js"),l=require("../store/index.js");require("../lib/webrtc/janus.js"),require("../node_modules/webrtc-adapter/src/js/adapter_core.js");var d=require("../lib/devices/devices.js"),p=require("../lib/user/default_device.js"),v=require("../utils/genericFunctions/isEmpty.js"),m=require("../utils/streaming/getStreamingSourceId.js"),g=require("../events/SocketEvents.js"),f=require("../utils/genericFunctions/timestamp.js"),h=require("../lib/user/extensions.js"),S=require("../utils/streaming/isFromStreaming.js"),k=require("../lib/phone/trunk.js"),b=require("../node_modules/react-redux/es/hooks/useDispatch.js");function y(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var w=y(n);exports.Socket=function(y){var C=y.hostName,_=y.username,N=y.authToken,T=y.reload,D=y.reloadedCallback,U=y.children,j=y.uaType,q=b.useDispatch(),I=n.useRef(),x=n.useRef(),E=n.useRef(!1),O=n.useRef(0);s.useEventListener("phone-island-start-transcription",(function(e){if(x.current){var n=(null==e?void 0:e.linkedid)||(null==e?void 0:e.uniqueid)||null;if(!n)return;x.current.emit("start_transcription",{linkedid:n,uniqueid:(null==e?void 0:e.uniqueid)||n})}})),s.useEventListener("phone-island-stop-transcription",(function(e){if(x.current){var n=(null==e?void 0:e.linkedid)||(null==e?void 0:e.uniqueid)||null;if(!n)return;x.current.emit("stop_transcription",{linkedid:n,uniqueid:(null==e?void 0:e.uniqueid)||n})}}));return n.useEffect((function(){var n,s=function(e){if(e.counterpartNum&&S.isFromStreaming(e.counterpartNum)){q.island.setIsFromStreaming(!0),q.currentCall.updateCurrentCall({streamingSourceNumber:e.counterpartNum});var n=m.getStreamingSourceId(e.counterpartNum);n&&o.subscribe({id:n}).catch((function(e){return console.error("Error subscribing to streaming source:",e)}))}},b=function(n,t){var r=l.store.getState().currentCall,c=r.transferring,u=r.transferSwitching,d=r.transferCalls,v=l.store.getState().island.view;if(Object.keys(t).length>0){if(n.status){var m=l.store.getState().users.extensions,g=l.store.getState().currentUser.default_device,S=l.store.getState().currentUser,b=S.endpoints,y=S.username,w=l.store.getState().currentCall;w.incoming,w.outgoing;var C=function(){if(!m||!y)return!1;var e=Object.values(m).filter((function(e){return(null==e?void 0:e.username)===y}));return null==e?void 0:e.some((function(e){var n=null==b?void 0:b.extension.find((function(n){return n.id===(null==e?void 0:e.exten)}));return"nethlink"===(null==n?void 0:n.type)&&"offline"!==(null==e?void 0:e.status)}))};switch(n.status){case"ringing":s(t),("mobile"===j&&C()||"desktop"===j&&("webrtc"===(null==g?void 0:g.type)||void 0===(null==g?void 0:g.type)&&!C()||!C()&&"physical"===(null==g?void 0:g.type)))&&(q.currentCall.checkIncomingUpdatePlay({conversationId:t.id,displayName:i.getDisplayName(t),number:"".concat(t.counterpartNum),incomingSocket:!0,incoming:!0,username:"".concat(m&&m[t.counterpartNum]&&m[t.counterpartNum].username)||"",ownerExtension:t.owner}),l.store.dispatch.island.setIslandView("call")),E.current||(E.current=!0,o.getCurrentUserInfo().then((function(n){n&&(q.currentUser.updateCurrentUser(n),a.eventDispatch("phone-island-user-informations-update",e.__assign({},n)),n.settings&&n.settings.open_param_url?q.paramUrl.setOpenParamUrlType(n.settings.open_param_url):q.paramUrl.setOpenParamUrlType("never"))})).catch((function(e){console.error("Error getting current user info:",e)})).finally((function(){setTimeout((function(){E.current=!1}),100)})));var _=l.store.getState().paramUrl.openParamUrlType,N=l.store.getState().island.urlOpened;if("ringing"===_&&!N){var T=k.isFromTrunk(t.counterpartNum);l.store.dispatch.paramUrl.setThroughTrunk(T),l.store.dispatch.island.setUrlOpened(!1),a.eventDispatch("phone-island-url-parameter-opened",{counterpartNum:t.counterpartNum,counterpartName:i.getDisplayName(t),owner:t.owner,uniqueId:t.uniqueId,linkedId:t.linkedId,throughQueue:t.throughQueue,throughTrunk:T,direction:t.direction,connected:t.connected})}break;case"busy":if(s(t),"mobile"===j&&C()||"desktop"===j&&("webrtc"===(null==g?void 0:g.type)||void 0===(null==g?void 0:g.type)&&!C()||!C()&&"physical"===(null==g?void 0:g.type))){if(t&&t.connected)q.currentCall.updateCurrentCall({conversationId:t.id,displayName:i.getDisplayName(t),number:"".concat(t.counterpartNum),ownerExtension:t.owner,username:"".concat(m&&m[t.counterpartNum]&&m[t.counterpartNum].username)||"",chDest:(null==t?void 0:t.chDest)||{},chSource:(null==t?void 0:t.chSource)||{}}),q.currentCall.checkAcceptedUpdate({acceptedSocket:!0}),q.currentCall.addTransferCalls({type:"transferred",displayName:i.getDisplayName(t),number:"".concat(t.counterpartNum),startTime:"".concat(f.getTimestampInSeconds())}),l.store.getState().island.isFromStreaming&&"out"===t.direction&&setTimeout((function(){q.island.setIslandView("streamingAnswer")}),200),p.isPhysical()&&function(e){q.currentCall.updateCurrentCall({conversationId:e.id,accepted:!0,incoming:"in"!==e.direction&&void 0}),a.eventDispatch("phone-island-call-answered",{}),l.store.dispatch.player.stopAudioPlayer(),l.store.dispatch.player.setAudioPlayerLoop(!1)}(t),"call"===v&&c&&q.currentCall.updateCurrentCall({transferring:!1});if(d.length>1)q.currentCall.deleteTransferCalls();else if(t&&!t.connected){if(c&&!u){var D=d.find((function(e){return e.number===t.counterpartNum}));!t.connected&&D&&(q.currentCall.updateCurrentCall({transferring:!1}),a.eventDispatch("phone-island-call-transfer-failed",{}),q.currentCall.updateTransferSwitching(!1))}"REC"===(null==t?void 0:t.counterpartName)&&q.physicalRecorder.setRecordingTempVariable(!0)}t&&!t.connected&&"out"===t.direction&&q.currentCall.checkOutgoingUpdate({outgoingSocket:!0,outgoing:"REC"!==(null==t?void 0:t.counterpartName),displayName:i.getDisplayName(t),number:"".concat(null==t?void 0:t.counterpartNum),username:"".concat(m&&m[null==t?void 0:t.counterpartNum]&&m[null==t?void 0:t.counterpartNum].username)||""})}break;case"onhold":var U=t.counterpartName,I=t.counterpartNum,x=t.startTime;c&&I&&U&&"<unknown>"!==U&&(q.currentCall.addTransferCalls({type:"destination",displayName:i.getDisplayName(t),number:I,startTime:"".concat(f.getTimestampInSeconds())}),q.currentCall.updateCurrentCall({displayName:i.getDisplayName(t),number:I,startTime:"".concat(x/1e3),conversationId:t.id}),q.island.setIslandView("call"));break;case"busy_ringing":a.eventDispatch("phone-island-call-ringing",{})}}}else"online"==n.status&&h.userTotallyFree()&&(q.player.stopAudioPlayer(),q.currentCall.reset(),q.physicalRecorder.setRecordingTempVariable(!1),q.island.setIsFromStreaming(!1))};return n={upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3},"new"===r.getApiMode(_)&&(n.path="/api/ws"),x.current=t.io("https://"+C,n),q.websocket.update({socket:x.current}),x.current.on("connect",(function(){console.debug("Socket connected sid: ".concat(x.current.id)),a.eventDispatch("phone-island-socket-connected",{})})),x.current.on("disconnect",(function(e){console.debug("Socket disconnect - reason: ".concat(e)),I.current&&(clearInterval(I.current),I.current=null),e.includes("server disconnect")?a.eventDispatch("phone-island-server-disconnected",{}):a.eventDispatch("phone-island-socket-disconnected",{})})),x.current.io.on("error",(function(e){console.debug("Socket error: ",e)})),x.current.on("connect_error",(function(e){console.debug("Socket connect_error: ",e)})),x.current.io.on("reconnect",(function(e){O.current=0,a.eventDispatch("phone-island-socket-reconnected",{}),console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(x.current.id,")"))})),x.current.io.on("reconnect_attempt",(function(e){console.debug("Socket reconnect_attempt ".concat(e))})),x.current.io.on("reconnect_error",(function(e){console.debug("Socket reconnect_error: ",e)})),x.current.io.on("reconnect_failed",(function(){console.debug("Socket reconnect_failed")})),x.current.on("connect",(function(){console.debug("Socket on: "+C+" is connected!"),x.current.emit("login",{accessKeyId:"".concat(_),token:N,uaType:j})})),x.current.on("authe_ok",(function(){console.debug("Socket authentication success!"),a.eventDispatch("phone-island-socket-authorized",{}),I.current&&clearInterval(I.current),I.current=setInterval((function(){x.current.volatile.emit("ping",u.withTimeout((function(){O.current=0,setTimeout((function(){q.alerts.removeAlert("socket_down"),a.eventDispatch("phone-island-alert-removed",{type:"socket_down"}),a.eventDispatch("phone-island-socket-disconnected-popup-close",{})}),0)}),(function(){O.current++,console.debug("Socket ping timeout (".concat(O.current,"/").concat(3,"), connected: ").concat(x.current.connected)),setTimeout((function(){var e,n,t=x.current.connected&&O.current>=3;if(!x.current.connected||t){var r=l.store.getState().webrtc.sipcall,i=l.store.getState().currentCall,o=i.accepted,c=i.outgoing,s=null===(n=null===(e=null==r?void 0:r.webrtcStuff)||void 0===e?void 0:e.pc)||void 0===n?void 0:n.iceConnectionState;if((o||c)&&("connected"===s||"completed"===s))return void console.debug("Socket unreachable but active call with ICE connected - skipping socket_down alert",{iceState:s,accepted:o,outgoing:c,isStaleConnection:t,timestamp:(new Date).toISOString()});t&&(console.warn("Stale socket connection detected - forcing reconnection"),x.current.disconnect()),q.alerts.setAlert("socket_down"),a.eventDispatch("phone-island-socket-disconnected-popup-open",{}),console.error("Socket is unreachable!")}}),0)}),5e3))}),5e3)})),x.current.on("userMainPresenceUpdate",(function(n){l.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),g.dispatchMainPresence(n)})),x.current.on("extenHangup",(function(e){var n,t,r=l.store.getState().currentUser,i=r.endpoints,o=r.username,s=l.store.getState().conference,u=s.isActive,d=s.conferenceStartedFrom,p=l.store.getState().island,v=p.view,m=p.previewCallFromMobileOrNethlink,g=((null==i?void 0:i.extension)||[]).find((function(n){return n.id===e.callerNum})),f=null==g?void 0:g.type,h=l.store.getState().currentUser.conversations,S=void 0,k=!1;if(e.callerNum&&h[e.callerNum]){var b=h[e.callerNum],y=Object.keys(b);if(y.length>0){for(var w=null,C=0,_=y;C<_.length;C++){var N=_[C],T=null==b?void 0:b[N];if(T)if(w){var D=!!w.connected,U=!!T.connected;if(!U||D){var j=null!==(n=w.startTime)&&void 0!==n?n:0,q=null!==(t=T.startTime)&&void 0!==t?t:0;U===D&&q>j&&(w=T)}else w=T}else w=T}S=null==w?void 0:w.linkedId,k=(null==w?void 0:w.connected)||!1}}if(S&&k&&a.eventDispatch("phone-island-summary-call-check",{linkedid:S}),"normal_clearing"===e.cause&&("physical"===f||"mobile"===f)||"normal_clearing"===e.cause&&("webrtc"===f||"nethlink"===f)&&m||"user_busy"===(null==e?void 0:e.cause)||"not_defined"===(null==e?void 0:e.cause)||"call_rejected"===(null==e?void 0:e.cause)||"interworking"===(null==e?void 0:e.cause)?(setTimeout((function(){l.store.dispatch.island.toggleAvoidToShow(!1),l.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!1)}),500),u&&d!==o&&l.store.dispatch.conference.resetConference()):"normal_circuit_congestion"===(null==e?void 0:e.cause)&&u&&d===o?setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800):"normal_clearing"!==e.cause&&"user_busy"!==(null==e?void 0:e.cause)&&"not_defined"!==(null==e?void 0:e.cause)&&"call_rejected"!==(null==e?void 0:e.cause)||"webrtc"!==f&&"nethlink"!==f||!u||d===o||l.store.dispatch.conference.resetConference(),("normal_clearing"===e.cause&&("webrtc"===f||"nethlink"===f)||"call_rejected"===(null==e?void 0:e.cause))&&u&&d===o){var I=l.store.getState().conference,x=I.usersList,E=I.pendingUsers,O=x&&Object.keys(x).length>0,F=E&&Object.keys(E).length>0;O||F?setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800):l.store.dispatch.conference.resetConference()}if("interworking"===(null==e?void 0:e.cause)&&u&&d===o&&"waitingConference"!==v&&setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800),"user_busy"===(null==e?void 0:e.cause)){var P=l.store.getState().currentUser,A=P.endpoints,V=P.username,R=((null==A?void 0:A.extension)||[]).map((function(e){return e.id})),M=l.store.getState().currentCall,L=M.incoming;M.outgoing;var B=l.store.getState().conference,Q=B.isActive,H=B.conferenceStartedFrom;L&&R.includes(e.callerNum)||(l.store.dispatch.island.setOperatorBusyActive({callerNumber:e.callerNum||"Unknown"}),setTimeout((function(){l.store.dispatch.player.stopAudioPlayer()}),4e3),setTimeout((function(){l.store.dispatch.player.updateStartAudioPlayer({src:c.default,loop:!0}),l.store.dispatch.island.setIslandView("operatorBusy")}),600),Q&&H===V&&setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),4e3))}if("subscriber_absent"===(null==e?void 0:e.cause)){var z=l.store.getState().conference,J=z.isActive,K=z.conferenceStartedFrom,W=l.store.getState().currentUser.username;if(J&&K===W){var G=l.store.getState().conference;x=G.usersList,E=G.pendingUsers,O=x&&Object.keys(x).length>0,F=E&&Object.keys(E).length>0,O||F?(setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800),E&&E[e.callerNum]&&l.store.dispatch.conference.removePendingUser(e.callerNum)):l.store.dispatch.conference.resetConference()}}})),x.current.on("extenConnected",(function(e){var n=l.store.getState().currentUser,t=n.default_device,r=n.endpoints,i=((null==r?void 0:r.extension)||[]).find((function(n){return n.id===e.extenConnected})),o=null==i?void 0:i.type;(("webrtc"===(null==t?void 0:t.type)||"nethlink"===(null==t?void 0:t.type))&&o&&("mobile"===o||"physical"===o)||"physical"===(null==t?void 0:t.type)&&o&&"physical"!==o)&&(l.store.dispatch.island.toggleAvoidToShow(!0),l.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!0),a.eventDispatch("phone-island-call-answered",{extensionType:o}))})),x.current.on("extenUpdate",(function(e){var n,t;q.users.updateExtension(e);var r=l.store.getState().users.extensions,i={},o=l.store.getState().currentUser;for(var c in r){var s=r[c].username,a=r[c].exten;i[s]||(i[s]=[]),i[s].push(a)}var u=i[e.username],d=e.conversations[Object.keys(e.conversations)[0]]||{},p=!1;if((null==e?void 0:e.username)===_&&!v.isEmpty(d)&&(null==d?void 0:d.owner)){var m=null===(t=null===(n=null==o?void 0:o.endpoints)||void 0===n?void 0:n.extension)||void 0===t?void 0:t.find((function(e){return e.id===d.owner}));m&&"mobile"===m.type&&(p=!0)}if(g.dispatchExtensions(e),v.isEmpty(d)){var f=null==u?void 0:u.some((function(e){var n,t=null===(n=r[e])||void 0===n?void 0:n.conversations;return!v.isEmpty(t)}));f||g.dispatchConversations(e)}else p||g.dispatchConversations(e);p&&"busy"===(null==e?void 0:e.status)&&(null==e?void 0:e.username)===_&&(l.store.dispatch.island.toggleAvoidToShow(!0),l.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!0)),e.username===_&&(b(e,d),q.currentUser.updateConversations(e))})),x.current.on("queueUpdate",(function(e){g.dispatchQueueUpdate(e)})),x.current.on("queueMemberUpdate",(function(e){g.dispatchQueueMemberUpdate(e)})),x.current.on("takeOver",(function(){g.dispatchAlreadyLogin()})),x.current.on("serverReloaded",(function(){g.dispatchServerReload()})),x.current.on("parkingUpdate",(function(e){g.dispatchParkingUpdate(e)})),x.current.on("actionNethLink",(function(e,n){g.dispatchUrlCall(e,n)})),x.current.on("satellite/summary",(function(e){(null==e?void 0:e.uniqueid)&&a.eventDispatch("phone-island-summary-ready",{linkedid:null==e?void 0:e.uniqueid})})),x.current.on("message",(function(e){switch(e.message){case"screenSharingStart":q.island.toggleSideViewVisible(!1),q.island.toggleTranscriptionViewVisible(!1),q.island.setIslandView("video"),q.screenShare.update({isJoiningScreenShare:!0,room:e.roomId});break;case"screenSharingStop":q.island.toggleSideViewVisible(!1),q.island.toggleTranscriptionViewVisible(!1),q.island.setIslandView("video"),q.screenShare.update({isLeavingScreenShare:!0});break;default:console.warn("Socket: unknown message type ",e.message)}})),x.current.on("updateDefaultDevice",(function(n){g.dispatchDefaultDeviceUpdate(n);var t=l.store.getState().users.extensions,r=l.store.getState().currentUser.endpoints;if(t&&r){var i=Object.values(t).filter((function(e){return(null==e?void 0:e.exten)===n}));if(0!==i.length){var o=i[0],c=r.extension.find((function(e){return e.id===o.exten}));c&&(o=e.__assign(e.__assign({},o),{type:c.type})),l.store.dispatch.currentUser.updateCurrentDefaultDevice(o),d.checkMediaPermissions()}}})),x.current.on("confBridgeUpdate",(function(n){if(n&&(null==n?void 0:n.users)){var t=null==n?void 0:n.id,r=null==n?void 0:n.users,i=l.store.getState().conference.usersList,o=e.__assign({},r);i&&Object.keys(o).forEach((function(n){i[n]&&(o[n]=e.__assign(e.__assign({},o[n]),{muted:i[n].muted}))})),l.store.dispatch.conference.updateConferenceUsersList(o),l.store.dispatch.conference.updateConferenceId(t)}})),x.current.on("confBridgeEnd",(function(e){e&&(null==e?void 0:e.id)&&(l.store.dispatch.conference.resetConference(),a.eventDispatch("phone-island-conference-finished",{}))})),x.current.on("callWebrtc",(function(e){a.eventDispatch("phone-island-call-start",{number:e})})),x.current.on("newVoiceMessageCounter",(function(e){a.eventDispatch("phone-island-voicemail-received",{voicemailInfo:e})})),x.current.on("streamingSourceUpdate",(function(e){a.eventDispatch("phone-island-streaming-information-received",{res:e});var n=e.streaming||e.res&&e.res.streaming;if(n){var t=n.source,r=n.image;if(t&&r){l.store.getState().island.isFromStreaming;var i=l.store.getState().currentCall.streamingSourceNumber;m.getStreamingSourceId(i),q.streaming.updateSourceImage({source:t,image:r})}}})),x.current.on("satellite/transcription",(function(e){a.eventDispatch("phone-island-conversation-transcription",e)})),function(){clearInterval(I.current),x.current.close()}}),[C,_,N,j,q]),n.useEffect((function(){var e;if(T){console.info("Socket reload requested");var n=l.store.getState().alerts.data,t=l.store.getState().island.forceReload;(null===(e=n.socket_down)||void 0===e?void 0:e.active)||!1||t?(console.info(t?"Force reload requested, performing Socket reconnection":"Socket down detected (alert active), performing reconnection"),t&&l.store.dispatch.island.setForceReload(!1),I.current&&(clearInterval(I.current),I.current=null),setTimeout((function(){x.current.disconnect(),x.current.connect(),D()}),100)):(console.info("Socket already connected (no alert active), skipping reconnection"),D())}}),[T]),w.default.createElement(w.default.Fragment,null,U)};
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),n=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),r=require("./RestAPI.js"),i=require("../lib/phone/conversation.js"),o=require("../services/user.js"),c=require("../static/busy_ringtone.js"),s=require("../utils/customHooks/useEventListener.js"),a=require("../utils/genericFunctions/eventDispatch.js"),u=require("../utils/genericFunctions/withTimeout.js"),l=require("../store/index.js");require("../lib/webrtc/janus.js"),require("../node_modules/webrtc-adapter/src/js/adapter_core.js");var d=require("../lib/devices/devices.js"),p=require("../lib/user/default_device.js"),v=require("../utils/genericFunctions/isEmpty.js"),m=require("../utils/streaming/getStreamingSourceId.js"),f=require("../events/SocketEvents.js"),g=require("../utils/genericFunctions/timestamp.js"),h=require("../lib/user/extensions.js"),y=require("../utils/streaming/isFromStreaming.js"),S=require("../lib/phone/trunk.js"),b=require("../node_modules/react-redux/es/hooks/useDispatch.js");function k(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var w=k(n);exports.Socket=function(k){var _=k.hostName,C=k.username,N=k.authToken,T=k.reload,D=k.reloadedCallback,x=k.children,U=k.uaType,j=k.preferredSummaryExtensionType,q=b.useDispatch(),I=n.useRef(),E=n.useRef(),O=n.useRef(!1),F=n.useRef(0);s.useEventListener("phone-island-start-transcription",(function(e){if(E.current){var n=(null==e?void 0:e.linkedid)||(null==e?void 0:e.uniqueid)||null;if(!n)return;E.current.emit("start_transcription",{linkedid:n,uniqueid:(null==e?void 0:e.uniqueid)||n})}})),s.useEventListener("phone-island-stop-transcription",(function(e){if(E.current){var n=(null==e?void 0:e.linkedid)||(null==e?void 0:e.uniqueid)||null;if(!n)return;E.current.emit("stop_transcription",{linkedid:n,uniqueid:(null==e?void 0:e.uniqueid)||n})}}));return n.useEffect((function(){var n,s=function(e){if(e.counterpartNum&&y.isFromStreaming(e.counterpartNum)){q.island.setIsFromStreaming(!0),q.currentCall.updateCurrentCall({streamingSourceNumber:e.counterpartNum});var n=m.getStreamingSourceId(e.counterpartNum);n&&o.subscribe({id:n}).catch((function(e){return console.error("Error subscribing to streaming source:",e)}))}},b=function(n,t){var r=l.store.getState().currentCall,c=r.transferring,u=r.transferSwitching,d=r.transferCalls,v=l.store.getState().island.view;if(Object.keys(t).length>0){if(n.status){var m=l.store.getState().users.extensions,f=l.store.getState().currentUser.default_device,y=l.store.getState().currentUser,b=y.endpoints,k=y.username,w=l.store.getState().currentCall;w.incoming,w.outgoing;var _=function(){if(!m||!k)return!1;var e=Object.values(m).filter((function(e){return(null==e?void 0:e.username)===k}));return null==e?void 0:e.some((function(e){var n=null==b?void 0:b.extension.find((function(n){return n.id===(null==e?void 0:e.exten)}));return"nethlink"===(null==n?void 0:n.type)&&"offline"!==(null==e?void 0:e.status)}))};switch(n.status){case"ringing":s(t),("mobile"===U&&_()||"desktop"===U&&("webrtc"===(null==f?void 0:f.type)||void 0===(null==f?void 0:f.type)&&!_()||!_()&&"physical"===(null==f?void 0:f.type)))&&(q.currentCall.checkIncomingUpdatePlay({conversationId:t.id,displayName:i.getDisplayName(t),number:"".concat(t.counterpartNum),incomingSocket:!0,incoming:!0,username:"".concat(m&&m[t.counterpartNum]&&m[t.counterpartNum].username)||"",ownerExtension:t.owner}),l.store.dispatch.island.setIslandView("call")),O.current||(O.current=!0,o.getCurrentUserInfo().then((function(n){n&&(q.currentUser.updateCurrentUser(n),a.eventDispatch("phone-island-user-informations-update",e.__assign({},n)),n.settings&&n.settings.open_param_url?q.paramUrl.setOpenParamUrlType(n.settings.open_param_url):q.paramUrl.setOpenParamUrlType("never"))})).catch((function(e){console.error("Error getting current user info:",e)})).finally((function(){setTimeout((function(){O.current=!1}),100)})));var C=l.store.getState().paramUrl.openParamUrlType,N=l.store.getState().island.urlOpened;if("ringing"===C&&!N){var T=S.isFromTrunk(t.counterpartNum);l.store.dispatch.paramUrl.setThroughTrunk(T),l.store.dispatch.island.setUrlOpened(!1),a.eventDispatch("phone-island-url-parameter-opened",{counterpartNum:t.counterpartNum,counterpartName:i.getDisplayName(t),owner:t.owner,uniqueId:t.uniqueId,linkedId:t.linkedId,throughQueue:t.throughQueue,throughTrunk:T,direction:t.direction,connected:t.connected})}break;case"busy":if(s(t),"mobile"===U&&_()||"desktop"===U&&("webrtc"===(null==f?void 0:f.type)||void 0===(null==f?void 0:f.type)&&!_()||!_()&&"physical"===(null==f?void 0:f.type))){if(t&&t.connected)q.currentCall.updateCurrentCall({conversationId:t.id,displayName:i.getDisplayName(t),number:"".concat(t.counterpartNum),ownerExtension:t.owner,username:"".concat(m&&m[t.counterpartNum]&&m[t.counterpartNum].username)||"",chDest:(null==t?void 0:t.chDest)||{},chSource:(null==t?void 0:t.chSource)||{}}),q.currentCall.checkAcceptedUpdate({acceptedSocket:!0}),q.currentCall.addTransferCalls({type:"transferred",displayName:i.getDisplayName(t),number:"".concat(t.counterpartNum),startTime:"".concat(g.getTimestampInSeconds())}),l.store.getState().island.isFromStreaming&&"out"===t.direction&&setTimeout((function(){q.island.setIslandView("streamingAnswer")}),200),p.isPhysical()&&function(e){q.currentCall.updateCurrentCall({conversationId:e.id,accepted:!0,incoming:"in"!==e.direction&&void 0}),a.eventDispatch("phone-island-call-answered",{}),l.store.dispatch.player.stopAudioPlayer(),l.store.dispatch.player.setAudioPlayerLoop(!1)}(t),"call"===v&&c&&q.currentCall.updateCurrentCall({transferring:!1});if(d.length>1)q.currentCall.deleteTransferCalls();else if(t&&!t.connected){if(c&&!u){var D=d.find((function(e){return e.number===t.counterpartNum}));!t.connected&&D&&(q.currentCall.updateCurrentCall({transferring:!1}),a.eventDispatch("phone-island-call-transfer-failed",{}),q.currentCall.updateTransferSwitching(!1))}"REC"===(null==t?void 0:t.counterpartName)&&q.physicalRecorder.setRecordingTempVariable(!0)}t&&!t.connected&&"out"===t.direction&&q.currentCall.checkOutgoingUpdate({outgoingSocket:!0,outgoing:"REC"!==(null==t?void 0:t.counterpartName),displayName:i.getDisplayName(t),number:"".concat(null==t?void 0:t.counterpartNum),username:"".concat(m&&m[null==t?void 0:t.counterpartNum]&&m[null==t?void 0:t.counterpartNum].username)||""})}break;case"onhold":var x=t.counterpartName,j=t.counterpartNum,I=t.startTime;c&&j&&x&&"<unknown>"!==x&&(q.currentCall.addTransferCalls({type:"destination",displayName:i.getDisplayName(t),number:j,startTime:"".concat(g.getTimestampInSeconds())}),q.currentCall.updateCurrentCall({displayName:i.getDisplayName(t),number:j,startTime:"".concat(I/1e3),conversationId:t.id}),q.island.setIslandView("call"));break;case"busy_ringing":a.eventDispatch("phone-island-call-ringing",{})}}}else"online"==n.status&&h.userTotallyFree()&&(q.player.stopAudioPlayer(),q.currentCall.reset(),q.physicalRecorder.setRecordingTempVariable(!1),q.island.setIsFromStreaming(!1))};return n={upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3},"new"===r.getApiMode(C)&&(n.path="/api/ws"),E.current=t.io("https://"+_,n),q.websocket.update({socket:E.current}),E.current.on("connect",(function(){console.debug("Socket connected sid: ".concat(E.current.id)),a.eventDispatch("phone-island-socket-connected",{})})),E.current.on("disconnect",(function(e){console.debug("Socket disconnect - reason: ".concat(e)),I.current&&(clearInterval(I.current),I.current=null),e.includes("server disconnect")?a.eventDispatch("phone-island-server-disconnected",{}):a.eventDispatch("phone-island-socket-disconnected",{})})),E.current.io.on("error",(function(e){console.debug("Socket error: ",e)})),E.current.on("connect_error",(function(e){console.debug("Socket connect_error: ",e)})),E.current.io.on("reconnect",(function(e){F.current=0,a.eventDispatch("phone-island-socket-reconnected",{}),console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(E.current.id,")"))})),E.current.io.on("reconnect_attempt",(function(e){console.debug("Socket reconnect_attempt ".concat(e))})),E.current.io.on("reconnect_error",(function(e){console.debug("Socket reconnect_error: ",e)})),E.current.io.on("reconnect_failed",(function(){console.debug("Socket reconnect_failed")})),E.current.on("connect",(function(){console.debug("Socket on: "+_+" is connected!"),E.current.emit("login",{accessKeyId:"".concat(C),token:N,uaType:U})})),E.current.on("authe_ok",(function(){console.debug("Socket authentication success!"),a.eventDispatch("phone-island-socket-authorized",{}),I.current&&clearInterval(I.current),I.current=setInterval((function(){E.current.volatile.emit("ping",u.withTimeout((function(){F.current=0,setTimeout((function(){q.alerts.removeAlert("socket_down"),a.eventDispatch("phone-island-alert-removed",{type:"socket_down"}),a.eventDispatch("phone-island-socket-disconnected-popup-close",{})}),0)}),(function(){F.current++,console.debug("Socket ping timeout (".concat(F.current,"/").concat(3,"), connected: ").concat(E.current.connected)),setTimeout((function(){var e,n,t=E.current.connected&&F.current>=3;if(!E.current.connected||t){var r=l.store.getState().webrtc.sipcall,i=l.store.getState().currentCall,o=i.accepted,c=i.outgoing,s=null===(n=null===(e=null==r?void 0:r.webrtcStuff)||void 0===e?void 0:e.pc)||void 0===n?void 0:n.iceConnectionState;if((o||c)&&("connected"===s||"completed"===s))return void console.debug("Socket unreachable but active call with ICE connected - skipping socket_down alert",{iceState:s,accepted:o,outgoing:c,isStaleConnection:t,timestamp:(new Date).toISOString()});t&&(console.warn("Stale socket connection detected - forcing reconnection"),E.current.disconnect()),q.alerts.setAlert("socket_down"),a.eventDispatch("phone-island-socket-disconnected-popup-open",{}),console.error("Socket is unreachable!")}}),0)}),5e3))}),5e3)})),E.current.on("userMainPresenceUpdate",(function(n){l.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),f.dispatchMainPresence(n)})),E.current.on("extenHangup",(function(n){return e.__awaiter(void 0,void 0,void 0,(function(){var t,r,i,s,u,d,p,v,m,f,g,h,y,S,b,k,w,_,N,T,D,x,U,q,I,E,O,F,P,A,V,R,M,L,B,Q,H,z,J,K,W,G,X,Y,Z,$,ee,ne,te,re,ie,oe,ce,se;return e.__generator(this,(function(e){switch(e.label){case 0:if(t=l.store.getState().currentUser,r=t.endpoints,i=t.default_device,s=(null==r?void 0:r.extension)||[],u=s.find((function(e){return e.id===n.callerNum}))||s.find((function(e){return e.id===n.channelExten})),d=l.store.getState().currentUser.conversations,p=function(e){return!!e&&Object.keys((null==d?void 0:d[e])||{}).length>0},v=null==n?void 0:n.callerNum,m=null==u?void 0:u.type,(null==n?void 0:n.channelExten)&&p(n.channelExten)&&!p(v)&&(v=n.channelExten,u=s.find((function(e){return e.id===n.channelExten}))||u,m=(null==u?void 0:u.type)||m),!(null==n?void 0:n.callerNum)||u&&p(v))return[3,4];if(!(f=j||(null==u?void 0:u.type)||(null===(oe=s.find((function(e){return e.id===(null==n?void 0:n.channelExten)})))||void 0===oe?void 0:oe.type)||(null==i?void 0:i.type)))return[3,4];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,o.getExtensionByMainExtensionAndType(n.callerNum,f)];case 2:return(null==(g=e.sent())?void 0:g.extension)&&(h=s.find((function(e){return e.id===g.extension})),u=h||u,m=(null==h?void 0:h.type)||f,v=g.extension),[3,4];case 3:return e.sent(),[3,4];case 4:if(y=void 0,S=!1,v&&d[v]&&(b=d[v],(k=Object.keys(b)).length>0)){for(w=null,_=0,N=k;_<N.length;_++)T=N[_],(D=null==b?void 0:b[T])&&(w?(x=!!w.connected,!(U=!!D.connected)||x?(q=null!==(ce=w.startTime)&&void 0!==ce?ce:0,I=null!==(se=D.startTime)&&void 0!==se?se:0,U===x&&I>q&&(w=D)):w=D):w=D);y=null==w?void 0:w.linkedId,S=(null==w?void 0:w.connected)||!1}return y&&S&&a.eventDispatch("phone-island-summary-call-check",{linkedid:y}),E=l.store.getState().conference,O=E.isActive,F=E.conferenceStartedFrom,P=l.store.getState().island,A=P.previewCallFromMobileOrNethlink,V=P.view,"normal_clearing"===n.cause&&("physical"===m||"mobile"===m)||"normal_clearing"===n.cause&&("webrtc"===m||"nethlink"===m)&&A||"user_busy"===(null==n?void 0:n.cause)||"not_defined"===(null==n?void 0:n.cause)||"call_rejected"===(null==n?void 0:n.cause)||"interworking"===(null==n?void 0:n.cause)?(setTimeout((function(){l.store.dispatch.island.toggleAvoidToShow(!1),l.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!1)}),500),O&&F!==C&&l.store.dispatch.conference.resetConference()):"normal_circuit_congestion"===(null==n?void 0:n.cause)&&O&&F===C?setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800):"normal_clearing"!==n.cause&&"user_busy"!==(null==n?void 0:n.cause)&&"not_defined"!==(null==n?void 0:n.cause)&&"call_rejected"!==(null==n?void 0:n.cause)||"webrtc"!==m&&"nethlink"!==m||!O||F===C||l.store.dispatch.conference.resetConference(),("normal_clearing"!==n.cause||"webrtc"!==m&&"nethlink"!==m)&&"call_rejected"!==(null==n?void 0:n.cause)||!O||F!==C||(R=l.store.getState().conference,ne=R.usersList,te=R.pendingUsers,re=ne&&Object.keys(ne).length>0,ie=te&&Object.keys(te).length>0,re||ie?setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800):l.store.dispatch.conference.resetConference()),"interworking"===(null==n?void 0:n.cause)&&O&&F===C&&"waitingConference"!==V&&setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800),"user_busy"===(null==n?void 0:n.cause)&&(M=l.store.getState().currentUser,L=M.endpoints,B=M.username,Q=(null==L?void 0:L.extension)||[],H=Q.map((function(e){return e.id})),z=l.store.getState().currentCall,J=z.incoming,z.outgoing,K=l.store.getState().conference,W=K.isActive,G=K.conferenceStartedFrom,J&&H.includes(n.callerNum)||(l.store.dispatch.island.setOperatorBusyActive({callerNumber:n.callerNum||"Unknown"}),setTimeout((function(){l.store.dispatch.player.stopAudioPlayer()}),4e3),setTimeout((function(){l.store.dispatch.player.updateStartAudioPlayer({src:c.default,loop:!0}),l.store.dispatch.island.setIslandView("operatorBusy")}),600),W&&G===B&&setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),4e3))),"subscriber_absent"===(null==n?void 0:n.cause)&&(X=l.store.getState().conference,Y=X.isActive,Z=X.conferenceStartedFrom,$=l.store.getState().currentUser.username,Y&&Z===$&&(ee=l.store.getState().conference,ne=ee.usersList,te=ee.pendingUsers,re=ne&&Object.keys(ne).length>0,ie=te&&Object.keys(te).length>0,re||ie?(setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800),te&&te[n.callerNum]&&l.store.dispatch.conference.removePendingUser(n.callerNum)):l.store.dispatch.conference.resetConference())),[2]}}))}))})),E.current.on("extenConnected",(function(e){var n=l.store.getState().currentUser,t=n.default_device,r=n.endpoints,i=((null==r?void 0:r.extension)||[]).find((function(n){return n.id===e.extenConnected})),o=null==i?void 0:i.type;(("webrtc"===(null==t?void 0:t.type)||"nethlink"===(null==t?void 0:t.type))&&o&&("mobile"===o||"physical"===o)||"physical"===(null==t?void 0:t.type)&&o&&"physical"!==o)&&(l.store.dispatch.island.toggleAvoidToShow(!0),l.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!0),a.eventDispatch("phone-island-call-answered",{extensionType:o}))})),E.current.on("extenUpdate",(function(e){var n,t;q.users.updateExtension(e);var r=l.store.getState().users.extensions,i={},o=l.store.getState().currentUser;for(var c in r){var s=r[c].username,a=r[c].exten;i[s]||(i[s]=[]),i[s].push(a)}var u=i[e.username],d=e.conversations[Object.keys(e.conversations)[0]]||{},p=!1;if((null==e?void 0:e.username)===C&&!v.isEmpty(d)&&(null==d?void 0:d.owner)){var m=null===(t=null===(n=null==o?void 0:o.endpoints)||void 0===n?void 0:n.extension)||void 0===t?void 0:t.find((function(e){return e.id===d.owner}));m&&"mobile"===m.type&&(p=!0)}if(f.dispatchExtensions(e),v.isEmpty(d)){var g=null==u?void 0:u.some((function(e){var n,t=null===(n=r[e])||void 0===n?void 0:n.conversations;return!v.isEmpty(t)}));g||f.dispatchConversations(e)}else p||f.dispatchConversations(e);p&&"busy"===(null==e?void 0:e.status)&&(null==e?void 0:e.username)===C&&(l.store.dispatch.island.toggleAvoidToShow(!0),l.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!0)),e.username===C&&(b(e,d),q.currentUser.updateConversations(e))})),E.current.on("queueUpdate",(function(e){f.dispatchQueueUpdate(e)})),E.current.on("queueMemberUpdate",(function(e){f.dispatchQueueMemberUpdate(e)})),E.current.on("takeOver",(function(){f.dispatchAlreadyLogin()})),E.current.on("serverReloaded",(function(){f.dispatchServerReload()})),E.current.on("parkingUpdate",(function(e){f.dispatchParkingUpdate(e)})),E.current.on("actionNethLink",(function(e,n){f.dispatchUrlCall(e,n)})),E.current.on("satellite/summary",(function(e){(null==e?void 0:e.uniqueid)&&a.eventDispatch("phone-island-summary-ready",{linkedid:null==e?void 0:e.uniqueid,display_name:null==e?void 0:e.display_name,display_number:null==e?void 0:e.display_number})})),E.current.on("message",(function(e){switch(e.message){case"screenSharingStart":q.island.toggleSideViewVisible(!1),q.island.toggleTranscriptionViewVisible(!1),q.island.setIslandView("video"),q.screenShare.update({isJoiningScreenShare:!0,room:e.roomId});break;case"screenSharingStop":q.island.toggleSideViewVisible(!1),q.island.toggleTranscriptionViewVisible(!1),q.island.setIslandView("video"),q.screenShare.update({isLeavingScreenShare:!0});break;default:console.warn("Socket: unknown message type ",e.message)}})),E.current.on("updateDefaultDevice",(function(n){f.dispatchDefaultDeviceUpdate(n);var t=l.store.getState().users.extensions,r=l.store.getState().currentUser.endpoints;if(t&&r){var i=Object.values(t).filter((function(e){return(null==e?void 0:e.exten)===n}));if(0!==i.length){var o=i[0],c=r.extension.find((function(e){return e.id===o.exten}));c&&(o=e.__assign(e.__assign({},o),{type:c.type})),l.store.dispatch.currentUser.updateCurrentDefaultDevice(o),d.checkMediaPermissions()}}})),E.current.on("confBridgeUpdate",(function(n){if(n&&(null==n?void 0:n.users)){var t=null==n?void 0:n.id,r=null==n?void 0:n.users,i=l.store.getState().conference.usersList,o=e.__assign({},r);i&&Object.keys(o).forEach((function(n){i[n]&&(o[n]=e.__assign(e.__assign({},o[n]),{muted:i[n].muted}))})),l.store.dispatch.conference.updateConferenceUsersList(o),l.store.dispatch.conference.updateConferenceId(t)}})),E.current.on("confBridgeEnd",(function(e){e&&(null==e?void 0:e.id)&&(l.store.dispatch.conference.resetConference(),a.eventDispatch("phone-island-conference-finished",{}))})),E.current.on("callWebrtc",(function(e){a.eventDispatch("phone-island-call-start",{number:e})})),E.current.on("newVoiceMessageCounter",(function(e){a.eventDispatch("phone-island-voicemail-received",{voicemailInfo:e})})),E.current.on("streamingSourceUpdate",(function(e){a.eventDispatch("phone-island-streaming-information-received",{res:e});var n=e.streaming||e.res&&e.res.streaming;if(n){var t=n.source,r=n.image;if(t&&r){l.store.getState().island.isFromStreaming;var i=l.store.getState().currentCall.streamingSourceNumber;m.getStreamingSourceId(i),q.streaming.updateSourceImage({source:t,image:r})}}})),E.current.on("satellite/transcription",(function(e){a.eventDispatch("phone-island-conversation-transcription",e)})),function(){clearInterval(I.current),E.current.close()}}),[_,C,N,U,q]),n.useEffect((function(){var e;if(T){console.info("Socket reload requested");var n=l.store.getState().alerts.data,t=l.store.getState().island.forceReload;(null===(e=n.socket_down)||void 0===e?void 0:e.active)||!1||t?(console.info(t?"Force reload requested, performing Socket reconnection":"Socket down detected (alert active), performing reconnection"),t&&l.store.dispatch.island.setForceReload(!1),I.current&&(clearInterval(I.current),I.current=null),setTimeout((function(){E.current.disconnect(),E.current.connect(),D()}),100)):(console.info("Socket already connected (no alert active), skipping reconnection"),D())}}),[T]),w.default.createElement(w.default.Fragment,null,x)};
|
|
2
2
|
//# sourceMappingURL=Socket.js.map
|