@nualang/nualang-ui-components 0.1.1201 → 0.1.1203

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.
Files changed (30) hide show
  1. package/dist/Dialogs/CreatePhrase/CreatePhrase.js +2 -1
  2. package/dist/Dialogs/ImageLibrary/ImageLibrary.js +2 -0
  3. package/dist/Dialogs/SelectExercise/SelectExercise.js +27 -4
  4. package/dist/Editors/Bot/Bot.js +4 -2
  5. package/dist/Editors/Bot/Editor/BotDesigner/BotDesigner.js +4 -2
  6. package/dist/Exercises/Listener/Listener.js +14 -10
  7. package/dist/Exercises/Pronouncer/Pronouncer.js +14 -10
  8. package/dist/Exercises/Translator/Translator.js +14 -10
  9. package/dist/Forms/CreateBot/CreateBot.js +4 -2
  10. package/dist/Forms/CreateClassroom/CreateClassroom.js +4 -2
  11. package/dist/Forms/CreateClassroom/Steps/Customization/Customization.js +5 -2
  12. package/dist/Forms/CreateCourse/CreateCourse.js +3 -1
  13. package/dist/Forms/CreateCourse/Steps/Customization/Customization.js +6 -3
  14. package/dist/Forms/CreateRoleplay/CreateRoleplay.js +4 -2
  15. package/dist/Forms/CreateRoleplayHook/CreateRoleplayHook.js +4 -2
  16. package/dist/Forms/CreateRoleplayHook/Steps/RoleplayInformation/RoleplayInformation.js +4 -2
  17. package/dist/Forms/CreateTopic/Steps/Customization/Customization.js +6 -3
  18. package/dist/Forms/UpdateClassroom/UpdateClassroom.js +4 -2
  19. package/dist/Forms/UpdateCourse/UpdateCourse.js +3 -1
  20. package/dist/Forms/UpdateTopic/UpdateTopic.js +3 -1
  21. package/dist/Lists/CourseSelection/CourseSelection.js +12 -1
  22. package/dist/Lists/ExerciseSelection/ExerciseSelection.js +127 -11
  23. package/dist/Lists/RoleplaySelection/RoleplaySelection.js +78 -5
  24. package/dist/Live/LiveListener/LiveListener.js +14 -10
  25. package/dist/Live/LiveTranslator/LiveTranslator.js +16 -12
  26. package/dist/Screens/Classrooms/ViewClassroom/ViewClassroom.js +2 -1
  27. package/dist/Screens/Courses/ViewCourse/ViewCourse.js +2 -1
  28. package/dist/Screens/Courses/ViewCourse/ViewTopic/ViewTopic.js +4 -2
  29. package/dist/utils/voiceImages.js +22 -0
  30. package/package.json +1 -1
@@ -599,7 +599,8 @@ function CreatePhrase({
599
599
  autoCrop: true,
600
600
  autoSuggest: true,
601
601
  autoSuggestedImages: autoSuggestedImages,
602
- selectedImage: selectedImage
602
+ selectedImage: selectedImage,
603
+ verificationStatus: verificationStatus
603
604
  })
604
605
  })]
605
606
  })]
@@ -21,6 +21,7 @@ const useStyles = (0, _mui.makeStyles)()(() => ({
21
21
  function ImageLibraryDialog({
22
22
  open,
23
23
  handleClose,
24
+ verificationStatus,
24
25
  ...otherProps
25
26
  }) {
26
27
  const {
@@ -33,6 +34,7 @@ function ImageLibraryDialog({
33
34
  maxWidth: "xl",
34
35
  dialogContentClassName: classes.dialogContent,
35
36
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ImageLibrary.default, {
37
+ verificationStatus: verificationStatus,
36
38
  ...otherProps
37
39
  })
38
40
  });
@@ -19,16 +19,36 @@ function SelectExercise({
19
19
  getCourseSections,
20
20
  getRoleplays,
21
21
  handleCreateGame,
22
- username
22
+ username,
23
+ useCase = "live"
23
24
  }) {
24
25
  const [isExerciseSelected, setIsExerciseSelected] = (0, _react.useState)(false);
26
+ const [selectedExercises, setSelectedExercises] = (0, _react.useState)([]);
27
+ const handleSelectExercise = (exercises = []) => {
28
+ setSelectedExercises(prevSelectedExercises => {
29
+ let updatedExercises = [...prevSelectedExercises];
30
+ exercises.forEach(exercise => {
31
+ if (exercise.courseSectionTopicId && updatedExercises.some(e => e.courseSectionTopicId === exercise.courseSectionTopicId && e.name === exercise.name)) {
32
+ updatedExercises = updatedExercises.filter(e => e.courseSectionTopicId !== exercise.courseSectionTopicId || e.name !== exercise.name);
33
+ } else if (exercise.roleplayId && updatedExercises.some(e => e.roleplayId === exercise.roleplayId && e.game === exercise.game)) {
34
+ updatedExercises = updatedExercises.filter(e => e.courseSectionTopicId || e.roleplayId !== exercise.roleplayId || e.game !== exercise.game);
35
+ } else {
36
+ updatedExercises.push(exercise);
37
+ }
38
+ });
39
+ return updatedExercises;
40
+ });
41
+ };
25
42
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_ResponsiveDialog.default, {
26
43
  open: open,
27
44
  handleClose: handleClose,
28
- dialogTitle: t("play_live"),
45
+ dialogTitle: useCase === "live" ? t("play_live") : t("assignment"),
29
46
  maxWidth: "md",
47
+ handleSubmit: useCase === "live" ? null : () => {},
48
+ submitText: useCase === "live" ? null : t("add_exercises"),
49
+ isSubmitDisabled: selectedExercises.length === 0,
30
50
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_material.DialogContentText, {
31
- children: t("live_dialog_description")
51
+ children: useCase === "live" ? t("live_dialog_description") : t("assign_exercises_description")
32
52
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_system.Box, {
33
53
  mt: 1,
34
54
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_CourseSelection.default, {
@@ -40,7 +60,10 @@ function SelectExercise({
40
60
  t: t,
41
61
  isExerciseSelected: isExerciseSelected,
42
62
  setIsExerciseSelected: setIsExerciseSelected,
43
- isDialogOpen: open
63
+ isDialogOpen: open,
64
+ useCase: useCase,
65
+ selectedExercises: selectedExercises,
66
+ handleSelectExercise: useCase === "assignment" ? handleSelectExercise : null
44
67
  })
45
68
  })]
46
69
  });
@@ -117,7 +117,8 @@ function Bot({
117
117
  sectionId,
118
118
  topicId,
119
119
  initialTopicGoal,
120
- isUserInternal
120
+ isUserInternal,
121
+ verificationStatus
121
122
  }) {
122
123
  const {
123
124
  recognitionState,
@@ -750,7 +751,8 @@ function Bot({
750
751
  onSubmit: onSubmit,
751
752
  subscription: subscription,
752
753
  handleBotInstructionsImageUpload: handleBotInstructionsImageUpload,
753
- isUserInternal: isUserInternal
754
+ isUserInternal: isUserInternal,
755
+ verificationStatus: verificationStatus
754
756
  })
755
757
  }) : null]
756
758
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ResponsiveDialog.default, {
@@ -68,7 +68,8 @@ function BotDesigner(props) {
68
68
  handleUploadBotExerciseImage,
69
69
  botId,
70
70
  simplified,
71
- handleOnBlur
71
+ handleOnBlur,
72
+ verificationStatus
72
73
  } = props;
73
74
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
74
75
  children: [rivescriptJSON && rivescriptJSON.begin.var && /*#__PURE__*/(0, _jsxRuntime.jsx)(_VarList.default, {
@@ -87,7 +88,8 @@ function BotDesigner(props) {
87
88
  handleUploadBotExerciseImage: handleUploadBotExerciseImage,
88
89
  botId: botId,
89
90
  simplified: simplified,
90
- handleOnBlur: handleOnBlur
91
+ handleOnBlur: handleOnBlur,
92
+ verificationStatus: verificationStatus
91
93
  }), rivescriptJSON && rivescriptJSON.begin.sub && !simplified && /*#__PURE__*/(0, _jsxRuntime.jsx)(_SubList.default, {
92
94
  t: t,
93
95
  subs: rivescriptJSON.begin.sub,
@@ -32,6 +32,7 @@ var _styles = require("@mui/material/styles");
32
32
  var _reactBeautifulDnd = require("react-beautiful-dnd");
33
33
  var _index = require("../../utils/index");
34
34
  var _useWordBankFocus = _interopRequireDefault(require("../../hooks/useWordBankFocus"));
35
+ var _voiceImages = _interopRequireDefault(require("../../utils/voiceImages"));
35
36
  var _jsxRuntime = require("react/jsx-runtime");
36
37
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
37
38
  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); }
@@ -343,20 +344,23 @@ function Listener({
343
344
  voiceLanguageCode,
344
345
  voicePitch
345
346
  } = topicInfo;
347
+ const voiceMap = (0, _voiceImages.default)(voices || []);
346
348
  const getVoiceImage = () => {
347
- let voiceOptionsArray = voiceLanguageCode && voices[voiceLanguageCode] ? voices[voiceLanguageCode].voiceOptions : [];
348
- for (let i = 0; i < voiceOptionsArray.length; i++) {
349
- if (voiceOptionsArray[i].name === voice) {
350
- return voiceOptionsArray[i].speakingImage;
351
- }
349
+ try {
350
+ const exerciseVoice = voiceMap.get(voice) || {};
351
+ return exerciseVoice.speakingImage || null;
352
+ } catch (error) {
353
+ console.error('Error retrieving voice image:', error);
354
+ return null;
352
355
  }
353
356
  };
354
357
  const getNualaCelebratingImage = () => {
355
- let voiceOptionsArray = voiceLanguageCode && voices[voiceLanguageCode] ? voices[voiceLanguageCode].voiceOptions : [];
356
- for (let i = 0; i < voiceOptionsArray.length; i++) {
357
- if (voiceOptionsArray[i].name === voice) {
358
- return voiceOptionsArray[i].celebratingImage;
359
- }
358
+ try {
359
+ const exerciseVoice = voiceMap.get(voice) || {};
360
+ return exerciseVoice.celebratingImage || null;
361
+ } catch (error) {
362
+ console.error('Error retrieving celebrating image:', error);
363
+ return null;
360
364
  }
361
365
  };
362
366
  const joyrideSteps = [{
@@ -33,6 +33,7 @@ var _ReportProblem = _interopRequireDefault(require("../../Misc/ReportProblem"))
33
33
  var _ChatBubble = _interopRequireDefault(require("../../Misc/ChatBubble/ChatBubble"));
34
34
  var _WaveFormLite = _interopRequireDefault(require("../../Misc/WaveFormLite"));
35
35
  var _utils = require("../../utils");
36
+ var _voiceImages = _interopRequireDefault(require("../../utils/voiceImages"));
36
37
  var _jsxRuntime = require("react/jsx-runtime");
37
38
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
38
39
  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); }
@@ -441,20 +442,23 @@ function Pronouncer({
441
442
  voiceLanguageCode,
442
443
  voicePitch
443
444
  } = topicInfo;
445
+ const voiceMap = (0, _voiceImages.default)(voices || []);
444
446
  const getVoiceImage = () => {
445
- let voiceOptionsArray = voiceLanguageCode && voices[voiceLanguageCode] ? voices[voiceLanguageCode].voiceOptions : [];
446
- for (let i = 0; i < voiceOptionsArray.length; i++) {
447
- if (voiceOptionsArray[i].name === voice) {
448
- return voiceOptionsArray[i].speakingImage;
449
- }
447
+ try {
448
+ const exerciseVoice = voiceMap.get(voice) || {};
449
+ return exerciseVoice.speakingImage || null;
450
+ } catch (error) {
451
+ console.error('Error retrieving voice image:', error);
452
+ return null;
450
453
  }
451
454
  };
452
455
  const getNualaCelebratingImage = () => {
453
- let voiceOptionsArray = voiceLanguageCode && voices[voiceLanguageCode] ? voices[voiceLanguageCode].voiceOptions : [];
454
- for (let i = 0; i < voiceOptionsArray.length; i++) {
455
- if (voiceOptionsArray[i].name === voice) {
456
- return voiceOptionsArray[i].celebratingImage;
457
- }
456
+ try {
457
+ const exerciseVoice = voiceMap.get(voice) || {};
458
+ return exerciseVoice.celebratingImage || null;
459
+ } catch (error) {
460
+ console.error('Error retrieving celebrating image:', error);
461
+ return null;
458
462
  }
459
463
  };
460
464
  const isListeningIndicatorTextVisible = recognizing && interimTranscript === "" && finalTranscript === "" ? true : false;
@@ -32,6 +32,7 @@ var _ChatBubble = _interopRequireDefault(require("../../Misc/ChatBubble/ChatBubb
32
32
  var _WaveFormLite = _interopRequireDefault(require("../../Misc/WaveFormLite"));
33
33
  var _styles = require("@mui/material/styles");
34
34
  var _reactBeautifulDnd = require("react-beautiful-dnd");
35
+ var _voiceImages = _interopRequireDefault(require("../../utils/voiceImages"));
35
36
  var _index = require("../../utils/index");
36
37
  var _useWordBankFocus = _interopRequireDefault(require("../../hooks/useWordBankFocus"));
37
38
  var _jsxRuntime = require("react/jsx-runtime");
@@ -485,20 +486,23 @@ function Translator({
485
486
  voiceLanguageCode,
486
487
  voicePitch
487
488
  } = topicInfo;
489
+ const voiceMap = (0, _voiceImages.default)(voices || []);
488
490
  const getVoiceImage = () => {
489
- let voiceOptionsArray = voiceLanguageCode && voices[voiceLanguageCode] ? voices[voiceLanguageCode].voiceOptions : [];
490
- for (let i = 0; i < voiceOptionsArray.length; i++) {
491
- if (voiceOptionsArray[i].name === voice) {
492
- return voiceOptionsArray[i].speakingImage;
493
- }
491
+ try {
492
+ const exerciseVoice = voiceMap.get(voice) || {};
493
+ return exerciseVoice.speakingImage || null;
494
+ } catch (error) {
495
+ console.error('Error retrieving voice image:', error);
496
+ return null;
494
497
  }
495
498
  };
496
499
  const getNualaCelebratingImage = () => {
497
- let voiceOptionsArray = voiceLanguageCode && voices[voiceLanguageCode] ? voices[voiceLanguageCode].voiceOptions : [];
498
- for (let i = 0; i < voiceOptionsArray.length; i++) {
499
- if (voiceOptionsArray[i].name === voice) {
500
- return voiceOptionsArray[i].celebratingImage;
501
- }
500
+ try {
501
+ const exerciseVoice = voiceMap.get(voice) || {};
502
+ return exerciseVoice.celebratingImage || null;
503
+ } catch (error) {
504
+ console.error('Error retrieving celebrating image:', error);
505
+ return null;
502
506
  }
503
507
  };
504
508
  const handleKeyDown = event => {
@@ -50,7 +50,8 @@ function CreateBot({
50
50
  isUpgradePossible: true
51
51
  },
52
52
  langChar,
53
- isUserInternal
53
+ isUserInternal,
54
+ verificationStatus
54
55
  }) {
55
56
  const difficultyOptions = difficulties.map((d, idx) => {
56
57
  const keyId = `creabotvoicx_${(0, _index.randomId)()}${idx}`;
@@ -72,7 +73,8 @@ function CreateBot({
72
73
  subscription: subscription,
73
74
  voiceOptions: voices,
74
75
  langChar: langChar,
75
- isUserInternal: isUserInternal
76
+ isUserInternal: isUserInternal,
77
+ verificationStatus: verificationStatus
76
78
  });
77
79
  }
78
80
  CreateBot.propTypes = {};
@@ -24,7 +24,8 @@ function CreateClassroom({
24
24
  subscription = {
25
25
  isUpgradePossible: true
26
26
  },
27
- learnLang
27
+ learnLang,
28
+ verificationStatus
28
29
  }) {
29
30
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_MultiStepForm.default, {
30
31
  initialValues: {
@@ -49,7 +50,8 @@ function CreateClassroom({
49
50
  languages: languages,
50
51
  forLanguages: forLanguages,
51
52
  fileSizeLimit: fileSizeLimit,
52
- subscription: subscription
53
+ subscription: subscription,
54
+ verificationStatus: verificationStatus
53
55
  });
54
56
  }
55
57
  CreateClassroom.propTypes = {};
@@ -17,6 +17,7 @@ function Customization({
17
17
  handleChange,
18
18
  values,
19
19
  fileSizeLimit,
20
+ verificationStatus,
20
21
  isUpdateClassroom = false
21
22
  }) {
22
23
  const {
@@ -45,7 +46,8 @@ function Customization({
45
46
  handleChange: handleChange,
46
47
  fileSizeLimit: fileSizeLimit,
47
48
  previewComponent: _PreviewCard.default,
48
- isBanner: false
49
+ isBanner: false,
50
+ verificationStatus: verificationStatus
49
51
  })
50
52
  })]
51
53
  }), isUpdateClassroom ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.Grid, {
@@ -65,7 +67,8 @@ function Customization({
65
67
  fileSizeLimit: fileSizeLimit,
66
68
  previewComponent: _PreviewCard.default,
67
69
  isBanner: true,
68
- aspect: 16 / 2.5
70
+ aspect: 16 / 2.5,
71
+ verificationStatus: verificationStatus
69
72
  })
70
73
  })]
71
74
  }) : null]
@@ -24,6 +24,7 @@ function CreateCourse({
24
24
  forLanguages = {},
25
25
  fileSizeLimit,
26
26
  userImage,
27
+ verificationStatus,
27
28
  subscription = {
28
29
  isUpgradePossible: true
29
30
  },
@@ -58,7 +59,8 @@ function CreateCourse({
58
59
  languageOptions: languages,
59
60
  forLanguageOptions: forLanguages,
60
61
  fileSizeLimit: fileSizeLimit,
61
- subscription: subscription
62
+ subscription: subscription,
63
+ verificationStatus: verificationStatus
62
64
  });
63
65
  }
64
66
  CreateCourse.propTypes = {};
@@ -17,7 +17,8 @@ function Customization({
17
17
  handleChange,
18
18
  values,
19
19
  fileSizeLimit,
20
- isUpdateCourse = false
20
+ isUpdateCourse = false,
21
+ verificationStatus
21
22
  }) {
22
23
  const {
23
24
  picture,
@@ -45,7 +46,8 @@ function Customization({
45
46
  handleChange: handleChange,
46
47
  fileSizeLimit: fileSizeLimit,
47
48
  previewComponent: _PreviewCard.default,
48
- isBanner: false
49
+ isBanner: false,
50
+ verificationStatus: verificationStatus
49
51
  })
50
52
  })]
51
53
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.Grid, {
@@ -65,7 +67,8 @@ function Customization({
65
67
  fileSizeLimit: fileSizeLimit,
66
68
  previewComponent: _PreviewCard.default,
67
69
  isBanner: true,
68
- aspect: 16 / 2.5
70
+ aspect: 16 / 2.5,
71
+ verificationStatus: verificationStatus
69
72
  })
70
73
  })]
71
74
  })]
@@ -62,7 +62,8 @@ function CreateRoleplay({
62
62
  isUpgradePossible: true
63
63
  },
64
64
  langChar,
65
- isUserInternal
65
+ isUserInternal,
66
+ verificationStatus
66
67
  }) {
67
68
  const difficultyOptions = difficulties.map((d, idx) => {
68
69
  const keyId = `crearolax${(0, _index.randomId)()}${idx}`;
@@ -85,7 +86,8 @@ function CreateRoleplay({
85
86
  fileSizeLimit: fileSizeLimit,
86
87
  subscription: subscription,
87
88
  langChar: langChar,
88
- isUserInternal: isUserInternal
89
+ isUserInternal: isUserInternal,
90
+ verificationStatus: verificationStatus
89
91
  });
90
92
  }
91
93
  CreateRoleplay.propTypes = {};
@@ -60,7 +60,8 @@ function CreateRoleplayHook({
60
60
  fileSizeLimit,
61
61
  subscription = {
62
62
  isUpgradePossible: true
63
- }
63
+ },
64
+ verificationStatus
64
65
  }) {
65
66
  const difficultyOptions = difficulties.map((d, idx) => {
66
67
  const keyId = `crearolax${(0, _index.randomId)()}${idx}`;
@@ -81,7 +82,8 @@ function CreateRoleplayHook({
81
82
  avatars: avatars,
82
83
  difficultyOptions: difficultyOptions,
83
84
  fileSizeLimit: fileSizeLimit,
84
- subscription: subscription
85
+ subscription: subscription,
86
+ verificationStatus: verificationStatus
85
87
  });
86
88
  }
87
89
  CreateRoleplayHook.propTypes = {};
@@ -225,7 +225,8 @@ function RoleplayInformation({
225
225
  handleSpeak,
226
226
  avatars,
227
227
  fileSizeLimit,
228
- isUserInternal
228
+ isUserInternal,
229
+ verificationStatus
229
230
  }) {
230
231
  const formContext = (0, _reactHookForm.useFormContext)();
231
232
  const {
@@ -335,7 +336,8 @@ function RoleplayInformation({
335
336
  value: value,
336
337
  handleChange: onChange,
337
338
  fileSizeLimit: fileSizeLimit,
338
- previewComponent: _PreviewCard.default
339
+ previewComponent: _PreviewCard.default,
340
+ verificationStatus: verificationStatus
339
341
  })
340
342
  })
341
343
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Grid, {
@@ -17,7 +17,8 @@ function Customization({
17
17
  handleChange,
18
18
  values,
19
19
  fileSizeLimit,
20
- isUpdateTopic = false
20
+ isUpdateTopic = false,
21
+ verificationStatus
21
22
  }) {
22
23
  const {
23
24
  picture,
@@ -45,7 +46,8 @@ function Customization({
45
46
  handleChange: handleChange,
46
47
  fileSizeLimit: fileSizeLimit,
47
48
  previewComponent: _PreviewCard.default,
48
- isBanner: false
49
+ isBanner: false,
50
+ verificationStatus: verificationStatus
49
51
  })
50
52
  })]
51
53
  }), isUpdateTopic ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.Grid, {
@@ -65,7 +67,8 @@ function Customization({
65
67
  fileSizeLimit: fileSizeLimit,
66
68
  previewComponent: _PreviewCard.default,
67
69
  isBanner: true,
68
- aspect: 16 / 2.5
70
+ aspect: 16 / 2.5,
71
+ verificationStatus: verificationStatus
69
72
  })
70
73
  })]
71
74
  }) : null]
@@ -47,7 +47,8 @@ function UpdateClassroom({
47
47
  courses,
48
48
  scrollToDiscuss,
49
49
  setScrollToDiscuss,
50
- isClassroomArchived = false
50
+ isClassroomArchived = false,
51
+ verificationStatus
51
52
  }) {
52
53
  const {
53
54
  classes
@@ -278,7 +279,8 @@ function UpdateClassroom({
278
279
  values: values,
279
280
  fileSizeLimit: fileSizeLimit,
280
281
  isUpdateClassroom: true,
281
- ...otherProps
282
+ ...otherProps,
283
+ verificationStatus: verificationStatus
282
284
  })
283
285
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Divider, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.CardActions, {
284
286
  className: classes.padding,
@@ -40,7 +40,8 @@ function UpdateCourse({
40
40
  languages,
41
41
  forLanguages,
42
42
  fileSizeLimit,
43
- subscription
43
+ subscription,
44
+ verificationStatus
44
45
  }) {
45
46
  const difficultyOptions = difficulties.map((d, idx) => {
46
47
  const keyId = `crearolax${(0, _index.randomId)()}${idx}`;
@@ -229,6 +230,7 @@ function UpdateCourse({
229
230
  values: values,
230
231
  fileSizeLimit: fileSizeLimit,
231
232
  isUpdateCourse: true,
233
+ verificationStatus: verificationStatus,
232
234
  ...otherProps
233
235
  })
234
236
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Divider, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.CardActions, {
@@ -55,7 +55,8 @@ function UpdateTopic({
55
55
  voices = {},
56
56
  handleSpeak,
57
57
  learnLang,
58
- isUserInternal
58
+ isUserInternal,
59
+ verificationStatus
59
60
  }) {
60
61
  const {
61
62
  classes
@@ -251,6 +252,7 @@ function UpdateTopic({
251
252
  values: values,
252
253
  fileSizeLimit: fileSizeLimit,
253
254
  isUpdateTopic: true,
255
+ verificationStatus: verificationStatus,
254
256
  ...otherProps
255
257
  })
256
258
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Divider.default, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_CardActions.default, {
@@ -23,6 +23,9 @@ function Course({
23
23
  isExerciseSelected,
24
24
  setIsExerciseSelected,
25
25
  isDialogOpen,
26
+ handleSelectExercise,
27
+ selectedExercises,
28
+ useCase,
26
29
  assignment,
27
30
  handleStartExercise,
28
31
  isAssignment,
@@ -97,6 +100,9 @@ function Course({
97
100
  isExerciseSelected: isExerciseSelected,
98
101
  setIsExerciseSelected: setIsExerciseSelected,
99
102
  getRoleplays: getRoleplays,
103
+ handleSelectExercise: handleSelectExercise,
104
+ selectedExercises: selectedExercises,
105
+ useCase: useCase,
100
106
  assignment: assignment,
101
107
  handleStartExercise: handleStartExercise,
102
108
  isAssignment: isAssignment,
@@ -115,13 +121,15 @@ function CourseSelection({
115
121
  t,
116
122
  isExerciseSelected,
117
123
  setIsExerciseSelected,
124
+ handleSelectExercise,
125
+ selectedExercises,
126
+ useCase,
118
127
  assignment,
119
128
  handleStartExercise,
120
129
  isAssignment,
121
130
  isCreator,
122
131
  ...otherProps
123
132
  }) {
124
- console.log("courses", courses);
125
133
  return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
126
134
  children: courses.map((course, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(Course, {
127
135
  course: course,
@@ -133,6 +141,9 @@ function CourseSelection({
133
141
  t: t,
134
142
  isExerciseSelected: isExerciseSelected,
135
143
  setIsExerciseSelected: setIsExerciseSelected,
144
+ handleSelectExercise: handleSelectExercise,
145
+ selectedExercises: selectedExercises,
146
+ useCase: useCase,
136
147
  assignment: assignment,
137
148
  handleStartExercise: handleStartExercise,
138
149
  isAssignment: isAssignment,
@@ -14,6 +14,7 @@ var _Hearing = _interopRequireDefault(require("@mui/icons-material/Hearing"));
14
14
  var _SwapHoriz = _interopRequireDefault(require("@mui/icons-material/SwapHoriz"));
15
15
  var _ExpandMore = _interopRequireDefault(require("@mui/icons-material/ExpandMore"));
16
16
  var _ExpandLess = _interopRequireDefault(require("@mui/icons-material/ExpandLess"));
17
+ var _RecordVoiceOver = _interopRequireDefault(require("@mui/icons-material/RecordVoiceOver"));
17
18
  var _Forum = _interopRequireDefault(require("@mui/icons-material/Forum"));
18
19
  var _OndemandVideo = _interopRequireDefault(require("@mui/icons-material/OndemandVideo"));
19
20
  var _RoleplaySelection = _interopRequireDefault(require("../RoleplaySelection/RoleplaySelection"));
@@ -32,14 +33,18 @@ function Exercise({
32
33
  setIsExerciseSelected,
33
34
  roleplays,
34
35
  phrases,
36
+ handleSelectExercise = null,
37
+ selectedExercises,
38
+ useCase,
35
39
  assignment,
36
40
  handleStartExercise,
37
41
  isAssignment,
38
42
  isCreator
39
43
  }) {
40
- console.log("section", section);
41
44
  const [listeningHidden, setListeningHidden] = (0, _react.useState)(false);
42
45
  const [translationHidden, setTranslationHidden] = (0, _react.useState)(false);
46
+ const [pronunciationHidden, setPronunciationHidden] = (0, _react.useState)(false);
47
+ const isAssignmentExerciseSelected = selectedExercises.some(e => e.name === name && e.courseSectionTopicId === courseSectionTopicId);
43
48
  const noRoleplays = name.toLowerCase() === "roleplays" && roleplays.length === 0;
44
49
  const [roleplaysOpen, setRoleplaysOpen] = (0, _react.useState)(noRoleplays ? false : true);
45
50
  const handleToggleRoleplays = () => {
@@ -62,18 +67,23 @@ function Exercise({
62
67
  if (topic.hiddenExercises && topic.hiddenExercises.includes("translation")) {
63
68
  setTranslationHidden(true);
64
69
  }
70
+ if (topic.hiddenExercises && topic.hiddenExercises.includes("pronunciation")) {
71
+ setPronunciationHidden(true);
72
+ }
65
73
  });
66
74
  }, [section]);
67
75
  const isValidExercise = phrases.length >= 2 || name.toLowerCase() === "roleplays";
68
- if (name.toLowerCase() === "listening" && listeningHidden || name.toLowerCase() === "translation" && translationHidden) {
76
+ if (name.toLowerCase() === "listening" && listeningHidden || name.toLowerCase() === "translation" && translationHidden || name.toLowerCase() === "pronunciation" && pronunciationHidden) {
69
77
  return null;
70
78
  }
71
79
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.Tooltip, {
72
80
  title: name === "roleplays" && noRoleplays ? t("topic_no_roleplays") : !isValidExercise ? t("minimum_two_phrases") : "",
73
81
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.ListItemButton, {
74
82
  onClick: () => {
75
- name.toLowerCase() === "roleplays" ? handleToggleRoleplays() : handleExerciseSelected();
76
- //add start exercise function here if it is an assignment
83
+ name.toLowerCase() === "roleplays" ? handleToggleRoleplays() : useCase === "assignment" ? handleSelectExercise([{
84
+ name,
85
+ courseSectionTopicId
86
+ }]) : handleExerciseSelected();
77
87
  },
78
88
  display: "flex",
79
89
  alignItems: "center",
@@ -88,6 +98,8 @@ function Exercise({
88
98
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Hearing.default, {})
89
99
  }), name.toLowerCase() === "translation" && /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.ListItemIcon, {
90
100
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_SwapHoriz.default, {})
101
+ }), name.toLowerCase() === "pronunciation" && /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.ListItemIcon, {
102
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_RecordVoiceOver.default, {})
91
103
  }), name.toLowerCase() === "roleplays" && /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.ListItemIcon, {
92
104
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Forum.default, {})
93
105
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Box, {
@@ -98,8 +110,20 @@ function Exercise({
98
110
  })
99
111
  }), name.toLowerCase() === "roleplays" && /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.ListItemIcon, {
100
112
  children: roleplaysOpen ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_ExpandLess.default, {}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_ExpandMore.default, {})
101
- }), (name.toLowerCase() === "listening" || name.toLowerCase() === "translation") && /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.ListItemIcon, {
102
- children: isAssignment ? isCreator ? null :
113
+ }), (name.toLowerCase() === "listening" || name.toLowerCase() === "translation" || name.toLowerCase() === "pronunciation") && /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.ListItemIcon, {
114
+ children: isAssignment ? isCreator ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Checkbox, {
115
+ checked: isAssignmentExerciseSelected,
116
+ onClick: event => {
117
+ event.stopPropagation();
118
+ } //so clicking on the checkbox doesnt also trigger the onclick of the listItemButton
119
+ ,
120
+ onChange: () => {
121
+ handleSelectExercise([{
122
+ name,
123
+ courseSectionTopicId
124
+ }]);
125
+ }
126
+ }) :
103
127
  /*#__PURE__*/
104
128
  //add check to see if the exercise is completed
105
129
  (0, _jsxRuntime.jsx)(_CheckCircle.default, {
@@ -119,7 +143,10 @@ function Exercise({
119
143
  handleCreateGame: handleCreateGame,
120
144
  courseSectionTopicId: courseSectionTopicId,
121
145
  t: t,
122
- isExerciseSelected: isExerciseSelected
146
+ isExerciseSelected: isExerciseSelected,
147
+ handleSelectExercise: handleSelectExercise,
148
+ selectedExercises: selectedExercises,
149
+ useCase: useCase
123
150
  })
124
151
  })
125
152
  })]
@@ -138,6 +165,9 @@ function ExerciseList({
138
165
  setIsExerciseSelected,
139
166
  roleplays,
140
167
  phrases,
168
+ handleSelectExercise,
169
+ selectedExercises,
170
+ useCase,
141
171
  assignment,
142
172
  handleStartExercise,
143
173
  isAssignment,
@@ -164,6 +194,9 @@ function ExerciseList({
164
194
  sectionId: sectionId,
165
195
  topicId: topicId,
166
196
  phrases: phrases,
197
+ handleSelectExercise: handleSelectExercise,
198
+ selectedExercises: selectedExercises,
199
+ useCase: useCase,
167
200
  assignment: assignment,
168
201
  handleStartExercise: handleStartExercise,
169
202
  isAssignment: isAssignment,
@@ -201,6 +234,9 @@ function Topic({
201
234
  isExerciseSelected,
202
235
  setIsExerciseSelected,
203
236
  getRoleplays,
237
+ handleSelectExercise,
238
+ selectedExercises,
239
+ useCase,
204
240
  assignment,
205
241
  handleStartExercise,
206
242
  isAssignment,
@@ -210,10 +246,20 @@ function Topic({
210
246
  const theme = (0, _styles.useTheme)();
211
247
  const isLargeScreen = (0, _useMediaQuery.default)(theme.breakpoints.up("sm"));
212
248
  const [isExerciseListOpen, setExerciseListOpen] = (0, _react.useState)(false);
213
- const toggleExerciseList = () => {
214
- setExerciseListOpen(!isExerciseListOpen);
215
- };
216
- const exercises = [{
249
+ const [isWholeTopicSelected, setIsWholeTopicSelected] = (0, _react.useState)(false);
250
+ const exercises = useCase === "assignment" ? [{
251
+ name: "translation",
252
+ description: `translation_exercise_desc`
253
+ }, {
254
+ name: "listening",
255
+ description: `listening_exercise_desc`
256
+ }, {
257
+ name: "pronunciation",
258
+ description: `pronunciation_exercise_desc`
259
+ }, {
260
+ name: "roleplays",
261
+ description: `roleplay_exercise_desc`
262
+ }] : [{
217
263
  name: "translation",
218
264
  description: `translation_exercise_desc`
219
265
  }, {
@@ -223,6 +269,47 @@ function Topic({
223
269
  name: "roleplays",
224
270
  description: `roleplay_exercise_desc`
225
271
  }];
272
+ const games = ["roleplay-story", "roleplay-fill-in-the-blanks", "roleplay-act-it-out", "roleplay-act-it-out-listening", "roleplay-act-it-out-speaking", "roleplay-act-it-out-listening-speaking"];
273
+ (0, _react.useEffect)(() => {
274
+ const exerciseCount = selectedExercises.filter(exercise => exercise.courseSectionTopicId === `${courseId}|${sectionId}|${topicId}`).length;
275
+ const roleplayCount = selectedExercises.filter(exercise => exercise.roleplayId && roleplays.some(roleplay => roleplay.roleplayId === exercise.roleplayId)).length;
276
+ const total = roleplays.length * 6 + 3;
277
+ if (exerciseCount + roleplayCount === total) {
278
+ setIsWholeTopicSelected(true);
279
+ } else {
280
+ setIsWholeTopicSelected(false);
281
+ }
282
+ }, [selectedExercises]);
283
+ const handleSelectAll = () => {
284
+ if (isWholeTopicSelected) {
285
+ const removeExercises = selectedExercises.filter(exercise => exercise.courseSectionTopicId === `${courseId}|${sectionId}|${topicId}` || exercise.roleplayId && roleplays.some(roleplay => roleplay.roleplayId === exercise.roleplayId));
286
+ handleSelectExercise(removeExercises);
287
+ } else {
288
+ let exercisesToAdd = [];
289
+ exercises.filter(e => e.name !== "roleplays").forEach(exercise => {
290
+ if (!selectedExercises.some(e => e.courseSectionTopicId === `${courseId}|${sectionId}|${topicId}` && e.name === exercise.name)) {
291
+ exercisesToAdd = [...exercisesToAdd, {
292
+ courseSectionTopicId: `${courseId}|${sectionId}|${topicId}`,
293
+ name: exercise.name
294
+ }];
295
+ }
296
+ });
297
+ roleplays.forEach(roleplay => {
298
+ games.forEach(game => {
299
+ if (!selectedExercises.some(e => e.roleplayId === roleplay.roleplayId && e.game === game)) {
300
+ exercisesToAdd = [...exercisesToAdd, {
301
+ roleplayId: roleplay.roleplayId,
302
+ game
303
+ }];
304
+ }
305
+ });
306
+ });
307
+ handleSelectExercise(exercisesToAdd);
308
+ }
309
+ };
310
+ const toggleExerciseList = () => {
311
+ setExerciseListOpen(!isExerciseListOpen);
312
+ };
226
313
  const hasNonEmptyRoleplay = roleplays.some(roleplay => roleplay?.script?.length !== 0 && roleplay?.script?.some(line => line.text !== undefined));
227
314
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
228
315
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.Tooltip, {
@@ -286,6 +373,14 @@ function Topic({
286
373
  })]
287
374
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.ListItemIcon, {
288
375
  children: isExerciseListOpen ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_ExpandLess.default, {}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_ExpandMore.default, {})
376
+ }), useCase === "assignment" && /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.ListItemIcon, {
377
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Checkbox, {
378
+ checked: isWholeTopicSelected,
379
+ onClick: event => {
380
+ event.stopPropagation();
381
+ },
382
+ onChange: handleSelectAll
383
+ })
289
384
  })]
290
385
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Collapse, {
291
386
  in: isExerciseListOpen,
@@ -308,6 +403,9 @@ function Topic({
308
403
  setIsExerciseSelected: setIsExerciseSelected,
309
404
  roleplays: roleplays,
310
405
  phrases: phrases,
406
+ handleSelectExercise: handleSelectExercise,
407
+ selectedExercises: selectedExercises,
408
+ useCase: useCase,
311
409
  assignment: assignment,
312
410
  handleStartExercise: handleStartExercise,
313
411
  isAssignment: isAssignment,
@@ -330,6 +428,9 @@ function Section({
330
428
  isExerciseSelected,
331
429
  setIsExerciseSelected,
332
430
  getRoleplays,
431
+ handleSelectExercise,
432
+ selectedExercises,
433
+ useCase,
333
434
  assignment,
334
435
  handleStartExercise,
335
436
  isAssignment,
@@ -368,6 +469,9 @@ function Section({
368
469
  isExerciseSelected: isExerciseSelected,
369
470
  setIsExerciseSelected: setIsExerciseSelected,
370
471
  getRoleplays: getRoleplays,
472
+ handleSelectExercise: handleSelectExercise,
473
+ selectedExercises: selectedExercises,
474
+ useCase: useCase,
371
475
  assignment: assignment,
372
476
  handleStartExercise: handleStartExercise,
373
477
  isAssignment: isAssignment,
@@ -386,6 +490,9 @@ function SectionList({
386
490
  isExerciseSelected,
387
491
  setIsExerciseSelected,
388
492
  getRoleplays,
493
+ handleSelectExercise,
494
+ selectedExercises,
495
+ useCase,
389
496
  assignment,
390
497
  handleStartExercise,
391
498
  isAssignment,
@@ -406,6 +513,9 @@ function SectionList({
406
513
  setIsExerciseSelected: setIsExerciseSelected,
407
514
  section: section,
408
515
  getRoleplays: getRoleplays,
516
+ handleSelectExercise: handleSelectExercise,
517
+ selectedExercises: selectedExercises,
518
+ useCase: useCase,
409
519
  assignment: assignment,
410
520
  handleStartExercise: handleStartExercise,
411
521
  isAssignment: isAssignment,
@@ -432,6 +542,9 @@ function ExerciseSelection({
432
542
  isExerciseSelected,
433
543
  setIsExerciseSelected,
434
544
  getRoleplays,
545
+ handleSelectExercise,
546
+ selectedExercises,
547
+ useCase,
435
548
  assignment,
436
549
  handleStartExercise,
437
550
  isAssignment,
@@ -474,6 +587,9 @@ function ExerciseSelection({
474
587
  handleCreateGame: handleCreateGame,
475
588
  isExerciseSelected: isExerciseSelected,
476
589
  setIsExerciseSelected: setIsExerciseSelected,
590
+ handleSelectExercise: handleSelectExercise,
591
+ selectedExercises: selectedExercises,
592
+ useCase: useCase,
477
593
  isAssignment: isAssignment,
478
594
  assignment: assignment,
479
595
  ...otherProps
@@ -21,9 +21,38 @@ function Roleplay({
21
21
  isRoleplaySelected,
22
22
  setIsRoleplaySelected,
23
23
  t,
24
- isExerciseSelected
24
+ isExerciseSelected,
25
+ handleSelectExercise = null,
26
+ selectedExercises,
27
+ useCase
25
28
  }) {
26
29
  const [open, setOpen] = (0, _react.useState)(false);
30
+ const games = ["roleplay-story", "roleplay-fill-in-the-blanks", "roleplay-act-it-out", "roleplay-act-it-out-listening", "roleplay-act-it-out-speaking", "roleplay-act-it-out-listening-speaking"];
31
+ const [isSelectAllChecked, setIsSelectAllChecked] = (0, _react.useState)(false);
32
+ (0, _react.useEffect)(() => {
33
+ const count = selectedExercises.filter(exercise => exercise.roleplayId === roleplay.roleplayId).length;
34
+ setIsSelectAllChecked(count === games.length);
35
+ }, [selectedExercises, roleplay.roleplayId, games.length]);
36
+ const handleSelectAll = () => {
37
+ if (isSelectAllChecked) {
38
+ const removeExercises = games.map(game => ({
39
+ roleplayId: roleplay.roleplayId,
40
+ game
41
+ }));
42
+ handleSelectExercise(removeExercises);
43
+ } else {
44
+ let gamesToAdd = [];
45
+ games.forEach(game => {
46
+ if (!selectedExercises.some(e => e.roleplayId === roleplay.roleplayId && e.game === game)) {
47
+ gamesToAdd = [...gamesToAdd, {
48
+ roleplayId: roleplay.roleplayId,
49
+ game
50
+ }];
51
+ }
52
+ });
53
+ handleSelectExercise(gamesToAdd);
54
+ }
55
+ };
27
56
  const handleRoleplaySelected = exerciseName => () => {
28
57
  setIsRoleplaySelected(true);
29
58
  handleCreateGame({
@@ -118,6 +147,7 @@ function Roleplay({
118
147
  })
119
148
  })]
120
149
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.ListItemIcon, {
150
+ onClick: () => setOpen(!open),
121
151
  children: open ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_ExpandLess.default, {
122
152
  sx: {
123
153
  color: "#757575"
@@ -127,6 +157,18 @@ function Roleplay({
127
157
  color: "#757575"
128
158
  }
129
159
  })
160
+ }), useCase === "assignment" && /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Tooltip, {
161
+ title: t("select_all"),
162
+ placement: "top",
163
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.ListItemIcon, {
164
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Checkbox, {
165
+ checked: isSelectAllChecked,
166
+ onChange: handleSelectAll,
167
+ onClick: event => {
168
+ event.stopPropagation();
169
+ }
170
+ })
171
+ })
130
172
  })]
131
173
  })
132
174
  })
@@ -136,8 +178,33 @@ function Roleplay({
136
178
  unmountOnExit: true,
137
179
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Box, {
138
180
  ml: 3.5,
139
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.ListItemButton, {
140
- onClick: handleRoleplaySelected("roleplay-story"),
181
+ children: useCase === "assignment" ? games.map(game => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.ListItemButton, {
182
+ onClick: isRoleplayValid ? () => handleSelectExercise([{
183
+ roleplayId: roleplay.roleplayId,
184
+ game
185
+ }]) : null,
186
+ disabled: !isRoleplayValid,
187
+ sx: {
188
+ display: "flex",
189
+ alignItems: "center",
190
+ justifyContent: "space-between",
191
+ flexDirection: {
192
+ xs: "column",
193
+ sm: "row"
194
+ }
195
+ },
196
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_material.ListItemIcon, {
197
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_AutoStories.default, {})
198
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.ListItemText, {
199
+ primary: t(game),
200
+ secondary: t("story_description")
201
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.ListItemIcon, {
202
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Checkbox, {
203
+ checked: selectedExercises.some(e => e.roleplayId === roleplay.roleplayId && e.game === game)
204
+ })
205
+ })]
206
+ })) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.ListItemButton, {
207
+ onClick: () => handleRoleplaySelected("roleplay-story"),
141
208
  disabled: isRoleplaySelected || isExerciseSelected || !isRoleplayValid,
142
209
  sx: {
143
210
  display: "flex",
@@ -168,7 +235,10 @@ function RoleplaySelection({
168
235
  handleCreateGame,
169
236
  courseSectionTopicId,
170
237
  t,
171
- isExerciseSelected
238
+ isExerciseSelected,
239
+ handleSelectExercise,
240
+ selectedExercises,
241
+ useCase
172
242
  }) {
173
243
  const [isRoleplaySelected, setIsRoleplaySelected] = (0, _react.useState)(false);
174
244
  return roleplays.map((roleplay, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(Roleplay, {
@@ -178,7 +248,10 @@ function RoleplaySelection({
178
248
  setIsRoleplaySelected: setIsRoleplaySelected,
179
249
  courseSectionTopicId: courseSectionTopicId,
180
250
  t: t,
181
- isExerciseSelected: isExerciseSelected
251
+ isExerciseSelected: isExerciseSelected,
252
+ handleSelectExercise: handleSelectExercise,
253
+ selectedExercises: selectedExercises,
254
+ useCase: useCase
182
255
  }, index));
183
256
  }
184
257
  var _default = exports.default = RoleplaySelection;
@@ -20,6 +20,7 @@ var _reactCountdownCircleTimer = require("react-countdown-circle-timer");
20
20
  var _PlayArrow = _interopRequireDefault(require("@mui/icons-material/PlayArrow"));
21
21
  var _Pause = _interopRequireDefault(require("@mui/icons-material/Pause"));
22
22
  var _reactBeautifulDnd = require("react-beautiful-dnd");
23
+ var _voiceImages = _interopRequireDefault(require("../../utils/voiceImages"));
23
24
  var _index = require("../../utils/index");
24
25
  var _useWordBankFocus = _interopRequireDefault(require("../../hooks/useWordBankFocus"));
25
26
  var _jsxRuntime = require("react/jsx-runtime");
@@ -182,20 +183,23 @@ function LiveListener({
182
183
  speak(currentQuestion.phrase, voice, false, "#currentPhrase", voiceLanguageCode, false, voicePitch, handleFinishedInitialSpeaking);
183
184
  }
184
185
  }, [currentQuestion?.phrase, isCreator]);
186
+ const voiceMap = (0, _voiceImages.default)(voices || []);
185
187
  const getVoiceImage = () => {
186
- let voiceOptionsArray = voiceLanguageCode && voices[voiceLanguageCode] ? voices[voiceLanguageCode].voiceOptions : [];
187
- for (let i = 0; i < voiceOptionsArray.length; i++) {
188
- if (voiceOptionsArray[i].name === voice) {
189
- return voiceOptionsArray[i].speakingImage;
190
- }
188
+ try {
189
+ const exerciseVoice = voiceMap.get(voice) || {};
190
+ return exerciseVoice.speakingImage || null;
191
+ } catch (error) {
192
+ console.error('Error retrieving voice image:', error);
193
+ return null;
191
194
  }
192
195
  };
193
196
  const getNualaCelebratingImage = () => {
194
- let voiceOptionsArray = voiceLanguageCode && voices[voiceLanguageCode] ? voices[voiceLanguageCode].voiceOptions : [];
195
- for (let i = 0; i < voiceOptionsArray.length; i++) {
196
- if (voiceOptionsArray[i].name === voice) {
197
- return voiceOptionsArray[i].celebratingImage;
198
- }
197
+ try {
198
+ const exerciseVoice = voiceMap.get(voice) || {};
199
+ return exerciseVoice.celebratingImage || null;
200
+ } catch (error) {
201
+ console.error('Error retrieving celebrating image:', error);
202
+ return null;
199
203
  }
200
204
  };
201
205
  const handleOnDragEnd = result => {
@@ -7,6 +7,8 @@ exports.default = void 0;
7
7
  var _react = require("react");
8
8
  var _material = require("@mui/material");
9
9
  var _mui = require("tss-react/mui");
10
+ var _Pause = _interopRequireDefault(require("@mui/icons-material/Pause"));
11
+ var _PlayArrow = _interopRequireDefault(require("@mui/icons-material/PlayArrow"));
10
12
  var _AccountBalance = _interopRequireDefault(require("@mui/icons-material/AccountBalance"));
11
13
  var _InputHelper = _interopRequireDefault(require("../../Forms/InputHelper"));
12
14
  var _AnswerResult = _interopRequireDefault(require("../../Misc/AnswerResult"));
@@ -20,8 +22,7 @@ var _reactCountdownCircleTimer = require("react-countdown-circle-timer");
20
22
  var _styles = require("@mui/material/styles");
21
23
  var _reactBeautifulDnd = require("react-beautiful-dnd");
22
24
  var _index = require("../../utils/index");
23
- var _Pause = _interopRequireDefault(require("@mui/icons-material/Pause"));
24
- var _PlayArrow = _interopRequireDefault(require("@mui/icons-material/PlayArrow"));
25
+ var _voiceImages = _interopRequireDefault(require("../../utils/voiceImages"));
25
26
  var _jsxRuntime = require("react/jsx-runtime");
26
27
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
27
28
  // utils
@@ -207,20 +208,23 @@ function LiveTranslator({
207
208
  speak(currentQuestion.phrase, voice, false, "#currentPhrase", voiceLanguageCode, false, voicePitch, handleFinishedInitialSpeaking);
208
209
  }
209
210
  }, [currentQuestion?.phrase, isCreator]);
211
+ const voiceMap = (0, _voiceImages.default)(voices || []);
210
212
  const getVoiceImage = () => {
211
- let voiceOptionsArray = voiceLanguageCode && voices[voiceLanguageCode] ? voices[voiceLanguageCode].voiceOptions : [];
212
- for (let i = 0; i < voiceOptionsArray.length; i++) {
213
- if (voiceOptionsArray[i].name === voice) {
214
- return voiceOptionsArray[i].speakingImage;
215
- }
213
+ try {
214
+ const exerciseVoice = voiceMap.get(voice) || {};
215
+ return exerciseVoice.speakingImage || null;
216
+ } catch (error) {
217
+ console.error('Error retrieving voice image:', error);
218
+ return null;
216
219
  }
217
220
  };
218
221
  const getNualaCelebratingImage = () => {
219
- let voiceOptionsArray = voiceLanguageCode && voices[voiceLanguageCode] ? voices[voiceLanguageCode].voiceOptions : [];
220
- for (let i = 0; i < voiceOptionsArray.length; i++) {
221
- if (voiceOptionsArray[i].name === voice) {
222
- return voiceOptionsArray[i].celebratingImage;
223
- }
222
+ try {
223
+ const exerciseVoice = voiceMap.get(voice) || {};
224
+ return exerciseVoice.celebratingImage || null;
225
+ } catch (error) {
226
+ console.error('Error retrieving celebrating image:', error);
227
+ return null;
224
228
  }
225
229
  };
226
230
  const handleOnDragEnd = result => {
@@ -1098,7 +1098,8 @@ function Classroom({
1098
1098
  scrollToDiscuss: scrollToDiscuss,
1099
1099
  setScrollToDiscuss: setScrollToDiscuss,
1100
1100
  isClassroomArchived: isArchived,
1101
- classroomMembers: classroomMembers
1101
+ classroomMembers: classroomMembers,
1102
+ verificationStatus: verificationStatus
1102
1103
  })
1103
1104
  }, `tab-content-settings`)
1104
1105
  }] : [])];
@@ -751,7 +751,8 @@ function Course({
751
751
  forLanguages: forLanguages,
752
752
  onSubmit: handleUpdateCourse,
753
753
  fileSizeLimit: fileSizeLimit,
754
- subscription: subscription
754
+ subscription: subscription,
755
+ verificationStatus: verificationStatus
755
756
  })
756
757
  }, `tab-content-settings`)
757
758
  }] : [])];
@@ -785,7 +785,8 @@ function Topic({
785
785
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Box, {
786
786
  py: 1,
787
787
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Phrases.default, {
788
- t: t
788
+ t: t,
789
+ verificationStatus: verificationStatus
789
790
  })
790
791
  })]
791
792
  })]
@@ -1249,7 +1250,8 @@ function Topic({
1249
1250
  voices: voices,
1250
1251
  handleSpeak: handleSpeak,
1251
1252
  learnLang: learnLang,
1252
- isUserInternal: isUserInternal
1253
+ isUserInternal: isUserInternal,
1254
+ verificationStatus: verificationStatus
1253
1255
  })
1254
1256
  })]
1255
1257
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.Grid, {
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = getVoiceImages;
7
+ function getVoiceImages(voices) {
8
+ const voiceMap = Object.values(voices || []).flatMap(language => language.voiceOptions || []).reduce((acc, voice) => {
9
+ if (voice && voice.name) {
10
+ acc.set(voice.name, {
11
+ speakingImage: voice.speakingImage || null,
12
+ celebratingImage: voice.celebratingImage || null,
13
+ userImage: voice.userImage || null,
14
+ engine: voice.engine || '',
15
+ provider: voice.provider || '',
16
+ isNeuralOnly: voice.isNeuralOnly || false
17
+ });
18
+ }
19
+ return acc;
20
+ }, new Map());
21
+ return voiceMap;
22
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nualang/nualang-ui-components",
3
- "version": "0.1.1201",
3
+ "version": "0.1.1203",
4
4
  "main": "dist/index.js",
5
5
  "files": [
6
6
  "dist",