From e070295bdfceb0bea7b39b0c058b0f137a297d2f Mon Sep 17 00:00:00 2001 From: aahnik Date: Sat, 11 Jan 2025 13:04:26 +0530 Subject: [PATCH] Add support for datetime fields in generic-editor for contests --- app/[orgId]/contests/page.tsx | 4 +-- mint/generic-editor.tsx | 47 +++++++++++++++++++++++++++-------- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/app/[orgId]/contests/page.tsx b/app/[orgId]/contests/page.tsx index 1fdf7ec..6f8ceaf 100644 --- a/app/[orgId]/contests/page.tsx +++ b/app/[orgId]/contests/page.tsx @@ -29,8 +29,8 @@ const fields: Field[] = [ placeholder: "Unique contest ID", }, { name: "description", label: "Description", type: "textarea" }, - { name: "startTime", label: "Start Time", type: "date" }, - { name: "endTime", label: "End Time", type: "date" }, + { name: "startTime", label: "Start Time", type: "datetime" }, + { name: "endTime", label: "End Time", type: "datetime" }, { name: "problems", label: "Problems", diff --git a/mint/generic-editor.tsx b/mint/generic-editor.tsx index 0b12fb5..d995e67 100644 --- a/mint/generic-editor.tsx +++ b/mint/generic-editor.tsx @@ -26,7 +26,7 @@ import { z } from "zod"; export interface Field { name: string; label: string; - type: "text" | "number" | "date" | "select" | "textarea"; + type: "text" | "number" | "date" | "datetime" | "select" | "textarea"; options?: { value: string; label: string }[]; placeholder?: string; } @@ -62,24 +62,37 @@ export function GenericEditor({ useEffect(() => { if (data) { - reset(data); + // Convert datetime strings to local datetime-local format for input + const formattedData = { ...data }; + fields.forEach((field) => { + if (field.type === "datetime" && formattedData[field.name as keyof typeof formattedData]) { + const date = new Date(formattedData[field.name as keyof typeof formattedData] as string); + formattedData[field.name as keyof typeof formattedData] = date + .toISOString() + .slice(0, 16) as any; + } + }); + reset(formattedData); } else { reset({} as T); } - }, [data, reset]); + }, [data, reset, fields]); const onSubmit = (formData: T) => { - // If this is a new entry, add an id - console.log("onSubmit in GenericEditor"); - console.log("formData", formData); + // Convert datetime-local values to ISO strings + const processedData = { ...formData }; + fields.forEach((field) => { + if (field.type === "datetime" && processedData[field.name as keyof typeof processedData]) { + const date = new Date(processedData[field.name as keyof typeof processedData] as string); + processedData[field.name as keyof typeof processedData] = date.toISOString() as any; + } + }); + // If this is a new entry, add an id if (!data) { - formData = { - ...formData, - id: Date.now(), - } as T; + processedData.id = Date.now() as any; } - onSave(formData); + onSave(processedData as T); onClose(); }; @@ -138,6 +151,18 @@ export function GenericEditor({ : "" } /> + ) : field.type === "datetime" ? ( + ) : (