85 lines
2.4 KiB
TypeScript
85 lines
2.4 KiB
TypeScript
import Head from "next/head";
|
|
import { useTranslation } from "~/providers/I18nProvider";
|
|
import { type NextPageWithLayout } from "~/pages/_app";
|
|
import { SiteHeader } from "~/components/navbar/site-header";
|
|
import { Suspense } from "react";
|
|
import type { GetServerSideProps } from "next";
|
|
import { TrpcAuthedFetchingIstance } from "~/server/utils/ssgHelper";
|
|
import type { ChatsChatid } from "~/schemas/public/Chats";
|
|
import { Sidebar } from "~/components/area-riservata/sidebar";
|
|
import Chat from "~/components/chat/chat";
|
|
import { LoadingPage } from "~/components/loading";
|
|
import type { Session } from "~/server/api/trpc";
|
|
|
|
type UserChatProps = {
|
|
chatId: ChatsChatid;
|
|
session: Session;
|
|
};
|
|
|
|
const UserChat: NextPageWithLayout<UserChatProps> = ({
|
|
chatId,
|
|
session,
|
|
}: UserChatProps) => {
|
|
const { t } = useTranslation();
|
|
|
|
return (
|
|
<>
|
|
<Head>
|
|
<title>{t.heads.area_riservata_titolo}</title>
|
|
<meta name="description" content={t.heads.area_riservata_description} />
|
|
</Head>
|
|
<div className="h-full flex-1 grow">
|
|
<div className="flex h-full w-full flex-row">
|
|
<div className="h-full">
|
|
<Sidebar isAdmin={false} className="h-full" />
|
|
</div>
|
|
<Suspense fallback={<LoadingPage />}>
|
|
<Chat chatId={chatId} userData={session} />
|
|
</Suspense>
|
|
</div>
|
|
</div>
|
|
</>
|
|
);
|
|
};
|
|
|
|
UserChat.getLayout = function getLayout(page) {
|
|
return (
|
|
<div className="h-screen">
|
|
<div className="flex h-full flex-col">
|
|
<SiteHeader />
|
|
<div className="flex min-h-0 grow">{page}</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export const getServerSideProps = (async (context) => {
|
|
const access_token = context.req.cookies.access_token;
|
|
|
|
const helper = await TrpcAuthedFetchingIstance({ access_token });
|
|
if (helper) {
|
|
const chat = await helper.trpc.chat.getSessionChats.fetch();
|
|
await helper.trpc.messagesSSE.infinite.prefetchInfinite({
|
|
chatId: chat.chatid,
|
|
});
|
|
await helper.trpc.chat.getUserInfosByChat.prefetch({
|
|
chatId: chat.chatid,
|
|
});
|
|
|
|
return {
|
|
props: {
|
|
chatId: chat.chatid,
|
|
session: helper.session,
|
|
trpcState: helper.trpc.dehydrate(),
|
|
},
|
|
};
|
|
}
|
|
return {
|
|
redirect: {
|
|
destination: "/login",
|
|
permanent: false,
|
|
},
|
|
};
|
|
}) satisfies GetServerSideProps<UserChatProps>;
|
|
|
|
export default UserChat;
|