'use client'; import { useTransition } from 'react'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; import { format } from 'date-fns'; import { Eye, LoaderCircle } from 'lucide-react'; import { selectJobAction, unselectJobAction, } from '@kit/doctor/actions/doctor-server-actions'; import { getResultSetName } from '@kit/doctor/lib/helpers'; import { ResponseTable } from '@kit/doctor/schema/doctor-analysis.schema'; import { pathsConfig } from '@kit/shared/config'; import { getFullName } from '@kit/shared/utils'; import { useUser } from '@kit/supabase/hooks/use-user'; import { Button } from '@kit/ui/button'; import { toast } from '@kit/ui/sonner'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@kit/ui/table'; import { Trans } from '@kit/ui/trans'; function DoctorCell({ doctorUserId, doctorName, analysisOrderId, userId, isRemovable, onJobUpdate, linkTo, }: { doctorUserId?: string; doctorName?: string; analysisOrderId: number; userId: string; isRemovable?: boolean; linkTo: string; onJobUpdate: () => void; }) { const [isPending, startTransition] = useTransition(); const router = useRouter(); const handleSelectJob = () => { startTransition(async () => { const result = await selectJobAction({ analysisOrderId, userId, }); if (result?.success) { onJobUpdate(); router.push(linkTo); } else { toast.error('common.genericServerError'); } }); }; const handleUnselectJob = () => { startTransition(async () => { const result = await unselectJobAction({ analysisOrderId, }); if (result?.success) { onJobUpdate(); } else { toast.error('common.genericServerError'); } }); }; if (isRemovable) { return ( ); } if (!doctorUserId) { return ( ); } return <>{doctorName}>; } export default function ResultsTable({ results = [], pagination = { currentPage: 1, totalPages: 1, totalCount: 0, pageSize: 10, }, fetchAction, onJobUpdate, }: { results: ResponseTable[] | null; pagination?: { currentPage: number; totalPages: number; totalCount: number; pageSize: number; }; fetchAction: ({ page, pageSize, }: { page: number; pageSize: number; }) => Promise<{ success: boolean; data: null; }>; onJobUpdate: () => void; }) { const [isPending, startTransition] = useTransition(); const { data: currentUser } = useUser(); const fetchPage = async (page: number) => { startTransition(async () => { const result = await fetchAction({ page, pageSize: pagination.pageSize, }); if (!result.success) { toast.error('common.genericServerError'); } }); }; const handleNextPage = () => { if (pagination.currentPage < pagination.totalPages) { fetchPage(pagination.currentPage + 1); } }; const handlePrevPage = () => { if (pagination.currentPage > 1) { fetchPage(pagination.currentPage - 1); } }; const handleJobUpdate = () => { onJobUpdate(); fetchPage(pagination.currentPage); }; if (!results?.length) { return (