import type { GetServerSideProps } from "next"; import Link from "next/link"; import { AllegatoIframe } from "~/components/allegato-iframe"; import { DocNotFoundPage } from "~/components/doc_not_found"; import { AreaRiservataLayout } from "~/components/Layout"; import { LoadingPage } from "~/components/loading"; import { Status500 } from "~/components/status-page"; import type { NextPageWithLayout } from "~/pages/_app"; import { useTranslation } from "~/providers/I18nProvider"; import type { AnnunciId } from "~/schemas/public/Annunci"; import type { ServizioServizioId } from "~/schemas/public/Servizio"; import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper"; import { zAnnuncioId, zServizioId } from "~/server/utils/zod_types"; import { api } from "~/utils/api"; type ContrattoViewerProps = { servizioId: ServizioServizioId; annuncioId: AnnunciId; }; const ContrattoViewer: NextPageWithLayout = ({ servizioId, annuncioId, }: ContrattoViewerProps) => { const { data, isLoading } = api.servizio.getServizioAnnuncio.useQuery({ annuncioId, servizioId, }); const { t } = useTranslation(); if (isLoading) return ; if (!data) return ; if (!data.doc_contratto_ref) return ; return (

{t.servizio.contratto.titolo}

{t.servizio.contratto.descrizione}

); }; const FileSection = ({ storageId }: { storageId: string }) => { const { data: fileInfos, isLoading } = api.storage.getFileInfos.useQuery({ storageId, }); const { t } = useTranslation(); if (isLoading) return ; if (!fileInfos) return

{t.file_section.error}

; return ( <> {t.file_section.download} ); }; ContrattoViewer.getLayout = function getLayout(page) { return ( {page} ); }; export default ContrattoViewer; export const getServerSideProps = (async (context) => { const slug = context.params?.slug; if (!slug || slug.length !== 2) { return { notFound: true, }; } const [servizioId, annuncioId] = slug; if (!servizioId || !annuncioId) { return { notFound: true, }; } const parsedServizioId = zServizioId.safeParse(servizioId); const parsedAnnuncioId = zAnnuncioId.safeParse(parseInt(annuncioId)); if (!parsedServizioId.success || !parsedAnnuncioId.success) { return { notFound: true, }; } const access_token = context.req.cookies.access_token; const helper = await TrpcAuthedFetchingIstance({ access_token }); if (helper) { await helper.trpc.servizio.getServizioAnnuncio.prefetch({ annuncioId: parsedAnnuncioId.data, servizioId: parsedServizioId.data, }); return { props: { annuncioId: parsedAnnuncioId.data, servizioId: parsedServizioId.data, trpcState: helper.trpc.dehydrate(), }, }; } return { redirect: { destination: "/500", permanent: false, }, }; }) satisfies GetServerSideProps;