@nethesis/phone-island 1.1.3 → 1.1.5-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (463) hide show
  1. package/dist/App.js.map +1 -1
  2. package/dist/components/AlertView/index.js.map +1 -1
  3. package/dist/components/AudioBars.js.map +1 -1
  4. package/dist/components/AudioPlayerView/PlayerFooterActions.js +1 -1
  5. package/dist/components/AudioPlayerView/PlayerFooterActions.js.map +1 -1
  6. package/dist/components/AudioPlayerView/Progress.js.map +1 -1
  7. package/dist/components/AudioPlayerView/index.js +1 -1
  8. package/dist/components/AudioPlayerView/index.js.map +1 -1
  9. package/dist/components/CallView/Actions.js +1 -1
  10. package/dist/components/CallView/Actions.js.map +1 -1
  11. package/dist/components/CallView/BackCall.js +1 -1
  12. package/dist/components/CallView/BackCall.js.map +1 -1
  13. package/dist/components/CallView/DeviceIcon.js +1 -1
  14. package/dist/components/CallView/DeviceIcon.js.map +1 -1
  15. package/dist/components/CallView/DisplayName.js +1 -1
  16. package/dist/components/CallView/DisplayName.js.map +1 -1
  17. package/dist/components/CallView/DisplayNameUtils.js.map +1 -1
  18. package/dist/components/CallView/Number.js +1 -1
  19. package/dist/components/CallView/Number.js.map +1 -1
  20. package/dist/components/CallView/NumberPopover.js +1 -1
  21. package/dist/components/CallView/NumberPopover.js.map +1 -1
  22. package/dist/components/CallView/index.js +1 -1
  23. package/dist/components/CallView/index.js.map +1 -1
  24. package/dist/components/ConferenceView/ConferenceUsersList.js +1 -1
  25. package/dist/components/ConferenceView/ConferenceUsersList.js.map +1 -1
  26. package/dist/components/ConferenceView/index.js +1 -1
  27. package/dist/components/ConferenceView/index.js.map +1 -1
  28. package/dist/components/ContactView/ContactListView.js +1 -1
  29. package/dist/components/ContactView/ContactListView.js.map +1 -1
  30. package/dist/components/ContactView/SelectContactNumberView.js +1 -1
  31. package/dist/components/ContactView/SelectContactNumberView.js.map +1 -1
  32. package/dist/components/ContactView/TransferActions.js +1 -1
  33. package/dist/components/ContactView/TransferActions.js.map +1 -1
  34. package/dist/components/Hangup.js +1 -1
  35. package/dist/components/Hangup.js.map +1 -1
  36. package/dist/components/KeypadView/index.js +1 -1
  37. package/dist/components/KeypadView/index.js.map +1 -1
  38. package/dist/components/OperatorBusyView/index.js +1 -1
  39. package/dist/components/OperatorBusyView/index.js.map +1 -1
  40. package/dist/components/PhysicalRecorderView/index.js +1 -1
  41. package/dist/components/PhysicalRecorderView/index.js.map +1 -1
  42. package/dist/components/RecorderView/Actions.js +1 -1
  43. package/dist/components/RecorderView/Actions.js.map +1 -1
  44. package/dist/components/RecorderView/BarsGroup.js.map +1 -1
  45. package/dist/components/RecorderView/index.js +1 -1
  46. package/dist/components/RecorderView/index.js.map +1 -1
  47. package/dist/components/SettingsView/AudioView.js +1 -1
  48. package/dist/components/SettingsView/AudioView.js.map +1 -1
  49. package/dist/components/SettingsView/MicrophoneView.js +1 -1
  50. package/dist/components/SettingsView/MicrophoneView.js.map +1 -1
  51. package/dist/components/SettingsView/SettingsHeader.js +1 -1
  52. package/dist/components/SettingsView/SettingsHeader.js.map +1 -1
  53. package/dist/components/SettingsView/ThemeView.js +1 -1
  54. package/dist/components/SettingsView/ThemeView.js.map +1 -1
  55. package/dist/components/SettingsView/index.js +1 -1
  56. package/dist/components/SettingsView/index.js.map +1 -1
  57. package/dist/components/SideView/SideView.js +1 -1
  58. package/dist/components/SideView/SideView.js.map +1 -1
  59. package/dist/components/SideView/hooks/useSideViewLogic.js +1 -1
  60. package/dist/components/SideView/hooks/useSideViewLogic.js.map +1 -1
  61. package/dist/components/Socket.js +1 -1
  62. package/dist/components/Socket.js.map +1 -1
  63. package/dist/components/SwitchDeviceView/index.js +1 -1
  64. package/dist/components/SwitchDeviceView/index.js.map +1 -1
  65. package/dist/components/SwitchInputView/DropdownContent.js +1 -1
  66. package/dist/components/SwitchInputView/DropdownContent.js.map +1 -1
  67. package/dist/components/SwitchInputView/Index.js +1 -1
  68. package/dist/components/TextScroll.js +1 -1
  69. package/dist/components/TextScroll.js.map +1 -1
  70. package/dist/components/TranscriptionView/TranscriptionView.js +1 -1
  71. package/dist/components/TranscriptionView/TranscriptionView.js.map +1 -1
  72. package/dist/components/VideoStreamingEmptyState/index.js +1 -1
  73. package/dist/components/VideoStreamingEmptyState/index.js.map +1 -1
  74. package/dist/components/VideoStreamingSkeleton/index.js +1 -1
  75. package/dist/components/VideoStreamingSkeleton/index.js.map +1 -1
  76. package/dist/components/VideoView/index.js +1 -1
  77. package/dist/components/VideoView/index.js.map +1 -1
  78. package/dist/components/WebRTC.js +1 -1
  79. package/dist/components/WebRTC.js.map +1 -1
  80. package/dist/events/SocketEvents.js.map +1 -1
  81. package/dist/lib/i18n.js +1 -1
  82. package/dist/lib/i18n.js.map +1 -1
  83. package/dist/lib/phone/call.js +1 -1
  84. package/dist/lib/phone/call.js.map +1 -1
  85. package/dist/lib/phone/counterpartDevice.js +1 -1
  86. package/dist/lib/phone/counterpartDevice.js.map +1 -1
  87. package/dist/lib/phone/screenShare.js +2 -0
  88. package/dist/lib/phone/screenShare.js.map +1 -0
  89. package/dist/lib/phone/video.js.map +1 -1
  90. package/dist/lib/player/audio.js.map +1 -1
  91. package/dist/lib/user/default_device.js.map +1 -1
  92. package/dist/lib/user/extensions.js.map +1 -1
  93. package/dist/models/currentCall.js.map +1 -1
  94. package/dist/models/island.js.map +1 -1
  95. package/dist/models/player.js +1 -1
  96. package/dist/models/player.js.map +1 -1
  97. package/dist/node_modules/classnames/index.js +1 -1
  98. package/dist/node_modules/framer-motion/dist/es/animation/hooks/animation-controls.mjs.js +1 -1
  99. package/dist/node_modules/framer-motion/dist/es/animation/hooks/animation-controls.mjs.js.map +1 -1
  100. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs.js +1 -1
  101. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs.js.map +1 -1
  102. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs.js +1 -1
  103. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs.js.map +1 -1
  104. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs.js +1 -1
  105. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs.js.map +1 -1
  106. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/utils.mjs.js.map +1 -1
  107. package/dist/node_modules/framer-motion/dist/es/context/LayoutGroupContext.mjs.js.map +1 -1
  108. package/dist/node_modules/framer-motion/dist/es/context/LazyContext.mjs.js.map +1 -1
  109. package/dist/node_modules/framer-motion/dist/es/context/MotionConfigContext.mjs.js.map +1 -1
  110. package/dist/node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.mjs.js.map +1 -1
  111. package/dist/node_modules/framer-motion/dist/es/gestures/drag/index.mjs.js +1 -1
  112. package/dist/node_modules/framer-motion/dist/es/gestures/drag/index.mjs.js.map +1 -1
  113. package/dist/node_modules/framer-motion/dist/es/gestures/drag/use-drag-controls.mjs.js.map +1 -1
  114. package/dist/node_modules/framer-motion/dist/es/gestures/hover.mjs.js +1 -1
  115. package/dist/node_modules/framer-motion/dist/es/gestures/hover.mjs.js.map +1 -1
  116. package/dist/node_modules/framer-motion/dist/es/gestures/pan/index.mjs.js +1 -1
  117. package/dist/node_modules/framer-motion/dist/es/gestures/pan/index.mjs.js.map +1 -1
  118. package/dist/node_modules/framer-motion/dist/es/gestures/press.mjs.js +1 -1
  119. package/dist/node_modules/framer-motion/dist/es/gestures/press.mjs.js.map +1 -1
  120. package/dist/node_modules/framer-motion/dist/es/motion/features/animation/exit.mjs.js +1 -1
  121. package/dist/node_modules/framer-motion/dist/es/motion/features/animation/exit.mjs.js.map +1 -1
  122. package/dist/node_modules/framer-motion/dist/es/motion/features/animation/index.mjs.js +1 -1
  123. package/dist/node_modules/framer-motion/dist/es/motion/features/animation/index.mjs.js.map +1 -1
  124. package/dist/node_modules/framer-motion/dist/es/motion/features/definitions.mjs.js +1 -1
  125. package/dist/node_modules/framer-motion/dist/es/motion/features/definitions.mjs.js.map +1 -1
  126. package/dist/node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.mjs.js +1 -1
  127. package/dist/node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.mjs.js.map +1 -1
  128. package/dist/node_modules/framer-motion/dist/es/motion/index.mjs.js +1 -1
  129. package/dist/node_modules/framer-motion/dist/es/motion/index.mjs.js.map +1 -1
  130. package/dist/node_modules/framer-motion/dist/es/motion/utils/symbol.mjs.js.map +1 -1
  131. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.mjs.js +1 -1
  132. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.mjs.js.map +1 -1
  133. package/dist/node_modules/framer-motion/dist/es/motion/utils/valid-prop.mjs.js +1 -1
  134. package/dist/node_modules/framer-motion/dist/es/motion/utils/valid-prop.mjs.js.map +1 -1
  135. package/dist/node_modules/framer-motion/dist/es/render/components/motion/feature-bundle.mjs.js +1 -1
  136. package/dist/node_modules/framer-motion/dist/es/render/components/motion/feature-bundle.mjs.js.map +1 -1
  137. package/dist/node_modules/framer-motion/dist/es/render/dom/use-render.mjs.js +1 -1
  138. package/dist/node_modules/framer-motion/dist/es/render/dom/use-render.mjs.js.map +1 -1
  139. package/dist/node_modules/framer-motion/dist/es/render/dom/utils/filter-props.mjs.js +1 -1
  140. package/dist/node_modules/framer-motion/dist/es/render/dom/utils/filter-props.mjs.js.map +1 -1
  141. package/dist/node_modules/framer-motion/dist/es/render/svg/use-props.mjs.js +1 -1
  142. package/dist/node_modules/framer-motion/dist/es/render/svg/use-props.mjs.js.map +1 -1
  143. package/dist/node_modules/i18next/dist/esm/i18next.js +1 -1
  144. package/dist/node_modules/i18next/dist/esm/i18next.js.map +1 -1
  145. package/dist/node_modules/js-base64/base64.mjs.js +1 -1
  146. package/dist/node_modules/js-base64/base64.mjs.js.map +1 -1
  147. package/dist/node_modules/motion-dom/dist/es/animation/AsyncMotionValueAnimation.mjs.js +1 -1
  148. package/dist/node_modules/motion-dom/dist/es/animation/AsyncMotionValueAnimation.mjs.js.map +1 -1
  149. package/dist/node_modules/motion-dom/dist/es/animation/JSAnimation.mjs.js +1 -1
  150. package/dist/node_modules/motion-dom/dist/es/animation/JSAnimation.mjs.js.map +1 -1
  151. package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimation.mjs.js +1 -1
  152. package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimation.mjs.js.map +1 -1
  153. package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimationExtended.mjs.js +1 -1
  154. package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimationExtended.mjs.js.map +1 -1
  155. package/dist/node_modules/motion-dom/dist/es/animation/animate/single-value.mjs.js +1 -1
  156. package/dist/node_modules/motion-dom/dist/es/animation/animate/single-value.mjs.js.map +1 -1
  157. package/dist/node_modules/motion-dom/dist/es/animation/drivers/frame.mjs.js +1 -1
  158. package/dist/node_modules/motion-dom/dist/es/animation/drivers/frame.mjs.js.map +1 -1
  159. package/dist/node_modules/motion-dom/dist/es/animation/generators/inertia.mjs.js +1 -1
  160. package/dist/node_modules/motion-dom/dist/es/animation/generators/inertia.mjs.js.map +1 -1
  161. package/dist/node_modules/motion-dom/dist/es/animation/generators/keyframes.mjs.js +1 -1
  162. package/dist/node_modules/motion-dom/dist/es/animation/generators/keyframes.mjs.js.map +1 -1
  163. package/dist/node_modules/motion-dom/dist/es/animation/generators/spring.mjs.js +1 -1
  164. package/dist/node_modules/motion-dom/dist/es/animation/generators/spring.mjs.js.map +1 -1
  165. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/calc-duration.mjs.js +1 -1
  166. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/calc-duration.mjs.js.map +1 -1
  167. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/create-generator-easing.mjs.js +1 -1
  168. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/create-generator-easing.mjs.js.map +1 -1
  169. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/velocity.mjs.js +1 -1
  170. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/velocity.mjs.js.map +1 -1
  171. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/motion-value.mjs.js +1 -1
  172. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/motion-value.mjs.js.map +1 -1
  173. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-target.mjs.js +1 -1
  174. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-target.mjs.js.map +1 -1
  175. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-variant.mjs.js +1 -1
  176. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-variant.mjs.js.map +1 -1
  177. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element.mjs.js +1 -1
  178. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element.mjs.js.map +1 -1
  179. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.mjs.js +1 -1
  180. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.mjs.js.map +1 -1
  181. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.mjs.js +1 -1
  182. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.mjs.js.map +1 -1
  183. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/get-final.mjs.js +1 -1
  184. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/get-final.mjs.js.map +1 -1
  185. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/make-none-animatable.mjs.js +1 -1
  186. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/make-none-animatable.mjs.js.map +1 -1
  187. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/unit-conversion.mjs.js +1 -1
  188. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/unit-conversion.mjs.js.map +1 -1
  189. package/dist/node_modules/motion-dom/dist/es/animation/optimized-appear/data-id.mjs.js +1 -1
  190. package/dist/node_modules/motion-dom/dist/es/animation/optimized-appear/data-id.mjs.js.map +1 -1
  191. package/dist/node_modules/motion-dom/dist/es/animation/utils/WithPromise.mjs.js +1 -1
  192. package/dist/node_modules/motion-dom/dist/es/animation/utils/WithPromise.mjs.js.map +1 -1
  193. package/dist/node_modules/motion-dom/dist/es/animation/utils/can-animate.mjs.js +1 -1
  194. package/dist/node_modules/motion-dom/dist/es/animation/utils/can-animate.mjs.js.map +1 -1
  195. package/dist/node_modules/motion-dom/dist/es/animation/utils/css-variables-conversion.mjs.js +1 -1
  196. package/dist/node_modules/motion-dom/dist/es/animation/utils/css-variables-conversion.mjs.js.map +1 -1
  197. package/dist/node_modules/motion-dom/dist/es/animation/utils/is-transition-defined.mjs.js +1 -1
  198. package/dist/node_modules/motion-dom/dist/es/animation/utils/is-transition-defined.mjs.js.map +1 -1
  199. package/dist/node_modules/motion-dom/dist/es/animation/utils/notify-inspector.mjs.js +2 -0
  200. package/dist/node_modules/motion-dom/dist/es/animation/utils/notify-inspector.mjs.js.map +1 -0
  201. package/dist/node_modules/motion-dom/dist/es/animation/utils/resolve-start-time.mjs.js +2 -0
  202. package/dist/node_modules/motion-dom/dist/es/animation/utils/resolve-start-time.mjs.js.map +1 -0
  203. package/dist/node_modules/motion-dom/dist/es/animation/waapi/supports/waapi.mjs.js +1 -1
  204. package/dist/node_modules/motion-dom/dist/es/animation/waapi/supports/waapi.mjs.js.map +1 -1
  205. package/dist/node_modules/motion-dom/dist/es/animation/waapi/transforms/TransformAnimation.mjs.js +2 -0
  206. package/dist/node_modules/motion-dom/dist/es/animation/waapi/transforms/TransformAnimation.mjs.js.map +1 -0
  207. package/dist/node_modules/motion-dom/dist/es/animation/waapi/transforms/groups.mjs.js +2 -0
  208. package/dist/node_modules/motion-dom/dist/es/animation/waapi/transforms/groups.mjs.js.map +1 -0
  209. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/accelerated-values.mjs.js +1 -1
  210. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/accelerated-values.mjs.js.map +1 -1
  211. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/needs-mixer.mjs.js +2 -0
  212. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/needs-mixer.mjs.js.map +1 -0
  213. package/dist/node_modules/motion-dom/dist/es/events/add-pointer-event.mjs.js +2 -0
  214. package/dist/node_modules/motion-dom/dist/es/events/add-pointer-event.mjs.js.map +1 -0
  215. package/dist/node_modules/motion-dom/dist/es/events/event-info.mjs.js +2 -0
  216. package/dist/node_modules/motion-dom/dist/es/events/event-info.mjs.js.map +1 -0
  217. package/dist/node_modules/motion-dom/dist/es/frameloop/batcher.mjs.js +1 -1
  218. package/dist/node_modules/motion-dom/dist/es/frameloop/batcher.mjs.js.map +1 -1
  219. package/dist/node_modules/motion-dom/dist/es/frameloop/frame-data.mjs.js +2 -0
  220. package/dist/node_modules/motion-dom/dist/es/frameloop/frame-data.mjs.js.map +1 -0
  221. package/dist/node_modules/motion-dom/dist/es/frameloop/frame.mjs.js +1 -1
  222. package/dist/node_modules/motion-dom/dist/es/frameloop/frame.mjs.js.map +1 -1
  223. package/dist/node_modules/motion-dom/dist/es/frameloop/render-step.mjs.js +1 -1
  224. package/dist/node_modules/motion-dom/dist/es/frameloop/render-step.mjs.js.map +1 -1
  225. package/dist/node_modules/motion-dom/dist/es/frameloop/sync-time.mjs.js +1 -1
  226. package/dist/node_modules/motion-dom/dist/es/frameloop/sync-time.mjs.js.map +1 -1
  227. package/dist/node_modules/motion-dom/dist/es/gestures/drag/VisualElementDragControls.mjs.js +2 -0
  228. package/dist/node_modules/motion-dom/dist/es/gestures/drag/VisualElementDragControls.mjs.js.map +1 -0
  229. package/dist/node_modules/motion-dom/dist/es/gestures/drag/utils/constraints.mjs.js +2 -0
  230. package/dist/node_modules/motion-dom/dist/es/gestures/drag/utils/constraints.mjs.js.map +1 -0
  231. package/dist/node_modules/motion-dom/dist/es/gestures/hover.mjs.js +1 -1
  232. package/dist/node_modules/motion-dom/dist/es/gestures/hover.mjs.js.map +1 -1
  233. package/dist/node_modules/motion-dom/dist/es/gestures/pan/PanSession.mjs.js +2 -0
  234. package/dist/node_modules/motion-dom/dist/es/gestures/pan/PanSession.mjs.js.map +1 -0
  235. package/dist/node_modules/motion-dom/dist/es/gestures/press/index.mjs.js +1 -1
  236. package/dist/node_modules/motion-dom/dist/es/gestures/press/index.mjs.js.map +1 -1
  237. package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/keyboard.mjs.js +1 -1
  238. package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/keyboard.mjs.js.map +1 -1
  239. package/dist/node_modules/motion-dom/dist/es/gestures/utils/setup.mjs.js +1 -1
  240. package/dist/node_modules/motion-dom/dist/es/gestures/utils/setup.mjs.js.map +1 -1
  241. package/dist/node_modules/motion-dom/dist/es/projection/animation/mix-values.mjs.js +1 -1
  242. package/dist/node_modules/motion-dom/dist/es/projection/animation/mix-values.mjs.js.map +1 -1
  243. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-apply.mjs.js +1 -1
  244. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-apply.mjs.js.map +1 -1
  245. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-calc.mjs.js +1 -1
  246. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-calc.mjs.js.map +1 -1
  247. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-remove.mjs.js +1 -1
  248. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-remove.mjs.js.map +1 -1
  249. package/dist/node_modules/motion-dom/dist/es/projection/geometry/round.mjs.js +2 -0
  250. package/dist/node_modules/motion-dom/dist/es/projection/geometry/round.mjs.js.map +1 -0
  251. package/dist/node_modules/motion-dom/dist/es/projection/node/DocumentProjectionNode.mjs.js +1 -1
  252. package/dist/node_modules/motion-dom/dist/es/projection/node/DocumentProjectionNode.mjs.js.map +1 -1
  253. package/dist/node_modules/motion-dom/dist/es/projection/node/HTMLProjectionNode.mjs.js +1 -1
  254. package/dist/node_modules/motion-dom/dist/es/projection/node/HTMLProjectionNode.mjs.js.map +1 -1
  255. package/dist/node_modules/motion-dom/dist/es/projection/node/create-projection-node.mjs.js +1 -1
  256. package/dist/node_modules/motion-dom/dist/es/projection/node/create-projection-node.mjs.js.map +1 -1
  257. package/dist/node_modules/motion-dom/dist/es/projection/node/root.mjs.js +2 -0
  258. package/dist/node_modules/motion-dom/dist/es/projection/node/root.mjs.js.map +1 -0
  259. package/dist/node_modules/motion-dom/dist/es/projection/styles/default-scale-correctors.mjs.js +2 -0
  260. package/dist/node_modules/motion-dom/dist/es/projection/styles/default-scale-correctors.mjs.js.map +1 -0
  261. package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-correction.mjs.js +1 -1
  262. package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-correction.mjs.js.map +1 -1
  263. package/dist/node_modules/motion-dom/dist/es/projection/styles/transform.mjs.js +1 -1
  264. package/dist/node_modules/motion-dom/dist/es/projection/styles/transform.mjs.js.map +1 -1
  265. package/dist/node_modules/motion-dom/dist/es/projection/utils/each-axis.mjs.js.map +1 -1
  266. package/dist/node_modules/motion-dom/dist/es/projection/utils/has-transform.mjs.js +1 -1
  267. package/dist/node_modules/motion-dom/dist/es/projection/utils/has-transform.mjs.js.map +1 -1
  268. package/dist/node_modules/motion-dom/dist/es/projection/utils/measure.mjs.js +1 -1
  269. package/dist/node_modules/motion-dom/dist/es/projection/utils/measure.mjs.js.map +1 -1
  270. package/dist/node_modules/motion-dom/dist/es/render/VisualElement.mjs.js +1 -1
  271. package/dist/node_modules/motion-dom/dist/es/render/VisualElement.mjs.js.map +1 -1
  272. package/dist/node_modules/motion-dom/dist/es/render/dom/DOMVisualElement.mjs.js.map +1 -1
  273. package/dist/node_modules/motion-dom/dist/es/render/dom/parse-transform.mjs.js +1 -1
  274. package/dist/node_modules/motion-dom/dist/es/render/dom/parse-transform.mjs.js.map +1 -1
  275. package/dist/node_modules/motion-dom/dist/es/render/html/HTMLVisualElement.mjs.js +1 -1
  276. package/dist/node_modules/motion-dom/dist/es/render/html/HTMLVisualElement.mjs.js.map +1 -1
  277. package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-transform.mjs.js +1 -1
  278. package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-transform.mjs.js.map +1 -1
  279. package/dist/node_modules/motion-dom/dist/es/render/svg/SVGVisualElement.mjs.js +1 -1
  280. package/dist/node_modules/motion-dom/dist/es/render/svg/SVGVisualElement.mjs.js.map +1 -1
  281. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/build-attrs.mjs.js +1 -1
  282. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/build-attrs.mjs.js.map +1 -1
  283. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/scrape-motion-values.mjs.js +1 -1
  284. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/scrape-motion-values.mjs.js.map +1 -1
  285. package/dist/node_modules/motion-dom/dist/es/render/utils/animation-state.mjs.js +1 -1
  286. package/dist/node_modules/motion-dom/dist/es/render/utils/animation-state.mjs.js.map +1 -1
  287. package/dist/node_modules/motion-dom/dist/es/render/utils/is-controlling-variants.mjs.js +1 -1
  288. package/dist/node_modules/motion-dom/dist/es/render/utils/is-controlling-variants.mjs.js.map +1 -1
  289. package/dist/node_modules/motion-dom/dist/es/render/utils/keys-transform.mjs.js +1 -1
  290. package/dist/node_modules/motion-dom/dist/es/render/utils/keys-transform.mjs.js.map +1 -1
  291. package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-dynamic-variants.mjs.js +1 -1
  292. package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-dynamic-variants.mjs.js.map +1 -1
  293. package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-variants.mjs.js +1 -1
  294. package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-variants.mjs.js.map +1 -1
  295. package/dist/node_modules/motion-dom/dist/es/render/utils/variant-props.mjs.js +1 -1
  296. package/dist/node_modules/motion-dom/dist/es/render/utils/variant-props.mjs.js.map +1 -1
  297. package/dist/node_modules/motion-dom/dist/es/resize/index.mjs.js +1 -1
  298. package/dist/node_modules/motion-dom/dist/es/resize/index.mjs.js.map +1 -1
  299. package/dist/node_modules/motion-dom/dist/es/scope/active.mjs.js +2 -0
  300. package/dist/node_modules/motion-dom/dist/es/scope/active.mjs.js.map +1 -0
  301. package/dist/node_modules/motion-dom/dist/es/stats/buffer.mjs.js +2 -0
  302. package/dist/node_modules/motion-dom/dist/es/stats/buffer.mjs.js.map +1 -0
  303. package/dist/node_modules/motion-dom/dist/es/utils/delay.mjs.js +1 -1
  304. package/dist/node_modules/motion-dom/dist/es/utils/delay.mjs.js.map +1 -1
  305. package/dist/node_modules/motion-dom/dist/es/utils/distance.mjs.js.map +1 -0
  306. package/dist/node_modules/motion-dom/dist/es/utils/interpolate.mjs.js +1 -1
  307. package/dist/node_modules/motion-dom/dist/es/utils/interpolate.mjs.js.map +1 -1
  308. package/dist/node_modules/motion-dom/dist/es/utils/is-ref-object.mjs.js.map +1 -0
  309. package/dist/node_modules/motion-dom/dist/es/utils/mix/color.mjs.js +1 -1
  310. package/dist/node_modules/motion-dom/dist/es/utils/mix/color.mjs.js.map +1 -1
  311. package/dist/node_modules/motion-dom/dist/es/utils/mix/complex.mjs.js +1 -1
  312. package/dist/node_modules/motion-dom/dist/es/utils/mix/complex.mjs.js.map +1 -1
  313. package/dist/node_modules/motion-dom/dist/es/utils/mix/index.mjs.js +1 -1
  314. package/dist/node_modules/motion-dom/dist/es/utils/mix/index.mjs.js.map +1 -1
  315. package/dist/node_modules/motion-dom/dist/es/utils/resolve-elements.mjs.js +1 -1
  316. package/dist/node_modules/motion-dom/dist/es/utils/resolve-elements.mjs.js.map +1 -1
  317. package/dist/node_modules/motion-dom/dist/es/value/index.mjs.js +1 -1
  318. package/dist/node_modules/motion-dom/dist/es/value/index.mjs.js.map +1 -1
  319. package/dist/node_modules/motion-dom/dist/es/value/types/color/hex.mjs.js +1 -1
  320. package/dist/node_modules/motion-dom/dist/es/value/types/color/hex.mjs.js.map +1 -1
  321. package/dist/node_modules/motion-dom/dist/es/value/types/complex/index.mjs.js +1 -1
  322. package/dist/node_modules/motion-dom/dist/es/value/types/complex/index.mjs.js.map +1 -1
  323. package/dist/node_modules/motion-dom/dist/es/value/types/utils/animatable-none.mjs.js +1 -1
  324. package/dist/node_modules/motion-dom/dist/es/value/types/utils/animatable-none.mjs.js.map +1 -1
  325. package/dist/node_modules/motion-dom/dist/es/value/utils/as-number.mjs.js +2 -0
  326. package/dist/node_modules/motion-dom/dist/es/value/utils/as-number.mjs.js.map +1 -0
  327. package/dist/node_modules/motion-utils/dist/es/easing/circ.mjs.js.map +1 -1
  328. package/dist/node_modules/motion-utils/dist/es/easing/cubic-bezier.mjs.js +1 -1
  329. package/dist/node_modules/motion-utils/dist/es/easing/cubic-bezier.mjs.js.map +1 -1
  330. package/dist/node_modules/motion-utils/dist/es/easing/utils/map.mjs.js +1 -1
  331. package/dist/node_modules/motion-utils/dist/es/easing/utils/map.mjs.js.map +1 -1
  332. package/dist/node_modules/motion-utils/dist/es/errors.mjs.js +1 -1
  333. package/dist/node_modules/motion-utils/dist/es/errors.mjs.js.map +1 -1
  334. package/dist/node_modules/motion-utils/dist/es/subscription-manager.mjs.js +1 -1
  335. package/dist/node_modules/motion-utils/dist/es/subscription-manager.mjs.js.map +1 -1
  336. package/dist/node_modules/react-i18next/dist/es/context.js +1 -1
  337. package/dist/node_modules/react-i18next/dist/es/context.js.map +1 -1
  338. package/dist/node_modules/react-i18next/dist/es/defaults.js +1 -1
  339. package/dist/node_modules/react-i18next/dist/es/defaults.js.map +1 -1
  340. package/dist/node_modules/react-i18next/dist/es/i18nInstance.js +1 -1
  341. package/dist/node_modules/react-i18next/dist/es/i18nInstance.js.map +1 -1
  342. package/dist/node_modules/react-i18next/dist/es/initReactI18next.js +1 -1
  343. package/dist/node_modules/react-i18next/dist/es/initReactI18next.js.map +1 -1
  344. package/dist/node_modules/react-i18next/dist/es/unescape.js +1 -1
  345. package/dist/node_modules/react-i18next/dist/es/unescape.js.map +1 -1
  346. package/dist/node_modules/react-i18next/dist/es/useTranslation.js +1 -1
  347. package/dist/node_modules/react-i18next/dist/es/useTranslation.js.map +1 -1
  348. package/dist/node_modules/react-i18next/dist/es/utils.js +1 -1
  349. package/dist/node_modules/react-i18next/dist/es/utils.js.map +1 -1
  350. package/dist/node_modules/react-redux/node_modules/react-is/index.js +1 -1
  351. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +1 -1
  352. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js +1 -1
  353. package/dist/node_modules/use-sync-external-store/shim/index.js +1 -1
  354. package/dist/package.json.js +1 -1
  355. package/dist/services/astproxy.js +1 -1
  356. package/dist/services/astproxy.js.map +1 -1
  357. package/dist/services/phonebook.js +1 -1
  358. package/dist/services/phonebook.js.map +1 -1
  359. package/dist/utils/customHooks/useLocalStorage.js.map +1 -1
  360. package/dist/utils/deviceUtils.js.map +1 -1
  361. package/package.json +6 -6
  362. package/dist/_virtual/arrayLikeToArray.js +0 -2
  363. package/dist/_virtual/arrayLikeToArray.js.map +0 -1
  364. package/dist/_virtual/arrayWithHoles.js +0 -2
  365. package/dist/_virtual/arrayWithHoles.js.map +0 -1
  366. package/dist/_virtual/classCallCheck.js +0 -2
  367. package/dist/_virtual/classCallCheck.js.map +0 -1
  368. package/dist/_virtual/createClass.js +0 -2
  369. package/dist/_virtual/createClass.js.map +0 -1
  370. package/dist/_virtual/defineProperty.js +0 -2
  371. package/dist/_virtual/defineProperty.js.map +0 -1
  372. package/dist/_virtual/iterableToArrayLimit.js +0 -2
  373. package/dist/_virtual/iterableToArrayLimit.js.map +0 -1
  374. package/dist/_virtual/nonIterableRest.js +0 -2
  375. package/dist/_virtual/nonIterableRest.js.map +0 -1
  376. package/dist/_virtual/objectWithoutProperties.js +0 -2
  377. package/dist/_virtual/objectWithoutProperties.js.map +0 -1
  378. package/dist/_virtual/objectWithoutPropertiesLoose.js +0 -2
  379. package/dist/_virtual/objectWithoutPropertiesLoose.js.map +0 -1
  380. package/dist/_virtual/slicedToArray.js +0 -2
  381. package/dist/_virtual/slicedToArray.js.map +0 -1
  382. package/dist/_virtual/toPrimitive.js +0 -2
  383. package/dist/_virtual/toPrimitive.js.map +0 -1
  384. package/dist/_virtual/toPropertyKey.js +0 -2
  385. package/dist/_virtual/toPropertyKey.js.map +0 -1
  386. package/dist/_virtual/typeof.js +0 -2
  387. package/dist/_virtual/typeof.js.map +0 -1
  388. package/dist/_virtual/unsupportedIterableToArray.js +0 -2
  389. package/dist/_virtual/unsupportedIterableToArray.js.map +0 -1
  390. package/dist/node_modules/@babel/runtime/helpers/arrayLikeToArray.js +0 -2
  391. package/dist/node_modules/@babel/runtime/helpers/arrayLikeToArray.js.map +0 -1
  392. package/dist/node_modules/@babel/runtime/helpers/arrayWithHoles.js +0 -2
  393. package/dist/node_modules/@babel/runtime/helpers/arrayWithHoles.js.map +0 -1
  394. package/dist/node_modules/@babel/runtime/helpers/classCallCheck.js +0 -2
  395. package/dist/node_modules/@babel/runtime/helpers/classCallCheck.js.map +0 -1
  396. package/dist/node_modules/@babel/runtime/helpers/createClass.js +0 -2
  397. package/dist/node_modules/@babel/runtime/helpers/createClass.js.map +0 -1
  398. package/dist/node_modules/@babel/runtime/helpers/defineProperty.js +0 -2
  399. package/dist/node_modules/@babel/runtime/helpers/defineProperty.js.map +0 -1
  400. package/dist/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js +0 -2
  401. package/dist/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js.map +0 -1
  402. package/dist/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js +0 -2
  403. package/dist/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js.map +0 -1
  404. package/dist/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js +0 -2
  405. package/dist/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js.map +0 -1
  406. package/dist/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js +0 -2
  407. package/dist/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js.map +0 -1
  408. package/dist/node_modules/@babel/runtime/helpers/esm/inherits.js +0 -2
  409. package/dist/node_modules/@babel/runtime/helpers/esm/inherits.js.map +0 -1
  410. package/dist/node_modules/@babel/runtime/helpers/esm/iterableToArray.js +0 -2
  411. package/dist/node_modules/@babel/runtime/helpers/esm/iterableToArray.js.map +0 -1
  412. package/dist/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js +0 -2
  413. package/dist/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js.map +0 -1
  414. package/dist/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js +0 -2
  415. package/dist/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js.map +0 -1
  416. package/dist/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js +0 -2
  417. package/dist/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js.map +0 -1
  418. package/dist/node_modules/@babel/runtime/helpers/esm/toArray.js +0 -2
  419. package/dist/node_modules/@babel/runtime/helpers/esm/toArray.js.map +0 -1
  420. package/dist/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js +0 -2
  421. package/dist/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js.map +0 -1
  422. package/dist/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js +0 -2
  423. package/dist/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js.map +0 -1
  424. package/dist/node_modules/@babel/runtime/helpers/nonIterableRest.js +0 -2
  425. package/dist/node_modules/@babel/runtime/helpers/nonIterableRest.js.map +0 -1
  426. package/dist/node_modules/@babel/runtime/helpers/objectWithoutProperties.js +0 -2
  427. package/dist/node_modules/@babel/runtime/helpers/objectWithoutProperties.js.map +0 -1
  428. package/dist/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js +0 -2
  429. package/dist/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js.map +0 -1
  430. package/dist/node_modules/@babel/runtime/helpers/slicedToArray.js +0 -2
  431. package/dist/node_modules/@babel/runtime/helpers/slicedToArray.js.map +0 -1
  432. package/dist/node_modules/@babel/runtime/helpers/toPrimitive.js +0 -2
  433. package/dist/node_modules/@babel/runtime/helpers/toPrimitive.js.map +0 -1
  434. package/dist/node_modules/@babel/runtime/helpers/toPropertyKey.js +0 -2
  435. package/dist/node_modules/@babel/runtime/helpers/toPropertyKey.js.map +0 -1
  436. package/dist/node_modules/@babel/runtime/helpers/typeof.js +0 -2
  437. package/dist/node_modules/@babel/runtime/helpers/typeof.js.map +0 -1
  438. package/dist/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js +0 -2
  439. package/dist/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js.map +0 -1
  440. package/dist/node_modules/framer-motion/dist/es/events/add-pointer-event.mjs.js +0 -2
  441. package/dist/node_modules/framer-motion/dist/es/events/add-pointer-event.mjs.js.map +0 -1
  442. package/dist/node_modules/framer-motion/dist/es/events/event-info.mjs.js +0 -2
  443. package/dist/node_modules/framer-motion/dist/es/events/event-info.mjs.js.map +0 -1
  444. package/dist/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs.js +0 -2
  445. package/dist/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs.js.map +0 -1
  446. package/dist/node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.mjs.js +0 -2
  447. package/dist/node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.mjs.js.map +0 -1
  448. package/dist/node_modules/framer-motion/dist/es/gestures/pan/PanSession.mjs.js +0 -2
  449. package/dist/node_modules/framer-motion/dist/es/gestures/pan/PanSession.mjs.js.map +0 -1
  450. package/dist/node_modules/framer-motion/dist/es/utils/distance.mjs.js.map +0 -1
  451. package/dist/node_modules/framer-motion/dist/es/utils/get-context-window.mjs.js +0 -2
  452. package/dist/node_modules/framer-motion/dist/es/utils/get-context-window.mjs.js.map +0 -1
  453. package/dist/node_modules/framer-motion/dist/es/utils/is-ref-object.mjs.js.map +0 -1
  454. package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.js +0 -2
  455. package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.js.map +0 -1
  456. package/dist/node_modules/motion-dom/dist/es/render/utils/get-variant-context.mjs.js +0 -2
  457. package/dist/node_modules/motion-dom/dist/es/render/utils/get-variant-context.mjs.js.map +0 -1
  458. package/dist/node_modules/motion-dom/dist/es/value/types/utils/find.mjs.js +0 -2
  459. package/dist/node_modules/motion-dom/dist/es/value/types/utils/find.mjs.js.map +0 -1
  460. package/dist/node_modules/void-elements/index.js +0 -2
  461. package/dist/node_modules/void-elements/index.js.map +0 -1
  462. /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/utils/distance.mjs.js +0 -0
  463. /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/utils/is-ref-object.mjs.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ContactListView.js","sources":["../../../src/components/ContactView/ContactListView.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useEffect, useState, FormEvent, useRef, useMemo } from 'react'\nimport { Button } from '../Button'\nimport { RootState } from '../../store'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { backToPreviousView } from '../../lib/island/island'\nimport {\n faPhone,\n faArrowLeft,\n faUser,\n faBuilding,\n faAngleRight,\n faHeadset,\n} from '@fortawesome/free-solid-svg-icons'\nimport { UserEndpointsTypes } from '../../types'\nimport {\n clickTransferOrConference,\n handleAttendedTransfer,\n isInsideConferenceList,\n} from '../../lib/phone/call'\nimport { Dispatch } from '../../store'\nimport { useTranslation } from 'react-i18next'\nimport { useEventListener, eventDispatch } from '../../utils'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\nimport { getMainPhoneNumber, getTotalPhoneNumbers, searchPhonebook } from '../../services/phonebook'\nimport { PhonebookContact } from '../../types/phonebook'\nimport { SelectContactNumberView } from './SelectContactNumberView'\nimport debounce from 'lodash/debounce'\nimport ListAvatar from './ListAvatar'\n\nconst USERS_NUMBER_PER_PAGE = 10\nconst SHOW_LIST_GRADIENT_DISTANCE = 3\n\nexport const ContactListView: FC<ContactListViewProps> = () => {\n const { isOpen, contactListView } = useSelector((state: RootState) => state.island)\n const { endpoints } = useSelector((state: RootState) => state.users)\n const { username } = useSelector((state: RootState) => state.currentUser)\n const [loaded, setLoaded] = useState<boolean>(false)\n const [filteredOperators, setFilteredOperators] = useState<UserEndpointsTypes[]>([])\n const [filteredPhonebookContacts, setFilteredPhonebookContacts] = useState<PhonebookContact[]>([])\n const [currentContact, setCurrentContact] = useState<PhonebookContact>()\n const [firstPhonebookLoading, setFirstPhonebookLoading] = useState(true)\n const [searchQuery, setSearchQuery] = useState('')\n const [showPhoneNumberTyped, setShowPhoneNumberTyped] = useState<boolean>()\n const relativeRef = useRef<HTMLDivElement>(null)\n const [showGradient, setShowGradient] = useState<boolean>(false)\n const [showingUsers, setShowingUsers] = useState<number>(USERS_NUMBER_PER_PAGE)\n const dispatch = useDispatch<Dispatch>()\n const { paused } = useSelector((state: RootState) => state.currentCall)\n\n const filteredContacts = useMemo(() => {\n return [...filteredOperators, ...filteredPhonebookContacts]\n }, [filteredOperators, filteredPhonebookContacts])\n\n // debounce phonebook search\n const debouncedSearchPhonebookContacts = useRef(\n debounce((value: string) => {\n retrievePhonebookContacts(value)\n }, 300), // debounce delay\n ).current\n\n // cleanup the debounce function on unmount\n useEffect(() => {\n return () => {\n debouncedSearchPhonebookContacts.cancel()\n }\n }, [debouncedSearchPhonebookContacts])\n\n function searchQueryChanged(event: FormEvent<HTMLInputElement>) {\n setSearchQuery(event.currentTarget.value)\n debouncedSearchPhonebookContacts(event.currentTarget.value)\n filterOperators(event.currentTarget.value)\n }\n\n function retrieveContacts() {\n filterOperators(searchQuery)\n\n // load phonebook contacts only once\n\n if (firstPhonebookLoading) {\n retrievePhonebookContacts(searchQuery)\n setFirstPhonebookLoading(false)\n }\n }\n\n function filterOperators(textQuery: string = '') {\n textQuery = textQuery.trim().toLowerCase()\n\n if (endpoints) {\n const operators = Object?.values(endpoints).filter(\n (userEndpoints: UserEndpointsTypes) =>\n // Remove the currentUser from the list\n userEndpoints?.username !== username &&\n (userEndpoints?.endpoints?.extension.find((extension) =>\n extension?.id?.toLowerCase()?.startsWith(textQuery),\n ) ||\n userEndpoints?.username?.toLowerCase()?.includes(textQuery) ||\n userEndpoints?.name?.toLowerCase()?.includes(textQuery)),\n )\n setFilteredOperators(operators)\n }\n }\n\n async function retrievePhonebookContacts(textQuery: string = '') {\n setLoaded(false)\n textQuery = textQuery.trim().toLowerCase()\n\n // phone number typed\n\n if (/^[0-9*#+]+$/.test(textQuery)) {\n setShowPhoneNumberTyped(true)\n } else {\n setShowPhoneNumberTyped(false)\n }\n\n // search phonebook\n\n try {\n const phonebookSearchResult = await searchPhonebook(1, textQuery, '')\n setFilteredPhonebookContacts(phonebookSearchResult.rows)\n } catch (error) {\n console.error('Error fetching phonebook:', error)\n }\n setLoaded(true)\n }\n\n useEventListener('phone-island-call-transfer', (data: CallStartTypes) => {\n handleAttendedTransfer(data.number, dispatch)\n eventDispatch('phone-island-call-transfer-opened', {})\n })\n\n // Retrieve\n useEffect(() => {\n if (endpoints && username) {\n retrieveContacts()\n }\n }, [endpoints, username])\n\n useEffect(() => {\n // Handle users list scrolling\n const handleScroll = () => {\n setShowGradient(\n relativeRef.current && relativeRef.current.scrollTop > SHOW_LIST_GRADIENT_DISTANCE\n ? true\n : false,\n )\n // Manage scroll to bottom\n if (\n relativeRef.current &&\n relativeRef.current?.offsetHeight + relativeRef.current?.scrollTop >=\n relativeRef.current?.scrollHeight - 10\n ) {\n // Improve showing users\n setShowingUsers((state) => state + USERS_NUMBER_PER_PAGE)\n }\n }\n // Manage expansion and collapsing\n if (isOpen) {\n relativeRef.current?.addEventListener('scroll', handleScroll)\n } else {\n relativeRef.current?.removeEventListener('scroll', handleScroll)\n }\n return () => relativeRef.current?.removeEventListener('scroll', handleScroll)\n }, [isOpen])\n\n function handleBackClick() {\n if (isInsideConferenceList()) {\n // Close the conference list\n eventDispatch('phone-island-conference-list-close', {})\n }\n // Unhold the call if it was paused during transfer selection\n if (paused) {\n eventDispatch('phone-island-call-unhold', {})\n }\n // Open the call view\n backToPreviousView()\n }\n\n function isUserEndpointsType(obj: any): obj is UserEndpointsTypes {\n return obj && typeof obj === 'object' && 'endpoints' in obj && 'username' in obj\n }\n\n function isPhonebookContact(obj: any): obj is PhonebookContact {\n return obj && typeof obj === 'object' && 'source' in obj && 'name' in obj\n }\n\n function isContactAvailable(mainPresence: string): boolean {\n return ['online', 'voicemail', 'cellphone', 'callforward']?.includes(mainPresence)\n }\n\n function goToSelectNumberView(phonebookContact: PhonebookContact): void {\n setCurrentContact(phonebookContact)\n dispatch.island.setContactListView('selectContactNumber')\n }\n\n const { t } = useTranslation()\n\n const mainView = (\n <div className='pi-relative pi-flex pi-flex-col'>\n {/* Top section */}\n <div className='pi-relative pi-z-50'>\n <div className='pi-flex pi-gap-4'>\n <Button\n variant='transparent'\n onClick={handleBackClick}\n data-tooltip-id='contact-list-tooltip-back-to-call'\n data-tooltip-content={t('Tooltip.Back to call') || ''}\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faArrowLeft} />\n </Button>\n <input\n data-stop-propagation={true}\n type='text'\n onChange={searchQueryChanged}\n value={searchQuery}\n placeholder={t('Common.Search contact or phone number') || ''}\n autoFocus\n spellCheck={false}\n className='pi-w-full pi-rounded-full dark:pi-bg-gray-950 pi-bg-gray-50 pi-border-2 pi-border-emerald-500 dark:pi-border-emerald-200 active:pi-border-emerald-500 dark:active:pi-border-emerald-200 focus:pi-border-emerald-500 dark:focus:pi-border-emerald-200 pi-text-gray-900 dark:pi-text-gray-50 pi-font-light pi-text-sm pi-px-5 focus:pi-outline-0 focus:pi-ring-0 pi-placeholder-gray-400 dark:pi-placeholder-gray-500 pi-font-[inherit]'\n />\n </div>\n </div>\n {/* skeleton loader */}\n {!loaded && (\n <div className='pi-mt-6'>\n {Array.from({ length: 5 }).map((_, i) => (\n <div\n key={i}\n className='pi-animate-pulse pi-flex pi-items-center pi-space-x-4 pi-px-3 pi-py-1'\n >\n <div className='pi-flex pi-items-center pi-justify-center'>\n <div className='pi-rounded-full pi-h-12 pi-w-12 pi-bg-gray-300 dark:pi-bg-gray-700'></div>\n </div>\n <div className='pi-flex pi-flex-col pi-gap-2 pi-w-full'>\n <div className='pi-h-3 pi-w-4/5 pi-rounded pi-bg-gray-300 dark:pi-bg-gray-700'></div>\n <div className='pi-h-3 pi-w-1/2 pi-rounded pi-bg-gray-300 dark:pi-bg-gray-700'></div>\n </div>\n <div className='pi-flex pi-items-center pi-justify-center pi-pr-2'>\n <div className='pi-rounded-full pi-h-12 pi-w-12 pi-bg-gray-300 dark:pi-bg-gray-700'></div>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* contact list */}\n <div className={!loaded ? 'pi-hidden' : ''}>\n {/* List shadow */}\n <div className='pi-z-30 pi-h-6 pi-pointer-events-none pi-bg-transparent pi-mt-7 pi-pr-4'>\n {showGradient && (\n <div className='pi-h-6 pi-w-full pi-bg-gradient-to-b dark:pi-from-black pi-from-gray-100 pi-to-transparent pi-z-100'></div>\n )}\n </div>\n <div style={{ marginTop: '-22px' }} className='pi-flex pi-flex-col pi-gap-7'>\n {/* List section */}\n <div\n style={{ height: '17rem' }}\n ref={relativeRef}\n className='pi-relative pi-w-full pi-flex pi-flex-col pi-gap-1 pi-overflow-y-auto pi-overflow-x-hidden pi-scrollbar-thin pi-scrollbar-thumb-gray-400 pi-scrollbar-thumb-rounded-full pi-scrollbar-thumb-opacity-50 dark:pi-scrollbar-track-gray-900 pi-scrollbar-track-gray-200 pi-scrollbar-track-rounded-full pi-scrollbar-track-opacity-25'\n >\n {/* The custom searched number */}\n {showPhoneNumberTyped && (\n <div className='pi-flex pi-items-center pi-w-full pi-justify-between pi-px-3 pi-py-1 pi-rounded-md hover:pi-bg-gray-200 hover:dark:pi-bg-gray-800'>\n <div className='pi-flex pi-items-center pi-gap-4'>\n <ListAvatar placeHolderIcon={faUser} />\n <div>\n <div className='pi-h-fit pi-max-w-48 pi-truncate pi-text-sm pi-font-medium'>\n {t('Common.Phone number entered')}\n </div>\n <div className='pi-text-sm pi-max-w-48 pi-text-gray-700 dark:pi-text-gray-300'>\n {searchQuery}\n </div>\n </div>\n </div>\n <div className='pi-flex pi-gap-3.5'>\n <Button\n onClick={() => clickTransferOrConference(searchQuery, dispatch)}\n variant='green'\n data-tooltip-id='contact-list-tooltip-call-to-transfer'\n data-tooltip-content={\n isInsideConferenceList()\n ? t('Conference.Add participant')\n : t('Tooltip.Transfer call')\n }\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faPhone} />\n </Button>\n </div>\n </div>\n )}\n {/* Operators and phonebook contacts list */}\n {filteredContacts &&\n filteredContacts.slice(0, showingUsers).map((filteredContact, i) => (\n <div\n key={i}\n className='pi-flex pi-items-center pi-w-full pi-justify-between pi-px-3 pi-py-1 pi-rounded-md hover:pi-bg-gray-200 hover:dark:pi-bg-gray-800'\n >\n <div className='pi-flex pi-items-center pi-gap-4'>\n {(() => {\n if (isUserEndpointsType(filteredContact)) {\n return (\n <>\n <ListAvatar\n username={filteredContact?.username}\n status={filteredContact?.mainPresence}\n placeHolderIcon={faHeadset}\n />\n <div>\n <div\n data-stop-propagation={true}\n className={`pi-h-fit pi-max-w-48 pi-truncate pi-text-sm pi-font-medium`}\n >\n {filteredContact.name}\n </div>\n <div className='pi-text-sm pi-max-w-48 pi-text-gray-700 dark:pi-text-gray-300'>\n {filteredContact?.endpoints?.mainextension[0]?.id}\n </div>\n </div>\n </>\n )\n } else if (isPhonebookContact(filteredContact)) {\n return (\n <>\n <ListAvatar\n placeHolderIcon={\n filteredContact?.kind === 'person' ? faUser : faBuilding\n }\n />\n <div>\n <div\n data-stop-propagation={true}\n className='pi-h-fit pi-max-w-48 pi-truncate pi-text-sm pi-font-medium'\n >\n {filteredContact?.displayName || '-'}\n </div>\n <div className='pi-text-sm pi-max-w-48 pi-text-gray-700 dark:pi-text-gray-300'>\n <span>{getMainPhoneNumber(filteredContact) || '-'}</span>\n {getTotalPhoneNumbers(filteredContact) > 1 && (\n <span className='pi-ml-2'>\n {t('Common.plus_x_others', {\n count: getTotalPhoneNumbers(filteredContact) - 1,\n })}\n </span>\n )}\n </div>\n </div>\n </>\n )\n }\n })()}\n </div>\n <div className='pi-flex pi-gap-3.5'>\n {(() => {\n if (isUserEndpointsType(filteredContact)) {\n return (\n <Button\n onClick={() =>\n isContactAvailable(filteredContact?.mainPresence) &&\n clickTransferOrConference(\n filteredContact?.endpoints?.mainextension[0]?.id,\n dispatch,\n )\n }\n variant='green'\n disabled={!isContactAvailable(filteredContact?.mainPresence)}\n data-tooltip-id={\n isContactAvailable(filteredContact?.mainPresence)\n ? 'contact-list-tooltip-left'\n : ''\n }\n data-tooltip-content={\n isInsideConferenceList()\n ? t('Conference.Add participant')\n : t('Tooltip.Transfer call')\n }\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faPhone} />\n </Button>\n )\n } else if (isPhonebookContact(filteredContact)) {\n if (getTotalPhoneNumbers(filteredContact) < 2) {\n return (\n <Button\n onClick={() =>\n clickTransferOrConference(\n getMainPhoneNumber(filteredContact),\n dispatch,\n )\n }\n variant='green'\n disabled={getTotalPhoneNumbers(filteredContact) == 0}\n data-tooltip-id={\n getTotalPhoneNumbers(filteredContact) > 0\n ? 'contact-list-tooltip-left'\n : ''\n }\n data-tooltip-content={\n isInsideConferenceList()\n ? t('Conference.Add participant')\n : t('Tooltip.Transfer call')\n }\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faPhone} />\n </Button>\n )\n } else {\n // change view to show contact numbers\n return (\n <Button\n onClick={() => goToSelectNumberView(filteredContact)}\n variant='transparent'\n data-tooltip-id={'contact-list-tooltip-left'}\n data-tooltip-content={t('Tooltip.Select phone number')}\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faAngleRight} />\n </Button>\n )\n }\n }\n })()}\n </div>\n </div>\n ))}\n {filteredContacts.length === 0 && !showPhoneNumberTyped && (\n <p className=' pi-font-medium pi-w-full pi-flex pi-justify-center pi-text-sm'>\n {t('No contacts found')}\n </p>\n )}\n </div>\n </div>\n </div>\n </div>\n )\n\n return (\n <>\n {(() => {\n switch (contactListView) {\n case 'main':\n return mainView\n case 'selectContactNumber':\n return <SelectContactNumberView contact={currentContact} />\n default:\n return mainView\n }\n })()}\n <CustomThemedTooltip className='pi-z-1000' id='contact-list-tooltip-left' place='left' />\n <CustomThemedTooltip\n className='pi-z-1000'\n id='contact-list-tooltip-back-to-call'\n place='right'\n />\n <CustomThemedTooltip\n className='pi-z-1000'\n id='contact-list-tooltip-call-to-transfer'\n place='left'\n />\n </>\n )\n}\n\ninterface ContactListViewProps {}\n\ninterface CallStartTypes {\n number: string\n}\n"],"names":["_a","useSelector","state","island","isOpen","contactListView","endpoints","users","username","currentUser","_b","useState","loaded","setLoaded","_c","filteredOperators","setFilteredOperators","_d","filteredPhonebookContacts","setFilteredPhonebookContacts","_e","currentContact","setCurrentContact","_f","firstPhonebookLoading","setFirstPhonebookLoading","_g","searchQuery","setSearchQuery","_h","showPhoneNumberTyped","setShowPhoneNumberTyped","relativeRef","useRef","_j","showGradient","setShowGradient","_k","showingUsers","setShowingUsers","dispatch","useDispatch","paused","currentCall","filteredContacts","useMemo","__spreadArray","debouncedSearchPhonebookContacts","debounce","value","retrievePhonebookContacts","current","filterOperators","textQuery","trim","toLowerCase","operators","Object","values","filter","userEndpoints","extension","find","id","startsWith","includes","name","test","searchPhonebook","phonebookSearchResult","sent","rows","console","error","error_1","isUserEndpointsType","obj","isPhonebookContact","isContactAvailable","mainPresence","useEffect","cancel","useEventListener","data","handleAttendedTransfer","number","eventDispatch","handleScroll","scrollTop","offsetHeight","scrollHeight","addEventListener","removeEventListener","t","useTranslation","mainView","React","createElement","className","Button","variant","onClick","isInsideConferenceList","backToPreviousView","FontAwesomeIcon","icon","faArrowLeft","type","onChange","event","currentTarget","placeholder","autoFocus","spellCheck","Array","from","length","map","_","i","key","style","marginTop","height","ref","ListAvatar","placeHolderIcon","faUser","clickTransferOrConference","faPhone","slice","filteredContact","Fragment","status","faHeadset","mainextension","kind","faBuilding","displayName","getMainPhoneNumber","getTotalPhoneNumbers","count","disabled","setContactListView","faAngleRight","SelectContactNumberView","contact","CustomThemedTooltip","place"],"mappings":"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"}
1
+ {"version":3,"file":"ContactListView.js","sources":["../../../src/components/ContactView/ContactListView.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useEffect, useState, FormEvent, useRef, useMemo } from 'react'\nimport { Button } from '../Button'\nimport { RootState } from '../../store'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { backToPreviousView } from '../../lib/island/island'\nimport {\n faPhone,\n faArrowLeft,\n faUser,\n faBuilding,\n faAngleRight,\n faHeadset,\n} from '@fortawesome/free-solid-svg-icons'\nimport { UserEndpointsTypes } from '../../types'\nimport {\n clickTransferOrConference,\n handleAttendedTransfer,\n isInsideConferenceList,\n} from '../../lib/phone/call'\nimport { Dispatch } from '../../store'\nimport { useTranslation } from 'react-i18next'\nimport { useEventListener, eventDispatch } from '../../utils'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\nimport { getMainPhoneNumber, getTotalPhoneNumbers, searchPhonebook } from '../../services/phonebook'\nimport { PhonebookContact } from '../../types/phonebook'\nimport { SelectContactNumberView } from './SelectContactNumberView'\nimport debounce from 'lodash/debounce'\nimport ListAvatar from './ListAvatar'\n\nconst USERS_NUMBER_PER_PAGE = 10\nconst SHOW_LIST_GRADIENT_DISTANCE = 3\n\nexport const ContactListView: FC<ContactListViewProps> = () => {\n const { isOpen, contactListView } = useSelector((state: RootState) => state.island)\n const { endpoints } = useSelector((state: RootState) => state.users)\n const { username } = useSelector((state: RootState) => state.currentUser)\n const [loaded, setLoaded] = useState<boolean>(false)\n const [filteredOperators, setFilteredOperators] = useState<UserEndpointsTypes[]>([])\n const [filteredPhonebookContacts, setFilteredPhonebookContacts] = useState<PhonebookContact[]>([])\n const [currentContact, setCurrentContact] = useState<PhonebookContact>()\n const [firstPhonebookLoading, setFirstPhonebookLoading] = useState(true)\n const [searchQuery, setSearchQuery] = useState('')\n const [showPhoneNumberTyped, setShowPhoneNumberTyped] = useState<boolean>()\n const relativeRef = useRef<HTMLDivElement>(null)\n const [showGradient, setShowGradient] = useState<boolean>(false)\n const [showingUsers, setShowingUsers] = useState<number>(USERS_NUMBER_PER_PAGE)\n const dispatch = useDispatch<Dispatch>()\n const { paused } = useSelector((state: RootState) => state.currentCall)\n\n const filteredContacts = useMemo(() => {\n return [...filteredOperators, ...filteredPhonebookContacts]\n }, [filteredOperators, filteredPhonebookContacts])\n\n // debounce phonebook search\n const debouncedSearchPhonebookContacts = useRef(\n debounce((value: string) => {\n retrievePhonebookContacts(value)\n }, 300), // debounce delay\n ).current\n\n // cleanup the debounce function on unmount\n useEffect(() => {\n return () => {\n debouncedSearchPhonebookContacts.cancel()\n }\n }, [debouncedSearchPhonebookContacts])\n\n function searchQueryChanged(event: FormEvent<HTMLInputElement>) {\n setSearchQuery(event.currentTarget.value)\n debouncedSearchPhonebookContacts(event.currentTarget.value)\n filterOperators(event.currentTarget.value)\n }\n\n function retrieveContacts() {\n filterOperators(searchQuery)\n\n // load phonebook contacts only once\n\n if (firstPhonebookLoading) {\n retrievePhonebookContacts(searchQuery)\n setFirstPhonebookLoading(false)\n }\n }\n\n function filterOperators(textQuery: string = '') {\n textQuery = textQuery.trim().toLowerCase()\n\n if (endpoints) {\n const operators = Object?.values(endpoints).filter(\n (userEndpoints: UserEndpointsTypes) =>\n // Remove the currentUser from the list\n userEndpoints?.username !== username &&\n (userEndpoints?.endpoints?.extension.find((extension) =>\n extension?.id?.toLowerCase()?.startsWith(textQuery),\n ) ||\n userEndpoints?.username?.toLowerCase()?.includes(textQuery) ||\n userEndpoints?.name?.toLowerCase()?.includes(textQuery)),\n )\n setFilteredOperators(operators)\n }\n }\n\n async function retrievePhonebookContacts(textQuery: string = '') {\n setLoaded(false)\n textQuery = textQuery.trim().toLowerCase()\n\n // phone number typed\n\n if (/^[0-9*#+]+$/.test(textQuery)) {\n setShowPhoneNumberTyped(true)\n } else {\n setShowPhoneNumberTyped(false)\n }\n\n // search phonebook\n\n try {\n const phonebookSearchResult = await searchPhonebook(1, textQuery, '')\n setFilteredPhonebookContacts(phonebookSearchResult.rows)\n } catch (error) {\n console.error('Error fetching phonebook:', error)\n }\n setLoaded(true)\n }\n\n useEventListener('phone-island-call-transfer', (data: CallStartTypes) => {\n handleAttendedTransfer(data.number, dispatch)\n eventDispatch('phone-island-call-transfer-opened', {})\n })\n\n // Retrieve\n useEffect(() => {\n if (endpoints && username) {\n retrieveContacts()\n }\n }, [endpoints, username])\n\n useEffect(() => {\n // Handle users list scrolling\n const handleScroll = () => {\n setShowGradient(\n relativeRef.current && relativeRef.current.scrollTop > SHOW_LIST_GRADIENT_DISTANCE\n ? true\n : false,\n )\n // Manage scroll to bottom\n if (\n relativeRef.current &&\n relativeRef.current?.offsetHeight + relativeRef.current?.scrollTop >=\n relativeRef.current?.scrollHeight - 10\n ) {\n // Improve showing users\n setShowingUsers((state) => state + USERS_NUMBER_PER_PAGE)\n }\n }\n // Manage expansion and collapsing\n if (isOpen) {\n relativeRef.current?.addEventListener('scroll', handleScroll)\n } else {\n relativeRef.current?.removeEventListener('scroll', handleScroll)\n }\n return () => relativeRef.current?.removeEventListener('scroll', handleScroll)\n }, [isOpen])\n\n function handleBackClick() {\n if (isInsideConferenceList()) {\n // Close the conference list\n eventDispatch('phone-island-conference-list-close', {})\n }\n // Unhold the call if it was paused during transfer selection\n if (paused) {\n eventDispatch('phone-island-call-unhold', {})\n }\n // Open the call view\n backToPreviousView()\n }\n\n function isUserEndpointsType(obj: any): obj is UserEndpointsTypes {\n return obj && typeof obj === 'object' && 'endpoints' in obj && 'username' in obj\n }\n\n function isPhonebookContact(obj: any): obj is PhonebookContact {\n return obj && typeof obj === 'object' && 'source' in obj && 'name' in obj\n }\n\n function isContactAvailable(mainPresence: string): boolean {\n return ['online', 'voicemail', 'cellphone', 'callforward']?.includes(mainPresence)\n }\n\n function goToSelectNumberView(phonebookContact: PhonebookContact): void {\n setCurrentContact(phonebookContact)\n dispatch.island.setContactListView('selectContactNumber')\n }\n\n const { t } = useTranslation()\n\n const mainView = (\n <div className='pi-relative pi-flex pi-flex-col'>\n {/* Top section */}\n <div className='pi-relative pi-z-50'>\n <div className='pi-flex pi-gap-4'>\n <Button\n variant='transparent'\n onClick={handleBackClick}\n data-tooltip-id='contact-list-tooltip-back-to-call'\n data-tooltip-content={t('Tooltip.Back to call') || ''}\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faArrowLeft} />\n </Button>\n <input\n data-stop-propagation={true}\n type='text'\n onChange={searchQueryChanged}\n value={searchQuery}\n placeholder={t('Common.Search contact or phone number') || ''}\n autoFocus\n spellCheck={false}\n className='pi-w-full pi-rounded-full dark:pi-bg-gray-950 pi-bg-gray-50 pi-border-2 pi-border-emerald-500 dark:pi-border-emerald-200 active:pi-border-emerald-500 dark:active:pi-border-emerald-200 focus:pi-border-emerald-500 dark:focus:pi-border-emerald-200 pi-text-gray-900 dark:pi-text-gray-50 pi-font-light pi-text-sm pi-px-5 focus:pi-outline-0 focus:pi-ring-0 pi-placeholder-gray-400 dark:pi-placeholder-gray-500 pi-font-[inherit]'\n />\n </div>\n </div>\n {/* skeleton loader */}\n {!loaded && (\n <div className='pi-mt-6'>\n {Array.from({ length: 5 }).map((_, i) => (\n <div\n key={i}\n className='pi-animate-pulse pi-flex pi-items-center pi-space-x-4 pi-px-3 pi-py-1'\n >\n <div className='pi-flex pi-items-center pi-justify-center'>\n <div className='pi-rounded-full pi-h-12 pi-w-12 pi-bg-gray-300 dark:pi-bg-gray-700'></div>\n </div>\n <div className='pi-flex pi-flex-col pi-gap-2 pi-w-full'>\n <div className='pi-h-3 pi-w-4/5 pi-rounded pi-bg-gray-300 dark:pi-bg-gray-700'></div>\n <div className='pi-h-3 pi-w-1/2 pi-rounded pi-bg-gray-300 dark:pi-bg-gray-700'></div>\n </div>\n <div className='pi-flex pi-items-center pi-justify-center pi-pr-2'>\n <div className='pi-rounded-full pi-h-12 pi-w-12 pi-bg-gray-300 dark:pi-bg-gray-700'></div>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* contact list */}\n <div className={!loaded ? 'pi-hidden' : ''}>\n {/* List shadow */}\n <div className='pi-z-30 pi-h-6 pi-pointer-events-none pi-bg-transparent pi-mt-7 pi-pr-4'>\n {showGradient && (\n <div className='pi-h-6 pi-w-full pi-bg-gradient-to-b dark:pi-from-black pi-from-gray-100 pi-to-transparent pi-z-100'></div>\n )}\n </div>\n <div style={{ marginTop: '-22px' }} className='pi-flex pi-flex-col pi-gap-7'>\n {/* List section */}\n <div\n style={{ height: '17rem' }}\n ref={relativeRef}\n className='pi-relative pi-w-full pi-flex pi-flex-col pi-gap-1 pi-overflow-y-auto pi-overflow-x-hidden pi-scrollbar-thin pi-scrollbar-thumb-gray-400 pi-scrollbar-thumb-rounded-full pi-scrollbar-thumb-opacity-50 dark:pi-scrollbar-track-gray-900 pi-scrollbar-track-gray-200 pi-scrollbar-track-rounded-full pi-scrollbar-track-opacity-25'\n >\n {/* The custom searched number */}\n {showPhoneNumberTyped && (\n <div className='pi-flex pi-items-center pi-w-full pi-justify-between pi-px-3 pi-py-1 pi-rounded-md hover:pi-bg-gray-200 hover:dark:pi-bg-gray-800'>\n <div className='pi-flex pi-items-center pi-gap-4'>\n <ListAvatar placeHolderIcon={faUser} />\n <div>\n <div className='pi-h-fit pi-max-w-48 pi-truncate pi-text-sm pi-font-medium'>\n {t('Common.Phone number entered')}\n </div>\n <div className='pi-text-sm pi-max-w-48 pi-text-gray-700 dark:pi-text-gray-300'>\n {searchQuery}\n </div>\n </div>\n </div>\n <div className='pi-flex pi-gap-3.5'>\n <Button\n onClick={() => clickTransferOrConference(searchQuery, dispatch)}\n variant='green'\n data-tooltip-id='contact-list-tooltip-call-to-transfer'\n data-tooltip-content={\n isInsideConferenceList()\n ? t('Conference.Add participant')\n : t('Tooltip.Transfer call')\n }\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faPhone} />\n </Button>\n </div>\n </div>\n )}\n {/* Operators and phonebook contacts list */}\n {filteredContacts &&\n filteredContacts.slice(0, showingUsers).map((filteredContact, i) => (\n <div\n key={i}\n className='pi-flex pi-items-center pi-w-full pi-justify-between pi-px-3 pi-py-1 pi-rounded-md hover:pi-bg-gray-200 hover:dark:pi-bg-gray-800'\n >\n <div className='pi-flex pi-items-center pi-gap-4'>\n {(() => {\n if (isUserEndpointsType(filteredContact)) {\n return (\n <>\n <ListAvatar\n username={filteredContact?.username}\n status={filteredContact?.mainPresence}\n placeHolderIcon={faHeadset}\n />\n <div>\n <div\n data-stop-propagation={true}\n className={`pi-h-fit pi-max-w-48 pi-truncate pi-text-sm pi-font-medium`}\n >\n {filteredContact.name}\n </div>\n <div className='pi-text-sm pi-max-w-48 pi-text-gray-700 dark:pi-text-gray-300'>\n {filteredContact?.endpoints?.mainextension[0]?.id}\n </div>\n </div>\n </>\n )\n } else if (isPhonebookContact(filteredContact)) {\n return (\n <>\n <ListAvatar\n placeHolderIcon={\n filteredContact?.kind === 'person' ? faUser : faBuilding\n }\n />\n <div>\n <div\n data-stop-propagation={true}\n className='pi-h-fit pi-max-w-48 pi-truncate pi-text-sm pi-font-medium'\n >\n {filteredContact?.displayName || '-'}\n </div>\n <div className='pi-text-sm pi-max-w-48 pi-text-gray-700 dark:pi-text-gray-300'>\n <span>{getMainPhoneNumber(filteredContact) || '-'}</span>\n {getTotalPhoneNumbers(filteredContact) > 1 && (\n <span className='pi-ml-2'>\n {t('Common.plus_x_others', {\n count: getTotalPhoneNumbers(filteredContact) - 1,\n })}\n </span>\n )}\n </div>\n </div>\n </>\n )\n }\n })()}\n </div>\n <div className='pi-flex pi-gap-3.5'>\n {(() => {\n if (isUserEndpointsType(filteredContact)) {\n return (\n <Button\n onClick={() =>\n isContactAvailable(filteredContact?.mainPresence) &&\n clickTransferOrConference(\n filteredContact?.endpoints?.mainextension[0]?.id,\n dispatch,\n )\n }\n variant='green'\n disabled={!isContactAvailable(filteredContact?.mainPresence)}\n data-tooltip-id={\n isContactAvailable(filteredContact?.mainPresence)\n ? 'contact-list-tooltip-left'\n : ''\n }\n data-tooltip-content={\n isInsideConferenceList()\n ? t('Conference.Add participant')\n : t('Tooltip.Transfer call')\n }\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faPhone} />\n </Button>\n )\n } else if (isPhonebookContact(filteredContact)) {\n if (getTotalPhoneNumbers(filteredContact) < 2) {\n return (\n <Button\n onClick={() =>\n clickTransferOrConference(\n getMainPhoneNumber(filteredContact),\n dispatch,\n )\n }\n variant='green'\n disabled={getTotalPhoneNumbers(filteredContact) == 0}\n data-tooltip-id={\n getTotalPhoneNumbers(filteredContact) > 0\n ? 'contact-list-tooltip-left'\n : ''\n }\n data-tooltip-content={\n isInsideConferenceList()\n ? t('Conference.Add participant')\n : t('Tooltip.Transfer call')\n }\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faPhone} />\n </Button>\n )\n } else {\n // change view to show contact numbers\n return (\n <Button\n onClick={() => goToSelectNumberView(filteredContact)}\n variant='transparent'\n data-tooltip-id={'contact-list-tooltip-left'}\n data-tooltip-content={t('Tooltip.Select phone number')}\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faAngleRight} />\n </Button>\n )\n }\n }\n })()}\n </div>\n </div>\n ))}\n {filteredContacts.length === 0 && !showPhoneNumberTyped && (\n <p className=' pi-font-medium pi-w-full pi-flex pi-justify-center pi-text-sm'>\n {t('No contacts found')}\n </p>\n )}\n </div>\n </div>\n </div>\n </div>\n )\n\n return (\n <>\n {(() => {\n switch (contactListView) {\n case 'main':\n return mainView\n case 'selectContactNumber':\n return <SelectContactNumberView contact={currentContact} />\n default:\n return mainView\n }\n })()}\n <CustomThemedTooltip className='pi-z-1000' id='contact-list-tooltip-left' place='left' />\n <CustomThemedTooltip\n className='pi-z-1000'\n id='contact-list-tooltip-back-to-call'\n place='right'\n />\n <CustomThemedTooltip\n className='pi-z-1000'\n id='contact-list-tooltip-call-to-transfer'\n place='left'\n />\n </>\n )\n}\n\ninterface ContactListViewProps {}\n\ninterface CallStartTypes {\n number: string\n}\n"],"names":["_a","useSelector","state","island","isOpen","contactListView","endpoints","users","username","currentUser","_b","useState","loaded","setLoaded","_c","filteredOperators","setFilteredOperators","_d","filteredPhonebookContacts","setFilteredPhonebookContacts","_e","currentContact","setCurrentContact","_f","firstPhonebookLoading","setFirstPhonebookLoading","_g","searchQuery","setSearchQuery","_h","showPhoneNumberTyped","setShowPhoneNumberTyped","relativeRef","useRef","_j","showGradient","setShowGradient","_k","showingUsers","setShowingUsers","dispatch","useDispatch","paused","currentCall","filteredContacts","useMemo","__spreadArray","debouncedSearchPhonebookContacts","debounce","value","retrievePhonebookContacts","current","filterOperators","textQuery","trim","toLowerCase","operators","Object","values","filter","userEndpoints","extension","find","id","startsWith","includes","name","test","searchPhonebook","phonebookSearchResult","sent","rows","console","error","error_1","isUserEndpointsType","obj","isPhonebookContact","isContactAvailable","mainPresence","useEffect","cancel","useEventListener","data","handleAttendedTransfer","number","eventDispatch","handleScroll","scrollTop","offsetHeight","scrollHeight","addEventListener","removeEventListener","t","useTranslation","mainView","React","createElement","className","Button","variant","onClick","isInsideConferenceList","backToPreviousView","FontAwesomeIcon","icon","faArrowLeft","type","onChange","event","currentTarget","placeholder","autoFocus","spellCheck","Array","from","length","map","_","i","key","style","marginTop","height","ref","ListAvatar","placeHolderIcon","faUser","clickTransferOrConference","faPhone","slice","filteredContact","Fragment","status","faHeadset","mainextension","kind","faBuilding","displayName","getMainPhoneNumber","getTotalPhoneNumbers","count","disabled","setContactListView","faAngleRight","SelectContactNumberView","contact","CustomThemedTooltip","place"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../Button.js");require("../../node_modules/react-redux/es/index.js");var i=require("../../node_modules/@fortawesome/react-fontawesome/dist/index.js"),a=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),r=require("../../lib/phone/call.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 l=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var n=require("../CustomThemedTooltip.js"),s=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),o=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=p(e);exports.SelectContactNumberView=function(p){var u=p.contact,d=o.useDispatch(),m=l.useTranslation().t,f=e.useMemo(function(){for(var e=[],t=0,i=["extension","workphone","cellphone"];t<i.length;t++){var a=i[t],r=null==u?void 0:u[a];r&&e.push({number:r,type:a})}return e},[u]);function h(e){switch(e){case"extension":return a.faHeadset;case"workphone":return s.faOfficePhone;case"cellphone":return a.faMobile;default:return a.faPhone}}return c.default.createElement(c.default.Fragment,null,c.default.createElement("div",{className:"pi-relative pi-flex pi-flex-col"},c.default.createElement("div",{className:"pi-relative pi-z-50"},c.default.createElement("div",{className:"pi-flex pi-items-center pi-gap-2 pi-text-gray-900 dark:pi-text-gray-50"},c.default.createElement(t.Button,{onClick:function(){return d.island.setContactListView("main")},variant:"transparent","data-tooltip-id":"tooltip-back-to-transfer-results","data-tooltip-content":m("Common.Back")||""},c.default.createElement(i.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:a.faArrowLeft})),c.default.createElement("h1",{className:"pi-text-lg pi-font-medium pi-leading-7"},(null==u?void 0:u.displayName)||"-"))),c.default.createElement("div",{className:"pi-z-30 pi-h-6 pi-pointer-events-none pi-bg-transparent pi-mt-7 pi-pr-4"}),c.default.createElement("div",{style:{marginTop:"-22px"},className:"pi-flex pi-flex-col pi-gap-7"},c.default.createElement("div",{style:{height:"17rem"},className:"pi-relative pi-w-full pi-flex pi-flex-col pi-gap-1 pi-overflow-y-auto pi-overflow-x-hidden pi-scrollbar-thin pi-scrollbar-thumb-gray-400 pi-scrollbar-thumb-rounded-full pi-scrollbar-thumb-opacity-50 dark:pi-scrollbar-track-gray-900 pi-scrollbar-track-gray-200 pi-scrollbar-track-rounded-full pi-scrollbar-track-opacity-25"},f.map(function(e,l){return c.default.createElement("div",{key:l,className:"pi-flex pi-items-center pi-w-full pi-justify-between pi-px-3 pi-py-1 pi-rounded-md hover:pi-bg-gray-200 hover:dark:pi-bg-gray-800"},c.default.createElement("div",{className:"pi-flex pi-items-center pi-gap-4"},c.default.createElement("div",{className:"pi-relative pi-block pi-shrink-0 pi-h-12 pi-w-12 pi-text-base pi-bg-gray-700 dark:pi-bg-gray-200 pi-rounded-full"},c.default.createElement("div",{className:"pi-text-white dark:pi-text-gray-950 pi-w-full pi-h-full pi-fill-white pi-flex pi-justify-center pi-items-center"},c.default.createElement(i.FontAwesomeIcon,{icon:h(e.type),className:"pi-h-6 pi-w-6","aria-hidden":"true"}))),c.default.createElement("div",null,c.default.createElement("div",{style:{maxWidth:"196px"},"data-stop-propagation":!0,className:"pi-h-fit pi-truncate pi-text-sm pi-font-medium"},m("Phone.".concat(e.type))),c.default.createElement("div",{className:"pi-text-sm pi-text-gray-700 dark:pi-text-gray-300"},e.number))),c.default.createElement("div",{className:"pi-flex pi-gap-3.5"},c.default.createElement(t.Button,{onClick:function(){return r.clickTransferOrConference(e.number,d)},variant:"green","data-tooltip-id":"transfer-list-tooltip-left","data-tooltip-content":r.isInsideConferenceList()?m("Conference.Add participant"):m("Tooltip.Transfer call")},c.default.createElement(i.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:a.faPhone}))))})))),c.default.createElement(n.CustomThemedTooltip,{id:"tooltip-back-to-transfer-results",place:"right"}),c.default.createElement(n.CustomThemedTooltip,{className:"pi-z-1000",id:"transfer-list-tooltip-left",place:"left"}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../Button.js");require("../../node_modules/react-redux/es/index.js");var i=require("../../node_modules/@fortawesome/react-fontawesome/dist/index.js"),a=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),r=require("../../lib/phone/call.js");require("../../node_modules/i18next/dist/esm/i18next.js"),require("../../node_modules/react-i18next/dist/es/context.js");var l=require("../../node_modules/react-i18next/dist/es/useTranslation.js"),n=require("../CustomThemedTooltip.js"),o=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),s=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=p(e);exports.SelectContactNumberView=function(p){var d=p.contact,u=s.useDispatch(),m=l.useTranslation().t,f=e.useMemo(function(){for(var e=[],t=0,i=["extension","workphone","cellphone"];t<i.length;t++){var a=i[t],r=null==d?void 0:d[a];r&&e.push({number:r,type:a})}return e},[d]);function h(e){switch(e){case"extension":return a.faHeadset;case"workphone":return o.faOfficePhone;case"cellphone":return a.faMobile;default:return a.faPhone}}return c.default.createElement(c.default.Fragment,null,c.default.createElement("div",{className:"pi-relative pi-flex pi-flex-col"},c.default.createElement("div",{className:"pi-relative pi-z-50"},c.default.createElement("div",{className:"pi-flex pi-items-center pi-gap-2 pi-text-gray-900 dark:pi-text-gray-50"},c.default.createElement(t.Button,{onClick:function(){return u.island.setContactListView("main")},variant:"transparent","data-tooltip-id":"tooltip-back-to-transfer-results","data-tooltip-content":m("Common.Back")||""},c.default.createElement(i.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:a.faArrowLeft})),c.default.createElement("h1",{className:"pi-text-lg pi-font-medium pi-leading-7"},(null==d?void 0:d.displayName)||"-"))),c.default.createElement("div",{className:"pi-z-30 pi-h-6 pi-pointer-events-none pi-bg-transparent pi-mt-7 pi-pr-4"}),c.default.createElement("div",{style:{marginTop:"-22px"},className:"pi-flex pi-flex-col pi-gap-7"},c.default.createElement("div",{style:{height:"17rem"},className:"pi-relative pi-w-full pi-flex pi-flex-col pi-gap-1 pi-overflow-y-auto pi-overflow-x-hidden pi-scrollbar-thin pi-scrollbar-thumb-gray-400 pi-scrollbar-thumb-rounded-full pi-scrollbar-thumb-opacity-50 dark:pi-scrollbar-track-gray-900 pi-scrollbar-track-gray-200 pi-scrollbar-track-rounded-full pi-scrollbar-track-opacity-25"},f.map(function(e,l){return c.default.createElement("div",{key:l,className:"pi-flex pi-items-center pi-w-full pi-justify-between pi-px-3 pi-py-1 pi-rounded-md hover:pi-bg-gray-200 hover:dark:pi-bg-gray-800"},c.default.createElement("div",{className:"pi-flex pi-items-center pi-gap-4"},c.default.createElement("div",{className:"pi-relative pi-block pi-shrink-0 pi-h-12 pi-w-12 pi-text-base pi-bg-gray-700 dark:pi-bg-gray-200 pi-rounded-full"},c.default.createElement("div",{className:"pi-text-white dark:pi-text-gray-950 pi-w-full pi-h-full pi-fill-white pi-flex pi-justify-center pi-items-center"},c.default.createElement(i.FontAwesomeIcon,{icon:h(e.type),className:"pi-h-6 pi-w-6","aria-hidden":"true"}))),c.default.createElement("div",null,c.default.createElement("div",{style:{maxWidth:"196px"},"data-stop-propagation":!0,className:"pi-h-fit pi-truncate pi-text-sm pi-font-medium"},m("Phone.".concat(e.type))),c.default.createElement("div",{className:"pi-text-sm pi-text-gray-700 dark:pi-text-gray-300"},e.number))),c.default.createElement("div",{className:"pi-flex pi-gap-3.5"},c.default.createElement(t.Button,{onClick:function(){return r.clickTransferOrConference(e.number,u)},variant:"green","data-tooltip-id":"transfer-list-tooltip-left","data-tooltip-content":r.isInsideConferenceList()?m("Conference.Add participant"):m("Tooltip.Transfer call")},c.default.createElement(i.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:a.faPhone}))))})))),c.default.createElement(n.CustomThemedTooltip,{id:"tooltip-back-to-transfer-results",place:"right"}),c.default.createElement(n.CustomThemedTooltip,{className:"pi-z-1000",id:"transfer-list-tooltip-left",place:"left"}))};
2
2
  //# sourceMappingURL=SelectContactNumberView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectContactNumberView.js","sources":["../../../src/components/ContactView/SelectContactNumberView.tsx"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useMemo } from 'react'\nimport { Button } from '../Button'\nimport { useDispatch } from 'react-redux'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faPhone, faArrowLeft, faMobile, faHeadset } from '@fortawesome/free-solid-svg-icons'\nimport { clickTransferOrConference, isInsideConferenceList } from '../../lib/phone/call'\nimport { Dispatch } from '../../store'\nimport { useTranslation } from 'react-i18next'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\nimport { PhonebookContact } from '../../types/phonebook'\nimport { faOfficePhone } from '@nethesis/nethesis-solid-svg-icons'\n\nexport const SelectContactNumberView: FC<SelectContactNumberViewProps> = ({ contact }) => {\n const dispatch = useDispatch<Dispatch>()\n const { t } = useTranslation()\n\n type PhoneNumber = {\n number: string\n type: string\n }\n\n const phoneNumbers = useMemo(() => {\n const phoneNumbers: PhoneNumber[] = []\n\n const phoneTypes = ['extension', 'workphone', 'cellphone']\n\n for (const type of phoneTypes) {\n const phoneNumber = contact?.[type]\n if (phoneNumber) {\n phoneNumbers.push({\n number: phoneNumber,\n type: type,\n })\n }\n }\n return phoneNumbers\n }, [contact])\n\n function getPhoneIcon(type: string) {\n switch (type) {\n case 'extension':\n return faHeadset\n case 'workphone':\n return faOfficePhone\n case 'cellphone':\n return faMobile\n default:\n return faPhone\n }\n }\n\n return (\n <>\n <div className='pi-relative pi-flex pi-flex-col'>\n {/* Top section */}\n <div className='pi-relative pi-z-50'>\n <div className='pi-flex pi-items-center pi-gap-2 pi-text-gray-900 dark:pi-text-gray-50'>\n <Button\n onClick={() => dispatch.island.setContactListView('main')}\n variant='transparent'\n data-tooltip-id='tooltip-back-to-transfer-results'\n data-tooltip-content={t('Common.Back') || ''}\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faArrowLeft} />\n </Button>\n <h1 className='pi-text-lg pi-font-medium pi-leading-7'>\n {contact?.displayName || '-'}\n </h1>\n </div>\n </div>\n <div className='pi-z-30 pi-h-6 pi-pointer-events-none pi-bg-transparent pi-mt-7 pi-pr-4'></div>\n <div style={{ marginTop: '-22px' }} className='pi-flex pi-flex-col pi-gap-7'>\n {/* List section */}\n <div\n style={{ height: '17rem' }}\n className='pi-relative pi-w-full pi-flex pi-flex-col pi-gap-1 pi-overflow-y-auto pi-overflow-x-hidden pi-scrollbar-thin pi-scrollbar-thumb-gray-400 pi-scrollbar-thumb-rounded-full pi-scrollbar-thumb-opacity-50 dark:pi-scrollbar-track-gray-900 pi-scrollbar-track-gray-200 pi-scrollbar-track-rounded-full pi-scrollbar-track-opacity-25'\n >\n {/* Phone numbers of phonebook contact */}\n {phoneNumbers.map((phoneNumber, i) => (\n <div\n key={i}\n className='pi-flex pi-items-center pi-w-full pi-justify-between pi-px-3 pi-py-1 pi-rounded-md hover:pi-bg-gray-200 hover:dark:pi-bg-gray-800'\n >\n <div className='pi-flex pi-items-center pi-gap-4'>\n <div className='pi-relative pi-block pi-shrink-0 pi-h-12 pi-w-12 pi-text-base pi-bg-gray-700 dark:pi-bg-gray-200 pi-rounded-full'>\n <div className='pi-text-white dark:pi-text-gray-950 pi-w-full pi-h-full pi-fill-white pi-flex pi-justify-center pi-items-center'>\n <FontAwesomeIcon\n icon={getPhoneIcon(phoneNumber.type)}\n className='pi-h-6 pi-w-6'\n aria-hidden='true'\n />\n </div>\n </div>\n <div>\n <div\n style={{ maxWidth: '196px' }}\n data-stop-propagation={true}\n className='pi-h-fit pi-truncate pi-text-sm pi-font-medium'\n >\n {t(`Phone.${phoneNumber.type}`)}\n </div>\n <div className='pi-text-sm pi-text-gray-700 dark:pi-text-gray-300'>\n {phoneNumber.number}\n </div>\n </div>\n </div>\n <div className='pi-flex pi-gap-3.5'>\n <Button\n onClick={() => clickTransferOrConference(phoneNumber.number, dispatch)}\n variant='green'\n data-tooltip-id='transfer-list-tooltip-left'\n data-tooltip-content={\n isInsideConferenceList()\n ? t('Conference.Add participant')\n : t('Tooltip.Transfer call')\n }\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faPhone} />\n </Button>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n <CustomThemedTooltip id={`tooltip-back-to-transfer-results`} place='right' />\n <CustomThemedTooltip className='pi-z-1000' id='transfer-list-tooltip-left' place='left' />\n </>\n )\n}\n\ninterface SelectContactNumberViewProps {\n contact?: PhonebookContact\n}\n"],"names":["_a","contact","dispatch","useDispatch","t","useTranslation","phoneNumbers","useMemo","phoneTypes_1","_i","length","type","phoneNumber","push","number","getPhoneIcon","faHeadset","faOfficePhone","faMobile","faPhone","React","createElement","Fragment","className","Button","onClick","island","setContactListView","variant","FontAwesomeIcon","icon","faArrowLeft","displayName","style","marginTop","height","map","i","key","maxWidth","concat","clickTransferOrConference","isInsideConferenceList","CustomThemedTooltip","id","place"],"mappings":"ypCAeyE,SAACA,GAAE,IAAAC,EAAOD,EAAAC,QAC3EC,EAAWC,EAAAA,cACTC,EAAMC,qBAORC,EAAeC,EAAAA,QAAQ,WAK3B,IAJA,IAAMD,EAA8B,OAIjBE,EAFA,CAAC,YAAa,YAAa,aAE3BC,EAAUD,EAAAE,OAAVD,IAAY,CAA1B,IAAME,EAAIH,EAAAC,GACPG,EAAcX,eAAAA,EAAUU,GAC1BC,GACFN,EAAaO,KAAK,CAChBC,OAAQF,EACRD,KAAMA,GAGX,CACD,OAAOL,CACT,EAAG,CAACL,IAEJ,SAASc,EAAaJ,GACpB,OAAQA,GACN,IAAK,YACH,OAAOK,YACT,IAAK,YACH,OAAOC,gBACT,IAAK,YACH,OAAOC,WACT,QACE,OAAOC,UAEZ,CAED,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,mCAEbH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,uBACbH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,0EACbH,UAAAC,cAACG,EAAAA,OAAM,CACLC,QAAS,WAAM,OAAAvB,EAASwB,OAAOC,mBAAmB,SAClDC,QAAQ,cACQ,kBAAA,mCACM,uBAAAxB,EAAE,gBAAkB,IAE1CgB,UAACC,cAAAQ,EAAAA,gBAAgB,CAAAN,UAAU,gBAAgBO,KAAMC,EAAWA,eAE9DX,EAAA,QAAAC,cAAA,KAAA,CAAIE,UAAU,2CACXtB,aAAA,EAAAA,EAAS+B,cAAe,OAI/BZ,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,4EACfH,UAAKC,cAAA,MAAA,CAAAY,MAAO,CAAEC,UAAW,SAAWX,UAAU,gCAE5CH,EAAAA,QAAAC,cAAA,MAAA,CACEY,MAAO,CAAEE,OAAQ,SACjBZ,UAAU,qUAGTjB,EAAa8B,IAAI,SAACxB,EAAayB,GAAM,OACpCjB,UACEC,cAAA,MAAA,CAAAiB,IAAKD,EACLd,UAAU,qIAEVH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,oCACbH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,oHACbH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,mHACbH,EAAAA,QAAAC,cAACQ,EAAAA,gBACC,CAAAC,KAAMf,EAAaH,EAAYD,MAC/BY,UAAU,8BACE,WAIlBH,UAAAC,cAAA,MAAA,KACED,EACE,QAAAC,cAAA,MAAA,CAAAY,MAAO,CAAEM,SAAU,SACI,yBAAA,EACvBhB,UAAU,kDAETnB,EAAE,SAAAoC,OAAS5B,EAAYD,QAE1BS,UAAKC,cAAA,MAAA,CAAAE,UAAU,qDACZX,EAAYE,UAInBM,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,sBACbH,EAAC,QAAAC,cAAAG,SACC,CAAAC,QAAS,WAAM,OAAAgB,EAAyBA,0BAAC7B,EAAYE,OAAQZ,EAAS,EACtE0B,QAAQ,QACQ,kBAAA,6BAEd,uBAAAc,2BACItC,EAAE,8BACFA,EAAE,0BAGRgB,EAAAA,QAAAC,cAACQ,EAAAA,gBAAgB,CAAAN,UAAU,gBAAgBO,KAAMX,EAAOA,YAI/D,MAIPC,EAAC,QAAAC,cAAAsB,uBAAoBC,GAAI,mCAAoCC,MAAM,UACnEzB,EAAAA,QAAAC,cAACsB,sBAAoB,CAAApB,UAAU,YAAYqB,GAAG,6BAA6BC,MAAM,SAGvF"}
1
+ {"version":3,"file":"SelectContactNumberView.js","sources":["../../../src/components/ContactView/SelectContactNumberView.tsx"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useMemo } from 'react'\nimport { Button } from '../Button'\nimport { useDispatch } from 'react-redux'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faPhone, faArrowLeft, faMobile, faHeadset } from '@fortawesome/free-solid-svg-icons'\nimport { clickTransferOrConference, isInsideConferenceList } from '../../lib/phone/call'\nimport { Dispatch } from '../../store'\nimport { useTranslation } from 'react-i18next'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\nimport { PhonebookContact } from '../../types/phonebook'\nimport { faOfficePhone } from '@nethesis/nethesis-solid-svg-icons'\n\nexport const SelectContactNumberView: FC<SelectContactNumberViewProps> = ({ contact }) => {\n const dispatch = useDispatch<Dispatch>()\n const { t } = useTranslation()\n\n type PhoneNumber = {\n number: string\n type: string\n }\n\n const phoneNumbers = useMemo(() => {\n const phoneNumbers: PhoneNumber[] = []\n\n const phoneTypes = ['extension', 'workphone', 'cellphone']\n\n for (const type of phoneTypes) {\n const phoneNumber = contact?.[type]\n if (phoneNumber) {\n phoneNumbers.push({\n number: phoneNumber,\n type: type,\n })\n }\n }\n return phoneNumbers\n }, [contact])\n\n function getPhoneIcon(type: string) {\n switch (type) {\n case 'extension':\n return faHeadset\n case 'workphone':\n return faOfficePhone\n case 'cellphone':\n return faMobile\n default:\n return faPhone\n }\n }\n\n return (\n <>\n <div className='pi-relative pi-flex pi-flex-col'>\n {/* Top section */}\n <div className='pi-relative pi-z-50'>\n <div className='pi-flex pi-items-center pi-gap-2 pi-text-gray-900 dark:pi-text-gray-50'>\n <Button\n onClick={() => dispatch.island.setContactListView('main')}\n variant='transparent'\n data-tooltip-id='tooltip-back-to-transfer-results'\n data-tooltip-content={t('Common.Back') || ''}\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faArrowLeft} />\n </Button>\n <h1 className='pi-text-lg pi-font-medium pi-leading-7'>\n {contact?.displayName || '-'}\n </h1>\n </div>\n </div>\n <div className='pi-z-30 pi-h-6 pi-pointer-events-none pi-bg-transparent pi-mt-7 pi-pr-4'></div>\n <div style={{ marginTop: '-22px' }} className='pi-flex pi-flex-col pi-gap-7'>\n {/* List section */}\n <div\n style={{ height: '17rem' }}\n className='pi-relative pi-w-full pi-flex pi-flex-col pi-gap-1 pi-overflow-y-auto pi-overflow-x-hidden pi-scrollbar-thin pi-scrollbar-thumb-gray-400 pi-scrollbar-thumb-rounded-full pi-scrollbar-thumb-opacity-50 dark:pi-scrollbar-track-gray-900 pi-scrollbar-track-gray-200 pi-scrollbar-track-rounded-full pi-scrollbar-track-opacity-25'\n >\n {/* Phone numbers of phonebook contact */}\n {phoneNumbers.map((phoneNumber, i) => (\n <div\n key={i}\n className='pi-flex pi-items-center pi-w-full pi-justify-between pi-px-3 pi-py-1 pi-rounded-md hover:pi-bg-gray-200 hover:dark:pi-bg-gray-800'\n >\n <div className='pi-flex pi-items-center pi-gap-4'>\n <div className='pi-relative pi-block pi-shrink-0 pi-h-12 pi-w-12 pi-text-base pi-bg-gray-700 dark:pi-bg-gray-200 pi-rounded-full'>\n <div className='pi-text-white dark:pi-text-gray-950 pi-w-full pi-h-full pi-fill-white pi-flex pi-justify-center pi-items-center'>\n <FontAwesomeIcon\n icon={getPhoneIcon(phoneNumber.type)}\n className='pi-h-6 pi-w-6'\n aria-hidden='true'\n />\n </div>\n </div>\n <div>\n <div\n style={{ maxWidth: '196px' }}\n data-stop-propagation={true}\n className='pi-h-fit pi-truncate pi-text-sm pi-font-medium'\n >\n {t(`Phone.${phoneNumber.type}`)}\n </div>\n <div className='pi-text-sm pi-text-gray-700 dark:pi-text-gray-300'>\n {phoneNumber.number}\n </div>\n </div>\n </div>\n <div className='pi-flex pi-gap-3.5'>\n <Button\n onClick={() => clickTransferOrConference(phoneNumber.number, dispatch)}\n variant='green'\n data-tooltip-id='transfer-list-tooltip-left'\n data-tooltip-content={\n isInsideConferenceList()\n ? t('Conference.Add participant')\n : t('Tooltip.Transfer call')\n }\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faPhone} />\n </Button>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n <CustomThemedTooltip id={`tooltip-back-to-transfer-results`} place='right' />\n <CustomThemedTooltip className='pi-z-1000' id='transfer-list-tooltip-left' place='left' />\n </>\n )\n}\n\ninterface SelectContactNumberViewProps {\n contact?: PhonebookContact\n}\n"],"names":["_a","contact","dispatch","useDispatch","t","useTranslation","phoneNumbers","useMemo","_i","phoneTypes_1","type","phoneNumber","push","number","getPhoneIcon","faHeadset","faOfficePhone","faMobile","faPhone","React","createElement","Fragment","className","Button","onClick","island","setContactListView","variant","FontAwesomeIcon","icon","faArrowLeft","displayName","style","marginTop","height","map","i","key","maxWidth","concat","clickTransferOrConference","isInsideConferenceList","CustomThemedTooltip","id","place"],"mappings":"m2BAeyE,SAACA,GAAE,IAAAC,EAAOD,EAAAC,QAC3EC,EAAWC,EAAAA,cACTC,EAAMC,qBAORC,EAAeC,EAAAA,QAAQ,WAK3B,IAJA,IAAMD,EAA8B,GAIjBE,EAAA,EAAAC,EAFA,CAAC,YAAa,YAAa,aAE3BD,WAAAA,IAAY,CAA1B,IAAME,EAAID,EAAAD,GACPG,EAAcV,eAAAA,EAAUS,GAC1BC,GACFL,EAAaM,KAAK,CAChBC,OAAQF,EACRD,KAAMA,GAGX,CACD,OAAOJ,CACT,EAAG,CAACL,IAEJ,SAASa,EAAaJ,GACpB,OAAQA,GACN,IAAK,YACH,OAAOK,YACT,IAAK,YACH,OAAOC,gBACT,IAAK,YACH,OAAOC,WACT,QACE,OAAOC,UAEZ,CAED,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,mCAEbH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,uBACbH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,0EACbH,UAAAC,cAACG,EAAAA,OAAM,CACLC,QAAS,WAAM,OAAAtB,EAASuB,OAAOC,mBAAmB,SAClDC,QAAQ,cACQ,kBAAA,mCACM,uBAAAvB,EAAE,gBAAkB,IAE1Ce,UAACC,cAAAQ,EAAAA,gBAAgB,CAAAN,UAAU,gBAAgBO,KAAMC,EAAWA,eAE9DX,EAAA,QAAAC,cAAA,KAAA,CAAIE,UAAU,2CACXrB,aAAA,EAAAA,EAAS8B,cAAe,OAI/BZ,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,4EACfH,UAAKC,cAAA,MAAA,CAAAY,MAAO,CAAEC,UAAW,SAAWX,UAAU,gCAE5CH,EAAAA,QAAAC,cAAA,MAAA,CACEY,MAAO,CAAEE,OAAQ,SACjBZ,UAAU,qUAGThB,EAAa6B,IAAI,SAACxB,EAAayB,GAAM,OACpCjB,UACEC,cAAA,MAAA,CAAAiB,IAAKD,EACLd,UAAU,qIAEVH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,oCACbH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,oHACbH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,mHACbH,EAAAA,QAAAC,cAACQ,EAAAA,gBACC,CAAAC,KAAMf,EAAaH,EAAYD,MAC/BY,UAAU,8BACE,WAIlBH,UAAAC,cAAA,MAAA,KACED,EACE,QAAAC,cAAA,MAAA,CAAAY,MAAO,CAAEM,SAAU,SACI,yBAAA,EACvBhB,UAAU,kDAETlB,EAAE,SAAAmC,OAAS5B,EAAYD,QAE1BS,UAAKC,cAAA,MAAA,CAAAE,UAAU,qDACZX,EAAYE,UAInBM,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,sBACbH,EAAC,QAAAC,cAAAG,SACC,CAAAC,QAAS,WAAM,OAAAgB,EAAyBA,0BAAC7B,EAAYE,OAAQX,EAAS,EACtEyB,QAAQ,QACQ,kBAAA,6BAEd,uBAAAc,2BACIrC,EAAE,8BACFA,EAAE,0BAGRe,EAAAA,QAAAC,cAACQ,EAAAA,gBAAgB,CAAAN,UAAU,gBAAgBO,KAAMX,EAAOA,YAI/D,MAIPC,EAAC,QAAAC,cAAAsB,uBAAoBC,GAAI,mCAAoCC,MAAM,UACnEzB,EAAAA,QAAAC,cAACsB,sBAAoB,CAAApB,UAAU,YAAYqB,GAAG,6BAA6BC,MAAM,SAGvF"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../Button.js"),r=require("../../node_modules/@fortawesome/react-fontawesome/dist/index.js"),s=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),i=require("../../lib/webrtc/messages.js"),o=require("../../store/index.js");require("../../node_modules/react-redux/es/index.js");var n=require("../../static/outgoing_ringtone.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 a=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var l=require("../../utils/customHooks/useEventListener.js"),u=require("../../utils/genericFunctions/eventDispatch.js");require("../../node_modules/tslib/tslib.es6.js");var d=require("../CustomThemedTooltip.js"),c=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),p=require("../../node_modules/react-redux/es/hooks/useSelector.js");function m(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var f=m(e);exports.TransferActions=function(){var e=c.useDispatch(),m=p.useSelector(function(e){return e.currentCall});function j(){e.currentCall.updateTransferSwitching(!0),i.sendDTMF("*"),o.store.getState().player.audioPlayerPlaying||e.player.updateStartAudioPlayer({src:n.default,loop:!0}),setTimeout(function(){i.sendDTMF("4"),e.player.stopAudioPlayer(),u.eventDispatch("phone-island-call-transfer-switched",{})},500)}m.transferCalls,m.number,l.useEventListener("phone-island-call-transfer-switch",function(){j()});var h=a.useTranslation().t;return f.default.createElement(f.default.Fragment,null,f.default.createElement("div",{className:"pi-grid pi-grid-cols-3 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center"},f.default.createElement("div",null),f.default.createElement(t.Button,{onClick:j,variant:"default","data-tooltip-id":"transfer-actions-tooltip","data-tooltip-content":h("Tooltip.Switch call")||""},f.default.createElement(r.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:s.faArrowsRepeat})),f.default.createElement("div",null)),f.default.createElement(d.CustomThemedTooltip,{className:"pi-z-1000",id:"transfer-actions-tooltip",place:"bottom"}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../Button.js"),s=require("../../node_modules/@fortawesome/react-fontawesome/dist/index.js"),r=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),i=require("../../lib/webrtc/messages.js"),n=require("../../store/index.js");require("../../node_modules/react-redux/es/index.js");var o=require("../../static/outgoing_ringtone.js");require("../../node_modules/i18next/dist/esm/i18next.js"),require("../../node_modules/react-i18next/dist/es/context.js");var a=require("../../node_modules/react-i18next/dist/es/useTranslation.js"),u=require("../../utils/customHooks/useEventListener.js"),l=require("../../utils/genericFunctions/eventDispatch.js");require("../../node_modules/tslib/tslib.es6.js");var d=require("../CustomThemedTooltip.js"),c=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),p=require("../../node_modules/react-redux/es/hooks/useSelector.js");function m(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var f=m(e);exports.TransferActions=function(){var e=c.useDispatch(),m=p.useSelector(function(e){return e.currentCall});function j(){e.currentCall.updateTransferSwitching(!0),i.sendDTMF("*"),n.store.getState().player.audioPlayerPlaying||e.player.updateStartAudioPlayer({src:o.default,loop:!0}),setTimeout(function(){i.sendDTMF("4"),e.player.stopAudioPlayer(),l.eventDispatch("phone-island-call-transfer-switched",{})},500)}m.transferCalls,m.number,u.useEventListener("phone-island-call-transfer-switch",function(){j()});var h=a.useTranslation().t;return f.default.createElement(f.default.Fragment,null,f.default.createElement("div",{className:"pi-grid pi-grid-cols-3 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center"},f.default.createElement("div",null),f.default.createElement(t.Button,{onClick:j,variant:"default","data-tooltip-id":"transfer-actions-tooltip","data-tooltip-content":h("Tooltip.Switch call")||""},f.default.createElement(s.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:r.faArrowsRepeat})),f.default.createElement("div",null)),f.default.createElement(d.CustomThemedTooltip,{className:"pi-z-1000",id:"transfer-actions-tooltip",place:"bottom"}))};
2
2
  //# sourceMappingURL=TransferActions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TransferActions.js","sources":["../../../src/components/ContactView/TransferActions.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 { Button } from '../Button'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faArrowsRepeat } from '@nethesis/nethesis-solid-svg-icons'\nimport { sendDTMF } from '../../lib/webrtc/messages'\nimport { store, Dispatch } from '../../store'\nimport { useDispatch, useSelector } from 'react-redux'\nimport outgoingRingtone from '../../static/outgoing_ringtone'\nimport { RootState } from '../../store'\nimport { useTranslation } from 'react-i18next'\nimport { useEventListener, eventDispatch } from '../../utils'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\n\n//// TODO this component and related events seems unused, remove?\n\nexport const TransferActions: FC<TransferActionsProps> = () => {\n const dispatch = useDispatch<Dispatch>()\n const { transferCalls, number } = useSelector((state: RootState) => state.currentCall)\n\n // Cancels the current transfer through dtmfs\n function switchTransfer() {\n dispatch.currentCall.updateTransferSwitching(true)\n // Start sending the DTMFs for transferring\n sendDTMF('*')\n const { audioPlayerPlaying } = store.getState().player\n // Check if the local audio is already playing and start playing\n if (!audioPlayerPlaying) {\n dispatch.player.updateStartAudioPlayer({\n src: outgoingRingtone,\n loop: true,\n })\n }\n setTimeout(() => {\n // Send the second DTMF for transferring\n sendDTMF('4')\n dispatch.player.stopAudioPlayer()\n\n eventDispatch('phone-island-call-transfer-switched', {})\n }, 500)\n }\n useEventListener('phone-island-call-transfer-switch', () => {\n switchTransfer()\n })\n\n const { t } = useTranslation()\n\n return (\n <>\n <div className='pi-grid pi-grid-cols-3 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'>\n <div></div>\n <Button\n onClick={switchTransfer}\n variant='default'\n data-tooltip-id='transfer-actions-tooltip'\n data-tooltip-content={t('Tooltip.Switch call') || ''}\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faArrowsRepeat} />\n </Button>\n <div></div>\n </div>\n <CustomThemedTooltip className='pi-z-1000' id='transfer-actions-tooltip' place='bottom' />\n </>\n )\n}\n\ninterface TransferActionsProps {}\n\ninterface CurrentCallsTypes {\n [name: string]: {\n name: string\n time: string\n }\n}\n"],"names":["dispatch","useDispatch","_a","useSelector","state","currentCall","switchTransfer","updateTransferSwitching","sendDTMF","store","getState","player","audioPlayerPlaying","updateStartAudioPlayer","src","outgoingRingtone","loop","setTimeout","stopAudioPlayer","eventDispatch","useEventListener","t","useTranslation","React","createElement","Fragment","className","Button","onClick","variant","FontAwesomeIcon","icon","faArrowsRepeat","CustomThemedTooltip","id","place"],"mappings":"q4CAkByD,WACvD,IAAMA,EAAWC,EAAAA,cACXC,EAA4BC,EAAWA,YAAC,SAACC,GAAqB,OAAAA,EAAMC,WAAN,GAGpE,SAASC,IACPN,EAASK,YAAYE,yBAAwB,GAE7CC,EAAQA,SAAC,KACsBC,EAAKA,MAACC,WAAWC,OAAMC,oBAGpDZ,EAASW,OAAOE,uBAAuB,CACrCC,IAAKC,EAAgB,QACrBC,MAAM,IAGVC,WAAW,WAETT,EAAQA,SAAC,KACTR,EAASW,OAAOO,kBAEhBC,gBAAc,sCAAuC,CAAA,EACtD,EAAE,IACJ,0BACDC,EAAgBA,iBAAC,oCAAqC,WACpDd,GACF,GAEQ,IAAAe,EAAMC,qBAEd,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,sHACbH,UAAWC,cAAA,MAAA,MACXD,EAAAA,QAAAC,cAACG,EAAAA,OACC,CAAAC,QAAStB,EACTuB,QAAQ,UAAS,kBACD,2BACM,uBAAAR,EAAE,wBAA0B,IAElDE,UAACC,cAAAM,EAAAA,gBAAgB,CAAAJ,UAAU,gBAAgBK,KAAMC,EAAcA,kBAEjET,EAAAA,QAAAC,cAAA,MAAA,OAEFD,EAAAA,QAAAC,cAACS,sBAAoB,CAAAP,UAAU,YAAYQ,GAAG,2BAA2BC,MAAM,WAGrF"}
1
+ {"version":3,"file":"TransferActions.js","sources":["../../../src/components/ContactView/TransferActions.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 { Button } from '../Button'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faArrowsRepeat } from '@nethesis/nethesis-solid-svg-icons'\nimport { sendDTMF } from '../../lib/webrtc/messages'\nimport { store, Dispatch } from '../../store'\nimport { useDispatch, useSelector } from 'react-redux'\nimport outgoingRingtone from '../../static/outgoing_ringtone'\nimport { RootState } from '../../store'\nimport { useTranslation } from 'react-i18next'\nimport { useEventListener, eventDispatch } from '../../utils'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\n\n//// TODO this component and related events seems unused, remove?\n\nexport const TransferActions: FC<TransferActionsProps> = () => {\n const dispatch = useDispatch<Dispatch>()\n const { transferCalls, number } = useSelector((state: RootState) => state.currentCall)\n\n // Cancels the current transfer through dtmfs\n function switchTransfer() {\n dispatch.currentCall.updateTransferSwitching(true)\n // Start sending the DTMFs for transferring\n sendDTMF('*')\n const { audioPlayerPlaying } = store.getState().player\n // Check if the local audio is already playing and start playing\n if (!audioPlayerPlaying) {\n dispatch.player.updateStartAudioPlayer({\n src: outgoingRingtone,\n loop: true,\n })\n }\n setTimeout(() => {\n // Send the second DTMF for transferring\n sendDTMF('4')\n dispatch.player.stopAudioPlayer()\n\n eventDispatch('phone-island-call-transfer-switched', {})\n }, 500)\n }\n useEventListener('phone-island-call-transfer-switch', () => {\n switchTransfer()\n })\n\n const { t } = useTranslation()\n\n return (\n <>\n <div className='pi-grid pi-grid-cols-3 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'>\n <div></div>\n <Button\n onClick={switchTransfer}\n variant='default'\n data-tooltip-id='transfer-actions-tooltip'\n data-tooltip-content={t('Tooltip.Switch call') || ''}\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faArrowsRepeat} />\n </Button>\n <div></div>\n </div>\n <CustomThemedTooltip className='pi-z-1000' id='transfer-actions-tooltip' place='bottom' />\n </>\n )\n}\n\ninterface TransferActionsProps {}\n\ninterface CurrentCallsTypes {\n [name: string]: {\n name: string\n time: string\n }\n}\n"],"names":["dispatch","useDispatch","_a","useSelector","state","currentCall","switchTransfer","updateTransferSwitching","sendDTMF","store","getState","player","audioPlayerPlaying","updateStartAudioPlayer","src","outgoingRingtone","loop","setTimeout","stopAudioPlayer","eventDispatch","useEventListener","t","useTranslation","React","createElement","Fragment","className","Button","onClick","variant","FontAwesomeIcon","icon","faArrowsRepeat","CustomThemedTooltip","id","place"],"mappings":"+kCAkByD,WACvD,IAAMA,EAAWC,EAAAA,cACXC,EAA4BC,EAAWA,YAAC,SAACC,GAAqB,OAAAA,EAAMC,WAAN,GAGpE,SAASC,IACPN,EAASK,YAAYE,yBAAwB,GAE7CC,EAAQA,SAAC,KACsBC,EAAKA,MAACC,WAAWC,OAAMC,oBAGpDZ,EAASW,OAAOE,uBAAuB,CACrCC,IAAKC,EAAgB,QACrBC,MAAM,IAGVC,WAAW,WAETT,EAAQA,SAAC,KACTR,EAASW,OAAOO,kBAEhBC,gBAAc,sCAAuC,CAAA,EACtD,EAAE,IACJ,0BACDC,EAAgBA,iBAAC,oCAAqC,WACpDd,GACF,GAEQ,IAAAe,EAAMC,qBAEd,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,sHACbH,UAAWC,cAAA,MAAA,MACXD,EAAAA,QAAAC,cAACG,EAAAA,OACC,CAAAC,QAAStB,EACTuB,QAAQ,UAAS,kBACD,2BACM,uBAAAR,EAAE,wBAA0B,IAElDE,UAACC,cAAAM,EAAAA,gBAAgB,CAAAJ,UAAU,gBAAgBK,KAAMC,EAAcA,kBAEjET,EAAAA,QAAAC,cAAA,MAAA,OAEFD,EAAAA,QAAAC,cAACS,sBAAoB,CAAAP,UAAU,YAAYQ,GAAG,2BAA2BC,MAAM,WAGrF"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("./Button.js"),i=require("../node_modules/@fortawesome/react-fontawesome/dist/index.js"),n=require("../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),o=require("../lib/phone/call.js");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 s=require("../node_modules/react-i18next/dist/es/useTranslation.js");require("../node_modules/@babel/runtime/helpers/slicedToArray.js");var a=require("../utils/genericFunctions/eventDispatch.js");require("../node_modules/tslib/tslib.es6.js"),require("../store/index.js");var l=require("./CustomThemedTooltip.js"),r=require("../node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs.js"),p=require("../node_modules/react-redux/es/hooks/useSelector.js"),c=require("../node_modules/react-redux/es/hooks/useDispatch.js");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=d(e);exports.default=function(e){e.clickCallback,e.isDestination;var d=e.description,m=e.isPhysicalRecording,f=e.buttonsVariant,h=void 0===f?"transparent":f,g=e.showFullscreenButton,v=void 0!==g&&g,w=e.isExtraLarge,j=void 0!==w&&w,T=e.onToggleExtraLarge,x=p.useSelector(function(e){return e.currentCall}),C=x.transferring,b=x.incoming,E=x.accepted,q=c.useDispatch(),y=p.useSelector(function(e){return e.island}),D=y.isOpen,_=y.sideViewIsVisible,N=y.view,A=p.useSelector(function(e){return e.conference}),F=A.isActive,I=A.conferenceStartedFrom,k=p.useSelector(function(e){return e.currentUser}).username;function S(){b?o.hangupAllExtensions():o.hangupCurrentCall(),setTimeout(function(){q.listen.setUpdateIntrudeStatus(!1,""),q.listen.setUpdateListenStatus(!1,"")},2e3),C&&setTimeout(function(){q.alerts.setAlert("call_transfered"),a.eventDispatch("phone-island-call-transfer-successfully-popup-open",{}),setTimeout(function(){q.alerts.removeAlert("call_transfered"),a.eventDispatch("phone-island-call-transfer-successfully-popup-close",{})},2e3)},300)}var z=s.useTranslation().t,B=D&&E||"waitingConference"===N&&D,L=!C;return u.default.createElement(u.default.Fragment,null,u.default.createElement("div",{className:" ".concat(C?"pi-grid pi-w-full pi-space-x-2 pi-justify-start":"pi-flex pi-justify-center")},u.default.createElement(r.motion.div,{className:"".concat(C&&d?"pi-grid pi-grid-cols-4 pi-ml-4 pi-justify-start":L&&B?"pi-relative pi-flex pi-h-12 pi-w-64 pi-items-center pi-justify-center pi-overflow-hidden":"pi-flex pi-w-12 pi-items-center pi-justify-center"," ")},B&&!v&&u.default.createElement("div",{className:L?"pi-absolute pi-left-0 pi-top-0 pi-grid pi-grid-cols-1":"pi-grid pi-grid-cols-1"},u.default.createElement(t.Button,{variant:h,onClick:function(){return q.island.handleToggleIsOpen()},"data-tooltip-id":"tooltip-open-close-phone-island","data-tooltip-content":D?z("Tooltip.Collapse")||"":z("Tooltip.Open")||""},u.default.createElement(i.FontAwesomeIcon,{icon:n.faDownLeftAndUpRightToCenter,className:"pi-w-6 pi-h-6"}))),B&&v&&u.default.createElement("div",{className:L?"pi-absolute pi-left-0 pi-top-0 pi-grid pi-grid-cols-1":"pi-grid pi-grid-cols-1"},u.default.createElement(t.Button,{variant:h,onClick:T,"data-tooltip-id":"tooltip-toggle-fullscreen-hangup","data-tooltip-content":z("streamingAnswer"===N?j?"Tooltip.Decrease":"Tooltip.Increase":"Tooltip.Toggle fullscreen")},u.default.createElement(i.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:j?n.faDownLeftAndUpRightToCenter:n.faUpRightAndDownLeftFromCenter}))),u.default.createElement(t.Button,{onClick:function(){m?(a.eventDispatch("phone-island-sideview-close",{}),a.eventDispatch("phone-island-transcription-close",{}),o.hangupCurrentPhysicalRecording()):F&&I===k&&"waitingConference"===N?(a.eventDispatch("phone-island-sideview-close",{}),a.eventDispatch("phone-island-transcription-close",{}),o.endConference()):(a.eventDispatch("phone-island-sideview-close",{}),a.eventDispatch("phone-island-transcription-close",{}),S())},variant:"red",className:"".concat(C&&d?"pi-gap-4 pi-font-medium pi-text-base pi-transition pi-min-w-12 pi-w-full pi-col-span-2":L&&B?"pi-relative pi-z-10 pi-gap-4 pi-font-medium pi-text-base pi-transition pi-h-12 pi-w-12 pi-min-w-12 pi-overflow-hidden":"pi-gap-4 pi-font-medium pi-text-base pi-transition pi-min-w-12 pi-w-full"),"data-tooltip-id":d&&C||"waitingConference"===N&&F?"tooltip-top-transfer":"tooltip-left-transfer","data-tooltip-content":d&&C?d:"waitingConference"===N&&F?z("Conference.End conference"):"".concat(z("Tooltip.Hangup"))},u.default.createElement(i.FontAwesomeIcon,{className:"pi-rotate-135 pi-h-6 pi-w-6",icon:n.faPhone}),C&&d&&u.default.createElement(r.motion.div,{style:{height:"17px"},className:"pi-whitespace-nowrap pi-overflow-hidden"},d)),B&&u.default.createElement(t.Button,{variant:h,onClick:function(){return _&&a.eventDispatch("phone-island-sideview-close",{}),a.eventDispatch("phone-island-transcription-close",{}),void q.island.setIslandView("settings")},"data-tooltip-id":"tooltip-settings-view","data-tooltip-content":z("Tooltip.Go to settings")||"",className:"".concat(C&&d?"pi-ml-5":L?"pi-absolute pi-right-0 pi-top-0 pi-justify-end":"pi-justify-end pi-ml-16"," pi-flex pi-items-center")},u.default.createElement(i.FontAwesomeIcon,{icon:n.faGear,className:"pi-h-6 pi-w-6"})))),u.default.createElement(l.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-left-transfer",place:"left"}),u.default.createElement(l.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-top-transfer",place:"top"}),u.default.createElement(l.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-open-close-phone-island",place:"right"}),u.default.createElement(l.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-settings-view",place:"left"}),u.default.createElement(l.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-toggle-fullscreen-hangup",place:"top"}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("./Button.js"),i=require("../node_modules/@fortawesome/react-fontawesome/dist/index.js"),n=require("../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),o=require("../lib/phone/call.js");require("../node_modules/react-redux/es/index.js"),require("../node_modules/i18next/dist/esm/i18next.js"),require("../node_modules/react-i18next/dist/es/context.js");var s=require("../node_modules/react-i18next/dist/es/useTranslation.js"),a=require("../utils/genericFunctions/eventDispatch.js");require("../node_modules/tslib/tslib.es6.js"),require("../store/index.js");var l=require("./CustomThemedTooltip.js"),r=require("../node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs.js"),p=require("../node_modules/react-redux/es/hooks/useSelector.js"),c=require("../node_modules/react-redux/es/hooks/useDispatch.js");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=d(e);exports.default=function(e){e.clickCallback,e.isDestination;var d=e.description,f=e.isPhysicalRecording,m=e.buttonsVariant,h=void 0===m?"transparent":m,g=e.showFullscreenButton,v=void 0!==g&&g,w=e.isExtraLarge,T=void 0!==w&&w,x=e.onToggleExtraLarge,j=p.useSelector(function(e){return e.currentCall}),C=j.transferring,E=j.incoming,D=j.accepted,q=c.useDispatch(),N=p.useSelector(function(e){return e.island}),y=N.isOpen,b=N.sideViewIsVisible,_=N.view,A=p.useSelector(function(e){return e.conference}),F=A.isActive,I=A.conferenceStartedFrom,k=p.useSelector(function(e){return e.currentUser}).username;function S(){E?o.hangupAllExtensions():o.hangupCurrentCall(),setTimeout(function(){q.listen.setUpdateIntrudeStatus(!1,""),q.listen.setUpdateListenStatus(!1,"")},2e3),C&&setTimeout(function(){q.alerts.setAlert("call_transfered"),a.eventDispatch("phone-island-call-transfer-successfully-popup-open",{}),setTimeout(function(){q.alerts.removeAlert("call_transfered"),a.eventDispatch("phone-island-call-transfer-successfully-popup-close",{})},2e3)},300)}var z=s.useTranslation().t,B=y&&D||"waitingConference"===_&&y,L=!C;return u.default.createElement(u.default.Fragment,null,u.default.createElement("div",{className:" ".concat(C?"pi-grid pi-w-full pi-space-x-2 pi-justify-start":"pi-flex pi-justify-center")},u.default.createElement(r.motion.div,{className:"".concat(C&&d?"pi-grid pi-grid-cols-4 pi-ml-4 pi-justify-start":L&&B?"pi-relative pi-flex pi-h-12 pi-w-64 pi-items-center pi-justify-center pi-overflow-hidden":"pi-flex pi-w-12 pi-items-center pi-justify-center"," ")},B&&!v&&u.default.createElement("div",{className:L?"pi-absolute pi-left-0 pi-top-0 pi-grid pi-grid-cols-1":"pi-grid pi-grid-cols-1"},u.default.createElement(t.Button,{variant:h,onClick:function(){return q.island.handleToggleIsOpen()},"data-tooltip-id":"tooltip-open-close-phone-island","data-tooltip-content":y?z("Tooltip.Collapse")||"":z("Tooltip.Open")||""},u.default.createElement(i.FontAwesomeIcon,{icon:n.faDownLeftAndUpRightToCenter,className:"pi-w-6 pi-h-6"}))),B&&v&&u.default.createElement("div",{className:L?"pi-absolute pi-left-0 pi-top-0 pi-grid pi-grid-cols-1":"pi-grid pi-grid-cols-1"},u.default.createElement(t.Button,{variant:h,onClick:x,"data-tooltip-id":"tooltip-toggle-fullscreen-hangup","data-tooltip-content":z("streamingAnswer"===_?T?"Tooltip.Decrease":"Tooltip.Increase":"Tooltip.Toggle fullscreen")},u.default.createElement(i.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:T?n.faDownLeftAndUpRightToCenter:n.faUpRightAndDownLeftFromCenter}))),u.default.createElement(t.Button,{onClick:function(){f?(a.eventDispatch("phone-island-sideview-close",{}),a.eventDispatch("phone-island-transcription-close",{}),o.hangupCurrentPhysicalRecording()):F&&I===k&&"waitingConference"===_?(a.eventDispatch("phone-island-sideview-close",{}),a.eventDispatch("phone-island-transcription-close",{}),o.endConference()):(a.eventDispatch("phone-island-sideview-close",{}),a.eventDispatch("phone-island-transcription-close",{}),S())},variant:"red",className:"".concat(C&&d?"pi-gap-4 pi-font-medium pi-text-base pi-transition pi-min-w-12 pi-w-full pi-col-span-2":L&&B?"pi-relative pi-z-10 pi-gap-4 pi-font-medium pi-text-base pi-transition pi-h-12 pi-w-12 pi-min-w-12 pi-overflow-hidden":"pi-gap-4 pi-font-medium pi-text-base pi-transition pi-min-w-12 pi-w-full"),"data-tooltip-id":d&&C||"waitingConference"===_&&F?"tooltip-top-transfer":"tooltip-left-transfer","data-tooltip-content":d&&C?d:"waitingConference"===_&&F?z("Conference.End conference"):"".concat(z("Tooltip.Hangup"))},u.default.createElement(i.FontAwesomeIcon,{className:"pi-rotate-135 pi-h-6 pi-w-6",icon:n.faPhone}),C&&d&&u.default.createElement(r.motion.div,{style:{height:"17px"},className:"pi-whitespace-nowrap pi-overflow-hidden"},d)),B&&u.default.createElement(t.Button,{variant:h,onClick:function(){return b&&a.eventDispatch("phone-island-sideview-close",{}),a.eventDispatch("phone-island-transcription-close",{}),void q.island.setIslandView("settings")},"data-tooltip-id":"tooltip-settings-view","data-tooltip-content":z("Tooltip.Go to settings")||"",className:"".concat(C&&d?"pi-ml-5":L?"pi-absolute pi-right-0 pi-top-0 pi-justify-end":"pi-justify-end pi-ml-16"," pi-flex pi-items-center")},u.default.createElement(i.FontAwesomeIcon,{icon:n.faGear,className:"pi-h-6 pi-w-6"})))),u.default.createElement(l.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-left-transfer",place:"left"}),u.default.createElement(l.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-top-transfer",place:"top"}),u.default.createElement(l.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-open-close-phone-island",place:"right"}),u.default.createElement(l.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-settings-view",place:"left"}),u.default.createElement(l.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-toggle-fullscreen-hangup",place:"top"}))};
2
2
  //# sourceMappingURL=Hangup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Hangup.js","sources":["../../src/components/Hangup.tsx"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport { motion } from 'framer-motion'\nimport { Button } from './Button'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faDownLeftAndUpRightToCenter, faGear, faPhone, faUpRightAndDownLeftFromCenter } from '@fortawesome/free-solid-svg-icons'\nimport { endConference, hangupCurrentCall, hangupCurrentPhysicalRecording } from '../lib/phone/call'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { RootState } from '../store'\nimport { Dispatch } from '../store'\nimport { hangupAllExtensions } from '../lib/phone/call'\nimport { useTranslation } from 'react-i18next'\nimport { eventDispatch } from '../utils'\nimport { CustomThemedTooltip } from './CustomThemedTooltip'\n\n/**\n * Return the status of the\n */\nconst Hangup: FC<HangupProps> = ({\n clickCallback,\n isDestination,\n description,\n isPhysicalRecording,\n buttonsVariant = 'transparent',\n showFullscreenButton = false,\n isExtraLarge = false,\n onToggleExtraLarge,\n}) => {\n const { transferring, incoming, accepted } = useSelector((state: RootState) => state.currentCall)\n const dispatch = useDispatch<Dispatch>()\n const { isOpen, sideViewIsVisible, view } = useSelector((state: RootState) => state.island)\n const { isActive, conferenceStartedFrom } = useSelector((state: RootState) => state.conference)\n const { username } = useSelector((state: RootState) => state.currentUser)\n\n function handleHangup() {\n if (incoming) {\n hangupAllExtensions()\n } else {\n hangupCurrentCall()\n }\n\n // Delay the dispatch actions\n setTimeout(() => {\n dispatch.listen.setUpdateIntrudeStatus(false, '')\n dispatch.listen.setUpdateListenStatus(false, '')\n }, 2000)\n\n // Show confirmation message when a call is transferred\n if (transferring) {\n setTimeout(() => {\n dispatch.alerts.setAlert('call_transfered')\n eventDispatch('phone-island-call-transfer-successfully-popup-open', {})\n setTimeout(() => {\n dispatch.alerts.removeAlert('call_transfered')\n eventDispatch('phone-island-call-transfer-successfully-popup-close', {})\n }, 2000)\n }, 300)\n }\n }\n\n const { t } = useTranslation()\n const showSecondaryControls = (isOpen && accepted) || (view === 'waitingConference' && isOpen)\n const useCompactLayout = !transferring\n\n // Helper function to determine tooltip content\n const getToggleTooltipContent = () => {\n if (view === 'streamingAnswer') {\n return isExtraLarge ? t('Tooltip.Decrease') : t('Tooltip.Increase')\n }\n return t('Tooltip.Toggle fullscreen')\n }\n\n // Close side view and open settings view\n const closeSideViewOpenSettings = () => {\n if (sideViewIsVisible) {\n eventDispatch('phone-island-sideview-close', {})\n }\n eventDispatch('phone-island-transcription-close', {})\n dispatch.island.setIslandView('settings')\n }\n\n // Phone island footer section\n return (\n <>\n <div\n className={` ${transferring\n ? 'pi-grid pi-w-full pi-space-x-2 pi-justify-start'\n : 'pi-flex pi-justify-center'\n }`}\n >\n {/* The button to hangup the currentCall */}\n <motion.div\n className={`${transferring && description\n ? 'pi-grid pi-grid-cols-4 pi-ml-4 pi-justify-start'\n : useCompactLayout && showSecondaryControls\n ? 'pi-relative pi-flex pi-h-12 pi-w-64 pi-items-center pi-justify-center pi-overflow-hidden'\n : 'pi-flex pi-w-12 pi-items-center pi-justify-center'\n } `}\n >\n {/* collapse phone island button */}\n {showSecondaryControls && !showFullscreenButton && (\n <div className={useCompactLayout ? 'pi-absolute pi-left-0 pi-top-0 pi-grid pi-grid-cols-1' : 'pi-grid pi-grid-cols-1'}>\n <Button\n variant={buttonsVariant}\n onClick={() => dispatch.island.handleToggleIsOpen()}\n data-tooltip-id='tooltip-open-close-phone-island'\n data-tooltip-content={\n isOpen ? t('Tooltip.Collapse') || '' : t('Tooltip.Open') || ''\n }\n >\n <FontAwesomeIcon icon={faDownLeftAndUpRightToCenter} className='pi-w-6 pi-h-6' />\n </Button>\n </div>\n )}\n\n {/* expand/compress button for streaming */}\n {showSecondaryControls && showFullscreenButton && (\n <div className={useCompactLayout ? 'pi-absolute pi-left-0 pi-top-0 pi-grid pi-grid-cols-1' : 'pi-grid pi-grid-cols-1'}>\n <Button\n variant={buttonsVariant}\n onClick={onToggleExtraLarge}\n data-tooltip-id='tooltip-toggle-fullscreen-hangup'\n data-tooltip-content={getToggleTooltipContent()}\n >\n <FontAwesomeIcon\n className='pi-h-6 pi-w-6'\n icon={isExtraLarge ? faDownLeftAndUpRightToCenter : faUpRightAndDownLeftFromCenter}\n />\n </Button>\n </div>\n )}\n\n <Button\n onClick={() => {\n if (isPhysicalRecording) {\n eventDispatch('phone-island-sideview-close', {})\n eventDispatch('phone-island-transcription-close', {})\n hangupCurrentPhysicalRecording()\n } else if (isActive) {\n if (conferenceStartedFrom === username && view === 'waitingConference') {\n eventDispatch('phone-island-sideview-close', {})\n eventDispatch('phone-island-transcription-close', {})\n endConference()\n } else {\n eventDispatch('phone-island-sideview-close', {})\n eventDispatch('phone-island-transcription-close', {})\n handleHangup()\n }\n } else {\n eventDispatch('phone-island-sideview-close', {})\n eventDispatch('phone-island-transcription-close', {})\n handleHangup()\n }\n }}\n variant='red'\n className={`${transferring && description\n ? 'pi-gap-4 pi-font-medium pi-text-base pi-transition pi-min-w-12 pi-w-full pi-col-span-2'\n : useCompactLayout && showSecondaryControls\n ? 'pi-relative pi-z-10 pi-gap-4 pi-font-medium pi-text-base pi-transition pi-h-12 pi-w-12 pi-min-w-12 pi-overflow-hidden'\n : 'pi-gap-4 pi-font-medium pi-text-base pi-transition pi-min-w-12 pi-w-full'\n }`}\n data-tooltip-id={\n (description && transferring) || (view === 'waitingConference' && isActive)\n ? 'tooltip-top-transfer'\n : 'tooltip-left-transfer'\n }\n data-tooltip-content={\n description && transferring\n ? description\n : view === 'waitingConference' && isActive\n ? t('Conference.End conference')\n : `${t('Tooltip.Hangup')}`\n }\n >\n <FontAwesomeIcon className='pi-rotate-135 pi-h-6 pi-w-6' icon={faPhone} />\n {transferring && description && (\n <motion.div\n style={{ height: '17px' }}\n className='pi-whitespace-nowrap pi-overflow-hidden'\n >\n {description}\n </motion.div>\n )}\n </Button>\n {showSecondaryControls && (\n <Button\n variant={buttonsVariant}\n onClick={() => closeSideViewOpenSettings()}\n data-tooltip-id='tooltip-settings-view'\n data-tooltip-content={t('Tooltip.Go to settings') || ''}\n className={`${transferring && description\n ? 'pi-ml-5'\n : useCompactLayout\n ? 'pi-absolute pi-right-0 pi-top-0 pi-justify-end'\n : 'pi-justify-end pi-ml-16'\n } pi-flex pi-items-center`}\n >\n <FontAwesomeIcon icon={faGear} className={`pi-h-6 pi-w-6`} />\n </Button>\n )}\n </motion.div>\n </div>\n <CustomThemedTooltip className='pi-z-20' id='tooltip-left-transfer' place='left' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-top-transfer' place='top' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-open-close-phone-island' place='right' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-settings-view' place='left' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-toggle-fullscreen-hangup' place='top' />\n </>\n )\n}\n\nexport default Hangup\n\ninterface HangupProps {\n clickCallback?: () => void\n isDestination?: boolean\n description?: any\n isPhysicalRecording?: boolean\n buttonsVariant?:\n | 'transparent'\n | 'default'\n | 'red'\n | 'green'\n | 'neutral'\n | 'transparentSideView'\n | 'transparentSettings'\n showFullscreenButton?: boolean\n isFullscreen?: boolean\n onToggleFullscreen?: () => void\n isExtraLarge?: boolean\n onToggleExtraLarge?: () => void\n}\n"],"names":["_a","clickCallback","isDestination","description","isPhysicalRecording","_b","buttonsVariant","_c","showFullscreenButton","_d","isExtraLarge","onToggleExtraLarge","_e","useSelector","state","currentCall","transferring","incoming","accepted","dispatch","useDispatch","_f","island","isOpen","sideViewIsVisible","view","_g","conference","isActive","conferenceStartedFrom","username","currentUser","handleHangup","hangupAllExtensions","hangupCurrentCall","setTimeout","listen","setUpdateIntrudeStatus","setUpdateListenStatus","alerts","setAlert","eventDispatch","removeAlert","t","useTranslation","showSecondaryControls","useCompactLayout","React","createElement","Fragment","className","concat","motion","div","Button","variant","onClick","handleToggleIsOpen","FontAwesomeIcon","icon","faDownLeftAndUpRightToCenter","faUpRightAndDownLeftFromCenter","hangupCurrentPhysicalRecording","endConference","faPhone","style","height","setIslandView","faGear","CustomThemedTooltip","id","place"],"mappings":"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"}
1
+ {"version":3,"file":"Hangup.js","sources":["../../src/components/Hangup.tsx"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport { motion } from 'framer-motion'\nimport { Button } from './Button'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faDownLeftAndUpRightToCenter, faGear, faPhone, faUpRightAndDownLeftFromCenter } from '@fortawesome/free-solid-svg-icons'\nimport { endConference, hangupCurrentCall, hangupCurrentPhysicalRecording } from '../lib/phone/call'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { RootState } from '../store'\nimport { Dispatch } from '../store'\nimport { hangupAllExtensions } from '../lib/phone/call'\nimport { useTranslation } from 'react-i18next'\nimport { eventDispatch } from '../utils'\nimport { CustomThemedTooltip } from './CustomThemedTooltip'\n\n/**\n * Return the status of the\n */\nconst Hangup: FC<HangupProps> = ({\n clickCallback,\n isDestination,\n description,\n isPhysicalRecording,\n buttonsVariant = 'transparent',\n showFullscreenButton = false,\n isExtraLarge = false,\n onToggleExtraLarge,\n}) => {\n const { transferring, incoming, accepted } = useSelector((state: RootState) => state.currentCall)\n const dispatch = useDispatch<Dispatch>()\n const { isOpen, sideViewIsVisible, view } = useSelector((state: RootState) => state.island)\n const { isActive, conferenceStartedFrom } = useSelector((state: RootState) => state.conference)\n const { username } = useSelector((state: RootState) => state.currentUser)\n\n function handleHangup() {\n if (incoming) {\n hangupAllExtensions()\n } else {\n hangupCurrentCall()\n }\n\n // Delay the dispatch actions\n setTimeout(() => {\n dispatch.listen.setUpdateIntrudeStatus(false, '')\n dispatch.listen.setUpdateListenStatus(false, '')\n }, 2000)\n\n // Show confirmation message when a call is transferred\n if (transferring) {\n setTimeout(() => {\n dispatch.alerts.setAlert('call_transfered')\n eventDispatch('phone-island-call-transfer-successfully-popup-open', {})\n setTimeout(() => {\n dispatch.alerts.removeAlert('call_transfered')\n eventDispatch('phone-island-call-transfer-successfully-popup-close', {})\n }, 2000)\n }, 300)\n }\n }\n\n const { t } = useTranslation()\n const showSecondaryControls = (isOpen && accepted) || (view === 'waitingConference' && isOpen)\n const useCompactLayout = !transferring\n\n // Helper function to determine tooltip content\n const getToggleTooltipContent = () => {\n if (view === 'streamingAnswer') {\n return isExtraLarge ? t('Tooltip.Decrease') : t('Tooltip.Increase')\n }\n return t('Tooltip.Toggle fullscreen')\n }\n\n // Close side view and open settings view\n const closeSideViewOpenSettings = () => {\n if (sideViewIsVisible) {\n eventDispatch('phone-island-sideview-close', {})\n }\n eventDispatch('phone-island-transcription-close', {})\n dispatch.island.setIslandView('settings')\n }\n\n // Phone island footer section\n return (\n <>\n <div\n className={` ${transferring\n ? 'pi-grid pi-w-full pi-space-x-2 pi-justify-start'\n : 'pi-flex pi-justify-center'\n }`}\n >\n {/* The button to hangup the currentCall */}\n <motion.div\n className={`${transferring && description\n ? 'pi-grid pi-grid-cols-4 pi-ml-4 pi-justify-start'\n : useCompactLayout && showSecondaryControls\n ? 'pi-relative pi-flex pi-h-12 pi-w-64 pi-items-center pi-justify-center pi-overflow-hidden'\n : 'pi-flex pi-w-12 pi-items-center pi-justify-center'\n } `}\n >\n {/* collapse phone island button */}\n {showSecondaryControls && !showFullscreenButton && (\n <div className={useCompactLayout ? 'pi-absolute pi-left-0 pi-top-0 pi-grid pi-grid-cols-1' : 'pi-grid pi-grid-cols-1'}>\n <Button\n variant={buttonsVariant}\n onClick={() => dispatch.island.handleToggleIsOpen()}\n data-tooltip-id='tooltip-open-close-phone-island'\n data-tooltip-content={\n isOpen ? t('Tooltip.Collapse') || '' : t('Tooltip.Open') || ''\n }\n >\n <FontAwesomeIcon icon={faDownLeftAndUpRightToCenter} className='pi-w-6 pi-h-6' />\n </Button>\n </div>\n )}\n\n {/* expand/compress button for streaming */}\n {showSecondaryControls && showFullscreenButton && (\n <div className={useCompactLayout ? 'pi-absolute pi-left-0 pi-top-0 pi-grid pi-grid-cols-1' : 'pi-grid pi-grid-cols-1'}>\n <Button\n variant={buttonsVariant}\n onClick={onToggleExtraLarge}\n data-tooltip-id='tooltip-toggle-fullscreen-hangup'\n data-tooltip-content={getToggleTooltipContent()}\n >\n <FontAwesomeIcon\n className='pi-h-6 pi-w-6'\n icon={isExtraLarge ? faDownLeftAndUpRightToCenter : faUpRightAndDownLeftFromCenter}\n />\n </Button>\n </div>\n )}\n\n <Button\n onClick={() => {\n if (isPhysicalRecording) {\n eventDispatch('phone-island-sideview-close', {})\n eventDispatch('phone-island-transcription-close', {})\n hangupCurrentPhysicalRecording()\n } else if (isActive) {\n if (conferenceStartedFrom === username && view === 'waitingConference') {\n eventDispatch('phone-island-sideview-close', {})\n eventDispatch('phone-island-transcription-close', {})\n endConference()\n } else {\n eventDispatch('phone-island-sideview-close', {})\n eventDispatch('phone-island-transcription-close', {})\n handleHangup()\n }\n } else {\n eventDispatch('phone-island-sideview-close', {})\n eventDispatch('phone-island-transcription-close', {})\n handleHangup()\n }\n }}\n variant='red'\n className={`${transferring && description\n ? 'pi-gap-4 pi-font-medium pi-text-base pi-transition pi-min-w-12 pi-w-full pi-col-span-2'\n : useCompactLayout && showSecondaryControls\n ? 'pi-relative pi-z-10 pi-gap-4 pi-font-medium pi-text-base pi-transition pi-h-12 pi-w-12 pi-min-w-12 pi-overflow-hidden'\n : 'pi-gap-4 pi-font-medium pi-text-base pi-transition pi-min-w-12 pi-w-full'\n }`}\n data-tooltip-id={\n (description && transferring) || (view === 'waitingConference' && isActive)\n ? 'tooltip-top-transfer'\n : 'tooltip-left-transfer'\n }\n data-tooltip-content={\n description && transferring\n ? description\n : view === 'waitingConference' && isActive\n ? t('Conference.End conference')\n : `${t('Tooltip.Hangup')}`\n }\n >\n <FontAwesomeIcon className='pi-rotate-135 pi-h-6 pi-w-6' icon={faPhone} />\n {transferring && description && (\n <motion.div\n style={{ height: '17px' }}\n className='pi-whitespace-nowrap pi-overflow-hidden'\n >\n {description}\n </motion.div>\n )}\n </Button>\n {showSecondaryControls && (\n <Button\n variant={buttonsVariant}\n onClick={() => closeSideViewOpenSettings()}\n data-tooltip-id='tooltip-settings-view'\n data-tooltip-content={t('Tooltip.Go to settings') || ''}\n className={`${transferring && description\n ? 'pi-ml-5'\n : useCompactLayout\n ? 'pi-absolute pi-right-0 pi-top-0 pi-justify-end'\n : 'pi-justify-end pi-ml-16'\n } pi-flex pi-items-center`}\n >\n <FontAwesomeIcon icon={faGear} className={`pi-h-6 pi-w-6`} />\n </Button>\n )}\n </motion.div>\n </div>\n <CustomThemedTooltip className='pi-z-20' id='tooltip-left-transfer' place='left' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-top-transfer' place='top' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-open-close-phone-island' place='right' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-settings-view' place='left' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-toggle-fullscreen-hangup' place='top' />\n </>\n )\n}\n\nexport default Hangup\n\ninterface HangupProps {\n clickCallback?: () => void\n isDestination?: boolean\n description?: any\n isPhysicalRecording?: boolean\n buttonsVariant?:\n | 'transparent'\n | 'default'\n | 'red'\n | 'green'\n | 'neutral'\n | 'transparentSideView'\n | 'transparentSettings'\n showFullscreenButton?: boolean\n isFullscreen?: boolean\n onToggleFullscreen?: () => void\n isExtraLarge?: boolean\n onToggleExtraLarge?: () => void\n}\n"],"names":["_a","clickCallback","isDestination","description","isPhysicalRecording","_b","buttonsVariant","_c","showFullscreenButton","_d","isExtraLarge","onToggleExtraLarge","_e","useSelector","state","currentCall","transferring","incoming","accepted","dispatch","useDispatch","_f","island","isOpen","sideViewIsVisible","view","_g","conference","isActive","conferenceStartedFrom","username","currentUser","handleHangup","hangupAllExtensions","hangupCurrentCall","setTimeout","listen","setUpdateIntrudeStatus","setUpdateListenStatus","alerts","setAlert","eventDispatch","removeAlert","t","useTranslation","showSecondaryControls","useCompactLayout","React","createElement","Fragment","className","concat","motion","div","Button","variant","onClick","handleToggleIsOpen","FontAwesomeIcon","icon","faDownLeftAndUpRightToCenter","faUpRightAndDownLeftFromCenter","hangupCurrentPhysicalRecording","endConference","faPhone","style","height","setIslandView","faGear","CustomThemedTooltip","id","place"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("../Button.js");require("../../node_modules/react-redux/es/index.js");var t=require("../../node_modules/@fortawesome/react-fontawesome/dist/index.js"),i=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),a=require("./Actions.js"),s=require("../../lib/webrtc/messages.js"),o=require("../../lib/island/island.js"),n=require("../../lib/phone/call.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 l=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var u=require("../../lib/user/default_device.js"),d=require("../../services/astproxy.js"),c=require("../../utils/customHooks/useEventListener.js"),p=require("../../utils/genericFunctions/eventDispatch.js");require("../../node_modules/tslib/tslib.es6.js"),require("../../store/index.js");var m=require("../CustomThemedTooltip.js"),f=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),b=require("../../node_modules/react-redux/es/hooks/useSelector.js");function y(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var j=y(e),v=["0","1","2","3","4","5","6","7","8","9","*","#"];exports.default=function(){var y=f.useDispatch(),h=b.useSelector(function(e){return e.currentCall}).keypadValue,q=b.useSelector(function(e){return e.island}).isOpen,x=e.useRef(h);function k(e){y.currentCall.updateKeypadValue("".concat(x.current).concat(e)),x.current="".concat(x.current).concat(e),n.playDtmfAudio(e),u.isWebRTC()?s.sendDTMF(e):d.sendPhysicalDTMF(e),p.eventDispatch("phone-island-call-keypad-sent",{})}c.useEventListener("phone-island-call-keypad-send",function(e){k(e.key)}),e.useEffect(function(){function e(e){v.includes(e.key)&&k(e.key)}return window.addEventListener("keydown",e),function(){return window.removeEventListener("keydown",e)}},[]);var g=l.useTranslation().t;return j.default.createElement(j.default.Fragment,null,q?j.default.createElement("div",{className:"pi-flex pi-flex-col pi-gap-7"},j.default.createElement("div",{className:"pi-flex pi-gap-4"},j.default.createElement(r.Button,{variant:"transparent",onClick:o.backToPreviousView,"data-tooltip-id":"keyboard-tooltip","data-tooltip-content":g("Tooltip.Back to call")||""},j.default.createElement(t.FontAwesomeIcon,{size:"xl",icon:i.faArrowLeft})),j.default.createElement("input",{"data-stop-propagation":!0,type:"text",readOnly:!0,placeholder:g("Common.Enter a phone number")||"",value:h,autoFocus:!0,className:"pi-w-full pi-rounded-full dark:pi-bg-gray-950 pi-bg-gray-50 pi-border-2 pi-border-emerald-500 dark:pi-border-emerald-200 active:pi-border-emerald-500 dark:active:focus:pi-border-emerald-200 focus:pi-border-emerald-500 dark:focus:pi-border-emerald-200 pi-text-gray-900 dark:pi-text-gray-50 pi-font-light pi-text-xl pi-text-center pi-px-2 focus:pi-outline-0 focus:pi-ring-0 pi-placeholder-gray-400 dark:pi-placeholder-gray-500 pi-font-[inherit]"})),j.default.createElement(a.default,{keyCallback:k})):j.default.createElement("div",{className:"pi-font-medium pi-text-base"},"Keypad"),j.default.createElement(m.CustomThemedTooltip,{className:"pi-z-1000",id:"keyboard-tooltip",place:"right"}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../Button.js");require("../../node_modules/react-redux/es/index.js");var r=require("../../node_modules/@fortawesome/react-fontawesome/dist/index.js"),i=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),a=require("./Actions.js"),o=require("../../lib/webrtc/messages.js"),n=require("../../lib/island/island.js"),s=require("../../lib/phone/call.js");require("../../node_modules/i18next/dist/esm/i18next.js"),require("../../node_modules/react-i18next/dist/es/context.js");var l=require("../../node_modules/react-i18next/dist/es/useTranslation.js"),u=require("../../lib/user/default_device.js"),d=require("../../services/astproxy.js"),c=require("../../utils/customHooks/useEventListener.js"),p=require("../../utils/genericFunctions/eventDispatch.js");require("../../node_modules/tslib/tslib.es6.js"),require("../../store/index.js");var f=require("../CustomThemedTooltip.js"),m=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),x=require("../../node_modules/react-redux/es/hooks/useSelector.js");function v(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var y=v(e),b=["0","1","2","3","4","5","6","7","8","9","*","#"];exports.default=function(){var v=m.useDispatch(),k=x.useSelector(function(e){return e.currentCall}).keypadValue,j=x.useSelector(function(e){return e.island}).isOpen,q=e.useRef(k);function h(e){v.currentCall.updateKeypadValue("".concat(q.current).concat(e)),q.current="".concat(q.current).concat(e),s.playDtmfAudio(e),u.isWebRTC()?o.sendDTMF(e):d.sendPhysicalDTMF(e),p.eventDispatch("phone-island-call-keypad-sent",{})}c.useEventListener("phone-island-call-keypad-send",function(e){h(e.key)}),e.useEffect(function(){function e(e){b.includes(e.key)&&h(e.key)}return window.addEventListener("keydown",e),function(){return window.removeEventListener("keydown",e)}},[]);var g=l.useTranslation().t;return y.default.createElement(y.default.Fragment,null,j?y.default.createElement("div",{className:"pi-flex pi-flex-col pi-gap-7"},y.default.createElement("div",{className:"pi-flex pi-gap-4"},y.default.createElement(t.Button,{variant:"transparent",onClick:n.backToPreviousView,"data-tooltip-id":"keyboard-tooltip","data-tooltip-content":g("Tooltip.Back to call")||""},y.default.createElement(r.FontAwesomeIcon,{size:"xl",icon:i.faArrowLeft})),y.default.createElement("input",{"data-stop-propagation":!0,type:"text",readOnly:!0,placeholder:g("Common.Enter a phone number")||"",value:k,autoFocus:!0,className:"pi-w-full pi-rounded-full dark:pi-bg-gray-950 pi-bg-gray-50 pi-border-2 pi-border-emerald-500 dark:pi-border-emerald-200 active:pi-border-emerald-500 dark:active:focus:pi-border-emerald-200 focus:pi-border-emerald-500 dark:focus:pi-border-emerald-200 pi-text-gray-900 dark:pi-text-gray-50 pi-font-light pi-text-xl pi-text-center pi-px-2 focus:pi-outline-0 focus:pi-ring-0 pi-placeholder-gray-400 dark:pi-placeholder-gray-500 pi-font-[inherit]"})),y.default.createElement(a.default,{keyCallback:h})):y.default.createElement("div",{className:"pi-font-medium pi-text-base"},"Keypad"),y.default.createElement(f.CustomThemedTooltip,{className:"pi-z-1000",id:"keyboard-tooltip",place:"right"}))};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/KeypadView/index.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useEffect, useRef } from 'react'\nimport { Button } from '../Button'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faArrowLeft } from '@fortawesome/free-solid-svg-icons'\nimport Actions from './Actions'\nimport { sendDTMF } from '../../lib/webrtc/messages'\nimport { backToPreviousView } from '../../lib/island/island'\nimport { playDtmfAudio } from '../../lib/phone/call'\nimport { useTranslation } from 'react-i18next'\nimport { isWebRTC } from '../../lib/user/default_device'\nimport { sendPhysicalDTMF } from '../../services/astproxy'\nimport { useEventListener, eventDispatch } from '../../utils'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\n\nconst DTMF_KEYS = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '*', '#']\n\nconst KeypadView: FC<KeypadViewTypes> = () => {\n const dispatch = useDispatch<Dispatch>()\n const { keypadValue } = useSelector((state: RootState) => state.currentCall)\n const { isOpen } = useSelector((state: RootState) => state.island)\n const keypadValueRef = useRef<typeof keypadValue>(keypadValue)\n\n function sendKey(key: string) {\n dispatch.currentCall.updateKeypadValue(`${keypadValueRef.current}${key}`)\n keypadValueRef.current = `${keypadValueRef.current}${key}`\n playDtmfAudio(key)\n if (isWebRTC()) {\n sendDTMF(key)\n } else {\n sendPhysicalDTMF(key)\n }\n\n eventDispatch('phone-island-call-keypad-sent', {})\n }\n useEventListener('phone-island-call-keypad-send', (data: KeypadTypes) => {\n sendKey(data.key)\n })\n\n useEffect(() => {\n function handlePhysicalKeydown(event) {\n if (DTMF_KEYS.includes(event.key)) {\n sendKey(event.key)\n }\n }\n window.addEventListener('keydown', handlePhysicalKeydown)\n return () => window.removeEventListener('keydown', handlePhysicalKeydown)\n }, [])\n\n const { t } = useTranslation()\n\n return (\n <>\n {isOpen ? (\n <div className='pi-flex pi-flex-col pi-gap-7'>\n <div className='pi-flex pi-gap-4'>\n <Button\n variant='transparent'\n onClick={backToPreviousView}\n data-tooltip-id='keyboard-tooltip'\n data-tooltip-content={t('Tooltip.Back to call') || ''}\n >\n <FontAwesomeIcon size='xl' icon={faArrowLeft} />\n </Button>\n <input\n data-stop-propagation={true}\n type='text'\n readOnly\n placeholder={t('Common.Enter a phone number') || ''}\n value={keypadValue}\n autoFocus\n className='pi-w-full pi-rounded-full dark:pi-bg-gray-950 pi-bg-gray-50 pi-border-2 pi-border-emerald-500 dark:pi-border-emerald-200 active:pi-border-emerald-500 dark:active:focus:pi-border-emerald-200 focus:pi-border-emerald-500 dark:focus:pi-border-emerald-200 pi-text-gray-900 dark:pi-text-gray-50 pi-font-light pi-text-xl pi-text-center pi-px-2 focus:pi-outline-0 focus:pi-ring-0 pi-placeholder-gray-400 dark:pi-placeholder-gray-500 pi-font-[inherit]'\n />\n </div>\n <Actions keyCallback={sendKey} />\n </div>\n ) : (\n <div className='pi-font-medium pi-text-base'>Keypad</div>\n )}\n <CustomThemedTooltip className='pi-z-1000' id='keyboard-tooltip' place='right' />\n </>\n )\n}\n\nexport default KeypadView\n\nexport interface KeypadViewTypes {}\n\ninterface KeypadTypes {\n key: string\n}\n"],"names":["DTMF_KEYS","dispatch","useDispatch","keypadValue","useSelector","state","currentCall","isOpen","island","keypadValueRef","useRef","sendKey","key","updateKeypadValue","concat","current","playDtmfAudio","isWebRTC","sendDTMF","sendPhysicalDTMF","eventDispatch","useEventListener","data","useEffect","handlePhysicalKeydown","event","includes","window","addEventListener","removeEventListener","t","useTranslation","React","createElement","Fragment","className","Button","variant","onClick","backToPreviousView","FontAwesomeIcon","size","icon","faArrowLeft","type","readOnly","placeholder","value","autoFocus","Actions","keyCallback","CustomThemedTooltip","id","place"],"mappings":"w/CAmBMA,EAAY,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,qBAElC,WACtC,IAAMC,EAAWC,EAAAA,cACTC,EAAgBC,cAAY,SAACC,GAAqB,OAAAA,EAAMC,0BACxDC,EAAWH,cAAY,SAACC,GAAqB,OAAAA,EAAMG,gBACrDC,EAAiBC,SAA2BP,GAElD,SAASQ,EAAQC,GACfX,EAASK,YAAYO,kBAAkB,GAAAC,OAAGL,EAAeM,SAAOD,OAAGF,IACnEH,EAAeM,QAAU,GAAGD,OAAAL,EAAeM,SAAOD,OAAGF,GACrDI,EAAaA,cAACJ,GACVK,EAAQA,WACVC,EAAQA,SAACN,GAETO,EAAgBA,iBAACP,GAGnBQ,gBAAc,gCAAiC,CAAA,EAChD,CACDC,mBAAiB,gCAAiC,SAACC,GACjDX,EAAQW,EAAKV,IACf,GAEAW,EAAAA,UAAU,WACR,SAASC,EAAsBC,GACzBzB,EAAU0B,SAASD,EAAMb,MAC3BD,EAAQc,EAAMb,IAEjB,CAED,OADAe,OAAOC,iBAAiB,UAAWJ,GAC5B,WAAM,OAAAG,OAAOE,oBAAoB,UAAWL,GACpD,EAAE,IAEK,IAAAM,EAAMC,qBAEd,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACG3B,EACCyB,EAAK,QAAAC,cAAA,MAAA,CAAAE,UAAU,gCACbH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,oBACbH,EAAAA,QAAAC,cAACG,EAAAA,OACC,CAAAC,QAAQ,cACRC,QAASC,EAAkBA,mBAAA,kBACX,mBACM,uBAAAT,EAAE,yBAA2B,IAEnDE,UAACC,cAAAO,EAAAA,gBAAgB,CAAAC,KAAK,KAAKC,KAAMC,EAAWA,eAE9CX,UACyBC,cAAA,QAAA,CAAA,yBAAA,EACvBW,KAAK,OACLC,UACA,EAAAC,YAAahB,EAAE,gCAAkC,GACjDiB,MAAO5C,EACP6C,WAAS,EACTb,UAAU,gcAGdH,EAAA,QAAAC,cAACgB,EAAO,QAAC,CAAAC,YAAavC,KAGxBqB,EAAA,QAAAC,cAAA,MAAA,CAAKE,UAAU,yCAEjBH,EAAAA,QAAAC,cAACkB,sBAAoB,CAAAhB,UAAU,YAAYiB,GAAG,mBAAmBC,MAAM,UAG7E"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/KeypadView/index.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useEffect, useRef } from 'react'\nimport { Button } from '../Button'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faArrowLeft } from '@fortawesome/free-solid-svg-icons'\nimport Actions from './Actions'\nimport { sendDTMF } from '../../lib/webrtc/messages'\nimport { backToPreviousView } from '../../lib/island/island'\nimport { playDtmfAudio } from '../../lib/phone/call'\nimport { useTranslation } from 'react-i18next'\nimport { isWebRTC } from '../../lib/user/default_device'\nimport { sendPhysicalDTMF } from '../../services/astproxy'\nimport { useEventListener, eventDispatch } from '../../utils'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\n\nconst DTMF_KEYS = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '*', '#']\n\nconst KeypadView: FC<KeypadViewTypes> = () => {\n const dispatch = useDispatch<Dispatch>()\n const { keypadValue } = useSelector((state: RootState) => state.currentCall)\n const { isOpen } = useSelector((state: RootState) => state.island)\n const keypadValueRef = useRef<typeof keypadValue>(keypadValue)\n\n function sendKey(key: string) {\n dispatch.currentCall.updateKeypadValue(`${keypadValueRef.current}${key}`)\n keypadValueRef.current = `${keypadValueRef.current}${key}`\n playDtmfAudio(key)\n if (isWebRTC()) {\n sendDTMF(key)\n } else {\n sendPhysicalDTMF(key)\n }\n\n eventDispatch('phone-island-call-keypad-sent', {})\n }\n useEventListener('phone-island-call-keypad-send', (data: KeypadTypes) => {\n sendKey(data.key)\n })\n\n useEffect(() => {\n function handlePhysicalKeydown(event) {\n if (DTMF_KEYS.includes(event.key)) {\n sendKey(event.key)\n }\n }\n window.addEventListener('keydown', handlePhysicalKeydown)\n return () => window.removeEventListener('keydown', handlePhysicalKeydown)\n }, [])\n\n const { t } = useTranslation()\n\n return (\n <>\n {isOpen ? (\n <div className='pi-flex pi-flex-col pi-gap-7'>\n <div className='pi-flex pi-gap-4'>\n <Button\n variant='transparent'\n onClick={backToPreviousView}\n data-tooltip-id='keyboard-tooltip'\n data-tooltip-content={t('Tooltip.Back to call') || ''}\n >\n <FontAwesomeIcon size='xl' icon={faArrowLeft} />\n </Button>\n <input\n data-stop-propagation={true}\n type='text'\n readOnly\n placeholder={t('Common.Enter a phone number') || ''}\n value={keypadValue}\n autoFocus\n className='pi-w-full pi-rounded-full dark:pi-bg-gray-950 pi-bg-gray-50 pi-border-2 pi-border-emerald-500 dark:pi-border-emerald-200 active:pi-border-emerald-500 dark:active:focus:pi-border-emerald-200 focus:pi-border-emerald-500 dark:focus:pi-border-emerald-200 pi-text-gray-900 dark:pi-text-gray-50 pi-font-light pi-text-xl pi-text-center pi-px-2 focus:pi-outline-0 focus:pi-ring-0 pi-placeholder-gray-400 dark:pi-placeholder-gray-500 pi-font-[inherit]'\n />\n </div>\n <Actions keyCallback={sendKey} />\n </div>\n ) : (\n <div className='pi-font-medium pi-text-base'>Keypad</div>\n )}\n <CustomThemedTooltip className='pi-z-1000' id='keyboard-tooltip' place='right' />\n </>\n )\n}\n\nexport default KeypadView\n\nexport interface KeypadViewTypes {}\n\ninterface KeypadTypes {\n key: string\n}\n"],"names":["DTMF_KEYS","dispatch","useDispatch","keypadValue","useSelector","state","currentCall","isOpen","island","keypadValueRef","useRef","sendKey","key","updateKeypadValue","concat","current","playDtmfAudio","isWebRTC","sendDTMF","sendPhysicalDTMF","eventDispatch","useEventListener","data","useEffect","handlePhysicalKeydown","event","includes","window","addEventListener","removeEventListener","t","useTranslation","React","createElement","Fragment","className","Button","variant","onClick","backToPreviousView","FontAwesomeIcon","size","icon","faArrowLeft","type","readOnly","placeholder","value","autoFocus","Actions","keyCallback","CustomThemedTooltip","id","place"],"mappings":"ksCAmBMA,EAAY,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,qBAElC,WACtC,IAAMC,EAAWC,EAAAA,cACTC,EAAgBC,cAAY,SAACC,GAAqB,OAAAA,EAAMC,0BACxDC,EAAWH,cAAY,SAACC,GAAqB,OAAAA,EAAMG,gBACrDC,EAAiBC,SAA2BP,GAElD,SAASQ,EAAQC,GACfX,EAASK,YAAYO,kBAAkB,GAAAC,OAAGL,EAAeM,SAAOD,OAAGF,IACnEH,EAAeM,QAAU,GAAGD,OAAAL,EAAeM,SAAOD,OAAGF,GACrDI,EAAaA,cAACJ,GACVK,EAAQA,WACVC,EAAQA,SAACN,GAETO,EAAgBA,iBAACP,GAGnBQ,gBAAc,gCAAiC,CAAA,EAChD,CACDC,mBAAiB,gCAAiC,SAACC,GACjDX,EAAQW,EAAKV,IACf,GAEAW,EAAAA,UAAU,WACR,SAASC,EAAsBC,GACzBzB,EAAU0B,SAASD,EAAMb,MAC3BD,EAAQc,EAAMb,IAEjB,CAED,OADAe,OAAOC,iBAAiB,UAAWJ,GAC5B,WAAM,OAAAG,OAAOE,oBAAoB,UAAWL,GACpD,EAAE,IAEK,IAAAM,EAAMC,qBAEd,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACG3B,EACCyB,EAAK,QAAAC,cAAA,MAAA,CAAAE,UAAU,gCACbH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,oBACbH,EAAAA,QAAAC,cAACG,EAAAA,OACC,CAAAC,QAAQ,cACRC,QAASC,EAAkBA,mBAAA,kBACX,mBACM,uBAAAT,EAAE,yBAA2B,IAEnDE,UAACC,cAAAO,EAAAA,gBAAgB,CAAAC,KAAK,KAAKC,KAAMC,EAAWA,eAE9CX,UACyBC,cAAA,QAAA,CAAA,yBAAA,EACvBW,KAAK,OACLC,UACA,EAAAC,YAAahB,EAAE,gCAAkC,GACjDiB,MAAO5C,EACP6C,WAAS,EACTb,UAAU,gcAGdH,EAAA,QAAAC,cAACgB,EAAO,QAAC,CAAAC,YAAavC,KAGxBqB,EAAA,QAAAC,cAAA,MAAA,CAAKE,UAAU,yCAEjBH,EAAAA,QAAAC,cAACkB,sBAAoB,CAAAhB,UAAU,YAAYiB,GAAG,mBAAmBC,MAAM,UAG7E"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js"),require("../../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 r=require("../Button.js"),l=require("../../node_modules/@fortawesome/react-fontawesome/dist/index.js"),u=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),n=require("../GenericAvatar.js"),i=require("../CustomThemedTooltip.js"),o=require("../../node_modules/react-redux/es/hooks/useSelector.js"),a=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=s(e);exports.OperatorBusyView=function(){var s=o.useSelector(function(e){return e.island}),d=s.operatorBusy,m=s.previousView,f=o.useSelector(function(e){return e.avatars}).avatars,p=o.useSelector(function(e){return e.users}).extensions,v=t.useTranslation().t,b=a.useDispatch(),x=o.useSelector(function(e){return e.conference}),y=x.isActive,j=x.conferenceStartedFrom,N=o.useSelector(function(e){return e.currentUser}).username,q=o.useSelector(function(e){return e.currentCall}),w=q.accepted,h=q.incoming,_=q.outgoing,E=e.useCallback(function(){return y&&j===N?"waitingConference":w||h||_?m||"call":null},[w,j,h,y,_,m,N]),C=e.useCallback(function(){b.player.stopAudioPlayer(),b.island.resetOperatorBusyCompletely(),b.island.setIslandView(E())},[b,E]),g=e.useMemo(function(){if((null==d?void 0:d.calledNumber)&&p){var e=Object.values(p).find(function(e){return e.exten===(null==d?void 0:d.calledNumber)});return e?null==e?void 0:e.username:null}return null},[p,null==d?void 0:d.calledNumber]),k=e.useMemo(function(){return g&&f&&f[g]?f[g]:null},[f,g]),T=e.useMemo(function(){return null!==g},[g]),S=e.useMemo(function(){if(p&&(null==d?void 0:d.calledNumber)&&""!==(null==d?void 0:d.calledNumber)){var e=Object.values(p).find(function(e){return(null==e?void 0:e.exten)===(null==d?void 0:d.calledNumber)});return e&&(null==e?void 0:e.name)&&""!==(null==e?void 0:e.name)?null==e?void 0:e.name:null==d?void 0:d.calledNumber}return"-"},[null==d?void 0:d.calledNumber,p]),A=e.useMemo(function(){return v(T?"Call.User busy":"Call.Number busy")},[v,T]);return e.useEffect(function(){return function(){b.player.stopAudioPlayer()}},[b]),e.useEffect(function(){var e=window.setTimeout(function(){C()},4e3);return function(){window.clearTimeout(e)}},[C]),c.default.createElement(c.default.Fragment,null,c.default.createElement("div",{className:"pi-flex pi-items-center pi-justify-between pi-w-full"},c.default.createElement("div",{className:"pi-flex pi-items-center pi-space-x-3"},c.default.createElement(n.GenericAvatar,{avatarUrl:k,size:"open",showPulseEffect:!1}),c.default.createElement("div",{className:"pi-flex pi-flex-col"},c.default.createElement("div",{className:"pi-text-lg pi-font-medium pi-text-primaryNeutral dark:pi-text-primaryNeutralDark"},S),c.default.createElement("div",{className:"pi-text-sm pi-font-regular pi-text-primaryNeutral dark:pi-text-primaryNeutralDark"},A))),c.default.createElement(r.Button,{variant:"default",onClick:C,className:"pi-p-2","data-tooltip-id":"tooltip-close-busy-call","data-tooltip-content":v("Tooltip.Close")||"Close"},c.default.createElement(l.FontAwesomeIcon,{icon:u.faXmark,className:"pi-w-5 pi-h-5"}))),c.default.createElement(i.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-close-busy-call",place:"left"}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js"),require("../../node_modules/i18next/dist/esm/i18next.js"),require("../../node_modules/react-i18next/dist/es/context.js");var t=require("../../node_modules/react-i18next/dist/es/useTranslation.js"),r=require("../Button.js"),l=require("../../node_modules/@fortawesome/react-fontawesome/dist/index.js"),n=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),u=require("../GenericAvatar.js"),a=require("../CustomThemedTooltip.js"),i=require("../../node_modules/react-redux/es/hooks/useSelector.js"),o=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=s(e);exports.OperatorBusyView=function(){var s=i.useSelector(function(e){return e.island}),d=s.operatorBusy,m=s.previousView,f=i.useSelector(function(e){return e.avatars}).avatars,p=i.useSelector(function(e){return e.users}).extensions,v=t.useTranslation().t,x=o.useDispatch(),N=i.useSelector(function(e){return e.conference}),b=N.isActive,y=N.conferenceStartedFrom,j=i.useSelector(function(e){return e.currentUser}).username,w=i.useSelector(function(e){return e.currentCall}),E=w.accepted,q=w.incoming,C=w.outgoing,k=e.useCallback(function(){return b&&y===j?"waitingConference":E||q||C?m||"call":null},[E,y,q,b,C,m,j]),_=e.useCallback(function(){x.player.stopAudioPlayer(),x.island.resetOperatorBusyCompletely(),x.island.setIslandView(k())},[x,k]),T=e.useMemo(function(){if((null==d?void 0:d.calledNumber)&&p){var e=Object.values(p).find(function(e){return e.exten===(null==d?void 0:d.calledNumber)});return e?null==e?void 0:e.username:null}return null},[p,null==d?void 0:d.calledNumber]),g=e.useMemo(function(){return T&&f&&f[T]?f[T]:null},[f,T]),h=e.useMemo(function(){return null!==T},[T]),S=e.useMemo(function(){if(p&&(null==d?void 0:d.calledNumber)&&""!==(null==d?void 0:d.calledNumber)){var e=Object.values(p).find(function(e){return(null==e?void 0:e.exten)===(null==d?void 0:d.calledNumber)});return e&&(null==e?void 0:e.name)&&""!==(null==e?void 0:e.name)?null==e?void 0:e.name:null==d?void 0:d.calledNumber}return"-"},[null==d?void 0:d.calledNumber,p]),A=e.useMemo(function(){return v(h?"Call.User busy":"Call.Number busy")},[v,h]);return e.useEffect(function(){return function(){x.player.stopAudioPlayer()}},[x]),e.useEffect(function(){var e=window.setTimeout(function(){_()},4e3);return function(){window.clearTimeout(e)}},[_]),c.default.createElement(c.default.Fragment,null,c.default.createElement("div",{className:"pi-flex pi-items-center pi-justify-between pi-w-full"},c.default.createElement("div",{className:"pi-flex pi-items-center pi-space-x-3"},c.default.createElement(u.GenericAvatar,{avatarUrl:g,size:"open",showPulseEffect:!1}),c.default.createElement("div",{className:"pi-flex pi-flex-col"},c.default.createElement("div",{className:"pi-text-lg pi-font-medium pi-text-primaryNeutral dark:pi-text-primaryNeutralDark"},S),c.default.createElement("div",{className:"pi-text-sm pi-font-regular pi-text-primaryNeutral dark:pi-text-primaryNeutralDark"},A))),c.default.createElement(r.Button,{variant:"default",onClick:_,className:"pi-p-2","data-tooltip-id":"tooltip-close-busy-call","data-tooltip-content":v("Tooltip.Close")||"Close"},c.default.createElement(l.FontAwesomeIcon,{icon:n.faXmark,className:"pi-w-5 pi-h-5"}))),c.default.createElement(a.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-close-busy-call",place:"left"}))};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/OperatorBusyView/index.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useCallback, useMemo, useEffect } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { RootState, Dispatch } from '../../store'\nimport { useTranslation } from 'react-i18next'\nimport { Button } from '../Button'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faXmark } from '@fortawesome/free-solid-svg-icons'\nimport { GenericAvatar } from '../GenericAvatar'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\n\nexport const OperatorBusyView: FC<OperatorBusyViewProps> = () => {\n const { operatorBusy, previousView } = useSelector((state: RootState) => state.island)\n const { avatars } = useSelector((state: RootState) => state.avatars)\n const { extensions } = useSelector((state: RootState) => state.users)\n const { t } = useTranslation()\n const dispatch = useDispatch<Dispatch>()\n const { isActive, conferenceStartedFrom } = useSelector((state: RootState) => state.conference)\n const { username } = useSelector((state: RootState) => state.currentUser)\n const { accepted, incoming, outgoing } = useSelector((state: RootState) => state.currentCall)\n\n const getNextViewOnClose = useCallback(() => {\n if (isActive && conferenceStartedFrom === username) {\n return 'waitingConference'\n }\n\n if (accepted || incoming || outgoing) {\n return previousView || 'call'\n }\n\n return null\n }, [accepted, conferenceStartedFrom, incoming, isActive, outgoing, previousView, username])\n\n const handleClose = useCallback(() => {\n // Stop any playing busy tone\n dispatch.player.stopAudioPlayer()\n // Reset operator busy state completely when user closes manually\n dispatch.island.resetOperatorBusyCompletely()\n dispatch.island.setIslandView(getNextViewOnClose())\n }, [dispatch, getNextViewOnClose])\n\n // Get the username of the operator based on called extension number\n const operatorUsername = useMemo(() => {\n // Check if we have the called number and extensions are loaded\n if (operatorBusy?.calledNumber && extensions) {\n // Find the extension that matches the called number\n const extension = Object.values(extensions).find(\n (ext) => ext.exten === operatorBusy?.calledNumber,\n )\n // Return the username if found\n return extension ? extension?.username : null\n }\n return null\n }, [extensions, operatorBusy?.calledNumber])\n\n // Get avatar URL based on operator's username\n const avatarUrl = useMemo(() => {\n // If we have the username and avatars, look for the avatar\n if (operatorUsername && avatars && avatars[operatorUsername]) {\n return avatars[operatorUsername]\n }\n return null\n }, [avatars, operatorUsername])\n\n // Check if the called number is an operator (has username)\n const isOperator = useMemo(() => {\n return operatorUsername !== null\n }, [operatorUsername])\n\n // Format display text - show the operator name or called number\n const displayText = useMemo(() => {\n if (extensions && operatorBusy?.calledNumber && operatorBusy?.calledNumber !== '') {\n // Try to get the extension to display the name if available\n const extension = Object.values(extensions).find(\n (ext) => ext?.exten === operatorBusy?.calledNumber,\n )\n\n // If we found the extension and it has a name, show the name\n if (extension && extension?.name && extension?.name !== '') {\n return extension?.name\n }\n\n // Otherwise just show the extension number\n return operatorBusy?.calledNumber\n }\n //fallback string\n return '-'\n }, [operatorBusy?.calledNumber, extensions])\n\n const statusText = useMemo(() => {\n // If it's an operator, show \"User busy\", otherwise show \"Number busy\"\n if (isOperator) {\n return t('Call.User busy')\n }\n return t('Call.Number busy')\n }, [t, isOperator])\n\n // Stop busy tone when component unmounts\n useEffect(() => {\n return () => {\n dispatch.player.stopAudioPlayer()\n }\n }, [dispatch])\n\n useEffect(() => {\n const timeoutId = window.setTimeout(() => {\n handleClose()\n }, 4000)\n\n return () => {\n window.clearTimeout(timeoutId)\n }\n }, [handleClose])\n\n return (\n <>\n <div className='pi-flex pi-items-center pi-justify-between pi-w-full'>\n {/* Left side - Avatar and info */}\n <div className='pi-flex pi-items-center pi-space-x-3'>\n {/* Avatar */}\n <GenericAvatar avatarUrl={avatarUrl} size='open' showPulseEffect={false} />\n\n {/* Number and status */}\n <div className='pi-flex pi-flex-col'>\n <div className='pi-text-lg pi-font-medium pi-text-primaryNeutral dark:pi-text-primaryNeutralDark'>\n {displayText}\n </div>\n <div className='pi-text-sm pi-font-regular pi-text-primaryNeutral dark:pi-text-primaryNeutralDark'>\n {statusText}\n </div>\n </div>\n </div>\n\n {/* Right side - Close button */}\n <Button\n variant='default'\n onClick={handleClose}\n className='pi-p-2'\n data-tooltip-id='tooltip-close-busy-call'\n data-tooltip-content={t('Tooltip.Close') || 'Close'}\n >\n <FontAwesomeIcon icon={faXmark} className='pi-w-5 pi-h-5' />\n </Button>\n </div>\n <CustomThemedTooltip className='pi-z-20' id='tooltip-close-busy-call' place='left' />\n </>\n )\n}\n\nexport interface OperatorBusyViewProps {}\n"],"names":["_a","useSelector","state","island","operatorBusy","previousView","avatars","extensions","users","t","useTranslation","dispatch","useDispatch","_b","conference","isActive","conferenceStartedFrom","username","currentUser","_c","currentCall","accepted","incoming","outgoing","getNextViewOnClose","useCallback","handleClose","player","stopAudioPlayer","resetOperatorBusyCompletely","setIslandView","operatorUsername","useMemo","calledNumber","extension","Object","values","find","ext","exten","avatarUrl","isOperator","displayText","name","statusText","useEffect","timeoutId","window","setTimeout","clearTimeout","React","createElement","Fragment","className","GenericAvatar","size","showPulseEffect","Button","variant","onClick","FontAwesomeIcon","icon","faXmark","CustomThemedTooltip","id","place"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/OperatorBusyView/index.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useCallback, useMemo, useEffect } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { RootState, Dispatch } from '../../store'\nimport { useTranslation } from 'react-i18next'\nimport { Button } from '../Button'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faXmark } from '@fortawesome/free-solid-svg-icons'\nimport { GenericAvatar } from '../GenericAvatar'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\n\nexport const OperatorBusyView: FC<OperatorBusyViewProps> = () => {\n const { operatorBusy, previousView } = useSelector((state: RootState) => state.island)\n const { avatars } = useSelector((state: RootState) => state.avatars)\n const { extensions } = useSelector((state: RootState) => state.users)\n const { t } = useTranslation()\n const dispatch = useDispatch<Dispatch>()\n const { isActive, conferenceStartedFrom } = useSelector((state: RootState) => state.conference)\n const { username } = useSelector((state: RootState) => state.currentUser)\n const { accepted, incoming, outgoing } = useSelector((state: RootState) => state.currentCall)\n\n const getNextViewOnClose = useCallback(() => {\n if (isActive && conferenceStartedFrom === username) {\n return 'waitingConference'\n }\n\n if (accepted || incoming || outgoing) {\n return previousView || 'call'\n }\n\n return null\n }, [accepted, conferenceStartedFrom, incoming, isActive, outgoing, previousView, username])\n\n const handleClose = useCallback(() => {\n // Stop any playing busy tone\n dispatch.player.stopAudioPlayer()\n // Reset operator busy state completely when user closes manually\n dispatch.island.resetOperatorBusyCompletely()\n dispatch.island.setIslandView(getNextViewOnClose())\n }, [dispatch, getNextViewOnClose])\n\n // Get the username of the operator based on called extension number\n const operatorUsername = useMemo(() => {\n // Check if we have the called number and extensions are loaded\n if (operatorBusy?.calledNumber && extensions) {\n // Find the extension that matches the called number\n const extension = Object.values(extensions).find(\n (ext) => ext.exten === operatorBusy?.calledNumber,\n )\n // Return the username if found\n return extension ? extension?.username : null\n }\n return null\n }, [extensions, operatorBusy?.calledNumber])\n\n // Get avatar URL based on operator's username\n const avatarUrl = useMemo(() => {\n // If we have the username and avatars, look for the avatar\n if (operatorUsername && avatars && avatars[operatorUsername]) {\n return avatars[operatorUsername]\n }\n return null\n }, [avatars, operatorUsername])\n\n // Check if the called number is an operator (has username)\n const isOperator = useMemo(() => {\n return operatorUsername !== null\n }, [operatorUsername])\n\n // Format display text - show the operator name or called number\n const displayText = useMemo(() => {\n if (extensions && operatorBusy?.calledNumber && operatorBusy?.calledNumber !== '') {\n // Try to get the extension to display the name if available\n const extension = Object.values(extensions).find(\n (ext) => ext?.exten === operatorBusy?.calledNumber,\n )\n\n // If we found the extension and it has a name, show the name\n if (extension && extension?.name && extension?.name !== '') {\n return extension?.name\n }\n\n // Otherwise just show the extension number\n return operatorBusy?.calledNumber\n }\n //fallback string\n return '-'\n }, [operatorBusy?.calledNumber, extensions])\n\n const statusText = useMemo(() => {\n // If it's an operator, show \"User busy\", otherwise show \"Number busy\"\n if (isOperator) {\n return t('Call.User busy')\n }\n return t('Call.Number busy')\n }, [t, isOperator])\n\n // Stop busy tone when component unmounts\n useEffect(() => {\n return () => {\n dispatch.player.stopAudioPlayer()\n }\n }, [dispatch])\n\n useEffect(() => {\n const timeoutId = window.setTimeout(() => {\n handleClose()\n }, 4000)\n\n return () => {\n window.clearTimeout(timeoutId)\n }\n }, [handleClose])\n\n return (\n <>\n <div className='pi-flex pi-items-center pi-justify-between pi-w-full'>\n {/* Left side - Avatar and info */}\n <div className='pi-flex pi-items-center pi-space-x-3'>\n {/* Avatar */}\n <GenericAvatar avatarUrl={avatarUrl} size='open' showPulseEffect={false} />\n\n {/* Number and status */}\n <div className='pi-flex pi-flex-col'>\n <div className='pi-text-lg pi-font-medium pi-text-primaryNeutral dark:pi-text-primaryNeutralDark'>\n {displayText}\n </div>\n <div className='pi-text-sm pi-font-regular pi-text-primaryNeutral dark:pi-text-primaryNeutralDark'>\n {statusText}\n </div>\n </div>\n </div>\n\n {/* Right side - Close button */}\n <Button\n variant='default'\n onClick={handleClose}\n className='pi-p-2'\n data-tooltip-id='tooltip-close-busy-call'\n data-tooltip-content={t('Tooltip.Close') || 'Close'}\n >\n <FontAwesomeIcon icon={faXmark} className='pi-w-5 pi-h-5' />\n </Button>\n </div>\n <CustomThemedTooltip className='pi-z-20' id='tooltip-close-busy-call' place='left' />\n </>\n )\n}\n\nexport interface OperatorBusyViewProps {}\n"],"names":["_a","useSelector","state","island","operatorBusy","previousView","avatars","extensions","users","t","useTranslation","dispatch","useDispatch","_b","conference","isActive","conferenceStartedFrom","username","currentUser","_c","currentCall","accepted","incoming","outgoing","getNextViewOnClose","useCallback","handleClose","player","stopAudioPlayer","resetOperatorBusyCompletely","setIslandView","operatorUsername","useMemo","calledNumber","extension","Object","values","find","ext","exten","avatarUrl","isOperator","displayText","name","statusText","useEffect","timeoutId","window","setTimeout","clearTimeout","React","createElement","Fragment","className","GenericAvatar","size","showPulseEffect","Button","variant","onClick","FontAwesomeIcon","icon","faXmark","CustomThemedTooltip","id","place"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("react");require("../../node_modules/react-redux/es/index.js");var i=require("../../store/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 r=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var s=require("../Hangup.js"),n=require("../../node_modules/@fortawesome/react-fontawesome/dist/index.js"),a=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),o=require("../../utils/customHooks/useEventListener.js"),l=require("../../utils/genericFunctions/eventDispatch.js"),c=require("../../services/offhour.js");require("../../lib/webrtc/janus.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../../node_modules/mic-check/lib/index.js");var d=require("../../events/RecorderEvents.js"),u=require("./PhysicalRecordingTimer.js"),p=require("../../node_modules/react-redux/es/hooks/useSelector.js"),m=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function f(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var h=f(t);exports.PhysicalRecorderView=function(){var f=p.useSelector(function(e){return e.island}).isOpen,v=p.useSelector(function(e){return{recording:e.physicalRecorder.recording}}).recording,j=i.store.getState().currentUser.username,g=t.useRef(null),w=m.useDispatch();t.useEffect(function(){return w.recorder.setVisibleContainerRef(g),function(){w.recorder.reset()}},[]);var x=r.useTranslation().t;o.useEventListener("phone-island-physical-recording-open",function(){!function(){e.__awaiter(this,void 0,void 0,function(){var t;return e.__generator(this,function(e){switch(e.label){case 0:return w.physicalRecorder.setRecording(!0),[4,c.startAnnouncementRecording()];case 1:return(t=e.sent()).tempFilename&&w.physicalRecorder.setTempFilename(t.tempFilename),l.eventDispatch("phone-island-recording-started",{}),[2]}})})}()});var y=i.store.getState().physicalRecorder.recordingTempVariable;return o.useEventListener("phone-island-conversations",function(e){Object.keys(e).forEach(function(t){var i;if(t===j){var r=null===(i=e[t])||void 0===i?void 0:i.conversations;if(r){var s=Object.keys(r);if(s.length>0&&"REC"===r[s[0]].counterpartName){w.physicalRecorder.setStartTime("".concat(Date.now()/1e3));var n=r[s[0]];if(n&&n.chSource){var a={conversationId:n.id,endpointId:n.chSource.callerNum};w.physicalRecorder.setCallRecordingInformations({recordingCallInformation:a})}}0===s.length&&v&&!y&&(d.dispatchPhysicalRecordingSave(),w.island.setIslandView(null),w.physicalRecorder.setRecording(!1))}}})}),h.default.createElement(h.default.Fragment,null,f?h.default.createElement("div",{className:""},y&&h.default.createElement("div",{className:"pi-flex pi-w-full pi-justify-center pi-items-center pi-pt-4 pi-pb-9"},h.default.createElement("div",{className:"pi-font-medium pi-text-4xl pi-w-fit pi-h-fit dark:pi-text-white"},h.default.createElement(u.default,null))),h.default.createElement("div",{className:"pi-flex pi-w-full pi-justify-center pi-items-center"},y?h.default.createElement("div",{className:"pi-sans pi-text-sm pi-w-fit pi-h-fit dark:pi-text-white"},x("Common.Close the call to stop recording")):h.default.createElement("div",{className:"pi-mt-12 pi-font-regular pi-text-lg pi-w-fit pi-h-fit dark:pi-text-white"},x("Common.Answer phone to start recording"))),h.default.createElement("div",{className:"pi-grid pi-pt-2 pi-mt-8"},h.default.createElement("div",{className:"pi-grid pi-justify-items-center"},h.default.createElement(s.default,{description:x("Tooltip.Interrupt recording"),isPhysicalRecording:!0})))):h.default.createElement("div",{className:"pi-flex pi-justify-between pi-items-center"},h.default.createElement("div",{className:"pi-font-medium pi-text-base"},x("Common.Recording")),h.default.createElement("div",{className:"".concat(f?"pi-h-12 pi-w-12":"pi-h-6 pi-w-6"," pi-flex pi-justify-center pi-items-center")},h.default.createElement("div",{className:"".concat(f?"pi-h-8":"pi-h-4 pi-w-4 pi-rounded-full"," pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden")},h.default.createElement("span",{className:"".concat(f?"pi-w-8 pi-h-8":"pi-h-6 pi-w-6"," pi-animate-ping pi-absolute pi-inline-flex pi-rounded-full pi-bg-red-400 pi-opacity-75 ")}),h.default.createElement(n.FontAwesomeIcon,{className:"pi-w-4 pi-h-6 pi-rotate-45 pi-text-red-500",icon:a.faCircle})))))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("react");require("../../node_modules/react-redux/es/index.js");var i=require("../../store/index.js");require("../../node_modules/i18next/dist/esm/i18next.js"),require("../../node_modules/react-i18next/dist/es/context.js");var r=require("../../node_modules/react-i18next/dist/es/useTranslation.js"),n=require("../Hangup.js"),s=require("../../node_modules/@fortawesome/react-fontawesome/dist/index.js"),a=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),c=require("../../utils/customHooks/useEventListener.js"),o=require("../../utils/genericFunctions/eventDispatch.js"),l=require("../../services/offhour.js");require("../../lib/webrtc/janus.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../../node_modules/mic-check/lib/index.js");var d=require("../../events/RecorderEvents.js"),u=require("./PhysicalRecordingTimer.js"),p=require("../../node_modules/react-redux/es/hooks/useSelector.js"),m=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function f(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var h=f(t);exports.PhysicalRecorderView=function(){var f=p.useSelector(function(e){return e.island}).isOpen,v=p.useSelector(function(e){return{recording:e.physicalRecorder.recording}}).recording,g=i.store.getState().currentUser.username,j=t.useRef(null),x=m.useDispatch();t.useEffect(function(){return x.recorder.setVisibleContainerRef(j),function(){x.recorder.reset()}},[]);var w=r.useTranslation().t;c.useEventListener("phone-island-physical-recording-open",function(){!function(){e.__awaiter(this,void 0,void 0,function(){var t;return e.__generator(this,function(e){switch(e.label){case 0:return x.physicalRecorder.setRecording(!0),[4,l.startAnnouncementRecording()];case 1:return(t=e.sent()).tempFilename&&x.physicalRecorder.setTempFilename(t.tempFilename),o.eventDispatch("phone-island-recording-started",{}),[2]}})})}()});var E=i.store.getState().physicalRecorder.recordingTempVariable;return c.useEventListener("phone-island-conversations",function(e){Object.keys(e).forEach(function(t){var i;if(t===g){var r=null===(i=e[t])||void 0===i?void 0:i.conversations;if(r){var n=Object.keys(r);if(n.length>0&&"REC"===r[n[0]].counterpartName){x.physicalRecorder.setStartTime("".concat(Date.now()/1e3));var s=r[n[0]];if(s&&s.chSource){var a={conversationId:s.id,endpointId:s.chSource.callerNum};x.physicalRecorder.setCallRecordingInformations({recordingCallInformation:a})}}0===n.length&&v&&!E&&(d.dispatchPhysicalRecordingSave(),x.island.setIslandView(null),x.physicalRecorder.setRecording(!1))}}})}),h.default.createElement(h.default.Fragment,null,f?h.default.createElement("div",{className:""},E&&h.default.createElement("div",{className:"pi-flex pi-w-full pi-justify-center pi-items-center pi-pt-4 pi-pb-9"},h.default.createElement("div",{className:"pi-font-medium pi-text-4xl pi-w-fit pi-h-fit dark:pi-text-white"},h.default.createElement(u.default,null))),h.default.createElement("div",{className:"pi-flex pi-w-full pi-justify-center pi-items-center"},E?h.default.createElement("div",{className:"pi-sans pi-text-sm pi-w-fit pi-h-fit dark:pi-text-white"},w("Common.Close the call to stop recording")):h.default.createElement("div",{className:"pi-mt-12 pi-font-regular pi-text-lg pi-w-fit pi-h-fit dark:pi-text-white"},w("Common.Answer phone to start recording"))),h.default.createElement("div",{className:"pi-grid pi-pt-2 pi-mt-8"},h.default.createElement("div",{className:"pi-grid pi-justify-items-center"},h.default.createElement(n.default,{description:w("Tooltip.Interrupt recording"),isPhysicalRecording:!0})))):h.default.createElement("div",{className:"pi-flex pi-justify-between pi-items-center"},h.default.createElement("div",{className:"pi-font-medium pi-text-base"},w("Common.Recording")),h.default.createElement("div",{className:"".concat(f?"pi-h-12 pi-w-12":"pi-h-6 pi-w-6"," pi-flex pi-justify-center pi-items-center")},h.default.createElement("div",{className:"".concat(f?"pi-h-8":"pi-h-4 pi-w-4 pi-rounded-full"," pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden")},h.default.createElement("span",{className:"".concat(f?"pi-w-8 pi-h-8":"pi-h-6 pi-w-6"," pi-animate-ping pi-absolute pi-inline-flex pi-rounded-full pi-bg-red-400 pi-opacity-75 ")}),h.default.createElement(s.FontAwesomeIcon,{className:"pi-w-4 pi-h-6 pi-rotate-45 pi-text-red-500",icon:a.faCircle})))))};
2
2
  //# sourceMappingURL=index.js.map