From 6bf284c192c60b33ed0548e456866884dedc2669 Mon Sep 17 00:00:00 2001 From: _Kerman Date: Mon, 12 Feb 2024 19:18:21 +0800 Subject: [PATCH] fix: slide note sync (#1157) (#1287) --- packages/client/logic/note.ts | 4 ++++ packages/slidev/node/plugins/loaders.ts | 21 ++++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/packages/client/logic/note.ts b/packages/client/logic/note.ts index b5538a1a29..f5caaa8ee9 100644 --- a/packages/client/logic/note.ts +++ b/packages/client/logic/note.ts @@ -40,6 +40,10 @@ export function useSlideInfo(id: number | undefined): UseSlideInfo { if (payload.id === id) info.value = payload.data }) + import.meta.hot?.on('slidev-update-note', (payload) => { + if (payload.id === id && info.value.note.trim() !== payload.note.trim()) + info.value = { ...info.value, ...payload } + }) } return { diff --git a/packages/slidev/node/plugins/loaders.ts b/packages/slidev/node/plugins/loaders.ts index 65c61f5052..ceaf37539b 100644 --- a/packages/slidev/node/plugins/loaders.ts +++ b/packages/slidev/node/plugins/loaders.ts @@ -115,7 +115,11 @@ export function createSlidesLoader( if (type === 'json' && req.method === 'POST') { const body = await getBodyJson(req) const slide = data.slides[idx] - hmrPages.add(idx) + + const onlyNoteChanged = Object.keys(body).length === 2 + && 'note' in body && body.raw === null + if (!onlyNoteChanged) + hmrPages.add(idx) if (slide.source) { Object.assign(slide.source, body) @@ -173,7 +177,6 @@ export function createSlidesLoader( if ( a?.content.trim() === b?.content.trim() && a?.title?.trim() === b?.title?.trim() - && a?.note === b?.note && equal(a.frontmatter, b.frontmatter) && Object.entries(a.snippetsUsed ?? {}).every(([file, oldContent]) => { try { @@ -184,8 +187,20 @@ export function createSlidesLoader( return false } }) - ) + ) { + if (a?.note !== b?.note) { + ctx.server.ws.send({ + type: 'custom', + event: 'slidev-update-note', + data: { + id: i, + note: b!.note || '', + noteHTML: md.render(b!.note || ''), + }, + }) + } continue + } ctx.server.ws.send({ type: 'custom',