From 35c79ffd1c1708d7ad63b3f244fa19690f991efe Mon Sep 17 00:00:00 2001 From: Antigravity Date: Sat, 20 Jun 2026 16:28:54 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20Outline=20se=20met=20=C3=A0=20jour=20en?= =?UTF-8?q?=20temps=20r=C3=A9el=20quand=20les=20titres=20changent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ajout d'un listener editor.on('update') dans OutlineView. Avant: le sommaire était figé au moment de l'insertion. Maintenant: il se recalcule à chaque ajout/modif/suppression de titre. --- memento-note/components/tiptap-outline-extension.tsx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/memento-note/components/tiptap-outline-extension.tsx b/memento-note/components/tiptap-outline-extension.tsx index 6ba297f..8603a2c 100644 --- a/memento-note/components/tiptap-outline-extension.tsx +++ b/memento-note/components/tiptap-outline-extension.tsx @@ -1,5 +1,6 @@ 'use client' +import { useState, useEffect, useRef } from 'react' import { Node, mergeAttributes } from '@tiptap/core' import { ReactNodeViewRenderer, NodeViewWrapper } from '@tiptap/react' import { List, X } from 'lucide-react' @@ -37,7 +38,14 @@ function collectHeadings(editor: Editor): HeadingEntry[] { const OutlineView = ({ editor, deleteNode }: any) => { const { t } = useLanguage() - const headings = collectHeadings(editor as Editor) + const [headings, setHeadings] = useState(() => collectHeadings(editor as Editor)) + + // Re-collect headings when the editor content changes + useEffect(() => { + const update = () => setHeadings(collectHeadings(editor as Editor)) + editor.on('update', update) + return () => { editor.off('update', update) } + }, [editor]) const scrollToHeading = (pos: number) => { const docSize = editor.state.doc.content.size