import Link from 'next/link'; import { createI18nServerInstance } from '@/lib/i18n/i18n.server'; import { withI18n } from '@/lib/i18n/with-i18n'; import { Trans } from '@kit/ui/makerkit/trans'; import { PageBody } from '@kit/ui/page'; import { Button } from '@kit/ui/shadcn/button'; import { loadUserAnalysis } from '../../_lib/server/load-user-analysis'; import Analysis from './_components/analysis'; import pathsConfig from '~/config/paths.config'; import { redirect } from 'next/navigation'; import { AnalysisOrder, getAnalysisOrders } from '~/lib/services/order.service'; import { getAnalysisElements } from '~/lib/services/analysis-element.service'; import { loadCurrentUserAccount } from '@/app/home/(user)/_lib/server/load-user-account'; import { createPageViewLog } from '~/lib/services/audit/pageView.service'; import { ButtonTooltip } from '~/components/ui/button-tooltip'; export const generateMetadata = async () => { const i18n = await createI18nServerInstance(); const title = i18n.t('analysis-results:pageTitle'); return { title, }; }; async function AnalysisResultsPage() { const account = await loadCurrentUserAccount() if (!account) { throw new Error('Account not found'); } const analysisResponses = await loadUserAnalysis(); const analysisResponseElements = analysisResponses?.flatMap(({ elements }) => elements); const analysisOrders = await getAnalysisOrders().catch(() => null); if (!analysisOrders) { redirect(pathsConfig.auth.signIn); } await createPageViewLog({ accountId: account.id, action: 'VIEW_ANALYSIS_RESULTS', }); const getAnalysisElementIds = (analysisOrders: AnalysisOrder[]) => [ ...new Set(analysisOrders?.flatMap((order) => order.analysis_element_ids).filter(Boolean) as number[]), ]; const analysisElementIds = getAnalysisElementIds(analysisOrders); const analysisElements = await getAnalysisElements({ ids: analysisElementIds }); return (

{analysisResponses && analysisResponses.length > 0 ? ( ) : ( )}

{analysisOrders.length > 0 && analysisElements.length > 0 ? analysisOrders.map((analysisOrder) => { const analysisElementIds = getAnalysisElementIds([analysisOrder]); const analysisElementsForOrder = analysisElements.filter((element) => analysisElementIds.includes(element.id)); return (

{analysisElementsForOrder.length > 0 ? analysisElementsForOrder.map((analysisElement) => { const results = analysisResponseElements?.find((element) => element.analysis_element_original_id === analysisElement.analysis_id_original); if (!results) { return ( ); } return ( ); }) : (
)}
); }) : (
)}
); } export default withI18n(AnalysisResultsPage);