import { useState, type DragEvent, type FormEvent } from "react"; import { useNavigate } from "react-router-dom"; import { formatSize } from "../api"; import { UploadProgress, useUploads } from "../uploads"; import { ErrorNote, PageHeader } from "../ui/Bits"; import { F95Fetch } from "../ui/F95Fetch"; import { Icon } from "../ui/Icon"; const ARCHIVE = /\.(zip|7z|rar|tar|gz|tgz|bz2|xz)$/i; export function NewGame() { const navigate = useNavigate(); const [title, setTitle] = useState(""); const [description, setDescription] = useState(""); const [tags, setTags] = useState(""); const [file, setFile] = useState(null); const [over, setOver] = useState(false); const { start } = useUploads(); const [error, setError] = useState(""); const pick = (f: File | null | undefined) => { if (!f) return; if (!ARCHIVE.test(f.name)) { setError("Нужен архив: zip, 7z, rar или tar"); return; } setError(""); setFile(f); }; const onDrop = (e: DragEvent) => { e.preventDefault(); setOver(false); pick(e.dataTransfer.files[0]); }; const submit = (e: FormEvent) => { e.preventDefault(); if (!file) return; setError(""); start({ file, title, description, tags: tags.split(",").map((t) => t.trim()).filter(Boolean) }); setFile(null); setTitle(""); setDescription(""); setTags(""); }; return (
{ setTitle(m.title); setDescription(m.description); setTags(m.tags.join(", ")); }} />