diff --git a/prisma/dev.db b/prisma/dev.db index c9f0494..8d5fc0a 100644 Binary files a/prisma/dev.db and b/prisma/dev.db differ diff --git a/src/app/lib/edit.ts b/src/app/lib/edit.ts new file mode 100644 index 0000000..273e5b3 --- /dev/null +++ b/src/app/lib/edit.ts @@ -0,0 +1,15 @@ +"use server" +import prisma from "./db" +import { revalidatePath } from "next/cache" +import { redirect } from "next/navigation" +import { SubForm } from "app/ui/forms/sub" + +export async function editSubmission(data: SubForm) { + const res = await prisma.sub.update({ + where: { id: data.id }, + data + }) + console.log(`updated ${data} to ${res}`) + revalidatePath("/submission") + redirect("/submission") +} diff --git a/src/app/submission/edit.tsx b/src/app/submission/edit.tsx index 5cee7f9..b4c15ac 100644 --- a/src/app/submission/edit.tsx +++ b/src/app/submission/edit.tsx @@ -4,19 +4,11 @@ import { Dialog, DialogHeader, DialogTrigger, DialogContent, DialogClose, Dialog import { Button } from "@/components/ui/button"; import { ComponentProps } from "react"; import { Pub, Response, Story } from "@prisma/client"; -import SubmissionForm from "app/ui/forms/sub"; +import SubmissionForm, { SubForm } from "app/ui/forms/sub"; -type CreateSubDefaults = { - subId?: number, - storyId: number, - pubId: number, - submitted: Date, - responded: Date, - respoonseId: number -} -export default function EditSubmissionDialog({ stories, pubs, responses, defaults, children }: ComponentProps<"div"> & { stories: Story[], pubs: Pub[], responses: Response[], defaults: CreateSubDefaults }) { +export default function EditSubmissionDialog({ stories, pubs, responses, defaults, children }: ComponentProps<"div"> & { stories: Story[], pubs: Pub[], responses: Response[], defaults: SubForm }) { return ( diff --git a/src/app/ui/forms/sub.tsx b/src/app/ui/forms/sub.tsx index 279bc57..5472f89 100644 --- a/src/app/ui/forms/sub.tsx +++ b/src/app/ui/forms/sub.tsx @@ -32,12 +32,20 @@ import { SelectValue, } from "@/components/ui/select" import { useState } from "react" +import { editSubmission } from "app/lib/edit" export const formSchema = z.object({ + id: z.number().optional(), storyId: z.coerce.number(), pubId: z.coerce.number(), - submitted: z.date().transform((date) => date.toString()), - responded: z.date().transform((date) => date.toString()).optional(), + submitted: z.coerce.date().transform((date) => date.toString()), + responded: z.coerce.date().transform((date) => { + + if (date.toString() !== new Date(null).toString()) { + return date.toString() + } + return null + }).optional(), responseId: z.coerce.number() }) .refine(object => { @@ -65,6 +73,8 @@ export const formSchema = z.object({ } ) +export type SubForm = z.infer + export default function SubmissionForm({ stories, pubs, responses, createSub, defaults }) { const form = useForm>({ @@ -106,7 +116,11 @@ export default function SubmissionForm({ stories, pubs, responses, createSub, de ), }) - createSub(values) + if (values.id) { + editSubmission(values) + } else { + createSub(values) + } console.log(values) }