@agilemotion/oui-react-js 1.8.40 → 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.
- package/dist/components/Button.css +2 -1
- package/dist/components/DocumentTemplateDesigner.js +1 -0
- package/dist/components/DocumentTemplateDesignerComponent.js +4 -3
- package/dist/components/DocumentViewer.js +10 -3
- package/dist/components/Icon.js +6 -0
- package/dist/components/WordDocumentViewer.js +14 -10
- package/dist/components/media/SideBarContent.js +2 -1
- package/dist/components/media/Toolbar.js +93 -2
- package/dist/components/media/TrainingRoom.js +31 -1
- package/dist/components/media/VCRoom.js +2 -1
- package/dist/components/media/VCRoomWorkspace.js +225 -5
- package/dist/components/media/chat/ChatRoom.js +4 -2
- package/dist/components/media/chat/PollContainer.js +52 -2
- package/dist/js/Calendar.js +2 -0
- package/dist/js/ProcurementMeetings.js +34 -17
- package/package.json +1 -1
|
@@ -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)(
|
|
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(
|
|
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:
|
|
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();
|
|
@@ -129,10 +135,10 @@ const DocumentViewer = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defa
|
|
|
129
135
|
return visible && /*#__PURE__*/_react.default.createElement("div", {
|
|
130
136
|
style: _Utils.default.mergeStyles({}, props.config)
|
|
131
137
|
}, props.config.attributes?.label && /*#__PURE__*/_react.default.createElement("div", {
|
|
132
|
-
style: _Utils.default.mergeObjects(
|
|
138
|
+
style: _Utils.default.mergeObjects({
|
|
133
139
|
fontSize: '20px',
|
|
134
140
|
color: '#1d253b'
|
|
135
|
-
})
|
|
141
|
+
}, props.config.attributes?.labelStyle)
|
|
136
142
|
}, label), loading && /*#__PURE__*/_react.default.createElement("div", {
|
|
137
143
|
style: {
|
|
138
144
|
marginTop: '16px'
|
|
@@ -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;
|
package/dist/components/Icon.js
CHANGED
|
@@ -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
|
-
|
|
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(
|
|
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:
|
|
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))),
|
|
180
|
-
id:
|
|
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:
|
|
198
|
+
serviceUrl: DOCSVC,
|
|
196
199
|
enableToolbar: !(props.readOnly || props.commentsOnly)
|
|
197
|
-
}),
|
|
198
|
-
id:
|
|
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:
|
|
216
|
+
serviceUrl: DOCSVC,
|
|
213
217
|
enableToolbar: !(props.readOnly || props.commentsOnly)
|
|
214
218
|
}));
|
|
215
219
|
};
|
|
@@ -35,7 +35,8 @@ const SideBarContent = props => {
|
|
|
35
35
|
}) : /*#__PURE__*/_react.default.createElement(_ChatRoom.default, {
|
|
36
36
|
chatTab: true,
|
|
37
37
|
selectedChat: meetingChat,
|
|
38
|
-
meetingId: meetingId
|
|
38
|
+
meetingId: meetingId,
|
|
39
|
+
isHost: isHost
|
|
39
40
|
})));
|
|
40
41
|
};
|
|
41
42
|
var _default = exports.default = SideBarContent;
|
|
@@ -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.
|
|
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
|
-
|
|
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;
|
|
@@ -90,8 +90,9 @@ const ChatRoom = props => {
|
|
|
90
90
|
let chatParticipant = selectedChat.participants.find(p => p.username === currentUser.username);
|
|
91
91
|
const data = {
|
|
92
92
|
pollId: poll.id,
|
|
93
|
-
optionId: poll.selectedOption,
|
|
94
|
-
chatParticipant: chatParticipant
|
|
93
|
+
optionId: poll.selectedOption || poll.tieBreakerOption,
|
|
94
|
+
chatParticipant: chatParticipant,
|
|
95
|
+
tieBreaker: !_Utils.default.isNull(poll.tieBreakerOption)
|
|
95
96
|
};
|
|
96
97
|
(0, _RestUtils.postData)(`${location + '/' + _ApplicationManager.default.getContextRoot()}/calendar/api/v1/poll/vote`, response => {
|
|
97
98
|
fetchChat();
|
|
@@ -633,6 +634,7 @@ const ChatRoom = props => {
|
|
|
633
634
|
return /*#__PURE__*/_react.default.createElement(_PollContainer.default, {
|
|
634
635
|
poll: message.poll,
|
|
635
636
|
chatTab: props.chatTab,
|
|
637
|
+
isHost: props.isHost,
|
|
636
638
|
pollCreator: message.participant,
|
|
637
639
|
createdDate: message.createdDate,
|
|
638
640
|
submitPollVoteHandler: poll => submitPollVoteHandler(poll),
|
|
@@ -25,7 +25,9 @@ const PollContainer = props => {
|
|
|
25
25
|
const [poll, setPoll] = (0, _react.useState)({});
|
|
26
26
|
const [pollClosed, setPollClosed] = (0, _react.useState)(false);
|
|
27
27
|
const [currentVote, setCurrentVote] = (0, _react.useState)(null);
|
|
28
|
+
const [tieBreakerVote, setTieBreakerVote] = (0, _react.useState)(null);
|
|
28
29
|
const [totalVotes, setTotalVotes] = (0, _react.useState)(0);
|
|
30
|
+
const [tieOptions, setTieOptions] = (0, _react.useState)([]);
|
|
29
31
|
const [socketEventHandler] = (0, _react.useState)({});
|
|
30
32
|
const socketEventHandlerApi = () => {
|
|
31
33
|
return {
|
|
@@ -79,6 +81,14 @@ const PollContainer = props => {
|
|
|
79
81
|
voteCount: -Infinity
|
|
80
82
|
});
|
|
81
83
|
};
|
|
84
|
+
const tieForFirst = function () {
|
|
85
|
+
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
86
|
+
if (!Array.isArray(options) || options.length === 0) return [];
|
|
87
|
+
const counts = options.map(o => o?.voteCount ?? 0);
|
|
88
|
+
const max = Math.max(...counts);
|
|
89
|
+
const leaders = options.filter(o => (o?.voteCount ?? 0) === max);
|
|
90
|
+
return leaders.length >= 2 ? leaders : [];
|
|
91
|
+
};
|
|
82
92
|
(0, _react.useEffect)(() => {
|
|
83
93
|
_VCEventManager.default.addSubscriptions(socketEventHandler, _VCEventType.VCEventType.CHAT_MESSAGE, _VCEventType.VCEventType.SYSTEM_EVENT);
|
|
84
94
|
return () => {
|
|
@@ -89,7 +99,6 @@ const PollContainer = props => {
|
|
|
89
99
|
socketEventHandler.api = socketEventHandlerApi();
|
|
90
100
|
});
|
|
91
101
|
(0, _react.useEffect)(() => {
|
|
92
|
-
console.log('___ POLL: ', props.poll);
|
|
93
102
|
if (props.poll) {
|
|
94
103
|
const renderedPoll = props.poll;
|
|
95
104
|
setPoll(renderedPoll);
|
|
@@ -118,6 +127,7 @@ const PollContainer = props => {
|
|
|
118
127
|
label: option.text
|
|
119
128
|
}));
|
|
120
129
|
});
|
|
130
|
+
setTieOptions(tieForFirst(renderedPoll.options));
|
|
121
131
|
}
|
|
122
132
|
setPollOptions(pollOptionRows);
|
|
123
133
|
}
|
|
@@ -206,7 +216,47 @@ const PollContainer = props => {
|
|
|
206
216
|
style: {
|
|
207
217
|
color: '#945c33'
|
|
208
218
|
}
|
|
209
|
-
}, "You have voted ", props.poll.options.find(o => o.id === poll.selectedOption)?.text))
|
|
219
|
+
}, "You have voted ", props.poll.options.find(o => o.id === poll.selectedOption)?.text)), props.isHost && tieOptions.length > 0 && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
220
|
+
className: "poll-choices",
|
|
221
|
+
style: {
|
|
222
|
+
marginTop: '8px'
|
|
223
|
+
}
|
|
224
|
+
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
225
|
+
style: {
|
|
226
|
+
color: '#945c33',
|
|
227
|
+
borderTop: '1px solid #e1e1e1',
|
|
228
|
+
display: 'inline-block',
|
|
229
|
+
paddingTop: '8px',
|
|
230
|
+
width: '100%'
|
|
231
|
+
}
|
|
232
|
+
}, "Tie breaker"), /*#__PURE__*/_react.default.createElement(_FormControl.default, {
|
|
233
|
+
style: {
|
|
234
|
+
width: '100%'
|
|
235
|
+
}
|
|
236
|
+
}, /*#__PURE__*/_react.default.createElement(_RadioGroup.default, {
|
|
237
|
+
className: "poll-choice-radio-group",
|
|
238
|
+
value: tieBreakerVote ? tieBreakerVote : poll.tieBreakerOption ? poll.tieBreakerOption : '',
|
|
239
|
+
onChange: e => {
|
|
240
|
+
setTieBreakerVote(e.target.value);
|
|
241
|
+
}
|
|
242
|
+
}, pollOptions))), /*#__PURE__*/_react.default.createElement(_Button.default, {
|
|
243
|
+
className: "vote-button",
|
|
244
|
+
variant: "outlined",
|
|
245
|
+
onClick: () => {
|
|
246
|
+
const hasVoted = poll.tieBreakerOption;
|
|
247
|
+
poll.tieBreakerOption = tieBreakerVote ? tieBreakerVote : '';
|
|
248
|
+
props.submitPollVoteHandler(poll);
|
|
249
|
+
if (!hasVoted) {
|
|
250
|
+
_SocketManager.default.emitEvent(_VCEventType.VCEventType.SYSTEM_EVENT, {
|
|
251
|
+
systemEventType: 'TIE_BREAKER_POLL_VOTE',
|
|
252
|
+
recipients: props.pollParticipantIDs,
|
|
253
|
+
data: {
|
|
254
|
+
pollId: poll.id
|
|
255
|
+
}
|
|
256
|
+
}).catch(() => {});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}, "Submit tie breaker Vote"))) : /*#__PURE__*/_react.default.createElement("div", {
|
|
210
260
|
className: "poll-footer"
|
|
211
261
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
212
262
|
style: {
|
package/dist/js/Calendar.js
CHANGED
|
@@ -152,6 +152,8 @@ class Calendar {
|
|
|
152
152
|
description: event.extendedProps.description,
|
|
153
153
|
status: event.extendedProps.status,
|
|
154
154
|
host: event.extendedProps.host,
|
|
155
|
+
chairPersonId: event.chairPersonId ? event.chairPersonId : event.extendedProps.host.id,
|
|
156
|
+
minutesDocumentId: event.minutesDocumentId,
|
|
155
157
|
attendees: event.extendedProps.attendees,
|
|
156
158
|
privacyType: event.extendedProps.privacyType,
|
|
157
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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 === '
|
|
61
|
-
let
|
|
62
|
-
if (
|
|
63
|
-
|
|
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