@agilemotion/oui-react-js 1.8.41 → 1.8.42

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.
@@ -90,7 +90,6 @@ const Button = props => {
90
90
  refresh() {
91
91
  let parsedConfig = _Utils.default.parseConfig(config ? config : props.config, props.viewId);
92
92
  setDisabled(_Utils.default.evaluateBooleanExpression(parsedConfig.disabled, parsedConfig.id));
93
- console.log("\n\n\n\nVISIBILITY CHECK [" + props.config.id + "] - [" + parsedConfig.visible + "] - [" + _Utils.default.evaluateBooleanExpression(parsedConfig.visible, parsedConfig.id) + "]");
94
93
  setVisible(_Utils.default.isNull(parsedConfig.visible) || _Utils.default.evaluateBooleanExpression(parsedConfig.visible, parsedConfig.id));
95
94
  }
96
95
  };
@@ -11,6 +11,7 @@ require("./DocumentTemplateDesigner.css");
11
11
  var _DocumentTemplateDesignerComponent = _interopRequireDefault(require("./DocumentTemplateDesignerComponent"));
12
12
  var _Event = _interopRequireDefault(require("../event/Event"));
13
13
  var _EventType = _interopRequireDefault(require("../event/EventType"));
14
+ var _WordDocumentViewer = _interopRequireDefault(require("./WordDocumentViewer"));
14
15
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
16
  const DocumentTemplateDesigner = props => {
16
17
  const [visible, setVisible] = _react.default.useState(false);
@@ -15,10 +15,11 @@ var _EventType = _interopRequireDefault(require("../event/EventType"));
15
15
  var _Observable = _interopRequireDefault(require("../event/Observable"));
16
16
  var _Utils = _interopRequireDefault(require("../Utils"));
17
17
  var _reactPromiseTracker = require("react-promise-tracker");
18
+ var _WordDocumentViewer = require("./WordDocumentViewer");
18
19
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
20
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
20
21
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
21
- (0, _ej2Base.registerLicense)('ORg4AjUWIQA/Gnt2U1hhQlJBfV5AQmBIYVp/TGpJfl96cVxMZVVBJAtUQF1hTX5adkJiWHtWdXBXT2Je');
22
+ (0, _ej2Base.registerLicense)(_WordDocumentViewer.KEY);
22
23
  _ej2ReactDocumenteditor.DocumentEditorContainerComponent.Inject(_ej2ReactDocumenteditor.Toolbar);
23
24
  const DocumentTemplateDesignerComponent = props => {
24
25
  const {
@@ -135,7 +136,7 @@ const DocumentTemplateDesignerComponent = props => {
135
136
  });
136
137
  const formData = new FormData();
137
138
  formData.append('files', file, 'document.docx');
138
- (0, _reactPromiseTracker.trackPromise)(fetch('https://ej2services.syncfusion.com/production/web-services/api/documenteditor/Import', {
139
+ (0, _reactPromiseTracker.trackPromise)(fetch(`${_WordDocumentViewer.DOCSVC}Import`, {
139
140
  method: 'POST',
140
141
  body: formData
141
142
  }).then(response => {
@@ -571,7 +572,7 @@ const DocumentTemplateDesignerComponent = props => {
571
572
  toolbarItems: items,
572
573
  toolbarClick: onToolbarClick,
573
574
  contentChange: onContentChange,
574
- serviceUrl: "https://services.syncfusion.com/react/production/api/documenteditor/",
575
+ serviceUrl: _WordDocumentViewer.DOCSVC,
575
576
  enableToolbar: true
576
577
  })));
577
578
  };
@@ -117,6 +117,12 @@ const DocumentViewer = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defa
117
117
  setVisible(true);
118
118
  }
119
119
  },
120
+ setValue(newValue) {
121
+ setValue(newValue);
122
+ },
123
+ getValue() {
124
+ return value;
125
+ },
120
126
  getDocumentValue: async () => {
121
127
  if (wordEditorValueHandler.api) {
122
128
  return await wordEditorValueHandler.api.getValue();
@@ -159,7 +165,8 @@ const DocumentViewer = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defa
159
165
  readOnly: _Utils.default.evaluateBooleanExpression(parsedConfig.readOnly, props.config.id),
160
166
  commentsOnly: _Utils.default.evaluateBooleanExpression(parsedConfig.commentsOnly, props.config.id),
161
167
  enableUpload: _Utils.default.evaluateBooleanExpression(parsedConfig.enableUpload, props.config.id),
162
- trackChanges: _Utils.default.evaluateBooleanExpression(parsedConfig.trackChanges, props.config.id)
168
+ trackChanges: _Utils.default.evaluateBooleanExpression(parsedConfig.trackChanges, props.config.id),
169
+ id: props.config.id
163
170
  }));
164
171
  }));
165
172
  var _default = exports.default = DocumentViewer;
@@ -261,6 +261,12 @@ class Icon extends _react.Component {
261
261
  color: '#2e7d32'
262
262
  }
263
263
  });
264
+ } else if (this.props.id === 'MINUTES') {
265
+ return /*#__PURE__*/_react.default.createElement(_iconsMaterial.EditNote, {
266
+ style: {
267
+ color: '#2e7d32'
268
+ }
269
+ });
264
270
  }
265
271
  return null;
266
272
  }
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = void 0;
6
+ exports.default = exports.KEY = exports.DOCSVC = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
8
  var _reactPromiseTracker = require("react-promise-tracker");
9
9
  var _Utils = _interopRequireDefault(require("../Utils"));
@@ -14,7 +14,9 @@ var _ej2Base = require("@syncfusion/ej2-base");
14
14
  var _Alert = _interopRequireDefault(require("react-bootstrap/Alert"));
15
15
  var _LottieIcon = _interopRequireDefault(require("./LottieIcon"));
16
16
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
- (0, _ej2Base.registerLicense)('ORg4AjUWIQA/Gnt2U1hhQlJBfV5AQmBIYVp/TGpJfl96cVxMZVVBJAtUQF1hTX5adkJiWHtWdXBXT2Je');
17
+ const KEY = exports.KEY = 'ORg4AjUWIQA/Gnt2U1hhQlJBfV5AQmBIYVp/TGpJfl96cVxMZVVBJAtUQF1hTX5adkJiWHtWdXBXT2Je';
18
+ (0, _ej2Base.registerLicense)(KEY);
19
+ const DOCSVC = exports.DOCSVC = "https://document.syncfusion.com/web-services/docx-editor/api/documenteditor/";
18
20
  _ej2ReactDocumenteditor.DocumentEditorContainerComponent.Inject(_ej2ReactDocumenteditor.Toolbar);
19
21
  const WordDocumentViewer = props => {
20
22
  const [container, setContainer] = _react.default.useState(null);
@@ -75,7 +77,7 @@ const WordDocumentViewer = props => {
75
77
  });
76
78
  const formData = new FormData();
77
79
  formData.append('files', file, 'document.docx');
78
- (0, _reactPromiseTracker.trackPromise)(fetch('https://ej2services.syncfusion.com/production/web-services/api/documenteditor/Import', {
80
+ (0, _reactPromiseTracker.trackPromise)(fetch(`${DOCSVC}Import`, {
79
81
  method: 'POST',
80
82
  body: formData
81
83
  }).then(response => {
@@ -147,7 +149,7 @@ const WordDocumentViewer = props => {
147
149
  style: {
148
150
  height: '100%'
149
151
  },
150
- id: 'parent-container'
152
+ id: `parent-container`
151
153
  }, !visible && /*#__PURE__*/_react.default.createElement("div", {
152
154
  style: {
153
155
  height: '100%',
@@ -176,8 +178,8 @@ const WordDocumentViewer = props => {
176
178
  style: {
177
179
  color: 'rgba(255, 255, 255, 0.8)'
178
180
  }
179
- }, errorMessage))), visible && items && (_Utils.default.isNull(props.trackChanges) || props.trackChanges === true) && /*#__PURE__*/_react.default.createElement(_ej2ReactDocumenteditor.DocumentEditorContainerComponent, {
180
- id: "container",
181
+ }, errorMessage))), items && (_Utils.default.isNull(props.trackChanges) || props.trackChanges === true) && /*#__PURE__*/_react.default.createElement(_ej2ReactDocumenteditor.DocumentEditorContainerComponent, {
182
+ id: `${props.id}-container`,
181
183
  height: '690px',
182
184
  ref: scope => {
183
185
  setContainer(scope);
@@ -188,14 +190,15 @@ const WordDocumentViewer = props => {
188
190
  container.documentEditor.resize();
189
191
  }
190
192
  },
193
+ enablePersistence: false,
191
194
  toolbarItems: items,
192
195
  restrictEditing: props.readOnly,
193
196
  showPropertiesPane: false,
194
197
  enableTrackChanges: true,
195
- serviceUrl: "https://services.syncfusion.com/react/production/api/documenteditor/",
198
+ serviceUrl: DOCSVC,
196
199
  enableToolbar: !(props.readOnly || props.commentsOnly)
197
- }), visible && items && props.trackChanges === false && /*#__PURE__*/_react.default.createElement(_ej2ReactDocumenteditor.DocumentEditorContainerComponent, {
198
- id: "container",
200
+ }), items && props.trackChanges === false && /*#__PURE__*/_react.default.createElement(_ej2ReactDocumenteditor.DocumentEditorContainerComponent, {
201
+ id: `${props.id}-container`,
199
202
  height: '690px',
200
203
  ref: scope => {
201
204
  setContainer(scope);
@@ -206,10 +209,11 @@ const WordDocumentViewer = props => {
206
209
  container.documentEditor.resize();
207
210
  }
208
211
  },
212
+ enablePersistence: false,
209
213
  toolbarItems: items,
210
214
  restrictEditing: props.readOnly,
211
215
  showPropertiesPane: false,
212
- serviceUrl: "https://services.syncfusion.com/react/production/api/documenteditor/",
216
+ serviceUrl: DOCSVC,
213
217
  enableToolbar: !(props.readOnly || props.commentsOnly)
214
218
  }));
215
219
  };
@@ -29,6 +29,7 @@ const Toolbar = props => {
29
29
  const openMoreActions = Boolean(anchorEl);
30
30
  const leaveButtonOpen = Boolean(leaveButtonAnchorEl);
31
31
  const [screenShared, setScreenShared] = (0, _react.useState)(false);
32
+ const [minutesShown, setMinutesShown] = (0, _react.useState)(false);
32
33
  const [roomStatus, setRoomStatus] = (0, _react.useState)();
33
34
  const [raisedHandsNames, setRaisedHandsNames] = (0, _react.useState)([]);
34
35
  const [buttonVisibility, setButtonVisibility] = (0, _react.useState)({});
@@ -60,6 +61,9 @@ const Toolbar = props => {
60
61
  (0, _react.useEffect)(() => {
61
62
  setScreenShared(props.screenShared);
62
63
  }, [props.screenShared]);
64
+ (0, _react.useEffect)(() => {
65
+ setMinutesShown(props.minutesShown);
66
+ }, [props.minutesShown]);
63
67
  (0, _react.useEffect)(() => {
64
68
  setIsRecording(props.isRecording);
65
69
  }, [props.isRecording]);
@@ -143,6 +147,15 @@ const Toolbar = props => {
143
147
  const showChat = () => {
144
148
  eventHandler.showChat();
145
149
  };
150
+ const showMinutes = () => {
151
+ eventHandler.showMinutes();
152
+ };
153
+ const hideMinutes = () => {
154
+ eventHandler.hideMinutes();
155
+ };
156
+ const saveMinutes = () => {
157
+ eventHandler.saveMinutes();
158
+ };
146
159
  const raiseHand = () => {
147
160
  eventHandler.raiseHand();
148
161
  };
@@ -401,7 +414,63 @@ const Toolbar = props => {
401
414
  id: 'CHAT_BUBBLE'
402
415
  })), /*#__PURE__*/_react.default.createElement("div", {
403
416
  className: 'text'
404
- }, "Chat"))))))), roomStatus === 'SESSION' && /*#__PURE__*/_react.default.createElement("div", {
417
+ }, "Chat"))))))), isHost && roomStatus === 'SESSION' && /*#__PURE__*/_react.default.createElement("div", {
418
+ className: 'button-wrapper no-margin no-padding'
419
+ }, /*#__PURE__*/_react.default.createElement(_ToolbarButton.default, {
420
+ root: buttonStripRef,
421
+ onVisibilityChange: visible => handleVisibilityChange('minutes', visible)
422
+ }, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
423
+ title: "Minutes"
424
+ }, /*#__PURE__*/_react.default.createElement(_Button.default, {
425
+ onClick: () => {
426
+ if (minutesShown) {
427
+ hideMinutes();
428
+ } else {
429
+ showMinutes();
430
+ }
431
+ },
432
+ style: {
433
+ color: minutesShown ? '#8eb2f5' : '#404239',
434
+ marginRight: '4px'
435
+ }
436
+ }, /*#__PURE__*/_react.default.createElement("div", {
437
+ style: {
438
+ height: '100%'
439
+ }
440
+ }, /*#__PURE__*/_react.default.createElement("div", {
441
+ className: 'icon'
442
+ }, minutesShown ? /*#__PURE__*/_react.default.createElement(_Icon.default, {
443
+ id: 'CLOSE'
444
+ }) : /*#__PURE__*/_react.default.createElement(_Icon.default, {
445
+ id: 'MINUTES'
446
+ })), /*#__PURE__*/_react.default.createElement("div", {
447
+ className: 'text'
448
+ }, minutesShown ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "Hide") : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "Minutes"))))))), minutesShown && roomStatus === 'SESSION' && /*#__PURE__*/_react.default.createElement("div", {
449
+ className: 'button-wrapper no-margin no-padding'
450
+ }, /*#__PURE__*/_react.default.createElement(_ToolbarButton.default, {
451
+ root: buttonStripRef,
452
+ onVisibilityChange: visible => handleVisibilityChange('saveMinutes', visible)
453
+ }, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
454
+ title: "Save Minutes"
455
+ }, /*#__PURE__*/_react.default.createElement(_Button.default, {
456
+ onClick: () => {
457
+ saveMinutes();
458
+ },
459
+ style: {
460
+ color: '#404239',
461
+ marginRight: '4px'
462
+ }
463
+ }, /*#__PURE__*/_react.default.createElement("div", {
464
+ style: {
465
+ height: '100%'
466
+ }
467
+ }, /*#__PURE__*/_react.default.createElement("div", {
468
+ className: 'icon'
469
+ }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
470
+ id: 'SAVE'
471
+ })), /*#__PURE__*/_react.default.createElement("div", {
472
+ className: 'text'
473
+ }, "Save")))))), roomStatus === 'SESSION' && /*#__PURE__*/_react.default.createElement("div", {
405
474
  className: 'button-wrapper'
406
475
  }, raisedHands.length > 0 && /*#__PURE__*/_react.default.createElement("div", {
407
476
  className: 'marker'
@@ -661,7 +730,29 @@ const Toolbar = props => {
661
730
  }
662
731
  }, /*#__PURE__*/_react.default.createElement(_material.ListItemIcon, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
663
732
  id: 'CHAT_BUBBLE'
664
- })), /*#__PURE__*/_react.default.createElement("div", null, hasUnreadChats ? '1' : '', "\xA0Chat"))), !buttonVisibility.raiseHand && roomStatus === 'SESSION' && /*#__PURE__*/_react.default.createElement("div", {
733
+ })), /*#__PURE__*/_react.default.createElement("div", null, hasUnreadChats ? '1' : '', "\xA0Chat"))), !buttonVisibility.minutes && roomStatus === 'SESSION' && /*#__PURE__*/_react.default.createElement("div", {
734
+ className: 'button-wrapper no-margin no-padding'
735
+ }, /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
736
+ onClick: () => {
737
+ if (minutesShown) {
738
+ hideMinutes();
739
+ } else {
740
+ showMinutes();
741
+ }
742
+ }
743
+ }, /*#__PURE__*/_react.default.createElement(_material.ListItemIcon, null, minutesShown ? /*#__PURE__*/_react.default.createElement(_Icon.default, {
744
+ id: 'CLOSE'
745
+ }) : /*#__PURE__*/_react.default.createElement(_Icon.default, {
746
+ id: 'DESCRIPTION'
747
+ })), minutesShown ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "Hide Minutes") : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "Minutes"))), minutesShown && roomStatus === 'SESSION' && /*#__PURE__*/_react.default.createElement("div", {
748
+ className: 'button-wrapper no-margin no-padding'
749
+ }, /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
750
+ onClick: () => {
751
+ saveMinutes();
752
+ }
753
+ }, /*#__PURE__*/_react.default.createElement(_material.ListItemIcon, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
754
+ id: 'SAVE'
755
+ })), "Save Minutes")), !buttonVisibility.raiseHand && roomStatus === 'SESSION' && /*#__PURE__*/_react.default.createElement("div", {
665
756
  className: 'button-wrapper no-margin no-padding'
666
757
  }, /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
667
758
  onClick: () => {
@@ -65,6 +65,9 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
65
65
  const [screenShared, setScreenShared] = _react.default.useState(null);
66
66
  const [startScreenSharing, setStartScreenSharing] = _react.default.useState(false);
67
67
  const [raisedHands, setRaisedHands] = (0, _react.useState)([]);
68
+ const [minutesShown, setMinutesShown] = _react.default.useState(false);
69
+ const [startShowingMinutes, setStartShowingMinutes] = _react.default.useState(false);
70
+ const vcRoomWorkspaceRef = (0, _react.useRef)();
68
71
  const api = () => {
69
72
  return {
70
73
  loadChats() {
@@ -472,6 +475,18 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
472
475
  setScreenShared(false);
473
476
  setStartScreenSharing(false);
474
477
  },
478
+ showMinutes: () => {
479
+ setStartShowingMinutes(true);
480
+ },
481
+ hideMinutes: () => {
482
+ setMinutesShown(false);
483
+ setStartShowingMinutes(false);
484
+ },
485
+ saveMinutes: () => {
486
+ if (vcRoomWorkspaceRef.current && vcRoomWorkspaceRef.current.saveMinutes) {
487
+ vcRoomWorkspaceRef.current.saveMinutes();
488
+ }
489
+ },
475
490
  recordMeeting: () => {
476
491
  recordMeeting();
477
492
  },
@@ -494,6 +509,7 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
494
509
  audioMuted: audioMuted,
495
510
  displayState: displayState,
496
511
  screenShared: screenShared,
512
+ minutesShown: minutesShown,
497
513
  roomStatus: roomStatus,
498
514
  isHost: props.calendarEvent.host.username === _ApplicationManager.default.getUserDetails().username,
499
515
  autoPermit: !props.calendarEvent.host.askToJoin,
@@ -522,12 +538,16 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
522
538
  },
523
539
  className: 'centered-flex-box'
524
540
  }, /*#__PURE__*/_react.default.createElement("div", null, _VCRoom.SYSTEM_ERROR_MESSAGE)), rtpCapabilities && participants && currentUserFullName && (roomStatus === Status.SESSION || roomStatus === Status.LOBBY) && /*#__PURE__*/_react.default.createElement(_VCRoomWorkspace.default, {
541
+ ref: vcRoomWorkspaceRef,
525
542
  participants: participants,
526
543
  mode: meetingParticipantGridMode,
544
+ viewId: props.viewId,
527
545
  audioMuted: audioMuted,
528
546
  videoMuted: videoMuted,
529
547
  meetingTitle: props.calendarEvent.title,
530
- meetingId: props.calendarEvent.id,
548
+ eventKey: props.calendarEvent.key,
549
+ minutesDocumentId: props.calendarEvent.minutesDocumentId,
550
+ procMeetingId: props.procMeetingId,
531
551
  currentUserFullName: currentUserFullName,
532
552
  onGridSetup: () => {
533
553
  //setSideBarTab('People');
@@ -545,6 +565,16 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
545
565
  setScreenShared(true);
546
566
  setStartScreenSharing(false);
547
567
  },
568
+ startShowingMinutes: startShowingMinutes,
569
+ onStartShowingMinutes: () => {
570
+ setMinutesShown(true);
571
+ setStartShowingMinutes(false);
572
+ },
573
+ onStopShowingMinutes: () => {
574
+ setMinutesShown(false);
575
+ setStartShowingMinutes(false);
576
+ },
577
+ minutesShown: minutesShown,
548
578
  autoPermit: autoPermit,
549
579
  rtpCapabilities: rtpCapabilities,
550
580
  screenShared: screenShared,
@@ -76,7 +76,8 @@ const VCRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.forw
76
76
  }, props.config.roomType === 'training' ? /*#__PURE__*/_react.default.createElement(_TrainingRoom.default, {
77
77
  settings: settings,
78
78
  calendarEvent: calendarEvent,
79
- handle: vcHandle
79
+ handle: vcHandle,
80
+ viewId: props.viewId
80
81
  }) : /*#__PURE__*/_react.default.createElement("div", null, "Unknown room type"))));
81
82
  }));
82
83
  var _default = exports.default = VCRoom;
@@ -19,6 +19,13 @@ var _LobbyWaitingList = _interopRequireDefault(require("./LobbyWaitingList"));
19
19
  var _VCRoom = require("./VCRoom");
20
20
  var _SideBarContent = _interopRequireDefault(require("./SideBarContent"));
21
21
  var _ApplicationManager = _interopRequireDefault(require("../../ApplicationManager"));
22
+ var _WordDocumentViewer = _interopRequireDefault(require("../WordDocumentViewer"));
23
+ var _Utils = _interopRequireDefault(require("../../Utils"));
24
+ var _DocumentViewer = _interopRequireDefault(require("../DocumentViewer"));
25
+ var _Event = _interopRequireDefault(require("../../event/Event"));
26
+ var _Observable = _interopRequireDefault(require("../../event/Observable"));
27
+ var _EventType = _interopRequireDefault(require("../../event/EventType"));
28
+ var _uuid = require("uuid");
22
29
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
23
30
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
24
31
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -26,9 +33,44 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
26
33
 
27
34
  const MAX_COLS = 3;
28
35
  const MAX_ROWS = 2;
36
+ const meetingViewConfig2 = {
37
+ "type": "documentViewer",
38
+ "id": "meetingMinute",
39
+ "fileType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
40
+ "attributes": {
41
+ "style": {
42
+ "width": "100%",
43
+ "minHeight": "100%",
44
+ "height": "100%",
45
+ "padding": "24px"
46
+ }
47
+ },
48
+ "trackChanges": false,
49
+ "readOnly": false,
50
+ "commentsOnly": false,
51
+ "eventHandlingConfig": {
52
+ "subscriptions": [{
53
+ "publisher": "vcRoom",
54
+ "eventType": "DATA_ARRIVED",
55
+ "actions": [{
56
+ "actionType": "loadData"
57
+ }]
58
+ }]
59
+ },
60
+ "dataService": {
61
+ "type": "rest",
62
+ "url": "/docs/api/v1/manager/find",
63
+ "method": "GET",
64
+ "parameters": [{
65
+ "name": "documentId",
66
+ "httpParameterType": "PATH_VARIABLE",
67
+ "value": "c28a4a56-6fc0-4887-bca0-29f43da0b3b2"
68
+ }]
69
+ }
70
+ };
29
71
 
30
72
  // TODO : Clean-up all tracks and producers and consumers when the component closes
31
- const VCRoomWorkspace = props => {
73
+ const VCRoomWorkspace = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
32
74
  const [currentUserParticipant, setCurrentUserParticipant] = _react.default.useState(null);
33
75
  const [inViewParticipants, setInViewParticipants] = _react.default.useState([]);
34
76
  const [consumerTransport, setConsumerTransport] = _react.default.useState(null);
@@ -43,6 +85,20 @@ const VCRoomWorkspace = props => {
43
85
  const [shareScreenConsumer, setShareScreenConsumer] = _react.default.useState(null);
44
86
  const [grid, setGrid] = _react.default.useState(null);
45
87
  const [eventHandler] = (0, _react.useState)({});
88
+ const [minutesShown, setMinutesShown] = _react.default.useState(false);
89
+ const [showMinutes, setShowMinutes] = _react.default.useState(false);
90
+ const [meetingViewHandler, setMeetingViewHandler] = _react.default.useState(null);
91
+ const [minutesDocument, setMinutesDocument] = _react.default.useState(null);
92
+ const [meetingViewConfig, setMeetingViewConfig] = _react.default.useState(null);
93
+ const [hasLoadedMinutes, setHasLoadedMinutes] = _react.default.useState(false);
94
+
95
+ // Create handler once on mount
96
+ _react.default.useEffect(() => {
97
+ if (!meetingViewHandler) {
98
+ setMeetingViewHandler({});
99
+ }
100
+ }, []);
101
+ const wordEditorValueHandler = (0, _react.useRef)({});
46
102
  const transports = (0, _react.useRef)(new _Transports.default());
47
103
  const shareScreenVideoRef = (0, _react.useRef)();
48
104
  const shareScreenStream = (0, _react.useRef)();
@@ -50,6 +106,8 @@ const VCRoomWorkspace = props => {
50
106
  waitingList,
51
107
  roomStatus,
52
108
  meetingId,
109
+ minutesDocumentId,
110
+ eventKey,
53
111
  meetingChat,
54
112
  sideBarTab,
55
113
  meetingTitle,
@@ -61,8 +119,91 @@ const VCRoomWorkspace = props => {
61
119
  onloadScreenShareData,
62
120
  displayState,
63
121
  startScreenSharing,
64
- participants
122
+ participants,
123
+ startShowingMinutes,
124
+ onStartShowingMinutes,
125
+ onStopShowingMinutes,
126
+ minutesShown: minutesShownProp
65
127
  } = props;
128
+ const saveMinutes = async () => {
129
+ try {
130
+ if (!meetingViewHandler || !meetingViewHandler.api) {
131
+ console.error("Meeting view handler not available");
132
+ return;
133
+ }
134
+ const file = await meetingViewHandler.api.getDocumentValue();
135
+ if (!file) {
136
+ console.error("No document to save");
137
+ return;
138
+ }
139
+ const newDocumentId = (0, _uuid.v4)();
140
+ const metadata = {
141
+ documentRepositoryCacheId: newDocumentId,
142
+ correlationId: props.viewId + ".minutesDocument",
143
+ name: file.name,
144
+ type: file.type
145
+ };
146
+ const accessToken = sessionStorage.getItem("accessToken");
147
+ const idToken = sessionStorage.getItem("idToken");
148
+ const location = window.location.protocol + "//" + window.location.hostname;
149
+ let data = new FormData();
150
+ data.append("metadata", JSON.stringify(metadata));
151
+ data.append("file", file);
152
+ let fetchConfig = {
153
+ method: 'POST',
154
+ headers: {
155
+ 'Accept': 'application/json',
156
+ 'Authorization': 'Bearer ' + accessToken,
157
+ 'idToken': idToken,
158
+ 'tenant': _ApplicationManager.default.getActiveTenant()
159
+ },
160
+ body: data
161
+ };
162
+ let uploadUrl = location + _ApplicationManager.default.getContextRoot() + "/docs/api/v1/manager/upload/save";
163
+ const uploadResponse = await fetch(encodeURI(uploadUrl), fetchConfig);
164
+ if (!uploadResponse.ok) {
165
+ throw new Error('Upload failed');
166
+ }
167
+ const updatePayload = {
168
+ id: eventKey,
169
+ minutesDocumentId: newDocumentId
170
+ };
171
+ let updateFetchConfig = {
172
+ method: 'POST',
173
+ headers: {
174
+ 'Accept': 'application/json',
175
+ 'Content-Type': 'application/json',
176
+ 'Authorization': 'Bearer ' + accessToken,
177
+ 'idToken': idToken,
178
+ 'tenant': _ApplicationManager.default.getActiveTenant()
179
+ },
180
+ body: JSON.stringify(updatePayload)
181
+ };
182
+ let updateUrl = location + _ApplicationManager.default.getContextRoot() + "/tender/api/v1/evaluation/meeting/minuteDocument";
183
+ const updateResponse = await fetch(encodeURI(updateUrl), updateFetchConfig);
184
+ if (!updateResponse.ok) {
185
+ throw new Error('Failed to update meeting minutes document');
186
+ }
187
+ console.log("Minutes saved successfully");
188
+ let message = {
189
+ messageType: 'SUCCESS',
190
+ message: 'Meeting minutes saved successfully'
191
+ };
192
+ let event = new _Event.default(meetingViewHandler, props.viewId, message);
193
+ _Observable.default.fireEvent(_EventType.default.MESSAGE_ARRIVED, event);
194
+ } catch (e) {
195
+ console.error("Error saving minutes:", e);
196
+ let message = {
197
+ messageType: 'ERROR',
198
+ message: 'Failed to save meeting minutes'
199
+ };
200
+ let event = new _Event.default(meetingViewHandler, props.viewId, message);
201
+ _Observable.default.fireEvent(_EventType.default.MESSAGE_ARRIVED, event);
202
+ }
203
+ };
204
+ _react.default.useImperativeHandle(ref, () => ({
205
+ saveMinutes
206
+ }));
66
207
  const startShareScreen = () => {
67
208
  produceScreenShare();
68
209
  };
@@ -306,6 +447,65 @@ const VCRoomWorkspace = props => {
306
447
  produceScreenShare();
307
448
  }
308
449
  }, [startScreenSharing]);
450
+ (0, _react.useEffect)(() => {
451
+ if (startShowingMinutes) {
452
+ setShowMinutes(true);
453
+ setMinutesShown(true);
454
+ onStartShowingMinutes();
455
+ }
456
+ }, [startShowingMinutes]);
457
+ (0, _react.useEffect)(() => {
458
+ // Sync with parent's minutesShown state
459
+ if (minutesShownProp === false && minutesShown === true) {
460
+ setShowMinutes(false);
461
+ setMinutesShown(false);
462
+ }
463
+ }, [minutesShownProp]);
464
+ (0, _react.useEffect)(() => {
465
+ if (minutesDocumentId) {
466
+ const newConfig = {
467
+ "type": "documentViewer",
468
+ "id": "meetingMinute",
469
+ "fileType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
470
+ "attributes": {
471
+ "style": {
472
+ "width": "calc(100% - 436px)",
473
+ "minHeight": "100%",
474
+ "height": "100%",
475
+ "padding": "24px"
476
+ },
477
+ "label": "Meeting Minutes"
478
+ },
479
+ "trackChanges": true,
480
+ "readOnly": false,
481
+ "commentsOnly": false,
482
+ "eventHandlingConfig": {
483
+ "subscriptions": []
484
+ },
485
+ "dataService": {
486
+ "type": "rest",
487
+ "url": "/docs/api/v1/manager/find",
488
+ "method": "GET",
489
+ "parameters": [{
490
+ "name": "documentId",
491
+ "httpParameterType": "PATH_VARIABLE",
492
+ "value": minutesDocumentId
493
+ }]
494
+ }
495
+ };
496
+ setMeetingViewConfig(newConfig);
497
+ }
498
+ }, [minutesDocumentId]);
499
+ (0, _react.useEffect)(() => {
500
+ if (meetingViewHandler && meetingViewHandler.api) {
501
+ meetingViewHandler.api.loadData();
502
+ }
503
+ }, [meetingViewHandler]);
504
+ (0, _react.useEffect)(() => {
505
+ if (meetingViewConfig2 && minutesDocumentId && meetingViewHandler && meetingViewHandler.api && showMinutes) {
506
+ meetingViewHandler.api.refresh();
507
+ }
508
+ }, [minutesDocumentId, meetingViewConfig2, meetingViewHandler, showMinutes]);
309
509
  (0, _react.useEffect)(() => {
310
510
  if (onloadScreenShareData && device && consumerTransport) {
311
511
  consume(onloadScreenShareData);
@@ -476,8 +676,11 @@ const VCRoomWorkspace = props => {
476
676
  isHost: isHost
477
677
  }));
478
678
  }
679
+ function getMeetingDocument() {
680
+ return meetingViewHandler.value;
681
+ }
479
682
  function renderParticipantGrid() {
480
- return (!screenShared && !whiteBoardShown || screenShared && !showSharedScreen && !someoneSharing) && /*#__PURE__*/_react.default.createElement(_Box.default, {
683
+ return (!screenShared && !whiteBoardShown && !minutesShown || screenShared && !showSharedScreen && !someoneSharing && !minutesShown) && /*#__PURE__*/_react.default.createElement(_Box.default, {
481
684
  style: {
482
685
  flexGrow: 1,
483
686
  height: displayState === 'MAXIMIZED' ? 'calc(100% - 232px)' : '100%',
@@ -563,13 +766,30 @@ const VCRoomWorkspace = props => {
563
766
  maxHeight: '100%',
564
767
  zIndex: '0'
565
768
  }
769
+ }))), /*#__PURE__*/_react.default.createElement("div", {
770
+ className: 'content-box',
771
+ style: {
772
+ display: !(minutesShown && showMinutes) ? 'none' : null,
773
+ backgroundColor: 'white',
774
+ padding: '16px',
775
+ overflow: 'auto'
776
+ }
777
+ }, /*#__PURE__*/_react.default.createElement("div", {
778
+ style: {
779
+ width: '100%',
780
+ maxHeight: '100%'
781
+ }
782
+ }, /*#__PURE__*/_react.default.createElement(_DocumentViewer.default, {
783
+ config: meetingViewConfig2,
784
+ handle: meetingViewHandler,
785
+ viewId: props.viewId
566
786
  })))), /*#__PURE__*/_react.default.createElement("div", {
567
787
  className: `${displayState === 'MAXIMIZED' ? 'row-*-*' : ''}`,
568
788
  style: {
569
789
  width: displayState === 'MAXIMIZED' ? '100%' : '200px',
570
790
  height: displayState === 'MAXIMIZED' ? '152px' : displayState === 'MINIMIZED' ? '100%' : null,
571
791
  marginRight: '0',
572
- display: screenShared && showSharedScreen || someoneSharing ? 'none' : displayState === 'MAXIMIZED' ? 'flex' : displayState === 'MINIMIZED' ? 'table-cell' : '',
792
+ display: screenShared && showSharedScreen || someoneSharing || minutesShown && showMinutes ? 'none' : displayState === 'MAXIMIZED' ? 'flex' : displayState === 'MINIMIZED' ? 'table-cell' : '',
573
793
  alignItems: 'center',
574
794
  verticalAlign: 'top',
575
795
  bottom: '8px',
@@ -609,5 +829,5 @@ const VCRoomWorkspace = props => {
609
829
  rejectUserHandler: props.rejectUserHandler,
610
830
  acceptUserHandler: props.acceptUserHandler
611
831
  }))) : null;
612
- };
832
+ });
613
833
  var _default = exports.default = VCRoomWorkspace;
@@ -153,6 +153,7 @@ class Calendar {
153
153
  status: event.extendedProps.status,
154
154
  host: event.extendedProps.host,
155
155
  chairPersonId: event.chairPersonId ? event.chairPersonId : event.extendedProps.host.id,
156
+ minutesDocumentId: event.minutesDocumentId,
156
157
  attendees: event.extendedProps.attendees,
157
158
  privacyType: event.extendedProps.privacyType,
158
159
  documents: event.extendedProps.documents,
@@ -13,20 +13,25 @@ class ProcurementMeetings {
13
13
  constructor(resolver) {
14
14
  this.resolver = resolver;
15
15
  }
16
- emitSocketEvent = (systemEventType, data, meeting) => {
17
- let receipientIds = [];
18
- for (const attendee of meeting.attendees) {
19
- let username = attendee.username;
20
- if (username !== _ApplicationManager.default.getUserDetails().username) {
21
- receipientIds.push(username);
16
+ emitSocketEvent = (viewId, systemEventType, data, meeting) => {
17
+ return new Promise((resolve, reject) => {
18
+ let recipientIds = [];
19
+ for (const attendee of meeting.attendees) {
20
+ let username = attendee.username;
21
+ if (username !== _ApplicationManager.default.getUserDetails().username) {
22
+ recipientIds.push(username);
23
+ }
22
24
  }
23
- }
24
- let eventData = {
25
- systemEventType: systemEventType,
26
- recipients: receipientIds,
27
- data: data
28
- };
29
- return _SocketManager.default.emitEvent(_VCEventType.VCEventType.SYSTEM_EVENT, eventData);
25
+ let eventData = {
26
+ systemEventType: systemEventType,
27
+ recipients: recipientIds,
28
+ data: data
29
+ };
30
+ _SocketManager.default.emitEvent(_VCEventType.VCEventType.SYSTEM_EVENT, eventData).then(result => resolve(result)).catch(e => {
31
+ _ApplicationManager.default.alert(viewId, "You are currently offline. Please check your network connectivity", "ERROR");
32
+ reject(e);
33
+ });
34
+ });
30
35
  };
31
36
  startMeeting = meeting => {
32
37
  return this.emitSocketEvent("startMeeting", {
@@ -57,13 +62,25 @@ class ProcurementMeetings {
57
62
  }
58
63
  } else if (event.systemEventType === 'openPoll') {
59
64
  _ApplicationManager.default.resolveComponentApi("vcRoom").loadChats();
60
- } else if (event.systemEventType === 'procurementMeetingContinue') {
61
- let button = _ApplicationManager.default.resolveComponentApi("procurementMeetingContinue");
62
- if (button) {
63
- button.visible = true;
65
+ } else if (event.systemEventType === 'meetingStepChanged') {
66
+ let api = _ApplicationManager.default.resolveComponentApi(viewId);
67
+ if (api.model.currentMeetingStep === 'QUORUM' && data.step === 'COMPLIANCE_EVALUATION') {
68
+ this.showComponent("preEvaluationNext");
69
+ } else if (api.model.currentMeetingStep === 'PRE_COMPLIANCE_EVALUATION' && data.step === 'FUNCTIONAL_EVALUATION') {
70
+ this.showComponent("complianceEvaluationNext");
71
+ } else if (api.model.currentMeetingStep === 'COMPLIANCE_EVALUATION' && data.step === 'PRICE_EVALUATION') {
72
+ this.showComponent("functionalEvaluationNext");
73
+ } else if (api.model.currentMeetingStep === 'FUNCTIONAL_EVALUATION' && data.step === 'CONDITION_OF_AWARD') {
74
+ this.showComponent("priceEvaluationNext");
64
75
  }
65
76
  }
66
77
  };
78
+ showComponent = id => {
79
+ let component = _ApplicationManager.default.resolveComponentApi(id);
80
+ if (component) {
81
+ component.visible = true;
82
+ }
83
+ };
67
84
  }
68
85
  exports.ProcurementMeetings = ProcurementMeetings;
69
86
  const instance = new ProcurementMeetings();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agilemotion/oui-react-js",
3
- "version": "1.8.41",
3
+ "version": "1.8.42",
4
4
  "description": "AgileMotion React UI Component Library - A comprehensive collection of dashboard components, forms, media controls, and more",
5
5
  "license": "ISC",
6
6
  "author": "",