"use client" import { useState } from "react" import { format } from "date-fns" import { ko } from "date-fns/locale" import { Calendar as CalendarIcon, Clock, Edit2 } from "lucide-react" import { Button } from "@/components/ui/button" import { Calendar } from "@/components/ui/calendar" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog" import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover" import { cn } from "@/lib/utils" import { useToast } from "@/hooks/use-toast" import { useRouter } from "next/navigation" import { updateRfqDueDate } from "./service" interface DueDateEditButtonProps { rfqId: number currentDueDate: Date | string | null rfqCode: string rfqTitle: string } export function DueDateEditButton({ rfqId, currentDueDate, rfqCode, rfqTitle }: DueDateEditButtonProps) { const [open, setOpen] = useState(false) const [date, setDate] = useState( currentDueDate ? new Date(currentDueDate) : undefined ) const [time, setTime] = useState( currentDueDate ? format(new Date(currentDueDate), "HH:mm") : "17:00" // 기본값: 오후 5시 ) const [isLoading, setIsLoading] = useState(false) const { toast } = useToast() const router = useRouter() const handleSave = async () => { if (!date) { toast({ title: "오류", description: "마감일을 선택해주세요.", variant: "destructive", }) return } setIsLoading(true) try { // 날짜와 시간 결합 const [hours, minutes] = time.split(':').map(Number) const dateTime = new Date( date.getFullYear(), date.getMonth(), date.getDate(), hours, minutes, 0, 0 ) // ISO 문자열로 전송 (자동으로 로컬 타임존 포함) const result = await updateRfqDueDate( rfqId, dateTime.toISOString(), rfqCode, rfqTitle ) if (result.success) { toast({ title: "성공", description: result.message, }) setOpen(false) router.refresh() } else { toast({ title: "오류", description: result.message, variant: "destructive", }) } } catch (error) { toast({ title: "오류", description: "마감일 수정 중 오류가 발생했습니다.", variant: "destructive", }) } finally { setIsLoading(false) } } return ( 마감일 수정 {rfqCode} {rfqTitle ? `- ${rfqTitle}` : ''}의 마감일을 수정합니다. 변경 시 관련 업체에 이메일이 발송됩니다.
{/* 날짜 선택 */}
date < new Date(new Date().setHours(0, 0, 0, 0))} />
{/* 시간 선택 */}
setTime(e.target.value)} className="flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm" />
{/* 현재 마감일시 표시 */} {currentDueDate && (
현재 마감일시: {format(new Date(currentDueDate), "yyyy년 MM월 dd일 HH:mm", { locale: ko })}
)} {/* 선택한 날짜시간 미리보기 */} {date && (

선택한 마감일시:

{format(date, "yyyy년 MM월 dd일", { locale: ko })} {time}

)}
) }