diff --git a/src/renderer/inbox/components/MoveStatusModal.tsx b/src/renderer/inbox/components/MoveStatusModal.tsx new file mode 100644 index 0000000..9ac14f6 --- /dev/null +++ b/src/renderer/inbox/components/MoveStatusModal.tsx @@ -0,0 +1,141 @@ +import React, { useState } from 'react'; +import { inboxApi } from '../api.js'; +import type { NoteStatus } from '@shared/types'; + +interface Props { + noteId: string; + rawText: string; + summary: string; + initialTarget: NoteStatus; + onClose: () => void; + onMoved: (status: NoteStatus, reason: string | null) => void; +} + +/** + * v0.2.9 Cut B Task 7 — 메모 이동 Modal. + * + * 사유 입력 + 4 status 버튼 (활성/완료/보관/휴지통) + AI 자동 분류 placeholder. + * AI 분류는 Task 9 에서 정식 구현 — 본 task 는 stub IPC (`ai:classify-status`) + * 호출 path 만 working state. 추천 결과는 화면 표시 + 확정 버튼 두 단계. + */ +export function MoveStatusModal({ + noteId, + initialTarget: _initialTarget, + onClose, + onMoved +}: Props): React.ReactElement { + const [reason, setReason] = useState(''); + const [recommendation, setRecommendation] = useState<{ + status: NoteStatus; + rationale: string; + } | null>(null); + const [classifying, setClassifying] = useState(false); + + async function move(status: NoteStatus): Promise { + const trimmedReason = reason.trim() === '' ? null : reason.trim(); + await inboxApi.setStatus(noteId, status, trimmedReason); + onMoved(status, trimmedReason); + } + + async function classify(): Promise { + setClassifying(true); + setRecommendation(null); + try { + const r = await inboxApi.classifyStatus(noteId, reason); + setRecommendation({ status: r.recommended, rationale: r.rationale }); + } finally { + setClassifying(false); + } + } + + return ( +
+
+

메모 이동

+