@agilemotion/oui-react-js 1.8.45 → 1.8.47
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 +6 -0
- package/dist/components/DocumentTemplateDesignerComponent.js +19 -0
- package/dist/components/StepperTitleBar.css +62 -8
- package/dist/components/StepperTitleBar.js +61 -65
- package/dist/components/TabPanel.js +24 -11
- package/dist/components/Toolbar.js +20 -13
- package/dist/components/form/BaseField.js +10 -3
- package/dist/components/form/GridField.js +18 -5
- package/dist/components/form/SelectItem.js +14 -6
- package/dist/components/form/TimePicker.js +17 -8
- package/dist/components/layout/Layout.js +23 -15
- package/dist/components/media/SideBarContent.js +3 -1
- package/dist/components/media/Toolbar.js +2 -80
- package/dist/components/media/TrainingRoom.js +5 -4
- package/dist/components/media/VCRoomParticipant.css +11 -0
- package/dist/components/media/VCRoomParticipant.js +18 -13
- package/dist/components/media/VCRoomWorkspace.js +9 -2
- package/dist/components/media/chat/ChatRoom.js +8 -6
- package/dist/components/media/chat/ChatRooms.scss +3 -5
- package/dist/components/media/chat/PollContainer.js +2 -2
- package/dist/components/menu/MenuItem.js +1 -1
- package/dist/js/ProcurementMeetings.js +22 -8
- package/package.json +1 -1
|
@@ -76,6 +76,12 @@ const DocumentTemplateDesigner = props => {
|
|
|
76
76
|
},
|
|
77
77
|
set loading(val) {
|
|
78
78
|
setLoading(val);
|
|
79
|
+
},
|
|
80
|
+
getDocumentValue: async () => {
|
|
81
|
+
if (templateDesignerHandle.api) {
|
|
82
|
+
return await templateDesignerHandle.api.getValue();
|
|
83
|
+
}
|
|
84
|
+
return null;
|
|
79
85
|
}
|
|
80
86
|
};
|
|
81
87
|
};
|
|
@@ -475,6 +475,22 @@ const DocumentTemplateDesignerComponent = props => {
|
|
|
475
475
|
container.documentEditor.search.find(selectedPropertyRows[0].placeHolder);
|
|
476
476
|
}
|
|
477
477
|
};
|
|
478
|
+
const saveAsBase64 = async () => {
|
|
479
|
+
if (props.allowUnresolvedChanges === false && container.documentEditor.revisions.length > 0) {
|
|
480
|
+
setErrorMessage("Please accept or reject all suggested changes");
|
|
481
|
+
return null;
|
|
482
|
+
}
|
|
483
|
+
if (container) {
|
|
484
|
+
container.documentEditor.editor.stopProtection("password");
|
|
485
|
+
let blob = await container.documentEditor.saveAsBlob('Docx');
|
|
486
|
+
if (props.commentsOnly) {
|
|
487
|
+
container.documentEditor.editor.enforceProtection('password', 'CommentsOnly');
|
|
488
|
+
}
|
|
489
|
+
return new File([blob], props.file?.name ? props.file.name : 'document.docx', {
|
|
490
|
+
type: props.file?.type ? props.file.type : 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
|
|
491
|
+
});
|
|
492
|
+
}
|
|
493
|
+
};
|
|
478
494
|
const api = () => {
|
|
479
495
|
return {
|
|
480
496
|
get id() {
|
|
@@ -482,6 +498,9 @@ const DocumentTemplateDesignerComponent = props => {
|
|
|
482
498
|
},
|
|
483
499
|
highlightSelection: selectedPropertyRow => {
|
|
484
500
|
doHighlightSelection(selectedPropertyRow);
|
|
501
|
+
},
|
|
502
|
+
getValue: () => {
|
|
503
|
+
return saveAsBase64();
|
|
485
504
|
}
|
|
486
505
|
};
|
|
487
506
|
};
|
|
@@ -1,9 +1,28 @@
|
|
|
1
|
+
/* container that holds ALL steps */
|
|
2
|
+
.stepper-container {
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-wrap: wrap; /* allow wrapping */
|
|
5
|
+
width: 100%; /* small space between steps */
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/* each single step wrapper (the thing we flex) */
|
|
9
|
+
.step-item {
|
|
10
|
+
flex: 0 1 180px; /* target width */
|
|
11
|
+
min-width: 140px; /* don’t go too small */
|
|
12
|
+
max-width: 240px; /* don’t go too wide */
|
|
13
|
+
padding-top: 8px;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/* original classes kept */
|
|
1
17
|
.step,
|
|
2
18
|
.stepActive,
|
|
3
19
|
.stepVisited {
|
|
4
20
|
}
|
|
5
21
|
|
|
6
|
-
|
|
22
|
+
/* pill + dot box */
|
|
23
|
+
.box,
|
|
24
|
+
.box-pending,
|
|
25
|
+
.dot {
|
|
7
26
|
border-radius: 100px;
|
|
8
27
|
text-align: center;
|
|
9
28
|
font-size: 14px;
|
|
@@ -11,6 +30,12 @@
|
|
|
11
30
|
border: 1px solid #888888;
|
|
12
31
|
display: flex;
|
|
13
32
|
justify-content: center;
|
|
33
|
+
align-items: center;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.box,
|
|
37
|
+
.box-pending {
|
|
38
|
+
width: calc(100% - 16px);
|
|
14
39
|
}
|
|
15
40
|
|
|
16
41
|
.box-pending {
|
|
@@ -18,6 +43,11 @@
|
|
|
18
43
|
border-right: 1px solid #888888;
|
|
19
44
|
border-top: 1px solid #888888;
|
|
20
45
|
border-bottom: 1px solid #888888;
|
|
46
|
+
justify-content: flex-start;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.first-box {
|
|
50
|
+
width: 100%;
|
|
21
51
|
}
|
|
22
52
|
|
|
23
53
|
.line {
|
|
@@ -32,7 +62,23 @@
|
|
|
32
62
|
float: left;
|
|
33
63
|
}
|
|
34
64
|
|
|
35
|
-
.
|
|
65
|
+
.dash {
|
|
66
|
+
width: 16px;
|
|
67
|
+
display: flex;
|
|
68
|
+
align-items: center;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.dash div {
|
|
72
|
+
border-bottom: 1px solid #888888;
|
|
73
|
+
width: 16px;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.boxWrapper,
|
|
77
|
+
.firstBoxWrapper {
|
|
78
|
+
border: 1px solid green;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.stepVisited .firstBoxWrapper {
|
|
36
82
|
margin-left: calc(50% - 15px);
|
|
37
83
|
}
|
|
38
84
|
|
|
@@ -40,23 +86,31 @@
|
|
|
40
86
|
border: none;
|
|
41
87
|
}
|
|
42
88
|
|
|
43
|
-
.stepActive .box {
|
|
44
|
-
}
|
|
45
|
-
|
|
46
89
|
.dot {
|
|
47
|
-
width: 30px;
|
|
90
|
+
max-width: 30px;
|
|
91
|
+
min-width: 30px;
|
|
48
92
|
height: 30px;
|
|
49
93
|
font-size: 18px;
|
|
94
|
+
border-radius: 50%;
|
|
50
95
|
}
|
|
51
96
|
|
|
97
|
+
/* active step dot */
|
|
52
98
|
.stepActive .dot {
|
|
53
99
|
color: #000000;
|
|
54
100
|
border-color: #ffffff;
|
|
55
101
|
}
|
|
56
102
|
|
|
57
|
-
|
|
103
|
+
/* the label text inside the step */
|
|
104
|
+
.step-title {
|
|
105
|
+
margin: 0 4px;
|
|
106
|
+
max-width: 140px;
|
|
107
|
+
overflow: hidden;
|
|
108
|
+
text-overflow: ellipsis;
|
|
109
|
+
white-space: nowrap;
|
|
110
|
+
align-self: center;
|
|
58
111
|
}
|
|
59
112
|
|
|
113
|
+
/* lines (your old ones) */
|
|
60
114
|
.leftLine,
|
|
61
115
|
.rightLine {
|
|
62
116
|
border-bottom: 1px solid;
|
|
@@ -101,4 +155,4 @@
|
|
|
101
155
|
border-bottom-right-radius: 100px;
|
|
102
156
|
padding: 2px 8px;
|
|
103
157
|
font-weight: 600;
|
|
104
|
-
}
|
|
158
|
+
}
|
|
@@ -10,6 +10,7 @@ var _ApplicationManager = _interopRequireDefault(require("../ApplicationManager"
|
|
|
10
10
|
var _Observable = _interopRequireDefault(require("../event/Observable"));
|
|
11
11
|
var _EventType = _interopRequireDefault(require("../event/EventType"));
|
|
12
12
|
var _styles = require("@mui/styles");
|
|
13
|
+
var _Tooltip = _interopRequireDefault(require("@mui/material/Tooltip"));
|
|
13
14
|
require("./StepperTitleBar.css");
|
|
14
15
|
var _jquery = _interopRequireDefault(require("jquery"));
|
|
15
16
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -31,17 +32,12 @@ const StepperTitleBar = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.def
|
|
|
31
32
|
const [visible, setVisible] = _react.default.useState(false);
|
|
32
33
|
const [activeSegmentPercentage, setActiveSegmentPercentage] = _react.default.useState(null);
|
|
33
34
|
const currentIndex = _react.default.useRef(null);
|
|
34
|
-
let keyCounter = 0;
|
|
35
|
-
let counter = 0;
|
|
36
|
-
let graphicsCounter = 0;
|
|
37
35
|
const classes = useStyles();
|
|
36
|
+
|
|
37
|
+
// re-attach API on each render
|
|
38
38
|
_react.default.useEffect(() => {
|
|
39
39
|
props.handle.api = api();
|
|
40
|
-
recalcLinePosition();
|
|
41
40
|
});
|
|
42
|
-
_react.default.useLayoutEffect(() => {
|
|
43
|
-
recalcLinePosition();
|
|
44
|
-
}, []);
|
|
45
41
|
_react.default.useEffect(() => {
|
|
46
42
|
let parsedConfig = _Utils.default.parseConfig(props.config, props.viewId);
|
|
47
43
|
let eventHandlingConfig = _Utils.default.isNull(parsedConfig.eventHandlingConfig) ? {} : parsedConfig.eventHandlingConfig;
|
|
@@ -67,18 +63,37 @@ const StepperTitleBar = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.def
|
|
|
67
63
|
recalcLinePosition();
|
|
68
64
|
}, []);
|
|
69
65
|
const recalcLinePosition = () => {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if (currentIndex.current
|
|
73
|
-
|
|
66
|
+
// Your old logic depended on single-row layout and a single #titleDiv
|
|
67
|
+
// Now that we allow wrapping, we guard this so it doesn't break.
|
|
68
|
+
if (currentIndex.current == null) return;
|
|
69
|
+
const stepEl = (0, _jquery.default)("#step-container-" + currentIndex.current);
|
|
70
|
+
if (!stepEl || stepEl.length === 0) return;
|
|
71
|
+
const stepTop = stepEl.offset().top;
|
|
72
|
+
const firstTop = (0, _jquery.default)("#step-container-0").offset()?.top;
|
|
73
|
+
|
|
74
|
+
// if wrapped to multiple rows, skip line math (each item already has its own line segment)
|
|
75
|
+
if (firstTop != null && stepTop !== firstTop) {
|
|
74
76
|
(0, _jquery.default)(".stepActive .rightLine").css({
|
|
75
|
-
|
|
76
|
-
'width': currentIndex.current === 0 ? step.width() - titleWidth + 2 : step.width() / 2 - titleWidth / 2 + 'px'
|
|
77
|
+
width: 0
|
|
77
78
|
});
|
|
78
79
|
(0, _jquery.default)(".stepActive .leftLine").css({
|
|
79
|
-
|
|
80
|
+
width: 0
|
|
80
81
|
});
|
|
82
|
+
return;
|
|
81
83
|
}
|
|
84
|
+
|
|
85
|
+
// if still on one row, we can keep the old logic roughly
|
|
86
|
+
const stepWidth = stepEl.width();
|
|
87
|
+
if (!stepWidth) return;
|
|
88
|
+
const activeBox = stepEl.find(".box, .box-pending").first();
|
|
89
|
+
const titleWidth = activeBox.width();
|
|
90
|
+
(0, _jquery.default)(".stepActive .rightLine").css({
|
|
91
|
+
'margin-left': titleWidth / 2 + 'px',
|
|
92
|
+
'width': stepWidth - titleWidth + 'px'
|
|
93
|
+
});
|
|
94
|
+
(0, _jquery.default)(".stepActive .leftLine").css({
|
|
95
|
+
'width': (stepWidth - titleWidth) / 2 + 'px'
|
|
96
|
+
});
|
|
82
97
|
};
|
|
83
98
|
const api = () => {
|
|
84
99
|
return {
|
|
@@ -97,7 +112,6 @@ const StepperTitleBar = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.def
|
|
|
97
112
|
},
|
|
98
113
|
show() {
|
|
99
114
|
let graph;
|
|
100
|
-
let graphs = [];
|
|
101
115
|
let view = _ApplicationManager.default.getView(props.viewId);
|
|
102
116
|
if (view) {
|
|
103
117
|
for (const key of Object.keys(_ApplicationManager.default.viewContext)) {
|
|
@@ -114,86 +128,68 @@ const StepperTitleBar = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.def
|
|
|
114
128
|
setSteps(steps);
|
|
115
129
|
currentIndex.current = graph.getCurrentNodeIndex();
|
|
116
130
|
setActiveSegmentPercentage(100 - 10 * (steps.length - 1));
|
|
131
|
+
// recalc after render
|
|
132
|
+
setTimeout(() => recalcLinePosition(), 0);
|
|
117
133
|
}
|
|
118
134
|
}
|
|
119
135
|
};
|
|
120
136
|
};
|
|
121
|
-
function renderStep(step) {
|
|
137
|
+
function renderStep(step, graphicsCounter, totalSteps) {
|
|
138
|
+
const isActive = graphicsCounter === currentIndex.current;
|
|
139
|
+
const isVisited = graphicsCounter < currentIndex.current;
|
|
140
|
+
const isLast = graphicsCounter === totalSteps - 1;
|
|
122
141
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
123
|
-
className:
|
|
142
|
+
className: isActive ? `stepActive` : isVisited ? 'stepVisited' : 'step'
|
|
124
143
|
}, graphicsCounter > 0 ? /*#__PURE__*/_react.default.createElement("div", {
|
|
125
|
-
className: (graphicsCounter <= currentIndex.current ? `${classes.themeBorder} ` : '') +
|
|
144
|
+
className: (graphicsCounter <= currentIndex.current ? `${classes.themeBorder} ` : '') + (isLast ? ' lastLine' : '')
|
|
126
145
|
}) : null, /*#__PURE__*/_react.default.createElement("div", {
|
|
127
|
-
className: 'row
|
|
146
|
+
className: 'row flex-nowrap' + (graphicsCounter === 0 ? ' firstBox' : 'boxWrapper'),
|
|
128
147
|
style: {
|
|
129
148
|
marginLeft: 'unset',
|
|
130
149
|
marginRight: 'unset',
|
|
131
150
|
width: '100%'
|
|
132
151
|
},
|
|
133
152
|
id: 'step-' + graphicsCounter
|
|
134
|
-
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
153
|
+
}, step.index > 0 && /*#__PURE__*/_react.default.createElement("div", {
|
|
154
|
+
className: 'col-*-* dash',
|
|
155
|
+
style: {
|
|
156
|
+
color: isVisited ? '#ffffff' : null
|
|
157
|
+
}
|
|
158
|
+
}, /*#__PURE__*/_react.default.createElement("div", null)), /*#__PURE__*/_react.default.createElement("div", {
|
|
135
159
|
style: {
|
|
136
160
|
whiteSpace: "nowrap"
|
|
137
161
|
},
|
|
138
|
-
className: (
|
|
162
|
+
className: (isVisited ? `${classes.secondary} box` : isActive ? `${classes.primary} box` : 'box-pending') + ' row no-margin no-padding flex-nowrap' + (step.index === 0 ? ' first-box' : '')
|
|
139
163
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
140
164
|
className: 'dot col-*-*',
|
|
141
165
|
style: {
|
|
142
|
-
color:
|
|
166
|
+
color: isVisited ? '#ffffff' : null
|
|
143
167
|
}
|
|
144
|
-
}, step.index + 1),
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
alignContent: 'center',
|
|
149
|
-
color: graphicsCounter === currentIndex.current ? '#000000' : '#ffffff',
|
|
150
|
-
margin: '0 4px'
|
|
151
|
-
}
|
|
152
|
-
}, step.title) : /*#__PURE__*/_react.default.createElement("div", {
|
|
153
|
-
className: `col-*-*`,
|
|
154
|
-
id: "titleDiv",
|
|
168
|
+
}, step.index + 1), /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
|
|
169
|
+
title: step.title
|
|
170
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
171
|
+
className: "step-title",
|
|
155
172
|
style: {
|
|
156
|
-
|
|
157
|
-
color: '#888888',
|
|
158
|
-
margin: '0 4px'
|
|
173
|
+
color: isActive ? '#000000' : isVisited ? '#ffffff' : '#888888'
|
|
159
174
|
}
|
|
160
|
-
}, step.title)),
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
overflow: "hidden",
|
|
164
|
-
alignContent: 'center'
|
|
165
|
-
},
|
|
166
|
-
className: 'col-*-*'
|
|
167
|
-
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
168
|
-
className: 'line'
|
|
169
|
-
}, "\xA0"))), graphicsCounter < steps.length - 1 ? /*#__PURE__*/_react.default.createElement("div", {
|
|
170
|
-
className: (graphicsCounter < currentIndex.current ? `${classes.themeBorder} ` : '') + '' + (graphicsCounter === 0 ? ' firstLine' : '')
|
|
171
|
-
}) : null, graphicsCounter++ ? null : null);
|
|
175
|
+
}, step.title)))), !isLast ? /*#__PURE__*/_react.default.createElement("div", {
|
|
176
|
+
className: (graphicsCounter < currentIndex.current ? `${classes.themeBorder} ` : '') + (graphicsCounter === 0 ? ' firstLine' : '')
|
|
177
|
+
}) : null);
|
|
172
178
|
}
|
|
173
179
|
function render() {
|
|
174
180
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
175
|
-
className: "
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
},
|
|
181
|
-
align: graphicsCounter === 0 ? "left" : graphicsCounter === steps.length - 1 ? "right" : "center",
|
|
182
|
-
key: keyCounter++,
|
|
183
|
-
style: {
|
|
184
|
-
whiteSpace: "nowrap",
|
|
185
|
-
paddingTop: "8px",
|
|
186
|
-
maxHeight: "8px",
|
|
187
|
-
width: 100 / steps.length + "%"
|
|
188
|
-
},
|
|
189
|
-
id: "step-container-" + counter++
|
|
190
|
-
}, renderStep(step))));
|
|
181
|
+
className: "stepper-container"
|
|
182
|
+
}, steps.map((step, idx) => /*#__PURE__*/_react.default.createElement("div", {
|
|
183
|
+
key: idx,
|
|
184
|
+
id: "step-container-" + idx,
|
|
185
|
+
className: "step-item"
|
|
186
|
+
}, renderStep(step, idx, steps.length))));
|
|
191
187
|
}
|
|
192
188
|
return /*#__PURE__*/_react.default.createElement("div", null, visible && !_Utils.default.isNull(props.config) ? /*#__PURE__*/_react.default.createElement("div", {
|
|
193
189
|
style: _Utils.default.mergeStyles({
|
|
194
190
|
fontSize: '24px',
|
|
195
191
|
color: '#202124',
|
|
196
|
-
padding: "0
|
|
192
|
+
padding: "0",
|
|
197
193
|
display: 'flex',
|
|
198
194
|
justifyContent: 'center',
|
|
199
195
|
margin: "0 0 16px 0"
|
|
@@ -25,6 +25,7 @@ function a11yProps(index) {
|
|
|
25
25
|
const TabPanel = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
26
26
|
const [tabValue, setTabValue] = _react.default.useState(0);
|
|
27
27
|
const [errors, setErrors] = _react.default.useState({});
|
|
28
|
+
const [visibleTabPages, setVisibleTabPages] = _react.default.useState(null);
|
|
28
29
|
const [componentHandles] = _react.default.useState({});
|
|
29
30
|
const handleTabChange = (event, newValue) => {
|
|
30
31
|
setTabValue(newValue);
|
|
@@ -56,6 +57,21 @@ const TabPanel = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.fo
|
|
|
56
57
|
}
|
|
57
58
|
});
|
|
58
59
|
}
|
|
60
|
+
if (props.config.tabPages) {
|
|
61
|
+
let allVisibleTabPages = [];
|
|
62
|
+
for (const page of props.config.tabPages) {
|
|
63
|
+
if (_Utils.default.isNull(page.id)) {
|
|
64
|
+
page.id = index + '-tab-page';
|
|
65
|
+
}
|
|
66
|
+
let parsedConfig = _Utils.default.parseConfig(page, props.viewId);
|
|
67
|
+
let visible = _Utils.default.isNull(parsedConfig.visible) || _Utils.default.evaluateBooleanExpression(parsedConfig.visible, page.id);
|
|
68
|
+
console.log("VISIBLE : " + page.id + " = " + visible + " - " + parsedConfig.visible);
|
|
69
|
+
if (visible) {
|
|
70
|
+
allVisibleTabPages.push(page);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
setVisibleTabPages(allVisibleTabPages);
|
|
74
|
+
}
|
|
59
75
|
}, []);
|
|
60
76
|
function renderTabPageComponent(component, tabId, index) {
|
|
61
77
|
if (_Utils.default.isNull(component.id)) {
|
|
@@ -63,7 +79,7 @@ const TabPanel = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.fo
|
|
|
63
79
|
}
|
|
64
80
|
return component.type === 'formSection' ? /*#__PURE__*/_react.default.createElement(_Section.default, {
|
|
65
81
|
keyHandler: props.keyHandler,
|
|
66
|
-
key:
|
|
82
|
+
key: component.id,
|
|
67
83
|
config: component,
|
|
68
84
|
handle: createComponentHandle(component),
|
|
69
85
|
form: props.form,
|
|
@@ -73,12 +89,12 @@ const TabPanel = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.fo
|
|
|
73
89
|
}) : component.type === 'toolbar' ? /*#__PURE__*/_react.default.createElement(_Toolbar.default, {
|
|
74
90
|
config: component,
|
|
75
91
|
handle: createComponentHandle(component),
|
|
76
|
-
key:
|
|
92
|
+
key: component.id,
|
|
77
93
|
viewId: props.viewId
|
|
78
94
|
}) : component.type === 'layout' ? /*#__PURE__*/_react.default.createElement(_Layout.Layout, {
|
|
79
95
|
config: component,
|
|
80
96
|
handle: createComponentHandle(component),
|
|
81
|
-
key:
|
|
97
|
+
key: component.id,
|
|
82
98
|
viewId: props.viewId
|
|
83
99
|
}) : /*#__PURE__*/_react.default.createElement("div", null, 'Unsupported component type ' + component.type);
|
|
84
100
|
}
|
|
@@ -103,7 +119,7 @@ const TabPanel = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.fo
|
|
|
103
119
|
for (const property of properties) {
|
|
104
120
|
let componentHandle = componentHandles[property];
|
|
105
121
|
children.push(componentHandle);
|
|
106
|
-
if (!_Utils.default.isNull(componentHandle.api
|
|
122
|
+
if (!_Utils.default.isNull(componentHandle.api?.getChildren)) {
|
|
107
123
|
for (const child of componentHandle.api.getChildren()) {
|
|
108
124
|
children.push(child);
|
|
109
125
|
}
|
|
@@ -128,7 +144,7 @@ const TabPanel = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.fo
|
|
|
128
144
|
}
|
|
129
145
|
};
|
|
130
146
|
};
|
|
131
|
-
return /*#__PURE__*/_react.default.createElement("div", {
|
|
147
|
+
return !_Utils.default.isNull(visibleTabPages) && /*#__PURE__*/_react.default.createElement("div", {
|
|
132
148
|
style: _Utils.default.mergeStyles({
|
|
133
149
|
width: '100%'
|
|
134
150
|
}, props.config)
|
|
@@ -158,7 +174,7 @@ const TabPanel = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.fo
|
|
|
158
174
|
minWidth: 120
|
|
159
175
|
}
|
|
160
176
|
}
|
|
161
|
-
},
|
|
177
|
+
}, visibleTabPages.map((page, index) => /*#__PURE__*/_react.default.createElement(_Tab.default, _extends({
|
|
162
178
|
key: index,
|
|
163
179
|
label: page.attributes['label'],
|
|
164
180
|
wrapped: true // allow multi-line label
|
|
@@ -174,16 +190,13 @@ const TabPanel = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.fo
|
|
|
174
190
|
// keep original casing
|
|
175
191
|
color: _ApplicationManager.default.isFormMarkersEnabled() && errors !== null && errors[page.id] === true ? '#ed5249' : undefined
|
|
176
192
|
}
|
|
177
|
-
})))
|
|
178
|
-
if (_Utils.default.isNull(page.id)) {
|
|
179
|
-
page.id = index + '-tab-page';
|
|
180
|
-
}
|
|
193
|
+
}))))), visibleTabPages.map((page, index) => {
|
|
181
194
|
return /*#__PURE__*/_react.default.createElement(_TabPage.default, {
|
|
182
195
|
value: tabValue,
|
|
183
196
|
key: index,
|
|
184
197
|
index: index,
|
|
185
198
|
config: page
|
|
186
199
|
}, renderPage(page, index));
|
|
187
|
-
})
|
|
200
|
+
}));
|
|
188
201
|
}));
|
|
189
202
|
var _default = exports.default = TabPanel;
|
|
@@ -203,6 +203,20 @@ const Toolbar = props => {
|
|
|
203
203
|
}, renderItem(item, defaultId));
|
|
204
204
|
})));
|
|
205
205
|
}
|
|
206
|
+
function getChildren() {
|
|
207
|
+
let children = [];
|
|
208
|
+
let properties = Object.getOwnPropertyNames(buttonItemHandles);
|
|
209
|
+
for (const property of properties) {
|
|
210
|
+
let itemHandle = buttonItemHandles[property];
|
|
211
|
+
children.push(itemHandle);
|
|
212
|
+
}
|
|
213
|
+
properties = Object.getOwnPropertyNames(menuItemHandles);
|
|
214
|
+
for (const property of properties) {
|
|
215
|
+
let itemHandle = menuItemHandles[property];
|
|
216
|
+
children.push(itemHandle);
|
|
217
|
+
}
|
|
218
|
+
return children;
|
|
219
|
+
}
|
|
206
220
|
const api = () => {
|
|
207
221
|
return {
|
|
208
222
|
get id() {
|
|
@@ -213,18 +227,7 @@ const Toolbar = props => {
|
|
|
213
227
|
return props.tableRow;
|
|
214
228
|
},
|
|
215
229
|
getChildren: () => {
|
|
216
|
-
|
|
217
|
-
let properties = Object.getOwnPropertyNames(buttonItemHandles);
|
|
218
|
-
for (const property of properties) {
|
|
219
|
-
let itemHandle = buttonItemHandles[property];
|
|
220
|
-
children.push(itemHandle);
|
|
221
|
-
}
|
|
222
|
-
properties = Object.getOwnPropertyNames(menuItemHandles);
|
|
223
|
-
for (const property of properties) {
|
|
224
|
-
let itemHandle = menuItemHandles[property];
|
|
225
|
-
children.push(itemHandle);
|
|
226
|
-
}
|
|
227
|
-
return children;
|
|
230
|
+
return getChildren();
|
|
228
231
|
},
|
|
229
232
|
set visible(visible) {
|
|
230
233
|
setVisible(visible);
|
|
@@ -232,7 +235,11 @@ const Toolbar = props => {
|
|
|
232
235
|
refresh() {
|
|
233
236
|
let parsedConfig = _Utils.default.parseConfig(props.config, props.viewId);
|
|
234
237
|
setVisible(_Utils.default.evaluateBooleanExpression(parsedConfig.visible, parsedConfig.id, true));
|
|
235
|
-
|
|
238
|
+
for (const child of getChildren()) {
|
|
239
|
+
if (child.api && child.api.refresh) {
|
|
240
|
+
child.api.refresh();
|
|
241
|
+
}
|
|
242
|
+
}
|
|
236
243
|
}
|
|
237
244
|
};
|
|
238
245
|
};
|
|
@@ -42,16 +42,23 @@ const BaseField = props => {
|
|
|
42
42
|
if (boundValue && !initialValueBound.current) {
|
|
43
43
|
initialValueBound.current = true;
|
|
44
44
|
if (props.config.fieldType === 'SELECT' || props.config.fieldType === 'LOOKUP') {
|
|
45
|
-
console.log("BINDING : " + props.config.id, valueObject[valueProperty]);
|
|
46
45
|
if (!boundValue || _Utils.default.isNull(boundValue.id)) {
|
|
47
46
|
setValue(null);
|
|
48
47
|
valueRef.current = null;
|
|
49
48
|
} else {
|
|
50
|
-
|
|
49
|
+
if (props.valueParser) {
|
|
50
|
+
setValue(props.valueParser(boundValue, true));
|
|
51
|
+
} else {
|
|
52
|
+
setValue(boundValue);
|
|
53
|
+
}
|
|
51
54
|
valueRef.current = boundValue;
|
|
52
55
|
}
|
|
53
56
|
} else {
|
|
54
|
-
|
|
57
|
+
if (props.valueParser) {
|
|
58
|
+
setValue(props.valueParser(boundValue, true));
|
|
59
|
+
} else {
|
|
60
|
+
setValue(boundValue);
|
|
61
|
+
}
|
|
55
62
|
valueRef.current = boundValue;
|
|
56
63
|
}
|
|
57
64
|
}
|
|
@@ -46,8 +46,7 @@ const GridFieldWrapper = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.de
|
|
|
46
46
|
const [rows, setRows] = _react.default.useState([]);
|
|
47
47
|
const [crudToolstripWidth, setCrudToolstripWidth] = _react.default.useState(null);
|
|
48
48
|
const [hasButtons] = _react.default.useState(_Utils.default.isNull(props.config.attributes) || _Utils.default.isNull(props.config.attributes.addDisabled) || _Utils.default.evaluateBooleanExpression(props.config.attributes.addDisabled, props.config.id) === false || _Utils.default.isNull(props.config.attributes.removeDisabled) || _Utils.default.evaluateBooleanExpression(props.config.attributes.removeDisabled, props.config.id) === false);
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
const initialValueSet = _react.default.useRef(false);
|
|
51
50
|
_react.default.useEffect(() => {
|
|
52
51
|
let numCrudButtons = 0;
|
|
53
52
|
let addDisabled = _Utils.default.evaluateBooleanExpression(props.config.attributes?.addDisabled, props.config.id);
|
|
@@ -67,11 +66,25 @@ const GridFieldWrapper = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.de
|
|
|
67
66
|
setLabel(_Utils.default.getComponentAttribute(props.config, 'label', ''));
|
|
68
67
|
}
|
|
69
68
|
}, []);
|
|
69
|
+
function setNewRows(values) {
|
|
70
|
+
if (Array.isArray(values)) {
|
|
71
|
+
let newRows = [];
|
|
72
|
+
for (const value of values) {
|
|
73
|
+
if (value) {
|
|
74
|
+
newRows.push(value);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
setRows(newRows);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
70
80
|
_react.default.useEffect(() => {
|
|
71
|
-
if (!_Utils.default.isNull(base.value)
|
|
72
|
-
|
|
81
|
+
if (!_Utils.default.isNull(base.value) && !initialValueSet.current) {
|
|
82
|
+
setNewRows(base.value);
|
|
73
83
|
}
|
|
74
84
|
}, [base.value]);
|
|
85
|
+
_react.default.useEffect(() => {
|
|
86
|
+
initialValueSet.current = false;
|
|
87
|
+
}, [base.valueObject[base.valueProperty]]);
|
|
75
88
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
76
89
|
className: "MuiFormControl-root MuiTextField-root MuiFormControl-marginDense",
|
|
77
90
|
style: _Utils.default.mergeStyles({}, props.config)
|
|
@@ -155,7 +168,7 @@ const GridFieldWrapper = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.de
|
|
|
155
168
|
pagination: false,
|
|
156
169
|
onSelectionChange: selection => {
|
|
157
170
|
setSelection(selection);
|
|
158
|
-
|
|
171
|
+
initialValueSet.current = true;
|
|
159
172
|
},
|
|
160
173
|
filterWrapperClass: 'transferListFilterWrapper',
|
|
161
174
|
hasBorder: false
|
|
@@ -20,18 +20,26 @@ const SelectItemComponent = props => {
|
|
|
20
20
|
const width = !_Utils.default.isNull(props.config.attributes?.style?.width) ? props.config.attributes.style.width : "100%";
|
|
21
21
|
const maxWidth = !_Utils.default.isNull(props.config.attributes?.style?.maxWidth) ? props.config.attributes.style.maxWidth : null;
|
|
22
22
|
const minWidth = !_Utils.default.isNull(props.config.attributes?.style?.minWidth) ? props.config.attributes.style.minWidth : "240px";
|
|
23
|
-
|
|
24
|
-
if (!_Utils.default.isNull(
|
|
23
|
+
function processValueChange(newValue, isOptionsLoaded) {
|
|
24
|
+
if (!_Utils.default.isNull(newValue) && !isOptionsLoaded) {
|
|
25
25
|
let defaultOptions = [];
|
|
26
|
-
defaultOptions.push(
|
|
26
|
+
defaultOptions.push(newValue);
|
|
27
27
|
base.setSelectOptions(defaultOptions);
|
|
28
28
|
setOptionsLoaded(true);
|
|
29
|
+
console.log("DEFAULT SETTINGS SET");
|
|
29
30
|
}
|
|
30
|
-
if (_Utils.default.isNull(initialValue.current) && !_Utils.default.isNull(
|
|
31
|
-
initialValue.current =
|
|
31
|
+
if (_Utils.default.isNull(initialValue.current) && !_Utils.default.isNull(newValue)) {
|
|
32
|
+
initialValue.current = newValue;
|
|
32
33
|
}
|
|
33
|
-
setValue(
|
|
34
|
+
setValue(newValue ? newValue.id : '');
|
|
35
|
+
}
|
|
36
|
+
_react.default.useEffect(() => {
|
|
37
|
+
processValueChange(base.value, optionsLoaded);
|
|
34
38
|
}, [base.value]);
|
|
39
|
+
_react.default.useEffect(() => {
|
|
40
|
+
initialValue.current = null;
|
|
41
|
+
processValueChange(base.valueObject[base.valueProperty], false);
|
|
42
|
+
}, [base.valueObject[base.valueProperty]]);
|
|
35
43
|
_react.default.useEffect(() => {
|
|
36
44
|
if (!_Utils.default.isNull(base.selectOptions) && base.selectOptions.length > 0) {
|
|
37
45
|
if (initialValue.current) {
|
|
@@ -19,7 +19,6 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
19
19
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
20
20
|
const CustomTimePickerComponent = props => {
|
|
21
21
|
const base = props.base;
|
|
22
|
-
const defaultDate = !_Utils.default.isNull(base.valueObject[base.valueProperty]) ? new Date(base.valueObject[base.valueProperty]) : null;
|
|
23
22
|
let minWidth = _Utils.default.getComponentAttribute(props.config, 'minWidth', '240px');
|
|
24
23
|
let width = _Utils.default.getComponentAttribute(props.config, 'width', '100%');
|
|
25
24
|
const handleDateChange = date => {
|
|
@@ -27,8 +26,8 @@ const CustomTimePickerComponent = props => {
|
|
|
27
26
|
base.handleValueChange(date);
|
|
28
27
|
};
|
|
29
28
|
_react.default.useEffect(() => {
|
|
30
|
-
base.setValue(
|
|
31
|
-
}, [
|
|
29
|
+
base.setValue(base.value);
|
|
30
|
+
}, [base.value]);
|
|
32
31
|
const secondaryColor = (0, _reactRedux.useSelector)(state => state.dashboard.secondaryThemeColor);
|
|
33
32
|
const style = {
|
|
34
33
|
minWidth: minWidth,
|
|
@@ -68,16 +67,26 @@ const TimePicker = props => {
|
|
|
68
67
|
valueParser: (value, inbound) => {
|
|
69
68
|
if (!_Utils.default.isNull(value)) {
|
|
70
69
|
if (!value.toString().includes("T")) {
|
|
71
|
-
if (typeof value ===
|
|
72
|
-
const
|
|
70
|
+
if (typeof value === "string") {
|
|
71
|
+
const parts = value.split(":");
|
|
72
|
+
const hours = Number(parts[0] ?? 0);
|
|
73
|
+
const minutes = Number(parts[1] ?? 0);
|
|
73
74
|
const dateObject = new Date();
|
|
74
|
-
dateObject.setHours(hours, minutes
|
|
75
|
-
return inbound ? dateObject : dateObject.toLocaleTimeString(
|
|
75
|
+
dateObject.setHours(hours, minutes);
|
|
76
|
+
return inbound ? dateObject : dateObject.toLocaleTimeString("it-IT", {
|
|
77
|
+
hour: "2-digit",
|
|
78
|
+
minute: "2-digit"
|
|
79
|
+
});
|
|
76
80
|
}
|
|
77
81
|
return value;
|
|
78
82
|
}
|
|
79
83
|
}
|
|
80
|
-
|
|
84
|
+
|
|
85
|
+
// date-time value (contains "T") or something parsable by Date
|
|
86
|
+
return !_Utils.default.isNull(value) ? inbound ? new Date(value) : new Date(value).toLocaleTimeString("it-IT", {
|
|
87
|
+
hour: "2-digit",
|
|
88
|
+
minute: "2-digit"
|
|
89
|
+
}) : null;
|
|
81
90
|
}
|
|
82
91
|
}), base => /*#__PURE__*/_react.default.createElement(CustomTimePickerComponent, _extends({
|
|
83
92
|
base: base
|
|
@@ -301,6 +301,23 @@ const Layout = props => {
|
|
|
301
301
|
}
|
|
302
302
|
}
|
|
303
303
|
}
|
|
304
|
+
function getChildren() {
|
|
305
|
+
let children = [];
|
|
306
|
+
let properties = Object.getOwnPropertyNames(componentHandles);
|
|
307
|
+
for (const property of properties) {
|
|
308
|
+
let componentHandle = componentHandles[property];
|
|
309
|
+
children.push(componentHandle);
|
|
310
|
+
if (!_Utils.default.isNull(componentHandle.api) && !_Utils.default.isNull(componentHandle.api.getChildren)) {
|
|
311
|
+
let moreChildren = componentHandle.api.getChildren();
|
|
312
|
+
if (!_Utils.default.isNull(moreChildren)) {
|
|
313
|
+
for (const child of moreChildren) {
|
|
314
|
+
children.push(child);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return children;
|
|
320
|
+
}
|
|
304
321
|
const api = () => {
|
|
305
322
|
return {
|
|
306
323
|
get id() {
|
|
@@ -311,27 +328,18 @@ const Layout = props => {
|
|
|
311
328
|
setVisible(val);
|
|
312
329
|
},
|
|
313
330
|
getChildren: () => {
|
|
314
|
-
|
|
315
|
-
let properties = Object.getOwnPropertyNames(componentHandles);
|
|
316
|
-
for (const property of properties) {
|
|
317
|
-
let componentHandle = componentHandles[property];
|
|
318
|
-
children.push(componentHandle);
|
|
319
|
-
if (!_Utils.default.isNull(componentHandle.api) && !_Utils.default.isNull(componentHandle.api.getChildren)) {
|
|
320
|
-
let moreChildren = componentHandle.api.getChildren();
|
|
321
|
-
if (!_Utils.default.isNull(moreChildren)) {
|
|
322
|
-
for (const child of moreChildren) {
|
|
323
|
-
children.push(child);
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
return children;
|
|
331
|
+
return getChildren();
|
|
329
332
|
},
|
|
330
333
|
refresh() {
|
|
331
334
|
if (!_Utils.default.isNull(props.config.visible)) {
|
|
332
335
|
let parsedConfig = _Utils.default.parseConfig(props.config, props.viewId);
|
|
333
336
|
setVisible(_Utils.default.evaluateBooleanExpression(parsedConfig.visible, props.config.id));
|
|
334
337
|
}
|
|
338
|
+
for (const child of getChildren()) {
|
|
339
|
+
if (child.api && child.api.refresh) {
|
|
340
|
+
child.api.refresh();
|
|
341
|
+
}
|
|
342
|
+
}
|
|
335
343
|
}
|
|
336
344
|
};
|
|
337
345
|
};
|
|
@@ -15,6 +15,7 @@ const SideBarContent = props => {
|
|
|
15
15
|
const {
|
|
16
16
|
tab,
|
|
17
17
|
isHost,
|
|
18
|
+
isChairPerson,
|
|
18
19
|
meetingId,
|
|
19
20
|
participants,
|
|
20
21
|
meetingChat
|
|
@@ -36,7 +37,8 @@ const SideBarContent = props => {
|
|
|
36
37
|
chatTab: true,
|
|
37
38
|
selectedChat: meetingChat,
|
|
38
39
|
meetingId: meetingId,
|
|
39
|
-
isHost: isHost
|
|
40
|
+
isHost: isHost,
|
|
41
|
+
isChairPerson: isChairPerson
|
|
40
42
|
})));
|
|
41
43
|
};
|
|
42
44
|
var _default = exports.default = SideBarContent;
|
|
@@ -414,63 +414,7 @@ const Toolbar = props => {
|
|
|
414
414
|
id: 'CHAT_BUBBLE'
|
|
415
415
|
})), /*#__PURE__*/_react.default.createElement("div", {
|
|
416
416
|
className: 'text'
|
|
417
|
-
}, "Chat"))))))),
|
|
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", {
|
|
417
|
+
}, "Chat"))))))), roomStatus === 'SESSION' && /*#__PURE__*/_react.default.createElement("div", {
|
|
474
418
|
className: 'button-wrapper'
|
|
475
419
|
}, raisedHands.length > 0 && /*#__PURE__*/_react.default.createElement("div", {
|
|
476
420
|
className: 'marker'
|
|
@@ -730,29 +674,7 @@ const Toolbar = props => {
|
|
|
730
674
|
}
|
|
731
675
|
}, /*#__PURE__*/_react.default.createElement(_material.ListItemIcon, null, /*#__PURE__*/_react.default.createElement(_Icon.default, {
|
|
732
676
|
id: 'CHAT_BUBBLE'
|
|
733
|
-
})), /*#__PURE__*/_react.default.createElement("div", null, hasUnreadChats ? '1' : '', "\xA0Chat"))),
|
|
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", {
|
|
677
|
+
})), /*#__PURE__*/_react.default.createElement("div", null, hasUnreadChats ? '1' : '', "\xA0Chat"))), !buttonVisibility.raiseHand && roomStatus === 'SESSION' && /*#__PURE__*/_react.default.createElement("div", {
|
|
756
678
|
className: 'button-wrapper no-margin no-padding'
|
|
757
679
|
}, /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
|
|
758
680
|
onClick: () => {
|
|
@@ -52,6 +52,7 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
|
|
|
52
52
|
const [allUserParticipantsLeft, setAllUserParticipantsLeft] = (0, _react.useState)(false);
|
|
53
53
|
const [lobbyWaitingList, setLobbyWaitingList] = (0, _react.useState)([]);
|
|
54
54
|
const [isHost, setIsHost] = (0, _react.useState)(false);
|
|
55
|
+
const [isChairPerson, setIsChairPerson] = (0, _react.useState)(false);
|
|
55
56
|
const [meetingParticipantGridMode, setMeetingParticipantGridMode] = (0, _react.useState)('DEFAULT');
|
|
56
57
|
const [autoPermit, setAutoPermit] = (0, _react.useState)(!props.calendarEvent.askToJoin);
|
|
57
58
|
const [rtpCapabilities, setRtpCapabilities] = (0, _react.useState)(null);
|
|
@@ -309,6 +310,7 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
|
|
|
309
310
|
}
|
|
310
311
|
setCurrentUserFullName(userFullName);
|
|
311
312
|
setIsHost(props.calendarEvent.host.username === _ApplicationManager.default.getUserDetails().username);
|
|
313
|
+
setIsChairPerson(props.calendarEvent.chairPersonId === _ApplicationManager.default.getUserDetails().username);
|
|
312
314
|
try {
|
|
313
315
|
_Media.default.joinMeeting(props.calendarEvent, props.settings, userFullName).then(response => {
|
|
314
316
|
console.log('JOIN RESPONSE : ', response);
|
|
@@ -329,18 +331,15 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
|
|
|
329
331
|
}, []);
|
|
330
332
|
function addUserToParticipants(user) {
|
|
331
333
|
// Typically, a user shoud not exist. We are ensuring that there are never duplicates
|
|
332
|
-
console.log('SEARCHING PARTICIPANT : ' + user.userId);
|
|
333
334
|
console.log(participants);
|
|
334
335
|
let participant = participants.find(u => u.userId === user.userId);
|
|
335
336
|
if (participant) {
|
|
336
|
-
console.log('FOUND EXISTING PARTICIPANT : ', participant);
|
|
337
337
|
participant.name = user.name;
|
|
338
338
|
participant.avatar = user.avatar;
|
|
339
339
|
participant.audioMuted = user.audioMuted;
|
|
340
340
|
participant.videoMuted = user.videoMuted;
|
|
341
341
|
participant.producers = user.producers;
|
|
342
342
|
} else {
|
|
343
|
-
console.log('DID NOT FIND EXISTING PARTICIPANT : ', participant);
|
|
344
343
|
participant = {
|
|
345
344
|
userId: user.userId,
|
|
346
345
|
name: user.name,
|
|
@@ -381,7 +380,7 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
|
|
|
381
380
|
_SocketManager.default.endSession(props.calendarEvent.id);
|
|
382
381
|
_ApplicationManager.default.setHasActiveMeeting(false);
|
|
383
382
|
_ApplicationManager.default.setActiveMeetingKey(null);
|
|
384
|
-
_ApplicationManager.default.removeLoadedGraph(
|
|
383
|
+
_ApplicationManager.default.removeLoadedGraph('window');
|
|
385
384
|
setSideBarOpen(false);
|
|
386
385
|
setSideBarTab('');
|
|
387
386
|
}
|
|
@@ -555,6 +554,7 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
|
|
|
555
554
|
sideBarTab: sideBarTab,
|
|
556
555
|
roomStatus: roomStatus,
|
|
557
556
|
isHost: isHost,
|
|
557
|
+
isChairPerson: isChairPerson,
|
|
558
558
|
startScreenSharing: startScreenSharing,
|
|
559
559
|
sharingHandler: someoneSharing => setSomeoneSharing(someoneSharing),
|
|
560
560
|
onStopSharing: () => {
|
|
@@ -601,6 +601,7 @@ const TrainingRoom = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.defaul
|
|
|
601
601
|
}, /*#__PURE__*/_react.default.createElement(_SideBarContent.default, {
|
|
602
602
|
meetingChat: meetingChat,
|
|
603
603
|
isHost: isHost,
|
|
604
|
+
isChairPerson: isChairPerson,
|
|
604
605
|
tab: sideBarTab,
|
|
605
606
|
meetingId: props.calendarEvent.id,
|
|
606
607
|
participants: participants,
|
|
@@ -10,6 +10,17 @@
|
|
|
10
10
|
background-color: #f9f9f9;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
+
.people-content-list {
|
|
14
|
+
margin: 4px;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.person-card-wrapper {
|
|
18
|
+
border: 1px solid rgb(233, 233, 233);
|
|
19
|
+
border-radius: 4px;
|
|
20
|
+
background-color: rgb(233, 233, 233);
|
|
21
|
+
margin-bottom: 2px;
|
|
22
|
+
}
|
|
23
|
+
|
|
13
24
|
.meeting-participant-container-current-user {
|
|
14
25
|
min-width: 212px;
|
|
15
26
|
min-height: 150px;
|
|
@@ -586,14 +586,26 @@ const VCRoomParticipant = props => {
|
|
|
586
586
|
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
587
587
|
className: props.sizing === 'sm' ? 'name-label-sm' : 'name-label',
|
|
588
588
|
style: {
|
|
589
|
+
display: 'flex',
|
|
589
590
|
position: 'absolute',
|
|
591
|
+
width: '100%',
|
|
590
592
|
bottom: props.isCurrentUser ? '12px' : '0',
|
|
591
593
|
padding: props.isCurrentUser ? '4px 16px' : props.sizing !== 'sm' ? '4px' : '4px'
|
|
592
594
|
}
|
|
593
|
-
},
|
|
595
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
594
596
|
style: {
|
|
597
|
+
width: '50%',
|
|
598
|
+
display: 'flex',
|
|
599
|
+
justifyContent: 'flex-start',
|
|
595
600
|
marginLeft: '4px'
|
|
596
601
|
}
|
|
602
|
+
}, !props.isCurrentUser && getParticipantName(), props.isCurrentUser && 'You'), !props.isCurrentUser && /*#__PURE__*/_react.default.createElement("div", {
|
|
603
|
+
style: {
|
|
604
|
+
marginLeft: '4px',
|
|
605
|
+
display: 'flex',
|
|
606
|
+
justifyContent: 'flex-end',
|
|
607
|
+
width: '50%'
|
|
608
|
+
}
|
|
597
609
|
}, props.isHost && !audioMuted ? /*#__PURE__*/_react.default.createElement(_IconButton.default, {
|
|
598
610
|
onClick: e => {
|
|
599
611
|
props.onHostAudioMute(props.data);
|
|
@@ -623,22 +635,14 @@ const VCRoomParticipant = props => {
|
|
|
623
635
|
}, /*#__PURE__*/_react.default.createElement(_Icon.default, {
|
|
624
636
|
id: 'CAMERA'
|
|
625
637
|
}))), props.isCurrentUser && /*#__PURE__*/_react.default.createElement("div", {
|
|
626
|
-
className: 'row',
|
|
638
|
+
className: 'row no-margin no-padding',
|
|
627
639
|
style: {
|
|
628
|
-
width: '
|
|
640
|
+
width: '100%'
|
|
629
641
|
}
|
|
630
642
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
631
643
|
className: 'col no-margin no-padding',
|
|
632
644
|
style: {
|
|
633
|
-
|
|
634
|
-
}
|
|
635
|
-
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
636
|
-
style: {
|
|
637
|
-
marginLeft: '4px'
|
|
638
|
-
}
|
|
639
|
-
}, "You")), /*#__PURE__*/_react.default.createElement("div", {
|
|
640
|
-
className: 'col no-margin no-padding',
|
|
641
|
-
style: {
|
|
645
|
+
width: '50%',
|
|
642
646
|
display: 'flex',
|
|
643
647
|
justifyContent: 'flex-end'
|
|
644
648
|
}
|
|
@@ -681,7 +685,8 @@ const VCRoomParticipant = props => {
|
|
|
681
685
|
filter: 'drop-shadow(0px 2px 8px rgba(0,0,0,0.32))',
|
|
682
686
|
mt: 1.5,
|
|
683
687
|
'& .MuiList-root': {
|
|
684
|
-
border: '1px solid
|
|
688
|
+
border: '1px solid #e1e1e1',
|
|
689
|
+
borderRadius: '4px'
|
|
685
690
|
},
|
|
686
691
|
'& .MuiAvatar-root': {
|
|
687
692
|
width: 32,
|
|
@@ -115,6 +115,7 @@ const VCRoomWorkspace = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
|
115
115
|
videoMuted,
|
|
116
116
|
audioMuted,
|
|
117
117
|
isHost,
|
|
118
|
+
isChairPerson,
|
|
118
119
|
rtpCapabilities,
|
|
119
120
|
onloadScreenShareData,
|
|
120
121
|
displayState,
|
|
@@ -741,6 +742,7 @@ const VCRoomWorkspace = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
|
741
742
|
}, /*#__PURE__*/_react.default.createElement(_SideBarContent.default, {
|
|
742
743
|
meetingChat: meetingChat,
|
|
743
744
|
isHost: isHost,
|
|
745
|
+
isChairPerson: isChairPerson,
|
|
744
746
|
tab: 'People',
|
|
745
747
|
meetingId: meetingId,
|
|
746
748
|
participants: props.participants,
|
|
@@ -810,10 +812,15 @@ const VCRoomWorkspace = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
|
810
812
|
height: '100%'
|
|
811
813
|
}
|
|
812
814
|
}, renderStrip())), /*#__PURE__*/_react.default.createElement("div", {
|
|
813
|
-
className: `${
|
|
815
|
+
className: `${displayState === 'MAXIMIZED' ? 'col ' : ''}`,
|
|
814
816
|
style: {
|
|
815
817
|
width: '200px',
|
|
816
|
-
height: '148px'
|
|
818
|
+
height: '148px',
|
|
819
|
+
display: 'flex',
|
|
820
|
+
alignItems: 'center',
|
|
821
|
+
justifyContent: 'flex-end',
|
|
822
|
+
marginLeft: '16px',
|
|
823
|
+
marginRight: '0'
|
|
817
824
|
}
|
|
818
825
|
}, renderCurrentParticipant())), waitingList && waitingList.length > 0 && /*#__PURE__*/_react.default.createElement("div", {
|
|
819
826
|
className: 'no-side-margin no-side-padding grid-side-bar',
|
|
@@ -50,7 +50,7 @@ const ChatRoom = props => {
|
|
|
50
50
|
const [mode, setMode] = (0, _react.useState)('CHAT');
|
|
51
51
|
const [clearUploadedFileSwitch, setClearUploadedFileSwitch] = (0, _react.useState)(false);
|
|
52
52
|
const [socketEventHandler] = (0, _react.useState)({});
|
|
53
|
-
const [currentUser
|
|
53
|
+
const [currentUser] = (0, _react.useState)(_ApplicationManager.default.getUserDetails());
|
|
54
54
|
const socketEventHandlerApi = () => {
|
|
55
55
|
return {
|
|
56
56
|
get id() {
|
|
@@ -146,7 +146,7 @@ const ChatRoom = props => {
|
|
|
146
146
|
if (selectedChat) {
|
|
147
147
|
const newMessages = [].concat(selectedChat.messages);
|
|
148
148
|
if (!props.showAllMessagesForNewParticipants) {
|
|
149
|
-
let find = selectedChat.participants.find(p => p.
|
|
149
|
+
let find = selectedChat.participants.find(p => p.username === currentUser.username);
|
|
150
150
|
const dateAddedToChat = find ? find.dateAddedToChat : new Date();
|
|
151
151
|
const filteredMessages = newMessages.filter(txt => dateAddedToChat === null || new Date(dateAddedToChat) < new Date(txt.createdDate));
|
|
152
152
|
setMessages(filteredMessages);
|
|
@@ -172,7 +172,7 @@ const ChatRoom = props => {
|
|
|
172
172
|
if (selectedChat && currentUser) {
|
|
173
173
|
setMessage('');
|
|
174
174
|
setDocuments(null);
|
|
175
|
-
let find = selectedChat.participants.find(p => p.userId === currentUser.
|
|
175
|
+
let find = selectedChat.participants.find(p => p.userId === currentUser.username || p.username === currentUser.username);
|
|
176
176
|
if (_Utils.default.isNull(find)) {
|
|
177
177
|
(0, _RestUtils.postData)(`${location + '/' + _ApplicationManager.default.getContextRoot()}/calendar/api/v1/chat/addParticipants`, () => {}, e => {}, true, {
|
|
178
178
|
chatId: selectedChat.id,
|
|
@@ -497,7 +497,8 @@ const ChatRoom = props => {
|
|
|
497
497
|
messageId: message.id,
|
|
498
498
|
participantsToSignalIds,
|
|
499
499
|
profile: _ApplicationManager.default.getUserDetails().profile,
|
|
500
|
-
userId: _ApplicationManager.default.getUserDetails().username
|
|
500
|
+
userId: _ApplicationManager.default.getUserDetails().username,
|
|
501
|
+
username: _ApplicationManager.default.getUserDetails().username
|
|
501
502
|
}).then(data => {
|
|
502
503
|
message.active = false;
|
|
503
504
|
setRefresher(!refresher);
|
|
@@ -626,7 +627,7 @@ const ChatRoom = props => {
|
|
|
626
627
|
className: "cv-poll-choice-details"
|
|
627
628
|
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
628
629
|
className: "cv-choice-percentage"
|
|
629
|
-
}, /*#__PURE__*/_react.default.createElement(Info, {
|
|
630
|
+
}, /*#__PURE__*/_react.default.createElement(_reactFeather.Info, {
|
|
630
631
|
className: "selected-choice-icon"
|
|
631
632
|
})), /*#__PURE__*/_react.default.createElement("span", {
|
|
632
633
|
className: "cv-choice-text"
|
|
@@ -641,10 +642,11 @@ const ChatRoom = props => {
|
|
|
641
642
|
poll: message.poll,
|
|
642
643
|
chatTab: props.chatTab,
|
|
643
644
|
isHost: props.isHost,
|
|
645
|
+
isChairPerson: props.isChairPerson,
|
|
644
646
|
pollCreator: message.participant,
|
|
645
647
|
createdDate: message.createdDate,
|
|
646
648
|
submitPollVoteHandler: poll => submitPollVoteHandler(poll),
|
|
647
|
-
pollParticipantIDs: selectedChat.participants.map(p => p.
|
|
649
|
+
pollParticipantIDs: selectedChat.participants.map(p => p.username),
|
|
648
650
|
currentUser: currentUser,
|
|
649
651
|
closePollHandler: (e, poll) => closePollHandler(e, poll),
|
|
650
652
|
numberOfPollParticipants: selectedChat.participants.length
|
|
@@ -193,7 +193,8 @@
|
|
|
193
193
|
|
|
194
194
|
.chatroom__body {
|
|
195
195
|
height: 95%;
|
|
196
|
-
overflow: auto;
|
|
196
|
+
overflow-y: auto;
|
|
197
|
+
overflow-x: hidden;
|
|
197
198
|
padding: 0 15px;
|
|
198
199
|
}
|
|
199
200
|
|
|
@@ -396,7 +397,6 @@
|
|
|
396
397
|
|
|
397
398
|
.poll-content {
|
|
398
399
|
margin-top: 16px;
|
|
399
|
-
margin-left: 26px;
|
|
400
400
|
margin-bottom: 28px;
|
|
401
401
|
padding: 20px 15px 20px 15px;
|
|
402
402
|
letter-spacing: .01em;
|
|
@@ -488,11 +488,9 @@
|
|
|
488
488
|
}
|
|
489
489
|
|
|
490
490
|
.cv-choice-text {
|
|
491
|
-
margin
|
|
491
|
+
margin: 0 10px;
|
|
492
492
|
display: inline-block;
|
|
493
493
|
vertical-align: bottom;
|
|
494
|
-
text-overflow: ellipsis;
|
|
495
|
-
white-space: nowrap;
|
|
496
494
|
overflow: hidden;
|
|
497
495
|
color: rgba(0, 0, 0, 0.75);
|
|
498
496
|
}
|
|
@@ -189,7 +189,7 @@ const PollContainer = props => {
|
|
|
189
189
|
}).catch(() => {});
|
|
190
190
|
}
|
|
191
191
|
}
|
|
192
|
-
}, "Submit Vote"), props.currentUser.
|
|
192
|
+
}, "Submit Vote"), props.currentUser.username === props.pollCreator.username && /*#__PURE__*/_react.default.createElement(_Button.default, {
|
|
193
193
|
className: "vote-button",
|
|
194
194
|
variant: "outlined",
|
|
195
195
|
onClick: e => props.closePollHandler(e, poll)
|
|
@@ -216,7 +216,7 @@ const PollContainer = props => {
|
|
|
216
216
|
style: {
|
|
217
217
|
color: '#945c33'
|
|
218
218
|
}
|
|
219
|
-
}, "You have voted ", props.poll.options.find(o => o.id === poll.selectedOption)?.text)), props.
|
|
219
|
+
}, "You have voted ", props.poll.options.find(o => o.id === poll.selectedOption)?.text)), props.isChairPerson && tieOptions.length > 0 && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
220
220
|
className: "poll-choices",
|
|
221
221
|
style: {
|
|
222
222
|
marginTop: '8px'
|
|
@@ -72,6 +72,6 @@ const MenuItem = props => {
|
|
|
72
72
|
},
|
|
73
73
|
righticon: props.mode === 'cascaded' && !_Utils.default.isNull(props.menuItems) && props.menuItems.length > 0 ? /*#__PURE__*/_react.default.createElement(_chevronRight.default, null) : null,
|
|
74
74
|
menuitems: props.menuItems
|
|
75
|
-
}, config.attributes
|
|
75
|
+
}, config.attributes?.label);
|
|
76
76
|
};
|
|
77
77
|
var _default = exports.default = MenuItem;
|
|
@@ -40,6 +40,16 @@ class ProcurementMeetings {
|
|
|
40
40
|
procurementNumber: meeting.procurementNumber
|
|
41
41
|
}, meeting);
|
|
42
42
|
};
|
|
43
|
+
endMeeting = meeting => {
|
|
44
|
+
console.log("\n\n\n\n\nENDING SESSION : ", meeting);
|
|
45
|
+
let api = _ApplicationManager.default.resolveComponentApi("conclusionLayout");
|
|
46
|
+
api.visible = true;
|
|
47
|
+
api = _ApplicationManager.default.resolveComponentApi("toolbar");
|
|
48
|
+
api.visible = false;
|
|
49
|
+
api = _ApplicationManager.default.resolveComponentApi("meetingLayout");
|
|
50
|
+
api.visible = false;
|
|
51
|
+
_SocketManager.default.endSession(meeting.id);
|
|
52
|
+
};
|
|
43
53
|
handleSystemEvent = (event, meeting, viewId) => {
|
|
44
54
|
console.log("PROCESSING MEETING SYSTEM EVENT : ", event);
|
|
45
55
|
let data = event.data;
|
|
@@ -66,14 +76,18 @@ class ProcurementMeetings {
|
|
|
66
76
|
_ApplicationManager.default.resolveComponentApi("vcRoom").loadChats();
|
|
67
77
|
} else if (event.systemEventType === 'meetingStepChanged') {
|
|
68
78
|
let api = _ApplicationManager.default.resolveComponentApi(viewId);
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
79
|
+
api.model.currentStep = data.step;
|
|
80
|
+
api.model.meetingStep = data.step;
|
|
81
|
+
let component = _ApplicationManager.default.resolveComponentApi("toolbar");
|
|
82
|
+
if (component) {
|
|
83
|
+
component.refresh();
|
|
84
|
+
}
|
|
85
|
+
} else if (event.systemEventType === 'documentSaved') {
|
|
86
|
+
let documentType = data.documentType;
|
|
87
|
+
if (documentType === 'minutes') {
|
|
88
|
+
meeting.minutesDraftDocumentId = data.documentId;
|
|
89
|
+
} else if (documentType === 'agenda') {
|
|
90
|
+
meeting.agendaDocumentId = data.documentId;
|
|
77
91
|
}
|
|
78
92
|
}
|
|
79
93
|
};
|
package/package.json
CHANGED