'use client'; import React, { ReactElement, ReactNode, useMemo, useState } from 'react'; import { UserAnalysisElement } from '@/packages/features/accounts/src/types/accounts'; import { format } from 'date-fns'; import { Info } from 'lucide-react'; import { Trans } from '@kit/ui/trans'; import { cn } from '@kit/ui/utils'; import { AnalysisElement } from '~/lib/services/analysis-element.service'; import AnalysisLevelBar, { AnalysisLevelBarSkeleton, AnalysisResultLevel, } from './analysis-level-bar'; export type AnalysisResultForDisplay = Pick< UserAnalysisElement, | 'norm_status' | 'response_value' | 'unit' | 'norm_lower_included' | 'norm_upper_included' | 'norm_lower' | 'norm_upper' | 'response_time' >; export enum AnalysisStatus { NORMAL = 0, MEDIUM = 1, HIGH = 2, } const AnalysisDoctor = ({ analysisElement, results, startIcon, endIcon, isCancelled, }: { analysisElement: Pick; results?: AnalysisResultForDisplay; isCancelled?: boolean; startIcon?: ReactElement | null; endIcon?: ReactNode | null; }) => { const name = analysisElement.analysis_name_lab || ''; const status = results?.norm_status || AnalysisStatus.NORMAL; const value = results?.response_value || 0; const unit = results?.unit || ''; const normLowerIncluded = results?.norm_lower_included || false; const normUpperIncluded = results?.norm_upper_included || false; const normLower = results?.norm_lower || 0; const normUpper = results?.norm_upper || 0; const [showTooltip, setShowTooltip] = useState(false); const analysisResultLevel = useMemo(() => { if (!results) { return null; } const isUnderNorm = value < normLower; if (isUnderNorm) { switch (status) { case AnalysisStatus.MEDIUM: return AnalysisResultLevel.LOW; default: return AnalysisResultLevel.VERY_LOW; } } switch (status) { case AnalysisStatus.MEDIUM: return AnalysisResultLevel.HIGH; case AnalysisStatus.HIGH: return AnalysisResultLevel.VERY_HIGH; default: return AnalysisResultLevel.NORMAL; } }, [results, value, normLower]); return (
{startIcon ||
} {name} {results?.response_time && (
{ e.stopPropagation(); setShowTooltip(!showTooltip); }} onMouseLeave={() => setShowTooltip(false)} > {' '}
)}
{results ? ( <>
{value}
{unit}
{normLower} - {normUpper}
{endIcon ||
} ) : (isCancelled ? null : ( <>
))}
); }; export default AnalysisDoctor;