'use client'; import { useTransition } from 'react'; import Link from 'next/link'; import { format } from 'date-fns'; import { capitalize } from 'lodash'; import { Eye } from 'lucide-react'; import { getResultSetName } from '@kit/doctor/lib/helpers'; import { ResponseTable } from '@kit/doctor/schema/doctor-analysis.schema'; import { pathsConfig } from '@kit/shared/config'; import { useCurrentLocaleLanguageNames } from '@kit/shared/hooks'; 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'; import DoctorJobSelect from './doctor-job-select'; 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 languageNames = useCurrentLocaleLanguageNames(); 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 (

.

); } return ( <> {results ?.sort((a, b) => (a.created_at ?? '') > (b.created_at ?? '') ? -1 : 1, ) .map((result) => { const isCompleted = result.feedback?.status === 'COMPLETED'; const isCurrentDoctorJob = !!result.doctor?.primary_owner_user_id && result.doctor?.primary_owner_user_id === currentUser?.id; const resultsReceived = result.elements.length || 0; const elementsInOrder = Array.from( new Set(result.analysis_order_id.analysis_element_ids), )?.length; return ( {getFullName( result.patient?.name, result.patient?.last_name, )} {result.order_number} {result.firstSampleGivenAt ? format(result.firstSampleGivenAt, 'dd.MM.yyyy HH:mm') : '-'} {capitalize( languageNames.of( result?.patient?.preferred_locale ?? 'et', ), )} ); })}
); }