import React, { useState, useEffect, useCallback } from 'react'
import { usePage } from '@inertiajs/react'
import axios from 'axios'
import PostCard from '../../Components/Feed/PostCard'
import PostCardSkeleton from '../../Components/Feed/PostCardSkeleton'
const FILTER_OPTIONS = [
{ value: 'all', label: 'All' },
{ value: 'shares', label: 'Artwork Shares' },
{ value: 'uploads', label: 'New Uploads' },
{ value: 'text', label: 'Text Posts' },
]
function EmptyFollowingState() {
return (
Nothing here yet
Follow some creators to see their posts here. Discover amazing artwork on{' '}
Trending.
)
}
export default function FollowingFeed() {
const { props } = usePage()
const { auth } = props
const authUser = auth?.user ?? null
const [posts, setPosts] = useState([])
const [loading, setLoading] = useState(true)
const [page, setPage] = useState(1)
const [hasMore, setHasMore] = useState(false)
const [loaded, setLoaded] = useState(false)
const [filter, setFilter] = useState('all')
const fetchFeed = useCallback(async (p = 1, f = filter) => {
setLoading(true)
try {
const { data } = await axios.get('/api/posts/following', {
params: { page: p, filter: f },
})
setPosts((prev) => p === 1 ? data.data : [...prev, ...data.data])
setHasMore(data.meta.current_page < data.meta.last_page)
setPage(p)
} catch {
//
} finally {
setLoading(false)
setLoaded(true)
}
}, [filter])
useEffect(() => {
fetchFeed(1, filter)
}, [filter])
const handleFilterChange = (f) => {
if (f === filter) return
setFilter(f)
setPosts([])
setLoaded(false)
setPage(1)
}
const handleDeleted = useCallback((postId) => {
setPosts((prev) => prev.filter((p) => p.id !== postId))
}, [])
return (
{/* ── Page header ────────────────────────────────────────────────────── */}
{/* Filter chips */}
{FILTER_OPTIONS.map((f) => (
))}
{/* ── Feed ────────────────────────────────────────────────────────────── */}
{/* Loading skeletons */}
{!loaded && loading && (
<>
>
)}
{/* Empty */}
{loaded && !loading && posts.length === 0 &&
}
{/* Posts */}
{posts.map((post) => (
))}
{/* Load more */}
{loaded && hasMore && (
)}
)
}