@nethesis/phone-island 0.18.13 → 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.
Files changed (34) hide show
  1. package/dist/App.js +1 -1
  2. package/dist/App.js.map +1 -1
  3. package/dist/_virtual/index6.js +1 -1
  4. package/dist/_virtual/index8.js +1 -1
  5. package/dist/components/AudioPlayerView/index.js +1 -1
  6. package/dist/components/AudioPlayerView/index.js.map +1 -1
  7. package/dist/components/CallView/Number.js +1 -1
  8. package/dist/components/CallView/Number.js.map +1 -1
  9. package/dist/components/CallView/Timer.js +1 -1
  10. package/dist/components/CallView/Timer.js.map +1 -1
  11. package/dist/components/IslandDrag.js +1 -1
  12. package/dist/components/IslandDrag.js.map +1 -1
  13. package/dist/components/RecorderView/index.js +1 -1
  14. package/dist/components/RecorderView/index.js.map +1 -1
  15. package/dist/components/SideView/hooks/useSideViewLogic.js +1 -1
  16. package/dist/components/SideView/hooks/useSideViewLogic.js.map +1 -1
  17. package/dist/components/Socket.js +1 -1
  18. package/dist/components/Socket.js.map +1 -1
  19. package/dist/components/TranscriptionView/TranscriptionView.js +1 -1
  20. package/dist/components/TranscriptionView/TranscriptionView.js.map +1 -1
  21. package/dist/components/WebRTC.js.map +1 -1
  22. package/dist/lib/devices/devices.js +1 -1
  23. package/dist/node_modules/@fortawesome/react-fontawesome/index.es.js +1 -1
  24. package/dist/node_modules/mic-check/lib/index.js +1 -1
  25. package/dist/node_modules/prop-types/index.js +1 -1
  26. package/dist/node_modules/prop-types/node_modules/react-is/index.js +1 -1
  27. package/dist/package.json.js +1 -1
  28. package/dist/services/user.js +1 -1
  29. package/dist/services/user.js.map +1 -1
  30. package/dist/styles/CustomRange.styles.js +1 -1
  31. package/dist/styles/CustomRange.styles.js.map +1 -1
  32. package/dist/styles/Island.styles.js +1 -1
  33. package/dist/styles/Island.styles.js.map +1 -1
  34. package/package.json +6 -5
@@ -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("../../styles/Island.styles.js"),r=require("../../node_modules/react-moment/dist/index.js"),a=require("../../lib/user/default_device.js"),i=require("../../node_modules/react-redux/es/hooks/useSelector.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=s(e);exports.default=function(e){var s=e.size,u=void 0===s?"large":s,l=e.startTime,d=e.isNotAlwaysWhite,o=e.isInsideConference,c=i.useSelector((function(e){return e.island})).isOpen;return n.default.createElement(n.default.Fragment,null,null!=l&&!a.isPhysical()&&n.default.createElement(t.StyledTimer,{isOpen:c,size:u},n.default.createElement(r.default,{date:Number(l),interval:1e3,format:"hh:mm:ss",trim:!1,unix:!0,durationFromNow:!0,className:"".concat(void 0!==d&&d?"pi-text-gray-950 dark:pi-text-gray-50":"pi-text-gray-50 dark:pi-text-gray-50"," ").concat(o?"pi-font-mono":"")})))};
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 { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\nimport { StyledTimer } from '../../styles/Island.styles'\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 // Get isOpen from the island store\n const { isOpen } = useSelector((state: RootState) => state.island)\n return (\n <>\n {startTime != null && !isPhysical() && (\n <StyledTimer isOpen={isOpen} size={size}>\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 </StyledTimer>\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","isOpen","useSelector","state","island","React","isPhysical","createElement","StyledTimer","Moment","date","Number","interval","format","trim","unix","durationFromNow","className","concat","undefined"],"mappings":"gdAU8B,SAACA,GAC7B,IAAAC,EAAAD,EAAAE,KAAAA,OAAO,IAAAD,EAAA,QAAOA,EACdE,EAASH,EAAAG,UACTC,EAAgBJ,EAAAI,iBAChBC,EAAkBL,EAAAK,mBAGVC,EAAWC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,iBAC3D,OACEC,EAAAA,8CACgB,MAAbP,IAAsBQ,EAAUA,cAC/BD,EAAAA,QAACE,cAAAC,EAAWA,aAACP,OAAQA,EAAQJ,KAAMA,GACjCQ,EAAAA,QAAAE,cAACE,UAAM,CACLC,KAAMC,OAAOb,GACbc,SAAU,IACVC,OAAO,WACPC,MAAM,EACNC,QACAC,iBAAe,EACfC,UAAW,GACTC,YAAqBC,IAArBpB,GAAkCA,EAC9B,wCACA,uCAAsC,KAAAmB,OACxClB,EAAqB,eAAiB,OAMtD"}
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 g=p(t),f=function(p){var f=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 g.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(){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"}),f&&f)};exports.IslandDrag=f,exports.default=f;
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","styleTransformValues","current","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,qBAwEF,IAAMC,EAAiBC,EAAAA,cA7CC,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,GAgCErC,GACA,WAAM,OAAAC,GAAS,KACf,CACEqC,sBAAsB,EACtBC,MAAO,MAIX,OACEC,EAAC,QAAAC,cAAAC,SAAOC,gBACNC,MAAI,EACJC,cAxEJ,SAAyBf,GACvB,IAAMC,EAASD,EAAMC,OAEnBA,EAAOC,QAAQ,mCACfD,EAAOE,aAAa,0BAKtB7B,EAASiB,MAAMS,EAChB,EA+DGgB,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,UAtDkB,WAEhB,IAAAhE,EAAgBiE,EAAAA,qBAAqB5C,EAAU6C,SAA7CnC,EAAC/B,EAAA+B,EAAEC,MAETD,EAAIoC,EAAAA,UAAUC,KAAKC,MAAMtC,GAAIV,EAAU6C,QAAShE,EAAmBgE,SACnElC,EAAIsC,EAAAA,UAAUF,KAAKC,MAAMrC,GAAIX,EAAU6C,QAAShE,EAAmBgE,SAEnE9C,EAAsB,CACpBI,SAAU,CACRO,EAACA,EACDC,EAACA,KAILP,EAAY,CACVM,EAACA,EACDC,EAACA,GAEL,EAqCIuC,IAAKlD,GACDgB,EACJ,CAAAmC,UAAU,gBAETvE,GAAYA,EAGnB"}
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");require("../../store/index.js");var 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"))};
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":"05CAuBMA,EAAY,kCAEiC,WACzC,IAAAC,EAAWC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,iBACnDC,EAAuBH,eAAY,SAACC,GAAqB,OAAAA,EAAMG,6BACjEC,EAAsBC,SAAuB,MAC7CC,EAAcD,SAA6B,MAC3CE,EAAcF,SAAmB,IAGjCG,EAAWC,EAAAA,cAGXC,EAAmBX,eAAY,SAACC,GAAqB,OAAAA,EAAMW,OAAOD,gBAAb,IAGrDE,EAAmCb,EAAAA,aACvC,SAACC,GAAqB,MAAC,CACrBa,UAAWb,EAAMc,SAASD,UAC1BE,SAAUf,EAAMc,SAASC,SACzBC,QAAShB,EAAMc,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,KAAM7B,oBAAnE8B,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,SAAUvC,IAEZS,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,qBAcd,OACEC,UACGC,cAAAD,EAAA,QAAAE,SAAA,KAAAjD,EACC+C,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACG,IACDF,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,oFACbH,UAAIC,cAAA,KAAA,CAAAE,UAAU,0CAA0CL,EAAE,0BAC1DE,EAAC,QAAAC,cAAAG,UACCC,QAAS,WAXnB1C,EAASP,OAAOkD,kBAWgB,EACtBC,QAAQ,wCACQ,yBAAwB,uBAClBT,EAAE,iBAAmB,IAE3CE,UAACC,cAAAO,EAAAA,gBAAgB,CAAAC,KAAMC,EAAAA,QAASP,UAAU,oBAG9CH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,WACbH,EAAAA,QAAAC,cAAA,MAAA,CACEE,UAAW,GAAAQ,QACR3C,GAAaG,GAAWd,EAAqB,UAAY,GACN,yDAEtD2C,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,mEACbH,EAAAA,QAACC,cAAAW,UAAQ,QAIbZ,UAAAC,cAAA,MAAA,CACEE,UAAW,qFACXU,IAAKtD,GAEJW,EACC8B,UAACC,cAAAa,EAAAA,SAAW,MACV9C,IAAcG,EAChB6B,UAAKC,cAAA,MAAA,CAAAE,UAAU,mFAEbH,UAACC,cAAAG,EAAMA,OAAC,CAAAG,QAAQ,cAAcQ,UAAQ,EAACZ,UAAU,wBAC/CH,UAACC,cAAAO,EAAAA,gBACC,CAAAC,KAAMO,EAAAA,OACNb,UAAU,0DAKdH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,gFAEZc,MAAMC,KAAK,CAAEC,OApIT,IAoIqCC,KAAI,SAACC,EAAGC,GAAM,OACtDtB,EAAAA,QAACC,cAAAsB,EAAAA,WACCC,IAAKF,EACLG,MAAOH,EACPI,eAAgB1D,EAChB2D,YAAa9D,GAEhB,KAIHmC,UAACC,cAAAG,EAAMA,OAAC,CAAAG,QAAQ,cAAcQ,UAAQ,EAACZ,UAAU,wBAC/CH,EAAC,QAAAC,cAAAO,EAAeA,iBACdC,KAAMmB,EAAAA,QACNzB,UAAU,2DAIdnC,GAAaG,EACf6B,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,mEACZL,EAAE,yCAGLE,EAAAA,6BAAKG,UAAU,mEACZL,EAAE,4CAMXE,EAAAA,QAAAC,cAAC4B,EAAAA,QAAU,OAGb7B,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,+BAA6B,YAIpD"}
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"),i=require("react");require("../../../node_modules/react-redux/es/index.js");var n=require("../../../store/index.js"),r=require("../../../utils/deviceUtils.js"),o=require("../../../lib/webrtc/janus.js"),u=require("../../../lib/phone/trunk.js"),t=require("../../../lib/devices/devices.js"),l=require("../../../utils/genericFunctions/eventDispatch.js"),s=require("../../../node_modules/react-redux/es/hooks/useDispatch.js"),a=require("../../../node_modules/react-redux/es/hooks/useSelector.js");exports.useSideViewLogic=function(d){var c,v,p,h,f,b,g,m,_=s.useDispatch(),S=a.useSelector((function(e){return e.currentUser})),j=a.useSelector((function(e){return e.users})),w=a.useSelector((function(e){return e.paramUrl})),k=n.store.select.mediaDevices.videoInputDevices(n.store.getState()),V=i.useRef(o.default),q=a.useSelector((function(e){return e.currentUser.conversations})),C=i.useState([]),D=C[0],T=C[1],U=i.useState(!0),y=U[0],I=U[1],x=i.useCallback((function(e){if(_.island.toggleSideViewVisible(!1),"openUrl"===e){var i=Object.values(q).find((function(e){return Object.keys(e).length>0})),n=i?Object.values(i)[0]:null;if((null==n?void 0:n.connected)&&"in"===(null==n?void 0:n.direction)){var r={counterpartNum:n.counterpartNum,counterpartName:n.counterpartName,owner:n.owner,uniqueId:n.uniqueId,linkedId:n.linkedId,throughQueue:n.throughQueue,throughTrunk:n.throughTrunk,direction:n.direction,connected:n.connected};l.eventDispatch("phone-island-url-parameter-opened",r)}}else null!==e&&_.island.setIslandView(e)}),[_.island,q]),O=i.useCallback((function(){return e.__awaiter(void 0,void 0,void 0,(function(){var i;return e.__generator(this,(function(e){switch(e.label){case 0:return k.length>0?[4,t.checkWebCamPermission()]:[3,2];case 1:return i=e.sent(),I(i),[2,i];case 2:return I(!1),[2,!1]}}))}))}),[k.length]),Q=i.useCallback((function(){return e.__awaiter(void 0,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return[4,O()];case 1:return e.sent()&&(x("video"),n.store.dispatch.currentCall.updateCurrentCall({isLocalVideoEnabled:!0,isStartingVideoCall:!0})),[2]}}))}))}),[O,x]),E=i.useCallback((function(){x("video"),n.store.dispatch.screenShare.update({isStartingScreenShare:!0})}),[x]),M=i.useMemo((function(){var e;return(null===(e=null==S?void 0:S.profile)||void 0===e?void 0:e.macro_permissions)||{}}),[null===(c=null==S?void 0:S.profile)||void 0===c?void 0:c.macro_permissions]),N=i.useMemo((function(){var e,i,n,r,o,u,t,l,s;return{canRecord:(null===(n=null===(i=null===(e=null==M?void 0:M.settings)||void 0===e?void 0:e.permissions)||void 0===i?void 0:i.recording)||void 0===n?void 0:n.value)||!1,canShareScreen:"safari"!==(null===(u=null===(o=null===(r=null==V?void 0:V.current)||void 0===r?void 0:r.webRTCAdapter)||void 0===o?void 0:o.browserDetails)||void 0===u?void 0:u.browser)&&((null===(s=null===(l=null===(t=null==M?void 0:M.nethvoice_cti)||void 0===t?void 0:t.permissions)||void 0===l?void 0:l.screen_sharing)||void 0===s?void 0:s.value)||!1),canSwitchDevice:(null==D?void 0:D.length)>0}}),[null===(h=null===(p=null===(v=null==M?void 0:M.settings)||void 0===v?void 0:v.permissions)||void 0===p?void 0:p.recording)||void 0===h?void 0:h.value,null===(g=null===(b=null===(f=null==M?void 0:M.nethvoice_cti)||void 0===f?void 0:f.permissions)||void 0===b?void 0:b.screen_sharing)||void 0===g?void 0:g.value,null==D?void 0:D.length,null===(m=null==S?void 0:S.default_device)||void 0===m?void 0:m.type,d]),P=i.useMemo((function(){var e=Object.values(q).find((function(e){return Object.keys(e).length>0})),i=e?Object.values(e)[0]:null;if("never"===w.openParamUrlType)return!1;if(!(null==i?void 0:i.connected)||"in"!==(null==i?void 0:i.direction))return!1;if("button"===w.openParamUrlType){if(w.onlyQueues&&(null==i?void 0:i.throughQueue))return!0;if(!w.onlyQueues&&(u.isFromTrunk(i.counterpartNum)||(null==i?void 0:i.throughQueue)))return!0}return!1}),[q,w.onlyQueues,w.openParamUrlType]);i.useEffect((function(){if(S&&j){var e=r.getAvailableDevices(S,j);T(e)}}),[S,j]);var A=i.useCallback((function(){_.island.toggleSideViewVisible(!1),setTimeout((function(){l.eventDispatch("phone-island-transcription-open",{})}),100)}),[_.island]),L=i.useMemo((function(){return(null==S?void 0:S.call_transcription_enabled)||!1}),[null==S?void 0:S.call_transcription_enabled]);return e.__assign(e.__assign({userInformation:S,availableDevices:D,videoInputDevices:k,isVideoCallButtonVisible:y,isUrlButtonEnabled:P,hasValidUrl:w.hasValidUrl,isTranscriptionEnabled:L},N),{goToVideoCall:Q,goToScreenSharing:E,closeSideViewAndLaunchEvent:x,openTranscriptionView:A})};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../node_modules/tslib/tslib.es6.js"),n=require("react");require("../../../node_modules/react-redux/es/index.js");var i=require("../../../store/index.js"),r=require("../../../utils/deviceUtils.js"),u=require("../../../lib/webrtc/janus.js"),o=require("../../../lib/phone/trunk.js"),l=require("../../../lib/devices/devices.js"),t=require("../../../utils/genericFunctions/eventDispatch.js"),s=require("../../../node_modules/react-redux/es/hooks/useDispatch.js"),d=require("../../../node_modules/react-redux/es/hooks/useSelector.js");exports.useSideViewLogic=function(a){var c,v,p,h,f,b,g,m,_=s.useDispatch(),S=d.useSelector((function(e){return e.currentUser})),k=d.useSelector((function(e){return e.users})),j=d.useSelector((function(e){return e.paramUrl})),w=i.store.select.mediaDevices.videoInputDevices(i.store.getState()),q=n.useRef(u.default),V=d.useSelector((function(e){return e.currentUser.conversations})),C=n.useState([]),D=C[0],T=C[1],U=n.useState(!0),y=U[0],I=U[1],x=n.useCallback((function(){var e=Object.values(V).find((function(e){return Object.keys(e).length>0}));return e?Object.values(e)[0]:null}),[V]),O=n.useCallback((function(e){if(_.island.toggleSideViewVisible(!1),"openUrl"===e){var n=Object.values(V).find((function(e){return Object.keys(e).length>0})),i=n?Object.values(n)[0]:null;if((null==i?void 0:i.connected)&&"in"===(null==i?void 0:i.direction)){var r={counterpartNum:i.counterpartNum,counterpartName:i.counterpartName,owner:i.owner,uniqueId:i.uniqueId,linkedId:i.linkedId,throughQueue:i.throughQueue,throughTrunk:i.throughTrunk,direction:i.direction,connected:i.connected};t.eventDispatch("phone-island-url-parameter-opened",r)}}else null!==e&&_.island.setIslandView(e)}),[_.island,V]),Q=n.useCallback((function(){return e.__awaiter(void 0,void 0,void 0,(function(){var n;return e.__generator(this,(function(e){switch(e.label){case 0:return w.length>0?[4,l.checkWebCamPermission()]:[3,2];case 1:return n=e.sent(),I(n),[2,n];case 2:return I(!1),[2,!1]}}))}))}),[w.length]),E=n.useCallback((function(){return e.__awaiter(void 0,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return[4,Q()];case 1:return e.sent()&&(O("video"),i.store.dispatch.currentCall.updateCurrentCall({isLocalVideoEnabled:!0,isStartingVideoCall:!0})),[2]}}))}))}),[Q,O]),M=n.useCallback((function(){O("video"),i.store.dispatch.screenShare.update({isStartingScreenShare:!0})}),[O]),N=n.useMemo((function(){var e;return(null===(e=null==S?void 0:S.profile)||void 0===e?void 0:e.macro_permissions)||{}}),[null===(c=null==S?void 0:S.profile)||void 0===c?void 0:c.macro_permissions]),P=n.useMemo((function(){var e,n,i,r,u,o,l,t,s;return{canRecord:(null===(i=null===(n=null===(e=null==N?void 0:N.settings)||void 0===e?void 0:e.permissions)||void 0===n?void 0:n.recording)||void 0===i?void 0:i.value)||!1,canShareScreen:"safari"!==(null===(o=null===(u=null===(r=null==q?void 0:q.current)||void 0===r?void 0:r.webRTCAdapter)||void 0===u?void 0:u.browserDetails)||void 0===o?void 0:o.browser)&&((null===(s=null===(t=null===(l=null==N?void 0:N.nethvoice_cti)||void 0===l?void 0:l.permissions)||void 0===t?void 0:t.screen_sharing)||void 0===s?void 0:s.value)||!1),canSwitchDevice:(null==D?void 0:D.length)>0}}),[null===(h=null===(p=null===(v=null==N?void 0:N.settings)||void 0===v?void 0:v.permissions)||void 0===p?void 0:p.recording)||void 0===h?void 0:h.value,null===(g=null===(b=null===(f=null==N?void 0:N.nethvoice_cti)||void 0===f?void 0:f.permissions)||void 0===b?void 0:b.screen_sharing)||void 0===g?void 0:g.value,null==D?void 0:D.length,null===(m=null==S?void 0:S.default_device)||void 0===m?void 0:m.type,a]),A=n.useMemo((function(){var e=x();if("never"===j.openParamUrlType)return!1;if(!(null==e?void 0:e.connected)||"in"!==(null==e?void 0:e.direction))return!1;if("button"===j.openParamUrlType){if(j.onlyQueues&&(null==e?void 0:e.throughQueue))return!0;if(!j.onlyQueues&&(o.isFromTrunk(e.counterpartNum)||(null==e?void 0:e.throughQueue)))return!0}return!1}),[x,j.onlyQueues,j.openParamUrlType]);n.useEffect((function(){if(S&&k){var e=r.getAvailableDevices(S,k);T(e)}}),[S,k]);var L=n.useCallback((function(){var e=x(),n=(null==e?void 0:e.linkedId)||(null==e?void 0:e.uniqueId)||null;n&&(_.island.toggleSideViewVisible(!1),t.eventDispatch("phone-island-transcription-open",{linkedid:n,uniqueid:n}))}),[_.island,x]),R=n.useMemo((function(){return(null==S?void 0:S.call_transcription_enabled)||!1}),[null==S?void 0:S.call_transcription_enabled]);return e.__assign(e.__assign({userInformation:S,availableDevices:D,videoInputDevices:w,isVideoCallButtonVisible:y,isUrlButtonEnabled:A,hasValidUrl:j.hasValidUrl,isTranscriptionEnabled:R},P),{goToVideoCall:E,goToScreenSharing:M,closeSideViewAndLaunchEvent:O,openTranscriptionView:L})};
2
2
  //# sourceMappingURL=useSideViewLogic.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSideViewLogic.js","sources":["../../../../src/components/SideView/hooks/useSideViewLogic.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState, store } from '../../../store'\nimport { getAvailableDevices } from '../../../utils/deviceUtils'\nimport JanusLib from '../../../lib/webrtc/janus.js'\nimport { isFromTrunk } from '../../../lib/user/extensions'\nimport { checkWebCamPermission } from '../../../lib/devices/devices'\nimport { eventDispatch } from '../../../utils'\n\nexport const useSideViewLogic = (uaType?: string) => {\n const dispatch = useDispatch<Dispatch>()\n const userInformation = useSelector((state: RootState) => state.currentUser)\n const allUsersInformation = useSelector((state: RootState) => state.users)\n const paramUrlData = useSelector((state: RootState) => state.paramUrl)\n const videoInputDevices = store.select.mediaDevices.videoInputDevices(store.getState())\n const janus = useRef<any>(JanusLib)\n const conversations = useSelector((state: RootState) => state.currentUser.conversations)\n\n const [availableDevices, setAvailableDevices] = useState([])\n const [isVideoCallButtonVisible, setIsVideoCallButtonVisible] = useState(true)\n\n const closeSideViewAndLaunchEvent = useCallback(\n (viewType: any) => {\n dispatch.island.toggleSideViewVisible(false)\n if (viewType === 'openUrl') {\n const activeConversation = Object.values(conversations).find(\n (conv) => Object.keys(conv).length > 0,\n )\n const conversationData = activeConversation ? Object.values(activeConversation)[0] : null\n\n if (conversationData?.connected && conversationData?.direction === 'in') {\n const eventData = {\n counterpartNum: conversationData.counterpartNum,\n counterpartName: conversationData.counterpartName,\n owner: conversationData.owner,\n uniqueId: conversationData.uniqueId,\n linkedId: conversationData.linkedId,\n throughQueue: conversationData.throughQueue,\n throughTrunk: conversationData.throughTrunk,\n direction: conversationData.direction,\n connected: conversationData.connected,\n }\n eventDispatch('phone-island-url-parameter-opened', eventData)\n }\n } else if (viewType !== null) {\n dispatch.island.setIslandView(viewType)\n }\n },\n [dispatch.island, conversations],\n )\n\n const checkCameraPermission = useCallback(async () => {\n if (videoInputDevices.length > 0) {\n const isWebCamAccepted = await checkWebCamPermission()\n setIsVideoCallButtonVisible(isWebCamAccepted)\n return isWebCamAccepted\n } else {\n setIsVideoCallButtonVisible(false)\n return false\n }\n }, [videoInputDevices.length])\n\n const goToVideoCall = useCallback(async () => {\n const cameraPermission = await checkCameraPermission()\n if (cameraPermission) {\n closeSideViewAndLaunchEvent('video')\n store.dispatch.currentCall.updateCurrentCall({\n isLocalVideoEnabled: true,\n isStartingVideoCall: true,\n })\n }\n }, [checkCameraPermission, closeSideViewAndLaunchEvent])\n\n const goToScreenSharing = useCallback(() => {\n closeSideViewAndLaunchEvent('video')\n store.dispatch.screenShare.update({\n isStartingScreenShare: true,\n })\n }, [closeSideViewAndLaunchEvent])\n\n const permissions = useMemo(\n () => userInformation?.profile?.macro_permissions || {},\n [userInformation?.profile?.macro_permissions],\n )\n\n const userCapabilities = useMemo(\n () => ({\n canRecord: permissions?.settings?.permissions?.recording?.value || false,\n canShareScreen:\n janus?.current?.webRTCAdapter?.browserDetails?.browser !== 'safari' &&\n (permissions?.nethvoice_cti?.permissions?.screen_sharing?.value || false),\n canSwitchDevice: availableDevices?.length > 0,\n }),\n [\n permissions?.settings?.permissions?.recording?.value,\n permissions?.nethvoice_cti?.permissions?.screen_sharing?.value,\n availableDevices?.length,\n userInformation?.default_device?.type,\n uaType,\n ],\n )\n\n const isUrlButtonEnabled = useMemo(() => {\n const activeConversation = Object.values(conversations).find(\n (conv) => Object.keys(conv).length > 0,\n )\n const conversationData = activeConversation ? Object.values(activeConversation)[0] : null\n\n // If param url type is 'never', return false\n if (paramUrlData.openParamUrlType === 'never') {\n return false\n }\n\n if (!conversationData?.connected || conversationData?.direction !== 'in') {\n return false\n }\n\n // open param url type is set to 'button'\n if (paramUrlData.openParamUrlType === 'button') {\n if (paramUrlData.onlyQueues && conversationData?.throughQueue) {\n return true\n } else if (\n !paramUrlData.onlyQueues &&\n (isFromTrunk(conversationData.counterpartNum) || conversationData?.throughQueue)\n ) {\n return true\n }\n }\n\n return false\n }, [conversations, paramUrlData.onlyQueues, paramUrlData.openParamUrlType])\n\n useEffect(() => {\n if (userInformation && allUsersInformation) {\n const devices = getAvailableDevices(userInformation, allUsersInformation)\n setAvailableDevices(devices)\n }\n }, [userInformation, allUsersInformation])\n\n const openTranscriptionView = useCallback(() => {\n // Close SideView, collapse actions, and open TranscriptionView\n dispatch.island.toggleSideViewVisible(false)\n setTimeout(() => {\n eventDispatch('phone-island-transcription-open', {})\n }, 100)\n }, [dispatch.island])\n\n const isTranscriptionEnabled = useMemo(\n () => userInformation?.call_transcription_enabled || false,\n [userInformation?.call_transcription_enabled],\n )\n\n return {\n userInformation,\n availableDevices,\n videoInputDevices,\n isVideoCallButtonVisible,\n isUrlButtonEnabled,\n hasValidUrl: paramUrlData.hasValidUrl,\n isTranscriptionEnabled,\n ...userCapabilities,\n goToVideoCall,\n goToScreenSharing,\n closeSideViewAndLaunchEvent,\n openTranscriptionView,\n }\n}\n"],"names":["uaType","dispatch","useDispatch","userInformation","useSelector","state","currentUser","allUsersInformation","users","paramUrlData","paramUrl","videoInputDevices","store","select","mediaDevices","getState","janus","useRef","JanusLib","conversations","_j","useState","availableDevices","setAvailableDevices","_k","isVideoCallButtonVisible","setIsVideoCallButtonVisible","closeSideViewAndLaunchEvent","useCallback","viewType","island","toggleSideViewVisible","activeConversation","Object","values","find","conv","keys","length","conversationData","connected","direction","eventData","counterpartNum","counterpartName","owner","uniqueId","linkedId","throughQueue","throughTrunk","eventDispatch","setIslandView","checkCameraPermission","__awaiter","checkWebCamPermission","isWebCamAccepted","_a","sent","goToVideoCall","currentCall","updateCurrentCall","isLocalVideoEnabled","isStartingVideoCall","goToScreenSharing","screenShare","update","isStartingScreenShare","permissions","useMemo","profile","macro_permissions","userCapabilities","canRecord","_c","settings","_b","recording","value","canShareScreen","_f","_d","current","webRTCAdapter","_e","browserDetails","browser","_h","nethvoice_cti","_g","screen_sharing","canSwitchDevice","default_device","type","isUrlButtonEnabled","openParamUrlType","onlyQueues","isFromTrunk","useEffect","devices","getAvailableDevices","openTranscriptionView","setTimeout","isTranscriptionEnabled","call_transcription_enabled","__assign","hasValidUrl"],"mappings":"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"}
1
+ {"version":3,"file":"useSideViewLogic.js","sources":["../../../../src/components/SideView/hooks/useSideViewLogic.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState, store } from '../../../store'\nimport { getAvailableDevices } from '../../../utils/deviceUtils'\nimport JanusLib from '../../../lib/webrtc/janus.js'\nimport { isFromTrunk } from '../../../lib/user/extensions'\nimport { checkWebCamPermission } from '../../../lib/devices/devices'\nimport { eventDispatch } from '../../../utils'\n\nexport const useSideViewLogic = (uaType?: string) => {\n const dispatch = useDispatch<Dispatch>()\n const userInformation = useSelector((state: RootState) => state.currentUser)\n const allUsersInformation = useSelector((state: RootState) => state.users)\n const paramUrlData = useSelector((state: RootState) => state.paramUrl)\n const videoInputDevices = store.select.mediaDevices.videoInputDevices(store.getState())\n const janus = useRef<any>(JanusLib)\n const conversations = useSelector((state: RootState) => state.currentUser.conversations)\n\n const [availableDevices, setAvailableDevices] = useState([])\n const [isVideoCallButtonVisible, setIsVideoCallButtonVisible] = useState(true)\n\n const getActiveConversationData = useCallback(() => {\n const activeConversation = Object.values(conversations).find((conv) => Object.keys(conv).length > 0)\n return activeConversation ? (Object.values(activeConversation)[0] as any) : null\n }, [conversations])\n\n const closeSideViewAndLaunchEvent = useCallback(\n (viewType: any) => {\n dispatch.island.toggleSideViewVisible(false)\n if (viewType === 'openUrl') {\n const activeConversation = Object.values(conversations).find(\n (conv) => Object.keys(conv).length > 0,\n )\n const conversationData = activeConversation ? Object.values(activeConversation)[0] : null\n\n if (conversationData?.connected && conversationData?.direction === 'in') {\n const eventData = {\n counterpartNum: conversationData.counterpartNum,\n counterpartName: conversationData.counterpartName,\n owner: conversationData.owner,\n uniqueId: conversationData.uniqueId,\n linkedId: conversationData.linkedId,\n throughQueue: conversationData.throughQueue,\n throughTrunk: conversationData.throughTrunk,\n direction: conversationData.direction,\n connected: conversationData.connected,\n }\n eventDispatch('phone-island-url-parameter-opened', eventData)\n }\n } else if (viewType !== null) {\n dispatch.island.setIslandView(viewType)\n }\n },\n [dispatch.island, conversations],\n )\n\n const checkCameraPermission = useCallback(async () => {\n if (videoInputDevices.length > 0) {\n const isWebCamAccepted = await checkWebCamPermission()\n setIsVideoCallButtonVisible(isWebCamAccepted)\n return isWebCamAccepted\n } else {\n setIsVideoCallButtonVisible(false)\n return false\n }\n }, [videoInputDevices.length])\n\n const goToVideoCall = useCallback(async () => {\n const cameraPermission = await checkCameraPermission()\n if (cameraPermission) {\n closeSideViewAndLaunchEvent('video')\n store.dispatch.currentCall.updateCurrentCall({\n isLocalVideoEnabled: true,\n isStartingVideoCall: true,\n })\n }\n }, [checkCameraPermission, closeSideViewAndLaunchEvent])\n\n const goToScreenSharing = useCallback(() => {\n closeSideViewAndLaunchEvent('video')\n store.dispatch.screenShare.update({\n isStartingScreenShare: true,\n })\n }, [closeSideViewAndLaunchEvent])\n\n const permissions = useMemo(\n () => userInformation?.profile?.macro_permissions || {},\n [userInformation?.profile?.macro_permissions],\n )\n\n const userCapabilities = useMemo(\n () => ({\n canRecord: permissions?.settings?.permissions?.recording?.value || false,\n canShareScreen:\n janus?.current?.webRTCAdapter?.browserDetails?.browser !== 'safari' &&\n (permissions?.nethvoice_cti?.permissions?.screen_sharing?.value || false),\n canSwitchDevice: availableDevices?.length > 0,\n }),\n [\n permissions?.settings?.permissions?.recording?.value,\n permissions?.nethvoice_cti?.permissions?.screen_sharing?.value,\n availableDevices?.length,\n userInformation?.default_device?.type,\n uaType,\n ],\n )\n\n const isUrlButtonEnabled = useMemo(() => {\n const conversationData = getActiveConversationData()\n\n // If param url type is 'never', return false\n if (paramUrlData.openParamUrlType === 'never') {\n return false\n }\n\n if (!conversationData?.connected || conversationData?.direction !== 'in') {\n return false\n }\n\n // open param url type is set to 'button'\n if (paramUrlData.openParamUrlType === 'button') {\n if (paramUrlData.onlyQueues && conversationData?.throughQueue) {\n return true\n } else if (\n !paramUrlData.onlyQueues &&\n (isFromTrunk(conversationData.counterpartNum) || conversationData?.throughQueue)\n ) {\n return true\n }\n }\n\n return false\n }, [getActiveConversationData, paramUrlData.onlyQueues, paramUrlData.openParamUrlType])\n\n useEffect(() => {\n if (userInformation && allUsersInformation) {\n const devices = getAvailableDevices(userInformation, allUsersInformation)\n setAvailableDevices(devices)\n }\n }, [userInformation, allUsersInformation])\n\n const openTranscriptionView = useCallback(() => {\n const conversationData = getActiveConversationData()\n const transcriptionId = conversationData?.linkedId || conversationData?.uniqueId || null\n\n if (!transcriptionId) {\n return\n }\n\n // Close SideView, collapse actions, and open TranscriptionView\n dispatch.island.toggleSideViewVisible(false)\n eventDispatch('phone-island-transcription-open', {\n linkedid: transcriptionId,\n uniqueid: transcriptionId,\n })\n }, [dispatch.island, getActiveConversationData])\n\n const isTranscriptionEnabled = useMemo(\n () => userInformation?.call_transcription_enabled || false,\n [userInformation?.call_transcription_enabled],\n )\n\n return {\n userInformation,\n availableDevices,\n videoInputDevices,\n isVideoCallButtonVisible,\n isUrlButtonEnabled,\n hasValidUrl: paramUrlData.hasValidUrl,\n isTranscriptionEnabled,\n ...userCapabilities,\n goToVideoCall,\n goToScreenSharing,\n closeSideViewAndLaunchEvent,\n openTranscriptionView,\n }\n}\n"],"names":["uaType","dispatch","useDispatch","userInformation","useSelector","state","currentUser","allUsersInformation","users","paramUrlData","paramUrl","videoInputDevices","store","select","mediaDevices","getState","janus","useRef","JanusLib","conversations","_j","useState","availableDevices","setAvailableDevices","_k","isVideoCallButtonVisible","setIsVideoCallButtonVisible","getActiveConversationData","useCallback","activeConversation","Object","values","find","conv","keys","length","closeSideViewAndLaunchEvent","viewType","island","toggleSideViewVisible","conversationData","connected","direction","eventData","counterpartNum","counterpartName","owner","uniqueId","linkedId","throughQueue","throughTrunk","eventDispatch","setIslandView","checkCameraPermission","__awaiter","checkWebCamPermission","isWebCamAccepted","_a","sent","goToVideoCall","currentCall","updateCurrentCall","isLocalVideoEnabled","isStartingVideoCall","goToScreenSharing","screenShare","update","isStartingScreenShare","permissions","useMemo","profile","macro_permissions","userCapabilities","canRecord","_c","settings","_b","recording","value","canShareScreen","_f","_d","current","webRTCAdapter","_e","browserDetails","browser","_h","nethvoice_cti","_g","screen_sharing","canSwitchDevice","default_device","type","isUrlButtonEnabled","openParamUrlType","onlyQueues","isFromTrunk","useEffect","devices","getAvailableDevices","openTranscriptionView","transcriptionId","linkedid","uniqueid","isTranscriptionEnabled","call_transcription_enabled","__assign","hasValidUrl"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),n=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),r=require("./RestAPI.js"),o=require("../lib/phone/conversation.js"),i=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"),b=require("../lib/phone/trunk.js"),y=require("../node_modules/react-redux/es/hooks/useDispatch.js"),k=require("../node_modules/react-redux/es/hooks/useSelector.js");function w(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var C=w(n);exports.Socket=function(w){var _=w.hostName,N=w.username,T=w.authToken,D=w.reload,U=w.reloadedCallback,j=w.children,I=w.uaType,q=y.useDispatch(),x=n.useRef(),E=n.useRef(),F=n.useRef(!1),O=n.useRef(0);k.useSelector((function(e){return e.currentUser})),s.useEventListener("phone-island-start-transcription",(function(){E.current&&E.current.emit("start_transcription",{})})),s.useEventListener("phone-island-stop-transcription",(function(){E.current&&E.current.emit("stop_transcription",{})}));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&&i.subscribe({id:n}).catch((function(e){return console.error("Error subscribing to streaming source:",e)}))}},y=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,y=S.endpoints,k=S.username,w=l.store.getState().currentCall;w.incoming,w.outgoing;var C=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==y?void 0:y.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"===I&&C()||"desktop"===I&&("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:o.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")),F.current||(F.current=!0,i.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(){F.current=!1}),100)})));var _=l.store.getState().paramUrl.openParamUrlType,N=l.store.getState().island.urlOpened;if("ringing"===_&&!N){var T=b.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:o.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"===I&&C()||"desktop"===I&&("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:o.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:o.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:o.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,j=t.counterpartNum,x=t.startTime;c&&j&&U&&"<unknown>"!==U&&(q.currentCall.addTransferCalls({type:"destination",displayName:o.getDisplayName(t),number:j,startTime:"".concat(f.getTimestampInSeconds())}),q.currentCall.updateCurrentCall({displayName:o.getDisplayName(t),number:j,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)&&(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)),x.current&&(clearInterval(x.current),x.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){O.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(N),token:T,uaType:I})})),E.current.on("authe_ok",(function(){console.debug("Socket authentication success!"),a.eventDispatch("phone-island-socket-authorized",{}),x.current&&clearInterval(x.current),x.current=setInterval((function(){E.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(E.current.connected)),setTimeout((function(){var e,n,t=E.current.connected&&O.current>=3;if(!E.current.connected||t){var r=l.store.getState().webrtc.sipcall,o=l.store.getState().currentCall,i=o.accepted,c=o.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((i||c)&&("connected"===s||"completed"===s))return void console.debug("Socket unreachable but active call with ICE connected - skipping socket_down alert",{iceState:s,accepted:i,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)),g.dispatchMainPresence(n)})),E.current.on("extenHangup",(function(e){var n=l.store.getState().currentUser,t=n.endpoints,r=n.username,o=l.store.getState().conference,i=o.isActive,s=o.conferenceStartedFrom,u=l.store.getState().island,d=u.view,p=u.previewCallFromMobileOrNethlink,v=((null==t?void 0:t.extension)||[]).find((function(n){return n.id===e.callerNum})),m=null==v?void 0:v.type;if("normal_clearing"===e.cause&&("physical"===m||"mobile"===m)||"normal_clearing"===e.cause&&("webrtc"===m||"nethlink"===m)&&p||"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),i&&s!==r&&l.store.dispatch.conference.resetConference()):"normal_circuit_congestion"===(null==e?void 0:e.cause)&&i&&s===r?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"!==m&&"nethlink"!==m||!i||s===r||l.store.dispatch.conference.resetConference(),("normal_clearing"===e.cause&&("webrtc"===m||"nethlink"===m)||"call_rejected"===(null==e?void 0:e.cause))&&i&&s===r){var g=l.store.getState().conference,f=g.usersList,h=g.pendingUsers,S=f&&Object.keys(f).length>0,b=h&&Object.keys(h).length>0;S||b?setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800):l.store.dispatch.conference.resetConference()}if("interworking"===(null==e?void 0:e.cause)&&i&&s===r&&"waitingConference"!==d&&setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800),"user_busy"===(null==e?void 0:e.cause)){var y=l.store.getState().currentUser,k=y.endpoints,w=y.username,C=((null==k?void 0:k.extension)||[]).map((function(e){return e.id})),_=l.store.getState().currentCall,N=_.incoming;_.outgoing;var T=l.store.getState().conference,D=T.isActive,U=T.conferenceStartedFrom;N&&C.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),D&&U===w&&setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),4e3))}if("subscriber_absent"===(null==e?void 0:e.cause)){var j=l.store.getState().conference,I=j.isActive,q=j.conferenceStartedFrom,x=l.store.getState().currentUser.username;if(I&&q===x){var E=l.store.getState().conference;f=E.usersList,h=E.pendingUsers,S=f&&Object.keys(f).length>0,b=h&&Object.keys(h).length>0,S||b?(setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800),h&&h[e.callerNum]&&l.store.dispatch.conference.removePendingUser(e.callerNum)):l.store.dispatch.conference.resetConference()}}})),E.current.on("extenConnected",(function(e){var n=l.store.getState().currentUser,t=n.default_device,r=n.endpoints,o=((null==r?void 0:r.extension)||[]).find((function(n){return n.id===e.extenConnected})),i=null==o?void 0:o.type;(("webrtc"===(null==t?void 0:t.type)||"nethlink"===(null==t?void 0:t.type))&&i&&("mobile"===i||"physical"===i)||"physical"===(null==t?void 0:t.type)&&i&&"physical"!==i)&&(l.store.dispatch.island.toggleAvoidToShow(!0),l.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!0),a.eventDispatch("phone-island-call-answered",{extensionType:i}))})),E.current.on("extenUpdate",(function(e){var n,t;q.users.updateExtension(e);var r=l.store.getState().users.extensions,o={},i=l.store.getState().currentUser;for(var c in r){var s=r[c].username,a=r[c].exten;o[s]||(o[s]=[]),o[s].push(a)}var u=o[e.username],d=e.conversations[Object.keys(e.conversations)[0]]||{},p=!1;if((null==e?void 0:e.username)===N&&!v.isEmpty(d)&&(null==d?void 0:d.owner)){var m=null===(t=null===(n=null==i?void 0:i.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)===N&&(l.store.dispatch.island.toggleAvoidToShow(!0),l.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!0)),e.username===N&&(y(e,d),q.currentUser.updateConversations(e))})),E.current.on("queueUpdate",(function(e){g.dispatchQueueUpdate(e)})),E.current.on("queueMemberUpdate",(function(e){g.dispatchQueueMemberUpdate(e)})),E.current.on("takeOver",(function(){g.dispatchAlreadyLogin()})),E.current.on("serverReloaded",(function(){g.dispatchServerReload()})),E.current.on("parkingUpdate",(function(e){g.dispatchParkingUpdate(e)})),E.current.on("actionNethLink",(function(e,n){g.dispatchUrlCall(e,n)})),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){g.dispatchDefaultDeviceUpdate(n);var t=l.store.getState().users.extensions,r=l.store.getState().currentUser.endpoints;if(t&&r){var o=Object.values(t).filter((function(e){return(null==e?void 0:e.exten)===n}));if(0!==o.length){var i=o[0],c=r.extension.find((function(e){return e.id===i.exten}));c&&(i=e.__assign(e.__assign({},i),{type:c.type})),l.store.dispatch.currentUser.updateCurrentDefaultDevice(i),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,o=l.store.getState().conference.usersList,i=e.__assign({},r);o&&Object.keys(i).forEach((function(n){o[n]&&(i[n]=e.__assign(e.__assign({},i[n]),{muted:o[n].muted}))})),l.store.dispatch.conference.updateConferenceUsersList(i),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 o=l.store.getState().currentCall.streamingSourceNumber;m.getStreamingSourceId(o),q.streaming.updateSourceImage({source:t,image:r})}}})),E.current.on("satellite/transcription",(function(e){a.eventDispatch("phone-island-conversation-transcription",e)})),function(){clearInterval(x.current),E.current.close()}}),[_,N,T,I,q]),n.useEffect((function(){var e;if(D){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),x.current&&(clearInterval(x.current),x.current=null),setTimeout((function(){E.current.disconnect(),E.current.connect(),U()}),100)):(console.info("Socket already connected (no alert active), skipping reconnection"),U())}}),[D]),C.default.createElement(C.default.Fragment,null,j)};
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