import { ReactNode, useContext, useEffect, useState } from "react"; import { AddTorrentResponse, ErrorDetails as ApiErrorDetails, TorrentInput, } from "../../api-types"; import { APIContext } from "../../context"; import { ErrorWithLabel } from "../../rqbit-web"; import { FileSelectionModal } from "../modal/FileSelectionModal"; import { Button } from "./Button"; export const UploadButton: React.FC<{ onClick: () => void; data: TorrentInput | null; resetData: () => void; children: ReactNode; className?: string; }> = ({ onClick, data, resetData, children, className }) => { const [loading, setLoading] = useState(false); const [listTorrentResponse, setListTorrentResponse] = useState(null); const [listTorrentError, setListTorrentError] = useState(null); const API = useContext(APIContext); // Get the torrent file list if there's data. useEffect(() => { if (data === null) { return; } let t = setTimeout(async () => { setLoading(true); try { const response = await API.uploadTorrent(data, { list_only: true }); setListTorrentResponse(response); } catch (e) { setListTorrentError({ text: "Error listing torrent files", details: e as ApiErrorDetails, }); } finally { setLoading(false); } }, 0); return () => clearTimeout(t); }, [data]); const clear = () => { resetData(); setListTorrentError(null); setListTorrentResponse(null); setLoading(false); }; return ( <> {data && ( )} ); };