"use client"; import { setSelectedApplication } from "@/store/features/userSlice"; import { useRouter } from "next/navigation"; import { useDispatch } from "react-redux"; import { URL_MEDIA } from "../../../api"; import { statusConfig } from "@/service/handler"; const formatFullDateTime = (dateString: string) => { const date = new Date(dateString); const time = date.toLocaleTimeString("vi-VN", { hour: "2-digit", minute: "2-digit", }); const day = date.toLocaleDateString("vi-VN", { day: "2-digit", month: "2-digit", year: "numeric", }); return `${time} ${day}`; }; const processMedia = (mediaArray: any[]) => { if (!mediaArray || mediaArray.length === 0) return { type: "empty" }; const imageFiles = mediaArray.filter((file) => { const isImageMime = file.mime_type?.startsWith("image/"); const isImageExt = /\.(jpg|jpeg|png|webp|gif)$/i.test(file.storage_key); return isImageMime || isImageExt; }); const docFiles = mediaArray.filter((file) => { const isImage = file.mime_type?.startsWith("image/") || /\.(jpg|jpeg|png|webp|gif)$/i.test(file.storage_key); return !isImage; }); if (imageFiles.length > 0) return { type: "image", src: `${URL_MEDIA}${imageFiles[0].storage_key}` }; if (docFiles.length > 0) { const extensions = docFiles.map((file) => file.mime_type ? file.mime_type.split("/")[1] : file.storage_key.split(".").pop() || "file", ); return { type: "documents", extensions }; } return { type: "empty" }; }; export default function ApplicationList({ applications, }: { applications: any[]; }) { const router = useRouter(); const dispatch = useDispatch(); const handleViewDetail = (app: any) => { dispatch(setSelectedApplication(app)); router.push(`/account/applications`); }; const StatusIcons: Record = { APPROVED: ( ), PENDING: ( ), REJECTED: ( ), }; return (

Hồ sơ{" "} ({applications.length} tệp)

{/*
Cập nhật lần cuối: {new Date().toLocaleDateString("vi-VN")}
*/}
{/* CHỈ SỬA DÒNG NÀY: Tăng số lượng cột (grid-cols) để các thẻ nhỏ lại */}
{applications?.map((app) => { const mediaState = processMedia(app.media); const config = statusConfig[app.status] || statusConfig.PENDING; return (
handleViewDetail(app)} className="group relative flex aspect-square w-full cursor-pointer flex-col overflow-hidden rounded-xl border border-gray-200 bg-gray-50 transition-all duration-300 hover:ring-2 hover:ring-blue-500/50 dark:border-zinc-700 dark:bg-zinc-800" >
{mediaState.type === "image" ? ( ) : (
{mediaState.type === "documents" ? (
{mediaState.extensions?.slice(0, 3).map((ext, i) => ( .{ext} ))}
) : (
)}
)}
{app.media?.length > 0 ? ( {app.media.length} TỆP ) : (
)}
{StatusIcons[app.status] || StatusIcons.PENDING}

{app.verify_type || "VERIFY"}

{app?.reviewer?.display_name && (

Người duyệt: {app.reviewer.display_name}

)}

{formatFullDateTime(app.created_at)}

); })}
); }