From 547c5ffecba1a0b8f1fc1ab36f78c31910d1bf65 Mon Sep 17 00:00:00 2001 From: sepehr Date: Sat, 2 May 2026 20:28:03 +0200 Subject: [PATCH] fix: stop triggerRefresh() after note creation to prevent stale cache overwrite in production In production (Docker/Next.js standalone), getAllNotes() can return cached results when called immediately after createNote(skipRevalidation:true). This caused newly created notes to disappear after the cache reload overwrote the optimistic local state. Fix: remove triggerRefresh() from both handleCreateNote (NotesTabsView) and handleNoteCreated (HomeClient). The note is already added optimistically to local state and does not need a server round-trip. --- memento-note/components/home-client.tsx | 6 ++++-- memento-note/components/notes-tabs-view.tsx | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/memento-note/components/home-client.tsx b/memento-note/components/home-client.tsx index e9de50a..3f8d7cd 100644 --- a/memento-note/components/home-client.tsx +++ b/memento-note/components/home-client.tsx @@ -123,7 +123,9 @@ export function HomeClient({ initialNotes, initialSettings }: HomeClientProps) { } }) - triggerRefresh() + // NOTE: No triggerRefresh() — note is added optimistically above. + // triggerRefresh() → getAllNotes() can return stale Next.js cache (note + // created with skipRevalidation:true) and overwrite the freshly-added note. if (!note.notebookId) { const wordCount = (note.content || '').trim().split(/\s+/).filter(w => w.length > 0).length @@ -131,7 +133,7 @@ export function HomeClient({ initialNotes, initialSettings }: HomeClientProps) { setNotebookSuggestion({ noteId: note.id, content: note.content || '' }) } } - }, [searchParams, labels, router, triggerRefresh]) + }, [searchParams, labels, router]) const handleOpenNote = (noteId: string) => { const note = notes.find(n => n.id === noteId) diff --git a/memento-note/components/notes-tabs-view.tsx b/memento-note/components/notes-tabs-view.tsx index 4e94d3a..8cae071 100644 --- a/memento-note/components/notes-tabs-view.tsx +++ b/memento-note/components/notes-tabs-view.tsx @@ -760,7 +760,7 @@ export function NotesTabsView({ startCreating(async () => { try { const newNote = await createNote({ - content: noteType === 'checklist' ? '' : '', + content: '', type: noteType, checkItems: noteType === 'checklist' ? [{ id: Date.now().toString(), text: '', checked: false }] : undefined, title: undefined, @@ -775,7 +775,9 @@ export function NotesTabsView({ }) setSelectedId(newNote.id) onNoteCreated?.(newNote) - triggerRefresh() + // NOTE: No triggerRefresh() here — the note is already added to items above. + // triggerRefresh() would call getAllNotes() which may return stale cache + // in production (skipRevalidation:true skips cache invalidation). } catch { toast.error(t('notes.createFailed') || 'Impossible de créer la note') }