import { useContext, useEffect, useState } from "react"; import { AppSettingsProviderContext } from "@renderer/context"; import { PostCard, LoaderSpin } from "@renderer/components"; import { toast, Button, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Separator, } from "@renderer/components//ui"; import { t } from "i18next"; export const Posts = (props: { userId?: string }) => { const { userId } = props; const { webApi } = useContext(AppSettingsProviderContext); const [loading, setLoading] = useState(true); const [type, setType] = useState< "all" | "recording" | "medium" | "story" | "prompt" | "gpt" | "note" >("all"); const [by, setBy] = useState<"all" | "following">("following"); const [posts, setPosts] = useState([]); const [nextPage, setNextPage] = useState(1); const handleDelete = (id: string) => { webApi .deletePost(id) .then(() => { toast.success(t("removeSharingSuccessfully")); setPosts(posts.filter((post) => post.id !== id)); }) .catch((error) => { toast.error(t("removeSharingFailed"), { description: error.message }); }); }; const fetchPosts = async (page: number = nextPage) => { if (!page) return; webApi .posts({ page, items: 10, userId, by, type, }) .then((res) => { if (page === 1) { setPosts(res.posts); } else { setPosts([...posts, ...res.posts]); } setNextPage(res.next); }) .catch((err) => { toast.error(err.message); }) .finally(() => { setLoading(false); }); }; useEffect(() => { fetchPosts(1); }, [type, by]); if (loading) { return ; } return (
{!userId && ( )}
{posts.length === 0 && (
{t("noOneSharedYet")}
)}
{posts.map((post) => (
))}
{nextPage && (
)}
); };