import { useState, useEffect } from 'react' import { getSubscriptions, getUser, startDownload } from '../api' import UserCard from '../components/UserCard' import Spinner from '../components/Spinner' import LoadMoreButton from '../components/LoadMoreButton' const PAGE_SIZE = 50 export default function Users() { const [users, setUsers] = useState([]) const [offset, setOffset] = useState(0) const [loading, setLoading] = useState(true) const [loadingMore, setLoadingMore] = useState(false) const [hasMore, setHasMore] = useState(true) const [error, setError] = useState(null) const [downloadingUsers, setDownloadingUsers] = useState(new Set()) useEffect(() => { loadUsers() }, []) const enrichUsers = (items) => { items.forEach(async (item) => { const profile = await getUser(item.username) if (profile && !profile.error) { setUsers((prev) => prev.map((u) => u.id === item.id ? { ...u, postsCount: profile.postsCount, mediasCount: profile.mediasCount, photosCount: profile.photosCount, videosCount: profile.videosCount } : u ) ) } }) } const loadUsers = async () => { setLoading(true) setError(null) const data = await getSubscriptions(0) if (data.error) { setError(data.error) setLoading(false) return } const items = data.list || data || [] setUsers(items) setOffset(PAGE_SIZE) setHasMore(items.length >= PAGE_SIZE) setLoading(false) enrichUsers(items) } const loadMore = async () => { if (loadingMore) return setLoadingMore(true) const data = await getSubscriptions(offset) if (!data.error) { const items = data.list || data || [] setUsers((prev) => [...prev, ...items]) setOffset((prev) => prev + PAGE_SIZE) setHasMore(items.length >= PAGE_SIZE) enrichUsers(items) } setLoadingMore(false) } const handleDownload = async (userId, username) => { setDownloadingUsers((prev) => new Set([...prev, userId])) const result = await startDownload(userId, null, null, username) if (result.error) { console.error('Download failed:', result.error) } // Remove from downloading set after a brief delay to show feedback setTimeout(() => { setDownloadingUsers((prev) => { const next = new Set(prev) next.delete(userId) return next }) }, 2000) } if (loading) return if (error) { return (

{error}

) } return (

Subscriptions

{users.length} user{users.length !== 1 ? 's' : ''} found

{users.length === 0 ? (

No subscriptions found

Check your auth credentials in Settings

) : ( <>
{[...users].sort((a, b) => (a.name || '').localeCompare(b.name || '')).map((user) => ( ))}
)}
) }