import { ResizableDialog, ResizableDialogContent, ResizableDialogHeader, ResizableDialogTitle, ResizableDialogDescription, ResizableDialogFooter, } from "@/components/ui/resizable-dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Camera, X } from "lucide-react"; import { ProfileFormData } from "@/types/profile"; // 알림 모달 컴포넌트 interface AlertModalProps { isOpen: boolean; onClose: () => void; title: string; message: string; type?: "success" | "error" | "info"; } function AlertModal({ isOpen, onClose, title, message, type = "info" }: AlertModalProps) { const getTypeColor = () => { switch (type) { case "success": return "text-green-600"; case "error": return "text-destructive"; default: return "text-primary"; } }; return ( {title} {message} 확인 ); } interface ProfileModalProps { isOpen: boolean; user: any; formData: ProfileFormData; selectedImage: string; isSaving: boolean; departments: Array<{ deptCode: string; deptName: string; }>; alertModal: { isOpen: boolean; title: string; message: string; type: "success" | "error" | "info"; }; onClose: () => void; onFormChange: (field: keyof ProfileFormData, value: string) => void; onImageSelect: (event: React.ChangeEvent) => void; onImageRemove: () => void; onSave: () => void; onAlertClose: () => void; } /** * 프로필 수정 모달 컴포넌트 */ export function ProfileModal({ isOpen, user, formData, selectedImage, isSaving, departments, alertModal, onClose, onFormChange, onImageSelect, onImageRemove, onSave, onAlertClose, }: ProfileModalProps) { return ( <> 프로필 수정 {/* 프로필 사진 섹션 */} {selectedImage && selectedImage.trim() !== "" ? ( ) : ( {formData.userName?.substring(0, 1)?.toUpperCase() || "U"} )} {selectedImage && selectedImage.trim() !== "" ? ( ) : null} document.getElementById("profile-image-input")?.click()} className="flex items-center gap-2" > 사진 선택 {/* 사용자 정보 폼 */} 사용자 ID 이름 onFormChange("userName", e.target.value)} placeholder="이름을 입력하세요" /> 이메일 onFormChange("email", e.target.value)} placeholder="이메일을 입력하세요" /> 부서 onFormChange("deptName", value)}> {Array.isArray(departments) && departments.length > 0 ? ( departments.map((department) => ( {department.deptName} )) ) : ( 부서 정보가 없습니다 )} 직급 onFormChange("positionName", e.target.value)} placeholder="직급을 입력하세요" /> 지역 onFormChange("locale", value)}> 한국어 (KR) English (US) 日本語 (JP) 中文 (CN) 취소 {isSaving ? "저장 중..." : "저장"} {/* 알림 모달 */} > ); }
{message}