edit submission, fix client side data validation
This commit is contained in:
parent
fb4911c067
commit
2df9738364
BIN
prisma/dev.db
BIN
prisma/dev.db
Binary file not shown.
|
@ -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")
|
||||||
|
}
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
),
|
),
|
||||||
})
|
})
|
||||||
createSub(values)
|
if (values.id) {
|
||||||
|
editSubmission(values)
|
||||||
|
} else {
|
||||||
|
createSub(values)
|
||||||
|
}
|
||||||
console.log(values)
|
console.log(values)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue