@nualang/nualang-ui-components 0.1.1140 → 0.1.1141

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.
@@ -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,
@@ -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,
@@ -397,10 +397,21 @@ function Translator({
397
397
  handleTranslationTourFinished();
398
398
  }
399
399
  };
400
+ const [incomplete, setIncomplete] = (0, _react.useState)(false);
401
+ const checkCompletionAndNotify = () => {
402
+ let correctCount = translationWords.filter((word, index) => (0, _index.removeAllSymbols)(word.text) === (0, _index.removeAllSymbols)(translationWordList[index])).length;
403
+ if (correctCount === translationWords.length && translationWords.length < translationWordList.length) {
404
+ setIncomplete(true);
405
+ }
406
+ };
400
407
  (0, _react.useEffect)(() => {
401
408
  setCheckAnswer(false);
402
409
  setIsWordBankAttemptChanged(true);
410
+ setIncomplete(false);
403
411
  }, [translationWords]);
412
+ (0, _react.useEffect)(() => {
413
+ checkAnswer && checkCompletionAndNotify();
414
+ }, [checkAnswer]);
404
415
  (0, _react.useEffect)(() => {
405
416
  if (open && !run && !localStorage.getItem(`translation-exercise-tour-completed`)) {
406
417
  setJoyrideState(prevState => ({
@@ -658,7 +669,7 @@ function Translator({
658
669
  }, /*#__PURE__*/_react.default.createElement(_reactBeautifulDnd.Droppable, {
659
670
  droppableId: "translationWords",
660
671
  direction: "horizontal"
661
- }, provided => /*#__PURE__*/_react.default.createElement(_material.Grid, _extends({
672
+ }, provided => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_material.Grid, _extends({
662
673
  container: true,
663
674
  spacing: 1,
664
675
  className: classes.wordsContainer,
@@ -666,7 +677,8 @@ function Translator({
666
677
  }, provided.droppableProps, {
667
678
  sx: {
668
679
  display: "flex",
669
- flexDirection: "row"
680
+ flexDirection: "row",
681
+ borderColor: incomplete ? _colors.red[800] : theme.palette.primary.main
670
682
  }
671
683
  }), translationWords.map((word, index) => /*#__PURE__*/_react.default.createElement(_reactBeautifulDnd.Draggable, {
672
684
  key: word.id.toString(),
@@ -693,7 +705,21 @@ function Translator({
693
705
  ref: setAnswerBoxRef(index),
694
706
  checkAnswer: checkAnswer,
695
707
  isDragging: snapshot.isDragging
696
- })))), provided.placeholder))), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement(_material.Box, {
708
+ })))), provided.placeholder), /*#__PURE__*/_react.default.createElement(_material.Box, {
709
+ sx: {
710
+ minHeight: '24px',
711
+ // Adjust this based on the Typography height
712
+ display: 'flex',
713
+ justifyContent: 'center',
714
+ alignItems: 'center',
715
+ textAlign: 'center'
716
+ }
717
+ }, incomplete && /*#__PURE__*/_react.default.createElement(_material.Typography, {
718
+ sx: {
719
+ color: _colors.red[800],
720
+ fontWeight: 'bold'
721
+ }
722
+ }, t("incomplete_translation")))))), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement(_material.Box, {
697
723
  component: "fieldset",
698
724
  sx: {
699
725
  borderWidth: 0
@@ -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 }; }
@@ -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,
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.1141",
4
4
  "main": "dist/index.js",
5
5
  "files": [
6
6
  "dist",