From fb4911c067811da0b34d1d648abacb16495f10bd Mon Sep 17 00:00:00 2001 From: andrzej Date: Fri, 19 Jul 2024 17:23:07 +0200 Subject: [PATCH] edit submission functionality (partial) --- prisma/dev.db | Bin 69632 -> 69632 bytes src/app/submission/columns.tsx | 32 +++++++++++++++++++------ src/app/submission/create.tsx | 13 ++++++++-- src/app/submission/edit.tsx | 40 +++++++++++++++++++++++++++++++ src/app/submission/page.tsx | 6 ++++- src/app/tailwind.css | 4 ++++ src/app/ui/forms/sub.tsx | 13 +++++----- src/app/ui/tables/data-table.tsx | 14 ++++++++--- 8 files changed, 103 insertions(+), 19 deletions(-) create mode 100644 src/app/submission/edit.tsx diff --git a/prisma/dev.db b/prisma/dev.db index eb7bb0b5d6ae966d2cc9b2125bafa436c9ce0a4d..c9f0494ff40e036e29b9616896a684b93c96f096 100644 GIT binary patch delta 288 zcmZozz|ydQWr8##&qNt#MxKocjsA@4n;-eh8_4s^GjQ^)<>Bw*U%`KmZ!OzG;W@cn$QfCoj=44c#JZ*lqCIbV55PvxX|7ZSt{OkFD^1tD~ z#=nh!IsbJ2cK&kybNuu9`}ynnkMTd})KYjEw3+n>Mg0 a0Iiy|nf*dHKQ}AT26bUDxq0sWWCH+os8Ue? delta 288 zcmZozz|ydQWr8##$3z)tMvjdMjsA>kn;-eh8_4thWZ>Xi%gHa#zk>fB-&($l{Eqzm z{D=9s@_h%v&4LEKe3RGq`DpQnF^Dp1o(nEWOion@OUy0EEJ`gd=2Ku{V3K9MFiD#ggcFj=|Zj4^0(RKI~7P*Rh*1yv9Kc?M-h*A(9(g~==WW0(c_r%h&`pv2tI z-@I98LM%To|4#-HMrH;E26jefwaL@wXKMmQ1o-P2_&@XC<6qDJhW{G>HvZ-O)A`%^ z&+*Ua@8_@QKgR!*e;@z8%~}h5`8j~fIe=P)CfBd8Vh5SS$-=y81B(LCs(G8)FLd*B T^Z#aGQx*o1YMbZYPc{Gm>snWH diff --git a/src/app/submission/columns.tsx b/src/app/submission/columns.tsx index 3569ca4..63ad16f 100644 --- a/src/app/submission/columns.tsx +++ b/src/app/submission/columns.tsx @@ -1,13 +1,28 @@ "use client" -import { ColumnDef, createColumnHelper } from "@tanstack/react-table" +import { CellContext, ColumnDef, createColumnHelper } from "@tanstack/react-table" import { ArrowUpDown } from "lucide-react" import { Button } from "@/components/ui/button" import { SubComplete } from "./page" import { actions } from "app/ui/tables/actions" import { selectCol } from "app/ui/tables/selectColumn" +import EditSubmissionDialog from "./edit" -const columnHelper = createColumnHelper() +const EditSubCell = (props: CellContext) => { + return { + props.getValue() instanceof Date ? +

+ {props.getValue().toLocaleDateString()} +

+ :

{props.getValue()}

+ + }
+} export const columns: ColumnDef[] = [ selectCol, @@ -19,7 +34,8 @@ export const columns: ColumnDef[] = [ return "RECORD DELETED" }, id: "story", - header: "Story" + header: "Story", + cell: EditSubCell }, { accessorFn: row => { @@ -29,7 +45,8 @@ export const columns: ColumnDef[] = [ return "RECORD DELETED" }, id: "pub", - header: "Publication" + header: "Publication", + cell: EditSubCell }, { accessorFn: row => new Date(row.submitted), @@ -47,7 +64,7 @@ export const columns: ColumnDef[] = [ }, enableColumnFilter: false, sortingFn: "datetime", - cell: props => { return props.getValue().toLocaleDateString() } + cell: EditSubCell }, { accessorFn: row => row.responded ? new Date(row.responded) : null, @@ -65,7 +82,7 @@ export const columns: ColumnDef[] = [ }, enableColumnFilter: false, sortingFn: "datetime", - cell: props => props.getValue() ? props.getValue().toLocaleDateString() : '-' + cell: EditSubCell }, { accessorFn: row => { @@ -75,7 +92,8 @@ export const columns: ColumnDef[] = [ return "RECORD DELETED" }, id: "response", - header: "Response" + header: "Response", + cell: EditSubCell }, ] diff --git a/src/app/submission/create.tsx b/src/app/submission/create.tsx index 5ded6cc..643d324 100644 --- a/src/app/submission/create.tsx +++ b/src/app/submission/create.tsx @@ -8,7 +8,16 @@ import { Pub, Response, Story } from "@prisma/client"; import SubmissionForm from "app/ui/forms/sub"; -export default function CreateSubmissionDialog({ stories, pubs, responses }: ComponentProps<"div"> & { stories: Story[], pubs: Pub[], responses: Response[] }) { +type CreateSubDefaults = { + subId?: number, + storyId: number, + pubId: number, + submitted: Date, + responded: Date, + respoonseId: number +} + +export default function CreateSubmissionDialog({ stories, pubs, responses, defaults }: ComponentProps<"div"> & { stories: Story[], pubs: Pub[], responses: Response[], defaults: CreateSubDefaults }) { return ( @@ -20,7 +29,7 @@ export default function CreateSubmissionDialog({ stories, pubs, responses }: Com New submission Create an entry for a new story i.e. a thing you intend to submit for publication. - + diff --git a/src/app/submission/edit.tsx b/src/app/submission/edit.tsx new file mode 100644 index 0000000..5cee7f9 --- /dev/null +++ b/src/app/submission/edit.tsx @@ -0,0 +1,40 @@ +"use client" +import { createSub } from "app/lib/create" +import { Dialog, DialogHeader, DialogTrigger, DialogContent, DialogClose, DialogTitle, DialogFooter, DialogDescription } from "@/components/ui/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"; + + +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 }) { + + return ( + + + {children} + + + + Edit Submission + Change response status, edit dates etc + + + + + + + + + + ) +} diff --git a/src/app/submission/page.tsx b/src/app/submission/page.tsx index 1eeb8d0..7b6333c 100644 --- a/src/app/submission/page.tsx +++ b/src/app/submission/page.tsx @@ -17,7 +17,11 @@ export default async function Page() { const responses = await getResponses() return (
- + date.toString()), @@ -66,11 +66,12 @@ const FormSchema = z.object({ ) -export default function SubmissionForm({ stories, pubs, responses, createSub }) { - const form = useForm>({ - resolver: zodResolver(FormSchema), +export default function SubmissionForm({ stories, pubs, responses, createSub, defaults }) { + const form = useForm>({ + resolver: zodResolver(formSchema), defaultValues: { - responseId: responses[0].id + responseId: responses[0].id, + ...defaults } }) const [isSubCalendarOpen, setIsSubCalendarOpen] = useState(false); @@ -94,7 +95,7 @@ export default function SubmissionForm({ stories, pubs, responses, createSub }) // 2. Define a submit handler. - function onSubmit(values: z.infer) { + function onSubmit(values: z.infer) { // Do something with the form values. // ✅ This will be type-safe and validated. toast({ diff --git a/src/app/ui/tables/data-table.tsx b/src/app/ui/tables/data-table.tsx index 09022db..b14f3e4 100644 --- a/src/app/ui/tables/data-table.tsx +++ b/src/app/ui/tables/data-table.tsx @@ -46,6 +46,8 @@ import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, Di import pluralize from "app/lib/pluralize" import { updateField } from "app/lib/update" import { tableNameToItemName } from "app/lib/nameMaps" +import { Pub, Response, Story } from "@prisma/client" +import { response } from "express" export interface DataTableProps { columns: ColumnDef[] @@ -57,8 +59,11 @@ export function DataTable({ columns, data, children, - tableName -}: DataTableProps & ComponentProps<"div"> & { tableName: string }) { + tableName, + stories, + pubs, + responses +}: DataTableProps & ComponentProps<"div"> & { tableName: string, stories?: Story[], pubs?: Pub[], responses?: Response[] }) { //STATE const [sorting, setSorting] = useState([]) const [columnFilters, setColumnFilters] = useState( @@ -89,7 +94,10 @@ export function DataTable({ meta: { updateTextField: updateField, tableName, - pathname + pathname, + stories, + pubs, + responses } })