File size: 1,888 Bytes
867b17d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
import { cookies } from 'next/headers';
import { notFound, redirect } from 'next/navigation';
import { auth } from '@/app/(auth)/auth';
import { Chat } from '@/components/chat';
import { getChatById, getMessagesByChatId } from '@/lib/db/queries';
import { DataStreamHandler } from '@/components/data-stream-handler';
import { DEFAULT_CHAT_MODEL } from '@/lib/ai/models';
import { convertToUIMessages } from '@/lib/utils';
export default async function Page(props: { params: Promise<{ id: string }> }) {
const params = await props.params;
const { id } = params;
const chat = await getChatById({ id });
if (!chat) {
notFound();
}
const session = await auth();
if (!session) {
redirect('/api/auth/guest');
}
if (chat.visibility === 'private') {
if (!session.user) {
return notFound();
}
if (session.user.id !== chat.userId) {
return notFound();
}
}
const messagesFromDb = await getMessagesByChatId({
id,
});
const uiMessages = convertToUIMessages(messagesFromDb);
const cookieStore = await cookies();
const chatModelFromCookie = cookieStore.get('chat-model');
if (!chatModelFromCookie) {
return (
<>
<Chat
id={chat.id}
initialMessages={uiMessages}
initialChatModel={DEFAULT_CHAT_MODEL}
initialVisibilityType={chat.visibility}
isReadonly={session?.user?.id !== chat.userId}
session={session}
autoResume={true}
/>
<DataStreamHandler />
</>
);
}
return (
<>
<Chat
id={chat.id}
initialMessages={uiMessages}
initialChatModel={chatModelFromCookie.value}
initialVisibilityType={chat.visibility}
isReadonly={session?.user?.id !== chat.userId}
session={session}
autoResume={true}
/>
<DataStreamHandler />
</>
);
}
|