import Link from 'next/link'; import { redirect } from 'next/navigation'; import { loadCurrentUserAccount } from '@/app/home/(user)/_lib/server/load-user-account'; 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 pathsConfig from '~/config/paths.config'; import { getAnalysisElements } from '~/lib/services/analysis-element.service'; import { PAGE_VIEW_ACTION, createPageViewLog, } from '~/lib/services/audit/pageView.service'; import { getAnalysisOrders } from '~/lib/services/order.service'; import { loadUserAnalysis } from '../../_lib/server/load-user-analysis'; import Analysis from './_components/analysis'; 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: PAGE_VIEW_ACTION.VIEW_ANALYSIS_RESULTS, }); const analysisElementIds = [ ...new Set( analysisOrders ?.flatMap((order) => order.analysis_element_ids) .filter(Boolean) as number[], ), ]; const analysisElements = await getAnalysisElements({ ids: analysisElementIds, }); const analysisElementsWithResults = analysisResponseElements ?.sort((a, b) => { if (!a.response_time || !b.response_time) { return 0; } return ( new Date(b.response_time).getTime() - new Date(a.response_time).getTime() ); }) .map((results) => ({ results })) ?? []; const analysisElementsWithoutResults = analysisElements.filter( (element) => !analysisElementsWithResults?.some( ({ results }) => results.analysis_element_original_id === element.analysis_id_original, ), ); const hasNoAnalysisElements = analysisElementsWithResults.length === 0 && analysisElementsWithoutResults.length === 0; return (

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

{analysisElementsWithResults.map(({ results }) => { const analysisElement = analysisElements.find( (element) => element.analysis_id_original === results.analysis_element_original_id, ); if (!analysisElement) { return null; } return ( ); })} {analysisElementsWithoutResults.map((element) => ( ))} {hasNoAnalysisElements && (
)}
); } export default withI18n(AnalysisResultsPage);