From 2df97383644bac3f28c8e5ec266efa2b3e8e7ff9 Mon Sep 17 00:00:00 2001 From: andrzej Date: Sat, 20 Jul 2024 14:07:13 +0200 Subject: [PATCH] edit submission, fix client side data validation --- prisma/dev.db | Bin 69632 -> 69632 bytes src/app/lib/edit.ts | 15 +++++++++++++++ src/app/submission/edit.tsx | 12 ++---------- src/app/ui/forms/sub.tsx | 20 +++++++++++++++++--- 4 files changed, 34 insertions(+), 13 deletions(-) create mode 100644 src/app/lib/edit.ts diff --git a/prisma/dev.db b/prisma/dev.db index c9f0494ff40e036e29b9616896a684b93c96f096..8d5fc0ac1e0a60a765130c3cb962e5793243339c 100644 GIT binary patch delta 414 zcmZozz|ydQWr8%L>_i!7M%j%C8UBpYn@{>%Z{TBPKgP)Yg*%m7f>)O7^j0Cpt?Vp3 z&CD#zPqQ;Ji+M|PFfcMU@-i^WvxTRoD0r3TC>R(|59DJs7xR{c$uY5`$#FOGNN|ER zHu6r-=Vx@D{-2wXjU`9H$Y8o4AEOyRS0j%&OaY?|`}Boej1FjO#5sA_FwBBjj$r`{ zP|kOH7C)n>L?e$B+$33!;KUNJBOw;qAgpBNVPIeifokECglZ9FL@^rVHldJ=QU$NX vJOu+o1w%`710X%UjDyjDpPd*tGcYhb$KmGbY5a`7KvyvMLKHx~&BzV_uVPk$ delta 407 zcmZozz|ydQWr8##&qNt#MxKoc8UBnCn@{>%Z{TBMKgP(vnLiB#*{ik+F>YmNVPIgN zzx*^iBlGkN9E@VqgSi+TB{=z0n7=YGFgEfw@-i}ql%^_pmF6iJ8crAFV>F*0!o}zS zR+0u&!Uj`fWIFvJ7o!!$j!qER~??30x{4CZlJw5JG&P*2UrOM zBO8(mkbW_C{uIXFAol>}V0HnW1Co;j$*p5xgg90PSu4!7_LA&CgXLjrnBhj?aIQE5 z1H&DdY8kL<$ATgSgXsr(8O=F^fk6QZ4hWZx!`n-YgJF6dJEI311B15&kiCJI(Ua3# QoC9nG!}R~$jLwYg0NH0=6#xJL 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) }