import React, { useEffect, useState } from "react"; import { useParams } from "react-router-dom"; import EditorPanel from "../components/EditorPanel"; import PreviewPanel from "../components/PreviewPanel"; const ASSIGNMENT_BASE = "http://localhost:8082"; export default function PageCodeEditor() { const { qrCodeNumber: routeId } = useParams(); const qrCodeNumber = routeId || "6656"; const [appName, setAppName] = useState(""); const [code, setCode] = useState("# NOW LOADING"); const [isSaving, setIsSaving] = useState(false); const [isDeploying, setIsDeploying] = useState(false); useEffect(() => { document.title = "Snake Brain Editor"; }, []); useEffect(() => { fetch(`${ASSIGNMENT_BASE}/student/assignment/${qrCodeNumber}`) .then((res) => { if (!res.ok) throw new Error("Failed to fetch assignment"); return res.json(); }) .then((data) => setAppName(data.appname)) .catch((err) => console.error("Assignment fetch error:", err)); }, [qrCodeNumber]); useEffect(() => { if (!appName) return; fetch(`${ASSIGNMENT_BASE}/notebook/${appName}`) .then((res) => { if (!res.ok) throw new Error("Failed to fetch notebook"); return res.json(); }) .then((notebook) => { const combined = notebook.cells .filter((cell) => cell.cell_type === "code") .map((cell) => cell.source.join("")) .join("\n\n"); setCode(combined); }) .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); } }; const handleDeploy = async () => { if (isDeploying) return; setIsDeploying(true); try { const res = await fetch(`${ASSIGNMENT_BASE}/student/restart`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ appName }) }); if (!res.ok) throw new Error("Restart failed"); alert("App restarted"); } catch (err) { console.error("Restart error:", err); alert(`Restart error: ${err.message}`); } finally { setIsDeploying(false); } }; return (
{/* Python Editor */}

🐍 Snake Brain (Python)

{/* Live Arena */}

🎯 Live Arena Output

Battlesnake Preview

); }