Skip to content

Commit 8b65f49

Browse files
committed
fix: handle storage quota for uploaded files
1 parent eda1f71 commit 8b65f49

File tree

1 file changed

+28
-11
lines changed

1 file changed

+28
-11
lines changed

src/App.jsx

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -77,17 +77,34 @@ function App() {
7777

7878
useEffect(() => {
7979
if (savingDisabledRef.current) return;
80-
const serialized = uploadedFiles.map(({ id, name, enabled, content, config }) => ({
81-
id,
82-
name,
83-
enabled,
84-
content,
85-
config
86-
}));
87-
if (serialized.length > 0) {
88-
localStorage.setItem('uploadedFiles', JSON.stringify(serialized));
89-
} else {
90-
localStorage.removeItem('uploadedFiles');
80+
try {
81+
const serialized = uploadedFiles.map(({ id, name, enabled, content, config }) => ({
82+
id,
83+
name,
84+
enabled,
85+
content,
86+
config
87+
}));
88+
if (serialized.length > 0) {
89+
const json = JSON.stringify(serialized);
90+
// Avoid filling localStorage with very large files
91+
if (json.length > 5 * 1024 * 1024) {
92+
savingDisabledRef.current = true;
93+
console.warn('Uploaded files exceed storage limit; persistence disabled.');
94+
return;
95+
}
96+
localStorage.setItem('uploadedFiles', json);
97+
} else {
98+
localStorage.removeItem('uploadedFiles');
99+
}
100+
} catch (err) {
101+
if (err instanceof DOMException && err.name === 'QuotaExceededError') {
102+
savingDisabledRef.current = true;
103+
console.warn('LocalStorage quota exceeded; uploaded files will not be persisted.');
104+
localStorage.removeItem('uploadedFiles');
105+
} else {
106+
throw err;
107+
}
91108
}
92109
}, [uploadedFiles]);
93110

0 commit comments

Comments
 (0)