vision-agent / app /page.tsx
wuyiqunLu
feat: add playwright e2e test for chat page with new and old data structure (#99)
06bd1d1 unverified
raw
history blame
2.2 kB
'use client';
import { useRouter } from 'next/navigation';
import { useRef } from 'react';
import Composer, { ComposerRef } from '@/components/chat/Composer';
import { dbPostCreateChat } from '@/lib/db/functions';
import { nanoid } from '@/lib/utils';
import Chip from '@/components/ui/Chip';
import { IconArrowUpRight } from '@/components/ui/Icons';
import { EXAMPLES } from '@/lib/constants';
export default function Page() {
const router = useRouter();
const composerRef = useRef<ComposerRef>(null);
return (
<div className="h-screen w-screen homepage">
<div className="mx-auto w-[42rem] max-w-full px-4 mt-[200px]">
<h1 className="mb-4 text-center relative">
Vision Agent
<Chip className="absolute bg-green-100 text-green-500">BETA</Chip>
</h1>
<h4 className="text-center">
Generate code to solve your vision problem with simple prompts.
</h4>
<div className="my-8">
<Composer
ref={composerRef}
onSubmit={async ({ input, mediaUrl }) => {
const newId = nanoid();
const resp = await dbPostCreateChat({
id: newId,
title: `conversation-${newId}`,
mediaUrl,
message: {
prompt: input,
mediaUrl,
},
});
if (resp) {
router.push(`/chat/${newId}`);
}
}}
/>
</div>
{EXAMPLES.map((example, index) => {
return (
<Chip
key={index}
className="bg-transparent border border-zinc-500 cursor-pointer px-4"
onClick={() => {
composerRef.current?.setInput(example.prompt);
composerRef.current?.setMediaUrl(example.mediaUrl);
}}
>
<div className="flex flex-row items-center space-x-2">
<p className="text-primary text-sm">{example.title}</p>
<IconArrowUpRight className="text-primary" />
</div>
</Chip>
);
})}
</div>
</div>
);
}