Skip to content

Commit 7132497

Browse files
committed
Add MCQAnswer message handling
1 parent 567ce60 commit 7132497

File tree

3 files changed

+75
-5
lines changed

3 files changed

+75
-5
lines changed

src/utils/messageHandler.tsx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,25 @@ export class MessageHandler {
8686
break;
8787
}
8888

89+
case MessageTypeNames.MCQAnswer: {
90+
const workspaceLocation = message.workspaceLocation;
91+
const assessmentName = message.assessmentName;
92+
const questionId = message.questionId;
93+
const choiceIndex = message.choice;
94+
95+
console.log(
96+
`MCQ Answer: ${assessmentName}, Question ID: ${questionId}, Choice Index: ${choiceIndex}`,
97+
);
98+
const msg = Messages.MCQAnswer(
99+
workspaceLocation,
100+
assessmentName,
101+
questionId,
102+
choiceIndex,
103+
);
104+
sendToFrontend(this.panel, msg);
105+
break;
106+
}
107+
89108
case MessageTypeNames.NewEditor:
90109
this.activeEditor = await Editor.create(
91110
message.workspaceLocation,

src/webview/components/McqPanel.tsx

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, { useState } from "react";
2-
import Messages, { sendToWebview } from "../../utils/messages";
2+
import Messages from "../../utils/messages";
33
import { sendToFrontendWrapped } from "../../commands/showPanel";
44

55
export interface McqData {
@@ -20,7 +20,6 @@ const McqPanel: React.FC<McqPanelProps> = ({ data, onAnswer }) => {
2020

2121
return (
2222
<div style={{ padding: "1rem" }}>
23-
<h3>{data.question}</h3>
2423
<ul style={{ listStyle: "none", paddingLeft: 0 }}>
2524
{data.choices.map((c, idx) => (
2625
<li key={idx} style={{ marginBottom: "0.5rem" }}>
@@ -29,10 +28,14 @@ const McqPanel: React.FC<McqPanelProps> = ({ data, onAnswer }) => {
2928
type="radio"
3029
name="mcq-choice"
3130
value={idx}
31+
data-choice={idx}
32+
data-ws={data.workspaceLocation ?? "assessment"}
33+
data-assessment={data.assessmentName}
34+
data-qid={data.questionId}
3235
checked={selected === idx}
3336
onChange={() => {
3437
setSelected(idx);
35-
const wsLoc = data.workspaceLocation ?? "assessment";
38+
onAnswer(idx);
3639
}}
3740
style={{ marginRight: "0.5rem" }}
3841
/>
@@ -51,7 +54,18 @@ export const McqPanelWithLogging: React.FC<{ data: McqData }> = ({ data }) => (
5154
<McqPanel
5255
data={data}
5356
onAnswer={(choiceIndex) => {
54-
console.log("Selected choice index:", choiceIndex);
57+
const wsLoc = data.workspaceLocation ?? "assessment";
58+
console.log(
59+
`MCQ Answer: ${data.assessmentName}, Question ID: ${data.questionId}, Choice Index: ${choiceIndex}`,
60+
);
61+
sendToFrontendWrapped(
62+
Messages.MCQAnswer(
63+
wsLoc,
64+
data.assessmentName,
65+
data.questionId,
66+
choiceIndex,
67+
),
68+
);
5569
}}
5670
/>
5771
);

src/webview/components/SourceAcademy.tsx

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55
//
66
import React, { useEffect } from "react";
7-
import { MessageType, MessageTypeNames } from "../../utils/messages";
7+
import Messages, { MessageType, MessageTypeNames } from "../../utils/messages";
88
import { FRONTEND_ELEMENT_ID } from "../../constants";
99

1010
// This function is provided by vscode extension.
@@ -64,6 +64,43 @@ const SourceAcademy: React.FC = () => {
6464
};
6565
}, []);
6666

67+
useEffect(() => {
68+
const handleChoiceChange = (e: Event) => {
69+
const target = e.target as HTMLInputElement;
70+
if (!target || target.name !== "mcq-choice") {
71+
return;
72+
}
73+
const choice = parseInt(target.dataset.choice ?? "-1", 10);
74+
const workspaceLocation = target.dataset.ws as any;
75+
const assessmentName = target.dataset.assessment ?? "";
76+
const questionId = parseInt(target.dataset.qid ?? "-1", 10);
77+
if (
78+
isNaN(choice) ||
79+
isNaN(questionId) ||
80+
!workspaceLocation ||
81+
assessmentName === ""
82+
) {
83+
return;
84+
}
85+
console.log("[Webview] MCQ choice selected", {
86+
workspaceLocation,
87+
assessmentName,
88+
questionId,
89+
choice,
90+
});
91+
const message = Messages.MCQAnswer(
92+
workspaceLocation as any,
93+
assessmentName,
94+
questionId,
95+
choice,
96+
);
97+
relayToExtension(message);
98+
};
99+
100+
document.addEventListener("change", handleChoiceChange);
101+
return () => document.removeEventListener("change", handleChoiceChange);
102+
}, []);
103+
67104
return <></>;
68105
};
69106
export default SourceAcademy;

0 commit comments

Comments
 (0)