import classNames from "classnames"; import { useCallback, useEffect, useMemo, useRef, useState } from "react"; export type LoadFileFormProps = { profiles: string[]; servers: string[]; loading: boolean; defaultProfile?: string; defaultServer?: string; onSubmit?: (csvFile: File, profile: string, server: string) => Promise; } type Form = { files?: FileList; profile?: string; server?: string; }; export default function LoadFileForm({ profiles, servers, defaultProfile, defaultServer, onSubmit, loading }: LoadFileFormProps) { const fileInput = useRef(null); const [formData, setFormData] = useState
({}); useEffect(() => { setFormData({ ...formData, profile: defaultProfile, server: defaultServer }); }, [setFormData, defaultProfile, defaultServer]); const selectedFile = useMemo(() => { if ((formData.files?.length ?? 0) > 0) { return formData.files?.[0]; } return undefined; }, [formData.files]); const isValid = useMemo(() => selectedFile && formData.profile && formData.server, [formData, selectedFile]); const handleSubmit = useCallback(async (e: React.FormEvent) => { e.preventDefault(); if (!selectedFile || !formData.profile || !formData.server) { return; } onSubmit?.(selectedFile, formData.profile, formData.server); }, [formData, selectedFile, onSubmit]); return (
); }