fix(editor): clean up editor on note removal

This commit is contained in:
SiriusXT 2025-11-20 15:32:13 +08:00
parent 3ee8e7b755
commit 9004b724e7
3 changed files with 30 additions and 0 deletions

View File

@ -165,9 +165,20 @@ export function CodeEditor({ parentComponent, ntxId, containerRef: externalConta
useTriliumEvent("executeWithCodeEditor", async ({ resolve, ntxId: eventNtxId }) => {
if (eventNtxId !== ntxId) return;
await initialized.current.promise();
if (!codeEditorRef.current) return;
resolve(codeEditorRef.current!);
});
useTriliumEvent("noteContextRemoved", async ({ ntxIds: eventNtxIds }) => {
if (!ntxId || !eventNtxIds.includes(ntxId)) return;
const cm = codeEditorRef.current;
if (cm) {
cm.destroy();
codeEditorRef.current = null;
}
});
useTriliumEvent("executeWithContentElement", async ({ resolve, ntxId: eventNtxId}) => {
if (eventNtxId !== ntxId) return;
await initialized.current.promise();

View File

@ -179,6 +179,16 @@ export default function EditableText({ note, parentComponent, ntxId, noteContext
resolve(editor);
});
useTriliumEvent("noteContextRemoved", async ({ ntxIds: eventNtxIds }) => {
if (!ntxId || !eventNtxIds.includes(ntxId)) return;
const watchdog = watchdogRef.current;
if (!watchdog) return;
await watchdog.destroy();
watchdogRef.current = null;
});
async function waitForEditor() {
await initialized.current;
const editor = watchdogRef.current?.editor;

View File

@ -50,6 +50,15 @@ export default function ReadOnlyText({ note, noteContext, ntxId }: TypeWidgetPro
resolve($(contentRef.current));
});
useTriliumEvent("noteContextRemoved", ({ ntxIds: eventNtxIds }) => {
if (!ntxId || !eventNtxIds.includes(ntxId)) return;
if (contentRef.current) {
contentRef.current.innerHTML = "";
}
contentRef.current = null;
});
return (
<div
className={`note-detail-readonly-text note-detail-printable ${codeBlockWordWrap ? "word-wrap" : ""}`}