@agilemotion/oui-react-js 1.4.9 → 1.5.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.
@@ -56,7 +56,10 @@ class SocketManager {
56
56
  });
57
57
 
58
58
  _defineProperty(this, "init", async () => {
59
- let socket = _socket.default.connect(process.env.REACT_APP_SOCKET_SERVER_URL);
59
+ let url = process.env.REACT_APP_SOCKET_SERVER_URL || 'https://svn.agilemotion.co.za';
60
+ console.log("======= SOCKET CONNECTING TO ========= [" + url + "]");
61
+
62
+ let socket = _socket.default.connect(url);
60
63
 
61
64
  this.socket = socket;
62
65
  socket.on("connect", () => {
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useIsVisible = useIsVisible;
7
+
8
+ var _react = require("react");
9
+
10
+ function useIsVisible(ref) {
11
+ const [isIntersecting, setIntersecting] = (0, _react.useState)(false);
12
+ (0, _react.useEffect)(() => {
13
+ const observer = new IntersectionObserver(([entry]) => setIntersecting(entry.isIntersecting), {
14
+ threshold: 1
15
+ });
16
+ observer.observe(ref.current);
17
+ return () => {
18
+ observer.disconnect();
19
+ };
20
+ }, [ref]);
21
+ return isIntersecting;
22
+ }
@@ -1,8 +1,9 @@
1
1
 
2
2
  .vc-toolbar .button-container {
3
3
  min-width: 200px;
4
- overflow: hidden;
4
+ overflow: auto;
5
5
  margin-left: 8px;
6
+ white-space: nowrap;
6
7
  }
7
8
 
8
9
  .window-pinned .vc-toolbar .timer {
@@ -11,9 +12,21 @@
11
12
  }
12
13
 
13
14
  .vc-toolbar button,
15
+ .vc-toolbar .more-button-wrapper,
14
16
  .vc-toolbar .button-wrapper {
15
17
  min-width: 88px;
16
18
  width: 88px;
19
+ display: inline-block;
20
+ }
21
+
22
+ .vc-toolbar .more-button-wrapper button {
23
+ min-width: 48px;
24
+ width: 48px;
25
+ }
26
+
27
+ .vc-toolbar .more-button-wrapper {
28
+ min-width: 48px;
29
+ width: 48px;
17
30
  }
18
31
 
19
32
  .vc-toolbar .hang-up,
@@ -35,6 +35,10 @@ var _ApplicationManager = _interopRequireDefault(require("../../ApplicationManag
35
35
 
36
36
  var _SocketManager = _interopRequireDefault(require("../SocketManager"));
37
37
 
38
+ var _ToolbarButton = _interopRequireDefault(require("./ToolbarButton"));
39
+
40
+ var _IconButton = _interopRequireDefault(require("@material-ui/core/IconButton"));
41
+
38
42
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
39
43
 
40
44
  function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
@@ -52,6 +56,20 @@ const Toolbar = props => {
52
56
  const [screenShared, setScreenShared] = (0, _react.useState)(false);
53
57
  const [roomStatus, setRoomStatus] = (0, _react.useState)();
54
58
  const [raisedHandsNames, setRaisedHandsNames] = (0, _react.useState)([]);
59
+ const [buttonVisibility, setButtonVisibility] = (0, _react.useState)({});
60
+ const [allButtonsVisible, setAllButtonsVisible] = (0, _react.useState)(false);
61
+ const [testButtons, setTestButtons] = (0, _react.useState)([]);
62
+ (0, _react.useEffect)(() => {
63
+ let buttons = [];
64
+
65
+ for (let i = 0; i < 13; i++) {
66
+ buttons.push({
67
+ id: '_' + i
68
+ });
69
+ }
70
+
71
+ setTestButtons(buttons);
72
+ }, []);
55
73
  const {
56
74
  participants,
57
75
  hasUnreadChats,
@@ -189,26 +207,26 @@ const Toolbar = props => {
189
207
  }));
190
208
  };
191
209
 
210
+ const handleVisibilityChange = (id, visible) => {
211
+ buttonVisibility[id] = visible;
212
+ let allVisible = true;
213
+ Object.keys(buttonVisibility).forEach(key => {
214
+ if (buttonVisibility[key] === false) {
215
+ allVisible = false;
216
+ }
217
+ });
218
+ setAllButtonsVisible(allVisible);
219
+ setButtonVisibility(JSON.parse(JSON.stringify(buttonVisibility)));
220
+ };
221
+
192
222
  return /*#__PURE__*/_react.default.createElement("div", {
193
223
  style: {
194
224
  width: '100%'
195
225
  },
196
226
  className: 'centered-flex-box vc-toolbar'
197
227
  }, roomStatus === 'SESSION_ENDED' ? /*#__PURE__*/_react.default.createElement("div", {
198
- className: 'row centered-flex-box button-wrapper col no-margin no-padding'
199
- }, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
200
- title: "Close"
201
- }, /*#__PURE__*/_react.default.createElement(_Button.default, {
202
- onClick: () => {
203
- closeWindow();
204
- },
205
- style: {
206
- color: '#eb3f21',
207
- marginRight: '4px'
208
- }
209
- }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
210
- id: 'CLOSE'
211
- })))) : /*#__PURE__*/_react.default.createElement("div", {
228
+ className: 'row centered-flex-box button-wrapper no-margin no-padding'
229
+ }, /*#__PURE__*/_react.default.createElement(_ToolbarButton.default, null)) : /*#__PURE__*/_react.default.createElement("div", {
212
230
  className: 'row',
213
231
  style: {
214
232
  justifyContent: 'right',
@@ -221,16 +239,22 @@ const Toolbar = props => {
221
239
  },
222
240
  className: 'timer'
223
241
  }, /*#__PURE__*/_react.default.createElement(_Timer.default, null)), /*#__PURE__*/_react.default.createElement("div", {
242
+ style: {
243
+ width: '60px'
244
+ }
245
+ }, "\xA0"), /*#__PURE__*/_react.default.createElement("div", {
224
246
  style: {
225
247
  display: 'flex',
226
248
  justifyContent: 'right',
227
- width: 'calc(100% - 120px)'
249
+ width: 'calc(100% - 180px)'
228
250
  },
229
251
  className: 'col button-container'
230
252
  }, /*#__PURE__*/_react.default.createElement("div", {
231
- className: 'row no-margin no-padding'
253
+ className: 'no-margin no-padding'
232
254
  }, isHost && roomStatus === 'SESSION' && displayState === 'MAXIMIZED' && /*#__PURE__*/_react.default.createElement("div", {
233
255
  className: 'button-wrapper col no-margin no-padding'
256
+ }, /*#__PURE__*/_react.default.createElement(_ToolbarButton.default, {
257
+ onVisibilityChange: visible => handleVisibilityChange('record', visible)
234
258
  }, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
235
259
  title: "Record"
236
260
  }, /*#__PURE__*/_react.default.createElement(_Button.default, {
@@ -253,8 +277,10 @@ const Toolbar = props => {
253
277
  id: 'RECORD'
254
278
  })), /*#__PURE__*/_react.default.createElement("div", {
255
279
  className: 'text'
256
- }, isRecording ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "Recording") : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "Record")))))), (roomStatus === 'SESSION' || roomStatus === 'LOBBY') && !videoDisabled && /*#__PURE__*/_react.default.createElement("div", {
280
+ }, isRecording ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "Recording") : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "Record"))))))), (roomStatus === 'SESSION' || roomStatus === 'LOBBY') && !videoDisabled && /*#__PURE__*/_react.default.createElement("div", {
257
281
  className: 'button-wrapper col no-margin no-padding'
282
+ }, /*#__PURE__*/_react.default.createElement(_ToolbarButton.default, {
283
+ onVisibilityChange: visible => handleVisibilityChange('video', visible)
258
284
  }, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
259
285
  title: "Video"
260
286
  }, /*#__PURE__*/_react.default.createElement(_Button.default, {
@@ -277,8 +303,10 @@ const Toolbar = props => {
277
303
  id: 'CAMERA'
278
304
  })), /*#__PURE__*/_react.default.createElement("div", {
279
305
  className: 'text'
280
- }, "Camera"))))), (roomStatus === 'SESSION' || roomStatus === 'LOBBY') && !audioDisabled && /*#__PURE__*/_react.default.createElement("div", {
306
+ }, "Camera")))))), (roomStatus === 'SESSION' || roomStatus === 'LOBBY') && !audioDisabled && /*#__PURE__*/_react.default.createElement("div", {
281
307
  className: 'button-wrapper col no-margin no-padding'
308
+ }, /*#__PURE__*/_react.default.createElement(_ToolbarButton.default, {
309
+ onVisibilityChange: visible => handleVisibilityChange('audio', visible)
282
310
  }, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
283
311
  title: "Audio"
284
312
  }, /*#__PURE__*/_react.default.createElement(_Button.default, {
@@ -301,8 +329,10 @@ const Toolbar = props => {
301
329
  id: 'MIC'
302
330
  })), /*#__PURE__*/_react.default.createElement("div", {
303
331
  className: 'text'
304
- }, "Mic"))))), ' ', roomStatus === 'SESSION' && displayState === 'MAXIMIZED' && !whiteBoardShown && /*#__PURE__*/_react.default.createElement("div", {
332
+ }, "Mic")))))), ' ', roomStatus === 'SESSION' && displayState === 'MAXIMIZED' && !whiteBoardShown && /*#__PURE__*/_react.default.createElement("div", {
305
333
  className: 'button-wrapper col no-margin no-padding'
334
+ }, /*#__PURE__*/_react.default.createElement(_ToolbarButton.default, {
335
+ onVisibilityChange: visible => handleVisibilityChange('shareScreen', visible)
306
336
  }, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
307
337
  title: "Share"
308
338
  }, /*#__PURE__*/_react.default.createElement(_Button.default, {
@@ -338,12 +368,12 @@ const Toolbar = props => {
338
368
  style: {
339
369
  marginRight: '8px'
340
370
  }
341
- }, "Share screen"))))))), roomStatus === 'SESSION' && displayState === 'MAXIMIZED' && /*#__PURE__*/_react.default.createElement("div", {
342
- className: 'centered-flex-box'
343
- }, /*#__PURE__*/_react.default.createElement("div", {
371
+ }, "Share screen")))))))), roomStatus === 'SESSION' && displayState === 'MAXIMIZED' && /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
344
372
  className: 'marker'
345
373
  }, participants.length), /*#__PURE__*/_react.default.createElement("div", {
346
374
  className: 'button-wrapper col no-margin no-padding'
375
+ }, /*#__PURE__*/_react.default.createElement(_ToolbarButton.default, {
376
+ onVisibilityChange: visible => handleVisibilityChange('people', visible)
347
377
  }, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
348
378
  title: "People"
349
379
  }, /*#__PURE__*/_react.default.createElement(_Button.default, {
@@ -362,12 +392,16 @@ const Toolbar = props => {
362
392
  id: 'PEOPLE'
363
393
  })), /*#__PURE__*/_react.default.createElement("div", {
364
394
  className: 'text'
365
- }, "People")))))), roomStatus === 'SESSION' && /*#__PURE__*/_react.default.createElement("div", {
366
- className: 'centered-flex-box'
395
+ }, "People"))))))), roomStatus === 'SESSION' && /*#__PURE__*/_react.default.createElement("div", {
396
+ style: {
397
+ display: 'inline-block'
398
+ }
367
399
  }, raisedHands.length > 0 && /*#__PURE__*/_react.default.createElement("div", {
368
400
  className: 'marker'
369
401
  }, raisedHands.length), /*#__PURE__*/_react.default.createElement("div", {
370
402
  className: 'button-wrapper col no-margin no-padding'
403
+ }, /*#__PURE__*/_react.default.createElement(_ToolbarButton.default, {
404
+ onVisibilityChange: visible => handleVisibilityChange('raiseHand', visible)
371
405
  }, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
372
406
  title: raisedHands.length > 0 ? /*#__PURE__*/_react.default.createElement("div", null, renderRaisedHandsToolTip()) : handRaised ? 'Lower hand' : 'Raise hand'
373
407
  }, /*#__PURE__*/_react.default.createElement(_Button.default, {
@@ -392,7 +426,21 @@ const Toolbar = props => {
392
426
  id: 'PAN_TOOL'
393
427
  })), /*#__PURE__*/_react.default.createElement("div", {
394
428
  className: 'text'
395
- }, handRaised ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "Lower") : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "Raise"))))))), /*#__PURE__*/_react.default.createElement("div", {
429
+ }, handRaised ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "Lower") : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "Raise")))))))), !allButtonsVisible && /*#__PURE__*/_react.default.createElement("div", {
430
+ className: 'more-button-wrapper'
431
+ }, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
432
+ title: "More Actions"
433
+ }, /*#__PURE__*/_react.default.createElement(_IconButton.default, {
434
+ onClick: handleClick,
435
+ "aria-controls": openMoreActions ? 'toolbar-menu' : undefined,
436
+ "aria-haspopup": "true",
437
+ "aria-expanded": openMoreActions ? 'true' : undefined,
438
+ style: {
439
+ marginRight: '4px'
440
+ }
441
+ }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
442
+ id: 'MORE'
443
+ })))), /*#__PURE__*/_react.default.createElement("div", {
396
444
  className: 'button-wrapper col no-margin no-padding hang-up'
397
445
  }, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
398
446
  title: "Hang up"
@@ -415,19 +463,20 @@ const Toolbar = props => {
415
463
  id: 'CALL_END'
416
464
  }))))))), /*#__PURE__*/_react.default.createElement(_core.Menu, {
417
465
  anchorEl: anchorEl,
418
- id: "account-menu",
466
+ id: "toobar-menu",
419
467
  open: openMoreActions,
420
468
  onClose: handleClose,
421
469
  onClick: handleClose,
422
470
  PaperProps: {
423
471
  elevation: 0,
472
+ style: {
473
+ boxShadow: '0 8px 16px 0 rgba(0, 0, 0, 0.2)'
474
+ },
424
475
  sx: {
425
476
  overflow: 'visible',
426
477
  filter: 'drop-shadow(0px 2px 8px rgba(0,0,0,0.32))',
427
478
  mt: 1.5,
428
- '& .MuiList-root': {
429
- border: '1px solid red'
430
- },
479
+ '& .MuiList-root': {},
431
480
  '& .MuiAvatar-root': {
432
481
  width: 32,
433
482
  height: 32,
@@ -449,19 +498,90 @@ const Toolbar = props => {
449
498
  }
450
499
  },
451
500
  transformOrigin: {
452
- horizontal: 20,
453
- vertical: 136
501
+ horizontal: 80,
502
+ vertical: -60
454
503
  },
455
504
  anchorOrigin: {
456
505
  horizontal: 'right',
457
506
  vertical: 'top'
458
507
  }
508
+ }, !buttonVisibility.record && isHost && roomStatus === 'SESSION' && displayState === 'MAXIMIZED' && /*#__PURE__*/_react.default.createElement("div", {
509
+ className: 'button-wrapper no-margin no-padding'
510
+ }, /*#__PURE__*/_react.default.createElement(_core.MenuItem, {
511
+ disabled: !isHost,
512
+ onClick: () => {
513
+ toggleRecorder();
514
+ }
515
+ }, /*#__PURE__*/_react.default.createElement(_core.ListItemIcon, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
516
+ id: "RECORD"
517
+ })), "Record")), !buttonVisibility.video && (roomStatus === 'SESSION' || roomStatus === 'LOBBY') && !videoDisabled && /*#__PURE__*/_react.default.createElement("div", {
518
+ className: 'button-wrapper no-margin no-padding'
519
+ }, /*#__PURE__*/_react.default.createElement(_core.MenuItem, {
520
+ disabled: !isHost,
521
+ onClick: () => {
522
+ muteVideo();
523
+ }
524
+ }, /*#__PURE__*/_react.default.createElement(_core.ListItemIcon, null, videoMuted ? /*#__PURE__*/_react.default.createElement(_Icon.default, {
525
+ id: 'CAMERA_OFF'
526
+ }) : /*#__PURE__*/_react.default.createElement(_Icon.default, {
527
+ id: 'CAMERA'
528
+ })), "Camera")), !buttonVisibility.audio && (roomStatus === 'SESSION' || roomStatus === 'LOBBY') && !videoDisabled && /*#__PURE__*/_react.default.createElement("div", {
529
+ className: 'button-wrapper no-margin no-padding'
530
+ }, /*#__PURE__*/_react.default.createElement(_core.MenuItem, {
531
+ disabled: !isHost,
532
+ onClick: () => {
533
+ muteAudio();
534
+ }
535
+ }, /*#__PURE__*/_react.default.createElement(_core.ListItemIcon, null, audioMuted ? /*#__PURE__*/_react.default.createElement(_Icon.default, {
536
+ id: 'MIC_OFF'
537
+ }) : /*#__PURE__*/_react.default.createElement(_Icon.default, {
538
+ id: 'MIC'
539
+ })), "Mic")), !buttonVisibility.shareScreen && roomStatus === 'SESSION' && displayState === 'MAXIMIZED' && !whiteBoardShown && /*#__PURE__*/_react.default.createElement("div", {
540
+ className: 'button-wrapper no-margin no-padding'
459
541
  }, /*#__PURE__*/_react.default.createElement(_core.MenuItem, {
460
542
  disabled: !isHost,
461
- onClick: toggleAutoPermit
462
- }, /*#__PURE__*/_react.default.createElement(_core.ListItemIcon, null, /*#__PURE__*/_react.default.createElement(_icons.PersonAdd, {
463
- fontSize: "small"
464
- })), autoPermit ? 'Disable auto permit [Auto permit is currently on]' : 'Enable auto permit [Auto permit is currently off]')));
543
+ onClick: () => {
544
+ if (screenShared) {
545
+ stopShareScreen();
546
+ } else {
547
+ shareScreen();
548
+ }
549
+ }
550
+ }, /*#__PURE__*/_react.default.createElement(_core.ListItemIcon, null, screenShared ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
551
+ id: 'CANCEL_PRESENTATION'
552
+ })) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
553
+ id: 'PRESENT_TO_ALL'
554
+ }))), screenShared ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
555
+ style: {
556
+ marginRight: '8px'
557
+ }
558
+ }, "Stop sharing")) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
559
+ style: {
560
+ marginRight: '8px'
561
+ }
562
+ }, "Share screen")))), !buttonVisibility.people && roomStatus === 'SESSION' && displayState === 'MAXIMIZED' && /*#__PURE__*/_react.default.createElement("div", {
563
+ className: 'button-wrapper no-margin no-padding'
564
+ }, /*#__PURE__*/_react.default.createElement(_core.MenuItem, {
565
+ disabled: !isHost,
566
+ onClick: () => {
567
+ showPeople();
568
+ }
569
+ }, /*#__PURE__*/_react.default.createElement(_core.ListItemIcon, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
570
+ id: 'PEOPLE'
571
+ })), /*#__PURE__*/_react.default.createElement("div", null, participants.length, "\xA0People"))), !buttonVisibility.raiseHand && roomStatus === 'SESSION' && /*#__PURE__*/_react.default.createElement("div", {
572
+ className: 'button-wrapper no-margin no-padding'
573
+ }, /*#__PURE__*/_react.default.createElement(_core.MenuItem, {
574
+ disabled: !isHost,
575
+ onClick: () => {
576
+ if (handRaised) {
577
+ lowerHand();
578
+ } else {
579
+ raiseHand();
580
+ }
581
+ }
582
+ }, /*#__PURE__*/_react.default.createElement(_core.ListItemIcon, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
583
+ id: 'PAN_TOOL'
584
+ })), handRaised ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "Lower") : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "Raise")))));
465
585
  };
466
586
 
467
587
  var _default = Toolbar;
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ require("./Toolbar.css");
11
+
12
+ var _Icon = _interopRequireDefault(require("../Icon"));
13
+
14
+ var _Tooltip = _interopRequireDefault(require("@material-ui/core/Tooltip"));
15
+
16
+ var _Button = _interopRequireDefault(require("@material-ui/core/Button"));
17
+
18
+ var _UseIsVisible = require("../UseIsVisible");
19
+
20
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
+
22
+ function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
23
+
24
+ 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; }
25
+
26
+ /* eslint-disable react-hooks/exhaustive-deps */
27
+ const Toolbar = props => {
28
+ const [videoMuted, setVideoMuted] = (0, _react.useState)(props.videoMuted);
29
+ const [audioMuted, setAudioMuted] = (0, _react.useState)(props.audioMuted);
30
+ const [isRecording, setIsRecording] = (0, _react.useState)(false);
31
+ const [autoPermit, setAutoPermit] = (0, _react.useState)(false);
32
+ const [anchorEl, setAnchorEl] = (0, _react.useState)(null);
33
+ const openMoreActions = Boolean(anchorEl);
34
+ const [screenShared, setScreenShared] = (0, _react.useState)(false);
35
+ const [roomStatus, setRoomStatus] = (0, _react.useState)();
36
+ const [raisedHandsNames, setRaisedHandsNames] = (0, _react.useState)([]);
37
+ const ref = (0, _react.useRef)();
38
+ const isVisible = (0, _UseIsVisible.useIsVisible)(ref);
39
+ const [visible, setVisible] = (0, _react.useState)(null);
40
+ const {
41
+ children,
42
+ participants,
43
+ hasUnreadChats,
44
+ whiteBoardShown,
45
+ displayState,
46
+ eventHandler,
47
+ handRaised,
48
+ isHost,
49
+ someoneSharing,
50
+ videoDisabled,
51
+ audioDisabled,
52
+ raisedHands
53
+ } = props;
54
+ (0, _react.useEffect)(() => {
55
+ console.log("VISIBILITY FOR : " + props.id + " : " + isVisible);
56
+
57
+ if (visible === null) {
58
+ setVisible(true);
59
+ } else {
60
+ setVisible(isVisible);
61
+ props.onVisibilityChange(isVisible);
62
+ }
63
+ }, [isVisible]);
64
+ return /*#__PURE__*/_react.default.createElement("div", {
65
+ ref: ref,
66
+ style: {
67
+ width: '100%'
68
+ }
69
+ }, !isVisible ? /*#__PURE__*/_react.default.createElement("div", {
70
+ style: {
71
+ width: '100%'
72
+ }
73
+ }, "\xA0") : children);
74
+ };
75
+
76
+ var _default = Toolbar;
77
+ exports.default = _default;
@@ -0,0 +1,468 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ require("./Toolbar.css");
11
+
12
+ var _Icon = _interopRequireDefault(require("../Icon"));
13
+
14
+ var _Tooltip = _interopRequireDefault(require("@material-ui/core/Tooltip"));
15
+
16
+ var _core = require("@material-ui/core");
17
+
18
+ var _icons = require("@material-ui/icons");
19
+
20
+ var _Utils = _interopRequireDefault(require("../../Utils"));
21
+
22
+ var _Observable = _interopRequireDefault(require("../../event/Observable"));
23
+
24
+ var _LottieIcon = _interopRequireDefault(require("../LottieIcon"));
25
+
26
+ var _Button = _interopRequireDefault(require("@material-ui/core/Button"));
27
+
28
+ var _Timer = _interopRequireDefault(require("./Timer"));
29
+
30
+ var _VCEventType = require("./VCEventType");
31
+
32
+ var _VCEventManager = _interopRequireDefault(require("./VCEventManager"));
33
+
34
+ var _ApplicationManager = _interopRequireDefault(require("../../ApplicationManager"));
35
+
36
+ var _SocketManager = _interopRequireDefault(require("../SocketManager"));
37
+
38
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
39
+
40
+ function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
41
+
42
+ 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; }
43
+
44
+ /* eslint-disable react-hooks/exhaustive-deps */
45
+ const Toolbar = props => {
46
+ const [videoMuted, setVideoMuted] = (0, _react.useState)(props.videoMuted);
47
+ const [audioMuted, setAudioMuted] = (0, _react.useState)(props.audioMuted);
48
+ const [isRecording, setIsRecording] = (0, _react.useState)(false);
49
+ const [autoPermit, setAutoPermit] = (0, _react.useState)(false);
50
+ const [anchorEl, setAnchorEl] = (0, _react.useState)(null);
51
+ const openMoreActions = Boolean(anchorEl);
52
+ const [screenShared, setScreenShared] = (0, _react.useState)(false);
53
+ const [roomStatus, setRoomStatus] = (0, _react.useState)();
54
+ const [raisedHandsNames, setRaisedHandsNames] = (0, _react.useState)([]);
55
+ const {
56
+ participants,
57
+ hasUnreadChats,
58
+ whiteBoardShown,
59
+ displayState,
60
+ eventHandler,
61
+ handRaised,
62
+ isHost,
63
+ someoneSharing,
64
+ videoDisabled,
65
+ audioDisabled,
66
+ raisedHands
67
+ } = props;
68
+ (0, _react.useEffect)(() => {
69
+ setScreenShared(props.screenShared);
70
+ }, [props.screenShared]);
71
+ (0, _react.useEffect)(() => {
72
+ setIsRecording(props.isRecording);
73
+ }, [props.isRecording]);
74
+ (0, _react.useEffect)(() => {
75
+ setupRaisedHandsNames();
76
+ }, [raisedHands]);
77
+
78
+ const setupRaisedHandsNames = () => {
79
+ if (raisedHands.length === 0) {
80
+ setRaisedHandsNames([]);
81
+ } else {
82
+ let names = [];
83
+
84
+ for (const raisedHand of raisedHands) {
85
+ var _participants$find;
86
+
87
+ names.push((_participants$find = participants.find(p => p.userId === raisedHand)) === null || _participants$find === void 0 ? void 0 : _participants$find.name);
88
+ }
89
+
90
+ setRaisedHandsNames(names);
91
+ }
92
+ };
93
+
94
+ const handleClick = event => {
95
+ setAnchorEl(event.currentTarget);
96
+ };
97
+
98
+ const handleClose = () => {
99
+ setAnchorEl(null);
100
+ };
101
+
102
+ const muteVideo = () => {
103
+ setVideoMuted(prevStatus => !prevStatus);
104
+ };
105
+
106
+ const toggleRecorder = () => {
107
+ if (isRecording) {
108
+ eventHandler.stopRecording();
109
+ } else {
110
+ eventHandler.recordMeeting();
111
+ }
112
+
113
+ setIsRecording(!isRecording);
114
+ };
115
+
116
+ (0, _react.useEffect)(() => {
117
+ setRoomStatus(props.roomStatus);
118
+ }, [props.roomStatus]);
119
+ (0, _react.useEffect)(() => {
120
+ setAutoPermit(props.autoPermit);
121
+ }, [props.autoPermit]);
122
+ (0, _react.useEffect)(() => {
123
+ eventHandler.onMuteVideo(videoMuted);
124
+ }, [videoMuted]);
125
+ (0, _react.useEffect)(() => {
126
+ setVideoMuted(props.videoMuted);
127
+ }, [props.videoMuted]);
128
+ (0, _react.useEffect)(() => {
129
+ setAudioMuted(props.audioMuted);
130
+ }, [props.audioMuted]);
131
+ (0, _react.useEffect)(() => {
132
+ eventHandler.onMuteAudio(audioMuted);
133
+ }, [audioMuted]);
134
+
135
+ const muteAudio = () => {
136
+ setAudioMuted(prevStatus => !prevStatus);
137
+ eventHandler.onMuteAudio(prevStatus => !prevStatus);
138
+ };
139
+
140
+ const shareScreen = () => {
141
+ eventHandler.shareScreen();
142
+ };
143
+
144
+ const stopShareScreen = () => {
145
+ eventHandler.stopShareScreen();
146
+ };
147
+
148
+ const endCall = () => {
149
+ eventHandler.endCall();
150
+ };
151
+
152
+ const showPeople = () => {
153
+ eventHandler.showPeople();
154
+ };
155
+
156
+ const showWhiteboard = () => {
157
+ eventHandler.showWhiteboard();
158
+ };
159
+
160
+ const showChat = () => {
161
+ eventHandler.showChat();
162
+ };
163
+
164
+ const raiseHand = () => {
165
+ eventHandler.raiseHand();
166
+ };
167
+
168
+ const lowerHand = () => {
169
+ eventHandler.lowerHand();
170
+ };
171
+
172
+ const closeWindow = () => {
173
+ eventHandler.closeWindow();
174
+ };
175
+
176
+ const toggleAutoPermit = () => {
177
+ setAutoPermit(prevAutoPermit => !prevAutoPermit);
178
+ eventHandler.toggleAutoPermit();
179
+ };
180
+
181
+ const renderRaisedHandsToolTip = () => {
182
+ return /*#__PURE__*/_react.default.createElement("div", {
183
+ style: {
184
+ textAlign: 'center',
185
+ fontSize: '14px'
186
+ }
187
+ }, raisedHandsNames.map(name => {
188
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, name, /*#__PURE__*/_react.default.createElement("br", null));
189
+ }));
190
+ };
191
+
192
+ return /*#__PURE__*/_react.default.createElement("div", {
193
+ style: {
194
+ width: '100%'
195
+ },
196
+ className: 'centered-flex-box vc-toolbar'
197
+ }, roomStatus === 'SESSION_ENDED' ? /*#__PURE__*/_react.default.createElement("div", {
198
+ className: 'row centered-flex-box button-wrapper col no-margin no-padding'
199
+ }, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
200
+ title: "Close"
201
+ }, /*#__PURE__*/_react.default.createElement(_Button.default, {
202
+ onClick: () => {
203
+ closeWindow();
204
+ },
205
+ style: {
206
+ color: '#eb3f21',
207
+ marginRight: '4px'
208
+ }
209
+ }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
210
+ id: 'CLOSE'
211
+ })))) : /*#__PURE__*/_react.default.createElement("div", {
212
+ className: 'row',
213
+ style: {
214
+ justifyContent: 'right',
215
+ margin: '8px',
216
+ width: '100%'
217
+ }
218
+ }, /*#__PURE__*/_react.default.createElement("div", {
219
+ style: {
220
+ width: '120px'
221
+ },
222
+ className: 'timer'
223
+ }, /*#__PURE__*/_react.default.createElement(_Timer.default, null)), /*#__PURE__*/_react.default.createElement("div", {
224
+ style: {
225
+ display: 'flex',
226
+ justifyContent: 'right',
227
+ width: 'calc(100% - 120px)'
228
+ },
229
+ className: 'col button-container'
230
+ }, /*#__PURE__*/_react.default.createElement("div", {
231
+ className: 'row no-margin no-padding'
232
+ }, isHost && roomStatus === 'SESSION' && displayState === 'MAXIMIZED' && /*#__PURE__*/_react.default.createElement("div", {
233
+ className: 'button-wrapper col no-margin no-padding'
234
+ }, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
235
+ title: "Record"
236
+ }, /*#__PURE__*/_react.default.createElement(_Button.default, {
237
+ onClick: () => {
238
+ toggleRecorder();
239
+ },
240
+ style: {
241
+ color: '#404239',
242
+ marginRight: '4px'
243
+ }
244
+ }, /*#__PURE__*/_react.default.createElement("div", {
245
+ style: {
246
+ height: '100%'
247
+ }
248
+ }, /*#__PURE__*/_react.default.createElement("div", {
249
+ className: 'icon'
250
+ }, isRecording ? /*#__PURE__*/_react.default.createElement(_LottieIcon.default, {
251
+ id: 'recording'
252
+ }) : /*#__PURE__*/_react.default.createElement(_Icon.default, {
253
+ id: 'RECORD'
254
+ })), /*#__PURE__*/_react.default.createElement("div", {
255
+ className: 'text'
256
+ }, isRecording ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "Recording") : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "Record")))))), (roomStatus === 'SESSION' || roomStatus === 'LOBBY') && !videoDisabled && /*#__PURE__*/_react.default.createElement("div", {
257
+ className: 'button-wrapper col no-margin no-padding'
258
+ }, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
259
+ title: "Video"
260
+ }, /*#__PURE__*/_react.default.createElement(_Button.default, {
261
+ onClick: () => {
262
+ muteVideo();
263
+ },
264
+ style: {
265
+ color: videoMuted ? '#eb3f21' : '#404239',
266
+ marginRight: '4px'
267
+ }
268
+ }, /*#__PURE__*/_react.default.createElement("div", {
269
+ style: {
270
+ height: '100%'
271
+ }
272
+ }, /*#__PURE__*/_react.default.createElement("div", {
273
+ className: 'icon'
274
+ }, videoMuted ? /*#__PURE__*/_react.default.createElement(_Icon.default, {
275
+ id: 'CAMERA_OFF'
276
+ }) : /*#__PURE__*/_react.default.createElement(_Icon.default, {
277
+ id: 'CAMERA'
278
+ })), /*#__PURE__*/_react.default.createElement("div", {
279
+ className: 'text'
280
+ }, "Camera"))))), (roomStatus === 'SESSION' || roomStatus === 'LOBBY') && !audioDisabled && /*#__PURE__*/_react.default.createElement("div", {
281
+ className: 'button-wrapper col no-margin no-padding'
282
+ }, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
283
+ title: "Audio"
284
+ }, /*#__PURE__*/_react.default.createElement(_Button.default, {
285
+ onClick: () => {
286
+ muteAudio();
287
+ },
288
+ style: {
289
+ color: audioMuted ? '#eb3f21' : '#404239',
290
+ marginRight: '4px'
291
+ }
292
+ }, /*#__PURE__*/_react.default.createElement("div", {
293
+ style: {
294
+ height: '100%'
295
+ }
296
+ }, /*#__PURE__*/_react.default.createElement("div", {
297
+ className: 'icon'
298
+ }, audioMuted ? /*#__PURE__*/_react.default.createElement(_Icon.default, {
299
+ id: 'MIC_OFF'
300
+ }) : /*#__PURE__*/_react.default.createElement(_Icon.default, {
301
+ id: 'MIC'
302
+ })), /*#__PURE__*/_react.default.createElement("div", {
303
+ className: 'text'
304
+ }, "Mic"))))), ' ', roomStatus === 'SESSION' && displayState === 'MAXIMIZED' && !whiteBoardShown && /*#__PURE__*/_react.default.createElement("div", {
305
+ className: 'button-wrapper col no-margin no-padding'
306
+ }, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
307
+ title: "Share"
308
+ }, /*#__PURE__*/_react.default.createElement(_Button.default, {
309
+ onClick: () => {
310
+ if (screenShared) {
311
+ stopShareScreen();
312
+ } else {
313
+ shareScreen();
314
+ }
315
+ },
316
+ style: {
317
+ color: screenShared ? '#8eb2f5' : '#404239',
318
+ marginRight: '4px',
319
+ minWidth: '108px'
320
+ }
321
+ }, /*#__PURE__*/_react.default.createElement("div", {
322
+ style: {
323
+ height: '100%'
324
+ }
325
+ }, /*#__PURE__*/_react.default.createElement("div", {
326
+ className: 'icon'
327
+ }, screenShared ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
328
+ id: 'CANCEL_PRESENTATION'
329
+ })) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
330
+ id: 'PRESENT_TO_ALL'
331
+ }))), /*#__PURE__*/_react.default.createElement("div", {
332
+ className: 'text'
333
+ }, screenShared ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
334
+ style: {
335
+ marginRight: '8px'
336
+ }
337
+ }, "Stop sharing")) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
338
+ style: {
339
+ marginRight: '8px'
340
+ }
341
+ }, "Share screen"))))))), roomStatus === 'SESSION' && displayState === 'MAXIMIZED' && /*#__PURE__*/_react.default.createElement("div", {
342
+ className: 'centered-flex-box'
343
+ }, /*#__PURE__*/_react.default.createElement("div", {
344
+ className: 'marker'
345
+ }, participants.length), /*#__PURE__*/_react.default.createElement("div", {
346
+ className: 'button-wrapper col no-margin no-padding'
347
+ }, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
348
+ title: "People"
349
+ }, /*#__PURE__*/_react.default.createElement(_Button.default, {
350
+ onClick: e => showPeople(),
351
+ style: {
352
+ color: '#404239',
353
+ marginRight: '4px'
354
+ }
355
+ }, /*#__PURE__*/_react.default.createElement("div", {
356
+ style: {
357
+ height: '100%'
358
+ }
359
+ }, /*#__PURE__*/_react.default.createElement("div", {
360
+ className: 'icon'
361
+ }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
362
+ id: 'PEOPLE'
363
+ })), /*#__PURE__*/_react.default.createElement("div", {
364
+ className: 'text'
365
+ }, "People")))))), roomStatus === 'SESSION' && /*#__PURE__*/_react.default.createElement("div", {
366
+ className: 'centered-flex-box'
367
+ }, raisedHands.length > 0 && /*#__PURE__*/_react.default.createElement("div", {
368
+ className: 'marker'
369
+ }, raisedHands.length), /*#__PURE__*/_react.default.createElement("div", {
370
+ className: 'button-wrapper col no-margin no-padding'
371
+ }, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
372
+ title: raisedHands.length > 0 ? /*#__PURE__*/_react.default.createElement("div", null, renderRaisedHandsToolTip()) : handRaised ? 'Lower hand' : 'Raise hand'
373
+ }, /*#__PURE__*/_react.default.createElement(_Button.default, {
374
+ onClick: e => {
375
+ if (handRaised) {
376
+ lowerHand();
377
+ } else {
378
+ raiseHand();
379
+ }
380
+ },
381
+ style: {
382
+ color: handRaised ? '#e2b030' : '#404239',
383
+ marginRight: '4px'
384
+ }
385
+ }, /*#__PURE__*/_react.default.createElement("div", {
386
+ style: {
387
+ height: '100%'
388
+ }
389
+ }, /*#__PURE__*/_react.default.createElement("div", {
390
+ className: 'icon'
391
+ }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
392
+ id: 'PAN_TOOL'
393
+ })), /*#__PURE__*/_react.default.createElement("div", {
394
+ className: 'text'
395
+ }, handRaised ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "Lower") : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "Raise"))))))), /*#__PURE__*/_react.default.createElement("div", {
396
+ className: 'button-wrapper col no-margin no-padding hang-up'
397
+ }, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
398
+ title: "Hang up"
399
+ }, /*#__PURE__*/_react.default.createElement(_Button.default, {
400
+ onClick: endCall,
401
+ style: {
402
+ backgroundColor: '#eb3f21',
403
+ color: 'white',
404
+ marginRight: '4px',
405
+ minWidth: '120px',
406
+ width: '120px',
407
+ height: '60px'
408
+ }
409
+ }, /*#__PURE__*/_react.default.createElement("span", {
410
+ style: {
411
+ marginRight: '8px',
412
+ fontSize: '12px'
413
+ }
414
+ }, "Hang up"), /*#__PURE__*/_react.default.createElement(_Icon.default, {
415
+ id: 'CALL_END'
416
+ }))))))), /*#__PURE__*/_react.default.createElement(_core.Menu, {
417
+ anchorEl: anchorEl,
418
+ id: "account-menu",
419
+ open: openMoreActions,
420
+ onClose: handleClose,
421
+ onClick: handleClose,
422
+ PaperProps: {
423
+ elevation: 0,
424
+ sx: {
425
+ overflow: 'visible',
426
+ filter: 'drop-shadow(0px 2px 8px rgba(0,0,0,0.32))',
427
+ mt: 1.5,
428
+ '& .MuiList-root': {
429
+ border: '1px solid red'
430
+ },
431
+ '& .MuiAvatar-root': {
432
+ width: 32,
433
+ height: 32,
434
+ ml: -0.5,
435
+ mr: 1
436
+ },
437
+ '&:before': {
438
+ content: '""',
439
+ display: 'block',
440
+ position: 'absolute',
441
+ top: 0,
442
+ right: 14,
443
+ width: 10,
444
+ height: 10,
445
+ bgcolor: 'primary',
446
+ transform: 'translateY(-50%) rotate(45deg)',
447
+ zIndex: 0
448
+ }
449
+ }
450
+ },
451
+ transformOrigin: {
452
+ horizontal: 20,
453
+ vertical: 136
454
+ },
455
+ anchorOrigin: {
456
+ horizontal: 'right',
457
+ vertical: 'top'
458
+ }
459
+ }, /*#__PURE__*/_react.default.createElement(_core.MenuItem, {
460
+ disabled: !isHost,
461
+ onClick: toggleAutoPermit
462
+ }, /*#__PURE__*/_react.default.createElement(_core.ListItemIcon, null, /*#__PURE__*/_react.default.createElement(_icons.PersonAdd, {
463
+ fontSize: "small"
464
+ })), autoPermit ? 'Disable auto permit [Auto permit is currently on]' : 'Enable auto permit [Auto permit is currently off]')));
465
+ };
466
+
467
+ var _default = Toolbar;
468
+ exports.default = _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agilemotion/oui-react-js",
3
- "version": "1.4.9",
3
+ "version": "1.5.1",
4
4
  "babel": {
5
5
  "presets": [
6
6
  "@babel/preset-env",