import React, { useContext, useState } from "react"; import { AddTorrentResponse, ErrorDetails, TorrentDetails, } from "../../api-types"; import { FileListInput } from "../FileListInput"; import { Modal } from "./Modal"; import { ModalBody } from "./ModalBody"; import { ModalFooter } from "./ModalFooter"; import { Button } from "../buttons/Button"; import { Spinner } from "../Spinner"; import { APIContext, RefreshTorrentStatsContext } from "../../context"; import { ErrorComponent } from "../ErrorComponent"; import { ErrorWithLabel } from "../../stores/errorStore"; export const TorrentSettingsModal: React.FC<{ id: number; show: boolean; onHide: () => void; details: TorrentDetails; }> = ({ id, show, onHide, details }) => { let initialSelectedFiles = new Set(); let refreshCtx = useContext(RefreshTorrentStatsContext); details.files.forEach((f, i) => { if (f.included) { initialSelectedFiles.add(i); } }); const API = useContext(APIContext); const [selectedFiles, setSelectedFiles] = useState>(initialSelectedFiles); const [saving, setSaving] = useState(false); const [error, setError] = useState(null); const close = () => { setSelectedFiles(initialSelectedFiles); onHide(); }; const handleSave = () => { setSaving(true); API.updateOnlyFiles(id, Array.from(selectedFiles)).then( () => { setSaving(false); refreshCtx.refresh(); close(); setError(null); }, (e) => { setSaving(false); setError({ text: "Error configuring torrent", details: e as ErrorDetails, }); }, ); }; return ( {saving && } ); };