import { FC, useEffect, useState } from 'react'; import { Pagination, Spin } from 'antd'; import { ErrorBoundary } from 'react-error-boundary'; import { Follower } from '../../../../interfaces/follower'; import { SingleFollower } from '../SingleFollower/SingleFollower'; import styles from './FollowerCollection.module.scss'; import { FollowButton } from '../../../action-buttons/FollowButton'; import { ComponentError } from '../../ComponentError/ComponentError'; export type FollowerCollectionProps = { name: string; onFollowButtonClick: () => void; }; export const FollowerCollection: FC = ({ name, onFollowButtonClick }) => { const ENDPOINT = '/api/followers'; const ITEMS_PER_PAGE = 24; const [followers, setFollowers] = useState([]); const [total, setTotal] = useState(0); const [page, setPage] = useState(1); const [loading, setLoading] = useState(true); const getFollowers = async () => { try { setLoading(true); const response = await fetch( `${ENDPOINT}?offset=${(page - 1) * ITEMS_PER_PAGE}&limit=${ITEMS_PER_PAGE}`, ); const data = await response.json(); const { results, total: totalResults } = data; setFollowers(results); setTotal(totalResults); setLoading(false); } catch (error) { console.error(error); } }; useEffect(() => { getFollowers(); }, [page]); const noFollowers = (

Be the first follower!

{name !== 'Owncast' ? name : 'This server'} is a part of the{' '} Fediverse, an interconnected network of independent users and servers.

By following {name !== 'Owncast' ? name : 'this server'} you'll be able to get updates from the stream, share it with others, and show your appreciation when it goes live, all from your own Fediverse account.

); if (!followers?.length && !loading) { return noFollowers; } return ( ( )} >
{followers.map(follower => ( ))}
{ setPage(p); }} hideOnSinglePage />
); };