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> | ||||||
| 			), | 			), | ||||||
| 		}) | 		}) | ||||||
|  | 		if (values.id) { | ||||||
|  | 			editSubmission(values) | ||||||
|  | 		} else { | ||||||
| 			createSub(values) | 			createSub(values) | ||||||
|  | 		} | ||||||
| 		console.log(values) | 		console.log(values) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue