@nualang/nualang-ui-components 0.1.1140 → 0.1.1142

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 (29) hide show
  1. package/dist/Cards/Course/Course.js +11 -1
  2. package/dist/Cards/Course/Course.stories.js +1 -0
  3. package/dist/Dialogs/LiveGameTutorial/LiveGameTutorial.js +5 -5
  4. package/dist/Dialogs/ReportProblem/ReportProblem.js +8 -1
  5. package/dist/Dialogs/UploadVideo/UploadVideo.js +4 -1
  6. package/dist/Exercises/Bot/Bot.js +4 -2
  7. package/dist/Exercises/Listener/Listener.js +4 -2
  8. package/dist/Exercises/Pronouncer/Pronouncer.js +4 -2
  9. package/dist/Exercises/Roleplay/Games/ActItOutGame/ActItOutGame.js +4 -2
  10. package/dist/Exercises/Roleplay/Games/ActItOutGameListening/ActItOutGameListening.js +4 -2
  11. package/dist/Exercises/Roleplay/Games/ActItOutGameListeningAndSpeaking/ActItOutGame.js +4 -2
  12. package/dist/Exercises/Roleplay/Games/ActItOutGameSpeaking/ActItOutGame.js +4 -2
  13. package/dist/Exercises/Roleplay/Games/FillInTheBlanksGame/FillInTheBlanksGame.js +4 -2
  14. package/dist/Exercises/Roleplay/Games/StoryGame/StoryGame.js +4 -2
  15. package/dist/Exercises/Roleplay/Games/TopBarActions.js +10 -5
  16. package/dist/Exercises/Roleplay/Roleplay.js +4 -2
  17. package/dist/Exercises/Translator/Translator.js +34 -6
  18. package/dist/Forms/CreateCourse/CreateCourse.js +12 -0
  19. package/dist/Forms/CreateCourse/Steps/CourseInformation/CourseInformation.js +21 -0
  20. package/dist/Forms/CreateRoleplay/CreateRoleplay.js +1 -1
  21. package/dist/Forms/UpdateCourse/UpdateCourse.js +14 -0
  22. package/dist/Forms/UpdateCourse/UpdateCourse.stories.js +1 -0
  23. package/dist/Lists/Courses/Courses.js +2 -0
  24. package/dist/Lists/Exercises/Exercises.js +8 -4
  25. package/dist/Misc/ReportProblem/ReportProblem.js +4 -2
  26. package/dist/Screens/Classrooms/ViewClassroom/ViewClassroom.js +11 -3
  27. package/dist/Screens/Courses/ViewCourse/ViewTopic/ViewTopic.js +6 -2
  28. package/dist/Tables/Progress/ProgressTable.js +2 -0
  29. package/package.json +1 -1
@@ -22,6 +22,7 @@ var _MoreVert = _interopRequireDefault(require("@mui/icons-material/MoreVert"));
22
22
  var _FileCopy = _interopRequireDefault(require("@mui/icons-material/FileCopy"));
23
23
  var _OndemandVideo = _interopRequireDefault(require("@mui/icons-material/OndemandVideo"));
24
24
  var _PictureAsPdf = _interopRequireDefault(require("@mui/icons-material/PictureAsPdf"));
25
+ var _School = _interopRequireDefault(require("@mui/icons-material/School"));
25
26
  var _Reviews = _interopRequireDefault(require("../../Dialogs/Reviews"));
26
27
  var _Members = _interopRequireDefault(require("../../Dialogs/Members"));
27
28
  var _CourseOutline = _interopRequireDefault(require("../../Dialogs/CourseOutline"));
@@ -278,6 +279,7 @@ function CourseCard({
278
279
  courseId,
279
280
  courseName,
280
281
  description,
282
+ difficulty,
281
283
  picture,
282
284
  cardPicture,
283
285
  pictureXs,
@@ -404,7 +406,14 @@ function CourseCard({
404
406
  alignItems: "center",
405
407
  flexWrap: "wrap",
406
408
  gap: 1
407
- }, (course?.pdf || course.topicsWithPdf && Object.keys(course?.topicsWithPdf)?.length > 0) && /*#__PURE__*/_react.default.createElement(_CardElements.CardInfoSectionItem, {
409
+ }, course?.difficulty && /*#__PURE__*/_react.default.createElement(_material.Box, {
410
+ mr: 2
411
+ }, /*#__PURE__*/_react.default.createElement(_CardElements.CardInfoSectionItem, {
412
+ variant: "body2",
413
+ component: "span"
414
+ }, /*#__PURE__*/_react.default.createElement(_School.default, {
415
+ sx: _CardElements.classes.infoIcon
416
+ }), t(`card_${course.difficulty}`))), (course?.pdf || course.topicsWithPdf && Object.keys(course?.topicsWithPdf)?.length > 0) && /*#__PURE__*/_react.default.createElement(_CardElements.CardInfoSectionItem, {
408
417
  variant: "body2",
409
418
  component: "span",
410
419
  sx: {
@@ -544,6 +553,7 @@ MemoizedCourse.propTypes = {
544
553
  courseId: _propTypes.default.string.isRequired,
545
554
  courseName: _propTypes.default.string.isRequired,
546
555
  description: _propTypes.default.string.isRequired,
556
+ difficulty: _propTypes.default.string,
547
557
  picture: _propTypes.default.string.isRequired,
548
558
  learnLang: _propTypes.default.string.isRequired,
549
559
  forLang: _propTypes.default.string.isRequired,
@@ -191,6 +191,7 @@ const course = exports.course = {
191
191
  t: () => {},
192
192
  courseName: "Learn Greetings",
193
193
  description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
194
+ difficulty: "A1",
194
195
  learnLang: "english",
195
196
  forLang: "spanish",
196
197
  visibility: "private",
@@ -153,11 +153,11 @@ function LiveGameTutorial({
153
153
  t: t
154
154
  }, /*#__PURE__*/_react.default.createElement(_material.Box, {
155
155
  sx: {
156
- display: 'flex',
157
- justifyContent: 'center',
158
- alignItems: 'center',
159
- width: '100%',
160
- height: '100%'
156
+ display: "flex",
157
+ justifyContent: "center",
158
+ alignItems: "center",
159
+ width: "100%",
160
+ height: "100%"
161
161
  }
162
162
  }, /*#__PURE__*/_react.default.createElement(DotsMobileStepper, {
163
163
  images: images,
@@ -27,6 +27,7 @@ function ReportProblem({
27
27
  handleReportProblem,
28
28
  currentPhrase,
29
29
  isQuestion,
30
+ parentClassroom,
30
31
  ...otherProps
31
32
  }) {
32
33
  const [problem, setProblem] = (0, _react.useState)(initialProblem);
@@ -68,7 +69,13 @@ function ReportProblem({
68
69
  label: "other",
69
70
  value: "other"
70
71
  }];
71
- const problemTypeOptions = problemTypes.map((pType, idx) => {
72
+ const filteredProblemTypes = problemTypes.filter(pType => {
73
+ if (pType.value === "equipment_problem" && (!parentClassroom || Object.keys(parentClassroom).length === 0 && parentClassroom.constructor === Object)) {
74
+ return false;
75
+ }
76
+ return true;
77
+ });
78
+ const problemTypeOptions = filteredProblemTypes.map((pType, idx) => {
72
79
  const keyId = `problemtypes_${idx}`;
73
80
  return /*#__PURE__*/_react.default.createElement(_MenuItem.default, {
74
81
  key: keyId,
@@ -33,14 +33,17 @@ function UploadVideo({
33
33
  } = useStyles();
34
34
  const [video, setVideo] = (0, _react.useState)();
35
35
  const [errors, setErrors] = (0, _react.useState)([]);
36
+ const [isVideoSubmitting, setIsVideoSubmitting] = (0, _react.useState)(false);
36
37
  const handleSubmit = async () => {
37
38
  try {
39
+ setIsVideoSubmitting(true);
38
40
  await onSubmit({
39
41
  video
40
42
  });
41
43
  } catch (error) {
42
44
  console.error(error);
43
45
  }
46
+ setIsVideoSubmitting(false);
44
47
  handleClose();
45
48
  };
46
49
  return /*#__PURE__*/_react.default.createElement(_ResponsiveDialog.default, {
@@ -52,7 +55,7 @@ function UploadVideo({
52
55
  handleSubmit: handleSubmit,
53
56
  submitText: t("add_video"),
54
57
  dialogTitle: t("upload_video"),
55
- isSubmitDisabled: !video || video.length === 0 || errors.length > 0
58
+ isSubmitDisabled: !video || video.length === 0 || errors.length > 0 || isVideoSubmitting
56
59
  }, /*#__PURE__*/_react.default.createElement(_Box.default, null, /*#__PURE__*/_react.default.createElement(_VideoUploader.default, {
57
60
  t: t,
58
61
  file: video,
@@ -96,7 +96,8 @@ function Bot({
96
96
  placeholder,
97
97
  courseSettings,
98
98
  clearQueue,
99
- stopAudio
99
+ stopAudio,
100
+ parentClassroom
100
101
  }) {
101
102
  const theme = (0, _styles.useTheme)();
102
103
  const {
@@ -377,7 +378,8 @@ function Bot({
377
378
  handleOpenReportProblem: handleOpenReportProblem,
378
379
  handleCloseReportProblem: handleCloseReportProblem,
379
380
  handleReportProblem: handleReportProblem,
380
- currentPhrase: currentPhrase
381
+ currentPhrase: currentPhrase,
382
+ parentClassroom: parentClassroom
381
383
  }));
382
384
  const beforeElements = /*#__PURE__*/_react.default.createElement(_material.Box, {
383
385
  mb: 2
@@ -227,7 +227,8 @@ function Listener({
227
227
  handleTranslate,
228
228
  languageTag,
229
229
  siteLanguage,
230
- courseSettings
230
+ courseSettings,
231
+ parentClassroom
231
232
  }) {
232
233
  (0, _useExerciseDocumentTitle.default)({
233
234
  exerciseTitle: "Listening",
@@ -550,7 +551,8 @@ function Listener({
550
551
  handleOpenReportProblem: handleOpenReportProblem,
551
552
  handleCloseReportProblem: handleCloseReportProblem,
552
553
  handleReportProblem: handleReportProblem,
553
- currentPhrase: currentPhrase
554
+ currentPhrase: currentPhrase,
555
+ parentClassroom: parentClassroom
554
556
  })), /*#__PURE__*/_react.default.createElement(_material.Toolbar, {
555
557
  variant: "dense",
556
558
  className: classes.mobileAdditionalToolbar
@@ -160,7 +160,8 @@ function Pronouncer({
160
160
  languageInformation,
161
161
  uploadAudioAttempt,
162
162
  languageTag,
163
- trackRecommendedEvent
163
+ trackRecommendedEvent,
164
+ parentClassroom
164
165
  }) {
165
166
  (0, _useExerciseDocumentTitle.default)({
166
167
  exerciseTitle: "Pronunciation",
@@ -489,7 +490,8 @@ function Pronouncer({
489
490
  handleOpenReportProblem: handleOpenReportProblem,
490
491
  handleCloseReportProblem: handleCloseReportProblem,
491
492
  handleReportProblem: handleReportProblem,
492
- currentPhrase: currentPhrase
493
+ currentPhrase: currentPhrase,
494
+ parentClassroom: parentClassroom
493
495
  })), /*#__PURE__*/_react.default.createElement(_material.Toolbar, {
494
496
  variant: "dense",
495
497
  className: classes.mobileAdditionalToolbar
@@ -186,7 +186,8 @@ function RoleplayGame({
186
186
  clearQueue,
187
187
  stopAudio,
188
188
  languageInformation,
189
- translationEnabled
189
+ translationEnabled,
190
+ parentClassroom
190
191
  }) {
191
192
  (0, _useExerciseDocumentTitle.default)({
192
193
  exerciseTitle: "Act it out",
@@ -392,7 +393,8 @@ function RoleplayGame({
392
393
  disableSkip: disableSkip,
393
394
  handleEditRoleplay: handleEditRoleplay,
394
395
  handleRestart: handleRestart,
395
- handleShareRoleplay: handleShareRoleplay
396
+ handleShareRoleplay: handleShareRoleplay,
397
+ parentClassroom: parentClassroom
396
398
  }),
397
399
  beforeElements: beforeElements,
398
400
  afterElements: afterElements,
@@ -189,7 +189,8 @@ function RoleplayGame({
189
189
  clearQueue,
190
190
  stopAudio,
191
191
  languageInformation,
192
- translationEnabled
192
+ translationEnabled,
193
+ parentClassroom
193
194
  }) {
194
195
  (0, _useExerciseDocumentTitle.default)({
195
196
  exerciseTitle: "Act it out listening",
@@ -397,7 +398,8 @@ function RoleplayGame({
397
398
  disableSkip: disableSkip,
398
399
  handleEditRoleplay: handleEditRoleplay,
399
400
  handleRestart: handleRestart,
400
- handleShareRoleplay: handleShareRoleplay
401
+ handleShareRoleplay: handleShareRoleplay,
402
+ parentClassroom: parentClassroom
401
403
  }),
402
404
  beforeElements: beforeElements,
403
405
  afterElements: afterElements,
@@ -276,7 +276,8 @@ function RoleplayGame({
276
276
  clearQueue,
277
277
  stopAudio,
278
278
  translationEnabled,
279
- trackRecommendedEvent
279
+ trackRecommendedEvent,
280
+ parentClassroom
280
281
  }) {
281
282
  (0, _useExerciseDocumentTitle.default)({
282
283
  exerciseTitle: "Act it out listening and speaking",
@@ -580,7 +581,8 @@ function RoleplayGame({
580
581
  disableSkip: disableSkip,
581
582
  handleEditRoleplay: handleEditRoleplay,
582
583
  handleRestart: handleRestart,
583
- handleShareRoleplay: handleShareRoleplay
584
+ handleShareRoleplay: handleShareRoleplay,
585
+ parentClassroom: parentClassroom
584
586
  }),
585
587
  beforeElements: beforeElements,
586
588
  afterElements: afterElements,
@@ -272,7 +272,8 @@ function RoleplayGame({
272
272
  clearQueue,
273
273
  stopAudio,
274
274
  translationEnabled,
275
- trackRecommendedEvent
275
+ trackRecommendedEvent,
276
+ parentClassroom
276
277
  }) {
277
278
  (0, _useExerciseDocumentTitle.default)({
278
279
  exerciseTitle: "Act it out speaking",
@@ -579,7 +580,8 @@ function RoleplayGame({
579
580
  disableSkip: disableSkip,
580
581
  handleEditRoleplay: handleEditRoleplay,
581
582
  handleRestart: handleRestart,
582
- handleShareRoleplay: handleShareRoleplay
583
+ handleShareRoleplay: handleShareRoleplay,
584
+ parentClassroom: parentClassroom
583
585
  }),
584
586
  beforeElements: beforeElements,
585
587
  afterElements: afterElements,
@@ -70,7 +70,8 @@ function RoleplayGame({
70
70
  clearQueue,
71
71
  stopAudio,
72
72
  languageInformation,
73
- translationEnabled
73
+ translationEnabled,
74
+ parentClassroom
74
75
  }) {
75
76
  (0, _useExerciseDocumentTitle.default)({
76
77
  exerciseTitle: "Fill in the blanks",
@@ -271,7 +272,8 @@ function RoleplayGame({
271
272
  disableSkip: disableSkip,
272
273
  handleEditRoleplay: handleEditRoleplay,
273
274
  handleRestart: handleRestart,
274
- handleShareRoleplay: handleShareRoleplay
275
+ handleShareRoleplay: handleShareRoleplay,
276
+ parentClassroom: parentClassroom
275
277
  }),
276
278
  beforeElements: /*#__PURE__*/_react.default.createElement(_BeforeElements.default, {
277
279
  t: t,
@@ -61,7 +61,8 @@ function RoleplayGame({
61
61
  clearQueue,
62
62
  stopAudio,
63
63
  languageInformation,
64
- translationEnabled
64
+ translationEnabled,
65
+ parentClassroom
65
66
  }) {
66
67
  (0, _useExerciseDocumentTitle.default)({
67
68
  exerciseTitle: "Story",
@@ -256,7 +257,8 @@ function RoleplayGame({
256
257
  disableSkip: disableSkip,
257
258
  handleEditRoleplay: handleEditRoleplay,
258
259
  handleRestart: handleRestart,
259
- handleShareRoleplay: handleShareRoleplay
260
+ handleShareRoleplay: handleShareRoleplay,
261
+ parentClassroom: parentClassroom
260
262
  }),
261
263
  beforeElements: /*#__PURE__*/_react.default.createElement(_BeforeElements.default, {
262
264
  t: t,
@@ -128,7 +128,8 @@ function OverflowMenu({
128
128
  handleReportProblem,
129
129
  handleRestart,
130
130
  setRestartRoleplayDialog,
131
- currentMessages
131
+ currentMessages,
132
+ parentClassroom
132
133
  }) {
133
134
  const {
134
135
  classes
@@ -188,7 +189,8 @@ function OverflowMenu({
188
189
  mode: "menuitem",
189
190
  menuIconClassname: classes.menuIcon,
190
191
  currentPhrase: currentPhrase,
191
- isQuestion: isQuestion
192
+ isQuestion: isQuestion,
193
+ parentClassroom: parentClassroom
192
194
  })));
193
195
  }
194
196
  const TopBarActions = ({
@@ -212,7 +214,8 @@ const TopBarActions = ({
212
214
  handleEditRoleplay,
213
215
  handleRestart,
214
216
  handleShareRoleplay,
215
- isRoleplayPreview
217
+ isRoleplayPreview,
218
+ parentClassroom
216
219
  }) => {
217
220
  const {
218
221
  classes
@@ -262,7 +265,8 @@ const TopBarActions = ({
262
265
  handleCloseReportProblem: handleCloseReportProblem,
263
266
  handleReportProblem: handleReportProblem,
264
267
  currentPhrase: currentPhrase,
265
- isQuestion: isQuestion
268
+ isQuestion: isQuestion,
269
+ parentClassroom: parentClassroom
266
270
  })), /*#__PURE__*/_react.default.createElement(_material.Hidden, {
267
271
  smUp: true
268
272
  }, /*#__PURE__*/_react.default.createElement(_VoiceSpeed.default, {
@@ -282,7 +286,8 @@ const TopBarActions = ({
282
286
  handleOpenReportProblem: handleOpenReportProblem,
283
287
  handleCloseReportProblem: handleCloseReportProblem,
284
288
  handleReportProblem: handleReportProblem,
285
- currentMessages: currentMessages
289
+ currentMessages: currentMessages,
290
+ parentClassroom: parentClassroom
286
291
  }))) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, handleShareRoleplay && /*#__PURE__*/_react.default.createElement(_material.Tooltip, {
287
292
  title: t("share")
288
293
  }, /*#__PURE__*/_react.default.createElement(_material.IconButton, {
@@ -64,7 +64,8 @@ function Roleplay({
64
64
  authenticated,
65
65
  handleSignIn,
66
66
  courseSettings,
67
- trackRecommendedEvent
67
+ trackRecommendedEvent,
68
+ parentClassroom
68
69
  }) {
69
70
  const theme = (0, _styles.useTheme)();
70
71
  const isLgScreen = (0, _useMediaQuery.default)(theme.breakpoints.up("md"));
@@ -336,7 +337,8 @@ function Roleplay({
336
337
  },
337
338
  clearQueue: clearQueue,
338
339
  stopAudio: stopAudio,
339
- trackRecommendedEvent: trackRecommendedEvent
340
+ trackRecommendedEvent: trackRecommendedEvent,
341
+ parentClassroom: parentClassroom
340
342
  }));
341
343
  }
342
344
  return null;
@@ -7,6 +7,7 @@ exports.default = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _reactJoyride = _interopRequireWildcard(require("react-joyride"));
9
9
  var _material = require("@mui/material");
10
+ var _colors = require("@mui/material/colors");
10
11
  var _mui = require("tss-react/mui");
11
12
  var _Check = _interopRequireDefault(require("@mui/icons-material/Check"));
12
13
  var _Close = _interopRequireDefault(require("@mui/icons-material/Close"));
@@ -115,7 +116,6 @@ const useStyles = (0, _mui.makeStyles)()(theme => ({
115
116
  margin: theme.spacing(1, 2, 1, 2),
116
117
  borderRadius: theme.spacing(),
117
118
  borderWidth: "2px",
118
- borderColor: theme.palette.primary.main,
119
119
  borderStyle: "solid",
120
120
  textAlign: "center",
121
121
  color: theme.palette.primary.main,
@@ -235,7 +235,8 @@ function Translator({
235
235
  languageTag,
236
236
  siteLanguage,
237
237
  courseSettings = {},
238
- isKeyboardHiddenTranslation
238
+ isKeyboardHiddenTranslation,
239
+ parentClassroom
239
240
  }) {
240
241
  (0, _useExerciseDocumentTitle.default)({
241
242
  exerciseTitle: "Translation",
@@ -397,10 +398,21 @@ function Translator({
397
398
  handleTranslationTourFinished();
398
399
  }
399
400
  };
401
+ const [incomplete, setIncomplete] = (0, _react.useState)(false);
402
+ const checkCompletionAndNotify = () => {
403
+ let correctCount = translationWords.filter((word, index) => (0, _index.removeAllSymbols)(word.text) === (0, _index.removeAllSymbols)(translationWordList[index])).length;
404
+ if (correctCount === translationWords.length && translationWords.length < translationWordList.length) {
405
+ setIncomplete(true);
406
+ }
407
+ };
400
408
  (0, _react.useEffect)(() => {
401
409
  setCheckAnswer(false);
402
410
  setIsWordBankAttemptChanged(true);
411
+ setIncomplete(false);
403
412
  }, [translationWords]);
413
+ (0, _react.useEffect)(() => {
414
+ checkAnswer && checkCompletionAndNotify();
415
+ }, [checkAnswer]);
404
416
  (0, _react.useEffect)(() => {
405
417
  if (open && !run && !localStorage.getItem(`translation-exercise-tour-completed`)) {
406
418
  setJoyrideState(prevState => ({
@@ -544,7 +556,8 @@ function Translator({
544
556
  handleOpenReportProblem: handleOpenReportProblem,
545
557
  handleCloseReportProblem: handleCloseReportProblem,
546
558
  handleReportProblem: handleReportProblem,
547
- currentPhrase: currentPhrase
559
+ currentPhrase: currentPhrase,
560
+ parentClassroom: parentClassroom
548
561
  })), /*#__PURE__*/_react.default.createElement(_material.Toolbar, {
549
562
  variant: "dense",
550
563
  className: classes.mobileAdditionalToolbar
@@ -658,7 +671,7 @@ function Translator({
658
671
  }, /*#__PURE__*/_react.default.createElement(_reactBeautifulDnd.Droppable, {
659
672
  droppableId: "translationWords",
660
673
  direction: "horizontal"
661
- }, provided => /*#__PURE__*/_react.default.createElement(_material.Grid, _extends({
674
+ }, provided => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_material.Grid, _extends({
662
675
  container: true,
663
676
  spacing: 1,
664
677
  className: classes.wordsContainer,
@@ -666,7 +679,8 @@ function Translator({
666
679
  }, provided.droppableProps, {
667
680
  sx: {
668
681
  display: "flex",
669
- flexDirection: "row"
682
+ flexDirection: "row",
683
+ borderColor: incomplete ? _colors.red[800] : theme.palette.primary.main
670
684
  }
671
685
  }), translationWords.map((word, index) => /*#__PURE__*/_react.default.createElement(_reactBeautifulDnd.Draggable, {
672
686
  key: word.id.toString(),
@@ -693,7 +707,21 @@ function Translator({
693
707
  ref: setAnswerBoxRef(index),
694
708
  checkAnswer: checkAnswer,
695
709
  isDragging: snapshot.isDragging
696
- })))), provided.placeholder))), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement(_material.Box, {
710
+ })))), provided.placeholder), /*#__PURE__*/_react.default.createElement(_material.Box, {
711
+ sx: {
712
+ minHeight: "24px",
713
+ // Adjust this based on the Typography height
714
+ display: "flex",
715
+ justifyContent: "center",
716
+ alignItems: "center",
717
+ textAlign: "center"
718
+ }
719
+ }, incomplete && /*#__PURE__*/_react.default.createElement(_material.Typography, {
720
+ sx: {
721
+ color: _colors.red[800],
722
+ fontWeight: "bold"
723
+ }
724
+ }, t("incomplete_translation")))))), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement(_material.Box, {
697
725
  component: "fieldset",
698
726
  sx: {
699
727
  borderWidth: 0
@@ -5,8 +5,10 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
+ var _material = require("@mui/material");
8
9
  var _Steps = require("./Steps");
9
10
  var _index = _interopRequireDefault(require("../../utils/placeholder-images/index"));
11
+ var _index2 = require("../../utils/index");
10
12
  var _MultiStepForm = _interopRequireDefault(require("../MultiStepForm"));
11
13
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
14
  // components
@@ -17,12 +19,20 @@ function getSteps() {
17
19
  function CreateCourse({
18
20
  t,
19
21
  onSubmit,
22
+ difficulties,
20
23
  languages = {},
21
24
  fileSizeLimit,
22
25
  userImage,
23
26
  subscription,
24
27
  learnLang
25
28
  }) {
29
+ const difficultyOptions = difficulties.map((d, idx) => {
30
+ const keyId = `crearolax${(0, _index2.randomId)()}${idx}`;
31
+ return /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
32
+ key: keyId,
33
+ value: d
34
+ }, t(d));
35
+ });
26
36
  return /*#__PURE__*/_react.default.createElement(_MultiStepForm.default, {
27
37
  initialValues: {
28
38
  courseName: "",
@@ -41,6 +51,7 @@ function CreateCourse({
41
51
  getSteps: getSteps,
42
52
  onSubmit: onSubmit,
43
53
  t: t,
54
+ difficultyOptions: difficultyOptions,
44
55
  languageOptions: languages,
45
56
  fileSizeLimit: fileSizeLimit,
46
57
  subscription: subscription
@@ -49,6 +60,7 @@ function CreateCourse({
49
60
  CreateCourse.propTypes = {};
50
61
  CreateCourse.defaultProps = {
51
62
  t: text => text,
63
+ difficulties: ["A1", "A2", "B1", "B2", "C1", "C2"],
52
64
  subscription: {
53
65
  isUpgradePossible: true
54
66
  }
@@ -16,6 +16,7 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
16
16
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
17
  function CourseInformation({
18
18
  t,
19
+ difficultyOptions,
19
20
  languageOptions,
20
21
  handleChange,
21
22
  handleBlur,
@@ -26,6 +27,7 @@ function CourseInformation({
26
27
  const {
27
28
  courseName,
28
29
  description,
30
+ difficulty,
29
31
  learnLang,
30
32
  forLang,
31
33
  tags
@@ -84,6 +86,24 @@ function CourseInformation({
84
86
  })), /*#__PURE__*/_react.default.createElement(_material.Grid, {
85
87
  item: true,
86
88
  xs: 12
89
+ }, /*#__PURE__*/_react.default.createElement(_material.TextField, {
90
+ select: true,
91
+ id: "difficulty",
92
+ name: "difficulty",
93
+ "data-cy": "difficulty",
94
+ label: t("difficulty"),
95
+ value: difficulty,
96
+ onChange: handleChange,
97
+ onBlur: handleBlur,
98
+ helperText: touched.difficulty ? errors.difficulty : "",
99
+ error: touched.difficulty && Boolean(errors.difficulty),
100
+ margin: "normal",
101
+ variant: "outlined",
102
+ fullWidth: true,
103
+ required: true
104
+ }, difficultyOptions)), " ", /*#__PURE__*/_react.default.createElement(_material.Grid, {
105
+ item: true,
106
+ xs: 12
87
107
  }, /*#__PURE__*/_react.default.createElement(_LanguageSelector.default, {
88
108
  id: "learnLang",
89
109
  name: "learnLang",
@@ -147,6 +167,7 @@ CourseInformation.label = "course_information";
147
167
  CourseInformation.validationSchema = Yup.object().shape({
148
168
  courseName: Yup.string().required("required").test("noSpecialChars", "no_special_characters", value => !(0, _utils.containsInvalidSymbols)(value)),
149
169
  description: Yup.string().required("required").test("noSpecialChars", "no_special_characters", value => !(0, _utils.containsInvalidSymbols)(value)),
170
+ difficulty: Yup.string().required("required"),
150
171
  learnLang: Yup.string().required("required"),
151
172
  forLang: Yup.string().required("required"),
152
173
  tags: Yup.array(Yup.string().test("noSpecialChars", "no_special_characters", value => !(0, _utils.containsInvalidSymbols)(value))).nullable()
@@ -19,7 +19,7 @@ function CreateRoleplay({
19
19
  t,
20
20
  onSubmit,
21
21
  handleSpeak,
22
- difficulties = [],
22
+ difficulties,
23
23
  voices = {},
24
24
  forLang,
25
25
  learnLang,
@@ -9,6 +9,7 @@ var _material = require("@mui/material");
9
9
  var _mui = require("tss-react/mui");
10
10
  var _formik = require("formik");
11
11
  var _Steps = require("../CreateCourse/Steps");
12
+ var _index = require("../../utils/index");
12
13
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
14
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
14
15
  const useStyles = (0, _mui.makeStyles)()(theme => ({
@@ -22,18 +23,27 @@ const useStyles = (0, _mui.makeStyles)()(theme => ({
22
23
  function UpdateCourse({
23
24
  t,
24
25
  initialValues,
26
+ difficulties,
25
27
  onSubmit,
26
28
  enableReinitialize,
27
29
  languages,
28
30
  fileSizeLimit,
29
31
  subscription
30
32
  }) {
33
+ const difficultyOptions = difficulties.map((d, idx) => {
34
+ const keyId = `crearolax${(0, _index.randomId)()}${idx}`;
35
+ return /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
36
+ key: keyId,
37
+ value: d
38
+ }, t(d));
39
+ });
31
40
  const {
32
41
  classes
33
42
  } = useStyles();
34
43
  const {
35
44
  courseName,
36
45
  description,
46
+ difficulty,
37
47
  learnLang,
38
48
  forLang,
39
49
  visibility,
@@ -49,6 +59,7 @@ function UpdateCourse({
49
59
  initialValues: {
50
60
  courseName,
51
61
  description,
62
+ difficulty,
52
63
  learnLang,
53
64
  forLang,
54
65
  tags,
@@ -83,6 +94,7 @@ function UpdateCourse({
83
94
  }, /*#__PURE__*/_react.default.createElement(_Steps.CourseInformation, _extends({
84
95
  t: t,
85
96
  languageOptions: languages,
97
+ difficultyOptions: difficultyOptions,
86
98
  handleChange: handleChange,
87
99
  handleSubmit: handleSubmit,
88
100
  isSubmitting: isSubmitting,
@@ -196,9 +208,11 @@ function UpdateCourse({
196
208
  }
197
209
  UpdateCourse.defaultProps = {
198
210
  t: text => text,
211
+ difficulties: ["A1", "A2", "B1", "B2", "C1", "C2"],
199
212
  initialValues: {
200
213
  courseName: "",
201
214
  description: "",
215
+ difficulty: "",
202
216
  learnLang: "",
203
217
  forLang: "",
204
218
  visibility: "",
@@ -25,6 +25,7 @@ const props = exports.props = {
25
25
  courseId: "12345",
26
26
  courseName: "Learn Greetings",
27
27
  description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
28
+ difficulty: "A2",
28
29
  learnLang: "english",
29
30
  forLang: "spanish",
30
31
  visibility: "private",
@@ -8,6 +8,8 @@ var _react = _interopRequireDefault(require("react"));
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _material = require("@mui/material");
10
10
  var _mui = require("tss-react/mui");
11
+ var _ProgressiveCardMedia = _interopRequireDefault(require("../../Misc/ProgressiveCardMedia"));
12
+ var _index = _interopRequireDefault(require("../../utils/placeholder-images/index"));
11
13
  var _Course = _interopRequireDefault(require("../../Cards/Course"));
12
14
  var _useListScroll = _interopRequireDefault(require("../../hooks/useListScroll"));
13
15
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -740,7 +740,8 @@ function Exercises(props) {
740
740
  courseSettings,
741
741
  handleToggleKeyboardTranslation,
742
742
  isKeyboardHiddenTranslation,
743
- trackRecommendedEvent
743
+ trackRecommendedEvent,
744
+ parentClassroom
744
745
  } = props;
745
746
  const navigate = (0, _reactRouterDom.useNavigate)();
746
747
  const location = (0, _reactRouterDom.useLocation)();
@@ -1459,7 +1460,8 @@ function Exercises(props) {
1459
1460
  uploadAudioAttempt: uploadAudioAttempt,
1460
1461
  languageTag: languageTag,
1461
1462
  siteLanguage: siteLanguage,
1462
- trackRecommendedEvent: trackRecommendedEvent
1463
+ trackRecommendedEvent: trackRecommendedEvent,
1464
+ parentClassroom: parentClassroom
1463
1465
  }, pronunciationProgress)), /*#__PURE__*/_react.default.createElement(_Translator.default, _extends({
1464
1466
  t: t,
1465
1467
  handleTranslate: handleTranslate,
@@ -1494,7 +1496,8 @@ function Exercises(props) {
1494
1496
  languageTag: languageTag,
1495
1497
  siteLanguage: siteLanguage,
1496
1498
  courseSettings: courseSettings,
1497
- isKeyboardHiddenTranslation: isKeyboardHiddenTranslation
1499
+ isKeyboardHiddenTranslation: isKeyboardHiddenTranslation,
1500
+ parentClassroom: parentClassroom
1498
1501
  }, translationProgress)), /*#__PURE__*/_react.default.createElement(_Listener.default, _extends({
1499
1502
  t: t,
1500
1503
  handleTranslate: handleTranslate,
@@ -1529,7 +1532,8 @@ function Exercises(props) {
1529
1532
  languageInformation: languageInformation,
1530
1533
  languageTag: languageTag,
1531
1534
  siteLanguage: siteLanguage,
1532
- courseSettings: courseSettings
1535
+ courseSettings: courseSettings,
1536
+ parentClassroom: parentClassroom
1533
1537
  }, listeningProgress)), /*#__PURE__*/_react.default.createElement(_SelectClassroom.default, {
1534
1538
  t: t,
1535
1539
  open: isSelectClassroomDialogOpen,
@@ -22,7 +22,8 @@ function ReportProblem({
22
22
  mode,
23
23
  menuIconClassname,
24
24
  currentPhrase,
25
- isQuestion
25
+ isQuestion,
26
+ parentClassroom
26
27
  }) {
27
28
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_ReportProblem.default, {
28
29
  t: t,
@@ -30,7 +31,8 @@ function ReportProblem({
30
31
  handleClose: handleCloseReportProblem,
31
32
  handleReportProblem: handleReportProblem,
32
33
  currentPhrase: currentPhrase,
33
- isQuestion: isQuestion
34
+ isQuestion: isQuestion,
35
+ parentClassroom: parentClassroom
34
36
  }), mode === "icon" && /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
35
37
  title: t("report_problem")
36
38
  }, /*#__PURE__*/_react.default.createElement(_IconButton.default, {
@@ -149,7 +149,9 @@ function OverflowMenu({
149
149
  trackRecommendedEvent,
150
150
  mainSiteUrl,
151
151
  members,
152
- handleOpenInviteDialog
152
+ handleOpenInviteDialog,
153
+ refreshClassroomCourses,
154
+ selectedCourses
153
155
  }) {
154
156
  const isMediumScreen = (0, _useMediaQuery.default)("(max-width:600px)");
155
157
  const [isShareDrawerOpen, setIsShareDrawerOpen] = (0, _react.useState)(false);
@@ -185,7 +187,9 @@ function OverflowMenu({
185
187
  onClick: joinClassroom
186
188
  }, t("join_classroom")), !isCreator && isMember && /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
187
189
  onClick: leaveClassroom
188
- }, t("leave_classroom")), isCreator && /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
190
+ }, t("leave_classroom")), isCreator && selectedCourses.length > 0 && /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
191
+ onClick: refreshClassroomCourses
192
+ }, t("refresh_courses")), isCreator && /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
189
193
  onClick: handleOpenCoursesModal
190
194
  }, t("manage_courses")), isCreator && /*#__PURE__*/_react.default.createElement(_material.MenuItem, {
191
195
  "data-cy": "delete-classroom",
@@ -285,6 +289,8 @@ function Classroom({
285
289
  createdGame,
286
290
  isNualangLiveEnabled,
287
291
  handleCreateCourse,
292
+ refreshClassroomCourses,
293
+ selectedCourses,
288
294
  ...otherProps
289
295
  }) {
290
296
  const {
@@ -1048,7 +1054,9 @@ function Classroom({
1048
1054
  mainSiteUrl: mainSiteUrl,
1049
1055
  members: members,
1050
1056
  handleOpenInviteDialog: handleOpenInviteDialog,
1051
- handleOpenUpgradeSubscriptionModal: true
1057
+ handleOpenUpgradeSubscriptionModal: true,
1058
+ refreshClassroomCourses: refreshClassroomCourses,
1059
+ selectedCourses: selectedCourses
1052
1060
  }), /*#__PURE__*/_react.default.createElement(_UpgradeSubscription.default, {
1053
1061
  key: "UpgradeSubscription",
1054
1062
  t: t,
@@ -508,6 +508,7 @@ function Topic({
508
508
  loading,
509
509
  handleDeleteTopicVideo,
510
510
  verificationStatus,
511
+ parentClassroom,
511
512
  ...otherProps
512
513
  }) {
513
514
  const {
@@ -1056,7 +1057,8 @@ function Topic({
1056
1057
  courseSettings: courseSettings,
1057
1058
  handleToggleKeyboardTranslation: handleToggleKeyboardTranslation,
1058
1059
  isKeyboardHiddenTranslation: isKeyboardHiddenTranslation,
1059
- trackRecommendedEvent: trackRecommendedEvent
1060
+ trackRecommendedEvent: trackRecommendedEvent,
1061
+ parentClassroom: parentClassroom
1060
1062
  })), !(isMember || isCreator) && /*#__PURE__*/_react.default.createElement(_Overlay.default, {
1061
1063
  description: !authenticated ? t("course_sign_in_to_access") : t("join_course_to_access"),
1062
1064
  buttonText: !authenticated ? t("sign_in") : t("join"),
@@ -1242,6 +1244,7 @@ function ViewTopic({
1242
1244
  handleDeleteTopicVideo,
1243
1245
  verificationStatus,
1244
1246
  trackRecommendedEvent,
1247
+ parentClassroom,
1245
1248
  ...otherProps
1246
1249
  }) {
1247
1250
  const {
@@ -1268,7 +1271,8 @@ function ViewTopic({
1268
1271
  courseSettings: courseSettings,
1269
1272
  videoUrl: videoUrl,
1270
1273
  verificationStatus: verificationStatus,
1271
- trackRecommendedEvent: trackRecommendedEvent
1274
+ trackRecommendedEvent: trackRecommendedEvent,
1275
+ parentClassroom: parentClassroom
1272
1276
  }, otherProps))), !isLoading && !topic && /*#__PURE__*/_react.default.createElement(_Topic.default, {
1273
1277
  t: t,
1274
1278
  isLoading: isLoading,
@@ -542,6 +542,8 @@ function TableRow({
542
542
  component: "th",
543
543
  scope: "row",
544
544
  sx: theme => ({
545
+ position: "sticky",
546
+ zIndex: 3,
545
547
  display: "flex",
546
548
  padding: `${theme.spacing(2)} !important`,
547
549
  minWidth: `250px !important`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nualang/nualang-ui-components",
3
- "version": "0.1.1140",
3
+ "version": "0.1.1142",
4
4
  "main": "dist/index.js",
5
5
  "files": [
6
6
  "dist",