import { useContext, useState } from "react"; import { TorrentStats } from "../../api-types"; import { APIContext, RefreshTorrentStatsContext } from "../../context"; import { IconButton } from "./IconButton"; import { DeleteTorrentModal } from "../modal/DeleteTorrentModal"; import { FaCog, FaPause, FaPlay, FaTrash } from "react-icons/fa"; import { useErrorStore } from "../../stores/errorStore"; export const TorrentActions: React.FC<{ id: number; statsResponse: TorrentStats; extendedView: boolean; setExtendedView: (extendedView: boolean) => void; }> = ({ id, statsResponse, extendedView, setExtendedView }) => { let state = statsResponse.state; let [disabled, setDisabled] = useState(false); let [deleting, setDeleting] = useState(false); let refreshCtx = useContext(RefreshTorrentStatsContext); const canPause = state == "live"; const canUnpause = state == "paused" || state == "error"; const canConfigure = state == "paused" || state == "live"; const setCloseableError = useErrorStore((state) => state.setCloseableError); const API = useContext(APIContext); const unpause = () => { setDisabled(true); API.start(id) .then( () => { refreshCtx.refresh(); }, (e) => { setCloseableError({ text: `Error starting torrent id=${id}`, details: e, }); }, ) .finally(() => setDisabled(false)); }; const pause = () => { setDisabled(true); API.pause(id) .then( () => { refreshCtx.refresh(); }, (e) => { setCloseableError({ text: `Error pausing torrent id=${id}`, details: e, }); }, ) .finally(() => setDisabled(false)); }; const startDeleting = () => { setDisabled(true); setDeleting(true); }; const cancelDeleting = () => { setDisabled(false); setDeleting(false); }; return (
{canUnpause && ( )} {canPause && ( )} {canConfigure && ( setExtendedView(!extendedView)} disabled={disabled} > )}
); };