import React, { useEffect, useState } from 'react' import axios from 'axios' import FollowButton from './FollowButton' export default function SuggestedUsersWidget({ title = 'Suggested Users', limit = 4, isLoggedIn = false, excludeUsername = null, initialUsers = null, }) { const [users, setUsers] = useState(Array.isArray(initialUsers) ? initialUsers : []) const [loading, setLoading] = useState(!Array.isArray(initialUsers) && isLoggedIn) useEffect(() => { if (!isLoggedIn || Array.isArray(initialUsers)) { setLoading(false) return } let cancelled = false axios.get('/api/users/suggestions', { params: { limit } }) .then(({ data }) => { if (cancelled) return const nextUsers = Array.isArray(data?.data) ? data.data : [] setUsers(nextUsers) }) .catch(() => { if (!cancelled) setUsers([]) }) .finally(() => { if (!cancelled) setLoading(false) }) return () => { cancelled = true } }, [initialUsers, isLoggedIn, limit]) const visibleUsers = users .filter((user) => user?.username && user.username !== excludeUsername) .slice(0, limit) if (!isLoggedIn) return null if (!loading && visibleUsers.length === 0) return null return (
@{user.username}
{user.context?.follower_overlap?.label || user.context?.shared_following?.label || user.reason}