"use client"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { Check, X } from "lucide-react"; import { useState, useTransition } from "react"; import { Button, buttonVariants } from "@/components/ui/button"; import { REQUEST_STATUSES } from "@/lib/constants"; import type { ExtensionRequestListItem } from "@/lib/extension-requests"; import { formatDate, getAccountTypeLabel, getActivateStatusLabel, getRequestStatusLabel, } from "@/lib/utils"; type ExtensionRequestsTableProps = { data: ExtensionRequestListItem[]; }; export function ExtensionRequestsTable({ data }: ExtensionRequestsTableProps) { return (
신청ID마에스트로요청 계정현재 계정현재 상태신청일시만료일처리 상태처리 {data.length > 0 ? ( data.map((request) => ( {request.maestroExtensionID} {request.maestroName}

MaestroID {request.maestroID}

{getAccountTypeLabel(request.requestedAccountType)} {getAccountTypeLabel(request.currentAccountType)} {getActivateStatusLabel(request.activateStatus)} {formatDate(request.requestedDateTime)} {formatDate(request.availableActivateDateTime)} {getRequestStatusLabel(request.status)} )) ) : ( )}
조건에 맞는 연장 신청이 없습니다.
); } function ExtensionRequestActions({ request, }: { request: ExtensionRequestListItem; }) { const router = useRouter(); const [isPending, startTransition] = useTransition(); const [errorMessage, setErrorMessage] = useState(""); const isRequested = request.status === REQUEST_STATUSES.REQUESTED; if (!isRequested) { return 처리 완료; } async function submitAction(action: "approve" | "cancel") { const actionLabel = action === "approve" ? "승인" : "취소"; const confirmed = window.confirm( `${request.maestroName} 연장 신청을 ${actionLabel}하시겠습니까?` ); if (!confirmed) { return; } setErrorMessage(""); try { const response = await fetch( `/api/extension-requests/${request.maestroExtensionID}`, { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ action }), } ); if (!response.ok) { const body = (await response.json().catch(() => null)) as { message?: string; } | null; throw new Error(body?.message ?? "연장 신청 처리에 실패했습니다."); } startTransition(() => { router.refresh(); }); } catch (error) { setErrorMessage( error instanceof Error ? error.message : "연장 신청 처리에 실패했습니다." ); } } return (
{errorMessage ? (

{errorMessage}

) : null}
); } function HeaderCell({ children }: { children: React.ReactNode }) { return ( {children} ); } function BodyCell({ children }: { children: React.ReactNode }) { return {children}; }