Skip to content

Commit e0a3ee4

Browse files
committed
Fix: functional backend communication
1 parent bbc4a15 commit e0a3ee4

File tree

2 files changed

+31
-26
lines changed

2 files changed

+31
-26
lines changed

src/utils/messageHandler.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,12 @@ export class MessageHandler {
5151
{ enableScripts: true, retainContextWhenHidden: true },
5252
);
5353

54+
// Forward messages from the MCQ panel to the main panel
55+
this.mcqPanel.webview.onDidReceiveMessage((msg: MessageType) => {
56+
console.log("EXTENSION: Relay message from mcqPanel", msg);
57+
sendToFrontend(this.panel, msg);
58+
});
59+
5460
this.mcqPanel.onDidDispose(() => {
5561
this.mcqPanel = null;
5662
});

src/webview/components/SourceAcademy.tsx

Lines changed: 25 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,10 @@ const vscode = acquireVsCodeApi();
1515
let frontendBaseUrl: string;
1616

1717
function relayToFrontend(document: Document, message: MessageType) {
18-
const iframe: HTMLIFrameElement = document.getElementById(
18+
const iframe = document.getElementById(
1919
FRONTEND_ELEMENT_ID,
20-
) as HTMLIFrameElement;
21-
const contentWindow = iframe.contentWindow;
22-
if (!contentWindow) {
23-
return;
24-
}
25-
// TODO: Don't hardcode this!
26-
contentWindow.postMessage(message, frontendBaseUrl);
20+
) as HTMLIFrameElement | null;
21+
iframe?.contentWindow?.postMessage(message, frontendBaseUrl);
2722
}
2823

2924
function relayToExtension(message: MessageType) {
@@ -82,15 +77,18 @@ const SourceAcademy: React.FC = () => {
8277
) {
8378
return;
8479
}
85-
console.log("[Webview] MCQ choice selected", {
80+
console.log("[MCQPanel] choice selected", {
8681
workspaceLocation,
8782
assessmentName,
8883
questionId,
8984
choice,
9085
});
9186
// Persist answer for future sessions
9287
try {
93-
localStorage.setItem(`mcq_${assessmentName}_${questionId}`, String(choice));
88+
localStorage.setItem(
89+
`mcq_${assessmentName}_${questionId}`,
90+
String(choice),
91+
);
9492
} catch (e) {
9593
console.warn("[Webview] Failed to save MCQ answer to localStorage", e);
9694
}
@@ -101,27 +99,28 @@ const SourceAcademy: React.FC = () => {
10199
questionId,
102100
choice,
103101
);
104-
// Relay directly to the embedded frontend iframe
105-
relayToFrontend(document, message);
102+
vscode.postMessage(message);
106103
};
107104

108105
document.addEventListener("change", handleChoiceChange);
109106

110-
// Upon mount, restore any saved answers and pre-select radios
111-
const restore = () => {
112-
document.querySelectorAll<HTMLInputElement>('input[name="mcq-choice"]').forEach((el) => {
113-
const qid = el.dataset.qid;
114-
const assess = el.dataset.assessment;
115-
if (!qid || !assess) return;
116-
const stored = localStorage.getItem(`mcq_${assess}_${qid}`);
117-
if (stored !== null && stored === el.dataset.choice) {
118-
el.checked = true;
119-
}
120-
});
121-
};
122-
restore();
107+
// Upon mount, restore any saved answers and pre-select radios
108+
const restore = () => {
109+
document
110+
.querySelectorAll<HTMLInputElement>('input[name="mcq-choice"]')
111+
.forEach((el) => {
112+
const qid = el.dataset.qid;
113+
const assess = el.dataset.assessment;
114+
if (!qid || !assess) return;
115+
const stored = localStorage.getItem(`mcq_${assess}_${qid}`);
116+
if (stored !== null && stored === el.dataset.choice) {
117+
el.checked = true;
118+
}
119+
});
120+
};
121+
restore();
123122

124-
return () => document.removeEventListener("change", handleChoiceChange);
123+
return () => document.removeEventListener("change", handleChoiceChange);
125124
}, []);
126125

127126
return <></>;

0 commit comments

Comments
 (0)