Skip to content

Commit dedc9b5

Browse files
committed
working version!
1 parent d04ecb1 commit dedc9b5

3 files changed

Lines changed: 47 additions & 14 deletions

File tree

app/(main)/actions.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
"use server";
2+
3+
import client from "@/lib/prisma";
4+
import { redirect } from "next/navigation";
5+
6+
export async function shareApp({
7+
generatedCode,
8+
prompt,
9+
model,
10+
}: {
11+
generatedCode: string;
12+
prompt: string;
13+
model: string;
14+
}) {
15+
let newApp = await client.generatedApp.create({
16+
data: {
17+
code: generatedCode,
18+
model: model,
19+
prompt: prompt,
20+
},
21+
});
22+
23+
return redirect(`/share/${newApp.id}`);
24+
}

app/(main)/page.tsx

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,8 @@ import { useScrollTo } from "@/hooks/use-scroll-to";
66
import { Sandpack } from "@codesandbox/sandpack-react";
77
import { dracula as draculaTheme } from "@codesandbox/sandpack-themes";
88
import { CheckIcon } from "@heroicons/react/16/solid";
9-
import {
10-
ArrowLongRightIcon,
11-
ChevronDownIcon,
12-
PlusIcon,
13-
} from "@heroicons/react/20/solid";
9+
import { ArrowLongRightIcon, ChevronDownIcon } from "@heroicons/react/20/solid";
10+
import { ArrowUpOnSquareIcon } from "@heroicons/react/24/outline";
1411
import * as Select from "@radix-ui/react-select";
1512
import * as Tooltip from "@radix-ui/react-tooltip";
1613
import {
@@ -21,6 +18,7 @@ import {
2118
import { AnimatePresence, motion } from "framer-motion";
2219
import { FormEvent, useEffect, useState } from "react";
2320
import LoadingDots from "../../components/loading-dots";
21+
import { shareApp } from "./actions";
2422

2523
export default function Home() {
2624
let [status, setStatus] = useState<
@@ -332,24 +330,30 @@ export default function Home() {
332330
<Tooltip.Root delayDuration={0}>
333331
<Tooltip.Trigger asChild>
334332
<button
335-
onClick={() => {
336-
location.reload();
333+
onClick={async () => {
334+
let userMessages = messages.filter(
335+
(message) => message.role === "user",
336+
);
337+
let prompt =
338+
userMessages[userMessages.length - 1].content;
337339

338-
// TODO: Cancel stream and reset this state
339-
// setMessages([]);
340-
// setStatus("initial");
340+
await shareApp({
341+
generatedCode,
342+
prompt,
343+
model: modelUsedForInitialCode,
344+
});
341345
}}
342346
className="inline-flex size-[68px] items-center justify-center rounded-3xl bg-blue-500"
343347
>
344-
<PlusIcon className="size-10 text-white" />
348+
<ArrowUpOnSquareIcon className="size-6 text-white" />
345349
</button>
346350
</Tooltip.Trigger>
347351
<Tooltip.Portal>
348352
<Tooltip.Content
349353
className="select-none rounded bg-white px-4 py-2.5 text-sm leading-none shadow-md shadow-black/20"
350354
sideOffset={5}
351355
>
352-
Create a new app
356+
Share your app
353357
<Tooltip.Arrow className="fill-white" />
354358
</Tooltip.Content>
355359
</Tooltip.Portal>

app/share/[id]/page.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { notFound } from "next/navigation";
22
import CodeViewer from "./code-viewer";
3+
import client from "@/lib/prisma";
34

45
async function getCode(id: string) {
56
await new Promise((resolve) => setTimeout(resolve, 1000));
@@ -13,9 +14,13 @@ export default async function Page({ params }: { params: { id: string } }) {
1314
notFound();
1415
}
1516

16-
let code = await getCode(params.id);
17+
const generatedApp = await client.generatedApp.findUnique({
18+
where: {
19+
id: params.id,
20+
},
21+
});
1722

18-
return <CodeViewer code={code} />;
23+
return <CodeViewer code={generatedApp?.code} />;
1924
}
2025

2126
let sampleCode = `

0 commit comments

Comments
 (0)