@nualang/nualang-ui-components 0.1.1275-1 → 0.1.1276

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.
@@ -32,7 +32,8 @@ function AssignmentCard({
32
32
  fetchMemberCourseCompletions,
33
33
  lastClickedExerciseId,
34
34
  handleViewProgress,
35
- lastAssignmentFetch
35
+ lastAssignmentFetch,
36
+ assignedStudents = []
36
37
  }) {
37
38
  const [confirm] = (0, _useConfirm.default)(t);
38
39
  const {
@@ -224,7 +225,7 @@ function AssignmentCard({
224
225
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.Box, {
225
226
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
226
227
  variant: "h4",
227
- children: assignment.assignedStudents?.length
228
+ children: assignedStudents?.length
228
229
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
229
230
  variant: "body2",
230
231
  color: "text.secondary",
@@ -31,7 +31,8 @@ const AssignmentCardsList = ({
31
31
  fetchMemberCourseCompletions,
32
32
  memberId,
33
33
  handleViewProgress,
34
- lastAssignmentFetch
34
+ lastAssignmentFetch,
35
+ assignmentMembersById
35
36
  }) => {
36
37
  const [lastClickedExerciseId, setLastClickedExerciseId] = (0, _react.useState)(null);
37
38
  (0, _react.useEffect)(() => {
@@ -170,7 +171,8 @@ const AssignmentCardsList = ({
170
171
  username: username,
171
172
  preferred_username: preferred_username,
172
173
  memberId: memberId,
173
- handleViewProgress: handleViewProgress
174
+ handleViewProgress: handleViewProgress,
175
+ assignedStudents: assignmentMembersById[assignment.assignmentId] || []
174
176
  }, assignment.assignmentId))]
175
177
  })
176
178
  });
@@ -55,7 +55,8 @@ function CreateAssignmentDialog({
55
55
  getCourses,
56
56
  initialData = {},
57
57
  dialogTitle,
58
- userEmail = ''
58
+ userEmail = '',
59
+ assignedStudents
59
60
  }) {
60
61
  const {
61
62
  classes
@@ -68,7 +69,7 @@ function CreateAssignmentDialog({
68
69
  const [members, setMembers] = (0, _react.useState)([]);
69
70
  const [assignment, setAssignment] = (0, _react.useState)({
70
71
  classroomId: classroom?.length > 0 ? [classroom] : [],
71
- assignedStudents: members?.map(member => member.memberId),
72
+ assignedStudents,
72
73
  title: initialData.title ? initialData.title : undefined,
73
74
  instructions: initialData.instructions ? initialData.instructions : t("default_assignment_instructions"),
74
75
  type: "assignment",
@@ -21,6 +21,7 @@ var _PictureAsPdf = _interopRequireDefault(require("@mui/icons-material/PictureA
21
21
  var _School = _interopRequireDefault(require("@mui/icons-material/School"));
22
22
  var _Visibility = _interopRequireDefault(require("@mui/icons-material/Visibility"));
23
23
  var _VisibilityOff = _interopRequireDefault(require("@mui/icons-material/VisibilityOff"));
24
+ var _Delete = _interopRequireDefault(require("@mui/icons-material/Delete"));
24
25
  var _Members = _interopRequireDefault(require("../../Dialogs/Members"));
25
26
  var _CourseOutline = _interopRequireDefault(require("../../Dialogs/CourseOutline"));
26
27
  var _Members2 = _interopRequireDefault(require("../../Lists/Members"));
@@ -31,6 +32,7 @@ var _useCourseState = _interopRequireDefault(require("../../hooks/useCourseState
31
32
  var _ProgressiveCardMedia = _interopRequireDefault(require("../../Misc/ProgressiveCardMedia"));
32
33
  var _CardElements = require("../CardElements");
33
34
  var _Queries = require("@nualang/nualang-api-and-queries/Queries");
35
+ var _useConfirm = _interopRequireDefault(require("../../hooks/useConfirm"));
34
36
  var _jsxRuntime = require("react/jsx-runtime");
35
37
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
36
38
  // Mui
@@ -58,7 +60,8 @@ function OverflowMenu({
58
60
  classroomId,
59
61
  isClassroomArchived = false,
60
62
  canDuplicateCourse,
61
- hiddenCourses = []
63
+ hiddenCourses = [],
64
+ deleteCourse
62
65
  }) {
63
66
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.Menu, {
64
67
  id: `card-menu-${courseId}`,
@@ -126,6 +129,15 @@ function OverflowMenu({
126
129
  })
127
130
  })
128
131
  })
132
+ }), isCreator && !classroomId && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.MenuItem, {
133
+ onClick: deleteCourse,
134
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_CardElements.CardMenuIcon, {
135
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Delete.default, {
136
+ fontSize: "small"
137
+ })
138
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Typography, {
139
+ children: t("delete_course")
140
+ })]
129
141
  }), isClassroomCreator && handleHideCourse && !hiddenCourses.includes(courseId) && !isClassroomArchived && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.MenuItem, {
130
142
  onClick: () => handleHideCourse(courseId),
131
143
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_CardElements.CardMenuIcon, {
@@ -247,8 +259,10 @@ function CourseCard({
247
259
  email,
248
260
  isTeacher,
249
261
  hiddenCourses = [],
250
- isClassroomCreator = null
262
+ isClassroomCreator = null,
263
+ handleDeleteCourse
251
264
  }) {
265
+ const [confirm] = (0, _useConfirm.default)(t);
252
266
  const [placeholderRef, visible] = (0, _reactIntersectionObserver.useInView)({
253
267
  rootMargin: "320px",
254
268
  triggerOnce: true
@@ -342,6 +356,15 @@ function CourseCard({
342
356
  const leaveCourse = () => {
343
357
  handleLeaveCourse(courseId);
344
358
  };
359
+ const courseSections = sectionsQuery.isSuccess ? sectionsQuery.data.Items : [];
360
+ const deleteCourse = async () => {
361
+ const confirmed = await confirm(t("delete_course"), t("delete_course_confirmation"), "", true, t("course_deletion_note", {
362
+ sectionCount: courseSections ? courseSections.length : 0
363
+ }), t("confirmDeletionText"));
364
+ if (confirmed) {
365
+ handleDeleteCourse(courseId);
366
+ }
367
+ };
345
368
  const handleClickImage = () => {
346
369
  if (isCreator || isMember || isAdmin) {
347
370
  viewCourse();
@@ -578,7 +601,8 @@ function CourseCard({
578
601
  isClassroomArchived: isClassroomArchived,
579
602
  canDuplicateCourse: canDuplicateCourse,
580
603
  hiddenCourses: hiddenCourses,
581
- isTeacher: isTeacher
604
+ isTeacher: isTeacher,
605
+ deleteCourse: deleteCourse
582
606
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Members.default, {
583
607
  getMemberDetails: getMemberDetails,
584
608
  t: t,
@@ -135,7 +135,8 @@ function Confirm({
135
135
  margin: "normal",
136
136
  variant: "outlined",
137
137
  fullWidth: true,
138
- required: true
138
+ required: true,
139
+ autoComplete: "off"
139
140
  })]
140
141
  }), isArchive && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
141
142
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_material.DialogContentText, {
@@ -155,7 +156,8 @@ function Confirm({
155
156
  margin: "normal",
156
157
  variant: "outlined",
157
158
  fullWidth: true,
158
- required: true
159
+ required: true,
160
+ autoComplete: "off"
159
161
  })]
160
162
  }), isUnarchive && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
161
163
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_material.DialogContentText, {
@@ -175,7 +177,8 @@ function Confirm({
175
177
  margin: "normal",
176
178
  variant: "outlined",
177
179
  fullWidth: true,
178
- required: true
180
+ required: true,
181
+ autoComplete: "off"
179
182
  })]
180
183
  }), showCheckbox && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
181
184
  style: {
@@ -34,6 +34,7 @@ function CourseList({
34
34
  isClassroomArchived = false,
35
35
  email,
36
36
  isTeacher,
37
+ handleDeleteCourse,
37
38
  ...otherProps
38
39
  }) {
39
40
  const [items, ref] = (0, _useListScroll.default)({
@@ -100,6 +101,7 @@ function CourseList({
100
101
  isClassroomArchived: isClassroomArchived,
101
102
  email: email,
102
103
  isTeacher: isTeacher,
104
+ handleDeleteCourse: handleDeleteCourse,
103
105
  ...otherProps
104
106
  }, course.courseId)
105
107
  }, course.courseId);
@@ -144,6 +146,7 @@ function CourseList({
144
146
  classroomId: classroomId,
145
147
  isClassroomArchived: isClassroomArchived,
146
148
  isTeacher: isTeacher,
149
+ handleDeleteCourse: handleDeleteCourse,
147
150
  ...otherProps
148
151
  }, course.courseId)
149
152
  }, course.courseId);
@@ -499,6 +499,8 @@ function Classroom({
499
499
  progressHelpers,
500
500
  preferred_username,
501
501
  assignedCourses,
502
+ assignedStudents,
503
+ assignmentMembersById,
502
504
  email,
503
505
  ...otherProps
504
506
  }) {
@@ -927,6 +929,7 @@ function Classroom({
927
929
  TabContent: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Box, {
928
930
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_AssignmentCardsList.default, {
929
931
  t: t,
932
+ assignmentMembersById: assignmentMembersById,
930
933
  lastAssignmentFetch: initialStored,
931
934
  handleViewProgress: handleViewProgress,
932
935
  isCreator: isCreator,
@@ -1087,6 +1090,7 @@ function Classroom({
1087
1090
  py: 1,
1088
1091
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Progress.default, {
1089
1092
  t: t,
1093
+ assignedStudents: assignedStudents,
1090
1094
  courses: courses,
1091
1095
  members: members,
1092
1096
  courseIds: courseIds,
@@ -65,7 +65,8 @@ function Courses({
65
65
  memberId,
66
66
  handleDuplicateCourse,
67
67
  email,
68
- isTeacher
68
+ isTeacher,
69
+ handleDeleteCourse
69
70
  }) {
70
71
  const {
71
72
  classes
@@ -140,7 +141,8 @@ function Courses({
140
141
  handleDuplicateCourse: handleDuplicateCourse,
141
142
  cardTitleComponent: "h2",
142
143
  email: email,
143
- isTeacher: isTeacher
144
+ isTeacher: isTeacher,
145
+ handleDeleteCourse: handleDeleteCourse
144
146
  }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Box, {
145
147
  py: 2,
146
148
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Courses2.default, {
@@ -179,7 +181,8 @@ function Courses({
179
181
  username: username,
180
182
  handleDuplicateCourse: handleDuplicateCourse,
181
183
  cardTitleComponent: "h2",
182
- isTeacher: isTeacher
184
+ isTeacher: isTeacher,
185
+ handleDeleteCourse: handleDeleteCourse
183
186
  }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Box, {
184
187
  py: 2,
185
188
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Courses2.default, {
@@ -163,7 +163,8 @@ function Progress({
163
163
  assignments = [],
164
164
  isVideoChatEnabled,
165
165
  assignedCourses,
166
- assignedCourseIds
166
+ assignedCourseIds,
167
+ assignedStudents
167
168
  }) {
168
169
  const theme = (0, _styles.useTheme)();
169
170
  const isSmallScreen = (0, _useMediaQuery.default)(theme.breakpoints.down("sm"));
@@ -318,18 +319,18 @@ function Progress({
318
319
  return members.filter(member => {
319
320
  if (memberId) {
320
321
  return member.memberId === memberId;
321
- } else if (selectedMembers && selectedMembers.length && reportType === "assignments" && selectedAssignment?.assignedStudents) {
322
+ } else if (selectedMembers && selectedMembers.length && reportType === "assignments" && assignedStudents) {
322
323
  const selectedMemberIds = selectedMembers.map(m => m.memberId);
323
- return selectedMemberIds.includes(member.memberId) && selectedAssignment?.assignedStudents.includes(member.memberId);
324
+ return selectedMemberIds.includes(member.memberId) && (assignedStudents || []).includes(member.memberId);
324
325
  } else if (selectedMembers && selectedMembers.length) {
325
326
  const selectedMemberIds = selectedMembers.map(m => m.memberId);
326
327
  return selectedMemberIds.includes(member.memberId);
327
- } else if (reportType === "assignments" && selectedAssignment?.assignedStudents) {
328
- return selectedAssignment?.assignedStudents.includes(member.memberId);
328
+ } else if (reportType === "assignments" && assignedStudents) {
329
+ return (assignedStudents || []).includes(member.memberId);
329
330
  }
330
331
  return true;
331
332
  });
332
- }, [members, memberId, selectedMembers, reportType, selectedAssignment]);
333
+ }, [members, memberId, selectedMembers, reportType, selectedAssignment, assignedStudents]);
333
334
  let currentView = "all_courses";
334
335
  if (reportType === "assignments" && selectedTopic && selectedRoleplay) {
335
336
  currentView = "assignment-roleplay";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nualang/nualang-ui-components",
3
- "version": "0.1.1275-1",
3
+ "version": "0.1.1276",
4
4
  "main": "dist/index.js",
5
5
  "files": [
6
6
  "dist",