@nethesis/phone-island 1.0.4 → 1.0.5-dev.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/App.js +1 -1
- package/dist/App.js.map +1 -1
- package/dist/components/AudioPlayerView/Progress.js +1 -1
- package/dist/components/AudioPlayerView/Progress.js.map +1 -1
- package/dist/components/CallView/BackCall.js +1 -1
- package/dist/components/CallView/BackCall.js.map +1 -1
- package/dist/components/CallView/DisplayName.js +1 -1
- package/dist/components/CallView/DisplayName.js.map +1 -1
- package/dist/components/CallView/DisplayNameUtils.js +1 -1
- package/dist/components/CallView/DisplayNameUtils.js.map +1 -1
- package/dist/components/CallView/Number.js +1 -1
- package/dist/components/CallView/Number.js.map +1 -1
- package/dist/components/CallView/index.js +1 -1
- package/dist/components/CallView/index.js.map +1 -1
- package/dist/components/SideView/hooks/useSideViewLogic.js.map +1 -1
- package/dist/components/Socket.js +1 -1
- package/dist/components/Socket.js.map +1 -1
- package/dist/components/TextScroll.js +1 -1
- package/dist/components/TextScroll.js.map +1 -1
- package/dist/events/SocketEvents.js +1 -1
- package/dist/events/SocketEvents.js.map +1 -1
- package/dist/index.css +1 -1
- package/dist/lib/phone/queue.js +2 -0
- package/dist/lib/phone/queue.js.map +1 -0
- package/dist/models/currentCall.js +1 -1
- package/dist/models/currentCall.js.map +1 -1
- package/dist/models/index.js +1 -1
- package/dist/models/index.js.map +1 -1
- package/dist/models/queue.js +2 -0
- package/dist/models/queue.js.map +1 -0
- package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js +1 -1
- package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/components/label/label.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/components/label/label.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/components/menu/menu-machine-glue.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/components/menu/menu-machine-glue.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/components/menu/menu-machine.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/components/menu/menu-machine.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/components/transition/transition.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/components/transition/transition.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/adjust-scrollbar-padding.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/adjust-scrollbar-padding.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/handle-ios-locking.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/handle-ios-locking.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/overflow-store.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/overflow-store.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/prevent-scroll.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/prevent-scroll.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/use-document-overflow.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/use-document-overflow.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-active-press.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-active-press.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-element-size.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-element-size.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-event.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-event.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-flags.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-flags.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-inert-others.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-inert-others.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-owner.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-owner.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-quick-release.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-quick-release.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-scroll-lock.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-scroll-lock.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-sync-refs.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-sync-refs.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-transition.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-transition.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-tree-walker.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-tree-walker.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/internal/floating.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/internal/floating.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/internal/open-closed.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/internal/open-closed.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/machine.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/machine.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/react-glue.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/react-glue.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/utils/class-names.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/utils/class-names.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/utils/disposables.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/utils/disposables.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/utils/focus-management.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/utils/focus-management.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/utils/match.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/utils/match.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/utils/render.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/utils/render.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/utils/store.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/utils/store.js.map +1 -1
- package/dist/node_modules/@react-aria/focus/dist/FocusScope.mjs.js +1 -1
- package/dist/node_modules/@react-aria/focus/dist/FocusScope.mjs.js.map +1 -1
- package/dist/node_modules/@react-aria/focus/dist/useFocusRing.mjs.js +1 -1
- package/dist/node_modules/@react-aria/focus/dist/useFocusRing.mjs.js.map +1 -1
- package/dist/node_modules/@react-aria/utils/dist/DOMFunctions.mjs.js +1 -1
- package/dist/node_modules/@react-aria/utils/dist/DOMFunctions.mjs.js.map +1 -1
- package/dist/node_modules/@react-aria/utils/dist/useEffectEvent.mjs.js +1 -1
- package/dist/node_modules/@react-aria/utils/dist/useEffectEvent.mjs.js.map +1 -1
- package/dist/node_modules/@react-aria/utils/dist/useGlobalListeners.mjs.js +1 -1
- package/dist/node_modules/@react-aria/utils/dist/useGlobalListeners.mjs.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/socket.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/socket.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transport.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transport.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transports/polling.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transports/polling.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transports/webtransport.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transports/webtransport.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/util.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/util.js.map +1 -1
- package/dist/node_modules/engine.io-parser/build/esm/encodePacket.browser.js +1 -1
- package/dist/node_modules/engine.io-parser/build/esm/encodePacket.browser.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/animators/waapi/utils/get-final-keyframe.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/animators/waapi/utils/get-final-keyframe.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/interfaces/motion-value.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/interfaces/motion-value.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/interfaces/visual-element-target.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/interfaces/visual-element-target.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/interfaces/visual-element-variant.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/interfaces/visual-element-variant.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/interfaces/visual-element.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/interfaces/visual-element.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/utils/default-transitions.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/utils/default-transitions.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/utils/is-transition-defined.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/utils/is-transition-defined.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/events/add-dom-event.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/events/add-dom-event.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/pan/PanSession.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/pan/PanSession.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/press.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/press.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/index.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/index.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/observers.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/observers.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/index.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/index.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/utils/is-forced-motion-value.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/utils/is-forced-motion-value.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-state.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-state.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/projection/geometry/conversion.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/projection/geometry/conversion.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/projection/geometry/delta-apply.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/projection/geometry/delta-apply.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/projection/geometry/delta-calc.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/projection/geometry/delta-calc.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/projection/geometry/delta-remove.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/projection/geometry/delta-remove.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/projection/node/create-projection-node.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/projection/node/create-projection-node.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/projection/styles/scale-box-shadow.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/projection/styles/scale-box-shadow.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/projection/utils/has-transform.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/projection/utils/has-transform.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/VisualElement.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/VisualElement.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/components/create-factory.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/components/create-factory.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/components/create-proxy.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/components/create-proxy.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/dom/DOMVisualElement.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/dom/DOMVisualElement.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/dom/use-render.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/dom/use-render.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/html/HTMLVisualElement.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/html/HTMLVisualElement.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/html/use-props.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/html/use-props.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/html/utils/render.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/html/utils/render.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/svg/utils/build-attrs.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/svg/utils/build-attrs.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/svg/utils/path.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/svg/utils/path.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/utils/animation-state.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/utils/animation-state.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/utils/delay.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/utils/delay.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/utils/get-context-window.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/utils/get-context-window.mjs.js.map +1 -1
- package/dist/node_modules/js-base64/base64.mjs.js +1 -1
- package/dist/node_modules/js-base64/base64.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/AsyncMotionValueAnimation.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/AsyncMotionValueAnimation.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/JSAnimation.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/JSAnimation.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimation.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimation.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/drivers/driver-frameloop.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/drivers/driver-frameloop.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/generators/inertia.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/generators/inertia.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/generators/keyframes.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/generators/keyframes.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/generators/spring/find.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/generators/spring/find.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/generators/spring/index.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/generators/spring/index.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/create-generator-easing.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/create-generator-easing.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/get-final.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/get-final.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/unit-conversion.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/unit-conversion.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/utils/css-variables-conversion.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/utils/css-variables-conversion.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/cubic-bezier.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/cubic-bezier.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/start-waapi-animation.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/start-waapi-animation.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/apply-generator.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/apply-generator.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/linear.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/linear.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/frameloop/batcher.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/frameloop/batcher.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/frameloop/render-step.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/frameloop/render-step.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/gestures/hover.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/gestures/hover.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/gestures/press/index.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/gestures/press/index.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/utils/interpolate.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/utils/interpolate.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/index.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/index.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla-to-rgba.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla-to-rgba.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/color/rgba.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/color/rgba.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/pipe.mjs.js +1 -1
- package/dist/node_modules/motion-utils/dist/es/pipe.mjs.js.map +1 -1
- package/dist/node_modules/react-redux/es/components/Provider.js +1 -1
- package/dist/node_modules/react-redux/es/components/Provider.js.map +1 -1
- package/dist/node_modules/react-redux/es/hooks/useDispatch.js +1 -1
- package/dist/node_modules/react-redux/es/hooks/useDispatch.js.map +1 -1
- package/dist/node_modules/react-redux/es/hooks/useSelector.js +1 -1
- package/dist/node_modules/react-redux/es/hooks/useSelector.js.map +1 -1
- package/dist/node_modules/react-redux/es/hooks/useStore.js +1 -1
- package/dist/node_modules/react-redux/es/hooks/useStore.js.map +1 -1
- package/dist/node_modules/react-tooltip/dist/react-tooltip.min.mjs.js +1 -1
- package/dist/node_modules/react-tooltip/dist/react-tooltip.min.mjs.js.map +1 -1
- package/dist/node_modules/socket.io-client/build/esm/socket.js +1 -1
- package/dist/node_modules/socket.io-client/build/esm/socket.js.map +1 -1
- package/dist/node_modules/socket.io-client/build/esm/url.js +1 -1
- package/dist/node_modules/socket.io-client/build/esm/url.js.map +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/adapter_factory.js +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/adapter_factory.js.map +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/safari/safari_shim.js +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/safari/safari_shim.js.map +1 -1
- package/dist/package.json.js +1 -1
- package/dist/public/locales/en/translation.json.js +1 -1
- package/dist/public/locales/it/translation.json.js +1 -1
- package/dist/styles/CustomRange.styles.js.map +1 -1
- package/dist/styles/Island.styles.js +1 -1
- package/dist/styles/Island.styles.js.map +1 -1
- package/package.json +1 -1
- package/dist/node_modules/react-tooltip/dist/react-tooltip.min.css.js +0 -2
- package/dist/node_modules/react-tooltip/dist/react-tooltip.min.css.js.map +0 -1
- package/dist/node_modules/style-inject/dist/style-inject.es.js +0 -2
- package/dist/node_modules/style-inject/dist/style-inject.es.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Progress.js","sources":["../../../src/components/AudioPlayerView/Progress.tsx"],"sourcesContent":["import React, { type FC, useState, useEffect, useRef, useCallback } from 'react'\nimport { useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { formatTime } from '../../utils/genericFunctions/player'\nimport { useDispatch } from 'react-redux'\nimport { StyledCustomRange } from '../../styles/CustomRange.styles'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faPlay, faPause, faTrash, faVolumeHigh, faVolumeXmark } from '@fortawesome/free-solid-svg-icons'\nimport { eventDispatch, useEventListener } from '../../utils'\n\nexport const Progress: FC<ProgressTypes> = ({ isPlayer }) => {\n const { audioPlayer, audioPlayerPlaying, audioPlayerTrackDuration } = useSelector(\n (state: RootState) => state.player,\n )\n const progressBarRef = useRef<any>()\n const progressAnimationRef = useRef<any>()\n const [timeProgress, setTimeProgress] = useState<string>('00:00')\n const [displayDuration, setDisplayDuration] = useState<string>()\n const dispatch = useDispatch<Dispatch>()\n const [trackDuration, setTrackDuration] = useState<number>(\n (audioPlayerTrackDuration && Math.round(audioPlayerTrackDuration)) || 0,\n )\n const { recorded, playing } = useSelector((state: RootState) => state.recorder)\n const [isMuted, setIsMuted] = useState<boolean>(false)\n\n const progressAnimation = useCallback(() => {\n const currentTime = audioPlayer?.current?.currentTime\n currentTime && setTimeProgress(formatTime(Math.round(currentTime)))\n progressBarRef.current.value = currentTime\n trackDuration &&\n currentTime &&\n progressBarRef.current.style.setProperty(\n '--range-progress',\n `${(currentTime / trackDuration) * 100}%`,\n )\n progressAnimationRef.current = requestAnimationFrame(progressAnimation)\n }, [audioPlayer, trackDuration, progressBarRef])\n\n useEffect(() => {\n if (audioPlayerPlaying) {\n progressAnimationRef.current = requestAnimationFrame(progressAnimation)\n } else {\n cancelAnimationFrame(progressAnimationRef.current)\n }\n }, [audioPlayerPlaying])\n\n useEffect(() => {\n if (audioPlayerTrackDuration) {\n setTrackDuration(Math.round(audioPlayerTrackDuration))\n setDisplayDuration(formatTime(audioPlayerTrackDuration))\n }\n }, [audioPlayerTrackDuration])\n\n useEffect(() => {\n return () => {\n cancelAnimationFrame(progressAnimationRef.current)\n }\n }, [])\n\n function handleProgressChange() {\n dispatch.player.setAudioPlayerCurrentTime(progressBarRef.current.value)\n }\n\n function stopPropagation(e: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>) {\n e.stopPropagation()\n }\n\n function handlePause() {\n dispatch.player.pauseAudioPlayer()\n dispatch.recorder.setPlaying(false)\n dispatch.recorder.setPaused(true)\n eventDispatch('phone-island-recording-paused', {})\n }\n useEventListener('phone-island-recording-pause', (data: {}) => {\n handlePause()\n })\n\n function handlePlay() {\n dispatch.player.startAudioPlayer(() => {\n // The callback for the end event of the audio player\n dispatch.recorder.setPlaying(false)\n dispatch.recorder.setPaused(true)\n })\n dispatch.recorder.setPlaying(true)\n eventDispatch('phone-island-recording-played', {})\n }\n useEventListener('phone-island-recording-play', (data: {}) => {\n handlePlay()\n })\n\n function handleDelete() {\n dispatch.recorder.resetRecorded()\n eventDispatch('phone-island-recording-deleted', {})\n }\n useEventListener('phone-island-recording-delete', (data: {}) => {\n handleDelete()\n })\n\n function handleToggleMute() {\n if (audioPlayer?.current) {\n const newMuteState = !isMuted\n audioPlayer.current.muted = newMuteState\n setIsMuted(newMuteState)\n }\n }\n\n return (\n <div className='pi-w-full pi-h-full pi-flex pi-flex-col pi-items-center pi-justify-between pi-px-2'>\n {/* Player controls with progress bar */}\n <div className='pi-w-full pi-flex pi-items-center pi-justify-between pi-gap-2'>\n {isPlayer ? (\n <div className='pi-cursor-pointer pi-flex-none' onClick={handleToggleMute}>\n <FontAwesomeIcon\n icon={isMuted ? faVolumeXmark : faVolumeHigh}\n className='pi-h-4 pi-w-4 pi-text-gray-700 dark:pi-text-gray-300'\n />\n </div>\n ) : (\n <>\n {audioPlayerPlaying ? (\n <div\n onClick={handlePause}\n className='pi-cursor-pointer pi-flex-none'\n data-tooltip-id='tooltip-pause-recorder-view'\n data-tooltip-content={'Pause'}\n >\n <FontAwesomeIcon\n icon={faPause}\n className='pi-h-4 pi-w-4 pi-text-gray-700 dark:pi-text-gray-300'\n />\n </div>\n ) : (\n <div\n onClick={handlePlay}\n className='pi-cursor-pointer pi-flex-none'\n data-tooltip-id='tooltip-play-recorder-view'\n data-tooltip-content={'Play'}\n >\n <FontAwesomeIcon\n icon={faPlay}\n className='pi-h-4 pi-w-4 pi-text-gray-700 dark:pi-text-gray-300'\n />\n </div>\n )}\n </>\n )}\n\n <div\n className='pi-w-full pi-flex-grow pi-mx-2'\n onClick={stopPropagation}\n onMouseDown={stopPropagation}\n onTouchStart={stopPropagation}\n >\n <StyledCustomRange\n data-stop-propagation={true}\n ref={progressBarRef}\n defaultValue={0}\n type='range'\n step='1'\n min='0'\n max={(trackDuration && trackDuration) || 0}\n onChange={handleProgressChange}\n className='pi-text-green-600 dark:pi-text-green-500'\n />\n </div>\n\n {!isPlayer && (\n <div\n onClick={handleDelete}\n className='pi-cursor-pointer pi-flex-none'\n data-tooltip-id='tooltip-delete-recorder-view'\n data-tooltip-content={'Delete'}\n >\n <FontAwesomeIcon\n icon={faTrash}\n className='pi-h-4 pi-w-4 pi-text-gray-700 dark:pi-text-gray-200'\n />\n </div>\n )}\n </div>\n\n {/* Time indicators */}\n <div className='pi-flex pi-justify-between pi-w-full pi-text-xs pi-mt-2 pi-mb-1'>\n <div className='pi-font-medium pi-text-gray-700 dark:pi-text-gray-200 pi-truncate pi-max-w-[45%]'>\n {timeProgress}\n </div>\n <div className='pi-font-medium pi-text-gray-700 dark:pi-text-gray-200 pi-truncate pi-max-w-[45%]'>\n {displayDuration}\n </div>\n </div>\n </div>\n )\n}\n\nexport default Progress\nexport interface ProgressTypes {\n isPlayer?: boolean\n}\n"],"names":["Progress","_a","isPlayer","_b","useSelector","state","player","audioPlayer","audioPlayerPlaying","audioPlayerTrackDuration","progressBarRef","useRef","progressAnimationRef","_c","useState","timeProgress","setTimeProgress","_d","displayDuration","setDisplayDuration","dispatch","useDispatch","_e","Math","round","trackDuration","setTrackDuration","_f","recorder","_g","isMuted","setIsMuted","progressAnimation","useCallback","currentTime","current","formatTime","value","style","setProperty","requestAnimationFrame","stopPropagation","e","handlePause","pauseAudioPlayer","setPlaying","setPaused","eventDispatch","handlePlay","startAudioPlayer","handleDelete","resetRecorded","useEffect","cancelAnimationFrame","useEventListener","data","React","createElement","className","onClick","newMuteState","muted","FontAwesomeIcon","icon","faVolumeXmark","faVolumeHigh","Fragment","faPause","faPlay","onMouseDown","onTouchStart","StyledCustomRange","ref","defaultValue","type","step","min","max","onChange","setAudioPlayerCurrentTime","faTrash"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Progress.js","sources":["../../../src/components/AudioPlayerView/Progress.tsx"],"sourcesContent":["import React, { type FC, useState, useEffect, useRef, useCallback } from 'react'\nimport { useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { formatTime } from '../../utils/genericFunctions/player'\nimport { useDispatch } from 'react-redux'\nimport { StyledCustomRange } from '../../styles/CustomRange.styles'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faPlay, faPause, faTrash, faVolumeHigh, faVolumeXmark } from '@fortawesome/free-solid-svg-icons'\nimport { eventDispatch, useEventListener } from '../../utils'\n\nconst StyledCustomRangeInput =\n StyledCustomRange as unknown as React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<'input'> & React.RefAttributes<HTMLInputElement>\n >\n\nexport const Progress: FC<ProgressTypes> = ({ isPlayer }) => {\n const { audioPlayer, audioPlayerPlaying, audioPlayerTrackDuration } = useSelector(\n (state: RootState) => state.player,\n )\n const progressBarRef = useRef<any>()\n const progressAnimationRef = useRef<any>()\n const [timeProgress, setTimeProgress] = useState<string>('00:00')\n const [displayDuration, setDisplayDuration] = useState<string>()\n const dispatch = useDispatch<Dispatch>()\n const [trackDuration, setTrackDuration] = useState<number>(\n (audioPlayerTrackDuration && Math.round(audioPlayerTrackDuration)) || 0,\n )\n const { recorded, playing } = useSelector((state: RootState) => state.recorder)\n const [isMuted, setIsMuted] = useState<boolean>(false)\n\n const progressAnimation = useCallback(() => {\n const currentTime = audioPlayer?.current?.currentTime\n currentTime && setTimeProgress(formatTime(Math.round(currentTime)))\n progressBarRef.current.value = currentTime\n trackDuration &&\n currentTime &&\n progressBarRef.current.style.setProperty(\n '--range-progress',\n `${(currentTime / trackDuration) * 100}%`,\n )\n progressAnimationRef.current = requestAnimationFrame(progressAnimation)\n }, [audioPlayer, trackDuration, progressBarRef])\n\n useEffect(() => {\n if (audioPlayerPlaying) {\n progressAnimationRef.current = requestAnimationFrame(progressAnimation)\n } else {\n cancelAnimationFrame(progressAnimationRef.current)\n }\n }, [audioPlayerPlaying])\n\n useEffect(() => {\n if (audioPlayerTrackDuration) {\n setTrackDuration(Math.round(audioPlayerTrackDuration))\n setDisplayDuration(formatTime(audioPlayerTrackDuration))\n }\n }, [audioPlayerTrackDuration])\n\n useEffect(() => {\n return () => {\n cancelAnimationFrame(progressAnimationRef.current)\n }\n }, [])\n\n function handleProgressChange() {\n dispatch.player.setAudioPlayerCurrentTime(progressBarRef.current.value)\n }\n\n function stopPropagation(e: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>) {\n e.stopPropagation()\n }\n\n function handlePause() {\n dispatch.player.pauseAudioPlayer()\n dispatch.recorder.setPlaying(false)\n dispatch.recorder.setPaused(true)\n eventDispatch('phone-island-recording-paused', {})\n }\n useEventListener('phone-island-recording-pause', (data: {}) => {\n handlePause()\n })\n\n function handlePlay() {\n dispatch.player.startAudioPlayer(() => {\n // The callback for the end event of the audio player\n dispatch.recorder.setPlaying(false)\n dispatch.recorder.setPaused(true)\n })\n dispatch.recorder.setPlaying(true)\n eventDispatch('phone-island-recording-played', {})\n }\n useEventListener('phone-island-recording-play', (data: {}) => {\n handlePlay()\n })\n\n function handleDelete() {\n dispatch.recorder.resetRecorded()\n eventDispatch('phone-island-recording-deleted', {})\n }\n useEventListener('phone-island-recording-delete', (data: {}) => {\n handleDelete()\n })\n\n function handleToggleMute() {\n if (audioPlayer?.current) {\n const newMuteState = !isMuted\n audioPlayer.current.muted = newMuteState\n setIsMuted(newMuteState)\n }\n }\n\n return (\n <div className='pi-w-full pi-h-full pi-flex pi-flex-col pi-items-center pi-justify-between pi-px-2'>\n {/* Player controls with progress bar */}\n <div className='pi-w-full pi-flex pi-items-center pi-justify-between pi-gap-2'>\n {isPlayer ? (\n <div className='pi-cursor-pointer pi-flex-none' onClick={handleToggleMute}>\n <FontAwesomeIcon\n icon={isMuted ? faVolumeXmark : faVolumeHigh}\n className='pi-h-4 pi-w-4 pi-text-gray-700 dark:pi-text-gray-300'\n />\n </div>\n ) : (\n <>\n {audioPlayerPlaying ? (\n <div\n onClick={handlePause}\n className='pi-cursor-pointer pi-flex-none'\n data-tooltip-id='tooltip-pause-recorder-view'\n data-tooltip-content={'Pause'}\n >\n <FontAwesomeIcon\n icon={faPause}\n className='pi-h-4 pi-w-4 pi-text-gray-700 dark:pi-text-gray-300'\n />\n </div>\n ) : (\n <div\n onClick={handlePlay}\n className='pi-cursor-pointer pi-flex-none'\n data-tooltip-id='tooltip-play-recorder-view'\n data-tooltip-content={'Play'}\n >\n <FontAwesomeIcon\n icon={faPlay}\n className='pi-h-4 pi-w-4 pi-text-gray-700 dark:pi-text-gray-300'\n />\n </div>\n )}\n </>\n )}\n\n <div\n className='pi-w-full pi-flex-grow pi-mx-2'\n onClick={stopPropagation}\n onMouseDown={stopPropagation}\n onTouchStart={stopPropagation}\n >\n <StyledCustomRangeInput\n data-stop-propagation={true}\n ref={progressBarRef}\n defaultValue={0}\n type='range'\n step='1'\n min='0'\n max={(trackDuration && trackDuration) || 0}\n onChange={handleProgressChange}\n className='pi-text-green-600 dark:pi-text-green-500'\n />\n </div>\n\n {!isPlayer && (\n <div\n onClick={handleDelete}\n className='pi-cursor-pointer pi-flex-none'\n data-tooltip-id='tooltip-delete-recorder-view'\n data-tooltip-content={'Delete'}\n >\n <FontAwesomeIcon\n icon={faTrash}\n className='pi-h-4 pi-w-4 pi-text-gray-700 dark:pi-text-gray-200'\n />\n </div>\n )}\n </div>\n\n {/* Time indicators */}\n <div className='pi-flex pi-justify-between pi-w-full pi-text-xs pi-mt-2 pi-mb-1'>\n <div className='pi-font-medium pi-text-gray-700 dark:pi-text-gray-200 pi-truncate pi-max-w-[45%]'>\n {timeProgress}\n </div>\n <div className='pi-font-medium pi-text-gray-700 dark:pi-text-gray-200 pi-truncate pi-max-w-[45%]'>\n {displayDuration}\n </div>\n </div>\n </div>\n )\n}\n\nexport default Progress\nexport interface ProgressTypes {\n isPlayer?: boolean\n}\n"],"names":["StyledCustomRangeInput","StyledCustomRange","Progress","_a","isPlayer","_b","useSelector","state","player","audioPlayer","audioPlayerPlaying","audioPlayerTrackDuration","progressBarRef","useRef","progressAnimationRef","_c","useState","timeProgress","setTimeProgress","_d","displayDuration","setDisplayDuration","dispatch","useDispatch","_e","Math","round","trackDuration","setTrackDuration","_f","recorder","_g","isMuted","setIsMuted","progressAnimation","useCallback","currentTime","current","formatTime","value","style","setProperty","requestAnimationFrame","stopPropagation","e","handlePause","pauseAudioPlayer","setPlaying","setPaused","eventDispatch","handlePlay","startAudioPlayer","handleDelete","resetRecorded","useEffect","cancelAnimationFrame","useEventListener","data","React","createElement","className","onClick","newMuteState","muted","FontAwesomeIcon","icon","faVolumeXmark","faVolumeHigh","Fragment","faPause","faPlay","onMouseDown","onTouchStart","ref","defaultValue","type","step","min","max","onChange","setAudioPlayerCurrentTime","faTrash"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var r=require("./Timer.js"),t=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),i=require("../../node_modules/@fortawesome/react-fontawesome/index.es.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 s=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var n=require("../AvatarGroup.js"),a=require("../../utils/genericFunctions/isEmpty.js"),o=require("../../node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs.js"),l=require("../../node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs.js"),u=require("../../node_modules/react-redux/es/hooks/useSelector.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var r=require("./Timer.js"),t=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),i=require("../../node_modules/@fortawesome/react-fontawesome/index.es.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 s=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var n=require("../AvatarGroup.js"),a=require("../../utils/genericFunctions/isEmpty.js"),o=require("../../node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs.js"),l=require("../../node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs.js"),u=require("../../node_modules/react-redux/es/hooks/useSelector.js"),p=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var m=d(e);exports.default=function(d){var c=d.isVisible,f=u.useSelector((function(e){return e.currentCall})),x=f.number,y=f.displayName,g=f.transferring,v=f.transferringName,j=f.startTime,h=f.transferringStartTime,b=f.transferCalls,q=p.useDispatch(),w=s.useTranslation().t,E=u.useSelector((function(e){return e.island})),_=E.isOpen,N=E.previousView,T=u.useSelector((function(e){return e.screenShare})),S=T.active,C=T.role,A=u.useSelector((function(e){return e.conference})),P=A.isActive,R=A.usersList,k=A.ownerInformations;return e.useEffect((function(){var e=b.find((function(e){return e.number!==x}));e&&q.currentCall.updateCurrentCall({transferringName:e.displayName,transferringStartTime:e.startTime})}),[x]),m.default.createElement(o.AnimatePresence,null,c&&m.default.createElement(l.motion.div,{className:"pi-absolute pi-w-full pi-bg-gray-700 pi-flex pi-justify-between pi-text-gray-50 dark:pi-text-gray-50 -pi-mt-10 -pi-z-10 pi-pointer-events-auto pi-items-start ".concat(_?"pi-px-6":"pi-px-4"," pi-pt-3"),style:{borderTopLeftRadius:"20px",borderTopRightRadius:"20px",height:"60px"},initial:{y:60},animate:{y:0},exit:{y:60,transitionEnd:{display:"none"}},transition:{duration:.12,ease:"easeOut"}},m.default.createElement("div",{className:"pi-font-medium pi-text-sm pi-relative"},m.default.createElement("div",{className:"pi-whitespace-nowrap pi-overflow-hidden ".concat(_&&"video"!==N?"pi-w-44":"pi-w-16")},g?v:P&&!a.isEmpty(k)?w("Conference.In conference"):P&&a.isEmpty(k)?w("Conference.Waiting for the conference"):"recorder"===N?w("Common.Record message"):"player"===N?w("Common.Play message"):y),m.default.createElement("div",{className:"pi-w-6 pi-absolute pi-right-0 pi-top-0 pi-h-full pi-bg-gradient-to-r pi-from-transparent pi-to-gray-700"})),m.default.createElement("div",{className:"pi-flex pi-gap-5"},S&&"publisher"===C&&m.default.createElement("div",{className:"pi-flex pi-gap-2 pi-font-medium pi-items-center pi-rounded-full pi-px-2 pi-py-1 pi-text-xs pi-relative -pi-top-0.5 pi-bg-emerald-700 pi-text-emerald-50"},m.default.createElement(i.FontAwesomeIcon,{icon:t.faDisplay,className:"pi-w-4 pi-h-4"}),w("Screen sharing.Sharing")),m.default.createElement("div",{className:"pi-w-16 pi-flex pi-justify-end"},P||"recorder"===N||"player"===N?m.default.createElement(n.default,{usersList:R||{},maxAvatars:5}):m.default.createElement(r.default,{size:"small",startTime:g?h:j})))))};
|
|
2
2
|
//# sourceMappingURL=BackCall.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackCall.js","sources":["../../../src/components/CallView/BackCall.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC, useEffect } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport Timer from './Timer'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { TransferCallsTypes } from '../../models/currentCall'\nimport { faDisplay } from '@fortawesome/free-solid-svg-icons'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { useTranslation } from 'react-i18next'\nimport AvatarGroup from '../AvatarGroup'\nimport { isEmpty } from '../../utils/genericFunctions/isEmpty'\n\nconst BackCall: FC<BackCallTypes> = ({ isVisible }) => {\n const {\n number,\n displayName,\n transferring,\n transferringName,\n startTime,\n transferringStartTime,\n transferCalls,\n } = useSelector((state: RootState) => state.currentCall)\n const dispatch = useDispatch<Dispatch>()\n\n const { t } = useTranslation()\n const { isOpen, previousView } = useSelector((state: RootState) => state.island)\n const { active: screenShareActive, role: screenShareRole } = useSelector(\n (state: RootState) => state.screenShare,\n )\n const { isActive, usersList, ownerInformations }: any = useSelector(\n (state: RootState) => state.conference,\n )\n\n useEffect(() => {\n const callData: TransferCallsTypes = transferCalls.find((item) => item.number !== number)\n // Handle call switch during transfer\n if (callData) {\n dispatch.currentCall.updateCurrentCall({\n transferringName: callData.displayName,\n transferringStartTime: callData.startTime,\n })\n }\n }, [number])\n\n return (\n <AnimatePresence>\n {isVisible && (\n <motion.div\n className={`pi-absolute pi-w-full pi-bg-gray-700 pi-flex pi-justify-between pi-text-gray-50 dark:pi-text-gray-50 -pi-mt-10 -pi-z-10 pi-items-start ${\n isOpen ? 'pi-px-6' : 'pi-px-4'\n } pi-pt-3`}\n style={{ borderTopLeftRadius: '20px', borderTopRightRadius: '20px', height: '60px' }}\n initial={{ y: 60 }}\n animate={{ y: 0 }}\n exit={{\n y: 60,\n transitionEnd: {\n display: 'none',\n },\n }}\n transition={{ duration: 0.12, ease: 'easeOut' }}\n >\n <div className='pi-font-medium pi-text-sm pi-relative'>\n <div\n className={`pi-whitespace-nowrap pi-overflow-hidden ${\n isOpen && previousView !== 'video' ? 'pi-w-44' : 'pi-w-16'\n }`}\n >\n {transferring\n ? transferringName\n : isActive && !isEmpty(ownerInformations)\n ? t('Conference.In conference')\n : isActive && isEmpty(ownerInformations)\n ? t('Conference.Waiting for the conference')\n : previousView === 'recorder'\n ? t('Common.Record message')\n : previousView === 'player'\n ? t('Common.Play message')\n : displayName}\n </div>\n <div className='pi-w-6 pi-absolute pi-right-0 pi-top-0 pi-h-full pi-bg-gradient-to-r pi-from-transparent pi-to-gray-700'></div>\n </div>\n <div className='pi-flex pi-gap-5'>\n {/* Screen sharing badge */}\n {screenShareActive && screenShareRole === 'publisher' && (\n <div className='pi-flex pi-gap-2 pi-font-medium pi-items-center pi-rounded-full pi-px-2 pi-py-1 pi-text-xs pi-relative -pi-top-0.5 pi-bg-emerald-700 pi-text-emerald-50'>\n <FontAwesomeIcon icon={faDisplay} className='pi-w-4 pi-h-4' />\n {t('Screen sharing.Sharing')}\n </div>\n )}\n <div className='pi-w-16 pi-flex pi-justify-end'>\n {!isActive && previousView !== 'recorder' && previousView !== 'player' ? (\n <Timer size='small' startTime={transferring ? transferringStartTime : startTime} />\n ) : (\n <AvatarGroup usersList={usersList || {}} maxAvatars={5} />\n )}\n </div>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n )\n}\n\nexport default BackCall\n\ninterface BackCallTypes {\n isVisible: boolean\n}\n"],"names":["_a","isVisible","_b","useSelector","state","currentCall","number","displayName","transferring","transferringName","startTime","transferringStartTime","transferCalls","dispatch","useDispatch","t","useTranslation","_c","island","isOpen","previousView","_d","screenShare","screenShareActive","screenShareRole","_e","conference","isActive","usersList","ownerInformations","useEffect","callData","find","item","updateCurrentCall","React","createElement","AnimatePresence","motion","div","className","concat","style","borderTopLeftRadius","borderTopRightRadius","height","initial","y","animate","exit","transitionEnd","display","transition","duration","ease","isEmpty","FontAwesomeIcon","icon","faDisplay","AvatarGroup","maxAvatars","Timer","size"],"mappings":"2zCAeoC,SAACA,GAAE,IAAAC,EAASD,EAAAC,UACxCC,EAQFC,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMC,WAAN,IAPpCC,EAAMJ,EAAAI,OACNC,EAAWL,EAAAK,YACXC,EAAYN,EAAAM,aACZC,EAAgBP,EAAAO,iBAChBC,EAASR,EAAAQ,UACTC,EAAqBT,EAAAS,sBACrBC,kBAEIC,EAAWC,EAAAA,cAETC,EAAMC,qBACRC,EAA2Bd,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMc,MAAM,IAAvEC,WAAQC,iBACVC,EAAuDlB,EAAAA,aAC3D,SAACC,GAAqB,OAAAA,EAAMkB,WAAW,IADzBC,WAAyBC,SAGnCC,EAAkDtB,EAAAA,aACtD,SAACC,GAAqB,OAAAA,EAAMsB,cADtBC,EAAQF,EAAAE,SAAEC,EAASH,EAAAG,UAAEC,EAAiBJ,EAAAI,kBAe9C,OAXAC,EAAAA,WAAU,WACR,IAAMC,EAA+BnB,EAAcoB,MAAK,SAACC,GAAS,OAAAA,EAAK3B,SAAWA,CAAhB,IAE9DyB,GACFlB,EAASR,YAAY6B,kBAAkB,CACrCzB,iBAAkBsB,EAASxB,YAC3BI,sBAAuBoB,EAASrB,WAGtC,GAAG,CAACJ,IAGF6B,EAAAA,QAACC,cAAAC,EAAeA,gBACb,KAAApC,GACCkC,EAAC,QAAAC,cAAAE,EAAAA,OAAOC,IACN,CAAAC,UAAW,
|
|
1
|
+
{"version":3,"file":"BackCall.js","sources":["../../../src/components/CallView/BackCall.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC, useEffect } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport Timer from './Timer'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { TransferCallsTypes } from '../../models/currentCall'\nimport { faDisplay } from '@fortawesome/free-solid-svg-icons'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { useTranslation } from 'react-i18next'\nimport AvatarGroup from '../AvatarGroup'\nimport { isEmpty } from '../../utils/genericFunctions/isEmpty'\n\nconst BackCall: FC<BackCallTypes> = ({ isVisible }) => {\n const {\n number,\n displayName,\n transferring,\n transferringName,\n startTime,\n transferringStartTime,\n transferCalls,\n } = useSelector((state: RootState) => state.currentCall)\n const dispatch = useDispatch<Dispatch>()\n\n const { t } = useTranslation()\n const { isOpen, previousView } = useSelector((state: RootState) => state.island)\n const { active: screenShareActive, role: screenShareRole } = useSelector(\n (state: RootState) => state.screenShare,\n )\n const { isActive, usersList, ownerInformations }: any = useSelector(\n (state: RootState) => state.conference,\n )\n\n useEffect(() => {\n const callData: TransferCallsTypes = transferCalls.find((item) => item.number !== number)\n // Handle call switch during transfer\n if (callData) {\n dispatch.currentCall.updateCurrentCall({\n transferringName: callData.displayName,\n transferringStartTime: callData.startTime,\n })\n }\n }, [number])\n\n return (\n <AnimatePresence>\n {isVisible && (\n <motion.div\n className={`pi-absolute pi-w-full pi-bg-gray-700 pi-flex pi-justify-between pi-text-gray-50 dark:pi-text-gray-50 -pi-mt-10 -pi-z-10 pi-pointer-events-auto pi-items-start ${\n isOpen ? 'pi-px-6' : 'pi-px-4'\n } pi-pt-3`}\n style={{ borderTopLeftRadius: '20px', borderTopRightRadius: '20px', height: '60px' }}\n initial={{ y: 60 }}\n animate={{ y: 0 }}\n exit={{\n y: 60,\n transitionEnd: {\n display: 'none',\n },\n }}\n transition={{ duration: 0.12, ease: 'easeOut' }}\n >\n <div className='pi-font-medium pi-text-sm pi-relative'>\n <div\n className={`pi-whitespace-nowrap pi-overflow-hidden ${\n isOpen && previousView !== 'video' ? 'pi-w-44' : 'pi-w-16'\n }`}\n >\n {transferring\n ? transferringName\n : isActive && !isEmpty(ownerInformations)\n ? t('Conference.In conference')\n : isActive && isEmpty(ownerInformations)\n ? t('Conference.Waiting for the conference')\n : previousView === 'recorder'\n ? t('Common.Record message')\n : previousView === 'player'\n ? t('Common.Play message')\n : displayName}\n </div>\n <div className='pi-w-6 pi-absolute pi-right-0 pi-top-0 pi-h-full pi-bg-gradient-to-r pi-from-transparent pi-to-gray-700'></div>\n </div>\n <div className='pi-flex pi-gap-5'>\n {/* Screen sharing badge */}\n {screenShareActive && screenShareRole === 'publisher' && (\n <div className='pi-flex pi-gap-2 pi-font-medium pi-items-center pi-rounded-full pi-px-2 pi-py-1 pi-text-xs pi-relative -pi-top-0.5 pi-bg-emerald-700 pi-text-emerald-50'>\n <FontAwesomeIcon icon={faDisplay} className='pi-w-4 pi-h-4' />\n {t('Screen sharing.Sharing')}\n </div>\n )}\n <div className='pi-w-16 pi-flex pi-justify-end'>\n {!isActive && previousView !== 'recorder' && previousView !== 'player' ? (\n <Timer size='small' startTime={transferring ? transferringStartTime : startTime} />\n ) : (\n <AvatarGroup usersList={usersList || {}} maxAvatars={5} />\n )}\n </div>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n )\n}\n\nexport default BackCall\n\ninterface BackCallTypes {\n isVisible: boolean\n}\n"],"names":["_a","isVisible","_b","useSelector","state","currentCall","number","displayName","transferring","transferringName","startTime","transferringStartTime","transferCalls","dispatch","useDispatch","t","useTranslation","_c","island","isOpen","previousView","_d","screenShare","screenShareActive","screenShareRole","_e","conference","isActive","usersList","ownerInformations","useEffect","callData","find","item","updateCurrentCall","React","createElement","AnimatePresence","motion","div","className","concat","style","borderTopLeftRadius","borderTopRightRadius","height","initial","y","animate","exit","transitionEnd","display","transition","duration","ease","isEmpty","FontAwesomeIcon","icon","faDisplay","AvatarGroup","maxAvatars","Timer","size"],"mappings":"2zCAeoC,SAACA,GAAE,IAAAC,EAASD,EAAAC,UACxCC,EAQFC,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMC,WAAN,IAPpCC,EAAMJ,EAAAI,OACNC,EAAWL,EAAAK,YACXC,EAAYN,EAAAM,aACZC,EAAgBP,EAAAO,iBAChBC,EAASR,EAAAQ,UACTC,EAAqBT,EAAAS,sBACrBC,kBAEIC,EAAWC,EAAAA,cAETC,EAAMC,qBACRC,EAA2Bd,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMc,MAAM,IAAvEC,WAAQC,iBACVC,EAAuDlB,EAAAA,aAC3D,SAACC,GAAqB,OAAAA,EAAMkB,WAAW,IADzBC,WAAyBC,SAGnCC,EAAkDtB,EAAAA,aACtD,SAACC,GAAqB,OAAAA,EAAMsB,cADtBC,EAAQF,EAAAE,SAAEC,EAASH,EAAAG,UAAEC,EAAiBJ,EAAAI,kBAe9C,OAXAC,EAAAA,WAAU,WACR,IAAMC,EAA+BnB,EAAcoB,MAAK,SAACC,GAAS,OAAAA,EAAK3B,SAAWA,CAAhB,IAE9DyB,GACFlB,EAASR,YAAY6B,kBAAkB,CACrCzB,iBAAkBsB,EAASxB,YAC3BI,sBAAuBoB,EAASrB,WAGtC,GAAG,CAACJ,IAGF6B,EAAAA,QAACC,cAAAC,EAAeA,gBACb,KAAApC,GACCkC,EAAC,QAAAC,cAAAE,EAAAA,OAAOC,IACN,CAAAC,UAAW,iKAAAC,OACTtB,EAAS,UAAY,UAAS,YAEhCuB,MAAO,CAAEC,oBAAqB,OAAQC,qBAAsB,OAAQC,OAAQ,QAC5EC,QAAS,CAAEC,EAAG,IACdC,QAAS,CAAED,EAAG,GACdE,KAAM,CACJF,EAAG,GACHG,cAAe,CACbC,QAAS,SAGbC,WAAY,CAAEC,SAAU,IAAMC,KAAM,YAEpCnB,EAAAA,QAAKC,cAAA,MAAA,CAAAI,UAAU,yCACbL,EAAAA,QAAAC,cAAA,MAAA,CACEI,UAAW,2CAAAC,OACTtB,GAA2B,UAAjBC,EAA2B,UAAY,YAGlDZ,EACGC,EACAkB,IAAa4B,EAAOA,QAAC1B,GACrBd,EAAE,4BACFY,GAAY4B,EAAOA,QAAC1B,GACpBd,EAAE,yCACe,aAAjBK,EACAL,EAAE,yBACe,WAAjBK,EACAL,EAAE,uBACFR,GAEN4B,EAAA,QAAAC,cAAA,MAAA,CAAKI,UAAU,6GAEjBL,EAAAA,QAAKC,cAAA,MAAA,CAAAI,UAAU,oBAEZjB,GAAyC,cAApBC,GACpBW,EAAA,QAAAC,cAAA,MAAA,CAAKI,UAAU,2JACbL,EAAC,QAAAC,cAAAoB,mBAAgBC,KAAMC,YAAWlB,UAAU,kBAC3CzB,EAAE,2BAGPoB,EAAA,QAAAC,cAAA,MAAA,CAAKI,UAAU,kCACXb,GAA6B,aAAjBP,GAAgD,WAAjBA,EAG3Ce,EAAAA,QAAAC,cAACuB,EAAAA,QAAW,CAAC/B,UAAWA,GAAa,CAAA,EAAIgC,WAAY,IAFrDzB,EAAC,QAAAC,cAAAyB,EAAK,QAAC,CAAAC,KAAK,QAAQpD,UAAWF,EAAeG,EAAwBD,OAUtF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react")
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.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 t=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var i=require("./DisplayNameUtils.js"),r=require("../TextScroll.js"),l=require("../../node_modules/react-redux/es/hooks/useSelector.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=n(e),s=function(e){var t,i;return{displayName:null===(t=null==e?void 0:e.currentCall)||void 0===t?void 0:t.displayName,incoming:null===(i=null==e?void 0:e.currentCall)||void 0===i?void 0:i.incoming}},u=function(e){return e.listen},a=e.memo((function(){var n=l.useSelector(s),a=n.displayName,d=n.incoming,c=l.useSelector(u),m=t.useTranslation().t,p=e.useMemo((function(){return i.getDisplayText({intrudeListenStatus:c,displayName:a,incoming:d,t:m})}),[c,a,d,m]),f=p.content,v=e.useMemo((function(){return i.getTextClassName()}),[]);return o.default.createElement("div",{className:"pi-relative pi-block pi-w-full pi-min-w-0 pi-overflow-hidden pi-whitespace-nowrap pi-text-lg pi-font-medium","data-tooltip-id":f?"tooltip-display-name":void 0,"data-tooltip-content":f||""},o.default.createElement("div",{className:"".concat(v," pi-w-full pi-min-w-0")},"scroll"===p.type?o.default.createElement(r.default,{text:f}):o.default.createElement("span",{className:"pi-block pi-max-w-full pi-truncate"},f)))}));exports.default=a;
|
|
2
2
|
//# sourceMappingURL=DisplayName.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DisplayName.js","sources":["../../../src/components/CallView/DisplayName.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, {
|
|
1
|
+
{"version":3,"file":"DisplayName.js","sources":["../../../src/components/CallView/DisplayName.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { useMemo, memo } from 'react'\nimport { RootState } from '../../store'\nimport { useSelector } from 'react-redux'\nimport { useTranslation } from 'react-i18next'\nimport { getDisplayText, getTextClassName } from './DisplayNameUtils'\nimport TextScroll from '../TextScroll'\n\nconst selectDisplayNameAndIncoming = (state: RootState) => ({\n displayName: state?.currentCall?.displayName,\n incoming: state?.currentCall?.incoming,\n})\n\nconst selectIntrudeListenStatus = (state: RootState) => state.listen\n\nconst DisplayName: React.FC<DisplayNameProps> = () => {\n const { displayName, incoming } = useSelector(selectDisplayNameAndIncoming)\n const intrudeListenStatus = useSelector(selectIntrudeListenStatus)\n\n const { t } = useTranslation()\n\n const displayTextResult = useMemo(\n () => getDisplayText({ intrudeListenStatus, displayName, incoming, t }),\n [intrudeListenStatus, displayName, incoming, t],\n )\n\n const displayText = displayTextResult.content\n\n const textClassName = useMemo(() => getTextClassName(), [])\n\n return (\n <div\n className='pi-relative pi-block pi-w-full pi-min-w-0 pi-overflow-hidden pi-whitespace-nowrap pi-text-lg pi-font-medium'\n data-tooltip-id={displayText ? 'tooltip-display-name' : undefined}\n data-tooltip-content={displayText || ''}\n >\n <div className={`${textClassName} pi-w-full pi-min-w-0`}>\n {displayTextResult.type === 'scroll' ? (\n <TextScroll text={displayText} />\n ) : (\n <span className='pi-block pi-max-w-full pi-truncate'>{displayText}</span>\n )}\n </div>\n </div>\n )\n}\n\nexport default memo(DisplayName)\n\nexport interface DisplayNameProps {}\n"],"names":["selectDisplayNameAndIncoming","state","displayName","_a","currentCall","incoming","_b","selectIntrudeListenStatus","listen","memo","useSelector","intrudeListenStatus","t","useTranslation","displayTextResult","useMemo","getDisplayText","displayText","content","textClassName","getTextClassName","React","createElement","className","undefined","concat","type","TextScroll","text"],"mappings":"o2BAUMA,EAA+B,SAACC,WAAqB,MAAC,CAC1DC,YAA+B,QAAlBC,EAAAF,eAAAA,EAAOG,mBAAW,IAAAD,OAAA,EAAAA,EAAED,YACjCG,SAA4B,QAAlBC,EAAAL,eAAAA,EAAOG,mBAAW,IAAAE,OAAA,EAAAA,EAAED,WAG1BE,EAA4B,SAACN,GAAqB,OAAAA,EAAMO,MAAN,EAkCzCC,EAAAA,EAAAA,MAhCiC,WACxC,IAAAN,EAA4BO,cAAYV,GAAtCE,EAAWC,EAAAD,YAAEG,EAAQF,EAAAE,SACvBM,EAAsBD,cAAYH,GAEhCK,EAAMC,qBAERC,EAAoBC,WACxB,WAAM,OAAAC,EAAAA,eAAe,CAAEL,oBAAmBA,EAAET,YAAWA,EAAEG,SAAQA,EAAEO,KAAI,GACvE,CAACD,EAAqBT,EAAaG,EAAUO,IAGzCK,EAAcH,EAAkBI,QAEhCC,EAAgBJ,EAAAA,SAAQ,WAAM,OAAAK,EAAAA,kBAAA,GAAoB,IAExD,OACEC,EACE,QAAAC,cAAA,MAAA,CAAAC,UAAU,8GAA6G,kBACtGN,EAAc,4BAAyBO,EAClC,uBAAAP,GAAe,IAErCI,EAAAA,QAAAC,cAAA,MAAA,CAAKC,UAAW,GAAAE,OAAGN,EAAa,0BACF,WAA3BL,EAAkBY,KACjBL,EAAA,QAAAC,cAACK,EAAAA,QAAW,CAAAC,KAAMX,IAElBI,EAAM,QAAAC,cAAA,OAAA,CAAAC,UAAU,sCAAsCN,IAKhE"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.getDisplayText=function(t){var e,n=t.intrudeListenStatus,o=t.displayName,i=t.incoming,l=t.t;return(null==n?void 0:n.isIntrude)?{type:"text",content:(e=null==n?void 0:n.isIntrudeExtension)&&""!==e?"".concat(l("Common.Intrude"),"-").concat(e):l("Common.Intrude")}:(null==n?void 0:n.isListen)?{type:"text",content:(e=null==n?void 0:n.isListenExtension)&&""!==e?"".concat(l("Common.Listen"),"-").concat(e):l("Common.Listen")}:o&&"<unknown>"===o?{type:"text",content:"PBX"}:o?{type:"scroll",content:o}:{type:"text",content:i?l("Call.Incoming call")||"-":l("Call.Outgoing call")||"-"}},exports.getTextClassName=function(){return"pi-relative pi-block pi-max-w-full pi-font-medium pi-text-primaryNeutral dark:pi-text-primaryNeutralDark"};
|
|
2
2
|
//# sourceMappingURL=DisplayNameUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DisplayNameUtils.js","sources":["../../../src/components/CallView/DisplayNameUtils.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"DisplayNameUtils.js","sources":["../../../src/components/CallView/DisplayNameUtils.tsx"],"sourcesContent":["import { TFunction } from 'i18next'\n\ninterface DisplayTextProps {\n intrudeListenStatus: any\n displayName: string | undefined\n incoming: boolean | undefined\n t: TFunction\n}\n\nexport interface DisplayTextResult {\n type: 'text' | 'scroll'\n content: string\n}\n\nexport const getDisplayText = ({\n intrudeListenStatus,\n displayName,\n incoming,\n t,\n}: DisplayTextProps): DisplayTextResult => {\n if (intrudeListenStatus?.isIntrude) {\n const extension = intrudeListenStatus?.isIntrudeExtension\n return {\n type: 'text',\n content:\n extension && extension !== ''\n ? `${t('Common.Intrude')}-${extension}`\n : t('Common.Intrude'),\n }\n }\n\n if (intrudeListenStatus?.isListen) {\n const extension = intrudeListenStatus?.isListenExtension\n return {\n type: 'text',\n content:\n extension && extension !== '' ? `${t('Common.Listen')}-${extension}` : t('Common.Listen'),\n }\n }\n\n if (displayName && displayName === '<unknown>') {\n return { type: 'text', content: 'PBX' }\n }\n\n if (displayName) {\n return { type: 'scroll', content: displayName }\n }\n\n return {\n type: 'text',\n content: incoming ? t('Call.Incoming call') || '-' : t('Call.Outgoing call') || '-',\n }\n}\n\nexport const getTextClassName = () =>\n 'pi-relative pi-block pi-max-w-full pi-font-medium pi-text-primaryNeutral dark:pi-text-primaryNeutralDark'\n"],"names":["_a","extension","intrudeListenStatus","displayName","incoming","t","isIntrude","type","content","isIntrudeExtension","concat","isListen","isListenExtension"],"mappings":"2FAc8B,SAACA,OAkBrBC,EAjBRC,EAAmBF,EAAAE,oBACnBC,EAAWH,EAAAG,YACXC,EAAQJ,EAAAI,SACRC,EAACL,EAAAK,EAED,OAAIH,eAAAA,EAAqBI,WAEhB,CACLC,KAAM,OACNC,SAHIP,EAAYC,aAAA,EAAAA,EAAqBO,qBAIR,KAAdR,EACT,UAAGI,EAAE,kBAAiB,KAAAK,OAAIT,GAC1BI,EAAE,oBAIRH,eAAAA,EAAqBS,UAEhB,CACLJ,KAAM,OACNC,SAHIP,EAAYC,aAAA,EAAAA,EAAqBU,oBAIR,KAAdX,EAAmB,GAAGS,OAAAL,EAAE,iBAAoB,KAAAK,OAAAT,GAAcI,EAAE,kBAI3EF,GAA+B,cAAhBA,EACV,CAAEI,KAAM,OAAQC,QAAS,OAG9BL,EACK,CAAEI,KAAM,SAAUC,QAASL,GAG7B,CACLI,KAAM,OACNC,QAASJ,EAAWC,EAAE,uBAAyB,IAAMA,EAAE,uBAAyB,IAEpF,2BAEgC,WAC9B,MAAA,0GAAA"}
|
|
@@ -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 r=require("../../styles/Island.styles.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 t=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var s=require("../../node_modules/react-redux/es/hooks/useSelector.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=n(e);exports.default=function(){var e=s.useSelector((function(e){return e.currentCall})).number,n=s.useSelector((function(e){return e.island})).isOpen,
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var r=require("../../styles/Island.styles.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 t=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var s=require("../../node_modules/react-redux/es/hooks/useSelector.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=n(e);exports.default=function(){var e=s.useSelector((function(e){return e.currentCall})).number,n=s.useSelector((function(e){return e.island})).isOpen,l=t.useTranslation().t,o="unknown"===e?l("TextScroll.unknown"):e||l("Call.In progress...")||"-";return u.default.createElement(r.StyledNumber,{isOpen:n},u.default.createElement("span",{className:"dark:pi-text-gray-50 pi-text-gray-600"},o))};
|
|
2
2
|
//# sourceMappingURL=Number.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Number.js","sources":["../../../src/components/CallView/Number.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\nimport { StyledNumber } from '../../styles/Island.styles'\nimport { useTranslation } from 'react-i18next'\n\nconst Number: FC = () => {\n const { number } = useSelector((state: RootState) => state.currentCall)\n const { isOpen } = useSelector((state: RootState) => state.island)\n const { t } = useTranslation()\n\n const displayNumber =\n number === 'unknown' ? t('TextScroll.unknown') : number || t('Call.In progress...') || '-'\n\n return (\n <StyledNumber isOpen={isOpen} className='dark:pi-text-gray-50 pi-text-gray-600'
|
|
1
|
+
{"version":3,"file":"Number.js","sources":["../../../src/components/CallView/Number.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\nimport { StyledNumber } from '../../styles/Island.styles'\nimport { useTranslation } from 'react-i18next'\n\nconst Number: FC = () => {\n const { number } = useSelector((state: RootState) => state.currentCall)\n const { isOpen } = useSelector((state: RootState) => state.island)\n const { t } = useTranslation()\n\n const displayNumber =\n number === 'unknown' ? t('TextScroll.unknown') : number || t('Call.In progress...') || '-'\n\n return (\n <StyledNumber isOpen={isOpen}>\n <span className='dark:pi-text-gray-50 pi-text-gray-600'>{displayNumber}</span>\n </StyledNumber>\n )\n}\n\nexport default Number\n"],"names":["number","useSelector","state","currentCall","isOpen","island","t","useTranslation","displayNumber","React","createElement","StyledNumber","className"],"mappings":"k2BASmB,WACT,IAAAA,EAAWC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,sBACnDC,EAAWH,eAAY,SAACC,GAAqB,OAAAA,EAAMG,iBACnDC,EAAMC,qBAERC,EACO,YAAXR,EAAuBM,EAAE,sBAAwBN,GAAUM,EAAE,wBAA0B,IAEzF,OACEG,EAAC,QAAAC,cAAAC,EAAYA,aAAC,CAAAP,OAAQA,GACpBK,EAAM,QAAAC,cAAA,OAAA,CAAAE,UAAU,yCAAyCJ,GAG/D"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),i=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),n=require("../../utils/streaming/streamingUtils.js"),a=require("../../lib/phone/call.js");require("../../node_modules/tslib/tslib.es6.js"),require("../../store/index.js"),require("../../node_modules/socket.io-client/build/esm/index.js");var r=require("../../lib/user/default_device.js");require("../../node_modules/mic-check/lib/index.js"),require("../../lib/webrtc/janus.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../Island.js");var l=require("../Button.js"),s=require("../AudioBars.js");require("../../node_modules/i18next/dist/esm/i18next.js");var o=require("../CustomThemedTooltip.js");require("../TranscriptionView/TranscriptionView.js");var u=require("./Timer.js"),c=require("./Number.js"),d=require("./DisplayName.js"),p=require("./Avatar.js"),m=require("./Actions.js"),f=require("../Hangup.js");require("../../node_modules/@babel/runtime/helpers/defineProperty.js"),require("../../node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../../node_modules/@babel/runtime/helpers/typeof.js"),require("../../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../../node_modules/react-i18next/dist/es/context.js");var g=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var v=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),x=require("../StreamingImage/index.js"),E=require("../VideoStreamingSkeleton/index.js"),j=require("../VideoStreamingEmptyState/index.js"),w=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),h=require("../../node_modules/react-redux/es/hooks/useSelector.js");function b(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var q=b(e);function N(e,t){return!e&&!t}var y=e.memo((function(e){var t=e.children;return q.default.createElement("div",{className:"pi-grid pi-self-center pi-gap-1 pi-grid-cols-1 pi-grid-rows-2"},t)}));y.displayName="Details";var _=e.memo((function(){var b,_=g.useTranslation().t,T=w.useDispatch(),A=h.useSelector((function(e){return e.currentCall})),k=A.incoming,C=A.accepted,S=A.outgoing,I=A.startTime,F=A.paused,P=A.number,O=A.isRecording,M=A.username,U=A.streamingSourceNumber,B=h.useSelector((function(e){return e.island})),L=B.isOpen,V=B.isFromStreaming,W=h.useSelector((function(e){return e.webrtc})).remoteAudioStream,z=h.useSelector((function(e){return e.listen})),D=z.isListen,H=z.isIntrude,R=z.isListenExtension,G=z.isIntrudeExtension,J=h.useSelector((function(e){return e.alerts})).data,K=h.useSelector((function(e){return e.currentUser})),Q=h.useSelector((function(e){return e.streaming})),X=Q.videoSources,Y=Q.sourceImages,Z=e.useMemo((function(){return Object.values(J).filter((function(e){return e.active}))}),[J]),$=e.useMemo((function(){return Z.length>0?Z[Z.length-1]:null}),[Z]),ee=e.useMemo((function(){return V&&U&&!C}),[V,U,C]),te=e.useMemo((function(){if(!U||!X)return{canUnlock:!1,tooltipText:""};var e=Object.values(X).find((function(e){return(null==e?void 0:e.extension)===U})),t=Boolean((null==e?void 0:e.cmdOpen)&&""!==(null==e?void 0:e.cmdOpen.trim()));return{canUnlock:t,tooltipText:t&&e?"".concat(_("VideoStreaming.Open"),": ").concat(null==e?void 0:e.description):""}}),[U,X,_]),ie=e.useMemo((function(){return""!==M&&"undefined"!==M}),[M]),ne=e.useCallback((function(){var e;return q.default.createElement("div",{className:"pi-text-gray-600 dark:pi-text-gray-300 pi-font-normal pi-text-sm pi-flex pi-items-center pi-truncate"},q.default.createElement(t.FontAwesomeIcon,{size:"sm",icon:v.faOfficePhone,className:"pi-mr-1"}),q.default.createElement("span",{className:"pi-max-w-16 pi-truncate"},(null===(e=null==K?void 0:K.default_device)||void 0===e?void 0:e.description)||_("Common.Physical phone")))}),[null===(b=null==K?void 0:K.default_device)||void 0===b?void 0:b.description,_]),ae=e.useCallback((function(e){var n=L?"pi-h-12 pi-w-12":"pi-h-6 pi-w-6",a=L?"pi-h-8":"pi-h-4 pi-w-4 pi-rounded-full",r=L?"pi-w-8 pi-h-8":"pi-h-6 pi-w-6",l="red"===e?"pi-bg-red-400":"pi-bg-green-400",s="red"===e?"pi-text-red-500":"pi-text-green-500";return q.default.createElement("div",{className:"".concat(n," pi-flex pi-justify-center pi-items-center")},q.default.createElement("div",{className:"".concat(a," pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden")},q.default.createElement("span",{className:"".concat(r," pi-animate-ping pi-absolute pi-inline-flex pi-rounded-full ").concat(l," pi-opacity-75")}),q.default.createElement(t.FontAwesomeIcon,{className:"pi-w-4 pi-h-6 pi-rotate-45 ".concat(s),icon:i.faCircle})))}),[L]),re=e.useMemo((function(){var e="pi-grid pi-items-center";return L&&(e="pi-grid pi-items-start",C?e+=" pi-grid-rows-[72px_1fr]":k?e+=" pi-grid-cols-[256px_114px]":S&&(e+=" pi-grid-cols-[1fr_84px]")),ee?"pi-flex pi-flex-col":e}),[L,C,k,S,ee]),le=e.useMemo((function(){return"pi-grid ".concat(L&&!C&&S?"pi-grid-cols-[48px_1fr]":L&&!C&&k?"pi-grid-cols-[48px_1fr_1px]":L&&C?"pi-grid-cols-[48px_164px_48px]":L||C?"pi-grid-cols-[24px_66px_24px]":"pi-grid-cols-[24px_102px]"," pi-gap-").concat(L?"5":"3"," pi-items-").concat(L?"start":"center"," pi-justify-center pi-w-full")}),[L,C,k,S]),se=e.useMemo((function(){return ee?"pi-grid-cols-3":N(S,C)?"pi-grid-cols-2":C?"pi-grid-cols-1 pi-justify-items-center":"pi-grid-cols-1 pi-justify-items-end"}),[ee,S,C]),oe=e.useCallback((function(){var e=L?"pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover":"pi-relative pi-z-30 pi-h-6 pi-w-6 pi-rounded-sm pi-bg-cover";return D?q.default.createElement(t.FontAwesomeIcon,{className:e,icon:i.faEarListen}):H?q.default.createElement(t.FontAwesomeIcon,{className:e,icon:i.faHandPointUp}):""!==P&&ie?q.default.createElement(p.default,null):k&&!ie?q.default.createElement(t.FontAwesomeIcon,{className:"".concat(e," pi--rotate-45"),icon:i.faArrowLeft}):!C||S||ie?S&&!ie?q.default.createElement(t.FontAwesomeIcon,{className:"".concat(e," pi-rotate-[135deg]"),icon:i.faArrowLeft}):null:q.default.createElement(t.FontAwesomeIcon,{className:"".concat(e," pi--rotate-45"),icon:i.faArrowLeft})}),[L,D,H,P,ie,k,S,C]),ue=e.useCallback((function(){return L?H?q.default.createElement(y,null,q.default.createElement("span",{className:"pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base"},_("Common.Intrude"),G?" - ".concat(G):""),C?r.isPhysical()?ne():q.default.createElement(u.default,{startTime:I,isNotAlwaysWhite:!0}):G?"".concat(G):""):D?q.default.createElement(y,null,q.default.createElement("span",{className:"pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base"},_("Common.Listen"),R?" - ".concat(R):""),C?r.isPhysical()?ne():q.default.createElement(u.default,{startTime:I,isNotAlwaysWhite:!0}):R?"".concat(R):""):q.default.createElement(y,null,q.default.createElement(d.default,null),C?r.isPhysical()?ne():q.default.createElement(u.default,{startTime:I,isNotAlwaysWhite:!0}):q.default.createElement(c.default,null)):null}),[L,H,D,C,I,G,R,_,ne]),ce=e.useCallback((function(){return C&&O?ae("red"):C&&W&&!r.isPhysical()?q.default.createElement(s.AudioBars,{audioStream:W,paused:F,size:L?"large":"small"}):C&&r.isPhysical()?ae("green"):null}),[C,O,W,L,F,ae]),de=e.useCallback((function(){if(!X||0===Object.keys(X).length||!U)return q.default.createElement(E.default,{className:"pi-w-full pi-h-40 pi-mt-4"});var e=Object.values(X).find((function(e){return e.extension===U}));return e&&(Y[e.id]||e.image)?q.default.createElement(x.default,null):q.default.createElement(j.default,{className:"pi-w-full pi-h-40 pi-mt-4"})}),[U,X,Y]);if(null!==$)return null;return q.default.createElement("div",{className:"pi-bg-red pi-content-center pi-justify-center"},q.default.createElement("div",{className:re},ee?q.default.createElement(q.default.Fragment,null,q.default.createElement("div",{className:"pi-flex pi-items-center pi-justify-between"},q.default.createElement("div",{className:"pi-flex pi-items-center pi-gap-4"},oe(),q.default.createElement("div",{className:"pi-flex pi-flex-col pi-justify-center pi-space-y-2"},q.default.createElement(d.default,null),q.default.createElement(c.default,null))),q.default.createElement("div",{className:"pi-flex pi-gap-2"},q.default.createElement(f.default,{description:_("Tooltip.Hangup")}),!S&&q.default.createElement(l.Button,{onClick:function(){return a.answerIncomingCall(),void setTimeout((function(){T.island.setIslandView("streamingAnswer")}),200)},variant:"green","data-tooltip-id":"tooltip-answer","data-tooltip-content":_("Tooltip.Answer")||""},q.default.createElement(t.FontAwesomeIcon,{className:"pi-w-5 pi-h-5",icon:i.faPhone})),(null==te?void 0:te.canUnlock)&&q.default.createElement(l.Button,{variant:"default",onClick:n.handleStreamingUnlock,"data-tooltip-id":"tooltip-unlock","data-tooltip-content":null==te?void 0:te.tooltipText},q.default.createElement(t.FontAwesomeIcon,{className:"pi-w-5 pi-h-5",icon:i.faUnlock})))),de()):q.default.createElement(q.default.Fragment,null,q.default.createElement("div",{className:le},oe(),ue(),!L&&!C&&q.default.createElement(d.default,null),!L&&C&&q.default.createElement(u.default,{startTime:I,isNotAlwaysWhite:!0}),ce()),L&&q.default.createElement(q.default.Fragment,null,q.default.createElement("div",{className:"".concat(D||H?"":"pi-grid pi-gap-y-5")},C&&q.default.createElement(m.default,null),q.default.createElement("div",{className:"pi-grid ".concat(se," pi-gap-3.5")},q.default.createElement(f.default,{description:_("Tooltip.Hangup and transfer")}),N(S,C)&&q.default.createElement(l.Button,{onClick:a.answerIncomingCall,variant:"green","data-tooltip-id":"tooltip-answer-left","data-tooltip-content":_("Tooltip.Answer")||""},q.default.createElement(t.FontAwesomeIcon,{className:"pi-w-6 pi-h-6",icon:i.faPhone}))))))),q.default.createElement(o.CustomThemedTooltip,{id:"tooltip-answer-left",place:"left"}),q.default.createElement(o.CustomThemedTooltip,{id:"tooltip-answer",place:"left"}),q.default.createElement(o.CustomThemedTooltip,{id:"tooltip-unlock",place:"left"}))}));exports.default=_;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),i=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),n=require("../../utils/streaming/streamingUtils.js"),a=require("../../lib/phone/call.js");require("../../node_modules/tslib/tslib.es6.js"),require("../../store/index.js"),require("../../node_modules/socket.io-client/build/esm/index.js");var l=require("../../lib/user/default_device.js");require("../../node_modules/mic-check/lib/index.js"),require("../../lib/webrtc/janus.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../Island.js");var r=require("../Button.js"),o=require("../AudioBars.js");require("../../node_modules/i18next/dist/esm/i18next.js");var s=require("../CustomThemedTooltip.js");require("../TranscriptionView/TranscriptionView.js");var u=require("./Timer.js"),c=require("./Number.js"),d=require("./DisplayName.js"),p=require("./Avatar.js"),m=require("./Actions.js"),f=require("../Hangup.js");require("../../node_modules/@babel/runtime/helpers/defineProperty.js"),require("../../node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../../node_modules/@babel/runtime/helpers/typeof.js"),require("../../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../../node_modules/react-i18next/dist/es/context.js");var g=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var v=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),E=require("../StreamingImage/index.js"),x=require("../VideoStreamingSkeleton/index.js"),w=require("../VideoStreamingEmptyState/index.js"),j=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),h=require("../../node_modules/react-redux/es/hooks/useSelector.js");function b(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var N=b(e);function q(e,t){return!e&&!t}var y=e.memo((function(e){var t=e.children;return N.default.createElement("div",{className:"pi-grid pi-min-w-0 pi-self-center pi-gap-1 pi-grid-cols-1 pi-grid-rows-2"},t)}));y.displayName="Details";var _=e.memo((function(e){var n=e.label,a=e.tooltipContent;return n?N.default.createElement("span",{className:"pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-text-iconSecondary","data-tooltip-id":a?"tooltip-queue":void 0,"data-tooltip-content":a||""},N.default.createElement(t.FontAwesomeIcon,{icon:i.faUsers,className:"pi-h-4 pi-w-4"})):null}));_.displayName="QueueBadge";var T=e.memo((function(){var b,T=g.useTranslation().t,A=j.useDispatch(),k=h.useSelector((function(e){return e.currentCall})),C=k.incoming,S=k.accepted,I=k.outgoing,F=k.startTime,P=k.paused,M=k.number,O=k.isRecording,U=k.username,B=k.streamingSourceNumber,L=k.queueName,V=k.queueNumber,W=k.throughQueue,z=h.useSelector((function(e){return e.island})),D=z.isOpen,H=z.isFromStreaming,Q=h.useSelector((function(e){return e.webrtc})).remoteAudioStream,R=h.useSelector((function(e){return e.listen})),G=R.isListen,J=R.isIntrude,K=R.isListenExtension,X=R.isIntrudeExtension,Y=h.useSelector((function(e){return e.alerts})).data,Z=h.useSelector((function(e){return e.currentUser})),$=h.useSelector((function(e){return e.streaming})),ee=$.videoSources,te=$.sourceImages,ie=e.useMemo((function(){return Object.values(Y).filter((function(e){return e.active}))}),[Y]),ne=e.useMemo((function(){return ie.length>0?ie[ie.length-1]:null}),[ie]),ae=e.useMemo((function(){return H&&B&&!S}),[H,B,S]),le=e.useMemo((function(){if(!B||!ee)return{canUnlock:!1,tooltipText:""};var e=Object.values(ee).find((function(e){return(null==e?void 0:e.extension)===B})),t=Boolean((null==e?void 0:e.cmdOpen)&&""!==(null==e?void 0:e.cmdOpen.trim()));return{canUnlock:t,tooltipText:t&&e?"".concat(T("VideoStreaming.Open"),": ").concat(null==e?void 0:e.description):""}}),[B,ee,T]),re=e.useMemo((function(){return""!==U&&"undefined"!==U}),[U]),oe=e.useMemo((function(){return L||V||""}),[L,V]),se=e.useMemo((function(){return W&&oe?"".concat(T("Common.Queue"),": ").concat(oe):""}),[W,oe,T]),ue=e.useCallback((function(){var e;return N.default.createElement("div",{className:"pi-text-gray-600 dark:pi-text-gray-300 pi-font-normal pi-text-sm pi-flex pi-items-center pi-truncate"},N.default.createElement(t.FontAwesomeIcon,{size:"sm",icon:v.faOfficePhone,className:"pi-mr-1"}),N.default.createElement("span",{className:"pi-max-w-16 pi-truncate"},(null===(e=null==Z?void 0:Z.default_device)||void 0===e?void 0:e.description)||T("Common.Physical phone")))}),[null===(b=null==Z?void 0:Z.default_device)||void 0===b?void 0:b.description,T]),ce=e.useCallback((function(e){var n=D?"pi-h-12 pi-w-12":"pi-h-6 pi-w-6",a=D?"pi-h-8":"pi-h-4 pi-w-4 pi-rounded-full",l=D?"pi-w-8 pi-h-8":"pi-h-6 pi-w-6",r="red"===e?"pi-bg-red-400":"pi-bg-green-400",o="red"===e?"pi-text-red-500":"pi-text-green-500";return N.default.createElement("div",{className:"".concat(n," pi-flex pi-justify-center pi-items-center")},N.default.createElement("div",{className:"".concat(a," pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden")},N.default.createElement("span",{className:"".concat(l," pi-animate-ping pi-absolute pi-inline-flex pi-rounded-full ").concat(r," pi-opacity-75")}),N.default.createElement(t.FontAwesomeIcon,{className:"pi-w-4 pi-h-6 pi-rotate-45 ".concat(o),icon:i.faCircle})))}),[D]),de=e.useMemo((function(){var e="pi-grid pi-items-center";return D&&(e="pi-grid pi-items-start",S?e+=" pi-grid-rows-[72px_1fr]":C?e+=" pi-grid-cols-[256px_114px]":I&&(e+=" pi-grid-cols-[1fr_84px]")),ae?"pi-flex pi-flex-col":e}),[D,S,C,I,ae]),pe=e.useMemo((function(){return"pi-grid ".concat(D&&!S&&I?"pi-grid-cols-[48px_1fr]":D&&!S&&C?"pi-grid-cols-[48px_1fr_1px]":D&&S?"pi-grid-cols-[48px_164px_48px]":D||S?"pi-grid-cols-[24px_66px_24px]":"pi-grid-cols-[24px_102px]"," pi-gap-").concat(D?"5":"3"," pi-items-").concat(D?"start":"center"," pi-justify-center pi-w-full")}),[D,S,C,I]),me=e.useMemo((function(){return ae?"pi-grid-cols-3":q(I,S)?"pi-grid-cols-2":S?"pi-grid-cols-1 pi-justify-items-center":"pi-grid-cols-1 pi-justify-items-end"}),[ae,I,S]),fe=e.useCallback((function(){var e=D?"pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover":"pi-relative pi-z-30 pi-h-6 pi-w-6 pi-rounded-sm pi-bg-cover";return G?N.default.createElement(t.FontAwesomeIcon,{className:e,icon:i.faEarListen}):J?N.default.createElement(t.FontAwesomeIcon,{className:e,icon:i.faHandPointUp}):""!==M&&re?N.default.createElement(p.default,null):C&&!re?N.default.createElement(t.FontAwesomeIcon,{className:"".concat(e," pi--rotate-45"),icon:i.faArrowLeft}):!S||I||re?I&&!re?N.default.createElement(t.FontAwesomeIcon,{className:"".concat(e," pi-rotate-[135deg]"),icon:i.faArrowLeft}):null:N.default.createElement(t.FontAwesomeIcon,{className:"".concat(e," pi--rotate-45"),icon:i.faArrowLeft})}),[D,G,J,M,re,C,I,S]),ge=e.useCallback((function(){return D?J?N.default.createElement(y,null,N.default.createElement("span",{className:"pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base"},T("Common.Intrude"),X?" - ".concat(X):""),S?l.isPhysical()?ue():N.default.createElement(u.default,{startTime:F,isNotAlwaysWhite:!0}):X?"".concat(X):""):G?N.default.createElement(y,null,N.default.createElement("span",{className:"pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base"},T("Common.Listen"),K?" - ".concat(K):""),S?l.isPhysical()?ue():N.default.createElement(u.default,{startTime:F,isNotAlwaysWhite:!0}):K?"".concat(K):""):N.default.createElement(y,null,S&&W&&oe?N.default.createElement("div",{className:"pi-flex pi-min-w-0 pi-items-center pi-gap-2"},N.default.createElement("div",{className:"pi-min-w-0 pi-flex-1"},N.default.createElement(d.default,null)),N.default.createElement(_,{label:oe,tooltipContent:se})):N.default.createElement(d.default,null),S?l.isPhysical()?ue():N.default.createElement(u.default,{startTime:F,isNotAlwaysWhite:!0}):N.default.createElement(c.default,null)):null}),[D,J,G,S,F,X,K,T,ue,S,W,oe,se]),ve=e.useCallback((function(){return S&&O?ce("red"):S&&Q&&!l.isPhysical()?N.default.createElement(o.AudioBars,{audioStream:Q,paused:P,size:D?"large":"small"}):S&&l.isPhysical()?ce("green"):null}),[S,O,Q,D,P,ce]),Ee=e.useCallback((function(){if(!ee||0===Object.keys(ee).length||!B)return N.default.createElement(x.default,{className:"pi-w-full pi-h-40 pi-mt-4"});var e=Object.values(ee).find((function(e){return e.extension===B}));return e&&(te[e.id]||e.image)?N.default.createElement(E.default,null):N.default.createElement(w.default,{className:"pi-w-full pi-h-40 pi-mt-4"})}),[B,ee,te]);if(null!==ne)return null;return N.default.createElement("div",{className:"pi-bg-red pi-content-center pi-justify-center"},N.default.createElement("div",{className:de},ae?N.default.createElement(N.default.Fragment,null,N.default.createElement("div",{className:"pi-flex pi-items-center pi-justify-between"},N.default.createElement("div",{className:"pi-flex pi-items-center pi-gap-4"},fe(),N.default.createElement("div",{className:"pi-flex pi-flex-col pi-justify-center pi-space-y-2"},N.default.createElement(d.default,null),N.default.createElement(c.default,null))),N.default.createElement("div",{className:"pi-flex pi-gap-2"},N.default.createElement(f.default,{description:T("Tooltip.Hangup")}),!I&&N.default.createElement(r.Button,{onClick:function(){return a.answerIncomingCall(),void setTimeout((function(){A.island.setIslandView("streamingAnswer")}),200)},variant:"green","data-tooltip-id":"tooltip-answer","data-tooltip-content":T("Tooltip.Answer")||""},N.default.createElement(t.FontAwesomeIcon,{className:"pi-w-5 pi-h-5",icon:i.faPhone})),(null==le?void 0:le.canUnlock)&&N.default.createElement(r.Button,{variant:"default",onClick:n.handleStreamingUnlock,"data-tooltip-id":"tooltip-unlock","data-tooltip-content":null==le?void 0:le.tooltipText},N.default.createElement(t.FontAwesomeIcon,{className:"pi-w-5 pi-h-5",icon:i.faUnlock})))),Ee()):N.default.createElement(N.default.Fragment,null,N.default.createElement("div",{className:pe},fe(),ge(),!D&&!S&&N.default.createElement(d.default,null),!D&&S&&N.default.createElement(u.default,{startTime:F,isNotAlwaysWhite:!0}),ve()),D&&N.default.createElement(N.default.Fragment,null,N.default.createElement("div",{className:"".concat(G||J?"":"pi-grid pi-gap-y-5")},S&&N.default.createElement(m.default,null),N.default.createElement("div",{className:"pi-grid ".concat(me," pi-gap-3.5")},N.default.createElement(f.default,{description:T("Tooltip.Hangup and transfer")}),q(I,S)&&N.default.createElement(r.Button,{onClick:a.answerIncomingCall,variant:"green","data-tooltip-id":"tooltip-answer-left","data-tooltip-content":T("Tooltip.Answer")||""},N.default.createElement(t.FontAwesomeIcon,{className:"pi-w-6 pi-h-6",icon:i.faPhone}))))))),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-answer-left",place:"left"}),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-answer",place:"left"}),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-unlock",place:"left"}),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-display-name",place:"bottom"}),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-queue",place:"bottom"}))}));exports.default=T;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/CallView/index.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useMemo, useCallback, memo } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState, Dispatch } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faPhone,\n faEarListen,\n faHandPointUp,\n faArrowLeft,\n faCircle,\n faUnlock,\n} from '@fortawesome/free-solid-svg-icons'\nimport { Button } from '../'\nimport Timer from './Timer'\nimport Number from './Number'\nimport DisplayName from './DisplayName'\nimport { AudioBars } from '../'\nimport { answerIncomingCall } from '../../lib/phone/call'\nimport Avatar from './Avatar'\nimport Actions from './Actions'\nimport Hangup from '../Hangup'\nimport { useTranslation } from 'react-i18next'\nimport { faOfficePhone } from '@nethesis/nethesis-solid-svg-icons'\nimport { isPhysical } from '../../lib/user/default_device'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\nimport StreamingImage from '../StreamingImage'\nimport VideoStreamingSkeleton from '../VideoStreamingSkeleton'\nimport VideoStreamingEmptyState from '../VideoStreamingEmptyState'\nimport { handleStreamingUnlock } from '../../utils'\nimport { useDispatch } from 'react-redux'\n\nfunction isAnswerVisible(outgoing: boolean, accepted: boolean): boolean {\n return !outgoing && !accepted\n}\n\nconst Details = memo(({ children }: { children: React.ReactNode }) => (\n <div className='pi-grid pi-self-center pi-gap-1 pi-grid-cols-1 pi-grid-rows-2'>{children}</div>\n))\nDetails.displayName = 'Details'\n\n/**\n * The main view to manage calls, the starting point for calls actions flows\n */\nconst CallView: FC<CallViewProps> = () => {\n const { t } = useTranslation()\n const dispatch = useDispatch<Dispatch>()\n\n const currentCall = useSelector((state: RootState) => state.currentCall)\n const {\n incoming,\n accepted,\n outgoing,\n startTime,\n paused,\n number,\n isRecording,\n username,\n streamingSourceNumber,\n } = currentCall\n\n const { isOpen, isFromStreaming } = useSelector((state: RootState) => state.island)\n const { remoteAudioStream } = useSelector((state: RootState) => state.webrtc)\n const listenState = useSelector((state: RootState) => state.listen)\n const { isListen, isIntrude, isListenExtension, isIntrudeExtension } = listenState\n const { data: alertsData } = useSelector((state: RootState) => state.alerts)\n const currentUser = useSelector((state: RootState) => state.currentUser)\n const { videoSources, sourceImages } = useSelector((state: RootState) => state.streaming)\n\n const activeAlerts = useMemo(\n () => Object.values(alertsData).filter((alert: any) => alert.active),\n [alertsData],\n )\n\n const latestAlert = useMemo(\n () => (activeAlerts.length > 0 ? activeAlerts[activeAlerts.length - 1] : null),\n [activeAlerts],\n )\n\n const shouldShowStreamingImage = useMemo(\n () => isFromStreaming && streamingSourceNumber && !accepted,\n [isFromStreaming, streamingSourceNumber, accepted],\n )\n\n // Check if unlock button should be shown and get tooltip text\n const unlockData = useMemo(() => {\n if (!streamingSourceNumber || !videoSources) return { canUnlock: false, tooltipText: '' }\n\n const source = Object.values(videoSources).find(\n (source) => source?.extension === streamingSourceNumber,\n )\n\n const canUnlock = Boolean(source?.cmdOpen && source?.cmdOpen.trim() !== '')\n const tooltipText = canUnlock && source ? `${t('VideoStreaming.Open')}: ${source?.description}` : ''\n\n return { canUnlock, tooltipText }\n }, [streamingSourceNumber, videoSources, t])\n\n const hasValidUsername = useMemo(() => username !== '' && username !== 'undefined', [username])\n\n const renderLandlinePhoneDiv = useCallback(\n () => (\n <div className='pi-text-gray-600 dark:pi-text-gray-300 pi-font-normal pi-text-sm pi-flex pi-items-center pi-truncate'>\n <FontAwesomeIcon size='sm' icon={faOfficePhone} className='pi-mr-1' />\n <span className='pi-max-w-16 pi-truncate'>\n {currentUser?.default_device?.description || t('Common.Physical phone')}\n </span>\n </div>\n ),\n [currentUser?.default_device?.description, t],\n )\n\n const renderPulseIcon = useCallback(\n (color: string) => {\n const sizeClasses = !isOpen ? 'pi-h-6 pi-w-6' : 'pi-h-12 pi-w-12'\n const innerSizeClasses = !isOpen ? 'pi-h-4 pi-w-4 pi-rounded-full' : 'pi-h-8'\n const animationSizeClasses = !isOpen ? 'pi-h-6 pi-w-6' : 'pi-w-8 pi-h-8'\n const colorClasses = color === 'red' ? 'pi-bg-red-400' : 'pi-bg-green-400'\n const textColorClasses = color === 'red' ? 'pi-text-red-500' : 'pi-text-green-500'\n\n return (\n <div className={`${sizeClasses} pi-flex pi-justify-center pi-items-center`}>\n <div\n className={`${innerSizeClasses} pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden`}\n >\n <span\n className={`${animationSizeClasses} pi-animate-ping pi-absolute pi-inline-flex pi-rounded-full ${colorClasses} pi-opacity-75`}\n ></span>\n <FontAwesomeIcon\n className={`pi-w-4 pi-h-6 pi-rotate-45 ${textColorClasses}`}\n icon={faCircle}\n />\n </div>\n </div>\n )\n },\n [isOpen],\n )\n\n const callViewClasses = useMemo(() => {\n let baseClasses = 'pi-grid pi-items-center'\n\n if (isOpen) {\n baseClasses = 'pi-grid pi-items-start'\n\n if (accepted) {\n baseClasses += ' pi-grid-rows-[72px_1fr]'\n } else if (incoming) {\n baseClasses += ' pi-grid-cols-[256px_114px]'\n } else if (outgoing) {\n baseClasses += ' pi-grid-cols-[1fr_84px]'\n }\n }\n\n return shouldShowStreamingImage ? 'pi-flex pi-flex-col' : baseClasses\n }, [isOpen, accepted, incoming, outgoing, shouldShowStreamingImage])\n\n const topContentClasses = useMemo(() => {\n let columns = ''\n\n if (isOpen && !accepted && outgoing) {\n columns = 'pi-grid-cols-[48px_1fr]'\n } else if (isOpen && !accepted && incoming) {\n columns = 'pi-grid-cols-[48px_1fr_1px]'\n } else if (isOpen && accepted) {\n columns = 'pi-grid-cols-[48px_164px_48px]'\n } else if (!isOpen && !accepted) {\n columns = 'pi-grid-cols-[24px_102px]'\n } else {\n columns = 'pi-grid-cols-[24px_66px_24px]'\n }\n\n return `pi-grid ${columns} pi-gap-${isOpen ? '5' : '3'} pi-items-${isOpen ? 'start' : 'center'\n } pi-justify-center pi-w-full`\n }, [isOpen, accepted, incoming, outgoing])\n\n const getGridClasses = useMemo(() => {\n if (shouldShowStreamingImage) return 'pi-grid-cols-3'\n if (isAnswerVisible(outgoing, accepted)) return 'pi-grid-cols-2'\n if (accepted) return 'pi-grid-cols-1 pi-justify-items-center'\n return 'pi-grid-cols-1 pi-justify-items-end'\n }, [shouldShowStreamingImage, outgoing, accepted])\n\n const renderStatusIcon = useCallback(() => {\n const iconSizeClass = isOpen\n ? 'pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover'\n : 'pi-relative pi-z-30 pi-h-6 pi-w-6 pi-rounded-sm pi-bg-cover'\n\n if (isListen) {\n return <FontAwesomeIcon className={iconSizeClass} icon={faEarListen} />\n }\n\n if (isIntrude) {\n return <FontAwesomeIcon className={iconSizeClass} icon={faHandPointUp} />\n }\n\n if (number !== '' && hasValidUsername) {\n return <Avatar />\n }\n\n if (incoming && !hasValidUsername) {\n return <FontAwesomeIcon className={`${iconSizeClass} pi--rotate-45`} icon={faArrowLeft} />\n }\n\n if (accepted && !outgoing && !hasValidUsername) {\n return <FontAwesomeIcon className={`${iconSizeClass} pi--rotate-45`} icon={faArrowLeft} />\n }\n\n if (outgoing && !hasValidUsername) {\n return (\n <FontAwesomeIcon className={`${iconSizeClass} pi-rotate-[135deg]`} icon={faArrowLeft} />\n )\n }\n\n return null\n }, [isOpen, isListen, isIntrude, number, hasValidUsername, incoming, outgoing, accepted])\n\n const renderDetails = useCallback(() => {\n if (!isOpen) return null\n\n if (isIntrude) {\n return (\n <Details>\n <span className='pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base'>\n {t('Common.Intrude')}\n {isIntrudeExtension ? ` - ${isIntrudeExtension}` : ''}\n </span>\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isNotAlwaysWhite />\n ) : (\n renderLandlinePhoneDiv()\n )\n ) : isIntrudeExtension ? (\n `${isIntrudeExtension}`\n ) : (\n ''\n )}\n </Details>\n )\n }\n\n if (isListen) {\n return (\n <Details>\n <span className='pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base'>\n {t('Common.Listen')}\n {isListenExtension ? ` - ${isListenExtension}` : ''}\n </span>\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isNotAlwaysWhite />\n ) : (\n renderLandlinePhoneDiv()\n )\n ) : isListenExtension ? (\n `${isListenExtension}`\n ) : (\n ''\n )}\n </Details>\n )\n }\n\n return (\n <Details>\n <DisplayName />\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isNotAlwaysWhite />\n ) : (\n renderLandlinePhoneDiv()\n )\n ) : (\n <Number />\n )}\n </Details>\n )\n }, [\n isOpen,\n isIntrude,\n isListen,\n accepted,\n startTime,\n isIntrudeExtension,\n isListenExtension,\n t,\n renderLandlinePhoneDiv,\n ])\n\n const renderAudioIndicator = useCallback(() => {\n if (accepted && isRecording) {\n return renderPulseIcon('red')\n }\n\n if (accepted && remoteAudioStream && !isPhysical()) {\n return (\n <AudioBars\n audioStream={remoteAudioStream}\n paused={paused}\n size={isOpen ? 'large' : 'small'}\n />\n )\n }\n\n if (accepted && isPhysical()) {\n return renderPulseIcon('green')\n }\n\n return null\n }, [accepted, isRecording, remoteAudioStream, isOpen, paused, renderPulseIcon])\n\n const renderStreamingContent = useCallback(() => {\n // Show skeleton while videoSources are loading or if streaming source number is not set yet\n if (!videoSources || Object.keys(videoSources).length === 0 || !streamingSourceNumber) {\n return <VideoStreamingSkeleton className=\"pi-w-full pi-h-40 pi-mt-4\" />\n }\n\n // Find the streaming source\n const source = Object.values(videoSources).find(\n (source) => source.extension === streamingSourceNumber,\n )\n\n // If source doesn't exist, show empty state\n if (!source) {\n return <VideoStreamingEmptyState className=\"pi-w-full pi-h-40 pi-mt-4\" />\n }\n\n // Check if image is available\n const hasImage = sourceImages[source.id] || source.image\n\n // If no image available, show empty state\n if (!hasImage) {\n return <VideoStreamingEmptyState className=\"pi-w-full pi-h-40 pi-mt-4\" />\n }\n\n // If we have an image, show StreamingImage component\n return <StreamingImage />\n }, [streamingSourceNumber, videoSources, sourceImages])\n\n // Early return AFTER all hooks have been called\n if (latestAlert !== null) {\n return null\n }\n\n const setVideoStreamingAnswer = () => {\n answerIncomingCall()\n // Set view as video streaming answer with a small delay\n setTimeout(() => {\n dispatch.island.setIslandView('streamingAnswer')\n }, 200)\n }\n\n return (\n <div className='pi-bg-red pi-content-center pi-justify-center'>\n <div className={callViewClasses}>\n {shouldShowStreamingImage ? (\n <>\n <div className='pi-flex pi-items-center pi-justify-between'>\n <div className='pi-flex pi-items-center pi-gap-4'>\n {renderStatusIcon()}\n <div className='pi-flex pi-flex-col pi-justify-center pi-space-y-2'>\n <DisplayName />\n <Number />\n </div>\n </div>\n\n <div className='pi-flex pi-gap-2'>\n <Hangup description={t('Tooltip.Hangup')} />\n {!outgoing && (\n <Button\n onClick={() => setVideoStreamingAnswer()}\n variant='green'\n data-tooltip-id='tooltip-answer'\n data-tooltip-content={t('Tooltip.Answer') || ''}\n >\n <FontAwesomeIcon className='pi-w-5 pi-h-5' icon={faPhone} />\n </Button>\n )}\n {/* Open door button - only show if cmdOpen is valid */}\n {unlockData?.canUnlock && (\n <Button\n variant='default'\n onClick={handleStreamingUnlock}\n data-tooltip-id='tooltip-unlock'\n data-tooltip-content={unlockData?.tooltipText}\n >\n <FontAwesomeIcon className='pi-w-5 pi-h-5' icon={faUnlock} />\n </Button>\n )}\n </div>\n </div>\n\n {renderStreamingContent()}\n </>\n ) : (\n <>\n <div className={topContentClasses}>\n {renderStatusIcon()}\n {renderDetails()}\n\n {!isOpen && !accepted && <DisplayName />}\n {!isOpen && accepted && <Timer startTime={startTime} isNotAlwaysWhite />}\n\n {renderAudioIndicator()}\n </div>\n\n {isOpen && (\n <>\n <div className={`${!(isListen || isIntrude) ? 'pi-grid pi-gap-y-5' : ''}`}>\n {accepted && <Actions />}\n <div className={`pi-grid ${getGridClasses} pi-gap-3.5`}>\n <Hangup description={t('Tooltip.Hangup and transfer')} />\n\n {isAnswerVisible(outgoing, accepted) && (\n <Button\n onClick={answerIncomingCall}\n variant='green'\n data-tooltip-id='tooltip-answer-left'\n data-tooltip-content={t('Tooltip.Answer') || ''}\n >\n <FontAwesomeIcon className='pi-w-6 pi-h-6' icon={faPhone} />\n </Button>\n )}\n </div>\n </div>\n </>\n )}\n </>\n )}\n </div>\n <CustomThemedTooltip id='tooltip-answer-left' place='left' />\n <CustomThemedTooltip id='tooltip-answer' place='left' />\n <CustomThemedTooltip id='tooltip-unlock' place='left' />\n </div>\n )\n}\n\nexport default memo(CallView)\n\nexport interface CallViewProps { }\n"],"names":["isAnswerVisible","outgoing","accepted","Details","memo","_a","children","React","className","displayName","t","useTranslation","dispatch","useDispatch","currentCall","useSelector","state","incoming","startTime","paused","number","isRecording","username","streamingSourceNumber","_b","island","isOpen","isFromStreaming","remoteAudioStream","webrtc","listenState","listen","isListen","isIntrude","isListenExtension","isIntrudeExtension","alertsData","alerts","currentUser","_c","streaming","videoSources","sourceImages","activeAlerts","useMemo","Object","values","filter","alert","active","latestAlert","length","shouldShowStreamingImage","unlockData","canUnlock","tooltipText","source","find","extension","Boolean","cmdOpen","trim","concat","description","hasValidUsername","renderLandlinePhoneDiv","useCallback","createElement","FontAwesomeIcon","size","icon","faOfficePhone","default_device","renderPulseIcon","color","sizeClasses","innerSizeClasses","animationSizeClasses","colorClasses","textColorClasses","faCircle","callViewClasses","baseClasses","topContentClasses","getGridClasses","renderStatusIcon","iconSizeClass","faEarListen","faHandPointUp","Avatar","faArrowLeft","renderDetails","isPhysical","Timer","isNotAlwaysWhite","DisplayName","Number","renderAudioIndicator","AudioBars","audioStream","renderStreamingContent","keys","VideoStreamingSkeleton","id","image","StreamingImage","VideoStreamingEmptyState","Fragment","Hangup","Button","onClick","answerIncomingCall","setTimeout","setIslandView","variant","faPhone","handleStreamingUnlock","faUnlock","Actions","CustomThemedTooltip","place"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/CallView/index.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useMemo, useCallback, memo } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState, Dispatch } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faPhone,\n faEarListen,\n faHandPointUp,\n faArrowLeft,\n faCircle,\n faUnlock,\n faUsers,\n} from '@fortawesome/free-solid-svg-icons'\nimport { Button } from '../'\nimport Timer from './Timer'\nimport Number from './Number'\nimport DisplayName from './DisplayName'\nimport { AudioBars } from '../'\nimport { answerIncomingCall } from '../../lib/phone/call'\nimport Avatar from './Avatar'\nimport Actions from './Actions'\nimport Hangup from '../Hangup'\nimport { useTranslation } from 'react-i18next'\nimport { faOfficePhone } from '@nethesis/nethesis-solid-svg-icons'\nimport { isPhysical } from '../../lib/user/default_device'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\nimport StreamingImage from '../StreamingImage'\nimport VideoStreamingSkeleton from '../VideoStreamingSkeleton'\nimport VideoStreamingEmptyState from '../VideoStreamingEmptyState'\nimport { handleStreamingUnlock } from '../../utils'\nimport { useDispatch } from 'react-redux'\n\nfunction isAnswerVisible(outgoing: boolean, accepted: boolean): boolean {\n return !outgoing && !accepted\n}\n\nconst Details = memo(({ children }: { children: React.ReactNode }) => (\n <div className='pi-grid pi-min-w-0 pi-self-center pi-gap-1 pi-grid-cols-1 pi-grid-rows-2'>\n {children}\n </div>\n))\nDetails.displayName = 'Details'\n\nconst QueueBadge = memo(\n ({\n label,\n tooltipContent,\n }: {\n label: string\n tooltipContent?: string\n }) => {\n if (!label) {\n return null\n }\n\n return (\n <span\n className='pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-text-iconSecondary'\n data-tooltip-id={tooltipContent ? 'tooltip-queue' : undefined}\n data-tooltip-content={tooltipContent || ''}\n >\n <FontAwesomeIcon icon={faUsers} className='pi-h-4 pi-w-4' />\n </span>\n )\n },\n)\nQueueBadge.displayName = 'QueueBadge'\n\n/**\n * The main view to manage calls, the starting point for calls actions flows\n */\nconst CallView: FC<CallViewProps> = () => {\n const { t } = useTranslation()\n const dispatch = useDispatch<Dispatch>()\n\n const currentCall = useSelector((state: RootState) => state.currentCall)\n const {\n incoming,\n accepted,\n outgoing,\n startTime,\n paused,\n number,\n isRecording,\n username,\n streamingSourceNumber,\n queueName,\n queueNumber,\n throughQueue,\n } = currentCall\n\n const { isOpen, isFromStreaming } = useSelector((state: RootState) => state.island)\n const { remoteAudioStream } = useSelector((state: RootState) => state.webrtc)\n const listenState = useSelector((state: RootState) => state.listen)\n const { isListen, isIntrude, isListenExtension, isIntrudeExtension } = listenState\n const { data: alertsData } = useSelector((state: RootState) => state.alerts)\n const currentUser = useSelector((state: RootState) => state.currentUser)\n const { videoSources, sourceImages } = useSelector((state: RootState) => state.streaming)\n\n const activeAlerts = useMemo(\n () => Object.values(alertsData).filter((alert: any) => alert.active),\n [alertsData],\n )\n\n const latestAlert = useMemo(\n () => (activeAlerts.length > 0 ? activeAlerts[activeAlerts.length - 1] : null),\n [activeAlerts],\n )\n\n const shouldShowStreamingImage = useMemo(\n () => isFromStreaming && streamingSourceNumber && !accepted,\n [isFromStreaming, streamingSourceNumber, accepted],\n )\n\n // Check if unlock button should be shown and get tooltip text\n const unlockData = useMemo(() => {\n if (!streamingSourceNumber || !videoSources) return { canUnlock: false, tooltipText: '' }\n\n const source = Object.values(videoSources).find(\n (source) => source?.extension === streamingSourceNumber,\n )\n\n const canUnlock = Boolean(source?.cmdOpen && source?.cmdOpen.trim() !== '')\n const tooltipText =\n canUnlock && source ? `${t('VideoStreaming.Open')}: ${source?.description}` : ''\n\n return { canUnlock, tooltipText }\n }, [streamingSourceNumber, videoSources, t])\n\n const hasValidUsername = useMemo(() => username !== '' && username !== 'undefined', [username])\n\n const queueLabel = useMemo(() => queueName || queueNumber || '', [queueName, queueNumber])\n\n const queueTooltipContent = useMemo(() => {\n if (!throughQueue || !queueLabel) {\n return ''\n }\n\n return `${t('Common.Queue')}: ${queueLabel}`\n }, [throughQueue, queueLabel, t])\n\n const renderLandlinePhoneDiv = useCallback(\n () => (\n <div className='pi-text-gray-600 dark:pi-text-gray-300 pi-font-normal pi-text-sm pi-flex pi-items-center pi-truncate'>\n <FontAwesomeIcon size='sm' icon={faOfficePhone} className='pi-mr-1' />\n <span className='pi-max-w-16 pi-truncate'>\n {currentUser?.default_device?.description || t('Common.Physical phone')}\n </span>\n </div>\n ),\n [currentUser?.default_device?.description, t],\n )\n\n const renderPulseIcon = useCallback(\n (color: string) => {\n const sizeClasses = !isOpen ? 'pi-h-6 pi-w-6' : 'pi-h-12 pi-w-12'\n const innerSizeClasses = !isOpen ? 'pi-h-4 pi-w-4 pi-rounded-full' : 'pi-h-8'\n const animationSizeClasses = !isOpen ? 'pi-h-6 pi-w-6' : 'pi-w-8 pi-h-8'\n const colorClasses = color === 'red' ? 'pi-bg-red-400' : 'pi-bg-green-400'\n const textColorClasses = color === 'red' ? 'pi-text-red-500' : 'pi-text-green-500'\n\n return (\n <div className={`${sizeClasses} pi-flex pi-justify-center pi-items-center`}>\n <div\n className={`${innerSizeClasses} pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden`}\n >\n <span\n className={`${animationSizeClasses} pi-animate-ping pi-absolute pi-inline-flex pi-rounded-full ${colorClasses} pi-opacity-75`}\n ></span>\n <FontAwesomeIcon\n className={`pi-w-4 pi-h-6 pi-rotate-45 ${textColorClasses}`}\n icon={faCircle}\n />\n </div>\n </div>\n )\n },\n [isOpen],\n )\n\n const callViewClasses = useMemo(() => {\n let baseClasses = 'pi-grid pi-items-center'\n\n if (isOpen) {\n baseClasses = 'pi-grid pi-items-start'\n\n if (accepted) {\n baseClasses += ' pi-grid-rows-[72px_1fr]'\n } else if (incoming) {\n baseClasses += ' pi-grid-cols-[256px_114px]'\n } else if (outgoing) {\n baseClasses += ' pi-grid-cols-[1fr_84px]'\n }\n }\n\n return shouldShowStreamingImage ? 'pi-flex pi-flex-col' : baseClasses\n }, [isOpen, accepted, incoming, outgoing, shouldShowStreamingImage])\n\n const topContentClasses = useMemo(() => {\n let columns = ''\n\n if (isOpen && !accepted && outgoing) {\n columns = 'pi-grid-cols-[48px_1fr]'\n } else if (isOpen && !accepted && incoming) {\n columns = 'pi-grid-cols-[48px_1fr_1px]'\n } else if (isOpen && accepted) {\n columns = 'pi-grid-cols-[48px_164px_48px]'\n } else if (!isOpen && !accepted) {\n columns = 'pi-grid-cols-[24px_102px]'\n } else {\n columns = 'pi-grid-cols-[24px_66px_24px]'\n }\n\n return `pi-grid ${columns} pi-gap-${isOpen ? '5' : '3'} pi-items-${\n isOpen ? 'start' : 'center'\n } pi-justify-center pi-w-full`\n }, [isOpen, accepted, incoming, outgoing])\n\n const getGridClasses = useMemo(() => {\n if (shouldShowStreamingImage) return 'pi-grid-cols-3'\n if (isAnswerVisible(outgoing, accepted)) return 'pi-grid-cols-2'\n if (accepted) return 'pi-grid-cols-1 pi-justify-items-center'\n return 'pi-grid-cols-1 pi-justify-items-end'\n }, [shouldShowStreamingImage, outgoing, accepted])\n\n const renderStatusIcon = useCallback(() => {\n const iconSizeClass = isOpen\n ? 'pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover'\n : 'pi-relative pi-z-30 pi-h-6 pi-w-6 pi-rounded-sm pi-bg-cover'\n\n if (isListen) {\n return <FontAwesomeIcon className={iconSizeClass} icon={faEarListen} />\n }\n\n if (isIntrude) {\n return <FontAwesomeIcon className={iconSizeClass} icon={faHandPointUp} />\n }\n\n if (number !== '' && hasValidUsername) {\n return <Avatar />\n }\n\n if (incoming && !hasValidUsername) {\n return <FontAwesomeIcon className={`${iconSizeClass} pi--rotate-45`} icon={faArrowLeft} />\n }\n\n if (accepted && !outgoing && !hasValidUsername) {\n return <FontAwesomeIcon className={`${iconSizeClass} pi--rotate-45`} icon={faArrowLeft} />\n }\n\n if (outgoing && !hasValidUsername) {\n return (\n <FontAwesomeIcon className={`${iconSizeClass} pi-rotate-[135deg]`} icon={faArrowLeft} />\n )\n }\n\n return null\n }, [isOpen, isListen, isIntrude, number, hasValidUsername, incoming, outgoing, accepted])\n\n const renderDetails = useCallback(() => {\n if (!isOpen) return null\n\n if (isIntrude) {\n return (\n <Details>\n <span className='pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base'>\n {t('Common.Intrude')}\n {isIntrudeExtension ? ` - ${isIntrudeExtension}` : ''}\n </span>\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isNotAlwaysWhite />\n ) : (\n renderLandlinePhoneDiv()\n )\n ) : isIntrudeExtension ? (\n `${isIntrudeExtension}`\n ) : (\n ''\n )}\n </Details>\n )\n }\n\n if (isListen) {\n return (\n <Details>\n <span className='pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base'>\n {t('Common.Listen')}\n {isListenExtension ? ` - ${isListenExtension}` : ''}\n </span>\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isNotAlwaysWhite />\n ) : (\n renderLandlinePhoneDiv()\n )\n ) : isListenExtension ? (\n `${isListenExtension}`\n ) : (\n ''\n )}\n </Details>\n )\n }\n\n return (\n <Details>\n {accepted && throughQueue && queueLabel ? (\n <div className='pi-flex pi-min-w-0 pi-items-center pi-gap-2'>\n <div className='pi-min-w-0 pi-flex-1'>\n <DisplayName />\n </div>\n <QueueBadge label={queueLabel} tooltipContent={queueTooltipContent} />\n </div>\n ) : (\n <DisplayName />\n )}\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isNotAlwaysWhite />\n ) : (\n renderLandlinePhoneDiv()\n )\n ) : (\n <Number />\n )}\n </Details>\n )\n }, [\n isOpen,\n isIntrude,\n isListen,\n accepted,\n startTime,\n isIntrudeExtension,\n isListenExtension,\n t,\n renderLandlinePhoneDiv,\n accepted,\n throughQueue,\n queueLabel,\n queueTooltipContent,\n ])\n\n const renderAudioIndicator = useCallback(() => {\n if (accepted && isRecording) {\n return renderPulseIcon('red')\n }\n\n if (accepted && remoteAudioStream && !isPhysical()) {\n return (\n <AudioBars\n audioStream={remoteAudioStream}\n paused={paused}\n size={isOpen ? 'large' : 'small'}\n />\n )\n }\n\n if (accepted && isPhysical()) {\n return renderPulseIcon('green')\n }\n\n return null\n }, [accepted, isRecording, remoteAudioStream, isOpen, paused, renderPulseIcon])\n\n const renderStreamingContent = useCallback(() => {\n // Show skeleton while videoSources are loading or if streaming source number is not set yet\n if (!videoSources || Object.keys(videoSources).length === 0 || !streamingSourceNumber) {\n return <VideoStreamingSkeleton className='pi-w-full pi-h-40 pi-mt-4' />\n }\n\n // Find the streaming source\n const source = Object.values(videoSources).find(\n (source) => source.extension === streamingSourceNumber,\n )\n\n // If source doesn't exist, show empty state\n if (!source) {\n return <VideoStreamingEmptyState className='pi-w-full pi-h-40 pi-mt-4' />\n }\n\n // Check if image is available\n const hasImage = sourceImages[source.id] || source.image\n\n // If no image available, show empty state\n if (!hasImage) {\n return <VideoStreamingEmptyState className='pi-w-full pi-h-40 pi-mt-4' />\n }\n\n // If we have an image, show StreamingImage component\n return <StreamingImage />\n }, [streamingSourceNumber, videoSources, sourceImages])\n\n // Early return AFTER all hooks have been called\n if (latestAlert !== null) {\n return null\n }\n\n const setVideoStreamingAnswer = () => {\n answerIncomingCall()\n // Set view as video streaming answer with a small delay\n setTimeout(() => {\n dispatch.island.setIslandView('streamingAnswer')\n }, 200)\n }\n\n return (\n <div className='pi-bg-red pi-content-center pi-justify-center'>\n <div className={callViewClasses}>\n {shouldShowStreamingImage ? (\n <>\n <div className='pi-flex pi-items-center pi-justify-between'>\n <div className='pi-flex pi-items-center pi-gap-4'>\n {renderStatusIcon()}\n <div className='pi-flex pi-flex-col pi-justify-center pi-space-y-2'>\n <DisplayName />\n <Number />\n </div>\n </div>\n\n <div className='pi-flex pi-gap-2'>\n <Hangup description={t('Tooltip.Hangup')} />\n {!outgoing && (\n <Button\n onClick={() => setVideoStreamingAnswer()}\n variant='green'\n data-tooltip-id='tooltip-answer'\n data-tooltip-content={t('Tooltip.Answer') || ''}\n >\n <FontAwesomeIcon className='pi-w-5 pi-h-5' icon={faPhone} />\n </Button>\n )}\n {/* Open door button - only show if cmdOpen is valid */}\n {unlockData?.canUnlock && (\n <Button\n variant='default'\n onClick={handleStreamingUnlock}\n data-tooltip-id='tooltip-unlock'\n data-tooltip-content={unlockData?.tooltipText}\n >\n <FontAwesomeIcon className='pi-w-5 pi-h-5' icon={faUnlock} />\n </Button>\n )}\n </div>\n </div>\n\n {renderStreamingContent()}\n </>\n ) : (\n <>\n <div className={topContentClasses}>\n {renderStatusIcon()}\n {renderDetails()}\n\n {!isOpen && !accepted && <DisplayName />}\n {!isOpen && accepted && <Timer startTime={startTime} isNotAlwaysWhite />}\n\n {renderAudioIndicator()}\n </div>\n\n {isOpen && (\n <>\n <div className={`${!(isListen || isIntrude) ? 'pi-grid pi-gap-y-5' : ''}`}>\n {accepted && <Actions />}\n <div className={`pi-grid ${getGridClasses} pi-gap-3.5`}>\n <Hangup description={t('Tooltip.Hangup and transfer')} />\n\n {isAnswerVisible(outgoing, accepted) && (\n <Button\n onClick={answerIncomingCall}\n variant='green'\n data-tooltip-id='tooltip-answer-left'\n data-tooltip-content={t('Tooltip.Answer') || ''}\n >\n <FontAwesomeIcon className='pi-w-6 pi-h-6' icon={faPhone} />\n </Button>\n )}\n </div>\n </div>\n </>\n )}\n </>\n )}\n </div>\n <CustomThemedTooltip id='tooltip-answer-left' place='left' />\n <CustomThemedTooltip id='tooltip-answer' place='left' />\n <CustomThemedTooltip id='tooltip-unlock' place='left' />\n <CustomThemedTooltip id='tooltip-display-name' place='bottom' />\n <CustomThemedTooltip id='tooltip-queue' place='bottom' />\n </div>\n )\n}\n\nexport default memo(CallView)\n\nexport interface CallViewProps {}\n"],"names":["isAnswerVisible","outgoing","accepted","Details","memo","_a","children","React","className","displayName","QueueBadge","label","tooltipContent","createElement","undefined","FontAwesomeIcon","icon","faUsers","t","useTranslation","dispatch","useDispatch","currentCall","useSelector","state","incoming","startTime","paused","number","isRecording","username","streamingSourceNumber","queueName","queueNumber","throughQueue","_b","island","isOpen","isFromStreaming","remoteAudioStream","webrtc","listenState","listen","isListen","isIntrude","isListenExtension","isIntrudeExtension","alertsData","alerts","currentUser","_c","streaming","videoSources","sourceImages","activeAlerts","useMemo","Object","values","filter","alert","active","latestAlert","length","shouldShowStreamingImage","unlockData","canUnlock","tooltipText","source","find","extension","Boolean","cmdOpen","trim","concat","description","hasValidUsername","queueLabel","queueTooltipContent","renderLandlinePhoneDiv","useCallback","size","faOfficePhone","default_device","renderPulseIcon","color","sizeClasses","innerSizeClasses","animationSizeClasses","colorClasses","textColorClasses","faCircle","callViewClasses","baseClasses","topContentClasses","getGridClasses","renderStatusIcon","iconSizeClass","faEarListen","faHandPointUp","Avatar","faArrowLeft","renderDetails","isPhysical","Timer","isNotAlwaysWhite","DisplayName","Number","renderAudioIndicator","AudioBars","audioStream","renderStreamingContent","keys","VideoStreamingSkeleton","id","image","StreamingImage","VideoStreamingEmptyState","Fragment","Hangup","Button","onClick","answerIncomingCall","setTimeout","setIslandView","variant","faPhone","handleStreamingUnlock","faUnlock","Actions","CustomThemedTooltip","place"],"mappings":"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"}
|
|
@@ -1 +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 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":"moBASgC,SAACA,uBACzBC,EAAWC,EAAAA,cACXC,EAAkBC,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMC,WAAN,IACpDC,EAAsBH,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMG,KAAN,IACxDC,EAAeL,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMK,QAAN,IACjDC,EAAoBC,EAAKA,MAACC,OAAOC,aAAaH,kBAAkBC,EAAKA,MAACG,YACtEC,EAAQC,SAAYC,EAAAA,SACpBC,EAAgBf,eAAY,SAACC,GAAqB,OAAAA,EAAMC,YAAYa,aAAlB,IAElDC,EAA0CC,EAAAA,SAAS,IAAlDC,EAAgBF,EAAA,GAAEG,EAAmBH,EAAA,GACtCI,EAA0DH,EAAAA,UAAS,GAAlEI,EAAwBD,EAAA,GAAEE,EAA2BF,EAAA,GAEtDG,EAA4BC,EAAAA,aAAY,WAC5C,IAAMC,EAAqBC,OAAOC,OAAOZ,GAAea,MAAK,SAACC,GAAS,OAAAH,OAAOI,KAAKD,GAAME,OAAS,CAAC,IACnG,OAAON,EAAsBC,OAAOC,OAAOF,GAAoB,GAAa,IAC9E,GAAG,CAACV,IAEEiB,EAA8BR,eAClC,SAACS,GAEC,GADApC,EAASqC,OAAOC,uBAAsB,GACrB,YAAbF,EAAwB,CAC1B,IAAMR,EAAqBC,OAAOC,OAAOZ,GAAea,MACtD,SAACC,GAAS,OAAAH,OAAOI,KAAKD,GAAME,OAAS,CAAC,IAElCK,EAAmBX,EAAqBC,OAAOC,OAAOF,GAAoB,GAAK,KAErF,IAAIW,aAAA,EAAAA,EAAkBC,YAA6C,QAAhCD,aAAA,EAAAA,EAAkBE,WAAoB,CACvE,IAAMC,EAAY,CAChBC,eAAgBJ,EAAiBI,eACjCC,gBAAiBL,EAAiBK,gBAClCC,MAAON,EAAiBM,MACxBC,SAAUP,EAAiBO,SAC3BC,SAAUR,EAAiBQ,SAC3BC,aAAcT,EAAiBS,aAC/BC,aAAcV,EAAiBU,aAC/BR,UAAWF,EAAiBE,UAC5BD,UAAWD,EAAiBC,WAE9BU,gBAAc,oCAAqCR,EACpD,CACF,MAAuB,OAAbN,GACTpC,EAASqC,OAAOc,cAAcf,EAEjC,GACD,CAACpC,EAASqC,OAAQnB,IAGdkC,EAAwBzB,eAAY,WAAA,OAAA0B,EAAAA,eAAA,OAAA,OAAA,GAAA,+EACpC,OAAA3C,EAAkBwB,OAAS,EACE,CAAA,EAAAoB,EAAqBA,yBADtB,CAAA,EAAA,UAG9B,OAFMC,EAAmBC,EAA6BC,OACtDhC,EAA4B8B,GAC5B,CAAA,EAAOA,UAGP,OADA9B,GAA4B,GAC5B,CAAA,GAAO,MAEV,GAAA,GAAE,CAACf,EAAkBwB,SAEhBwB,EAAgB/B,eAAY,WAAA,OAAA0B,EAAAA,eAAA,OAAA,OAAA,GAAA,yEACP,MAAM,CAAA,EAAAD,mBAANI,EAA6BC,SAEpDtB,EAA4B,SAC5BxB,QAAMX,SAAS2D,YAAYC,kBAAkB,CAC3CC,qBAAqB,EACrBC,qBAAqB,YAG1B,GAAA,GAAE,CAACV,EAAuBjB,IAErB4B,EAAoBpC,EAAAA,aAAY,WACpCQ,EAA4B,SAC5BxB,QAAMX,SAASgE,YAAYC,OAAO,CAChCC,uBAAuB,GAE3B,GAAG,CAAC/B,IAEEgC,EAAcC,WAClB,iBAAM,OAA0B,QAA1BZ,EAAAtD,aAAe,EAAfA,EAAiBmE,eAAS,IAAAb,OAAA,EAAAA,EAAAc,oBAAqB,CAAA,CAAE,GACvD,CAAyB,QAAxBd,EAAAtD,aAAA,EAAAA,EAAiBmE,eAAO,IAAAb,OAAA,EAAAA,EAAEc,oBAGvBC,EAAmBH,EAAAA,SACvB,iCAAM,MAAC,CACLI,WAA0D,QAA/CC,EAAkC,kBAAlCjB,EAAAW,aAAW,EAAXA,EAAaO,+BAAUP,mBAAW,IAAAQ,OAAA,EAAAA,EAAEC,iBAAW,IAAAH,OAAA,EAAAA,EAAAI,SAAS,EACnEC,eAC6D,YAAZ,QAA/CC,EAA6B,kBAA7BC,EAAAjE,aAAK,EAALA,EAAOkE,8BAASC,qBAAa,IAAAC,OAAA,EAAAA,EAAEC,sBAAgB,IAAAL,OAAA,EAAAA,EAAAM,oBAC9ClE,EAAyC,QAAzCmE,EAA0B,UAA1BnB,aAAA,EAAAA,EAAaoB,qBAAa,IAAAC,OAAA,EAAAA,EAAErB,mBAAa,IAAAmB,OAAA,EAAAA,EAAAG,qCAAgBZ,SAAS,GACrEa,iBAAiBrE,eAAAA,EAAkBa,QAAS,KAE9C,SACE8C,EAAoC,QAApCP,EAAuB,QAAvBE,EAAAR,aAAA,EAAAA,EAAaO,gBAAU,IAAAC,OAAA,EAAAA,EAAAR,mBAAa,IAAAM,OAAA,EAAAA,EAAAG,gCAAWC,cAC/CW,EAAyC,QAAzCT,EAA4B,QAA5BI,EAAAhB,aAAA,EAAAA,EAAaoB,qBAAe,IAAAJ,OAAA,EAAAA,EAAAhB,mBAAa,IAAAY,OAAA,EAAAA,EAAAU,qCAAgBZ,MACzDxD,aAAA,EAAAA,EAAkBa,eAClBoD,EAAApF,aAAe,EAAfA,EAAiByF,qCAAgBC,KACjC7F,IAIE8F,EAAqBzB,EAAAA,SAAQ,WACjC,IAAM7B,EAAmBb,IAGzB,GAAsC,UAAlClB,EAAasF,iBACf,OAAO,EAGT,KAAKvD,aAAA,EAAAA,EAAkBC,YAA6C,QAAhCD,aAAgB,EAAhBA,EAAkBE,WACpD,OAAO,EAIT,GAAsC,WAAlCjC,EAAasF,iBAA+B,CAC9C,GAAItF,EAAauF,aAAcxD,aAAgB,EAAhBA,EAAkBS,cAC/C,OAAO,EACF,IACJxC,EAAauF,aACbC,EAAAA,YAAYzD,EAAiBI,kBAAmBJ,eAAAA,EAAkBS,eAEnE,OAAO,CAEV,CAED,OAAO,CACT,GAAG,CAACtB,EAA2BlB,EAAauF,WAAYvF,EAAasF,mBAErEG,EAAAA,WAAU,WACR,GAAI/F,GAAmBI,EAAqB,CAC1C,IAAM4F,EAAUC,EAAAA,oBAAoBjG,EAAiBI,GACrDgB,EAAoB4E,EACrB,CACH,GAAG,CAAChG,EAAiBI,IAErB,IAAM8F,EAAwBzE,EAAAA,aAAY,WACxC,IAAMY,EAAmBb,IACnB2E,GAAkB9D,aAAgB,EAAhBA,EAAkBQ,YAAYR,aAAA,EAAAA,EAAkBO,WAAY,KAE/EuD,IAKLrG,EAASqC,OAAOC,uBAAsB,GACtCY,EAAAA,cAAc,kCAAmC,CAC/CoD,SAAUD,EACVE,SAAUF,IAEb,GAAE,CAACrG,EAASqC,OAAQX,IAEf8E,EAAyBpC,EAAAA,SAC7B,WAAM,OAAAlE,aAAA,EAAAA,EAAiBuG,8BAA8B,CAAK,GAC1D,CAACvG,aAAe,EAAfA,EAAiBuG,6BAGpB,OAAAC,EAAAA,SAAAA,EAAAA,SAAA,CACExG,gBAAeA,EACfmB,iBAAgBA,EAChBX,kBAAiBA,EACjBc,2BACAqE,mBAAkBA,EAClBc,YAAanG,EAAamG,YAC1BH,uBAAsBA,GACnBjC,IACHb,cAAaA,EACbK,oBACA5B,8BACAiE,yBAEJ"}
|
|
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 interface UseSideViewLogicResult {\n userInformation: RootState['currentUser']\n availableDevices: any[]\n videoInputDevices: any[]\n isVideoCallButtonVisible: boolean\n isUrlButtonEnabled: boolean\n hasValidUrl: boolean\n isTranscriptionEnabled: boolean\n canRecord: boolean\n canShareScreen: boolean\n canSwitchDevice: boolean\n goToVideoCall: () => Promise<void>\n goToScreenSharing: () => void\n closeSideViewAndLaunchEvent: (viewType: any) => void\n openTranscriptionView: () => void\n}\n\nexport const useSideViewLogic = (uaType?: string): UseSideViewLogicResult => {\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<any[]>([])\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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"}
|