"use client";
import { FileText, CheckCircle2, XCircle, Loader2 } from "lucide-react";
import { Progress } from "@/components/ui/progress";
import { FileUploadProgress } from "../hooks/use-file-upload-with-progress";
interface FileUploadProgressListProps {
fileProgresses: FileUploadProgress[];
}
export function FileUploadProgressList({ fileProgresses }: FileUploadProgressListProps) {
if (fileProgresses.length === 0) {
return null;
}
return (
파일 업로드 진행 상황 ({fileProgresses.length}개)
{fileProgresses.map((fileProgress, index) => (
))}
);
}
interface FileUploadProgressItemProps {
fileProgress: FileUploadProgress;
}
function FileUploadProgressItem({ fileProgress }: FileUploadProgressItemProps) {
const { file, progress, status, error } = fileProgress;
const getStatusIcon = () => {
switch (status) {
case "completed":
return ;
case "error":
return ;
case "uploading":
return ;
default:
return ;
}
};
const getStatusColor = () => {
switch (status) {
case "completed":
return "border-green-200 bg-green-50/50";
case "error":
return "border-red-200 bg-red-50/50";
case "uploading":
return "border-primary/30 bg-primary/5";
default:
return "border-muted bg-muted/30";
}
};
return (
{getStatusIcon()}
{file.name}
{(file.size / 1024 / 1024).toFixed(2)} MB
{status !== "pending" && (
{status === "completed" ? (
완료
) : status === "error" ? (
실패
) : (
{Math.round(progress)}%
)}
)}
{/* Progress Bar */}
{status === "uploading" && (
)}
{/* 에러 메시지 */}
{status === "error" && error && (
{error}
)}
);
}