diff --git a/app/page.tsx b/app/page.tsx index 98dde21..5ee9b4a 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -7,12 +7,11 @@ import DropDown, { VibeType } from '../components/DropDown'; import Footer from '../components/Footer'; import Github from '../components/GitHub'; import Header from '../components/Header'; +import { useChat } from 'ai/react'; export default function Page() { - const [loading, setLoading] = useState(false); const [bio, setBio] = useState(''); const [vibe, setVibe] = useState('Professional'); - const [generatedBios, setGeneratedBios] = useState(''); const bioRef = useRef(null); const scrollToBios = () => { @@ -21,48 +20,25 @@ export default function Page() { } }; - const generateBio = async (e: any) => { - e.preventDefault(); - setGeneratedBios(''); - setLoading(true); - - const response = await fetch('/api/chat', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ + const { input, handleInputChange, handleSubmit, isLoading, messages } = + useChat({ + body: { vibe, bio, - }), + }, + onResponse() { + scrollToBios(); + }, }); - if (!response.ok) { - throw new Error(response.statusText); - } - - // This data is a ReadableStream - const data = response.body; - if (!data) { - return; - } - - // https://web.dev/streams/#the-getreader-and-read-methods - const reader = data.getReader(); - const decoder = new TextDecoder(); - let done = false; - - while (!done) { - const { value, done: doneReading } = await reader.read(); - done = doneReading; - const chunkValue = decoder.decode(value); - setGeneratedBios((prev) => prev + chunkValue); - } - - scrollToBios(); - setLoading(false); + const onSubmit = (e: any) => { + setBio(input); + handleSubmit(e); }; + const lastMessage = messages[messages.length - 1]; + const generatedBios = lastMessage?.role === "assistant" ? lastMessage.content : null; + return (
@@ -80,7 +56,7 @@ export default function Page() { Generate your next Twitter bio using chatGPT

47,118 bios generated so far.

-
+