'use client'; import { useMemo, useState } from 'react'; import { useQueryClient } from '@tanstack/react-query'; import { capitalize } from 'lodash'; import { getDOBWithAgeStringFromPersonalCode, getResultSetName, } from '@kit/doctor/lib/helpers'; import { AnalysisResponse, DoctorFeedback, Order, Patient, } from '@kit/doctor/schema/doctor-analysis-detail-view.schema'; import { useCurrentLocaleLanguageNames } from '@kit/shared/hooks'; import { getFullName } from '@kit/shared/utils'; import { useUser } from '@kit/supabase/hooks/use-user'; import { Trans } from '@kit/ui/trans'; import { bmiFromMetric } from '~/lib/utils'; import AnalysisFeedback from './analysis-feedback'; import DoctorAnalysisWrapper from './doctor-analysis-wrapper'; import DoctorJobSelect from './doctor-job-select'; import DoctorRecommendedAnalyses from './doctor-recommended-analyses'; export default function AnalysisView({ patient, order, analyses, feedback, aiDoctorFeedback, recommendations, availableAnalyses, timestamp, }: { patient: Patient; order: Order; analyses: AnalysisResponse[]; feedback?: DoctorFeedback; aiDoctorFeedback?: string; recommendations?: string[]; availableAnalyses?: string[]; timestamp?: string; }) { const { data: user } = useUser(); const queryClient = useQueryClient(); const [recommendedAnalyses, setRecommendedAnalyses] = useState( recommendations ?? [], ); const isRecommendationsEdited = useMemo(() => { if (recommendedAnalyses.length !== recommendations?.length) return true; const sa = new Set(recommendedAnalyses), sb = new Set(recommendations); if (sa.size !== sb.size) return true; for (const v of sa) if (!sb.has(v)) return true; return false; }, [recommendations, recommendedAnalyses]); const languageNames = useCurrentLocaleLanguageNames(); const isInProgress = !!( !!feedback?.status && feedback?.doctor_user_id && feedback?.status !== 'COMPLETED' ); const isCurrentDoctorJob = !!feedback?.doctor_user_id && feedback?.doctor_user_id === user?.id; if (!patient || !order || !analyses) { return null; } return ( <>

queryClient.invalidateQueries({ predicate: (query) => query.queryKey.includes('doctor-jobs'), }) } />
{getFullName(patient.firstName, patient.lastName)}
{patient.personalCode ?? ''}
{getDOBWithAgeStringFromPersonalCode(patient.personalCode)}
{patient.height}
{patient.weight}
{patient?.weight && patient?.height ? bmiFromMetric(patient.weight, patient.height) : '-'}
-
{patient.phone}
{patient.email}
{capitalize(languageNames.of(patient.preferred_locale ?? 'et'))}
queryClient.invalidateQueries({ predicate: (query) => query.queryKey.includes('doctor-jobs'), }) } />

{analyses.map((analysisData) => { return ( ); })}
{order.isPackage && ( <>

{feedback?.value ?? '-'}

)} ); }