fix: update vault entries immediately after view create/delete

After saving a view, the .yml file wasn't appearing in the FOLDERS note
list until a full vault reload. Now we call reload_vault_entry to get a
fresh VaultEntry, add/update it in the entries state, and reload the
folder tree — making the file visible immediately in FOLDERS.

Same for delete: removeEntry + reloadFolders ensures the file disappears
from FOLDERS without requiring a vault reload.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
lucaronin
2026-04-04 11:19:44 +02:00
parent df8ed500ac
commit 7cd813eb31

View File

@@ -1,4 +1,5 @@
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
import type { VaultEntry } from './types'
import { Sidebar } from './components/Sidebar'
import { NoteList } from './components/NoteList'
import { Editor } from './components/Editor'
@@ -345,6 +346,13 @@ function App() {
await target('save_view_cmd', { vaultPath: resolvedPath, filename, definition })
trackEvent(editing ? 'view_updated' : 'view_created')
await vault.reloadViews()
// Update vault entries so the .yml file appears in FOLDERS immediately
const filePath = resolvedPath + '/views/' + filename
try {
const entry = await target<VaultEntry>('reload_vault_entry', { path: filePath })
if (editing) { vault.updateEntry(filePath, entry) } else { vault.addEntry(entry) }
} catch { /* non-critical — will appear after next vault reload */ }
vault.reloadFolders()
setToastMessage(editing ? `View "${definition.name}" updated` : `View "${definition.name}" created`)
handleSetSelection({ kind: 'view', filename })
}, [resolvedPath, vault, handleSetSelection, dialogs.editingView])
@@ -358,6 +366,9 @@ function App() {
const target = isTauri() ? invoke : mockInvoke
await target('delete_view_cmd', { vaultPath: resolvedPath, filename })
await vault.reloadViews()
// Remove the .yml file from vault entries so it disappears from FOLDERS immediately
vault.removeEntry(resolvedPath + '/views/' + filename)
vault.reloadFolders()
if (selection.kind === 'view' && selection.filename === filename) {
handleSetSelection({ kind: 'filter', filter: 'all' })
}