From 915db8bbef39cae1694d99c34fa54f0fc9d62b18 Mon Sep 17 00:00:00 2001 From: myselfaryan Date: Wed, 4 Dec 2024 07:56:29 +0530 Subject: [PATCH] Fixed the resizable panel for test cases and result --- components/code-editor.tsx | 216 ++++++++++++++++++++++++------------- 1 file changed, 141 insertions(+), 75 deletions(-) diff --git a/components/code-editor.tsx b/components/code-editor.tsx index f93b404..2f456f9 100644 --- a/components/code-editor.tsx +++ b/components/code-editor.tsx @@ -64,14 +64,24 @@ const extensions = { }; export function CodeEditor() { - const [code, setCode] = useState(""); + // Editor state - manages the current code content + const [code, setCode] = useState(() => defaultCode["cpp"]); + + // Language state - controls the programming language selection const [language, setLanguage] = useState<"javascript" | "python" | "cpp">( "cpp", ); + + // Theme state - manages the editor's visual theme const [theme, setTheme] = useState("VS Code Dark"); + + // UI state - controls fullscreen mode const [isFullscreen, setIsFullscreen] = useState(false); + + // Execution state - manages code running status and output const [output, setOutput] = useState(""); const [isRunning, setIsRunning] = useState(false); + const [executionError, setExecutionError] = useState(null); const languageVersions = { javascript: "18.15.0", @@ -85,9 +95,36 @@ export function CodeEditor() { cpp: "cpp", }; + // Handle language change with state updates + const handleLanguageChange = ( + newLanguage: "javascript" | "python" | "cpp", + ) => { + try { + console.log(`Changing language to: ${newLanguage}`); + setLanguage(newLanguage); + // Reset code to default for new language + setCode(defaultCode[newLanguage]); + } catch (error) { + console.error("Error changing language:", error); + } + }; + + // Handle theme change with state updates + const handleThemeChange = (newTheme: keyof typeof themes) => { + try { + console.log(`Changing theme to: ${newTheme}`); + setTheme(newTheme); + } catch (error) { + console.error("Error changing theme:", error); + } + }; + const runCode = async () => { + console.log("Starting code execution..."); setIsRunning(true); setOutput(""); + setExecutionError(null); + try { const response = await fetch("/api/code", { method: "POST", @@ -116,6 +153,8 @@ export function CodeEditor() { }); const result = await response.json(); + console.log("Code execution result:", result); + if (result.run?.output) { setOutput(result.run.output); } else if (result.compile?.output) { @@ -123,22 +162,35 @@ export function CodeEditor() { } else if (result.message) { setOutput(result.message); } else if (result.error) { - setOutput(result.error); + const errorMsg = `Execution Error: ${result.error}`; + console.error(errorMsg); + setExecutionError(errorMsg); + setOutput(errorMsg); } } catch (error) { - setOutput("Error executing code: " + (error as Error).message); + const errorMsg = `Runtime Error: ${(error as Error).message}`; + console.error("Code execution failed:", error); + setExecutionError(errorMsg); + setOutput(errorMsg); } finally { setIsRunning(false); + console.log("Code execution completed"); } }; const toggleFullscreen = () => { - if (!document.fullscreenElement) { - document.documentElement.requestFullscreen(); - setIsFullscreen(true); - } else { - document.exitFullscreen(); - setIsFullscreen(false); + try { + if (!document.fullscreenElement) { + console.log("Entering fullscreen mode"); + document.documentElement.requestFullscreen(); + setIsFullscreen(true); + } else { + console.log("Exiting fullscreen mode"); + document.exitFullscreen(); + setIsFullscreen(false); + } + } catch (error) { + console.error("Fullscreen toggle failed:", error); } }; @@ -171,12 +223,7 @@ export function CodeEditor() {
- @@ -186,12 +233,7 @@ export function CodeEditor() { C++ - @@ -231,67 +273,91 @@ export function CodeEditor() {
-
- setCode(value)} - className="h-full" - /> -
-
-
-
-
-

- Test Cases -

-
-
-
-
-
- - Case 1 - + + +
+ setCode(value)} + className="h-full" + /> +
+
+ + + + +
+
+

+ Test Cases +

-
-
- x = - 121 +
+
+
+
+ + Case 1 + +
+
+
+ + x ={" "} + + 121 +
+
+
+
+
+
+ + Case 2 + +
+
+
+ + x ={" "} + + -121 +
+
-
-
-
- - Case 2 - + + + +
+
+

+ Test Results +

-
-
- x = - -121 -
+
+ {executionError ? ( +
{output}
+ ) : ( +
+ {output || + "Run your code to see the test results..."} +
+ )}
-
-
-
-
-

- Test Results -

-
-
- {output || "Run your code to see the test results..."} -
-
-
-
+ + + +