blob: dec06ca1ccd3d470fb1fc579d55d63268dca7959 [file] [log] [blame] [edit]
import React, { useEffect, useState } from 'react';
import { Table, Spin, Alert } from 'antd';
import {listBtTorrentPeers} from "@/pages/Peer/service";
import {BtTorrentPeer} from "@/pages/Peer/data";
interface PeerTableProps {
torrentId: number;
}
const PeerTable: React.FC<PeerTableProps> = ({ torrentId }) => {
const [loading, setLoading] = useState<boolean>(false);
const [peers, setPeers] = useState<BtTorrentPeer[]>([]);
const [error, setError] = useState<string | null>(null);
useEffect(() => {
const fetchPeers = async () => {
setLoading(true);
try {
const data = await listBtTorrentPeers();
setPeers(data.rows);
} catch (err) {
setError('Failed to load peer data.');
} finally {
setLoading(false);
}
};
fetchPeers();
}, [torrentId]);
const columns = [
{ title: 'Peer Key', dataIndex: 'peerKey', key: 'peerKey' },
{ title: 'IP Address', dataIndex: 'ip', key: 'ip' },
{ title: 'Port', dataIndex: 'port', key: 'port' },
{ title: 'Uploaded', dataIndex: 'uploaded', key: 'uploaded' },
{ title: 'Downloaded', dataIndex: 'downloaded', key: 'downloaded' },
{ title: 'Left', dataIndex: 'left', key: 'left' },
{ title: 'Last Seen', dataIndex: 'lastSeen', key: 'lastSeen' },
];
return (
<div>
{error && <Alert message={error} type="error" />}
{loading ? (
<Spin size="large" />
) : (
<Table<BtTorrentPeer>
columns={columns}
dataSource={peers}
rowKey="peerKey"
pagination={false}
/>
)}
</div>
);
};
export default PeerTable;