"use client"; import { useState, useEffect } from "react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from "@/components/ui/alert-dialog"; import { Trash2 } from "lucide-react"; interface YardPlacement { id: number; external_material_id: string; material_code: string; material_name: string; quantity: number; unit: string; position_x: number; position_y: number; position_z: number; size_x: number; size_y: number; size_z: number; color: string; memo?: string; } interface MaterialEditPanelProps { placement: YardPlacement | null; onClose: () => void; onUpdate: (id: number, updates: Partial) => void; onRemove: (id: number) => void; } export default function MaterialEditPanel({ placement, onClose, onUpdate, onRemove }: MaterialEditPanelProps) { const [editData, setEditData] = useState>({}); const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false); // placement 변경 시 editData 초기화 useEffect(() => { if (placement) { setEditData({ position_x: placement.position_x, position_y: placement.position_y, position_z: placement.position_z, size_x: placement.size_x, size_y: placement.size_y, size_z: placement.size_z, color: placement.color, memo: placement.memo, }); } }, [placement]); if (!placement) return null; // 변경사항 적용 const handleApply = () => { onUpdate(placement.id, editData); }; // 배치 해제 const handleRemove = () => { onRemove(placement.id); setIsDeleteDialogOpen(false); }; return (

자재 정보

{/* 읽기 전용 정보 */}
자재 정보 (읽기 전용)
자재 코드
{placement.material_code}
자재 이름
{placement.material_name}
수량
{placement.quantity} {placement.unit}
{/* 배치 정보 (편집 가능) */}
배치 정보 (편집 가능)
{/* 3D 위치 */}
setEditData({ ...editData, position_x: parseFloat(e.target.value) || 0 })} step="0.5" className="h-8 text-xs" />
setEditData({ ...editData, position_y: parseFloat(e.target.value) || 0 })} step="0.5" className="h-8 text-xs" />
setEditData({ ...editData, position_z: parseFloat(e.target.value) || 0 })} step="0.5" className="h-8 text-xs" />
{/* 3D 크기 */}
setEditData({ ...editData, size_x: parseFloat(e.target.value) || 1 })} min="1" step="0.5" className="h-8 text-xs" />
setEditData({ ...editData, size_y: parseFloat(e.target.value) || 1 })} min="1" step="0.5" className="h-8 text-xs" />
setEditData({ ...editData, size_z: parseFloat(e.target.value) || 1 })} min="1" step="0.5" className="h-8 text-xs" />
{/* 색상 */}
setEditData({ ...editData, color: e.target.value })} className="h-8 w-16 cursor-pointer rounded border" /> setEditData({ ...editData, color: e.target.value })} className="h-8 flex-1 text-xs" />
{/* 메모 */}