catchup-library-web 1.5.4 → 1.6.0

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.
package/dist/index.d.mts CHANGED
@@ -170,7 +170,7 @@ interface IActivityPreviewByDataProps {
170
170
  isFullScreen: boolean;
171
171
  }
172
172
 
173
- declare const ActivityBodyContent: ({ templateType, bodyMap, contentMap, answerMap, }: IActivityBodyContentProps) => react_jsx_runtime.JSX.Element;
173
+ declare const ActivityBodyContent: ({ templateType, bodyMap, contentMap, answerMap, }: IActivityBodyContentProps) => react_jsx_runtime.JSX.Element | null;
174
174
 
175
175
  declare const DropdownActivityContent: ({ answer, data, canAnswerQuestion, changeAnswer, isPreview, showCorrectAnswer, isFullScreen, }: IDropdownActivityProps) => react_jsx_runtime.JSX.Element;
176
176
 
package/dist/index.d.ts CHANGED
@@ -170,7 +170,7 @@ interface IActivityPreviewByDataProps {
170
170
  isFullScreen: boolean;
171
171
  }
172
172
 
173
- declare const ActivityBodyContent: ({ templateType, bodyMap, contentMap, answerMap, }: IActivityBodyContentProps) => react_jsx_runtime.JSX.Element;
173
+ declare const ActivityBodyContent: ({ templateType, bodyMap, contentMap, answerMap, }: IActivityBodyContentProps) => react_jsx_runtime.JSX.Element | null;
174
174
 
175
175
  declare const DropdownActivityContent: ({ answer, data, canAnswerQuestion, changeAnswer, isPreview, showCorrectAnswer, isFullScreen, }: IDropdownActivityProps) => react_jsx_runtime.JSX.Element;
176
176
 
package/dist/index.js CHANGED
@@ -3464,94 +3464,82 @@ var ActivityBodyContent = ({
3464
3464
  contentMap,
3465
3465
  answerMap
3466
3466
  }) => {
3467
- let currentQQIndex = 0;
3468
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "flex flex-col justify-center items-center", children: Object.keys(bodyMap).map((key, index) => {
3469
- const body = JSON.parse(bodyMap[key]);
3470
- if (templateType === "DROPDOWN") {
3471
- while (body.value.includes("@@")) {
3472
- if (answerMap[currentQQIndex].trim() === "" || answerMap[currentQQIndex].trim() === "DEFAULT_OPTION") {
3473
- body.value = body.value.replace(
3474
- "@@",
3475
- `----(${currentQQIndex + 1})----`
3476
- );
3477
- } else {
3478
- if (contentMap["type"] === "TEXT") {
3479
- body.value = body.value.replace(
3480
- "@@",
3481
- `--TEXT--${answerMap[currentQQIndex]}--TEXT--`
3482
- );
3483
- } else if (contentMap["type"] === "IMAGE") {
3484
- body.value = body.value.replace(
3485
- "@@",
3486
- `--IMAGE--${answerMap[currentQQIndex]}--IMAGE--`
3487
- );
3488
- } else if (contentMap["type"] === "VIDEO") {
3489
- body.value = body.value.replace(
3490
- "@@",
3491
- `--VIDEO--${answerMap[currentQQIndex]}--VIDEO--`
3492
- );
3493
- } else if (contentMap["type"] === "AUDIO") {
3494
- body.value = body.value.replace(
3495
- "@@",
3496
- `--AUDIO--${answerMap[currentQQIndex]}--AUDIO--`
3497
- );
3498
- } else {
3499
- body.value = body.value.replace(
3500
- "@@",
3501
- answerMap[currentQQIndex]
3502
- );
3503
- }
3504
- }
3505
- currentQQIndex++;
3506
- }
3507
- } else if (templateType === "FILL_IN_THE_BLANKS") {
3508
- while (body.value.includes("@@")) {
3509
- if (answerMap[currentQQIndex].trim() === "") {
3510
- body.value = body.value.replace(
3511
- "@@",
3512
- `----(${currentQQIndex + 1})----`
3513
- );
3514
- } else {
3515
- if (contentMap["type"] === "TEXT") {
3516
- body.value = body.value.replace(
3517
- "@@",
3518
- `--TEXT--${answerMap[currentQQIndex]}--TEXT--`
3519
- );
3520
- } else if (contentMap["type"] === "IMAGE") {
3521
- body.value = body.value.replace(
3467
+ if (!bodyMap || !contentMap) return null;
3468
+ const processBodyValue = (bodyValue, contentType, answerMap2) => {
3469
+ var _a;
3470
+ let currentQQIndex = 0;
3471
+ let processedValue = bodyValue;
3472
+ while (processedValue.includes("@@")) {
3473
+ const answer = ((_a = answerMap2[currentQQIndex]) == null ? void 0 : _a.trim()) || "";
3474
+ if (answer === "" || answer === "DEFAULT_OPTION") {
3475
+ processedValue = processedValue.replace(
3476
+ "@@",
3477
+ `----(${currentQQIndex + 1})----`
3478
+ );
3479
+ } else {
3480
+ switch (contentType) {
3481
+ case "TEXT":
3482
+ processedValue = processedValue.replace(
3522
3483
  "@@",
3523
- `--IMAGE--${answerMap[currentQQIndex]}--IMAGE--`
3484
+ `--TEXT--${answer}--TEXT--`
3524
3485
  );
3525
- } else if (contentMap["type"] === "VIDEO") {
3526
- body.value = body.value.replace(
3486
+ break;
3487
+ case "IMAGE":
3488
+ processedValue = processedValue.replace(
3527
3489
  "@@",
3528
- `--VIDEO--${answerMap[currentQQIndex]}--VIDEO--`
3490
+ `--IMAGE--${answer}--IMAGE--`
3529
3491
  );
3530
- } else if (contentMap["type"] === "AUDIO") {
3531
- body.value = body.value.replace(
3492
+ break;
3493
+ case "VIDEO":
3494
+ processedValue = processedValue.replace(
3532
3495
  "@@",
3533
- `--AUDIO--${answerMap[currentQQIndex]}--AUDIO--`
3496
+ `--VIDEO--${answer}--VIDEO--`
3534
3497
  );
3535
- } else {
3536
- body.value = body.value.replace(
3498
+ break;
3499
+ case "AUDIO":
3500
+ processedValue = processedValue.replace(
3537
3501
  "@@",
3538
- answerMap[currentQQIndex]
3502
+ `--AUDIO--${answer}--AUDIO--`
3539
3503
  );
3540
- }
3504
+ break;
3505
+ default:
3506
+ processedValue = processedValue.replace("@@", answer);
3541
3507
  }
3542
- currentQQIndex++;
3543
3508
  }
3509
+ currentQQIndex++;
3544
3510
  }
3545
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
3546
- ShowBodyMediaByContentType_default,
3547
- {
3548
- index,
3549
- type: body.type,
3550
- value: body.value,
3551
- size: body.size
3552
- }
3553
- );
3554
- }) });
3511
+ return {
3512
+ processedValue,
3513
+ currentQQIndex
3514
+ };
3515
+ };
3516
+ const processedBodies = Object.keys(bodyMap).map((key) => {
3517
+ let body;
3518
+ try {
3519
+ body = JSON.parse(bodyMap[key]);
3520
+ } catch (error) {
3521
+ console.error(`Error parsing body at key ${key}:`, error);
3522
+ return null;
3523
+ }
3524
+ if (["DROPDOWN", "FILL_IN_THE_BLANKS"].includes(templateType)) {
3525
+ const contentType = contentMap["type"];
3526
+ const result = processBodyValue(body.value, contentType, answerMap);
3527
+ body.value = result.processedValue;
3528
+ }
3529
+ return __spreadProps(__spreadValues({}, body), {
3530
+ key
3531
+ });
3532
+ }).filter(Boolean);
3533
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "flex flex-col justify-center items-center", children: processedBodies.map((body, index) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
3534
+ ShowBodyMediaByContentType_default,
3535
+ {
3536
+ index,
3537
+ type: body.type,
3538
+ value: body.value,
3539
+ size: body.size
3540
+ },
3541
+ `body-${body.key}-${index}`
3542
+ )) });
3555
3543
  };
3556
3544
  var ActivityBodyContent_default = ActivityBodyContent;
3557
3545
 
package/dist/index.mjs CHANGED
@@ -3272,94 +3272,82 @@ var ActivityBodyContent = ({
3272
3272
  contentMap,
3273
3273
  answerMap
3274
3274
  }) => {
3275
- let currentQQIndex = 0;
3276
- return /* @__PURE__ */ jsx13("div", { className: "flex flex-col justify-center items-center", children: Object.keys(bodyMap).map((key, index) => {
3277
- const body = JSON.parse(bodyMap[key]);
3278
- if (templateType === "DROPDOWN") {
3279
- while (body.value.includes("@@")) {
3280
- if (answerMap[currentQQIndex].trim() === "" || answerMap[currentQQIndex].trim() === "DEFAULT_OPTION") {
3281
- body.value = body.value.replace(
3282
- "@@",
3283
- `----(${currentQQIndex + 1})----`
3284
- );
3285
- } else {
3286
- if (contentMap["type"] === "TEXT") {
3287
- body.value = body.value.replace(
3288
- "@@",
3289
- `--TEXT--${answerMap[currentQQIndex]}--TEXT--`
3290
- );
3291
- } else if (contentMap["type"] === "IMAGE") {
3292
- body.value = body.value.replace(
3293
- "@@",
3294
- `--IMAGE--${answerMap[currentQQIndex]}--IMAGE--`
3295
- );
3296
- } else if (contentMap["type"] === "VIDEO") {
3297
- body.value = body.value.replace(
3298
- "@@",
3299
- `--VIDEO--${answerMap[currentQQIndex]}--VIDEO--`
3300
- );
3301
- } else if (contentMap["type"] === "AUDIO") {
3302
- body.value = body.value.replace(
3303
- "@@",
3304
- `--AUDIO--${answerMap[currentQQIndex]}--AUDIO--`
3305
- );
3306
- } else {
3307
- body.value = body.value.replace(
3308
- "@@",
3309
- answerMap[currentQQIndex]
3310
- );
3311
- }
3312
- }
3313
- currentQQIndex++;
3314
- }
3315
- } else if (templateType === "FILL_IN_THE_BLANKS") {
3316
- while (body.value.includes("@@")) {
3317
- if (answerMap[currentQQIndex].trim() === "") {
3318
- body.value = body.value.replace(
3319
- "@@",
3320
- `----(${currentQQIndex + 1})----`
3321
- );
3322
- } else {
3323
- if (contentMap["type"] === "TEXT") {
3324
- body.value = body.value.replace(
3325
- "@@",
3326
- `--TEXT--${answerMap[currentQQIndex]}--TEXT--`
3327
- );
3328
- } else if (contentMap["type"] === "IMAGE") {
3329
- body.value = body.value.replace(
3275
+ if (!bodyMap || !contentMap) return null;
3276
+ const processBodyValue = (bodyValue, contentType, answerMap2) => {
3277
+ var _a;
3278
+ let currentQQIndex = 0;
3279
+ let processedValue = bodyValue;
3280
+ while (processedValue.includes("@@")) {
3281
+ const answer = ((_a = answerMap2[currentQQIndex]) == null ? void 0 : _a.trim()) || "";
3282
+ if (answer === "" || answer === "DEFAULT_OPTION") {
3283
+ processedValue = processedValue.replace(
3284
+ "@@",
3285
+ `----(${currentQQIndex + 1})----`
3286
+ );
3287
+ } else {
3288
+ switch (contentType) {
3289
+ case "TEXT":
3290
+ processedValue = processedValue.replace(
3330
3291
  "@@",
3331
- `--IMAGE--${answerMap[currentQQIndex]}--IMAGE--`
3292
+ `--TEXT--${answer}--TEXT--`
3332
3293
  );
3333
- } else if (contentMap["type"] === "VIDEO") {
3334
- body.value = body.value.replace(
3294
+ break;
3295
+ case "IMAGE":
3296
+ processedValue = processedValue.replace(
3335
3297
  "@@",
3336
- `--VIDEO--${answerMap[currentQQIndex]}--VIDEO--`
3298
+ `--IMAGE--${answer}--IMAGE--`
3337
3299
  );
3338
- } else if (contentMap["type"] === "AUDIO") {
3339
- body.value = body.value.replace(
3300
+ break;
3301
+ case "VIDEO":
3302
+ processedValue = processedValue.replace(
3340
3303
  "@@",
3341
- `--AUDIO--${answerMap[currentQQIndex]}--AUDIO--`
3304
+ `--VIDEO--${answer}--VIDEO--`
3342
3305
  );
3343
- } else {
3344
- body.value = body.value.replace(
3306
+ break;
3307
+ case "AUDIO":
3308
+ processedValue = processedValue.replace(
3345
3309
  "@@",
3346
- answerMap[currentQQIndex]
3310
+ `--AUDIO--${answer}--AUDIO--`
3347
3311
  );
3348
- }
3312
+ break;
3313
+ default:
3314
+ processedValue = processedValue.replace("@@", answer);
3349
3315
  }
3350
- currentQQIndex++;
3351
3316
  }
3317
+ currentQQIndex++;
3352
3318
  }
3353
- return /* @__PURE__ */ jsx13(
3354
- ShowBodyMediaByContentType_default,
3355
- {
3356
- index,
3357
- type: body.type,
3358
- value: body.value,
3359
- size: body.size
3360
- }
3361
- );
3362
- }) });
3319
+ return {
3320
+ processedValue,
3321
+ currentQQIndex
3322
+ };
3323
+ };
3324
+ const processedBodies = Object.keys(bodyMap).map((key) => {
3325
+ let body;
3326
+ try {
3327
+ body = JSON.parse(bodyMap[key]);
3328
+ } catch (error) {
3329
+ console.error(`Error parsing body at key ${key}:`, error);
3330
+ return null;
3331
+ }
3332
+ if (["DROPDOWN", "FILL_IN_THE_BLANKS"].includes(templateType)) {
3333
+ const contentType = contentMap["type"];
3334
+ const result = processBodyValue(body.value, contentType, answerMap);
3335
+ body.value = result.processedValue;
3336
+ }
3337
+ return __spreadProps(__spreadValues({}, body), {
3338
+ key
3339
+ });
3340
+ }).filter(Boolean);
3341
+ return /* @__PURE__ */ jsx13("div", { className: "flex flex-col justify-center items-center", children: processedBodies.map((body, index) => /* @__PURE__ */ jsx13(
3342
+ ShowBodyMediaByContentType_default,
3343
+ {
3344
+ index,
3345
+ type: body.type,
3346
+ value: body.value,
3347
+ size: body.size
3348
+ },
3349
+ `body-${body.key}-${index}`
3350
+ )) });
3363
3351
  };
3364
3352
  var ActivityBodyContent_default = ActivityBodyContent;
3365
3353
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "catchup-library-web",
3
- "version": "1.5.4",
3
+ "version": "1.6.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -7,100 +7,101 @@ const ActivityBodyContent = ({
7
7
  contentMap,
8
8
  answerMap,
9
9
  }: IActivityBodyContentProps) => {
10
- let currentQQIndex = 0;
10
+ if (!bodyMap || !contentMap) return null;
11
11
 
12
- return (
13
- <div className="flex flex-col justify-center items-center">
14
- {Object.keys(bodyMap).map((key, index) => {
15
- const body = JSON.parse(bodyMap[key]);
16
- if (templateType === "DROPDOWN") {
17
- while (body.value.includes("@@")) {
18
- if (
19
- answerMap[currentQQIndex].trim() === "" ||
20
- answerMap[currentQQIndex].trim() === "DEFAULT_OPTION"
21
- ) {
22
- body.value = body.value.replace(
23
- "@@",
24
- `----(${currentQQIndex + 1})----`
25
- );
26
- } else {
27
- if (contentMap["type"] === "TEXT") {
28
- body.value = body.value.replace(
29
- "@@",
30
- `--TEXT--${answerMap[currentQQIndex]}--TEXT--`
31
- );
32
- } else if (contentMap["type"] === "IMAGE") {
33
- body.value = body.value.replace(
34
- "@@",
35
- `--IMAGE--${answerMap[currentQQIndex]}--IMAGE--`
36
- );
37
- } else if (contentMap["type"] === "VIDEO") {
38
- body.value = body.value.replace(
39
- "@@",
40
- `--VIDEO--${answerMap[currentQQIndex]}--VIDEO--`
41
- );
42
- } else if (contentMap["type"] === "AUDIO") {
43
- body.value = body.value.replace(
44
- "@@",
45
- `--AUDIO--${answerMap[currentQQIndex]}--AUDIO--`
46
- );
47
- } else {
48
- body.value = body.value.replace(
49
- "@@",
50
- answerMap[currentQQIndex]
51
- );
52
- }
53
- }
54
- currentQQIndex++;
55
- }
56
- } else if (templateType === "FILL_IN_THE_BLANKS") {
57
- while (body.value.includes("@@")) {
58
- if (answerMap[currentQQIndex].trim() === "") {
59
- body.value = body.value.replace(
60
- "@@",
61
- `----(${currentQQIndex + 1})----`
62
- );
63
- } else {
64
- if (contentMap["type"] === "TEXT") {
65
- body.value = body.value.replace(
66
- "@@",
67
- `--TEXT--${answerMap[currentQQIndex]}--TEXT--`
68
- );
69
- } else if (contentMap["type"] === "IMAGE") {
70
- body.value = body.value.replace(
71
- "@@",
72
- `--IMAGE--${answerMap[currentQQIndex]}--IMAGE--`
73
- );
74
- } else if (contentMap["type"] === "VIDEO") {
75
- body.value = body.value.replace(
76
- "@@",
77
- `--VIDEO--${answerMap[currentQQIndex]}--VIDEO--`
78
- );
79
- } else if (contentMap["type"] === "AUDIO") {
80
- body.value = body.value.replace(
81
- "@@",
82
- `--AUDIO--${answerMap[currentQQIndex]}--AUDIO--`
83
- );
84
- } else {
85
- body.value = body.value.replace(
86
- "@@",
87
- answerMap[currentQQIndex]
88
- );
89
- }
90
- }
91
- currentQQIndex++;
92
- }
93
- }
12
+ const processBodyValue = (
13
+ bodyValue: string,
14
+ contentType: string,
15
+ answerMap: string[]
16
+ ) => {
17
+ let currentQQIndex = 0;
18
+ let processedValue = bodyValue;
94
19
 
95
- return (
96
- <ShowBodyMediaByContentType
97
- index={index}
98
- type={body.type}
99
- value={body.value}
100
- size={body.size}
101
- />
20
+ while (processedValue.includes("@@")) {
21
+ const answer = answerMap[currentQQIndex]?.trim() || "";
22
+
23
+ // Handle empty or default answers
24
+ if (answer === "" || answer === "DEFAULT_OPTION") {
25
+ processedValue = processedValue.replace(
26
+ "@@",
27
+ `----(${currentQQIndex + 1})----`
102
28
  );
103
- })}
29
+ } else {
30
+ // Handle different content types
31
+ switch (contentType) {
32
+ case "TEXT":
33
+ processedValue = processedValue.replace(
34
+ "@@",
35
+ `--TEXT--${answer}--TEXT--`
36
+ );
37
+ break;
38
+ case "IMAGE":
39
+ processedValue = processedValue.replace(
40
+ "@@",
41
+ `--IMAGE--${answer}--IMAGE--`
42
+ );
43
+ break;
44
+ case "VIDEO":
45
+ processedValue = processedValue.replace(
46
+ "@@",
47
+ `--VIDEO--${answer}--VIDEO--`
48
+ );
49
+ break;
50
+ case "AUDIO":
51
+ processedValue = processedValue.replace(
52
+ "@@",
53
+ `--AUDIO--${answer}--AUDIO--`
54
+ );
55
+ break;
56
+ default:
57
+ processedValue = processedValue.replace("@@", answer);
58
+ }
59
+ }
60
+ currentQQIndex++;
61
+ }
62
+
63
+ return {
64
+ processedValue,
65
+ currentQQIndex,
66
+ };
67
+ };
68
+
69
+ // Process all bodies and their values
70
+ const processedBodies = Object.keys(bodyMap)
71
+ .map((key) => {
72
+ let body;
73
+ try {
74
+ body = JSON.parse(bodyMap[key]);
75
+ } catch (error) {
76
+ console.error(`Error parsing body at key ${key}:`, error);
77
+ return null;
78
+ }
79
+
80
+ // Only process value if needed for certain template types
81
+ if (["DROPDOWN", "FILL_IN_THE_BLANKS"].includes(templateType)) {
82
+ const contentType = contentMap["type"];
83
+ const result = processBodyValue(body.value, contentType, answerMap);
84
+ body.value = result.processedValue;
85
+ }
86
+
87
+ return {
88
+ ...body,
89
+ key,
90
+ };
91
+ })
92
+ .filter(Boolean);
93
+
94
+ return (
95
+ <div className="flex flex-col justify-center items-center">
96
+ {processedBodies.map((body, index) => (
97
+ <ShowBodyMediaByContentType
98
+ key={`body-${body.key}-${index}`}
99
+ index={index}
100
+ type={body.type}
101
+ value={body.value}
102
+ size={body.size}
103
+ />
104
+ ))}
104
105
  </div>
105
106
  );
106
107
  };