@@ -5,13 +5,15 @@ interface DraftListOverlayProps {
55 onLoadDraft : ( draft : DraftListItem ) => void ;
66 onDeleteDraft ?: ( draftId : string , source : 'local' | 'cloud' ) => void ;
77 mode : 'load' | 'delete' ;
8+ currentDraftId ?: string | null ;
89}
910
1011const DraftListOverlay = ( {
1112 drafts,
1213 onLoadDraft,
1314 onDeleteDraft,
1415 mode,
16+ currentDraftId,
1517} : DraftListOverlayProps ) => {
1618 const formatDate = ( date : Date ) => {
1719 return new Date ( date ) . toLocaleDateString ( 'ko-KR' , {
@@ -50,51 +52,68 @@ const DraftListOverlay = ({
5052 </ p >
5153 ) : (
5254 < div className = "space-y-3" >
53- { drafts . map ( ( draft ) => (
54- < div
55- key = { draft . id }
56- onClick = { ( ) => handleItemClick ( draft ) }
57- className = { `
58- border rounded-lg p-4 transition-all
59- ${ mode === 'load' ? 'cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-700' : '' }
60- ${ draft . source === 'local' ? 'border-blue-300' : 'border-green-300' }
61- ` }
62- >
63- < div className = "flex justify-between items-start" >
64- < div className = "flex-1" >
65- < h3 className = "font-semibold text-default" >
66- { draft . title || '제목 없음' }
67- </ h3 >
68- < div className = "flex items-center gap-2 mt-1" >
69- < span className = "text-xs text-gray-500" >
70- { formatDate ( draft . date ) }
71- </ span >
72- < span
73- className = { `
74- text-xs px-2 py-1 rounded
75- ${
76- draft . source === 'local'
77- ? 'bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-200'
78- : 'bg-green-100 text-green-700 dark:bg-green-900 dark:text-green-200'
79- }
80- ` }
81- >
82- { draft . source === 'local' ? '로컬' : '클라우드' }
83- </ span >
55+ { drafts . map ( ( draft ) => {
56+ const isCurrentDraft =
57+ draft . source === 'cloud' && draft . id === currentDraftId ;
58+
59+ return (
60+ < div
61+ key = { draft . id }
62+ onClick = { ( ) => ! isCurrentDraft && handleItemClick ( draft ) }
63+ className = { `
64+ border rounded-lg p-4 transition-all
65+ ${ draft . source === 'local' ? 'border-blue-300' : 'border-green-300' }
66+ ${ isCurrentDraft
67+ ? 'opacity-50 cursor-not-allowed'
68+ : mode === 'load'
69+ ? 'cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-700'
70+ : ''
71+ }
72+ ` }
73+ >
74+ < div className = "flex justify-between items-start" >
75+ < div className = "flex-1" >
76+ < div className = "flex items-center gap-2" >
77+ < h3 className = "font-semibold text-default" >
78+ { draft . title || '제목 없음' }
79+ </ h3 >
80+ { isCurrentDraft && (
81+ < span className = "text-xs px-2 py-1 rounded bg-yellow-100 text-yellow-700 dark:bg-yellow-900 dark:text-yellow-200 font-semibold" >
82+ 작성 중
83+ </ span >
84+ ) }
85+ </ div >
86+ < div className = "flex items-center gap-2 mt-1" >
87+ < span className = "text-xs text-gray-500" >
88+ { formatDate ( draft . date ) }
89+ </ span >
90+ < span
91+ className = { `
92+ text-xs px-2 py-1 rounded
93+ ${
94+ draft . source === 'local'
95+ ? 'bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-200'
96+ : 'bg-green-100 text-green-700 dark:bg-green-900 dark:text-green-200'
97+ }
98+ ` }
99+ >
100+ { draft . source === 'local' ? '로컬' : '클라우드' }
101+ </ span >
102+ </ div >
84103 </ div >
85- </ div >
86104
87- { mode === 'delete' && onDeleteDraft && (
88- < button
89- onClick = { ( e ) => handleDelete ( draft , e ) }
90- className = "ml-4 px-3 py-1 bg-red-500 text-white rounded hover:bg-red-600 transition-colors"
91- >
92- 삭제
93- </ button >
94- ) }
105+ { mode === 'delete' && onDeleteDraft && (
106+ < button
107+ onClick = { ( e ) => handleDelete ( draft , e ) }
108+ className = "ml-4 px-3 py-1 bg-red-500 text-white rounded hover:bg-red-600 transition-colors"
109+ >
110+ 삭제
111+ </ button >
112+ ) }
113+ </ div >
95114 </ div >
96- </ div >
97- ) ) }
115+ ) ;
116+ } ) }
98117 </ div >
99118 ) }
100119 </ div >
0 commit comments