From ff1a015226d92947b95be97248e8cd21dbc4a867 Mon Sep 17 00:00:00 2001 From: altair823 Date: Sat, 9 May 2026 20:47:51 +0900 Subject: [PATCH] =?UTF-8?q?feat(v0210):=20NoteCard=20=EC=9B=90=EB=AC=B8=20?= =?UTF-8?q?=EC=98=81=EC=97=AD=20=ED=8E=B8=EC=A7=91=20UI=20(textarea=20+=20?= =?UTF-8?q?=EC=A0=80=EC=9E=A5/=EC=B7=A8=EC=86=8C=20+=20updateRawText)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- src/renderer/inbox/components/NoteCard.tsx | 43 ++++++++++++++++++++-- tests/unit/NoteCard.test.tsx | 38 +++++++++++++++++-- 2 files changed, 75 insertions(+), 6 deletions(-) diff --git a/src/renderer/inbox/components/NoteCard.tsx b/src/renderer/inbox/components/NoteCard.tsx index 52934c4..193aa61 100644 --- a/src/renderer/inbox/components/NoteCard.tsx +++ b/src/renderer/inbox/components/NoteCard.tsx @@ -118,6 +118,9 @@ export function NoteCard({ note, onDeleted, onUpdated, mode = 'inbox', onRestore // v0.2.9 Cut B Task 6 — 이동 메뉴 dropdown + MoveStatusModal target. const [moveTarget, setMoveTarget] = useState(null); const [menuOpen, setMenuOpen] = useState(false); + const [editingRaw, setEditingRaw] = useState(false); + const [draftRaw, setDraftRaw] = useState(''); + const [showRevisions, setShowRevisions] = useState(false); const possibleTargets: NoteStatus[] = ( ['active', 'completed', 'archived', 'trashed'] as NoteStatus[] @@ -150,6 +153,17 @@ export function NoteCard({ note, onDeleted, onUpdated, mode = 'inbox', onRestore setLocal(updated); onUpdated(updated); } + async function saveRaw() { + const next = draftRaw; + if (next.trim().length === 0) return; + const r = await inboxApi.updateRawText(note.id, next); + if (!r.ok) return; + const updated = { ...local, rawText: next, updatedAt: new Date().toISOString() }; + setLocal(updated); + onUpdated(updated); + setEditingRaw(false); + } + async function removeTag(tagName: string) { const removed = local.tags.find((t) => t.name === tagName); const nextTagNames = local.tags.filter((t) => t.name !== tagName).map((t) => t.name); @@ -371,9 +385,32 @@ export function NoteCard({ note, onDeleted, onUpdated, mode = 'inbox', onRestore {rawOpen ? '▾ 원문 접기' : '▸ 원문 보기'} {rawOpen && ( -
-            {local.rawText}
-          
+
+ {editingRaw ? ( +
+