diff --git a/src/pages/EditorComponent.js b/src/pages/EditorComponent.js index 777d0e9..23b41f6 100644 --- a/src/pages/EditorComponent.js +++ b/src/pages/EditorComponent.js @@ -133,8 +133,39 @@ function EditorComponent() { DEFAULT_LANGUAGE: selectedLanguage.DEFAULT_LANGUAGE, NAME: selectedLanguage.NAME, }); - setCode(selectedLanguage.HELLO_WORLD); - }, [currentLanguage]); + let savedCode = null; + try { + savedCode = localStorage.getItem(`code-${selectedLanguage.DEFAULT_LANGUAGE}`); + } catch (e) { + enqueueSnackbar("Failed to load saved code. Local storage might be unavailable.", { variant: "error" }); + console.error("Local storage load error:", e); + } + + if (savedCode !== null) { + setCode(savedCode); + } else { + setCode(selectedLanguage.HELLO_WORLD); + } }, [currentLanguage, enqueueSnackbar]); + + useEffect(() => { + if (isImportingRef.current) return; + + const handler = setTimeout(() => { + try { + if (code) { + localStorage.setItem(`code-${currentLanguage}`, code); + } else { + localStorage.removeItem(`code-${currentLanguage}`); + } + } catch (e) { + enqueueSnackbar("Failed to save code automatically. Local storage might be full or unavailable.", { variant: "error" }); + console.error("Local storage save error:", e); + } }, 500); // 500ms debounce + + return () => { + clearTimeout(handler); + }; + }, [code, currentLanguage, enqueueSnackbar]); const handleEditorThemeChange = async (_, theme) => { if (["light", "vs-dark"].includes(theme.ID)) {