@agilemotion/oui-react-js 1.3.8 → 1.4.0

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 (230) hide show
  1. package/README.TXT +1 -0
  2. package/dist/{ApplicationContext.js → ApplicationManager.js} +334 -335
  3. package/dist/BasicApp.js +67 -64
  4. package/dist/BasicAppHome.js +90 -110
  5. package/dist/BusinessPortalApp.js +1 -1
  6. package/dist/BusinessPortalAppHome.js +15 -50
  7. package/dist/DynamicJS.js +24 -52
  8. package/dist/RestUtils.js +90 -116
  9. package/dist/Utils.js +49 -37
  10. package/dist/WithRouter.js +34 -0
  11. package/dist/assets/jss/components/authNavbarStyle.js +34 -35
  12. package/dist/assets/jss/components/cardHeaderStyle.js +12 -12
  13. package/dist/assets/jss/components/customDropdownStyle.js +26 -26
  14. package/dist/assets/jss/components/customInputStyle.js +2 -8
  15. package/dist/assets/jss/components/dropdownStyle.js +10 -15
  16. package/dist/assets/jss/components/footerStyle.js +12 -18
  17. package/dist/assets/jss/components/headerLinksStyle.js +7 -13
  18. package/dist/assets/jss/components/headerStyle.js +24 -25
  19. package/dist/assets/jss/components/navbarLinksStyle.js +7 -13
  20. package/dist/assets/jss/components/navbarStyle.js +24 -25
  21. package/dist/assets/jss/components/sidebarStyle.js +41 -43
  22. package/dist/assets/jss/components/typographyStyle.js +2 -8
  23. package/dist/assets/jss/rootStyle.js +32 -47
  24. package/dist/assets/jss/views/layoutStyle.js +6 -11
  25. package/dist/assets/jss/views/loginStyle.js +4 -10
  26. package/dist/assets/lotties/call-loading.json +1 -0
  27. package/dist/assets/lotties/calling-2.json +1 -0
  28. package/dist/assets/lotties/calling.json +1 -0
  29. package/dist/assets/lotties/calling2.json +1 -0
  30. package/dist/assets/lotties/chat.json +1 -0
  31. package/dist/assets/lotties/join.json +1 -0
  32. package/dist/assets/lotties/loading.json +1 -0
  33. package/dist/assets/lotties/msg2.json +1 -0
  34. package/dist/assets/lotties/recording.json +1 -0
  35. package/dist/assets/lotties/waiting.json +1 -0
  36. package/dist/assets/scss/black-dashboard-react/bootstrap/_card.scss +5 -5
  37. package/dist/assets/scss/black-dashboard-react/bootstrap/_carousel.scss +2 -2
  38. package/dist/assets/scss/black-dashboard-react/bootstrap/_custom-forms.scss +3 -3
  39. package/dist/assets/scss/black-dashboard-react/bootstrap/_functions.scss +1 -1
  40. package/dist/assets/scss/black-dashboard-react/bootstrap/_images.scss +1 -1
  41. package/dist/assets/scss/black-dashboard-react/bootstrap/_jumbotron.scss +1 -1
  42. package/dist/assets/scss/black-dashboard-react/bootstrap/_popover.scss +7 -5
  43. package/dist/assets/scss/black-dashboard-react/bootstrap/_tooltip.scss +4 -4
  44. package/dist/assets/scss/black-dashboard-react/bootstrap/_variables.scss +5 -5
  45. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_grid-framework.scss +2 -2
  46. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_grid.scss +11 -9
  47. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_embed.scss +6 -4
  48. package/dist/assets/scss/black-dashboard-react/custom/_sidebar-and-main-panel.scss +1 -1
  49. package/dist/assets/scss/black-dashboard-react/custom/_variables.scss +1 -1
  50. package/dist/components/AlertBar.js +39 -80
  51. package/dist/components/AlertItem.js +4 -26
  52. package/dist/components/Button.js +49 -52
  53. package/dist/components/Calendar.js +442 -0
  54. package/dist/components/Calender.css +244 -0
  55. package/dist/components/ConfirmationDialog.js +5 -29
  56. package/dist/components/DataGrid.js +207 -345
  57. package/dist/components/DataGridColumn.js +6 -29
  58. package/dist/components/DataGridFilter.js +48 -116
  59. package/dist/components/DataGridHeading.js +11 -19
  60. package/dist/components/Dialog.js +27 -121
  61. package/dist/components/DocumentViewer.js +12 -38
  62. package/dist/components/DocumentViewerComponent.js +2 -20
  63. package/dist/components/FileThumb.js +126 -0
  64. package/dist/components/Graph.js +33 -75
  65. package/dist/components/GraphNode.js +5 -22
  66. package/dist/components/HtmlPanel.js +68 -82
  67. package/dist/components/Icon.js +107 -1
  68. package/dist/components/LoadingIndicator.js +4 -4
  69. package/dist/components/LottieIcon.js +134 -0
  70. package/dist/components/PopupView.js +3 -21
  71. package/dist/components/Portlet.js +100 -0
  72. package/dist/components/RegularButton.js +15 -19
  73. package/dist/components/SignaturePanel.js +9 -40
  74. package/dist/components/SocketManager.js +170 -0
  75. package/dist/components/StepperTitleBar.js +33 -59
  76. package/dist/components/TabPage.js +6 -9
  77. package/dist/components/TabPanel.js +49 -98
  78. package/dist/components/TableCellContent.js +31 -39
  79. package/dist/components/TemplateDesigner.js +114 -158
  80. package/dist/components/TemplateItemEventHandler.js +33 -100
  81. package/dist/components/TemplateTable.js +6 -42
  82. package/dist/components/TitleBar.js +38 -54
  83. package/dist/components/Toolbar.js +67 -182
  84. package/dist/components/Tree.js +29 -66
  85. package/dist/components/card/Card.js +16 -20
  86. package/dist/components/card/CardAvatar.js +9 -13
  87. package/dist/components/card/CardBody.js +13 -17
  88. package/dist/components/card/CardFooter.js +12 -16
  89. package/dist/components/card/CardHeader.js +13 -17
  90. package/dist/components/card/CardIcon.js +6 -10
  91. package/dist/components/card/CardText.js +6 -10
  92. package/dist/components/customInput/CustomInput.js +12 -10
  93. package/dist/components/dashboard/BasicBusinessAppDashboard.js +85 -159
  94. package/dist/components/dashboard/BusinessPortalAppDashboard.js +30 -75
  95. package/dist/components/dashboard/components/Header.js +9 -26
  96. package/dist/components/dashboard/components/LeftDrawer.js +3 -1
  97. package/dist/components/dashboard/components/blackDashboard/fixedPlugin/FixedPlugin.js +1 -1
  98. package/dist/components/dashboard/components/blackDashboard/sidebar/Sidebar.css +7 -0
  99. package/dist/components/dashboard/components/blackDashboard/sidebar/Sidebar.js +189 -79
  100. package/dist/components/footer/Footer.js +6 -18
  101. package/dist/components/form/AddressSearch.js +32 -66
  102. package/dist/components/form/AutoComplete.js +161 -0
  103. package/dist/components/form/BaseField.js +89 -107
  104. package/dist/components/form/DatePicker.js +8 -23
  105. package/dist/components/form/FieldSet.js +161 -191
  106. package/dist/components/form/Form.css +1 -1
  107. package/dist/components/form/Form.js +153 -479
  108. package/dist/components/form/GridField.js +46 -146
  109. package/dist/components/form/IconField.js +35 -0
  110. package/dist/components/form/ImageEditor.js +22 -60
  111. package/dist/components/form/LookupField.js +8 -29
  112. package/dist/components/form/MultiFileUploadField.js +187 -0
  113. package/dist/components/form/RadioGroup.js +10 -26
  114. package/dist/components/form/Section.js +40 -91
  115. package/dist/components/form/SelectItem.js +14 -33
  116. package/dist/components/form/SignatureTemplateDesignerField.js +0 -1
  117. package/dist/components/form/Switch.js +53 -0
  118. package/dist/components/form/TextField.js +10 -17
  119. package/dist/components/form/TimePicker.js +8 -1
  120. package/dist/components/form/TransferList.css +2 -2
  121. package/dist/components/form/TransferList.js +67 -125
  122. package/dist/components/form/UploadField.js +132 -177
  123. package/dist/components/form/fieldset.css +8 -0
  124. package/dist/components/grid/GridContainer.js +5 -9
  125. package/dist/components/grid/GridItem.js +5 -9
  126. package/dist/components/layout/CollapsiblePanel.js +11 -33
  127. package/dist/components/layout/Layout.js +228 -290
  128. package/dist/components/layout/VC.css +17 -0
  129. package/dist/components/layout/View.css +18 -1
  130. package/dist/components/layout/View.js +80 -200
  131. package/dist/components/layout/ViewContainer.css +3 -0
  132. package/dist/components/layout/ViewContainer.js +59 -0
  133. package/dist/components/layout/ViewPort.js +50 -80
  134. package/dist/components/layout/Window.css +18 -0
  135. package/dist/components/layout/Window.js +287 -0
  136. package/dist/components/layout/WindowViewPort.js +71 -0
  137. package/dist/components/loader.css +1 -1
  138. package/dist/components/media/ClosablePanel.css +37 -0
  139. package/dist/components/media/ClosablePanel.js +53 -0
  140. package/dist/components/media/LobbyWaitingList.js +91 -0
  141. package/dist/components/media/MediaSoupHelper.js +223 -0
  142. package/dist/components/media/Recorder.js +235 -0
  143. package/dist/components/media/SideBarContent.css +54 -0
  144. package/dist/components/media/SideBarContent.js +46 -0
  145. package/dist/components/media/SocketRequest.js +20 -0
  146. package/dist/components/media/SocketResponse.js +16 -0
  147. package/dist/components/media/Timer.css +30 -0
  148. package/dist/components/media/Timer.js +88 -0
  149. package/dist/components/media/Toolbar.css +35 -0
  150. package/dist/components/media/Toolbar.js +494 -0
  151. package/dist/components/media/Tracks.js +39 -0
  152. package/dist/components/media/TrainingRoom.js +608 -0
  153. package/dist/components/media/Transports.js +35 -0
  154. package/dist/components/media/VCEventManager.js +74 -0
  155. package/dist/components/media/VCEventType.js +164 -0
  156. package/dist/components/media/VCParticipantList.css +72 -0
  157. package/dist/components/media/VCParticipantList.js +56 -0
  158. package/dist/components/media/VCParticipantListItem.css +73 -0
  159. package/dist/components/media/VCParticipantListItem.js +319 -0
  160. package/dist/components/media/VCRoom.css +42 -0
  161. package/dist/components/media/VCRoom.js +90 -0
  162. package/dist/components/media/VCRoomParticipant.css +25 -0
  163. package/dist/components/media/VCRoomParticipant.js +808 -0
  164. package/dist/components/media/VCRoomRecorder.js +223 -0
  165. package/dist/components/media/VCRoomWorkspace.css +86 -0
  166. package/dist/components/media/VCRoomWorkspace.js +666 -0
  167. package/dist/components/media/Video.css +4 -0
  168. package/dist/components/media/Video.js +131 -0
  169. package/dist/components/media/VideoPlayer.css +10 -0
  170. package/dist/components/media/VideoPlayer.js +86 -0
  171. package/dist/components/media/chat/ChatRoom.js +926 -0
  172. package/dist/components/media/chat/ChatRoomItem.js +83 -0
  173. package/dist/components/media/chat/ChatRoomList.js +78 -0
  174. package/dist/components/media/chat/ChatRooms.scss +567 -0
  175. package/dist/components/menu/CollapsibleMenu.js +2 -19
  176. package/dist/components/menu/MenuBars.js +6 -33
  177. package/dist/components/menu/MenuButton.js +27 -39
  178. package/dist/components/menu/MenuItem.js +3 -20
  179. package/dist/components/menu/MenuLink.js +22 -13
  180. package/dist/components/navbars/AuthNavbar.js +5 -18
  181. package/dist/components/navbars/HomeNavbar.js +5 -7
  182. package/dist/components/navbars/PortalNavbar.js +7 -25
  183. package/dist/components/signatures/AgilitySignaturePanel.js +38 -104
  184. package/dist/components/signatures/AlertItem.js +3 -24
  185. package/dist/components/signatures/DocumentContainer.js +47 -134
  186. package/dist/components/signatures/ImageSignatureInput.js +11 -38
  187. package/dist/components/signatures/MenuButton.js +1 -16
  188. package/dist/components/signatures/Prompt.js +3 -24
  189. package/dist/components/signatures/ResponsiveTable.js +42 -83
  190. package/dist/components/signatures/SearchView.js +13 -50
  191. package/dist/components/signatures/SignatorySearch.js +83 -99
  192. package/dist/components/signatures/SignatorySearchForm.js +11 -17
  193. package/dist/components/signatures/SignatureInput.js +18 -47
  194. package/dist/components/signatures/SignatureInputProps.js +18 -60
  195. package/dist/components/signatures/SignatureTemplateDesigner.js +151 -239
  196. package/dist/components/signatures/Toolbar.js +7 -34
  197. package/dist/components/signatures/ViewUtils.js +2 -6
  198. package/dist/components/typography/Danger.js +3 -1
  199. package/dist/components/typography/Info.js +3 -1
  200. package/dist/components/typography/Link.js +6 -2
  201. package/dist/event/ActionHandlers.js +6 -6
  202. package/dist/event/EventType.js +7 -1
  203. package/dist/event/LoadDataActionHandler.js +1 -1
  204. package/dist/event/Observable.js +80 -174
  205. package/dist/event/RouteActionHandler.js +74 -31
  206. package/dist/event/ServiceCallActionHandler.js +36 -24
  207. package/dist/event/SignalGraphActionHandler.js +2 -2
  208. package/dist/js/Addresses.js +10 -8
  209. package/dist/js/Calendar.js +220 -0
  210. package/dist/js/Media.js +157 -0
  211. package/dist/redux/store/ConfigureStore.js +3 -9
  212. package/dist/redux/store/DashboardStore.js +42 -94
  213. package/dist/redux/store/SecurityStore.js +15 -50
  214. package/dist/view/Dashboard.js +256 -171
  215. package/dist/view/Views.js +30 -0
  216. package/dist/view/security/ChangePasswordBasic.js +29 -80
  217. package/dist/view/security/ForgotPassword.js +13 -46
  218. package/dist/view/security/ForgotPasswordBasic.js +12 -45
  219. package/dist/view/security/Login.js +15 -51
  220. package/dist/view/security/LoginBasic.js +13 -46
  221. package/dist/view/security/LoginBusinessPortal.js +12 -45
  222. package/dist/view/security/ResetPassword.js +13 -51
  223. package/dist/view/security/ResetPasswordBasic.js +27 -75
  224. package/dist/view/security/Security.js +1 -0
  225. package/package.json +31 -25
  226. package/README.md +0 -1623
  227. package/dist/components/dashboard/BasicApp.js +0 -140
  228. package/dist/components/navbars/NavbarLinks.js +0 -212
  229. package/dist/components/signatures/OLD.js +0 -1138
  230. package/gulpfile.js +0 -77
@@ -0,0 +1,808 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.VIDEO_ENCODINGS = exports.VIDEO_CONSTRAINTS = exports.VIDEO_CODEC_OPTIONS = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ require("./VCRoomParticipant.css");
11
+
12
+ var _Utils = _interopRequireDefault(require("../../Utils"));
13
+
14
+ var _VCEventType = require("./VCEventType");
15
+
16
+ var _VCEventManager = _interopRequireDefault(require("./VCEventManager"));
17
+
18
+ var _Recorder = _interopRequireDefault(require("./Recorder"));
19
+
20
+ var _MediaSoupHelper = _interopRequireDefault(require("./MediaSoupHelper"));
21
+
22
+ var _Tracks = _interopRequireDefault(require("./Tracks"));
23
+
24
+ var _IconButton = _interopRequireDefault(require("@material-ui/core/IconButton"));
25
+
26
+ var _Icon = _interopRequireDefault(require("../Icon"));
27
+
28
+ var _icons = require("@material-ui/icons");
29
+
30
+ var _Tooltip = _interopRequireDefault(require("@material-ui/core/Tooltip"));
31
+
32
+ var _core = require("@material-ui/core");
33
+
34
+ var _SocketManager = _interopRequireDefault(require("../SocketManager"));
35
+
36
+ var _Button = _interopRequireDefault(require("@material-ui/core/Button"));
37
+
38
+ var _ApplicationManager = _interopRequireDefault(require("../../ApplicationManager"));
39
+
40
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
41
+
42
+ function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
43
+
44
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
45
+
46
+ /* eslint-disable react-hooks/exhaustive-deps */
47
+ const VIDEO_CODEC_OPTIONS = {
48
+ videoGoogleStartBitrate: 1000
49
+ };
50
+ exports.VIDEO_CODEC_OPTIONS = VIDEO_CODEC_OPTIONS;
51
+ const VIDEO_CONSTRAINTS = {
52
+ audio: false,
53
+ video: {
54
+ width: {
55
+ min: 640,
56
+ ideal: 1920
57
+ },
58
+ height: {
59
+ min: 400,
60
+ ideal: 1080
61
+ }
62
+ }
63
+ };
64
+ exports.VIDEO_CONSTRAINTS = VIDEO_CONSTRAINTS;
65
+ const VIDEO_ENCODINGS = [{
66
+ rid: 'r0',
67
+ maxBitrate: 20000,
68
+ //scaleResolutionDownBy: 10.0,
69
+ scalabilityMode: 'S1T3'
70
+ }, {
71
+ rid: 'r1',
72
+ maxBitrate: 150000,
73
+ scalabilityMode: 'S1T3'
74
+ }, {
75
+ rid: 'r2',
76
+ maxBitrate: 450000,
77
+ scalabilityMode: 'S1T3'
78
+ }];
79
+ exports.VIDEO_ENCODINGS = VIDEO_ENCODINGS;
80
+ const location = window.location.protocol + '//' + window.location.hostname;
81
+
82
+ const VCRoomParticipant = props => {
83
+ const [handRaised, setHandRaised] = _react.default.useState(false);
84
+
85
+ const [videoMuted, setVideoMuted] = _react.default.useState(props.videoMuted);
86
+
87
+ const [audioMuted, setAudioMuted] = _react.default.useState(props.audioMuted);
88
+
89
+ const [producerTransport, setProducerTransport] = _react.default.useState(props.producerTransport);
90
+
91
+ const [videoRefresher, setVideoRefresher] = _react.default.useState(false);
92
+
93
+ const [producers] = _react.default.useState(new Map());
94
+
95
+ const [failedProducersDueToNullTransport] = _react.default.useState([]);
96
+
97
+ const [audioDevices, setAudioDevices] = _react.default.useState([]);
98
+
99
+ const [selectedAudioDevice, setSelectedAudioDevice] = _react.default.useState(null);
100
+
101
+ const [consumers] = _react.default.useState(new Map());
102
+
103
+ const [soundLevel, setSoundLevel] = _react.default.useState(0);
104
+
105
+ const [eventHandler] = (0, _react.useState)({});
106
+ const videoRef = (0, _react.useRef)();
107
+ const videoStream = (0, _react.useRef)();
108
+ const audioRef = (0, _react.useRef)();
109
+ const tracks = (0, _react.useRef)(new _Tracks.default());
110
+ const soundLevelCounter = (0, _react.useRef)(0);
111
+ const showVideo = true;
112
+ const {
113
+ consumerTransport,
114
+ device
115
+ } = props;
116
+ const {
117
+ numberOfInViewParticipants
118
+ } = props;
119
+ const [anchorEl, setAnchorEl] = (0, _react.useState)(null);
120
+ const openMoreActions = Boolean(anchorEl);
121
+ const [downloadUrl, setDownloadUrl] = (0, _react.useState)(null);
122
+
123
+ const handler = () => {
124
+ return {
125
+ get id() {
126
+ return 'meeting-participant-' + props.data.userId;
127
+ },
128
+
129
+ on: (eventType, be) => {
130
+ switch (eventType) {
131
+ case _VCEventType.VCEventType.AUDIO_VISUAL_SETTINGS_CHANGED:
132
+ onAVSettingsChange(be.payload ? be.payload : be);
133
+ break;
134
+
135
+ case _VCEventType.VCEventType.RAISE_HAND:
136
+ onRaiseHand(be.payload);
137
+ break;
138
+
139
+ case _VCEventType.VCEventType.LOWER_HAND:
140
+ onLowerHand(be.payload);
141
+ break;
142
+
143
+ case _VCEventType.VCEventType.NEW_PRODUCERS:
144
+ onNewProducers(be.payload);
145
+ break;
146
+
147
+ case _VCEventType.VCEventType.CONSUMER_CLOSED:
148
+ if (consumers.has(be.payload.consumerId)) {
149
+ removeConsumer(be.payload.consumerId, be.payload.kind);
150
+ }
151
+
152
+ break;
153
+ }
154
+ }
155
+ };
156
+ };
157
+
158
+ const handleClickDevicesIcon = event => {
159
+ setAnchorEl(event.currentTarget);
160
+ };
161
+
162
+ const changeAudioDevice = device => {
163
+ setSelectedAudioDevice(device);
164
+ };
165
+
166
+ const onRaiseHand = payload => {
167
+ if (payload && payload.userId === props.data.userId) {
168
+ setHandRaised(true);
169
+ props.data.handRaised = true;
170
+ }
171
+ };
172
+
173
+ const onLowerHand = payload => {
174
+ if (payload && payload.userId === props.data.userId) {
175
+ setHandRaised(false);
176
+ props.data.handRaised = false;
177
+ }
178
+ };
179
+
180
+ (0, _react.useEffect)(() => {
181
+ eventHandler.api = handler();
182
+ });
183
+ (0, _react.useEffect)(() => {
184
+ if (videoRef.current && videoStream.current) {
185
+ videoRef.current.srcObject = videoStream.current;
186
+ }
187
+ }, [videoRef.current]);
188
+ (0, _react.useEffect)(() => {
189
+ if (props.soundMonitor && !props.inView) {
190
+ if (soundLevel > 3) {
191
+ soundLevelCounter.current = 10;
192
+ } else if (soundLevelCounter.current > 0) {
193
+ soundLevelCounter.current--;
194
+ }
195
+
196
+ props.soundMonitor(props.data.userId, soundLevelCounter.current === 0 || audioMuted);
197
+ }
198
+ }, [soundLevel]);
199
+ (0, _react.useEffect)(() => {
200
+ if (audioMuted) {
201
+ setSoundLevel(0);
202
+
203
+ if (props.soundMonitor && !props.inView) {
204
+ props.soundMonitor(props.data.userId, true);
205
+ }
206
+ }
207
+ }, [audioMuted]);
208
+
209
+ const handleCloseDeviceMenu = () => {
210
+ setAnchorEl(null);
211
+ };
212
+
213
+ const onAVSettingsChange = payload => {
214
+ if (props.data.userId === payload.userId) {
215
+ if (props.isCurrentUser) {
216
+ if (payload.audioMuted) {
217
+ stopProducing('audio');
218
+ } else {
219
+ if (device) {
220
+ produce('audio');
221
+ }
222
+ }
223
+
224
+ if (payload.videoMuted) {
225
+ stopProducing('video');
226
+ } else {
227
+ if (device) {
228
+ produce('video');
229
+ }
230
+ }
231
+ }
232
+
233
+ setAudioMuted(payload.audioMuted);
234
+ setVideoMuted(payload.videoMuted);
235
+ } else if (props.isCurrentUser) {}
236
+ };
237
+
238
+ (0, _react.useEffect)(() => {
239
+ if (props.data && !_Utils.default.isNull(props.data.avatarId) && props.data.avatarId !== 'undefined' && props.data.avatarId !== 'null') {
240
+ setDownloadUrl(location + _ApplicationManager.default.getContextRoot() + '/docs/api/v1/manager/download/' + props.data.avatarId + '?access_token=' + sessionStorage.getItem('accessToken') + '&idToken=' + sessionStorage.getItem('idToken'));
241
+ }
242
+ }, [props.data]);
243
+ (0, _react.useEffect)(() => {
244
+ setAudioMuted(props.audioMuted);
245
+ }, [props.audioMuted]);
246
+ (0, _react.useEffect)(() => {
247
+ setVideoMuted(props.videoMuted);
248
+ }, [props.videoMuted]);
249
+ (0, _react.useEffect)(() => {
250
+ if (producerTransport) {
251
+ if (props.videoMuted) {
252
+ stopProducing('video');
253
+ } else {
254
+ produce('video');
255
+ }
256
+
257
+ if (props.audioMuted) {
258
+ stopProducing('audio');
259
+ } else {
260
+ produce('audio');
261
+ }
262
+ }
263
+ }, [producerTransport]);
264
+ (0, _react.useEffect)(() => {
265
+ setProducerTransport(props.producerTransport);
266
+ }, [props.producerTransport]);
267
+ (0, _react.useEffect)(() => {
268
+ if (props.isCurrentUser) {
269
+ props.onAudioDeviceChange(selectedAudioDevice);
270
+ stopProducing('audio', () => {
271
+ if (selectedAudioDevice) {
272
+ if (!producerTransport) {
273
+ createProducerTransport();
274
+ } else if (!audioMuted) {
275
+ produce('audio');
276
+ }
277
+ }
278
+ });
279
+ }
280
+ }, [selectedAudioDevice]);
281
+ (0, _react.useEffect)(() => {
282
+ if (consumerTransport) {
283
+ console.log('TRANSI ARRIVED WITH PRODUCERS : ', props.data.producers);
284
+
285
+ if (props.data.producers) {
286
+ onNewProducers(props.data.producers, true);
287
+ }
288
+
289
+ onNewProducers(failedProducersDueToNullTransport, true);
290
+ failedProducersDueToNullTransport.splice(0, failedProducersDueToNullTransport.length);
291
+
292
+ if (producers) {
293
+ console.log('RE-INSTATING CONSUMERS');
294
+
295
+ for (let [key, value] of producers) {
296
+ console.log('PROCESSING PRODUCER OF TYPE : ' + key + ' : ' + value.id);
297
+
298
+ if (!(props.data.producers && (void 0).props.data.producers.find(p => p.producerId === value.id))) {
299
+ consume(value.id, key, true, value.userId);
300
+ } else {
301
+ console.log('PRODUCER ALREADY PROCESSED');
302
+ }
303
+ }
304
+ }
305
+ }
306
+ }, [consumerTransport]);
307
+
308
+ const createProducerTransport = async () => {
309
+ setProducerTransport(await _MediaSoupHelper.default.initProducerTransport(props.device, props.meetingId, sessionStorage.getItem('username')));
310
+ };
311
+
312
+ const handleDevicesChanged = devices => {
313
+ let audioDeviceList = [];
314
+ devices.forEach(device => {
315
+ if ('audioinput' === device.kind) {
316
+ audioDeviceList.push({
317
+ id: device.deviceId,
318
+ label: device.label
319
+ });
320
+ }
321
+ });
322
+ setAudioDevices(audioDeviceList);
323
+
324
+ if (audioDeviceList.length > 0) {
325
+ setSelectedAudioDevice(audioDeviceList[0]);
326
+ } else {
327
+ setSelectedAudioDevice(null);
328
+ }
329
+ };
330
+
331
+ (0, _react.useEffect)(() => {
332
+ _VCEventManager.default.removeSubscriptions(eventHandler);
333
+
334
+ _VCEventManager.default.addSubscriptions(eventHandler, _VCEventType.VCEventType.AUDIO_VISUAL_SETTINGS_CHANGED, _VCEventType.VCEventType.RAISE_HAND, _VCEventType.VCEventType.LOWER_HAND, _VCEventType.VCEventType.NEW_PRODUCERS, _VCEventType.VCEventType.CONSUMER_CLOSED);
335
+
336
+ if (props.isCurrentUser) {
337
+ navigator.mediaDevices.ondevicechange = () => {
338
+ navigator.mediaDevices.enumerateDevices().then(devices => {
339
+ handleDevicesChanged(devices);
340
+ });
341
+ };
342
+
343
+ navigator.mediaDevices.enumerateDevices().then(devices => {
344
+ handleDevicesChanged(devices);
345
+ });
346
+ }
347
+
348
+ return () => {
349
+ console.log('======================DESTROYING PARTICIPANT========================= : ' + props.data.userId);
350
+
351
+ if (props.isCurrentUser) {
352
+ stopProducing('audio');
353
+ stopProducing('video');
354
+ }
355
+
356
+ for (let [key, value] of consumers) {
357
+ removeConsumer(key, 'video');
358
+ }
359
+
360
+ _VCEventManager.default.removeSubscriptions(eventHandler);
361
+ };
362
+ }, []);
363
+
364
+ const produce = async type => {
365
+ if (!device) {
366
+ console.error('No available device');
367
+ return;
368
+ }
369
+
370
+ if (!device.canProduce('video') && type === 'video') {
371
+ console.error('Cannot produce video');
372
+ return;
373
+ }
374
+
375
+ if (!selectedAudioDevice && type === 'audio') {
376
+ console.error('No audio device selected');
377
+ return;
378
+ }
379
+
380
+ if (producers.has(type)) {
381
+ console.log('Producer already exists for this type ' + type);
382
+ return;
383
+ }
384
+
385
+ let mediaConstraints;
386
+
387
+ switch (type) {
388
+ case 'audio':
389
+ mediaConstraints = {
390
+ deviceId: selectedAudioDevice.id,
391
+ audio: true,
392
+ video: false
393
+ };
394
+ break;
395
+
396
+ case 'video':
397
+ mediaConstraints = VIDEO_CONSTRAINTS;
398
+ break;
399
+
400
+ default:
401
+ return;
402
+ }
403
+
404
+ let stream = await navigator.mediaDevices.getUserMedia(mediaConstraints);
405
+ const track = type === 'audio' ? stream.getAudioTracks()[0] : stream.getVideoTracks()[0];
406
+ const params = {
407
+ track
408
+ };
409
+ audioRef.current = stream;
410
+
411
+ if (props.isHost && type === 'audio') {
412
+ _Recorder.default.addTrack(props.data.userId, track);
413
+
414
+ tracks.current.setAudioTrack(track);
415
+ }
416
+
417
+ if (type === 'video') {
418
+ params.encodings = VIDEO_ENCODINGS;
419
+ params.codecOptions = VIDEO_CODEC_OPTIONS;
420
+ tracks.current.setVideoTrack(track);
421
+ }
422
+
423
+ let producer = await producerTransport.produce(params);
424
+ producerTransport.getStats().then(data => console.log(data));
425
+ producers.set(type, producer);
426
+
427
+ if (type === 'video') {
428
+ videoRef.current.srcObject = stream;
429
+ videoStream.current = stream;
430
+ setVideoRefresher(!videoRefresher);
431
+ console.log(stream);
432
+ }
433
+
434
+ producer.on('transportclose', () => {
435
+ stream.srcObject.getTracks().forEach(function (track) {
436
+ track.stop();
437
+ });
438
+ producers.delete(type);
439
+ });
440
+ producer.on('close', () => {
441
+ stream.srcObject.getTracks().forEach(function (track) {
442
+ track.stop();
443
+ });
444
+ producers.delete(type);
445
+ });
446
+ };
447
+
448
+ const stopProducing = (type, callback) => {
449
+ if (!producers.has(type)) {
450
+ console.log('There is no producer for this type ' + type);
451
+ return;
452
+ }
453
+
454
+ let producerId = producers.get(type).id;
455
+ console.log('Close producer', producerId);
456
+ producers.get(type).close();
457
+ producers.delete(type);
458
+
459
+ if (type === 'video') {
460
+ tracks.current.stopVideoTrack();
461
+ }
462
+
463
+ if (type === 'audio') {
464
+ tracks.current.stopAudioTrack();
465
+ }
466
+
467
+ if (callback) {
468
+ callback();
469
+ }
470
+
471
+ console.log('CLOSING PRODUCER OF ID : ' + producerId);
472
+
473
+ _SocketManager.default.emitEvent(_VCEventType.VCEventType.PRODUCER_CLOSED, {
474
+ userId: props.data.userId,
475
+ producerId,
476
+ roomId: props.meetingId
477
+ }).then(data => {}).catch(e => console.log('PRODUCER_CLOSED ERROR : ', e));
478
+ };
479
+
480
+ const onNewProducers = (producers, loading = false) => {
481
+ for (const producer of producers) {
482
+ if (consumerTransport) {
483
+ if (producer.userId === props.data.userId) {
484
+ if (producer.kind === 'video' && !producer.screenSharing) {
485
+ console.log('CALLING CONSUME FROM ON NEW PRODUCERS FOR : ' + props.data.userId + ' - ' + producer.producerId);
486
+ consume(producer.producerId, producer.kind, loading, producer.userId);
487
+ }
488
+ }
489
+
490
+ if (props.isCurrentUser || loading) {
491
+ // The small participant box at the bottom belonging to the current user must consume all audio
492
+ // This is because we do not want to disturb the audio due to any rendering such as Bring to view
493
+ if (producer.kind === 'audio') {
494
+ consume(producer.producerId, producer.kind, loading, producer.userId);
495
+ }
496
+ }
497
+ } else {
498
+ failedProducersDueToNullTransport.push(producer);
499
+ }
500
+ }
501
+ };
502
+
503
+ const removeConsumer = (consumerId, kind, userId) => {
504
+ if (kind === 'video') {
505
+ if (videoStream.current) {
506
+ if (videoStream.current) {
507
+ videoStream.current.getTracks().forEach(function (track) {
508
+ track.stop();
509
+ });
510
+ }
511
+ }
512
+ } else if (kind === 'audio') {
513
+ let audioElement = document.getElementById(consumerId);
514
+
515
+ if (audioElement && audioElement.srcObject) {
516
+ audioElement.srcObject.getTracks().forEach(function (track) {
517
+ track.stop();
518
+ });
519
+
520
+ if (userId && _Recorder.default) {
521
+ _Recorder.default.removeTrack(userId);
522
+ }
523
+
524
+ let elementById = document.getElementById(props.data.userId + '-audio-el-container');
525
+
526
+ if (elementById) {
527
+ elementById.removeChild(audioElement);
528
+ }
529
+ }
530
+ }
531
+
532
+ consumers.delete(consumerId);
533
+ };
534
+
535
+ const consume = async (producerId, kind, loading, userId) => {
536
+ _MediaSoupHelper.default.getConsumeStream(producerId, device.rtpCapabilities, consumerTransport, props.meetingId, sessionStorage.getItem('username'), kind).then(({
537
+ consumer,
538
+ stream,
539
+ kind
540
+ }) => {
541
+ if (consumer) {
542
+ consumers.set(consumer.id, consumer);
543
+ console.log('=====================================CONSUME===================================== : ' + kind + ' FOR : ' + userId);
544
+
545
+ if (kind === 'video') {
546
+ if (videoRef.current) {
547
+ videoRef.current.srcObject = stream;
548
+ }
549
+
550
+ videoStream.current = stream;
551
+ setVideoMuted(false);
552
+ setVideoRefresher(!videoRefresher);
553
+ tracks.current.setVideoTrack(stream.getVideoTracks()[0]);
554
+ } else {
555
+ if (props.isCurrentUser || loading) {
556
+ let audioElement = document.createElement('audio');
557
+ audioElement.srcObject = stream;
558
+ audioElement.id = consumer.id;
559
+ audioElement.playsinline = false;
560
+ audioElement.autoplay = true;
561
+ document.getElementById('meeting-audio-el-container').appendChild(audioElement);
562
+
563
+ if (props.isHost) {
564
+ _Recorder.default.addTrack(userId, stream.getAudioTracks()[0]);
565
+ }
566
+ }
567
+ }
568
+
569
+ consumer.on('trackended', () => {
570
+ removeConsumer(consumer.id, kind, userId);
571
+ });
572
+ consumer.on('transportclose', () => {
573
+ removeConsumer(consumer.id, kind, userId);
574
+ });
575
+ }
576
+ });
577
+ };
578
+
579
+ const getParticipantName = () => {
580
+ let name = props.data.name;
581
+
582
+ if (_Utils.default.isNull(props.data.userId)) {
583
+ name = "".concat(name, " (Guest)");
584
+ }
585
+
586
+ return name;
587
+ };
588
+
589
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
590
+ className: 'col-*-* meeting-participant-container',
591
+ style: {
592
+ padding: props.padding ? props.padding : null,
593
+ height: props.height ? props.height : null,
594
+ position: 'relative',
595
+ minWidth: '150px',
596
+ minHeight: '150px'
597
+ }
598
+ }, /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, (videoMuted || !videoRef.current || !videoRef.current.srcObject) && /*#__PURE__*/_react.default.createElement("div", {
599
+ className: 'centered-flex-box',
600
+ style: {
601
+ width: '100%',
602
+ height: '100%',
603
+ marginBottom: props.sizing === 'sm' ? '8px' : 0
604
+ }
605
+ }, /*#__PURE__*/_react.default.createElement("div", {
606
+ className: props.sizing === 'sm' ? 'avatar-wrapper-sm' : 'avatar-wrapper',
607
+ style: {
608
+ width: (props.sizing === 'sm' ? 72 : 112) + soundLevel / 10 + 'px',
609
+ height: (props.sizing === 'sm' ? 72 : 112) + soundLevel / 10 + 'px',
610
+ border: !audioMuted && soundLevel > 3 ? (props.sizing === 'sm' ? 2 : 4) + 'px solid #00476a' : 'none',
611
+ backgroundColor: '#e9e9e9'
612
+ }
613
+ }, /*#__PURE__*/_react.default.createElement("div", {
614
+ className: props.sizing === 'md' ? 'avatar avatar-md' : props.sizing === 'sm' ? 'avatar avatar-sm' : 'avatar',
615
+ style: {
616
+ fontSize: props.sizing === 'sm' ? '20px' : null
617
+ }
618
+ }), downloadUrl ? /*#__PURE__*/_react.default.createElement("div", {
619
+ style: {
620
+ width: '100%',
621
+ height: '100%',
622
+ backgroundRepeat: 'no-repeat',
623
+ backgroundSize: 'cover',
624
+ backgroundPosition: 'center',
625
+ borderRadius: '50%',
626
+ backgroundColor: 'transparent',
627
+ backgroundImage: "url(".concat(downloadUrl, ")")
628
+ }
629
+ }) : _Utils.default.getInitials(props.data.name))), /*#__PURE__*/_react.default.createElement("video", {
630
+ id: props.data.userId + '-video',
631
+ width: 640,
632
+ height: 320,
633
+ autoPlay: true,
634
+ ref: videoRef,
635
+ muted: true,
636
+ style: {
637
+ width: '100%',
638
+ height: '100%',
639
+ zIndex: '0',
640
+ display: videoMuted || !videoRef.current || !videoRef.current.srcObject ? 'none' : null
641
+ }
642
+ }),
643
+ /*We need this element to capture recording sound*/
644
+ props.isHost && /*#__PURE__*/_react.default.createElement("audio", {
645
+ id: props.data.userId + '-audio',
646
+ autoPlay: true,
647
+ ref: audioRef,
648
+ muted: true,
649
+ style: {
650
+ display: 'none'
651
+ }
652
+ }), /*#__PURE__*/_react.default.createElement("div", {
653
+ className: props.sizing === 'sm' ? 'name-label-sm' : 'name-label',
654
+ style: {
655
+ position: 'absolute',
656
+ bottom: '0',
657
+ padding: props.isCurrentUser ? '4px 16px' : props.sizing !== 'sm' ? '16px' : '4px'
658
+ }
659
+ }, !props.isCurrentUser && getParticipantName(), !props.isCurrentUser && /*#__PURE__*/_react.default.createElement("span", {
660
+ style: {
661
+ marginLeft: '4px'
662
+ }
663
+ }, props.isHost && !audioMuted ? /*#__PURE__*/_react.default.createElement(_IconButton.default, {
664
+ onClick: e => {
665
+ props.onHostAudioMute(props.data);
666
+ },
667
+ style: {
668
+ marginRight: '4px',
669
+ width: '16px',
670
+ height: '16px',
671
+ color: 'rgb(40, 40, 43)'
672
+ }
673
+ }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
674
+ id: 'MIC'
675
+ })) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, audioMuted ? /*#__PURE__*/_react.default.createElement(_Icon.default, {
676
+ id: 'MIC_OFF'
677
+ }) : /*#__PURE__*/_react.default.createElement(_Icon.default, {
678
+ id: 'MIC'
679
+ })), props.data.inView && numberOfInViewParticipants > 1 && /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
680
+ title: "Remove from view"
681
+ }, /*#__PURE__*/_react.default.createElement(_IconButton.default, {
682
+ onClick: e => {
683
+ stopProducing('video');
684
+ props.onRemoveFromView(props.data);
685
+ },
686
+ style: {
687
+ marginRight: '4px',
688
+ width: '16px',
689
+ height: '16px',
690
+ color: 'white'
691
+ }
692
+ }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
693
+ id: 'CLOSE'
694
+ }))), props.isHost && !videoMuted && /*#__PURE__*/_react.default.createElement(_IconButton.default, {
695
+ onClick: e => {
696
+ props.onHostVideoMute(props.data);
697
+ },
698
+ style: {
699
+ marginRight: '4px',
700
+ width: '16px',
701
+ height: '16px',
702
+ color: 'white'
703
+ }
704
+ }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
705
+ id: 'CAMERA'
706
+ }))), props.isCurrentUser && /*#__PURE__*/_react.default.createElement("div", {
707
+ className: 'row',
708
+ style: {
709
+ width: '216px'
710
+ }
711
+ }, /*#__PURE__*/_react.default.createElement("div", {
712
+ className: 'col no-margin no-padding',
713
+ style: {
714
+ textAlign: 'left'
715
+ }
716
+ }, /*#__PURE__*/_react.default.createElement("span", {
717
+ style: {
718
+ marginLeft: '4px'
719
+ }
720
+ }, "You")), /*#__PURE__*/_react.default.createElement("div", {
721
+ className: 'col no-margin no-padding',
722
+ style: {
723
+ display: 'flex',
724
+ justifyContent: 'flex-end'
725
+ }
726
+ }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
727
+ title: "My devices"
728
+ }, /*#__PURE__*/_react.default.createElement(_IconButton.default, {
729
+ onClick: handleClickDevicesIcon,
730
+ sx: {
731
+ ml: 1
732
+ },
733
+ "aria-controls": openMoreActions ? 'device-menu' : undefined,
734
+ "aria-haspopup": "true",
735
+ "aria-expanded": openMoreActions ? 'true' : undefined,
736
+ style: {
737
+ color: '#198754',
738
+ height: '8px'
739
+ }
740
+ }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
741
+ id: 'MIC'
742
+ }))))))), !props.isCurrentUser && /*#__PURE__*/_react.default.createElement("span", {
743
+ style: {
744
+ marginLeft: '4px'
745
+ }
746
+ }, handRaised && /*#__PURE__*/_react.default.createElement(_icons.PanTool, {
747
+ fontSize: 'small',
748
+ style: {
749
+ color: '#e2b030'
750
+ }
751
+ }))), props.isCurrentUser && /*#__PURE__*/_react.default.createElement("div", {
752
+ id: 'meeting-audio-el-container'
753
+ }))), /*#__PURE__*/_react.default.createElement(_core.Menu, {
754
+ anchorEl: anchorEl,
755
+ id: "devices-menu",
756
+ open: openMoreActions,
757
+ onClose: handleCloseDeviceMenu,
758
+ onClick: handleCloseDeviceMenu,
759
+ PaperProps: {
760
+ elevation: 0,
761
+ sx: {
762
+ overflow: 'visible',
763
+ filter: 'drop-shadow(0px 2px 8px rgba(0,0,0,0.32))',
764
+ mt: 1.5,
765
+ '& .MuiList-root': {
766
+ border: '1px solid red'
767
+ },
768
+ '& .MuiAvatar-root': {
769
+ width: 32,
770
+ height: 32,
771
+ ml: -0.5,
772
+ mr: 1
773
+ },
774
+ '&:before': {
775
+ content: '""',
776
+ display: 'block',
777
+ position: 'absolute',
778
+ top: 0,
779
+ right: 14,
780
+ width: 10,
781
+ height: 10,
782
+ bgcolor: 'primary',
783
+ transform: 'translateY(-50%) rotate(45deg)',
784
+ zIndex: 0
785
+ }
786
+ }
787
+ },
788
+ transformOrigin: {
789
+ horizontal: 20,
790
+ vertical: 136
791
+ },
792
+ anchorOrigin: {
793
+ horizontal: 'right',
794
+ vertical: 'top'
795
+ }
796
+ }, audioDevices.map((device, index) => {
797
+ return /*#__PURE__*/_react.default.createElement(_core.MenuItem, {
798
+ onClick: () => changeAudioDevice(device)
799
+ }, /*#__PURE__*/_react.default.createElement("span", {
800
+ style: {
801
+ color: selectedAudioDevice && selectedAudioDevice.id === device.id ? '#198754' : null
802
+ }
803
+ }, device.label));
804
+ })));
805
+ };
806
+
807
+ var _default = VCRoomParticipant;
808
+ exports.default = _default;