"use client"; import { useState } from "react"; import { Button } from "@/components/ui/button"; import { ResizableDialog, ResizableDialogContent, ResizableDialogHeader, ResizableDialogTitle, ResizableDialogDescription, ResizableDialogFooter, } from "@/components/ui/resizable-dialog"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Loader2 } from "lucide-react"; interface TempMaterial { id: number; material_code: string; material_name: string; category: string; unit: string; default_color: string; description: string; } interface MaterialAddModalProps { isOpen: boolean; material: TempMaterial | null; onClose: () => void; onAdd: (placementData: any) => Promise; } export default function MaterialAddModal({ isOpen, material, onClose, onAdd }: MaterialAddModalProps) { const [quantity, setQuantity] = useState("1"); const [positionX, setPositionX] = useState("0"); const [positionY, setPositionY] = useState("0"); const [positionZ, setPositionZ] = useState("0"); const [sizeX, setSizeX] = useState("5"); const [sizeY, setSizeY] = useState("5"); const [sizeZ, setSizeZ] = useState("5"); const [color, setColor] = useState(""); const [isAdding, setIsAdding] = useState(false); // 모달이 열릴 때 기본값 설정 const handleOpen = (open: boolean) => { if (open && material) { setColor(material.default_color); setQuantity("1"); setPositionX("0"); setPositionY("0"); setPositionZ("0"); setSizeX("5"); setSizeY("5"); setSizeZ("5"); } }; // 자재 추가 const handleAdd = async () => { if (!material) return; setIsAdding(true); try { await onAdd({ external_material_id: `TEMP-${Date.now()}`, material_code: material.material_code, material_name: material.material_name, quantity: parseInt(quantity) || 1, unit: material.unit, position_x: parseFloat(positionX) || 0, position_y: parseFloat(positionY) || 0, position_z: parseFloat(positionZ) || 0, size_x: parseFloat(sizeX) || 5, size_y: parseFloat(sizeY) || 5, size_z: parseFloat(sizeZ) || 5, color: color || material.default_color, }); onClose(); } catch (error) { console.error("자재 추가 실패:", error); } finally { setIsAdding(false); } }; if (!material) return null; return ( { handleOpen(open); if (!open) onClose(); }} > 자재 배치 설정
{/* 자재 정보 */}
선택한 자재
{material.material_name}
{material.material_code}
{/* 수량 */}
setQuantity(e.target.value)} min="1" className="flex-1" /> {material.unit}
{/* 3D 위치 */}
setPositionX(e.target.value)} step="0.5" />
setPositionY(e.target.value)} step="0.5" />
setPositionZ(e.target.value)} step="0.5" />
{/* 3D 크기 */}
setSizeX(e.target.value)} min="1" step="0.5" />
setSizeY(e.target.value)} min="1" step="0.5" />
setSizeZ(e.target.value)} min="1" step="0.5" />
{/* 색상 */}
setColor(e.target.value)} className="h-10 w-20 cursor-pointer rounded border" /> setColor(e.target.value)} className="flex-1" />
); }