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 { listProductTypes } from '@lib/data/products'; import pathsConfig from '~/config/paths.config'; import { redirect } from 'next/navigation'; import { getOrders } from '~/lib/services/order.service'; import { AnalysisElement, getAnalysisElements } from '~/lib/services/analysis-element.service'; import type { UserAnalysisElement } from '@kit/accounts/types/accounts'; import { loadCurrentUserAccount } from '@/app/home/(user)/_lib/server/load-user-account'; import { createPageViewLog } from '~/lib/services/audit/pageView.service'; 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 analysisList = await loadUserAnalysis(); const orders = await getOrders().catch(() => null); const { productTypes } = await listProductTypes(); if (!orders || !productTypes) { redirect(pathsConfig.auth.signIn); } await createPageViewLog({ accountId: account.id, action: 'VIEW_ANALYSIS_RESULTS', }); const analysisElementIds = [ ...new Set(orders?.flatMap((order) => order.analysis_element_ids).filter(Boolean) as number[]), ]; const analysisElements = await getAnalysisElements({ ids: analysisElementIds }); const analysisElementsWithResults = analysisElements.reduce((acc, curr) => { const analysisResponseWithElementResults = analysisList?.find((result) => result.elements.some((element) => element.analysis_element_original_id === curr.analysis_id_original)); const elementResults = analysisResponseWithElementResults?.elements.find((element) => element.analysis_element_original_id === curr.analysis_id_original) as UserAnalysisElement | undefined; return { ...acc, [curr.id]: { analysisElement: curr, results: elementResults, }, } }, {} as Record); return (

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

{Object.entries(analysisElementsWithResults).map(([id, { analysisElement, results }]) => { return ( ); })}
); } export default withI18n(AnalysisResultsPage);