import { useEffect, useRef, useState } from 'react' import { Typography } from '@material-ui/core' import { torrentsHost } from 'utils/Hosts' import TorrentCard from 'components/TorrentCard' import axios from 'axios' import CircularProgress from '@material-ui/core/CircularProgress' import { TorrentListWrapper, CenteredGrid } from 'components/App/style' import { useTranslation } from 'react-i18next' export default function TorrentList() { const { t } = useTranslation() const [torrents, setTorrents] = useState([]) const [isLoading, setIsLoading] = useState(true) const [isOffline, setIsOffline] = useState(true) const timerID = useRef(-1) useEffect(() => { timerID.current = setInterval(() => { // getting torrent list axios .post(torrentsHost(), { action: 'list' }) .then(({ data }) => { // updating torrent list setTorrents(data) setIsOffline(false) }) .catch(() => { // resetting torrent list setTorrents([]) setIsOffline(true) }) .finally(() => setIsLoading(false)) }, 1000) return () => clearInterval(timerID.current) }, []) if (isLoading || isOffline || !torrents.length) { return ( {isLoading ? ( ) : isOffline ? ( {t('Offline')} ) : ( !torrents.length && {t('NoTorrentsAdded')} )} ) } return ( {torrents.map(torrent => ( ))} ) }