Skip document save on tab switch when content is unchanged

This commit is contained in:
Jacob Schmidt 2026-02-28 16:00:00 -06:00
parent 3a4fe86e20
commit cde37b814d

View File

@ -72,6 +72,7 @@
"entries/daily-notes": "entries/daily-notes":
"# Daily Notes\n\nStart writing today's entry...", "# Daily Notes\n\nStart writing today's entry...",
}; };
let savedDocumentContent: Record<string, string> = { ...openDocuments };
let modalOpen = false; let modalOpen = false;
let modalTitle = ""; let modalTitle = "";
let modalMessage = ""; let modalMessage = "";
@ -335,6 +336,7 @@
if (!activeDocumentId) return; if (!activeDocumentId) return;
const content = openDocuments[activeDocumentId]; const content = openDocuments[activeDocumentId];
if (!content?.trim()) return; if (!content?.trim()) return;
if (savedDocumentContent[activeDocumentId] === content) return;
try { try {
if ( if (
@ -357,6 +359,8 @@
); );
const { [activeDocumentId]: _, ...rest } = openDocuments; const { [activeDocumentId]: _, ...rest } = openDocuments;
openDocuments = rest; openDocuments = rest;
const { [activeDocumentId]: __, ...savedRest } = savedDocumentContent;
savedDocumentContent = savedRest;
activeDocumentId = ""; activeDocumentId = "";
activeDocumentLabel = ""; activeDocumentLabel = "";
editMode = false; editMode = false;
@ -371,6 +375,10 @@
content, content,
filePath, filePath,
}); });
savedDocumentContent = {
...savedDocumentContent,
[activeDocumentId]: content,
};
templateRefreshToken += 1; templateRefreshToken += 1;
} else if ( } else if (
selectedSection === "entries" && selectedSection === "entries" &&
@ -385,8 +393,18 @@
if (saved && saved.id !== activeDocumentId) { if (saved && saved.id !== activeDocumentId) {
const { [activeDocumentId]: _, ...rest } = openDocuments; const { [activeDocumentId]: _, ...rest } = openDocuments;
openDocuments = { ...rest, [saved.id]: saved.initialContent }; openDocuments = { ...rest, [saved.id]: saved.initialContent };
const { [activeDocumentId]: __, ...savedRest } = savedDocumentContent;
savedDocumentContent = {
...savedRest,
[saved.id]: saved.initialContent,
};
activeDocumentId = saved.id; activeDocumentId = saved.id;
activeDocumentLabel = saved.label; activeDocumentLabel = saved.label;
} else {
savedDocumentContent = {
...savedDocumentContent,
[activeDocumentId]: content,
};
} }
} else if ( } else if (
selectedSection === "lists" && selectedSection === "lists" &&
@ -394,6 +412,10 @@
!activeDocumentId.startsWith("lists/draft-") !activeDocumentId.startsWith("lists/draft-")
) { ) {
await updateListByStoreId(activeDocumentId, undefined, content); await updateListByStoreId(activeDocumentId, undefined, content);
savedDocumentContent = {
...savedDocumentContent,
[activeDocumentId]: content,
};
} }
} catch { } catch {
// best-effort save // best-effort save
@ -496,6 +518,11 @@
[resolvedDoc.id]: resolvedDoc.initialContent, [resolvedDoc.id]: resolvedDoc.initialContent,
}; };
} }
savedDocumentContent = {
...savedDocumentContent,
[resolvedDoc.id]:
openDocuments[resolvedDoc.id] ?? resolvedDoc.initialContent,
};
activeDocumentId = resolvedDoc.id; activeDocumentId = resolvedDoc.id;
activeDocumentLabel = resolvedDoc.label; activeDocumentLabel = resolvedDoc.label;
} }
@ -523,6 +550,8 @@
function handleDeleteDocument(id: string) { function handleDeleteDocument(id: string) {
const { [id]: _, ...remaining } = openDocuments; const { [id]: _, ...remaining } = openDocuments;
openDocuments = remaining; openDocuments = remaining;
const { [id]: __, ...savedRemaining } = savedDocumentContent;
savedDocumentContent = savedRemaining;
} }
async function performDelete(id: string) { async function performDelete(id: string) {