@nualang/nualang-ui-components 0.1.1130 → 0.1.1132
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/Cards/SubscriptionPlan/SubscriptionPlan.js +3 -4
- package/dist/Chat/Messages/Message/Message.js +2 -2
- package/dist/Dialogs/CreateQuestion/CreateQuestion.js +145 -10
- package/dist/Dialogs/GenerateRoleplay/GenerateRoleplay.js +48 -9
- package/dist/Dialogs/InviteDialog/InviteDialog.js +76 -2
- package/dist/Dialogs/VideoViewer/VideoViewer.js +3 -0
- package/dist/Editors/Roleplay/Roleplay.js +7 -1
- package/dist/Live/Game/Game.js +3 -1
- package/dist/Live/HowToJoin/HowToJoin.js +20 -7
- package/dist/Live/HowToJoin/HowToJoin.stories.js +28 -0
- package/dist/Live/WaitingRoom/WaitingRoom.js +28 -5
- package/dist/Misc/ShareButton/ShareDrawer.js +13 -1
- package/dist/Screens/Classrooms/ViewClassroom/ViewClassroom.js +4 -36
- package/dist/Screens/Courses/ViewCourse/ViewCourse.js +4 -37
- package/dist/Screens/Pricing/Pricing.js +23 -16
- package/package.json +2 -1
|
@@ -97,7 +97,7 @@ const PlanButton = (0, _system.styled)(_material.Button)(({
|
|
|
97
97
|
bgPrimary
|
|
98
98
|
}) => ({
|
|
99
99
|
textTransform: "none",
|
|
100
|
-
marginTop: theme.spacing(
|
|
100
|
+
marginTop: theme.spacing(1),
|
|
101
101
|
fontSize: "1rem",
|
|
102
102
|
lineHeight: "2.5",
|
|
103
103
|
borderRadius: theme.spacing(),
|
|
@@ -288,7 +288,7 @@ function SubscriptionPlan({
|
|
|
288
288
|
color: plan.button.buttonColor || "primary",
|
|
289
289
|
onClick: () => plan.button.onClick(),
|
|
290
290
|
bgPrimary: plan.bgPrimary
|
|
291
|
-
}, plan.button.buttonText), plan.planVersions && displayPlan && billingPeriod && currency && /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(PlanButton, {
|
|
291
|
+
}, plan.button.buttonText), plan.planVersions && displayPlan && billingPeriod && currency && /*#__PURE__*/_react.default.createElement("div", null, displayPlan.subButton && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(PlanButton, {
|
|
292
292
|
id: "plan-button",
|
|
293
293
|
fullWidth: true,
|
|
294
294
|
variant: displayPlan.subButton.buttonVariant,
|
|
@@ -341,7 +341,7 @@ function SubscriptionPlan({
|
|
|
341
341
|
sx: {
|
|
342
342
|
fontSize: 15
|
|
343
343
|
}
|
|
344
|
-
})))), /*#__PURE__*/_react.default.createElement(PlanButton, {
|
|
344
|
+
}))))), displayPlan.buyButton && /*#__PURE__*/_react.default.createElement(PlanButton, {
|
|
345
345
|
id: "buy-now-button",
|
|
346
346
|
fullWidth: true,
|
|
347
347
|
variant: displayPlan.buyButton.buttonVariant,
|
|
@@ -367,7 +367,6 @@ SubscriptionPlan.propTypes = {
|
|
|
367
367
|
};
|
|
368
368
|
SubscriptionPlan.defaultProps = {
|
|
369
369
|
t: text => text,
|
|
370
|
-
currency: "usd",
|
|
371
370
|
billingPeriod: "yearly"
|
|
372
371
|
};
|
|
373
372
|
var _default = exports.default = SubscriptionPlan;
|
|
@@ -117,11 +117,11 @@ const useStyles = (0, _mui.makeStyles)()((theme, {
|
|
|
117
117
|
marginTop: -5
|
|
118
118
|
},
|
|
119
119
|
visuallyHidden: {
|
|
120
|
-
position: "
|
|
120
|
+
position: "fixed !important",
|
|
121
121
|
width: "1px !important",
|
|
122
122
|
height: "1px !important",
|
|
123
123
|
padding: "0 !important",
|
|
124
|
-
margin: "
|
|
124
|
+
margin: "0 !important",
|
|
125
125
|
overflow: "hidden !important",
|
|
126
126
|
clip: "rect(0, 0, 0, 0) !important",
|
|
127
127
|
whiteSpace: "nowrap !important",
|
|
@@ -16,9 +16,13 @@ var _colors = require("@mui/material/colors");
|
|
|
16
16
|
var _Checkbox = _interopRequireDefault(require("@mui/material/Checkbox"));
|
|
17
17
|
var _reactBeautifulDnd = require("react-beautiful-dnd");
|
|
18
18
|
var _DragHandle = _interopRequireDefault(require("@mui/icons-material/DragHandle"));
|
|
19
|
+
var _material = require("@mui/material");
|
|
20
|
+
var _iconsMaterial = require("@mui/icons-material");
|
|
19
21
|
var _ResponsiveDialog = _interopRequireDefault(require("../ResponsiveDialog"));
|
|
20
22
|
var _InputHelper = _interopRequireDefault(require("../../Forms/InputHelper"));
|
|
21
23
|
var _debounce = _interopRequireDefault(require("lodash/debounce"));
|
|
24
|
+
var _nualas = _interopRequireDefault(require("../../img/nualas.svg"));
|
|
25
|
+
var _reactRouterDom = require("react-router-dom");
|
|
22
26
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
23
27
|
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
28
|
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; }
|
|
@@ -52,11 +56,16 @@ function CreateQuestion({
|
|
|
52
56
|
update,
|
|
53
57
|
forLangCharacters,
|
|
54
58
|
learnLangCharacters,
|
|
59
|
+
script,
|
|
60
|
+
makeChatGptApiRequest,
|
|
61
|
+
values,
|
|
55
62
|
...otherProps
|
|
56
63
|
}) {
|
|
57
64
|
const [question, setQuestion] = (0, _react.useState)(otherProps.question);
|
|
58
65
|
const [answer, setAnswer] = (0, _react.useState)(initialAnswerState);
|
|
59
66
|
const [answerList, setAnswerList] = (0, _react.useState)(otherProps.answers);
|
|
67
|
+
const [isMessageGenerating, setIsMessageGenerating] = (0, _react.useState)(false);
|
|
68
|
+
const [errorMessage, setErrorMessage] = (0, _react.useState)(null);
|
|
60
69
|
const handleAnswerInputChange = event => {
|
|
61
70
|
const target = event.target;
|
|
62
71
|
const value = target.type === "checkbox" ? target.checked : target.value;
|
|
@@ -131,6 +140,82 @@ function CreateQuestion({
|
|
|
131
140
|
handleAddAnswerDebounced();
|
|
132
141
|
}
|
|
133
142
|
};
|
|
143
|
+
const extractJsonObject = response => {
|
|
144
|
+
let stack = [];
|
|
145
|
+
let startIndex = -1;
|
|
146
|
+
let endIndex = -1;
|
|
147
|
+
for (let i = 0; i < response.length; i++) {
|
|
148
|
+
if (response[i] === "{") {
|
|
149
|
+
if (stack.length === 0) {
|
|
150
|
+
startIndex = i;
|
|
151
|
+
}
|
|
152
|
+
stack.push("{");
|
|
153
|
+
} else if (response[i] === "}") {
|
|
154
|
+
stack.pop();
|
|
155
|
+
if (stack.length === 0) {
|
|
156
|
+
endIndex = i;
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if (startIndex !== -1 && endIndex !== -1) {
|
|
162
|
+
return response.substring(startIndex, endIndex + 1);
|
|
163
|
+
}
|
|
164
|
+
return "";
|
|
165
|
+
};
|
|
166
|
+
function validateResponse(response) {
|
|
167
|
+
if (typeof response !== "object" || response === null) {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
if (typeof response.question !== "string") {
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
if (!Array.isArray(response.answers)) {
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
if (response.answers.length === 0) {
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
let hasCorrectAnswer = false;
|
|
180
|
+
for (const answer of response.answers) {
|
|
181
|
+
if (typeof answer !== "object" || answer === null) {
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
if (typeof answer.text !== "string" || typeof answer.correct !== "boolean" || typeof answer.type !== "string") {
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
if (answer.correct) {
|
|
188
|
+
hasCorrectAnswer = true;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return hasCorrectAnswer;
|
|
192
|
+
}
|
|
193
|
+
const handleGenerateAnswer = async () => {
|
|
194
|
+
try {
|
|
195
|
+
setIsMessageGenerating(true);
|
|
196
|
+
setErrorMessage(null);
|
|
197
|
+
const prompt = `Here is a script: ${JSON.stringify(script)}. Actor 1 is ${values.actor1} and Actor 2 is ${values.actor2} Please generate a new comprehension question based on the script that is completely unique to any existing questions, and provide it in JSON format with the keys 'question' and 'answers'. The 'question' key has the value of the string contraining the question text. The 'answers' key is an array of objects, where each answer object contains 'text', 'correct', and 'type' keys. The type should always be 'multichoice'. Ensure the new question is answered by the script, as the purpose of the question to the test the reader's understanding of the script.`;
|
|
198
|
+
const chatGptResponse = await makeChatGptApiRequest({
|
|
199
|
+
model: "gpt-3.5-turbo",
|
|
200
|
+
prompt
|
|
201
|
+
});
|
|
202
|
+
const jsonResponse = extractJsonObject(chatGptResponse);
|
|
203
|
+
const newQuestion = JSON.parse(jsonResponse);
|
|
204
|
+
if (!validateResponse(newQuestion)) {
|
|
205
|
+
throw new Error("Invalid response from GPT-3.5");
|
|
206
|
+
}
|
|
207
|
+
onSubmit({
|
|
208
|
+
question: newQuestion.question.trim(),
|
|
209
|
+
answers: newQuestion.answers
|
|
210
|
+
});
|
|
211
|
+
setIsMessageGenerating(false);
|
|
212
|
+
handleClose();
|
|
213
|
+
} catch (error) {
|
|
214
|
+
console.error(error);
|
|
215
|
+
setIsMessageGenerating(false);
|
|
216
|
+
setErrorMessage("There was problem generating the roleplay, please try again.");
|
|
217
|
+
}
|
|
218
|
+
};
|
|
134
219
|
const title = update ? t("update_question") : t("add_question");
|
|
135
220
|
const desc = update ? t("update_question_desc") : t("add_question_desc");
|
|
136
221
|
return /*#__PURE__*/_react.default.createElement(_ResponsiveDialog.default, {
|
|
@@ -138,8 +223,57 @@ function CreateQuestion({
|
|
|
138
223
|
handleClose: handleClose,
|
|
139
224
|
handleSubmit: handleSubmit,
|
|
140
225
|
submitText: title,
|
|
141
|
-
dialogTitle: title
|
|
142
|
-
|
|
226
|
+
dialogTitle: isMessageGenerating ? t("generating_question") : title,
|
|
227
|
+
isSubmitDisabled: isMessageGenerating
|
|
228
|
+
}, /*#__PURE__*/_react.default.createElement(_Grid.default, {
|
|
229
|
+
item: true,
|
|
230
|
+
xs: 12,
|
|
231
|
+
textAlign: "center",
|
|
232
|
+
sx: {
|
|
233
|
+
...(!isMessageGenerating && {
|
|
234
|
+
display: "none"
|
|
235
|
+
})
|
|
236
|
+
},
|
|
237
|
+
mx: 2
|
|
238
|
+
}, /*#__PURE__*/_react.default.createElement("img", {
|
|
239
|
+
src: _nualas.default,
|
|
240
|
+
style: {
|
|
241
|
+
maxHeight: 230
|
|
242
|
+
},
|
|
243
|
+
alt: ""
|
|
244
|
+
})), /*#__PURE__*/_react.default.createElement(_Grid.default, {
|
|
245
|
+
item: true,
|
|
246
|
+
xs: 12,
|
|
247
|
+
sx: {
|
|
248
|
+
...(!isMessageGenerating && {
|
|
249
|
+
display: "none"
|
|
250
|
+
})
|
|
251
|
+
},
|
|
252
|
+
mt: 2
|
|
253
|
+
}, /*#__PURE__*/_react.default.createElement(_material.LinearProgress, null)), !isMessageGenerating && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Grid.default, {
|
|
254
|
+
item: true,
|
|
255
|
+
xs: 12,
|
|
256
|
+
mb: 2
|
|
257
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Alert, {
|
|
258
|
+
severity: "info"
|
|
259
|
+
}, t("experimental_feature_desc_answer"), " -", " ", /*#__PURE__*/_react.default.createElement(_reactRouterDom.Link, {
|
|
260
|
+
to: "/contact"
|
|
261
|
+
}, t("contact_form"), "."))), /*#__PURE__*/_react.default.createElement(_material.Box, {
|
|
262
|
+
mb: 2
|
|
263
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Button, {
|
|
264
|
+
onClick: handleGenerateAnswer,
|
|
265
|
+
color: "secondary",
|
|
266
|
+
variant: "contained",
|
|
267
|
+
startIcon: /*#__PURE__*/_react.default.createElement(_iconsMaterial.AutoFixHigh, null)
|
|
268
|
+
}, t("generate_question"))), /*#__PURE__*/_react.default.createElement(_DialogContentText.default, null, desc), /*#__PURE__*/_react.default.createElement(_Grid.default, {
|
|
269
|
+
container: true,
|
|
270
|
+
direction: "row",
|
|
271
|
+
justifyContent: "center",
|
|
272
|
+
alignItems: "flex-end"
|
|
273
|
+
}, /*#__PURE__*/_react.default.createElement(_Grid.default, {
|
|
274
|
+
item: true,
|
|
275
|
+
xs: 12
|
|
276
|
+
}, /*#__PURE__*/_react.default.createElement(_InputHelper.default, {
|
|
143
277
|
t: t,
|
|
144
278
|
value: question,
|
|
145
279
|
onChange: e => setQuestion(e.target.value),
|
|
@@ -153,12 +287,7 @@ function CreateQuestion({
|
|
|
153
287
|
variant: "outlined",
|
|
154
288
|
multiline: true,
|
|
155
289
|
characters: learnLangCharacters ? learnLangCharacters : null
|
|
156
|
-
}), /*#__PURE__*/_react.default.createElement(_Grid.default, {
|
|
157
|
-
container: true,
|
|
158
|
-
direction: "row",
|
|
159
|
-
justifyContent: "center",
|
|
160
|
-
alignItems: "flex-end"
|
|
161
|
-
}, /*#__PURE__*/_react.default.createElement(_Grid.default, {
|
|
290
|
+
})), /*#__PURE__*/_react.default.createElement(_Grid.default, {
|
|
162
291
|
item: true,
|
|
163
292
|
xs: 12
|
|
164
293
|
}, /*#__PURE__*/_react.default.createElement(_InputHelper.default, {
|
|
@@ -176,7 +305,13 @@ function CreateQuestion({
|
|
|
176
305
|
characters: forLangCharacters ? forLangCharacters : null,
|
|
177
306
|
helperText: answer.text && answer.text.trim() !== "" ? t("answer_helper_text") : "",
|
|
178
307
|
multiline: true
|
|
179
|
-
}))
|
|
308
|
+
})), errorMessage && /*#__PURE__*/_react.default.createElement(_Grid.default, {
|
|
309
|
+
item: true,
|
|
310
|
+
xs: 12,
|
|
311
|
+
mt: 2
|
|
312
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Alert, {
|
|
313
|
+
severity: "warning"
|
|
314
|
+
}, errorMessage))), /*#__PURE__*/_react.default.createElement(_reactBeautifulDnd.DragDropContext, {
|
|
180
315
|
onDragEnd: handleOnDragEnd
|
|
181
316
|
}, /*#__PURE__*/_react.default.createElement(_reactBeautifulDnd.Droppable, {
|
|
182
317
|
droppableId: "answers"
|
|
@@ -237,7 +372,7 @@ function CreateQuestion({
|
|
|
237
372
|
name: "correct"
|
|
238
373
|
}),
|
|
239
374
|
label: t("correct_answer")
|
|
240
|
-
})))))), provided.placeholder))));
|
|
375
|
+
})))))), provided.placeholder)))));
|
|
241
376
|
}
|
|
242
377
|
CreateQuestion.defaultProps = {
|
|
243
378
|
t: text => text,
|
|
@@ -53,6 +53,7 @@ function GenerateRoleplayDialog({
|
|
|
53
53
|
const [previewMessages, setPreviewMessages] = (0, _react.useState)([]);
|
|
54
54
|
const [values, setValues] = (0, _react.useState)(initialValues);
|
|
55
55
|
const [errorMessage, setErrorMessage] = (0, _react.useState)(null);
|
|
56
|
+
const [generateQuestions, setGenerateQuestions] = (0, _react.useState)(false);
|
|
56
57
|
const difficultyOptions = difficulties.map((d, idx) => {
|
|
57
58
|
const keyId = `generate-roleplay-difficulty-options-${idx}`;
|
|
58
59
|
return /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
|
|
@@ -108,16 +109,43 @@ function GenerateRoleplayDialog({
|
|
|
108
109
|
}
|
|
109
110
|
}, [generatedRoleplay, generatedRoleplay.script, isGenerateRoleplayDialogOpen]);
|
|
110
111
|
const removeExtraTextFromChatGptResponse = response => {
|
|
111
|
-
let
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
112
|
+
let stack = [];
|
|
113
|
+
let startIndex = -1;
|
|
114
|
+
let endIndex = -1;
|
|
115
|
+
for (let i = 0; i < response.length; i++) {
|
|
116
|
+
if (response[i] === "[") {
|
|
117
|
+
if (stack.length === 0) {
|
|
118
|
+
startIndex = i;
|
|
119
|
+
}
|
|
120
|
+
stack.push("[");
|
|
121
|
+
} else if (response[i] === "]") {
|
|
122
|
+
stack.pop();
|
|
123
|
+
if (stack.length === 0) {
|
|
124
|
+
endIndex = i;
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (startIndex !== -1 && endIndex !== -1) {
|
|
130
|
+
return response.substring(startIndex, endIndex + 1);
|
|
131
|
+
}
|
|
132
|
+
return "";
|
|
115
133
|
};
|
|
134
|
+
function fixMissingComma(jsonString) {
|
|
135
|
+
const fixedJsonString = jsonString.replace(/}\s*{/g, "},{");
|
|
136
|
+
try {
|
|
137
|
+
const jsonObject = JSON.parse(fixedJsonString);
|
|
138
|
+
return jsonObject;
|
|
139
|
+
} catch (error) {
|
|
140
|
+
console.error("Invalid JSON after attempting to fix:", error);
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
116
144
|
const validateScript = script => {
|
|
117
145
|
if (Array.isArray(script) && script.length > 0) {
|
|
118
146
|
for (let index = 0; index < script.length; index++) {
|
|
119
147
|
const scriptLine = script[index];
|
|
120
|
-
if (!((scriptLine.actor === 1 || scriptLine.actor === 2) && script[0].text)) {
|
|
148
|
+
if (!((scriptLine.actor === 1 || scriptLine.actor === 2) && script[0].text) && !(scriptLine.question && Array.isArray(scriptLine.answers) && scriptLine.answers.some(answer => answer.correct === true))) {
|
|
121
149
|
return false;
|
|
122
150
|
}
|
|
123
151
|
}
|
|
@@ -134,6 +162,7 @@ function GenerateRoleplayDialog({
|
|
|
134
162
|
setErrorMessage("");
|
|
135
163
|
let response;
|
|
136
164
|
const prompt = usePdfContext ? `Create an informative conversation between 2 people ${values?.actor1?.name && values?.actor2?.name ? `'${values.actor1.name}' and '${values.actor2.name}' ` : ""} about the topic '${values.roleplayTopic}' in the language ${learnLang}.${values.roleplayDifficulty ? ` The conversation should be ${i18nLanguage === "en-US" ? "ACTFL" : "CEFR"} level '${t(values.roleplayDifficulty)}.'` : ""} Return the conversation inside an array, each text in the conversation should be inside an object in the array. Each object should have the keys actor and text. If the text belongs to person 1 then the key actor should equal to 1 else it should equal to 2. The key text should equal to the text in the conversation. Your response should be in JSON.` : `Create a conversation between 2 people ${values?.actor1?.name && values?.actor2?.name ? `'${values.actor1.name}' and '${values.actor2.name}' ` : ""}about the topic '${values.roleplayTopic}' in the language ${learnLang}.${values.roleplayDifficulty ? ` The conversation should be ${i18nLanguage === "en-US" ? "ACTFL" : "CEFR"} level '${t(values.roleplayDifficulty)}.'` : ""} Return the conversation inside an array, each text in the conversation should be inside an object in the array. Each object should have the keys actor and text. If the text belongs to person 1 then the key actor should equal to 1 else it should equal to 2. The key text should equal to the text in the conversation. Your response should be in JSON`;
|
|
165
|
+
const promptWithQuestions = usePdfContext ? `Create an informative conversation between 2 people ${values?.actor1?.name && values?.actor2?.name ? `'${values.actor1.name}' and '${values.actor2.name}' ` : ""} about the topic '${values.roleplayTopic}' in the language ${learnLang}.${values.roleplayDifficulty ? ` The conversation should be ${i18nLanguage === "en-US" ? "ACTFL" : "CEFR"} level '${t(values.roleplayDifficulty)}.'` : ""} The conversation should be returned inside a single array along with three comprehension questions related to the conversation. Each piece of dialogue and each question should be represented as an object in the array. For dialogue, the objects should have the keys 'actor' and 'text'. The 'actor' key should be set to 1 if the dialogue is spoken by the first actor, and 2 if it is spoken by the second actor. The 'text' key should be set to the dialogue text spoken by that actor. For questions, the objects should have the keys 'question' and 'answers'. The 'question' key should be set to the text of the question being asked. The 'answers' key should be an array of three objects, each representing a different answer to the question where only one is correct and two are incorrect. The objects in the 'answers' array should have the keys 'text', 'correct' and 'type'. The 'text' key should contain the answer text, 'correct' should be true for the correct answer and false for incorrect ones, and 'type' should always be equal to 'multichoice'. The entire output must be in a single JSON array without separating the dialogue and questions into different arrays.` : `Create a conversation between 2 people ${values?.actor1?.name && values?.actor2?.name ? `'${values.actor1.name}' and '${values.actor2.name}' ` : ""}about the topic '${values.roleplayTopic}' in the language ${learnLang}.${values.roleplayDifficulty ? ` The conversation should be ${i18nLanguage === "en-US" ? "ACTFL" : "CEFR"} level '${t(values.roleplayDifficulty)}.'` : ""} The conversation should be returned inside a single array along with three comprehension questions related to the conversation. Each piece of dialogue and each question should be represented as an object in the array. For dialogue, the objects should have the keys 'actor' and 'text'. The 'actor' key should be set to 1 if the dialogue is spoken by the first actor, and 2 if it is spoken by the second actor. The 'text' key should be set to the dialogue text spoken by that actor. For questions, the objects should have the keys 'question' and 'answers'. The 'question' key should be set to the text of the question being asked. The 'answers' key should be an array of three objects, each representing a different answer to the question where only one is correct and two are incorrect. The objects in the 'answers' array should have the keys 'text', 'correct' and 'type'. The 'text' key should contain the answer text, 'correct' should be true for the correct answer and false for incorrect ones, and 'type' should always be equal to 'multichoice'. The entire output must be in a single JSON array without separating the dialogue and questions into different arrays.`;
|
|
137
166
|
const roleplayTemplate = {
|
|
138
167
|
roleplayId: (0, _utils.randomId)(),
|
|
139
168
|
roleplayName: values.roleplayTopic,
|
|
@@ -144,10 +173,11 @@ function GenerateRoleplayDialog({
|
|
|
144
173
|
learnLang: learnLang
|
|
145
174
|
};
|
|
146
175
|
const voices = getAllVoices();
|
|
176
|
+
const activePrompt = generateQuestions ? promptWithQuestions : prompt;
|
|
147
177
|
if (usePdfContext) {
|
|
148
178
|
const getAiQueryResponse = await makeCandooAIQuery({
|
|
149
179
|
modelName: "gpt-4",
|
|
150
|
-
customString:
|
|
180
|
+
customString: activePrompt,
|
|
151
181
|
createdBy: currentUser.Username,
|
|
152
182
|
email: currentUser.UserAttributes.email,
|
|
153
183
|
source: "nualang",
|
|
@@ -166,12 +196,12 @@ function GenerateRoleplayDialog({
|
|
|
166
196
|
} else {
|
|
167
197
|
const chatGptResponse = await makeChatGptApiRequest({
|
|
168
198
|
model: "gpt-3.5-turbo",
|
|
169
|
-
prompt
|
|
199
|
+
prompt: activePrompt
|
|
170
200
|
});
|
|
171
201
|
response = chatGptResponse;
|
|
172
202
|
}
|
|
173
203
|
const jsonResponse = removeExtraTextFromChatGptResponse(response);
|
|
174
|
-
const roleplayScript =
|
|
204
|
+
const roleplayScript = fixMissingComma(jsonResponse);
|
|
175
205
|
if (validateScript(roleplayScript)) {
|
|
176
206
|
const generatedRoleplay = {
|
|
177
207
|
...roleplayTemplate,
|
|
@@ -327,7 +357,16 @@ function GenerateRoleplayDialog({
|
|
|
327
357
|
margin: "normal",
|
|
328
358
|
variant: "outlined",
|
|
329
359
|
fullWidth: true
|
|
330
|
-
}, roleplayLengthOptions)),
|
|
360
|
+
}, roleplayLengthOptions)), !isRoleplayGenerating && /*#__PURE__*/_react.default.createElement(_material.FormGroup, null, /*#__PURE__*/_react.default.createElement(_material.Grid, {
|
|
361
|
+
item: true,
|
|
362
|
+
xs: 12
|
|
363
|
+
}, /*#__PURE__*/_react.default.createElement(_material.FormControlLabel, {
|
|
364
|
+
control: /*#__PURE__*/_react.default.createElement(_material.Checkbox, {
|
|
365
|
+
checked: generateQuestions,
|
|
366
|
+
onChange: e => setGenerateQuestions(e.target.checked)
|
|
367
|
+
}),
|
|
368
|
+
label: "Generate Questions"
|
|
369
|
+
}))), process.env.REACT_APP_STAGE === "dev" && !isRoleplayGenerating && pdfDetails && pdfVectorStoreCreationStatus === "CREATION_COMPLETE" && /*#__PURE__*/_react.default.createElement(_material.Grid, {
|
|
331
370
|
item: true,
|
|
332
371
|
xs: 12
|
|
333
372
|
}, /*#__PURE__*/_react.default.createElement(_material.Typography, null, /*#__PURE__*/_react.default.createElement(_material.Box, {
|
|
@@ -17,7 +17,11 @@ var _googleClassroom = _interopRequireDefault(require("../../img/google-classroo
|
|
|
17
17
|
var _nualangLogoPrimary = _interopRequireDefault(require("../../img/nualang-logo-primary.svg"));
|
|
18
18
|
var _Image = _interopRequireDefault(require("@mui/icons-material/Image"));
|
|
19
19
|
var _ResponsiveDialog = _interopRequireDefault(require("../ResponsiveDialog"));
|
|
20
|
+
var _DialogTitle = _interopRequireDefault(require("@mui/material/DialogTitle"));
|
|
21
|
+
var _DialogContent = _interopRequireDefault(require("@mui/material/DialogContent"));
|
|
20
22
|
var _ArrowBack = _interopRequireDefault(require("@mui/icons-material/ArrowBack"));
|
|
23
|
+
var _QrCode = _interopRequireDefault(require("@mui/icons-material/QrCode"));
|
|
24
|
+
var _qrcode = _interopRequireDefault(require("qrcode.react"));
|
|
21
25
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
22
26
|
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); }
|
|
23
27
|
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; }
|
|
@@ -72,6 +76,7 @@ function InviteDialog({
|
|
|
72
76
|
const [inviteLinkState, setInviteLinkState] = (0, _react.useState)(inviteLink);
|
|
73
77
|
const [classroomEnrolmentKey, setClassroomEnrolmentKey] = (0, _react.useState)(inviteType === "classroom" ? enrolmentKey : null);
|
|
74
78
|
const [teachClassroomsState, setTeachClassroomsState] = (0, _react.useState)(teachClassrooms);
|
|
79
|
+
const [showQRCode, setShowQRCode] = (0, _react.useState)(false);
|
|
75
80
|
const shareEventParams = {
|
|
76
81
|
method: null,
|
|
77
82
|
content_type: inviteTypeState,
|
|
@@ -157,6 +162,9 @@ function InviteDialog({
|
|
|
157
162
|
const handleChangeTab = (event, newValue) => {
|
|
158
163
|
setTabValue(newValue);
|
|
159
164
|
};
|
|
165
|
+
const toggleQRCodeDisplay = () => {
|
|
166
|
+
setShowQRCode(!showQRCode);
|
|
167
|
+
};
|
|
160
168
|
const tabs = [{
|
|
161
169
|
label: t("classrooms")
|
|
162
170
|
}, {
|
|
@@ -300,6 +308,18 @@ function InviteDialog({
|
|
|
300
308
|
borderRadius: "20px"
|
|
301
309
|
}
|
|
302
310
|
}, /*#__PURE__*/_react.default.createElement(_material.List, null, /*#__PURE__*/_react.default.createElement(_DialogContentText.default, null, t("or_invite_via")), /*#__PURE__*/_react.default.createElement(_material.ListItem, {
|
|
311
|
+
button: true,
|
|
312
|
+
disableGutters: true,
|
|
313
|
+
onClick: toggleQRCodeDisplay
|
|
314
|
+
}, /*#__PURE__*/_react.default.createElement(_material.ListItemAvatar, null, /*#__PURE__*/_react.default.createElement(_material.Avatar, {
|
|
315
|
+
variant: "rounded"
|
|
316
|
+
}, /*#__PURE__*/_react.default.createElement(_QrCode.default, {
|
|
317
|
+
sx: {
|
|
318
|
+
fontSize: "xx-large"
|
|
319
|
+
}
|
|
320
|
+
}))), /*#__PURE__*/_react.default.createElement(_material.ListItemText, {
|
|
321
|
+
primary: "QR Code"
|
|
322
|
+
})), /*#__PURE__*/_react.default.createElement(_material.ListItem, {
|
|
303
323
|
button: true,
|
|
304
324
|
disableGutters: true,
|
|
305
325
|
onClick: () => openWindow(`mailto:?subject=${t("invite_email_subject")} ${inviteTypeState.toLowerCase()}&body=${studentInstructionsEmailBody()}`)
|
|
@@ -347,7 +367,28 @@ function InviteDialog({
|
|
|
347
367
|
fill: "#fff"
|
|
348
368
|
}))), /*#__PURE__*/_react.default.createElement(_material.ListItemText, {
|
|
349
369
|
primary: "Twitter"
|
|
350
|
-
}))
|
|
370
|
+
})), /*#__PURE__*/_react.default.createElement(_ResponsiveDialog.default, {
|
|
371
|
+
open: showQRCode,
|
|
372
|
+
handleClose: toggleQRCodeDisplay,
|
|
373
|
+
maxWidth: "md",
|
|
374
|
+
fullWidth: true,
|
|
375
|
+
sx: {
|
|
376
|
+
"& .MuiDialog-paper": {
|
|
377
|
+
width: "50%",
|
|
378
|
+
maxHeight: "80%"
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}, /*#__PURE__*/_react.default.createElement(_DialogTitle.default, null, "QR Code", " "), /*#__PURE__*/_react.default.createElement(_DialogContent.default, {
|
|
382
|
+
dividers: true
|
|
383
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Box, {
|
|
384
|
+
display: "flex",
|
|
385
|
+
justifyContent: "center",
|
|
386
|
+
alignItems: "center",
|
|
387
|
+
height: "100%"
|
|
388
|
+
}, /*#__PURE__*/_react.default.createElement(_qrcode.default, {
|
|
389
|
+
value: inviteLinkState,
|
|
390
|
+
size: 384
|
|
391
|
+
}))))))) : /*#__PURE__*/_react.default.createElement(_material.List, null, /*#__PURE__*/_react.default.createElement(_DialogContentText.default, null, t("select_a_classroom")), teachClassroomsState.map((c, i) => {
|
|
351
392
|
const {
|
|
352
393
|
classroomId,
|
|
353
394
|
classroomName,
|
|
@@ -445,6 +486,18 @@ function InviteDialog({
|
|
|
445
486
|
borderRadius: "20px"
|
|
446
487
|
}
|
|
447
488
|
}, /*#__PURE__*/_react.default.createElement(_material.List, null, /*#__PURE__*/_react.default.createElement(_DialogContentText.default, null, t("or_invite_via")), /*#__PURE__*/_react.default.createElement(_material.ListItem, {
|
|
489
|
+
button: true,
|
|
490
|
+
disableGutters: true,
|
|
491
|
+
onClick: toggleQRCodeDisplay
|
|
492
|
+
}, /*#__PURE__*/_react.default.createElement(_material.ListItemAvatar, null, /*#__PURE__*/_react.default.createElement(_material.Avatar, {
|
|
493
|
+
variant: "rounded"
|
|
494
|
+
}, /*#__PURE__*/_react.default.createElement(_QrCode.default, {
|
|
495
|
+
sx: {
|
|
496
|
+
fontSize: "xx-large"
|
|
497
|
+
}
|
|
498
|
+
}))), /*#__PURE__*/_react.default.createElement(_material.ListItemText, {
|
|
499
|
+
primary: "QR Code"
|
|
500
|
+
})), /*#__PURE__*/_react.default.createElement(_material.ListItem, {
|
|
448
501
|
button: true,
|
|
449
502
|
disableGutters: true,
|
|
450
503
|
onClick: () => openWindow(`mailto:?subject=${t("invite_email_subject")} ${inviteTypeState.toLowerCase()}&body=${studentInstructionsEmailBody()}`)
|
|
@@ -492,7 +545,28 @@ function InviteDialog({
|
|
|
492
545
|
fill: "#fff"
|
|
493
546
|
}))), /*#__PURE__*/_react.default.createElement(_material.ListItemText, {
|
|
494
547
|
primary: "Twitter"
|
|
495
|
-
}))
|
|
548
|
+
})), /*#__PURE__*/_react.default.createElement(_ResponsiveDialog.default, {
|
|
549
|
+
open: showQRCode,
|
|
550
|
+
handleClose: toggleQRCodeDisplay,
|
|
551
|
+
maxWidth: "md",
|
|
552
|
+
fullWidth: true,
|
|
553
|
+
sx: {
|
|
554
|
+
"& .MuiDialog-paper": {
|
|
555
|
+
width: "50%",
|
|
556
|
+
maxHeight: "80%"
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
}, /*#__PURE__*/_react.default.createElement(_DialogTitle.default, null, "QR Code", " "), /*#__PURE__*/_react.default.createElement(_DialogContent.default, {
|
|
560
|
+
dividers: true
|
|
561
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Box, {
|
|
562
|
+
display: "flex",
|
|
563
|
+
justifyContent: "center",
|
|
564
|
+
alignItems: "center",
|
|
565
|
+
height: "100%"
|
|
566
|
+
}, /*#__PURE__*/_react.default.createElement(_qrcode.default, {
|
|
567
|
+
value: inviteLinkState,
|
|
568
|
+
size: 384
|
|
569
|
+
}))))))) : null));
|
|
496
570
|
}
|
|
497
571
|
InviteDialog.defaultProps = {
|
|
498
572
|
t: text => text,
|
|
@@ -30,6 +30,9 @@ function VideoViewer({
|
|
|
30
30
|
if (open) {
|
|
31
31
|
setPlaying(true);
|
|
32
32
|
}
|
|
33
|
+
if (!open) {
|
|
34
|
+
setPlaying(false);
|
|
35
|
+
}
|
|
33
36
|
}, [open]);
|
|
34
37
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_ResponsiveDialog.default, {
|
|
35
38
|
open: open,
|
|
@@ -723,7 +723,13 @@ function Roleplay({
|
|
|
723
723
|
open: isCreateQuestionOpen,
|
|
724
724
|
handleClose: handleCloseCreateQuestion,
|
|
725
725
|
handleTranslate: handleTranslate,
|
|
726
|
-
onSubmit: handleAddQuestion
|
|
726
|
+
onSubmit: handleAddQuestion,
|
|
727
|
+
script: roleplay.script,
|
|
728
|
+
makeChatGptApiRequest: makeChatGptApiRequest,
|
|
729
|
+
values: {
|
|
730
|
+
actor1: roleplay.actor1,
|
|
731
|
+
actor2: roleplay.actor2
|
|
732
|
+
}
|
|
727
733
|
}), isUpdatingQuestion.status && /*#__PURE__*/_react.default.createElement(_CreateQuestion.default, {
|
|
728
734
|
t: t,
|
|
729
735
|
learnLang: learnLang,
|
package/dist/Live/Game/Game.js
CHANGED
|
@@ -251,6 +251,7 @@ function Game({
|
|
|
251
251
|
}
|
|
252
252
|
};
|
|
253
253
|
const nextScriptLine = roleplayMessages?.length && selectedRoleplay?.script?.[roleplayMessages.length] ? selectedRoleplay.script[roleplayMessages.length] : "";
|
|
254
|
+
const videoUrl = topicInfo.videoUrl ?? null;
|
|
254
255
|
return /*#__PURE__*/_react.default.createElement(_material.Dialog, {
|
|
255
256
|
fullScreen: true,
|
|
256
257
|
open: open,
|
|
@@ -381,7 +382,8 @@ function Game({
|
|
|
381
382
|
userImage: userImage,
|
|
382
383
|
exerciseName: exerciseName,
|
|
383
384
|
isLiveGameTutorialOpen: isLiveGameTutorialOpen,
|
|
384
|
-
setIsLiveGameTutorialOpen: setIsLiveGameTutorialOpen
|
|
385
|
+
setIsLiveGameTutorialOpen: setIsLiveGameTutorialOpen,
|
|
386
|
+
videoUrl: videoUrl
|
|
385
387
|
}, otherProps)), gameView === GameViewTypes.GameStarting && /*#__PURE__*/_react.default.createElement(_material.Typography, {
|
|
386
388
|
variant: "h1",
|
|
387
389
|
component: "h2",
|
|
@@ -4,15 +4,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = HowToJoin;
|
|
7
|
-
var _react =
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _material = require("@mui/material");
|
|
9
9
|
var _ChevronLeft = _interopRequireDefault(require("@mui/icons-material/ChevronLeft"));
|
|
10
10
|
var _ChevronRight = _interopRequireDefault(require("@mui/icons-material/ChevronRight"));
|
|
11
11
|
var _SwipeableDrawer = _interopRequireDefault(require("@mui/material/SwipeableDrawer"));
|
|
12
|
-
var _Divider = _interopRequireDefault(require("@mui/material/Divider"));
|
|
13
|
-
var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
|
|
14
12
|
var _styles = require("@mui/material/styles");
|
|
13
|
+
var _qrcode = _interopRequireDefault(require("qrcode.react"));
|
|
15
14
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
|
+
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); }
|
|
16
|
+
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; }
|
|
16
17
|
function HowToJoin({
|
|
17
18
|
t,
|
|
18
19
|
classroomName,
|
|
@@ -21,6 +22,10 @@ function HowToJoin({
|
|
|
21
22
|
handleClose
|
|
22
23
|
}) {
|
|
23
24
|
const theme = (0, _styles.useTheme)();
|
|
25
|
+
const [showQRCode, setShowQRCode] = (0, _react.useState)(false);
|
|
26
|
+
const toggleQRCode = () => {
|
|
27
|
+
setShowQRCode(!showQRCode);
|
|
28
|
+
};
|
|
24
29
|
return /*#__PURE__*/_react.default.createElement(_SwipeableDrawer.default, {
|
|
25
30
|
open: isOpen,
|
|
26
31
|
anchor: "right",
|
|
@@ -57,11 +62,19 @@ function HowToJoin({
|
|
|
57
62
|
primary: /*#__PURE__*/_react.default.createElement(_material.Typography, {
|
|
58
63
|
component: "span",
|
|
59
64
|
variant: "body1"
|
|
60
|
-
}, "Open the classroom", " ", /*#__PURE__*/_react.default.createElement(
|
|
65
|
+
}, "Open the classroom", " ", /*#__PURE__*/_react.default.createElement(_material.Link, {
|
|
61
66
|
href: classroomURL,
|
|
62
67
|
target: "_blank",
|
|
63
68
|
rel: "noreferrer"
|
|
64
|
-
}, classroomName))
|
|
69
|
+
}, classroomName), " ", "or scan its QR Code below", " ")
|
|
70
|
+
})), /*#__PURE__*/_react.default.createElement(_material.Box, {
|
|
71
|
+
sx: {
|
|
72
|
+
pl: 2.5,
|
|
73
|
+
py: 5
|
|
74
|
+
}
|
|
75
|
+
}, /*#__PURE__*/_react.default.createElement(_qrcode.default, {
|
|
76
|
+
value: classroomURL,
|
|
77
|
+
size: 256
|
|
65
78
|
})), /*#__PURE__*/_react.default.createElement(_material.ListItem, null, /*#__PURE__*/_react.default.createElement(_material.ListItemText, {
|
|
66
79
|
primary: /*#__PURE__*/_react.default.createElement(_material.Typography, {
|
|
67
80
|
component: "span",
|
|
@@ -74,7 +87,7 @@ function HowToJoin({
|
|
|
74
87
|
}, "Get ready to play.")
|
|
75
88
|
})))), /*#__PURE__*/_react.default.createElement(_material.Box, {
|
|
76
89
|
flexGrow: 1
|
|
77
|
-
}), /*#__PURE__*/_react.default.createElement(
|
|
90
|
+
}), /*#__PURE__*/_react.default.createElement(_material.Divider, null), /*#__PURE__*/_react.default.createElement(_material.Box, {
|
|
78
91
|
sx: theme => ({
|
|
79
92
|
display: "flex",
|
|
80
93
|
alignItems: "center",
|
|
@@ -82,7 +95,7 @@ function HowToJoin({
|
|
|
82
95
|
padding: "0 8px",
|
|
83
96
|
...theme.mixins.toolbar
|
|
84
97
|
})
|
|
85
|
-
}, /*#__PURE__*/_react.default.createElement(
|
|
98
|
+
}, /*#__PURE__*/_react.default.createElement(_material.IconButton, {
|
|
86
99
|
onClick: handleClose
|
|
87
100
|
}, theme.direction === "ltr" ? /*#__PURE__*/_react.default.createElement(_ChevronRight.default, null) : /*#__PURE__*/_react.default.createElement(_ChevronLeft.default, null))));
|
|
88
101
|
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.props = exports.default = exports.Default = void 0;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _HowToJoin = _interopRequireDefault(require("./HowToJoin"));
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
const Template = args => /*#__PURE__*/_react.default.createElement(_HowToJoin.default, args);
|
|
11
|
+
const props = exports.props = {
|
|
12
|
+
t: t => t,
|
|
13
|
+
classroomName: "Classroom Name",
|
|
14
|
+
classroomURL: "https://example.com/classroom",
|
|
15
|
+
isOpen: true,
|
|
16
|
+
handleClose: () => {}
|
|
17
|
+
};
|
|
18
|
+
const story = {
|
|
19
|
+
title: "Live/HowToJoin",
|
|
20
|
+
excludeStories: ["props"],
|
|
21
|
+
component: _HowToJoin.default
|
|
22
|
+
};
|
|
23
|
+
var _default = exports.default = story;
|
|
24
|
+
const Default = exports.Default = Template.bind({});
|
|
25
|
+
Default.args = {
|
|
26
|
+
...props
|
|
27
|
+
};
|
|
28
|
+
Default.storyName = "default";
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = WaitingRoom;
|
|
7
|
-
var _react =
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _material = require("@mui/material");
|
|
9
9
|
var _index = _interopRequireDefault(require("../../utils/placeholder-images/index"));
|
|
10
10
|
var _styles = require("@mui/material/styles");
|
|
@@ -19,7 +19,11 @@ var _AutoStories = _interopRequireDefault(require("@mui/icons-material/AutoStori
|
|
|
19
19
|
var _MedalSelector = _interopRequireDefault(require("../../Misc/MedalSelector/MedalSelector"));
|
|
20
20
|
var _LiveGameTutorial = _interopRequireDefault(require("../../Dialogs/LiveGameTutorial/LiveGameTutorial"));
|
|
21
21
|
var _reactHookForm = require("react-hook-form");
|
|
22
|
+
var _OndemandVideo = _interopRequireDefault(require("@mui/icons-material/OndemandVideo"));
|
|
23
|
+
var _VideoViewer = _interopRequireDefault(require("../../Dialogs/VideoViewer/VideoViewer"));
|
|
22
24
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
25
|
+
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); }
|
|
26
|
+
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; }
|
|
23
27
|
function WaitingRoom({
|
|
24
28
|
topicImage,
|
|
25
29
|
t,
|
|
@@ -37,11 +41,16 @@ function WaitingRoom({
|
|
|
37
41
|
handleOpenMembersDrawer,
|
|
38
42
|
exercise,
|
|
39
43
|
selectedRoleplay,
|
|
40
|
-
gameAward
|
|
44
|
+
gameAward,
|
|
45
|
+
videoUrl
|
|
41
46
|
}) {
|
|
42
47
|
const theme = (0, _styles.useTheme)();
|
|
43
48
|
const isLgScreen = (0, _useMediaQuery.default)(theme.breakpoints.up("md"));
|
|
44
|
-
|
|
49
|
+
const [isViewVideoOpen, setIsViewVideoOpen] = (0, _react.useState)(false);
|
|
50
|
+
const handleOpenViewVideo = () => {
|
|
51
|
+
setIsViewVideoOpen(true);
|
|
52
|
+
};
|
|
53
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_material.Box, {
|
|
45
54
|
sx: {
|
|
46
55
|
margin: 2,
|
|
47
56
|
width: isLgScreen ? "100%" : "auto",
|
|
@@ -138,7 +147,15 @@ function WaitingRoom({
|
|
|
138
147
|
component: "p",
|
|
139
148
|
color: "textSecondary"
|
|
140
149
|
}, t(exerciseDescription)))
|
|
141
|
-
}))
|
|
150
|
+
})), isCreator && videoUrl && /*#__PURE__*/_react.default.createElement(_material.Button, {
|
|
151
|
+
variant: "contained",
|
|
152
|
+
color: "primary",
|
|
153
|
+
startIcon: /*#__PURE__*/_react.default.createElement(_OndemandVideo.default, null),
|
|
154
|
+
onClick: handleOpenViewVideo,
|
|
155
|
+
sx: {
|
|
156
|
+
alignSelf: "flex-start"
|
|
157
|
+
}
|
|
158
|
+
}, t("play_video"))), isCreator && /*#__PURE__*/_react.default.createElement(_material.Grid, {
|
|
142
159
|
item: true,
|
|
143
160
|
lg: 2,
|
|
144
161
|
md: 2,
|
|
@@ -337,5 +354,11 @@ function WaitingRoom({
|
|
|
337
354
|
sx: {
|
|
338
355
|
fontWeight: "bold"
|
|
339
356
|
}
|
|
340
|
-
}, username)))))
|
|
357
|
+
}, username))))), /*#__PURE__*/_react.default.createElement(_VideoViewer.default, {
|
|
358
|
+
t: t,
|
|
359
|
+
title: topicName,
|
|
360
|
+
s3Url: videoUrl,
|
|
361
|
+
open: isViewVideoOpen,
|
|
362
|
+
handleClose: () => setIsViewVideoOpen(false)
|
|
363
|
+
}));
|
|
341
364
|
}
|
|
@@ -13,6 +13,7 @@ var _reactFeather = require("react-feather");
|
|
|
13
13
|
var _reactCopyToClipboard = require("react-copy-to-clipboard");
|
|
14
14
|
var _googleClassroom = _interopRequireDefault(require("../../img/google-classroom.svg"));
|
|
15
15
|
var _UpgradeSubscription = _interopRequireDefault(require("../../Dialogs/UpgradeSubscription/UpgradeSubscription"));
|
|
16
|
+
var _KeyboardArrowDown = _interopRequireDefault(require("@mui/icons-material/KeyboardArrowDown"));
|
|
16
17
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
18
|
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); }
|
|
18
19
|
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; }
|
|
@@ -130,7 +131,18 @@ function ShareDrawer({
|
|
|
130
131
|
subheader: /*#__PURE__*/_react.default.createElement(_material.ListSubheader, {
|
|
131
132
|
component: "div"
|
|
132
133
|
}, t("share_via"))
|
|
133
|
-
}, /*#__PURE__*/_react.default.createElement(_material.
|
|
134
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Tooltip, {
|
|
135
|
+
title: t("close_drawer"),
|
|
136
|
+
placement: "bottom"
|
|
137
|
+
}, /*#__PURE__*/_react.default.createElement(_material.IconButton, {
|
|
138
|
+
onClick: handleClose,
|
|
139
|
+
sx: {
|
|
140
|
+
position: 'absolute',
|
|
141
|
+
top: 6,
|
|
142
|
+
right: 10,
|
|
143
|
+
zIndex: 1
|
|
144
|
+
}
|
|
145
|
+
}, /*#__PURE__*/_react.default.createElement(_KeyboardArrowDown.default, null))), /*#__PURE__*/_react.default.createElement(_material.ListItem, {
|
|
134
146
|
button: true,
|
|
135
147
|
onClick: () => openWindow(facebookLink)
|
|
136
148
|
}, /*#__PURE__*/_react.default.createElement(_material.ListItemAvatar, null, /*#__PURE__*/_react.default.createElement(_material.Avatar, {
|
|
@@ -20,8 +20,7 @@ var _ResponsiveTabs = _interopRequireDefault(require("../../../Navigation/Respon
|
|
|
20
20
|
var _Timeline = _interopRequireDefault(require("@mui/icons-material/Timeline"));
|
|
21
21
|
var _Courses = _interopRequireDefault(require("../../../Lists/Courses"));
|
|
22
22
|
var _Members = _interopRequireDefault(require("../../../Lists/Members"));
|
|
23
|
-
var _Reviews = _interopRequireDefault(require("../../../
|
|
24
|
-
var _Reviews2 = _interopRequireDefault(require("../../../Dialogs/Reviews"));
|
|
23
|
+
var _Reviews = _interopRequireDefault(require("../../../Dialogs/Reviews"));
|
|
25
24
|
var _Members2 = _interopRequireDefault(require("../../../Dialogs/Members"));
|
|
26
25
|
var _InviteDialog = _interopRequireDefault(require("../../../Dialogs/InviteDialog"));
|
|
27
26
|
var _ShareDrawer = _interopRequireDefault(require("../../../Misc/ShareButton/ShareDrawer"));
|
|
@@ -139,7 +138,6 @@ function OverflowMenu({
|
|
|
139
138
|
anchorEl,
|
|
140
139
|
handleClose,
|
|
141
140
|
handleClickOpenReviews,
|
|
142
|
-
handleClickOpenMembers,
|
|
143
141
|
isCreator,
|
|
144
142
|
isMember,
|
|
145
143
|
handleOpenCoursesModal,
|
|
@@ -183,9 +181,7 @@ function OverflowMenu({
|
|
|
183
181
|
"data-cy": "share-classroom"
|
|
184
182
|
}, t("share")), /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
|
|
185
183
|
onClick: handleClickOpenReviews
|
|
186
|
-
}, t("reviews")), isCreator && /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
|
|
187
|
-
onClick: handleClickOpenMembers
|
|
188
|
-
}, t("members")), !isCreator && !isMember && /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
|
|
184
|
+
}, t("reviews")), !isCreator && !isMember && /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
|
|
189
185
|
onClick: joinClassroom
|
|
190
186
|
}, t("join_classroom")), !isCreator && isMember && /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
|
|
191
187
|
onClick: leaveClassroom
|
|
@@ -542,8 +538,6 @@ function Classroom({
|
|
|
542
538
|
label: t("progress")
|
|
543
539
|
}, {
|
|
544
540
|
label: t("members")
|
|
545
|
-
}, {
|
|
546
|
-
label: t("reviews")
|
|
547
541
|
}, {
|
|
548
542
|
label: t("settings"),
|
|
549
543
|
disabled: true
|
|
@@ -561,12 +555,6 @@ function Classroom({
|
|
|
561
555
|
}, /*#__PURE__*/_react.default.createElement(_Members.default, {
|
|
562
556
|
t: t,
|
|
563
557
|
members: null
|
|
564
|
-
})), /*#__PURE__*/_react.default.createElement(_material.Box, {
|
|
565
|
-
py: 1
|
|
566
|
-
}, /*#__PURE__*/_react.default.createElement(_Reviews.default, {
|
|
567
|
-
t: t,
|
|
568
|
-
reviews: null,
|
|
569
|
-
disabled: true
|
|
570
558
|
}))));
|
|
571
559
|
}
|
|
572
560
|
const {
|
|
@@ -794,27 +782,7 @@ function Classroom({
|
|
|
794
782
|
isCreator: isCreator,
|
|
795
783
|
handleDeleteClassroomMember: handleDeleteClassroomMember
|
|
796
784
|
})))
|
|
797
|
-
}] : []), {
|
|
798
|
-
label: `${t("reviews")} (${reviews.length})`,
|
|
799
|
-
disabled: !(isMember || isCreator) || reviewsEnabled === "disabled",
|
|
800
|
-
id: "Reviews",
|
|
801
|
-
TabContent: /*#__PURE__*/_react.default.createElement(_material.Box, {
|
|
802
|
-
py: 1,
|
|
803
|
-
key: `tab-content-reviews`
|
|
804
|
-
}, /*#__PURE__*/_react.default.createElement(_Reviews.default, {
|
|
805
|
-
t: t,
|
|
806
|
-
reviews: Array.isArray(newReviewsList) && newReviewsList.length ? newReviewsList : [],
|
|
807
|
-
disableSubheader: true,
|
|
808
|
-
hasReviewed: hasReviewed,
|
|
809
|
-
handleCreateReview: handleCreateReview,
|
|
810
|
-
handleDeleteReview: handleDeleteReview,
|
|
811
|
-
updateReview: updateReview,
|
|
812
|
-
isCreator: isCreator,
|
|
813
|
-
subscription: subscription,
|
|
814
|
-
placeholderImageUrl: reviewPlaceholderImageUrl,
|
|
815
|
-
mainSiteUrl: mainSiteUrl
|
|
816
|
-
}))
|
|
817
|
-
}, ...(isCreator ? [{
|
|
785
|
+
}] : []), ...(isCreator ? [{
|
|
818
786
|
label: t("settings"),
|
|
819
787
|
id: "Settings",
|
|
820
788
|
disabled: !isCreator,
|
|
@@ -1087,7 +1055,7 @@ function Classroom({
|
|
|
1087
1055
|
handleClose: handleCloseUpgradeSubcriptionModal,
|
|
1088
1056
|
onConfirm: handleSubscriptionPage,
|
|
1089
1057
|
subscription: subscription
|
|
1090
|
-
}), /*#__PURE__*/_react.default.createElement(
|
|
1058
|
+
}), /*#__PURE__*/_react.default.createElement(_Reviews.default, {
|
|
1091
1059
|
t: t,
|
|
1092
1060
|
dialogTitle: classroomName,
|
|
1093
1061
|
open: isReviewsOpen,
|
|
@@ -18,8 +18,7 @@ var _OndemandVideo = _interopRequireDefault(require("@mui/icons-material/Ondeman
|
|
|
18
18
|
var _Timeline = _interopRequireDefault(require("@mui/icons-material/Timeline"));
|
|
19
19
|
var _ResponsiveTabs = _interopRequireDefault(require("../../../Navigation/ResponsiveTabs"));
|
|
20
20
|
var _Members = _interopRequireDefault(require("../../../Lists/Members"));
|
|
21
|
-
var _Reviews = _interopRequireDefault(require("../../../
|
|
22
|
-
var _Reviews2 = _interopRequireDefault(require("../../../Dialogs/Reviews"));
|
|
21
|
+
var _Reviews = _interopRequireDefault(require("../../../Dialogs/Reviews"));
|
|
23
22
|
var _Members2 = _interopRequireDefault(require("../../../Dialogs/Members"));
|
|
24
23
|
var _ResponsiveDialog = _interopRequireDefault(require("../../../Dialogs/ResponsiveDialog"));
|
|
25
24
|
var _CreateSection = _interopRequireDefault(require("../../../Dialogs/CreateSection"));
|
|
@@ -108,7 +107,6 @@ function OverflowMenu({
|
|
|
108
107
|
anchorEl,
|
|
109
108
|
handleClose,
|
|
110
109
|
handleClickOpenReviews,
|
|
111
|
-
handleClickOpenMembers,
|
|
112
110
|
handleClickOpenCreateSection,
|
|
113
111
|
handleOpenAddToClassroom,
|
|
114
112
|
isCreator,
|
|
@@ -161,9 +159,7 @@ function OverflowMenu({
|
|
|
161
159
|
"data-cy": "share-course"
|
|
162
160
|
}, t("share")), /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
|
|
163
161
|
onClick: handleClickOpenReviews
|
|
164
|
-
}, t("reviews")), isCreator && /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
|
|
165
|
-
onClick: handleClickOpenMembers
|
|
166
|
-
}, t("members")), !isCreator && !isMember && /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
|
|
162
|
+
}, t("reviews")), !isCreator && !isMember && /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
|
|
167
163
|
onClick: joinCourse
|
|
168
164
|
}, t("join_course")), !isCreator && isMember && /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
|
|
169
165
|
onClick: leaveCourse
|
|
@@ -431,9 +427,6 @@ function Course({
|
|
|
431
427
|
}, {
|
|
432
428
|
label: t("members"),
|
|
433
429
|
id: "Members"
|
|
434
|
-
}, {
|
|
435
|
-
label: t("reviews"),
|
|
436
|
-
id: "Reviews"
|
|
437
430
|
}];
|
|
438
431
|
if (!course) {
|
|
439
432
|
let initialTabValue;
|
|
@@ -516,12 +509,6 @@ function Course({
|
|
|
516
509
|
py: 1
|
|
517
510
|
}, /*#__PURE__*/_react.default.createElement(_Members.default, {
|
|
518
511
|
t: t
|
|
519
|
-
})), /*#__PURE__*/_react.default.createElement(_material.Box, {
|
|
520
|
-
py: 1
|
|
521
|
-
}, /*#__PURE__*/_react.default.createElement(_Reviews.default, {
|
|
522
|
-
t: t,
|
|
523
|
-
key: "listrev",
|
|
524
|
-
disabled: true
|
|
525
512
|
}))));
|
|
526
513
|
}
|
|
527
514
|
const {
|
|
@@ -672,27 +659,7 @@ function Course({
|
|
|
672
659
|
isCourseMember: true,
|
|
673
660
|
sections: sections
|
|
674
661
|
})))
|
|
675
|
-
}] : []), {
|
|
676
|
-
label: `${t("reviews")} (${reviews.length})`,
|
|
677
|
-
disabled: !(isMember || isCreator) || reviewsEnabled === "disabled",
|
|
678
|
-
id: "Reviews",
|
|
679
|
-
TabContent: /*#__PURE__*/_react.default.createElement(_material.Box, {
|
|
680
|
-
py: 1,
|
|
681
|
-
key: `tab-content-reviews`
|
|
682
|
-
}, /*#__PURE__*/_react.default.createElement(_Reviews.default, {
|
|
683
|
-
t: t,
|
|
684
|
-
reviews: Array.isArray(newReviewsList) && newReviewsList.length ? newReviewsList : [],
|
|
685
|
-
disableSubheader: true,
|
|
686
|
-
hasReviewed: hasReviewed,
|
|
687
|
-
updateReview: updateReview,
|
|
688
|
-
handleCreateReview: handleCreateReview,
|
|
689
|
-
handleDeleteReview: handleDeleteReview,
|
|
690
|
-
isCreator: isCreator,
|
|
691
|
-
subscription: subscription,
|
|
692
|
-
placeholderImageUrl: reviewPlaceholderImageUrl,
|
|
693
|
-
mainSiteUrl: mainSiteUrl
|
|
694
|
-
}))
|
|
695
|
-
}, ...(isCreator ? [{
|
|
662
|
+
}] : []), ...(isCreator ? [{
|
|
696
663
|
label: t("settings"),
|
|
697
664
|
disabled: isCreator ? false : true,
|
|
698
665
|
id: "Settings",
|
|
@@ -915,7 +882,7 @@ function Course({
|
|
|
915
882
|
handleClose: handleCloseUpgradeSubcriptionModal,
|
|
916
883
|
onConfirm: handleSubscriptionPage,
|
|
917
884
|
subscription: subscription
|
|
918
|
-
}), /*#__PURE__*/_react.default.createElement(
|
|
885
|
+
}), /*#__PURE__*/_react.default.createElement(_Reviews.default, {
|
|
919
886
|
t: t,
|
|
920
887
|
dialogTitle: courseName,
|
|
921
888
|
open: isReviewsOpen,
|
|
@@ -109,16 +109,17 @@ function Pricing({
|
|
|
109
109
|
align: "center",
|
|
110
110
|
color: "textPrimary"
|
|
111
111
|
}, t("pricing_page_title")), /*#__PURE__*/_react.default.createElement(_Typography.default, {
|
|
112
|
-
sx:
|
|
112
|
+
sx: theme => ({
|
|
113
113
|
fontWeight: "normal",
|
|
114
114
|
fontSize: "20px",
|
|
115
|
-
lineHeight: "32px"
|
|
115
|
+
lineHeight: "32px",
|
|
116
|
+
marginBottom: theme.spacing(4)
|
|
116
117
|
}),
|
|
117
118
|
variant: "h1",
|
|
118
119
|
component: "h1",
|
|
119
120
|
align: "center",
|
|
120
121
|
color: "textSecondary"
|
|
121
|
-
}, t("pricing_page_subtitle")), /*#__PURE__*/_react.default.createElement(_Typography.default, {
|
|
122
|
+
}, t("pricing_page_subtitle")), currencies && currencies.length > 1 && /*#__PURE__*/_react.default.createElement(_Typography.default, {
|
|
122
123
|
component: "div",
|
|
123
124
|
sx: theme => ({
|
|
124
125
|
marginTop: theme.spacing(),
|
|
@@ -194,19 +195,25 @@ Pricing.defaultProps = {
|
|
|
194
195
|
t: text => text,
|
|
195
196
|
plans: [],
|
|
196
197
|
initialCurrency: "eur",
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
},
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
198
|
+
// disable currency selection
|
|
199
|
+
// currencies: [
|
|
200
|
+
// {
|
|
201
|
+
// value: "usd",
|
|
202
|
+
// label: "$ USD",
|
|
203
|
+
// },
|
|
204
|
+
// {
|
|
205
|
+
// value: "eur",
|
|
206
|
+
// label: "€ EUR",
|
|
207
|
+
// },
|
|
208
|
+
// {
|
|
209
|
+
// value: "gbp",
|
|
210
|
+
// label: "£ GBP",
|
|
211
|
+
// },
|
|
212
|
+
// {
|
|
213
|
+
// value: "cad",
|
|
214
|
+
// label: "$ CAD",
|
|
215
|
+
// },
|
|
216
|
+
// ],
|
|
210
217
|
freeTrial: {
|
|
211
218
|
isAvailable: false,
|
|
212
219
|
title: "Try for Free for 30 days",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nualang/nualang-ui-components",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1132",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist",
|
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
"n2words": "^1.19.1",
|
|
52
52
|
"pixabay-api": "^1.0.4",
|
|
53
53
|
"pre-commit": "^1.2.2",
|
|
54
|
+
"qrcode.react": "^3.1.0",
|
|
54
55
|
"rdndmb-html5-to-touch": "^8.0.0",
|
|
55
56
|
"react-beautiful-dnd": "^13.1.1",
|
|
56
57
|
"react-chartjs-2": "^5.2.0",
|