@nualang/nualang-ui-components 0.1.1285 → 0.1.1286

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.
@@ -761,7 +761,7 @@ function BotListItem({
761
761
  display: "flex",
762
762
  alignItems: "center",
763
763
  gap: "8px",
764
- children: [bot.botName || "", /*#__PURE__*/(0, _jsxRuntime.jsx)(ChallengeBotHtmlTooltip, {
764
+ children: [bot.botName || "", isCreator ? /*#__PURE__*/(0, _jsxRuntime.jsx)(ChallengeBotHtmlTooltip, {
765
765
  placement: "right",
766
766
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Chip, {
767
767
  label: t("challenge_mode"),
@@ -769,6 +769,11 @@ function BotListItem({
769
769
  variant: "outlined",
770
770
  color: "primary"
771
771
  })
772
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Chip, {
773
+ label: t("challenge_mode"),
774
+ size: "small",
775
+ variant: "outlined",
776
+ color: "primary"
772
777
  })]
773
778
  }) : !isBotChallenge ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
774
779
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Box, {
@@ -791,7 +796,7 @@ function BotListItem({
791
796
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
792
797
  variant: "body1",
793
798
  children: bot.botName || ""
794
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(ChallengeBotHtmlTooltip, {
799
+ }), isCreator ? /*#__PURE__*/(0, _jsxRuntime.jsx)(ChallengeBotHtmlTooltip, {
795
800
  placement: "right",
796
801
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Chip, {
797
802
  label: t("challenge_mode"),
@@ -799,6 +804,11 @@ function BotListItem({
799
804
  variant: "outlined",
800
805
  color: "primary"
801
806
  })
807
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Chip, {
808
+ label: t("challenge_mode"),
809
+ size: "small",
810
+ variant: "outlined",
811
+ color: "primary"
802
812
  })]
803
813
  }),
804
814
  secondary: isLargeScreen ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Box, {
@@ -488,27 +488,19 @@ function ExerciseCellData({
488
488
  let type = null;
489
489
  let color;
490
490
  if (exercise === "roleplays" && roleplayId && completions?.length > 0) {
491
- const uniqueCompletions = new Set(completions.map(completion => completion.exercise));
491
+ const roleplayCompletionData = data?.percentComplete["roleplays"].completedCounts.find(c => c.roleplayId === roleplayId);
492
492
  icon = /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
493
- children: `${uniqueCompletions.size} / 6`
493
+ children: `${roleplayCompletionData?.completedCount} / ${roleplayCompletionData?.total}`
494
494
  });
495
- type = uniqueCompletions.size > 0 ? uniqueCompletions.size === 6 ? "completed" : "partial" : "incompleted";
496
- switch (uniqueCompletions.size) {
497
- case 0:
495
+ type = roleplayCompletionData?.completedCount > 0 ? roleplayCompletionData?.completedCount === roleplayCompletionData?.total ? "completed" : "partial" : "incompleted";
496
+ switch (type) {
497
+ case "incompleted":
498
498
  color = _colors.red[400];
499
499
  break;
500
- case 1:
501
- case 2:
502
- color = _colors.orange[400];
503
- break;
504
- case 3:
500
+ case "partial":
505
501
  color = _colors.yellow[400];
506
502
  break;
507
- case 4:
508
- case 5:
509
- color = _colors.lightGreen[400];
510
- break;
511
- case 6:
503
+ case "completed":
512
504
  color = _colors.green[400];
513
505
  break;
514
506
  default:
@@ -229,21 +229,6 @@ const calcTopicCompletions = (topic, completions = [], isSectionHidden, assignme
229
229
  let totalNumberOfGames = 0;
230
230
  let completedBots = 0;
231
231
  const roleplays = topic.roleplays.map(roleplay => {
232
- const {
233
- isFillInTheBlanksHidden = "false",
234
- isActItOutHidden = "false",
235
- isActItOutListeningHidden = "false",
236
- isActItOutListeningSpeakingHidden = "false",
237
- isActItOutSpeakingHidden = "false"
238
- } = roleplay;
239
- const trueCount = Object.values({
240
- isFillInTheBlanksHidden,
241
- isActItOutHidden,
242
- isActItOutListeningHidden,
243
- isActItOutListeningSpeakingHidden,
244
- isActItOutSpeakingHidden
245
- }).filter(value => value === "true").length;
246
- const numberOfUnhiddenGames = 6 - trueCount;
247
232
  const isUnassignedRoleplay = assignmentExercises ? assignmentExercises && !assignmentExercises.some(e => e.roleplayId === roleplay.roleplayId) : false;
248
233
  if (isRoleplaysHidden || roleplay.isRoleplayHidden || isSectionHidden || topic.isTopicHidden || isUnassignedRoleplay) {
249
234
  return {
@@ -251,17 +236,59 @@ const calcTopicCompletions = (topic, completions = [], isSectionHidden, assignme
251
236
  completedCount: 0
252
237
  };
253
238
  }
254
- const uniqueCompletions = Array.isArray(completions) ? Array.from(new Map(completions.filter(completion => completion.gameId && completion.roleplayId === roleplay.roleplayId).map(completion => [completion.exercise, completion])).values()) : [];
255
- completedGames += uniqueCompletions.length;
256
- totalNumberOfGames += numberOfUnhiddenGames;
257
- if (uniqueCompletions?.length === numberOfUnhiddenGames) {
239
+ const roleplayCompletions = Array.isArray(completions) ? completions.filter(completion => completion.gameId && completion.roleplayId === roleplay.roleplayId) : [];
240
+ let numberOfRoleplayExercises = 0;
241
+ let numberOfCompletedRoleplayExercises = 0;
242
+
243
+ // Define all possible roleplay exercises and their config
244
+ const roleplayExercises = [{
245
+ name: "roleplay-story",
246
+ hiddenKey: null
247
+ }, {
248
+ name: "roleplay-fill-in-the-blanks",
249
+ hiddenKey: "isFillInTheBlanksHidden"
250
+ }, {
251
+ name: "roleplay-act-it-out",
252
+ hiddenKey: "isActItOutHidden"
253
+ }, {
254
+ name: "roleplay-act-it-out-listening",
255
+ hiddenKey: "isActItOutListeningHidden"
256
+ }, {
257
+ name: "roleplay-act-it-out-speaking",
258
+ hiddenKey: "isActItOutSpeakingHidden"
259
+ }, {
260
+ name: "roleplay-act-it-out-listening-speaking",
261
+ hiddenKey: "isActItOutListeningSpeakingHidden"
262
+ }];
263
+ roleplayExercises.forEach(({
264
+ name,
265
+ hiddenKey
266
+ }) => {
267
+ // Check if the exercise is hidden
268
+ if (hiddenKey && roleplay?.[hiddenKey] === "true") {
269
+ return;
270
+ }
271
+ const isAssigned = !assignmentExercises || assignmentExercises.some(e => e.name === name && e.roleplayId === roleplay.roleplayId);
272
+ if (!isAssigned) {
273
+ return;
274
+ }
275
+ numberOfRoleplayExercises++;
276
+ totalNumberOfGames++;
277
+ totalExercises++;
278
+ const completedCount = Array.isArray(roleplayCompletions) ? roleplayCompletions.filter(c => c.exercise === name).length : 0;
279
+ if (completedCount > 0) {
280
+ numberOfCompletedRoleplayExercises++;
281
+ completedGames++;
282
+ completedExerciseCount++;
283
+ }
284
+ });
285
+ if (numberOfCompletedRoleplayExercises === numberOfRoleplayExercises) {
258
286
  completedRoleplays++;
259
287
  }
260
- completedExerciseCount += uniqueCompletions.length;
261
- totalExercises += numberOfUnhiddenGames;
262
288
  return {
263
289
  ...roleplay,
264
- completedCount: uniqueCompletions.length
290
+ completedCount: numberOfCompletedRoleplayExercises,
291
+ total: numberOfRoleplayExercises
265
292
  };
266
293
  });
267
294
  const bots = topic.bots.map(bot => {
@@ -308,7 +335,11 @@ const calcTopicCompletions = (topic, completions = [], isSectionHidden, assignme
308
335
  },
309
336
  roleplays: {
310
337
  completed: completedRoleplays,
311
- completedCount: roleplays.map(roleplay => [roleplay.roleplayId, roleplay.completedCount]),
338
+ completedCounts: roleplays.map(roleplay => ({
339
+ roleplayId: roleplay.roleplayId,
340
+ completedCount: roleplay.completedCount,
341
+ total: roleplay.total
342
+ })),
312
343
  total: roleplays.length,
313
344
  percentage: Math.floor(completedGames / totalNumberOfGames * 100)
314
345
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nualang/nualang-ui-components",
3
- "version": "0.1.1285",
3
+ "version": "0.1.1286",
4
4
  "main": "dist/index.js",
5
5
  "files": [
6
6
  "dist",
@@ -20,7 +20,7 @@
20
20
  "@hookform/resolvers": "^3.6.0",
21
21
  "@json2csv/plainjs": "^7.0.1",
22
22
  "@nualang/avatars": "2.0.3",
23
- "@nualang/nualang-api-and-queries": "^1.1.16",
23
+ "@nualang/nualang-api-and-queries": "^1.1.20",
24
24
  "@storybook/theming": "^8.6.12",
25
25
  "@stripe/react-stripe-js": "^2.1.1",
26
26
  "@stripe/stripe-js": "^1.54.2",