"use client" import * as React from "react" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Checkbox } from "@/components/ui/checkbox" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { DisciplineHardcodedSelector } from "@/components/common/discipline-hardcoded/discipline-hardcoded-selector" import { MaterialGroupSelectorDialogSingle } from "@/components/common/material/material-group-selector-dialog-single" import { VendorTierSelector } from "@/components/common/selectors/vendor-tier/vendor-tier-selector" import type { MaterialSearchItem } from "@/lib/material/material-group-service" interface BulkInsertDialogProps { open: boolean onOpenChange: (open: boolean) => void onSubmit: (data: Record) => void } export function BulkInsertDialog({ open, onOpenChange, onSubmit }: BulkInsertDialogProps) { const [formData, setFormData] = React.useState>({ constructionSector: "", discipline: "", equipBulkDivision: "", materialGroupCode: "", materialGroupName: "", similarMaterialNamePurchase: "", faTarget: null, tier: "", }) // 자재그룹 선택 상태 관리 (UI 표시용) const [selectedMaterial, setSelectedMaterial] = React.useState(null) const handleSubmit = (e: React.FormEvent) => { e.preventDefault() // 빈 값이나 기본값은 제외하고 실제 변경할 값만 전달 const filteredData: Record = {} Object.entries(formData).forEach(([key, value]) => { if (value !== "" && value !== null && value !== undefined) { filteredData[key] = value } }) if (Object.keys(filteredData).length === 0) { return } onSubmit(filteredData) handleReset() } const handleReset = () => { setFormData({ constructionSector: "", discipline: "", equipBulkDivision: "", materialGroupCode: "", materialGroupName: "", similarMaterialNamePurchase: "", faTarget: null, tier: "", }) setSelectedMaterial(null) } const handleCancel = () => { handleReset() onOpenChange(false) } // 자재그룹 선택 핸들러 const handleMaterialSelect = (material: MaterialSearchItem | null) => { setSelectedMaterial(material) if (material) { setFormData(prev => ({ ...prev, materialGroupCode: material.materialGroupCode, materialGroupName: material.materialGroupDescription })) } else { setFormData(prev => ({ ...prev, materialGroupCode: "", materialGroupName: "" })) } } return ( 일괄 입력 선택된 행들에 동일한 값을 입력합니다. 빈 칸은 변경하지 않습니다.
{/* 공사부문 */}
{/* 설계공종 */}
setFormData(prev => ({ ...prev, discipline: value }))} placeholder="설계공종 선택" />
{/* Equip/Bulk 구분 */}
{/* 등급 */}
setFormData(prev => ({ ...prev, tier: value }))} placeholder="등급 선택" />
{/* 자재그룹 - 전체 너비 사용 */}
{/* 유사자재명(구매) */}
setFormData(prev => ({ ...prev, similarMaterialNamePurchase: e.target.value }))} placeholder="유사자재명 입력" />
{/* FA대상 */}
setFormData(prev => ({ ...prev, faTarget: checked ? true : null }))} />
) }