"use client"; import { Clock4Icon, CpuIcon } from "lucide-react"; import { formatSubmissionDate } from "@/config/locale"; import { useLocale, useTranslations } from "next-intl"; import { Locale, Submission } from "@/generated/client"; import { Actions, DockLocation } from "flexlayout-react"; import { getColorClassForStatus } from "@/config/status"; import { TableCell, TableRow } from "@/components/ui/table"; import { useProblemFlexLayoutStore } from "@/stores/flexlayout"; import { usePathname, useRouter, useSearchParams } from "next/navigation"; import { getIconForLanguage, getLabelForLanguage } from "@/config/language"; const formatUsage = (value: number | null, unit: "ms" | "MB") => { if (value === null) return "N/A"; return unit === "MB" ? `${(value / 1024 / 1024).toFixed(2)} MB` : `${value} ms`; }; interface SubmissionTableRowProps { submission: Submission; index: number; total: number; } export const SubmissionTableRow = ({ submission, index, total, }: SubmissionTableRowProps) => { const router = useRouter(); const pathname = usePathname(); const searchParams = useSearchParams(); const locale = useLocale() as Locale; const s = useTranslations("StatusMessage"); const { model } = useProblemFlexLayoutStore(); const createdAt = new Date(submission.createdAt); const Icon = getIconForLanguage(submission.language); const label = getLabelForLanguage(submission.language); const colorClass = getColorClassForStatus(submission.status); const submittedDisplay = formatSubmissionDate(createdAt, locale); const handleClick = () => { const params = new URLSearchParams(searchParams.toString()); params.set("submissionId", submission.id.toString()); router.push(`${pathname}?${params.toString()}`); if (!model) return; const detailTab = model.getNodeById("detail"); if (detailTab) { model.doAction(Actions.selectTab("detail")); } else { model.doAction( Actions.addNode( { type: "tab", id: "detail", name: "Details", component: "detail", }, "1", DockLocation.CENTER, -1 ) ); } }; return ( {total - index}
{s(submission.status)} {submittedDisplay}
); };