"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 { Loader2, Users } from "lucide-react"; import { toast } from "sonner"; import { assignPicToRfqs } from "../service"; import { Badge } from "@/components/ui/badge"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { PurchaseGroupCodeSingleSelector, PurchaseGroupCodeWithUser } from "@/components/common/selectors/purchase-group-code"; interface RfqAssignPicDialogProps { open: boolean; onOpenChange: (open: boolean) => void; selectedRfqIds: number[]; selectedRfqCodes: string[]; onSuccess?: () => void; } export function RfqAssignPicDialog({ open, onOpenChange, selectedRfqIds, selectedRfqCodes, onSuccess, }: RfqAssignPicDialogProps) { const [isAssigning, setIsAssigning] = React.useState(false); const [selectedCode, setSelectedCode] = React.useState(undefined); const [selectorOpen, setSelectorOpen] = React.useState(false); // 다이얼로그 열릴 때 초기화 React.useEffect(() => { if (open) { setSelectedCode(undefined); } }, [open]); const handleCodeSelect = (code: PurchaseGroupCodeWithUser) => { setSelectedCode(code); // 유저 정보가 없는 경우 toast로 알림 if (!code.user) { toast.warning( `해당 구매그룹코드(${code.PURCHASE_GROUP_CODE})의 사번 정보의 유저가 없습니다`, { description: `사번: ${code.EMPLOYEE_NUMBER}`, duration: 5000, } ); } }; const handleAssign = async () => { if (!selectedCode) { toast.error("구매그룹코드를 선택해주세요"); return; } if (!selectedCode.user) { toast.error("선택한 구매그룹코드에 연결된 사용자가 없습니다"); return; } if (selectedRfqIds.length === 0) { toast.error("담당자 지정이 가능한 ITB가 없습니다"); return; } setIsAssigning(true); try { const result = await assignPicToRfqs({ rfqIds: selectedRfqIds, picUserId: selectedCode.user.id, }); if (result.success) { toast.success(result.message); onSuccess?.(); onOpenChange(false); } else { toast.error(result.message); } } catch (error) { console.error("담당자 지정 오류:", error); toast.error("담당자 지정 중 오류가 발생했습니다"); } finally { setIsAssigning(false); } }; return ( 담당자 지정 선택한 ITB에 구매 담당자를 지정합니다
{/* 선택된 ITB 정보 */}
{selectedRfqCodes.length}건
{selectedRfqCodes.slice(0, 10).map((code, index) => ( {code} ))} {selectedRfqCodes.length > 10 && ( +{selectedRfqCodes.length - 10}개 )}
{selectedRfqCodes.length === 0 && ( 담당자 지정이 가능한 ITB가 없습니다. (상태가 "RFQ 생성" 또는 "구매담당지정"인 ITB만 가능) )}
{/* 구매 담당자 선택 (구매그룹코드) */}
{selectedCode && !selectedCode.user && ( 선택한 구매그룹코드에 연결된 사용자가 없습니다. 다른 구매그룹코드를 선택해주세요. )}
{/* 구매그룹코드 선택 다이얼로그 */}
); }