diff --git a/src/pages/CodeEditor.jsx b/src/pages/CodeEditor.jsx index f16f689..217e2f0 100644 --- a/src/pages/CodeEditor.jsx +++ b/src/pages/CodeEditor.jsx @@ -3,22 +3,22 @@ import { useParams } from "react-router-dom"; import EditorPanel from "../components/EditorPanel"; import PreviewPanel from "../components/PreviewPanel"; -export default function PageCodeEditor() { +const ASSIGNMENT_BASE = "https://assignment-service.fly.dev"; +export default function PageCodeEditor() { const { qrCodeNumber: routeId } = useParams(); - // console.log("Assignment ID:", assignmentId); const qrCodeNumber = routeId || "2256"; - console.log("QR Code Number:", qrCodeNumber); const [appName, setAppName] = useState(""); const [code, setCode] = useState("# NOW LOADING"); + const [isSaving, setIsSaving] = useState(false); useEffect(() => { document.title = "Snake Brain Editor"; }, []); useEffect(() => { - fetch(`https://assignment-service.fly.dev/student/assignment/${qrCodeNumber}`) + fetch(`${ASSIGNMENT_BASE}/student/assignment/${qrCodeNumber}`) .then((res) => { if (!res.ok) throw new Error("Failed to fetch assignment"); return res.json(); @@ -29,7 +29,7 @@ export default function PageCodeEditor() { useEffect(() => { if (!appName) return; - fetch(`https://assignment-service.fly.dev/notebook/${appName}`) + fetch(`${ASSIGNMENT_BASE}/notebook/${appName}`) .then((res) => { if (!res.ok) throw new Error("Failed to fetch notebook"); return res.json(); @@ -44,6 +44,25 @@ export default function PageCodeEditor() { .catch((err) => console.error("Notebook fetch error:", err)); }, [appName]); + const handleSave = async () => { + if (isSaving) return; + setIsSaving(true); + try { + const res = await fetch(`${ASSIGNMENT_BASE}/student/save`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ appName, code }) + }); + if (!res.ok) throw new Error("Save failed"); + alert("Notebook saved"); + } catch (err) { + console.error("Save error:", err); + alert(`Save error: ${err.message}`); + } finally { + setIsSaving(false); + } + }; + return (
{/* Python Editor */} @@ -66,7 +85,7 @@ export default function PageCodeEditor() { padding: "1rem", color: "#eee", minHeight: "80vh", - overflow: "auto", + overflow: "auto" }} >

🐍 Snake Brain (Python) @@ -83,6 +102,8 @@ export default function PageCodeEditor() {