From e520b637fd8d0f6331674003abe72f9dfbae8231 Mon Sep 17 00:00:00 2001 From: memoclaw <265580040+memoclaw@users.noreply.github.com> Date: Mon, 30 Mar 2026 22:37:07 +0800 Subject: [PATCH] fix: prevent stale comment drafts from being restored --- .../MemoEditor/services/cacheService.ts | 40 +++++++++++++++---- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/web/src/components/MemoEditor/services/cacheService.ts b/web/src/components/MemoEditor/services/cacheService.ts index bc311952e..5c93e3b4f 100644 --- a/web/src/components/MemoEditor/services/cacheService.ts +++ b/web/src/components/MemoEditor/services/cacheService.ts @@ -1,25 +1,49 @@ -import { debounce } from "lodash-es"; - export const CACHE_DEBOUNCE_DELAY = 500; +const pendingSaves = new Map>(); + export const cacheService = { key: (username: string, cacheKey?: string): string => { return `${username}-${cacheKey || ""}`; }, - save: debounce((key: string, content: string) => { - if (content.trim()) { - localStorage.setItem(key, content); - } else { - localStorage.removeItem(key); + save: (key: string, content: string) => { + const pendingSave = pendingSaves.get(key); + if (pendingSave) { + window.clearTimeout(pendingSave); } - }, CACHE_DEBOUNCE_DELAY), + + const timeoutId = window.setTimeout(() => { + pendingSaves.delete(key); + + if (content.trim()) { + localStorage.setItem(key, content); + } else { + localStorage.removeItem(key); + } + }, CACHE_DEBOUNCE_DELAY); + + pendingSaves.set(key, timeoutId); + }, load(key: string): string { return localStorage.getItem(key) || ""; }, clear(key: string): void { + const pendingSave = pendingSaves.get(key); + if (pendingSave) { + window.clearTimeout(pendingSave); + pendingSaves.delete(key); + } + localStorage.removeItem(key); }, + + clearAll(): void { + for (const timeoutId of pendingSaves.values()) { + window.clearTimeout(timeoutId); + } + pendingSaves.clear(); + }, };