diff --git a/client/src/components/admin/ProgramFormModal.tsx b/client/src/components/admin/ProgramFormModal.tsx index 3c353fd..1fcc7b2 100644 --- a/client/src/components/admin/ProgramFormModal.tsx +++ b/client/src/components/admin/ProgramFormModal.tsx @@ -105,6 +105,9 @@ export function ProgramFormModal({ const [eventStartsAt, setEventStartsAt] = useState(""); const [eventEndsAt, setEventEndsAt] = useState(""); const [prizeTierRows, setPrizeTierRows] = useState([]); + const [galleryUrl, setGalleryUrl] = useState(""); + type HonoraryMentionRow = { name: string; videoUrl: string; githubUrl: string }; + const [honoraryMentionRows, setHonoraryMentionRows] = useState([]); const [errors, setErrors] = useState>({}); const [submitting, setSubmitting] = useState(false); const [uploadingCover, setUploadingCover] = useState(false); @@ -129,6 +132,14 @@ export function ProgramFormModal({ setEventStartsAt(isoToLocal(program.eventStartsAt)); setEventEndsAt(isoToLocal(program.eventEndsAt)); setPrizeTierRows(tierRowsFromProgram(program)); + setGalleryUrl(program.galleryUrl || ""); + setHonoraryMentionRows( + (program.honoraryMentions ?? []).map((m) => ({ + name: m.name, + videoUrl: m.videoUrl ?? "", + githubUrl: m.githubUrl ?? "", + })), + ); } else { setName(""); setSlug(""); @@ -145,6 +156,8 @@ export function ProgramFormModal({ setEventStartsAt(""); setEventEndsAt(""); setPrizeTierRows(tierRowsFromProgram(null)); + setGalleryUrl(""); + setHonoraryMentionRows([]); } setErrors({}); }, [open, program]); @@ -174,6 +187,9 @@ export function ProgramFormModal({ if (coverImageUrl.trim() && !/^https?:\/\//i.test(coverImageUrl.trim())) { e.coverImageUrl = "Must start with http:// or https://"; } + if (galleryUrl.trim() && !/^https?:\/\//i.test(galleryUrl.trim())) { + e.galleryUrl = "Must start with http:// or https://"; + } if (applicationsOpenAt && applicationsCloseAt) { if (new Date(applicationsOpenAt).getTime() >= new Date(applicationsCloseAt).getTime()) { e.applicationsCloseAt = "Close date must be after open date."; @@ -254,6 +270,14 @@ export function ProgramFormModal({ prizeTiers: prizeTierRows .map((r) => ({ amount: Number(r.amount), currency: r.currency.trim(), label: r.label.trim() })) .filter((t) => Number.isInteger(t.amount) && t.amount > 0 && t.currency), + galleryUrl: galleryUrl.trim() || null, + honoraryMentions: honoraryMentionRows + .filter((m) => m.name.trim()) + .map((m) => ({ + name: m.name.trim(), + videoUrl: m.videoUrl.trim() || null, + githubUrl: m.githubUrl.trim() || null, + })), }; const res = editing @@ -354,6 +378,29 @@ export function ProgramFormModal({ + {status === "completed" && ( +
+ {!galleryUrl.trim() && ( +

+

+ )} + {honoraryMentionRows.length === 0 && ( +

+

+ )} + {(!eventStartsAt || !eventEndsAt) && ( +

+

+ )} +
+ )} +