import { useState, useEffect } from 'react'; import { createPortal } from 'react-dom'; import { X, Save, User, Calendar } from 'lucide-react'; import { NoteItem } from '@/types'; import { comms } from '@/communication'; interface NoteEditModalProps { isOpen: boolean; editingItem: NoteItem | null; processing: boolean; onClose: () => void; onSave: (formData: { pdate: string; title: string; uid: string; description: string; share: boolean; guid: string; }) => void; initialEditMode?: boolean; } export function NoteEditModal({ isOpen, editingItem, processing, onClose, onSave, }: NoteEditModalProps) { const [pdate, setPdate] = useState(''); const [title, setTitle] = useState(''); const [uid, setUid] = useState(''); const [description, setDescription] = useState(''); const [share, setShare] = useState(false); const [guid, setGuid] = useState(''); // 현재 로그인 사용자 정보 로드 const [currentUserId, setCurrentUserId] = useState(''); const [currentUserLevel, setCurrentUserLevel] = useState(0); useEffect(() => { const loadUserInfo = async () => { try { const loginStatus = await comms.checkLoginStatus(); if (loginStatus.Success && loginStatus.IsLoggedIn && loginStatus.User) { setCurrentUserId(loginStatus.User.Id); setCurrentUserLevel(loginStatus.User.Level); } } catch (error) { console.error('로그인 정보 로드 오류:', error); } }; loadUserInfo(); }, []); // 모달이 열릴 때 폼 데이터 초기화 useEffect(() => { if (isOpen) { if (editingItem) { // 기존 메모 setPdate(editingItem.pdate ? editingItem.pdate.split('T')[0] : ''); setTitle(editingItem.title || ''); setUid(editingItem.uid || currentUserId); setDescription(editingItem.description || ''); setShare(editingItem.share || false); setGuid(editingItem.guid || ''); } else { // 신규 메모 setPdate(new Date().toISOString().split('T')[0]); setTitle(''); setUid(currentUserId); setDescription(''); setShare(false); setGuid(''); } } }, [isOpen, editingItem, currentUserId]); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); onSave({ pdate, title, uid, description, share, guid }); }; if (!isOpen) return null; // 권한 체크: 자신의 메모이거나 관리자만 수정 가능 const canEdit = !editingItem || editingItem.uid === currentUserId || currentUserLevel >= 5; const canChangeUser = currentUserLevel >= 5; const canChangeShare = !editingItem || editingItem.uid === currentUserId; return createPortal(
{/* 헤더 */}

{!editingItem ? '새 메모 작성' : '메모 편집'}

{/* 본문 - 좌우 레이아웃 */}
{/* 좌측 - 정보 영역 */}
{/* 날짜 */}
setPdate(e.target.value)} required disabled={!canEdit} className="w-full h-10 bg-white/20 border border-white/30 rounded-lg px-3 text-white text-sm focus:outline-none focus:ring-2 focus:ring-primary-400 disabled:opacity-50 disabled:cursor-not-allowed" />
{/* 작성자 */}
setUid(e.target.value)} required disabled={!canEdit || !canChangeUser} className="w-full h-10 bg-white/20 border border-white/30 rounded-lg px-3 text-white text-sm focus:outline-none focus:ring-2 focus:ring-primary-400 disabled:opacity-50 disabled:cursor-not-allowed" placeholder="사용자 ID" /> {!canChangeUser && (

관리자만 변경 가능

)}
{/* 공유 여부 */}
setShare(e.target.checked)} disabled={!canEdit || !canChangeShare} className="w-4 h-4 bg-white/20 border border-white/30 rounded focus:ring-2 focus:ring-primary-400 disabled:opacity-50 disabled:cursor-not-allowed" />
{!canChangeShare && (

본인 메모만 변경 가능

)}
{!canEdit && (
타인의 자료는 수정할 수 없습니다.
)}
{/* 우측 - 제목 및 내용 영역 */}
{/* 제목 */}
setTitle(e.target.value)} required disabled={!canEdit} className="w-full h-10 bg-white/20 border border-white/30 rounded-lg px-3 text-white focus:outline-none focus:ring-2 focus:ring-primary-400 disabled:opacity-50 disabled:cursor-not-allowed" placeholder="메모 제목을 입력하세요" />
{/* 내용 */}