"use client"; import * as React from "react"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import { Label } from "@/components/ui/label"; import { AlertCircle, Users } from "lucide-react"; import { toast } from "sonner"; import { useRouter } from "next/navigation"; import { UserSelector, UserSelectItem } from "@/components/common/user/user-selector"; import { getOrCreateRedFlagManagers, updateRedFlagManagers } from "@/lib/compliance/services"; type ManagerDialogMode = "redflag" | "hse"; interface RedFlagManagersDialogProps { mode?: ManagerDialogMode; } export function RedFlagManagersDialog({ mode = "redflag" }: RedFlagManagersDialogProps) { const [open, setOpen] = React.useState(false); const [isLoading, setIsLoading] = React.useState(false); const [isFetching, setIsFetching] = React.useState(false); const router = useRouter(); // 담당자 state const [managerId, setManagerId] = React.useState(null); const [purchasingManager, setPurchasingManager] = React.useState([]); const [complianceManager, setComplianceManager] = React.useState([]); const [hseManager, setHseManager] = React.useState([]); // 다이얼로그 열릴 때 현재 담당자 정보 가져오기 React.useEffect(() => { if (open) { loadManagers(); } }, [open]); const loadManagers = async () => { setIsFetching(true); try { // eslint-disable-next-line @typescript-eslint/no-explicit-any const managers: any = await getOrCreateRedFlagManagers(); if (managers) { setManagerId(managers.id); // 구매기획 담당자 설정 if (managers.purchasingManager) { // eslint-disable-next-line @typescript-eslint/no-explicit-any const pm: any = managers.purchasingManager; setPurchasingManager([{ id: pm.id, name: pm.name, email: pm.email, epId: pm.epId, deptCode: pm.deptCode, deptName: pm.deptName, imageUrl: pm.imageUrl, domain: pm.domain, }]); } // 준법 담당자 설정 if (managers.complianceManager) { // eslint-disable-next-line @typescript-eslint/no-explicit-any const cm: any = managers.complianceManager; setComplianceManager([{ id: cm.id, name: cm.name, email: cm.email, epId: cm.epId, deptCode: cm.deptCode, deptName: cm.deptName, imageUrl: cm.imageUrl, domain: cm.domain, }]); } // 안전(HSE) 담당자 설정 if (managers.hseManager) { // eslint-disable-next-line @typescript-eslint/no-explicit-any const hm: any = managers.hseManager; setHseManager([{ id: hm.id, name: hm.name, email: hm.email, epId: hm.epId, deptCode: hm.deptCode, deptName: hm.deptName, imageUrl: hm.imageUrl, domain: hm.domain, }]); } } } catch (error) { console.error("Error loading red flag managers:", error); toast.error("담당자 정보를 불러오는 중 오류가 발생했습니다."); } finally { setIsFetching(false); } }; const handleSave = async () => { if (!managerId) { toast.error("담당자 정보를 불러오지 못했습니다."); return; } setIsLoading(true); try { const payload: { purchasingManagerId?: number | null; complianceManagerId?: number | null; hseManagerId?: number | null; } = {}; if (mode === "redflag") { payload.purchasingManagerId = purchasingManager[0]?.id || null; payload.complianceManagerId = complianceManager[0]?.id || null; } else if (mode === "hse") { payload.hseManagerId = hseManager[0]?.id || null; } await updateRedFlagManagers(managerId, payload); toast.success("담당자 설정이 저장되었습니다."); setOpen(false); router.refresh(); } catch (error) { console.error("Error saving red flag managers:", error); toast.error("담당자 저장 중 오류가 발생했습니다."); } finally { setIsLoading(false); } }; return ( {mode === "hse" ? "안전(HSE) 담당자 관리" : "레드플래그 담당자 관리"} {mode === "hse" ? "PQ 제출 및 안전 관련 알림을 받을 담당자를 지정합니다." : "레드플래그 발생 시 알림을 받을 담당자를 지정합니다."} {isFetching ? (
담당자 정보를 불러오는 중...
) : (
{mode === "redflag" && ( <> {/* 구매기획 담당자 */}

레드플래그 발생 시 알림을 받을 구매기획 담당자를 지정합니다.

{/* 준법 담당자 */}

레드플래그 발생 시 알림을 받을 준법 담당자를 지정합니다.

)} {mode === "hse" && (

PQ 제출 및 안전 관련 알림을 받을 담당자를 지정합니다.

)}
)}
); }