import React, { useState, useCallback } from 'react' import axios from 'axios' import PostCard from '../../Feed/PostCard' import PostComposer from '../../Feed/PostComposer' import PostCardSkeleton from '../../Feed/PostCardSkeleton' import FeedSidebar from '../../Feed/FeedSidebar' function EmptyPostsState({ isOwner, username }) { return (

No posts yet

{isOwner ? (

Share updates or showcase your artworks.

) : (

@{username} has not posted anything yet.

)}
) } /** * TabPosts * Profile Posts tab — shows the user's post feed with optional composer (for owner). * * Props: * username string * isOwner boolean * authUser object|null { id, username, name, avatar } * user object full user from ProfileController * profile object * stats object|null * followerCount number * recentFollowers array * socialLinks object * countryName string|null * onTabChange function(tab) */ export default function TabPosts({ username, isOwner, authUser, user, profile, stats, followerCount, recentFollowers, socialLinks, countryName, onTabChange, }) { const [posts, setPosts] = useState([]) const [loading, setLoading] = useState(true) const [page, setPage] = useState(1) const [hasMore, setHasMore] = useState(false) const [loaded, setLoaded] = useState(false) // Fetch on mount React.useEffect(() => { fetchFeed(1) }, [username]) const fetchFeed = async (p = 1) => { setLoading(true) try { const { data } = await axios.get(`/api/posts/profile/${username}`, { params: { page: p } }) 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) } } const handlePosted = useCallback((newPost) => { setPosts((prev) => [newPost, ...prev]) }, []) const handleDeleted = useCallback((postId) => { setPosts((prev) => prev.filter((p) => p.id !== postId)) }, []) return (
{/* ── Main feed column ──────────────────────────────────────────────── */}
{/* Composer (owner only) */} {isOwner && authUser && ( )} {/* Skeletons while loading */} {!loaded && loading && (
{[1, 2, 3].map((i) => )}
)} {/* Empty state */} {loaded && !loading && posts.length === 0 && ( )} {/* Post list */} {posts.length > 0 && (
{posts.map((post) => ( ))}
)} {/* Load more */} {loaded && hasMore && (
)}
{/* ── Sidebar ───────────────────────────────────────────────────────── */}
) }