"use client" import { Button } from "@cms/ui/button" import { type FormEvent, useState } from "react" type MediaType = "artwork" | "banner" | "promotion" | "video" | "gif" | "generic" const ACCEPT_BY_TYPE: Record = { artwork: "image/jpeg,image/png,image/webp,image/avif,image/gif", banner: "image/jpeg,image/png,image/webp,image/avif", promotion: "image/jpeg,image/png,image/webp,image/avif,image/gif,video/mp4,video/webm", video: "video/mp4,video/webm,video/quicktime", gif: "image/gif", generic: "image/*,video/*", } export function MediaUploadForm() { const [isSubmitting, setIsSubmitting] = useState(false) const [error, setError] = useState(null) const [mediaType, setMediaType] = useState("artwork") async function handleSubmit(event: FormEvent) { event.preventDefault() const form = event.currentTarget const formData = new FormData(form) setError(null) setIsSubmitting(true) try { const response = await fetch("/api/media/upload", { method: "POST", body: formData, }) if (!response.ok) { const payload = (await response.json().catch(() => null)) as { message?: string } | null setError(payload?.message ?? "Upload failed. Please verify file and metadata.") return } const payload = (await response.json().catch(() => null)) as { notice?: string } | null const notice = payload?.notice ?? "Media uploaded." window.location.href = `/media?notice=${encodeURIComponent(notice)}` } catch { setError("Upload request failed. Please retry.") } finally { setIsSubmitting(false) } } return (
{error ? (

{error}

) : null}