diff --git a/prisma/dev.db b/prisma/dev.db index 4dcac18..4524a66 100644 Binary files a/prisma/dev.db and b/prisma/dev.db differ diff --git a/src/app/lib/create.ts b/src/app/lib/create.ts index cf41f49..1d1e3ec 100644 --- a/src/app/lib/create.ts +++ b/src/app/lib/create.ts @@ -1,12 +1,12 @@ "use server" -import { Genre } from "@prisma/client" +import { Genre, Story } from "@prisma/client" import prisma from "./db" import { revalidatePath } from "next/cache" import { redirect } from "next/navigation" -export async function createStory(data) { +export async function createStory(data: Story & { genres: number[] }) { "use server" - const genresArray = data.genres.map((e: Genre) => { return { id: e } }) + const genresArray = data.genres.map((e) => { return { id: e } }) const res = await prisma.story.create({ data: { title: data.title, diff --git a/src/app/lib/update.ts b/src/app/lib/update.ts new file mode 100644 index 0000000..0fc3d1f --- /dev/null +++ b/src/app/lib/update.ts @@ -0,0 +1,22 @@ +import { Genre, Story } from "@prisma/client" +import { StoryWithGenres } from "app/story/page" +import prisma from "./db" +import { revalidatePath } from "next/cache" +import { redirect } from "next/navigation" + +export async function updateStory(data: Story & { genres: number[] }) { + "use server" + const genresArray = data.genres.map((e) => { return { id: e } }) + + const res = await prisma.story.update({ + where: { id: data.id }, + data: { + title: data.title, + word_count: data.word_count, + genres: { set: genresArray } + } + }) + console.log(`updated story: ${res}`) + revalidatePath("/story") + redirect("/story") +} diff --git a/src/app/story/create.tsx b/src/app/story/create.tsx index d61a499..912ab0a 100644 --- a/src/app/story/create.tsx +++ b/src/app/story/create.tsx @@ -19,7 +19,7 @@ export default function CreateStoryDialog({ genres }: ComponentProps<"div"> & { New story Create an entry for a new story i.e. a thing you intend to submit for publication. - + diff --git a/src/app/story/page.tsx b/src/app/story/page.tsx index 4d94658..a75734b 100644 --- a/src/app/story/page.tsx +++ b/src/app/story/page.tsx @@ -23,6 +23,7 @@ export default async function Page() {
+ {/* TODO - EDIT STORY DIALOG */}
) diff --git a/src/app/ui/forms/story.tsx b/src/app/ui/forms/story.tsx index 60e04cd..068731a 100644 --- a/src/app/ui/forms/story.tsx +++ b/src/app/ui/forms/story.tsx @@ -21,31 +21,33 @@ import { PopoverContent, } from "@/components/ui/popover" import { ComponentProps } from "react" -import { Genre } from "@prisma/client" +import { Genre, Story } from "@prisma/client" import { randomStoryTitle } from "app/lib/shortStoryTitleGenerator" import { usePathname } from "next/navigation" import GenrePicker from "./genrePicker" +import { StoryWithGenres } from "app/story/page" const formSchema = z.object({ + id: z.number().optional(), title: z.string().min(2).max(50), word_count: z.coerce.number().min(100), genres: z.array(z.number()) }) -export default function StoryForm({ genres, createStory, className }: ComponentProps<"div"> & { genres: Array, createStory: (data: any) => void }) { - // 1. Define your form. +export default function StoryForm({ genres, createStory, className, existingData }: ComponentProps<"div"> & { genres: Array, createStory: (data: any) => void, existingData: Story & { genres: number[] } | null }) { const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { - title: "", - word_count: 0, - genres: [] + id: existingData?.id, + title: existingData?.title ?? "", + word_count: existingData?.word_count ?? 500, + genres: existingData?.genres ?? [] }, }) - // 2. Define a submit handler. + + + function onSubmit(values: z.infer) { - // Do something with the form values. - // ✅ This will be type-safe and validated. toast({ title: "You submitted the following values:", description: ( diff --git a/src/app/ui/tables/contextMenu.tsx b/src/app/ui/tables/contextMenu.tsx index 95c9477..c237519 100644 --- a/src/app/ui/tables/contextMenu.tsx +++ b/src/app/ui/tables/contextMenu.tsx @@ -13,9 +13,12 @@ export default function FormContextMenu({ pathname, row, selectedRows, deselect {pathname !== "/submission" && selectedRows.length <= 1 ? - - Inspect - + <> + + Inspect + + Edit + : "" } {