Skip to content

Commit dd4b841

Browse files
author
Mridul Dhiman
committed
feat: implemented persistence to localStorage in try-editor
1 parent b14f1db commit dd4b841

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

src/components/editor/MonacoEditor.jsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { useCallback, useEffect, useState } from "react";
99
export function snakeCase(fname) {
1010
return fname.toLowerCase().replace(/[_() ]/g, "-");
1111
}
12-
export default function MonacoEditor({ theme, readOnly = false }) {
12+
export default function MonacoEditor({ theme, readOnly = false, shard = false, template }) {
1313
const { sandpack } = useSandpack();
1414
const { files, activeFile, updateCurrentFile } = sandpack;
1515
const monaco = useMonaco();
@@ -42,6 +42,16 @@ export default function MonacoEditor({ theme, readOnly = false }) {
4242
const handleMount = useCallback((node) => {
4343
// console.log(monaco)
4444
setEditor(node);
45+
46+
node.onDidChangeModelContent(() => {
47+
if(!shard) {
48+
// save the files to local storage if user is not authenticated
49+
const filesToSave = {...files};
50+
filesToSave[activeFile] = node.getValue();
51+
console.log("filesToSave", filesToSave);
52+
localStorage.setItem(`try-editor-${template}`, JSON.stringify(filesToSave));
53+
}
54+
});
4555
});
4656

4757
const jsTypes = ["js", "jsx"];

src/components/editor/SandpackEditor.jsx

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import ReactMarkdown from "react-markdown";
3232
export default function SandpackEditor({
3333
id,
3434
shardDetails: initialShardDetails,
35+
shard = false,
3536
template = "react",
3637
room = false,
3738
readOnly = false,
@@ -57,6 +58,20 @@ export default function SandpackEditor({
5758
setDependencies(dep);
5859
setDevDependencies(devDep);
5960
setShardDetails(data);
61+
} else if(localStorage.getItem(`try-editor-${template}`)) {
62+
const data = JSON.parse(localStorage.getItem(`try-editor-${template}`));
63+
console.log("data", data);
64+
const finalData = {
65+
files: {},
66+
dependencies: {},
67+
devDependencies: {},
68+
};
69+
70+
finalData.files = data ?? {};
71+
setFiles(finalData.files ?? {});
72+
setDependencies(finalData.dependencies ?? {});
73+
setDevDependencies(data.devDependencies ?? {});
74+
setShardDetails(finalData);
6075
} else {
6176
setFiles({});
6277
setShardDetails(null);
@@ -141,7 +156,7 @@ export default function SandpackEditor({
141156
/>
142157
}
143158

144-
<MonacoEditor theme={theme} readOnly={readOnly} />
159+
<MonacoEditor theme={theme} readOnly={readOnly} shard={shard} template={template} />
145160
<SandpackPreview
146161
showOpenInCodeSandbox={false}
147162
showOpenNewtab={true}

0 commit comments

Comments
 (0)