@agilemotion/oui-react-js 1.3.8 → 1.3.9

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 (213) hide show
  1. package/README.TXT +1 -0
  2. package/dist/ApplicationContext.js +161 -284
  3. package/dist/BasicApp.js +1 -1
  4. package/dist/BasicAppHome.js +17 -4
  5. package/dist/BusinessPortalApp.js +1 -1
  6. package/dist/BusinessPortalAppHome.js +10 -39
  7. package/dist/DynamicJS.js +20 -52
  8. package/dist/RestUtils.js +83 -108
  9. package/dist/Utils.js +36 -30
  10. package/dist/assets/jss/components/authNavbarStyle.js +34 -35
  11. package/dist/assets/jss/components/cardHeaderStyle.js +12 -12
  12. package/dist/assets/jss/components/customDropdownStyle.js +26 -26
  13. package/dist/assets/jss/components/customInputStyle.js +2 -8
  14. package/dist/assets/jss/components/dropdownStyle.js +10 -15
  15. package/dist/assets/jss/components/footerStyle.js +12 -18
  16. package/dist/assets/jss/components/headerLinksStyle.js +7 -13
  17. package/dist/assets/jss/components/headerStyle.js +24 -25
  18. package/dist/assets/jss/components/navbarLinksStyle.js +7 -13
  19. package/dist/assets/jss/components/navbarStyle.js +24 -25
  20. package/dist/assets/jss/components/sidebarStyle.js +41 -43
  21. package/dist/assets/jss/components/typographyStyle.js +2 -8
  22. package/dist/assets/jss/rootStyle.js +32 -47
  23. package/dist/assets/jss/views/layoutStyle.js +6 -11
  24. package/dist/assets/jss/views/loginStyle.js +4 -10
  25. package/dist/assets/lotties/call-loading.json +1 -0
  26. package/dist/assets/lotties/calling-2.json +1 -0
  27. package/dist/assets/lotties/calling.json +1 -0
  28. package/dist/assets/lotties/calling2.json +1 -0
  29. package/dist/assets/lotties/chat.json +1 -0
  30. package/dist/assets/lotties/join.json +1 -0
  31. package/dist/assets/lotties/loading.json +1 -0
  32. package/dist/assets/lotties/msg2.json +1 -0
  33. package/dist/assets/lotties/recording.json +1 -0
  34. package/dist/assets/lotties/waiting.json +1 -0
  35. package/dist/assets/scss/black-dashboard-react/bootstrap/_card.scss +5 -5
  36. package/dist/assets/scss/black-dashboard-react/bootstrap/_carousel.scss +2 -2
  37. package/dist/assets/scss/black-dashboard-react/bootstrap/_custom-forms.scss +3 -3
  38. package/dist/assets/scss/black-dashboard-react/bootstrap/_functions.scss +1 -1
  39. package/dist/assets/scss/black-dashboard-react/bootstrap/_images.scss +1 -1
  40. package/dist/assets/scss/black-dashboard-react/bootstrap/_jumbotron.scss +1 -1
  41. package/dist/assets/scss/black-dashboard-react/bootstrap/_popover.scss +7 -5
  42. package/dist/assets/scss/black-dashboard-react/bootstrap/_tooltip.scss +4 -4
  43. package/dist/assets/scss/black-dashboard-react/bootstrap/_variables.scss +5 -5
  44. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_grid-framework.scss +2 -2
  45. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_grid.scss +11 -9
  46. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_embed.scss +6 -4
  47. package/dist/assets/scss/black-dashboard-react/custom/_variables.scss +1 -1
  48. package/dist/components/AlertBar.js +39 -80
  49. package/dist/components/AlertItem.js +4 -26
  50. package/dist/components/Button.js +24 -36
  51. package/dist/components/Calendar.js +478 -0
  52. package/dist/components/Calender.css +244 -0
  53. package/dist/components/ConfirmationDialog.js +5 -29
  54. package/dist/components/DataGrid.js +169 -338
  55. package/dist/components/DataGridColumn.js +5 -28
  56. package/dist/components/DataGridFilter.js +46 -114
  57. package/dist/components/DataGridHeading.js +11 -19
  58. package/dist/components/Dialog.js +27 -121
  59. package/dist/components/DocumentViewer.js +8 -34
  60. package/dist/components/DocumentViewerComponent.js +2 -20
  61. package/dist/components/FileThumb.js +115 -0
  62. package/dist/components/Graph.js +25 -75
  63. package/dist/components/GraphNode.js +4 -21
  64. package/dist/components/HtmlPanel.js +59 -78
  65. package/dist/components/Icon.js +99 -1
  66. package/dist/components/LoadingIndicator.js +4 -4
  67. package/dist/components/LottieIcon.js +134 -0
  68. package/dist/components/PopupView.js +2 -20
  69. package/dist/components/RegularButton.js +15 -19
  70. package/dist/components/SignaturePanel.js +9 -40
  71. package/dist/components/SocketManager.js +170 -0
  72. package/dist/components/StepperTitleBar.js +30 -56
  73. package/dist/components/TabPage.js +6 -9
  74. package/dist/components/TabPanel.js +41 -98
  75. package/dist/components/TableCellContent.js +30 -38
  76. package/dist/components/TemplateDesigner.js +107 -151
  77. package/dist/components/TemplateItemEventHandler.js +33 -100
  78. package/dist/components/TemplateTable.js +6 -42
  79. package/dist/components/TitleBar.js +35 -52
  80. package/dist/components/Toolbar.js +33 -179
  81. package/dist/components/Tree.js +27 -64
  82. package/dist/components/card/Card.js +16 -20
  83. package/dist/components/card/CardAvatar.js +9 -13
  84. package/dist/components/card/CardBody.js +13 -17
  85. package/dist/components/card/CardFooter.js +12 -16
  86. package/dist/components/card/CardHeader.js +13 -17
  87. package/dist/components/card/CardIcon.js +6 -10
  88. package/dist/components/card/CardText.js +6 -10
  89. package/dist/components/customInput/CustomInput.js +12 -10
  90. package/dist/components/dashboard/BasicBusinessAppDashboard.js +79 -155
  91. package/dist/components/dashboard/BusinessPortalAppDashboard.js +30 -75
  92. package/dist/components/dashboard/components/Header.js +8 -25
  93. package/dist/components/dashboard/components/LeftDrawer.js +3 -1
  94. package/dist/components/dashboard/components/blackDashboard/fixedPlugin/FixedPlugin.js +1 -1
  95. package/dist/components/dashboard/components/blackDashboard/sidebar/Sidebar.js +138 -30
  96. package/dist/components/footer/Footer.js +6 -18
  97. package/dist/components/form/AddressSearch.js +32 -66
  98. package/dist/components/form/AutoComplete.js +160 -0
  99. package/dist/components/form/BaseField.js +66 -96
  100. package/dist/components/form/DatePicker.js +3 -21
  101. package/dist/components/form/FieldSet.js +158 -180
  102. package/dist/components/form/Form.css +1 -1
  103. package/dist/components/form/Form.js +137 -471
  104. package/dist/components/form/GridField.js +46 -146
  105. package/dist/components/form/IconField.js +35 -0
  106. package/dist/components/form/ImageEditor.js +19 -57
  107. package/dist/components/form/LookupField.js +8 -29
  108. package/dist/components/form/MultiFileUploadField.js +186 -0
  109. package/dist/components/form/RadioGroup.js +1 -16
  110. package/dist/components/form/Section.js +31 -92
  111. package/dist/components/form/SelectItem.js +14 -33
  112. package/dist/components/form/SignatureTemplateDesignerField.js +0 -1
  113. package/dist/components/form/Switch.js +53 -0
  114. package/dist/components/form/TextField.js +10 -17
  115. package/dist/components/form/TimePicker.js +7 -1
  116. package/dist/components/form/TransferList.css +2 -2
  117. package/dist/components/form/TransferList.js +67 -125
  118. package/dist/components/form/UploadField.js +27 -79
  119. package/dist/components/form/fieldset.css +8 -0
  120. package/dist/components/grid/GridContainer.js +5 -9
  121. package/dist/components/grid/GridItem.js +5 -9
  122. package/dist/components/layout/CollapsiblePanel.js +11 -33
  123. package/dist/components/layout/Layout.js +175 -290
  124. package/dist/components/layout/VC.css +17 -0
  125. package/dist/components/layout/View.css +17 -1
  126. package/dist/components/layout/View.js +77 -194
  127. package/dist/components/loader.css +1 -1
  128. package/dist/components/media/ClosablePanel.css +37 -0
  129. package/dist/components/media/ClosablePanel.js +53 -0
  130. package/dist/components/media/LobbyWaitingList.js +91 -0
  131. package/dist/components/media/MediaSoupHelper.js +223 -0
  132. package/dist/components/media/Recorder.js +235 -0
  133. package/dist/components/media/SideBarContent.css +54 -0
  134. package/dist/components/media/SideBarContent.js +46 -0
  135. package/dist/components/media/SocketRequest.js +20 -0
  136. package/dist/components/media/SocketResponse.js +16 -0
  137. package/dist/components/media/Timer.css +30 -0
  138. package/dist/components/media/Timer.js +88 -0
  139. package/dist/components/media/Toolbar.css +20 -0
  140. package/dist/components/media/Toolbar.js +470 -0
  141. package/dist/components/media/Tracks.js +39 -0
  142. package/dist/components/media/TrainingRoom.js +531 -0
  143. package/dist/components/media/Transports.js +35 -0
  144. package/dist/components/media/VCEventManager.js +74 -0
  145. package/dist/components/media/VCEventType.js +164 -0
  146. package/dist/components/media/VCParticipantList.css +72 -0
  147. package/dist/components/media/VCParticipantList.js +56 -0
  148. package/dist/components/media/VCParticipantListItem.css +73 -0
  149. package/dist/components/media/VCParticipantListItem.js +319 -0
  150. package/dist/components/media/VCRoom.css +42 -0
  151. package/dist/components/media/VCRoom.js +90 -0
  152. package/dist/components/media/VCRoomParticipant.css +25 -0
  153. package/dist/components/media/VCRoomParticipant.js +806 -0
  154. package/dist/components/media/VCRoomWorkspace.css +86 -0
  155. package/dist/components/media/VCRoomWorkspace.js +653 -0
  156. package/dist/components/media/Video.css +4 -0
  157. package/dist/components/media/Video.js +131 -0
  158. package/dist/components/media/chat/ChatRoom.js +926 -0
  159. package/dist/components/media/chat/ChatRoomItem.js +83 -0
  160. package/dist/components/media/chat/ChatRoomList.js +78 -0
  161. package/dist/components/media/chat/ChatRooms.scss +567 -0
  162. package/dist/components/menu/CollapsibleMenu.js +2 -19
  163. package/dist/components/menu/MenuBars.js +6 -33
  164. package/dist/components/menu/MenuButton.js +7 -35
  165. package/dist/components/menu/MenuItem.js +3 -20
  166. package/dist/components/menu/MenuLink.js +18 -12
  167. package/dist/components/navbars/AuthNavbar.js +5 -18
  168. package/dist/components/navbars/HomeNavbar.js +3 -5
  169. package/dist/components/navbars/PortalNavbar.js +4 -22
  170. package/dist/components/signatures/AgilitySignaturePanel.js +35 -101
  171. package/dist/components/signatures/AlertItem.js +3 -24
  172. package/dist/components/signatures/DocumentContainer.js +47 -134
  173. package/dist/components/signatures/ImageSignatureInput.js +8 -35
  174. package/dist/components/signatures/MenuButton.js +1 -16
  175. package/dist/components/signatures/Prompt.js +3 -24
  176. package/dist/components/signatures/ResponsiveTable.js +42 -83
  177. package/dist/components/signatures/SearchView.js +13 -50
  178. package/dist/components/signatures/SignatorySearch.js +83 -99
  179. package/dist/components/signatures/SignatorySearchForm.js +11 -17
  180. package/dist/components/signatures/SignatureInput.js +15 -44
  181. package/dist/components/signatures/SignatureInputProps.js +18 -60
  182. package/dist/components/signatures/SignatureTemplateDesigner.js +147 -235
  183. package/dist/components/signatures/Toolbar.js +7 -34
  184. package/dist/components/signatures/ViewUtils.js +2 -6
  185. package/dist/components/typography/Danger.js +3 -1
  186. package/dist/components/typography/Info.js +3 -1
  187. package/dist/components/typography/Link.js +6 -2
  188. package/dist/event/ActionHandlers.js +3 -3
  189. package/dist/event/EventType.js +7 -1
  190. package/dist/event/LoadDataActionHandler.js +1 -1
  191. package/dist/event/Observable.js +56 -168
  192. package/dist/event/RouteActionHandler.js +45 -11
  193. package/dist/event/ServiceCallActionHandler.js +34 -24
  194. package/dist/js/Addresses.js +10 -8
  195. package/dist/js/Media.js +157 -0
  196. package/dist/redux/store/ConfigureStore.js +3 -9
  197. package/dist/redux/store/DashboardStore.js +42 -94
  198. package/dist/redux/store/SecurityStore.js +15 -50
  199. package/dist/view/Dashboard.js +242 -163
  200. package/dist/view/security/ChangePasswordBasic.js +23 -76
  201. package/dist/view/security/ForgotPassword.js +9 -42
  202. package/dist/view/security/ForgotPasswordBasic.js +8 -41
  203. package/dist/view/security/Login.js +11 -47
  204. package/dist/view/security/LoginBasic.js +8 -41
  205. package/dist/view/security/LoginBusinessPortal.js +8 -41
  206. package/dist/view/security/ResetPassword.js +9 -47
  207. package/dist/view/security/ResetPasswordBasic.js +21 -71
  208. package/dist/view/security/Security.js +1 -0
  209. package/package.json +29 -13
  210. package/README.md +0 -1623
  211. package/dist/components/dashboard/BasicApp.js +0 -140
  212. package/dist/components/navbars/NavbarLinks.js +0 -212
  213. package/dist/components/signatures/OLD.js +0 -1138
@@ -0,0 +1,806 @@
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 _ApplicationContext = _interopRequireDefault(require("../../ApplicationContext"));
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 + _ApplicationContext.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("\n\n\n=====================================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
+ }
596
+ }, /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, (videoMuted || !videoRef.current || !videoRef.current.srcObject) && /*#__PURE__*/_react.default.createElement("div", {
597
+ className: 'centered-flex-box',
598
+ style: {
599
+ width: '100%',
600
+ height: '100%',
601
+ marginBottom: props.sizing === 'sm' ? '8px' : 0
602
+ }
603
+ }, /*#__PURE__*/_react.default.createElement("div", {
604
+ className: props.sizing === 'sm' ? 'avatar-wrapper-sm' : 'avatar-wrapper',
605
+ style: {
606
+ width: (props.sizing === 'sm' ? 72 : 112) + soundLevel / 10 + 'px',
607
+ height: (props.sizing === 'sm' ? 72 : 112) + soundLevel / 10 + 'px',
608
+ border: !audioMuted && soundLevel > 3 ? (props.sizing === 'sm' ? 2 : 4) + 'px solid #00476a' : 'none',
609
+ backgroundColor: '#e9e9e9'
610
+ }
611
+ }, /*#__PURE__*/_react.default.createElement("div", {
612
+ className: props.sizing === 'md' ? 'avatar avatar-md' : props.sizing === 'sm' ? 'avatar avatar-sm' : 'avatar',
613
+ style: {
614
+ fontSize: props.sizing === 'sm' ? '20px' : null
615
+ }
616
+ }), downloadUrl ? /*#__PURE__*/_react.default.createElement("div", {
617
+ style: {
618
+ width: '100%',
619
+ height: '100%',
620
+ backgroundRepeat: 'no-repeat',
621
+ backgroundSize: 'cover',
622
+ backgroundPosition: 'center',
623
+ borderRadius: '50%',
624
+ backgroundColor: 'transparent',
625
+ backgroundImage: "url(".concat(downloadUrl, ")")
626
+ }
627
+ }) : _Utils.default.getInitials(props.data.name))), /*#__PURE__*/_react.default.createElement("video", {
628
+ id: props.data.userId + '-video',
629
+ width: 640,
630
+ height: 320,
631
+ autoPlay: true,
632
+ ref: videoRef,
633
+ muted: true,
634
+ style: {
635
+ width: '100%',
636
+ height: '100%',
637
+ zIndex: '0',
638
+ display: videoMuted || !videoRef.current || !videoRef.current.srcObject ? 'none' : null
639
+ }
640
+ }),
641
+ /*We need this element to capture recording sound*/
642
+ props.isHost && /*#__PURE__*/_react.default.createElement("audio", {
643
+ id: props.data.userId + '-audio',
644
+ autoPlay: true,
645
+ ref: audioRef,
646
+ muted: true,
647
+ style: {
648
+ display: 'none'
649
+ }
650
+ }), /*#__PURE__*/_react.default.createElement("div", {
651
+ className: props.sizing === 'sm' ? 'name-label-sm' : 'name-label',
652
+ style: {
653
+ position: 'absolute',
654
+ bottom: '0',
655
+ padding: props.isCurrentUser ? '4px 16px' : props.sizing !== 'sm' ? '16px' : '4px'
656
+ }
657
+ }, !props.isCurrentUser && getParticipantName(), !props.isCurrentUser && /*#__PURE__*/_react.default.createElement("span", {
658
+ style: {
659
+ marginLeft: '4px'
660
+ }
661
+ }, props.isHost && !audioMuted ? /*#__PURE__*/_react.default.createElement(_IconButton.default, {
662
+ onClick: e => {
663
+ props.onHostAudioMute(props.data);
664
+ },
665
+ style: {
666
+ marginRight: '4px',
667
+ width: '16px',
668
+ height: '16px',
669
+ color: 'rgb(40, 40, 43)'
670
+ }
671
+ }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
672
+ id: 'MIC'
673
+ })) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, audioMuted ? /*#__PURE__*/_react.default.createElement(_Icon.default, {
674
+ id: 'MIC_OFF'
675
+ }) : /*#__PURE__*/_react.default.createElement(_Icon.default, {
676
+ id: 'MIC'
677
+ })), props.data.inView && numberOfInViewParticipants > 1 && /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
678
+ title: "Remove from view"
679
+ }, /*#__PURE__*/_react.default.createElement(_IconButton.default, {
680
+ onClick: e => {
681
+ stopProducing('video');
682
+ props.onRemoveFromView(props.data);
683
+ },
684
+ style: {
685
+ marginRight: '4px',
686
+ width: '16px',
687
+ height: '16px',
688
+ color: 'white'
689
+ }
690
+ }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
691
+ id: 'CLOSE'
692
+ }))), props.isHost && !videoMuted && /*#__PURE__*/_react.default.createElement(_IconButton.default, {
693
+ onClick: e => {
694
+ props.onHostVideoMute(props.data);
695
+ },
696
+ style: {
697
+ marginRight: '4px',
698
+ width: '16px',
699
+ height: '16px',
700
+ color: 'white'
701
+ }
702
+ }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
703
+ id: 'CAMERA'
704
+ }))), props.isCurrentUser && /*#__PURE__*/_react.default.createElement("div", {
705
+ className: 'row',
706
+ style: {
707
+ width: '216px'
708
+ }
709
+ }, /*#__PURE__*/_react.default.createElement("div", {
710
+ className: 'col no-margin no-padding',
711
+ style: {
712
+ textAlign: 'left'
713
+ }
714
+ }, /*#__PURE__*/_react.default.createElement("span", {
715
+ style: {
716
+ marginLeft: '4px'
717
+ }
718
+ }, "You")), /*#__PURE__*/_react.default.createElement("div", {
719
+ className: 'col no-margin no-padding',
720
+ style: {
721
+ display: 'flex',
722
+ justifyContent: 'flex-end'
723
+ }
724
+ }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
725
+ title: "My devices"
726
+ }, /*#__PURE__*/_react.default.createElement(_IconButton.default, {
727
+ onClick: handleClickDevicesIcon,
728
+ sx: {
729
+ ml: 1
730
+ },
731
+ "aria-controls": openMoreActions ? 'device-menu' : undefined,
732
+ "aria-haspopup": "true",
733
+ "aria-expanded": openMoreActions ? 'true' : undefined,
734
+ style: {
735
+ color: '#198754',
736
+ height: '8px'
737
+ }
738
+ }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
739
+ id: 'MIC'
740
+ }))))))), !props.isCurrentUser && /*#__PURE__*/_react.default.createElement("span", {
741
+ style: {
742
+ marginLeft: '4px'
743
+ }
744
+ }, handRaised && /*#__PURE__*/_react.default.createElement(_icons.PanTool, {
745
+ fontSize: 'small',
746
+ style: {
747
+ color: '#e2b030'
748
+ }
749
+ }))), props.isCurrentUser && /*#__PURE__*/_react.default.createElement("div", {
750
+ id: 'meeting-audio-el-container'
751
+ }))), /*#__PURE__*/_react.default.createElement(_core.Menu, {
752
+ anchorEl: anchorEl,
753
+ id: "devices-menu",
754
+ open: openMoreActions,
755
+ onClose: handleCloseDeviceMenu,
756
+ onClick: handleCloseDeviceMenu,
757
+ PaperProps: {
758
+ elevation: 0,
759
+ sx: {
760
+ overflow: 'visible',
761
+ filter: 'drop-shadow(0px 2px 8px rgba(0,0,0,0.32))',
762
+ mt: 1.5,
763
+ '& .MuiList-root': {
764
+ border: '1px solid red'
765
+ },
766
+ '& .MuiAvatar-root': {
767
+ width: 32,
768
+ height: 32,
769
+ ml: -0.5,
770
+ mr: 1
771
+ },
772
+ '&:before': {
773
+ content: '""',
774
+ display: 'block',
775
+ position: 'absolute',
776
+ top: 0,
777
+ right: 14,
778
+ width: 10,
779
+ height: 10,
780
+ bgcolor: 'primary',
781
+ transform: 'translateY(-50%) rotate(45deg)',
782
+ zIndex: 0
783
+ }
784
+ }
785
+ },
786
+ transformOrigin: {
787
+ horizontal: 20,
788
+ vertical: 136
789
+ },
790
+ anchorOrigin: {
791
+ horizontal: 'right',
792
+ vertical: 'top'
793
+ }
794
+ }, audioDevices.map((device, index) => {
795
+ return /*#__PURE__*/_react.default.createElement(_core.MenuItem, {
796
+ onClick: () => changeAudioDevice(device)
797
+ }, /*#__PURE__*/_react.default.createElement("span", {
798
+ style: {
799
+ color: selectedAudioDevice && selectedAudioDevice.id === device.id ? '#198754' : null
800
+ }
801
+ }, device.label));
802
+ })));
803
+ };
804
+
805
+ var _default = VCRoomParticipant;
806
+ exports.default = _default;