Skip to content

Commit ec0e855

Browse files
authored
Merge pull request #210 from Incharajayaram/main
feat: Implement automatic code saving and loading to local storage
2 parents 7c11a43 + fcfcce7 commit ec0e855

File tree

1 file changed

+33
-2
lines changed

1 file changed

+33
-2
lines changed

src/pages/EditorComponent.js

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,39 @@ function EditorComponent() {
133133
DEFAULT_LANGUAGE: selectedLanguage.DEFAULT_LANGUAGE,
134134
NAME: selectedLanguage.NAME,
135135
});
136-
setCode(selectedLanguage.HELLO_WORLD);
137-
}, [currentLanguage]);
136+
let savedCode = null;
137+
try {
138+
savedCode = localStorage.getItem(`code-${selectedLanguage.DEFAULT_LANGUAGE}`);
139+
} catch (e) {
140+
enqueueSnackbar("Failed to load saved code. Local storage might be unavailable.", { variant: "error" });
141+
console.error("Local storage load error:", e);
142+
}
143+
144+
if (savedCode !== null) {
145+
setCode(savedCode);
146+
} else {
147+
setCode(selectedLanguage.HELLO_WORLD);
148+
} }, [currentLanguage, enqueueSnackbar]);
149+
150+
useEffect(() => {
151+
if (isImportingRef.current) return;
152+
153+
const handler = setTimeout(() => {
154+
try {
155+
if (code) {
156+
localStorage.setItem(`code-${currentLanguage}`, code);
157+
} else {
158+
localStorage.removeItem(`code-${currentLanguage}`);
159+
}
160+
} catch (e) {
161+
enqueueSnackbar("Failed to save code automatically. Local storage might be full or unavailable.", { variant: "error" });
162+
console.error("Local storage save error:", e);
163+
} }, 500); // 500ms debounce
164+
165+
return () => {
166+
clearTimeout(handler);
167+
};
168+
}, [code, currentLanguage, enqueueSnackbar]);
138169

139170
const handleEditorThemeChange = async (_, theme) => {
140171
if (["light", "vs-dark"].includes(theme.ID)) {

0 commit comments

Comments
 (0)