diff --git a/app/(main)/page.tsx b/app/(main)/page.tsx index 15bb0f0e8..d77868eac 100644 --- a/app/(main)/page.tsx +++ b/app/(main)/page.tsx @@ -12,7 +12,9 @@ import { FormEvent, useEffect, useState } from "react"; import LoadingDots from "../../components/loading-dots"; function removeCodeFormatting(code: string): string { - return code.replace(/```(?:typescript|javascript|tsx)?\n([\s\S]*?)```/g, '$1').trim(); + return code + .replace(/```(?:typescript|javascript|tsx)?\n([\s\S]*?)```/g, "$1") + .trim(); } export default function Home() { @@ -32,7 +34,7 @@ export default function Home() { { label: "gemini-1.5-flash", value: "gemini-1.5-flash", - } + }, ]; let [model, setModel] = useState(models[0].value); let [modification, setModification] = useState(""); @@ -94,6 +96,54 @@ export default function Home() { setStatus("created"); } + async function modifyApp(e: FormEvent) { + e.preventDefault(); + scrollTo({ delay: 0.5 }); + setStatus("updating"); + + const newMessages = [ + ...messages, + { role: "assistant", content: generatedCode }, + { role: "user", content: modification }, + ]; + + let res = await fetch("/api/generateCode", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + model, + messages: newMessages, + }), + }); + + if (!res.ok) { + throw new Error(res.statusText); + } + + if (!res.body) { + throw new Error("No response body"); + } + + const reader = res.body.getReader(); + let receivedData = ""; + + while (true) { + const { done, value } = await reader.read(); + if (done) { + break; + } + receivedData += new TextDecoder().decode(value); + const cleanedData = removeCodeFormatting(receivedData); + setGeneratedCode(cleanedData); + } + + setMessages(newMessages); + setModification(""); + setStatus("updated"); + } + useEffect(() => { let el = document.querySelector(".cm-scroller"); if (el && loading) { @@ -105,7 +155,7 @@ export default function Home() { return (
@@ -122,7 +172,7 @@ export default function Home() {
-
+