-
+
+
diff --git a/src/renderer/src/views/Editor.vue b/src/renderer/src/views/Editor.vue
index 5666a71..90e60f0 100644
--- a/src/renderer/src/views/Editor.vue
+++ b/src/renderer/src/views/Editor.vue
@@ -35,9 +35,9 @@ import { useRoute } from 'vue-router'
import _debounce from 'lodash/debounce'
const route = useRoute()
-const filePath = `/${route.params.id}.md`
+const id = route.params.id
-const { readNote, updateNote } = useNotes()
+const { loadNote, updateNoteContent, updateNoteMetadata } = useNotes()
const CustomDocument = Document.extend({
content: 'heading block*',
@@ -45,13 +45,33 @@ const CustomDocument = Document.extend({
const editor = shallowRef()
-const updateFile = _debounce(({ editor }) => {
+const updateNote = _debounce(async ({ editor }) => {
const markdown = editor.getMarkdown()
- updateNote(filePath, markdown)
+
+ await updateNoteContent(id, markdown)
+
+ updateTitle(editor)
+}, 300)
+
+// Track title updates for file
+let lastTitle
+const updateTitle = _debounce(async (editor) => {
+ const doc = editor.state.doc
+
+ const firstNode = doc.firstChild
+ if (!firstNode || firstNode.type.name !== 'heading') return
+
+ const newTitle = firstNode.textContent.trim() || 'Untitled'
+
+ if (newTitle === lastTitle) return
+ lastTitle = newTitle
+
+ await updateNoteMetadata(id, { title: newTitle })
}, 300)
onMounted(async () => {
- const noteFile = await readNote(filePath)
+ const note = await loadNote(id)
+ lastTitle = note.title
editor.value = new Editor({
extensions: [
@@ -73,9 +93,9 @@ onMounted(async () => {
Markdown,
Image,
],
- content: noteFile,
+ content: note.content,
contentType: 'markdown',
- onUpdate: updateFile,
+ onUpdate: updateNote,
})
})
onBeforeUnmount(() => {