"use client"; import { Feed, feedAsMap } from "@/components/Feed"; import { useFetchTimeline } from "@/lib/hooks/useTimeline"; import { Tabs, TabsList, TabsTrigger, TabsContent } from "@/components/ui/tabs"; import { useEffect, useState } from "react"; import { useFeedStore } from "@/lib/stores/feeds"; import { useFeeds } from "@/lib/hooks/useFeeds"; import { LoaderCircle } from "lucide-react"; import { useFeedDefsStore } from "@/lib/stores/feedDefs"; import { useAuth } from "@/lib/hooks/useAuth"; import { InfiniteScrollWrapper } from "@/components/InfiniteScrollWrapper"; export default function Home() { const { fetchFeed } = useFetchTimeline(); const feedStore = useFeedStore(); const { isLoading } = useFeeds(); const { feeds, defaultFeed, setDefaultFeed } = useFeedDefsStore(); const { session, loading } = useAuth(); const [feed, setFeed] = useState<"timeline" | string>( defaultFeed ?? "timeline" ); const loadMore = async () => { await fetchFeed(feed); }; useEffect(() => { console.log(`Loading feed: ${feed}`); loadMore(); }, [feed]); if (session == null) { return (

You're not logged in

Log in to see your feeds

); } if (isLoading || loading) return (
); const triggerClass = "shrink-0 cursor-pointer dark:hover:bg-white/5 hover:bg-black/5 transition-colors"; const currentFeedData = feed === "timeline" ? feedStore.timeline : feedStore.customFeeds[feed]; const hasMore = currentFeedData?.cursor !== null && currentFeedData?.cursor !== undefined; const isLoadingMore = currentFeedData?.isLoading || false; return (
{ setFeed("timeline"); setDefaultFeed("timeline"); }} value="timeline" className={triggerClass} > Timeline {Object.entries(feeds).map(([value, it]) => ( { setFeed(value); setDefaultFeed(value); }} key={value} value={value} className={triggerClass} > {it?.displayName} ))} it.post))} isLoading={ feedStore.timeline.isLoading && feedStore.timeline.posts.length === 0 } /> {Object.entries(feeds) .filter((it) => feedStore.customFeeds?.[it[0]] != null) .map(([value]) => ( ))}
); }