import { useEffect, useState } from "@theia/core/shared/react"; import * as React from "react"; import { createUseStyles } from "react-jss"; import { defaultJobGroupName, RCloneEndPoints } from "../../constants"; import fetchRClone from "../../helpers/fetchRClone"; import { isObjectEmpty } from "../../helpers/valueHelpers"; import useInterval from "../../hooks/useInterval"; import { IRCloneStats } from "../StorjWidget/StorjWidget.interface"; import { useCommonStyles } from "../StorjWidget/StorjWidget.style"; import StatRow from "./components/StatRow"; const useStyles = createUseStyles({ statsContainer: { display: "flex", flexDirection: "column", }, }); type Props = { jobId?: number; }; function Stats(props: Props) { const { jobId } = props; const [stats, setStats] = useState({} as IRCloneStats); const [isLoading, setIsLoading] = useState(false); const classes = useStyles(); const commonClasses = useCommonStyles(); useEffect(() => { getStats(); }, [jobId]); useInterval(() => { getStats(); }, 2000); const getStats = async () => { if (!(jobId || jobId === 0)) { return; } const options = { body: JSON.stringify({ group: jobId ? `${defaultJobGroupName}/${jobId}` : "", }), }; if (!stats) { setIsLoading(true); } try { const res = await fetchRClone(RCloneEndPoints.stats, options); const json = await res.json(); setStats(json); } catch (error) { console.error(error); } finally { setIsLoading(false); } }; if (isLoading) { return (
); } if (isObjectEmpty(stats)) { return null; } return (

Job Stats

{stats.transferring?.length > 0 && (

Files:

{stats.transferring?.map((item, index) => { return ( ); })}
)}
); } export default Stats;