import { useState } from "react"; import { CompanyModalState, CompanyFormData } from "@/types/company"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "@/components/ui/dialog"; import { LoadingSpinner } from "@/components/common/LoadingSpinner"; interface CompanyFormModalProps { modalState: CompanyModalState; isLoading: boolean; error: string | null; onClose: () => void; onSave: () => Promise; onFormChange: (field: keyof CompanyFormData, value: string) => void; onClearError: () => void; } /** * 회사 등록/수정 모달 컴포넌트 */ export function CompanyFormModal({ modalState, isLoading, error, onClose, onSave, onFormChange, onClearError, }: CompanyFormModalProps) { const [isSaving, setIsSaving] = useState(false); // 모달이 열려있지 않으면 렌더링하지 않음 if (!modalState.isOpen) return null; const { mode, formData, selectedCompany } = modalState; const isEditMode = mode === "edit"; // 저장 처리 const handleSave = async () => { // 입력값 검증 if (!formData.company_name.trim()) { return; } setIsSaving(true); onClearError(); try { const success = await onSave(); if (success) { // 성공 시 모달 닫기 onClose(); } } catch (err) { // 에러는 부모 컴포넌트에서 처리 } finally { setIsSaving(false); } }; // 취소 처리 const handleCancel = () => { onClearError(); onClose(); }; // Enter 키 처리 const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === "Enter" && !isLoading && !isSaving) { e.preventDefault(); handleSave(); } }; return ( {isEditMode ? "회사 정보 수정" : "새 회사 등록"}
{/* 회사명 입력 */}
onFormChange("company_name", e.target.value)} placeholder="회사명을 입력하세요" disabled={isLoading || isSaving} className={error ? "border-destructive" : ""} autoFocus />
{/* 에러 메시지 */} {error && (

{error}

)} {/* 수정 모드일 때 추가 정보 표시 */} {isEditMode && modalState.selectedCompany && (

회사 코드: {modalState.selectedCompany.company_code}

등록자: {modalState.selectedCompany.writer}

등록일:{" "} {new Date(modalState.selectedCompany.regdate).toLocaleDateString("ko-KR")}

)}
); }