import { useNavigate, useParams } from "react-router"; import { CommentWithResource, User } from "../network/models"; import { network } from "../network/network"; import showToast from "../components/toast"; import { useEffect, useState } from "react"; import ResourcesView from "../components/resources_view"; import Loading from "../components/loading"; import Pagination from "../components/pagination"; import { MdOutlineArrowRight } from "react-icons/md"; export default function UserPage() { const [user, setUser] = useState(null); const { username } = useParams(); const [page, setPage] = useState(0); useEffect(() => { network.getUserInfo(username || "").then((res) => { if (res.success) { setUser(res.data!); } else { showToast({ message: res.message, type: "error", }) } }); }, [username]); useEffect(() => { document.title = username || "User"; }, [username]); if (!user) { return
; } return
setPage(0)}>Resources
setPage(1)}>Comments
{page === 0 && } {page === 1 && }
; } function UserCard({ user }: { user: User }) { return

{user.username}

{user.bio.trim() !== "" ?

{user.bio.trim()}

:

{user.uploads_count} Resources {user.comments_count} Comments

}
} function UserResources({ user }: { user: User }) { return { return network.getResourcesByUser(user.username, page); }}> } function UserComments({ user }: { user: User }) { const [page, setPage] = useState(1); const [maxPage, setMaxPage] = useState(0); return
{maxPage ?
: null}
} function CommentsList({ username, page, maxPageCallback }: { username: string, page: number, maxPageCallback: (maxPage: number) => void }) { const [comments, setComments] = useState(null); useEffect(() => { network.listCommentsByUser(username, page).then((res) => { if (res.success) { setComments(res.data!); maxPageCallback(res.totalPages || 1); } else { showToast({ message: res.message, type: "error", }); } }); }, [maxPageCallback, page, username]); if (comments == null) { return
} return <> { comments.map((comment) => { return }) } } function CommentTile({ comment }: { comment: CommentWithResource }) { const navigate = useNavigate(); return
{"avatar"}
{comment.user.username}
{new Date(comment.created_at).toLocaleString()}
{comment.content}
{ navigate("/resources/" + comment.resource.id); }}> {comment.resource.title}
}