edit submission, fix client side data validation

This commit is contained in:
andrzej 2024-07-20 14:07:13 +02:00
parent fb4911c067
commit 2df9738364
4 changed files with 34 additions and 13 deletions

Binary file not shown.

15
src/app/lib/edit.ts Normal file
View File

@ -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")
}

View File

@ -4,19 +4,11 @@ import { Dialog, DialogHeader, DialogTrigger, DialogContent, DialogClose, Dialog
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import { ComponentProps } from "react"; import { ComponentProps } from "react";
import { Pub, Response, Story } from "@prisma/client"; 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 ( return (
<Dialog> <Dialog>

View File

@ -32,12 +32,20 @@ import {
SelectValue, SelectValue,
} from "@/components/ui/select" } from "@/components/ui/select"
import { useState } from "react" import { useState } from "react"
import { editSubmission } from "app/lib/edit"
export const formSchema = z.object({ export const formSchema = z.object({
id: z.number().optional(),
storyId: z.coerce.number(), storyId: z.coerce.number(),
pubId: z.coerce.number(), pubId: z.coerce.number(),
submitted: z.date().transform((date) => date.toString()), submitted: z.coerce.date().transform((date) => date.toString()),
responded: z.date().transform((date) => date.toString()).optional(), responded: z.coerce.date().transform((date) => {
if (date.toString() !== new Date(null).toString()) {
return date.toString()
}
return null
}).optional(),
responseId: z.coerce.number() responseId: z.coerce.number()
}) })
.refine(object => { .refine(object => {
@ -65,6 +73,8 @@ export const formSchema = z.object({
} }
) )
export type SubForm = z.infer<typeof formSchema>
export default function SubmissionForm({ stories, pubs, responses, createSub, defaults }) { export default function SubmissionForm({ stories, pubs, responses, createSub, defaults }) {
const form = useForm<z.infer<typeof formSchema>>({ const form = useForm<z.infer<typeof formSchema>>({
@ -106,7 +116,11 @@ export default function SubmissionForm({ stories, pubs, responses, createSub, de
</pre> </pre>
), ),
}) })
if (values.id) {
editSubmission(values)
} else {
createSub(values) createSub(values)
}
console.log(values) console.log(values)
} }