import type { Ref } from "react"; import { canDelete, type CardPost } from "@/lib/feed-model"; import { Composer, type ComposerProps } from "./Composer"; import { PostCard } from "./PostCard"; export type FeedStatus = "loading" | "ready" | "error"; export interface FeedViewProps { posts: CardPost[]; status: FeedStatus; loadingMore: boolean; loadMoreFailed: boolean; newCount: number; onRetry: () => void; onShowNew: () => void; onToggleLike?: (post: CardPost) => void; likeBusy?: ReadonlySet; likeErrors?: ReadonlySet; onSignedOut?: () => void; /** The signed-in person's feed user id; delete is offered only on their own posts. */ feedUserId?: string | null; onDelete?: (post: CardPost) => void; deleteBusy?: ReadonlySet; deleteErrors?: ReadonlySet; composer?: ComposerProps; sentinelRef?: Ref; now?: number; } function Spinner() { return ; } export function FeedView(p: FeedViewProps) { if (p.status === "loading") { return (
); } if (p.status === "error") { return (

The feed did not load.

); } return (
{p.composer ? : null} {p.newCount > 0 ? ( ) : null} {p.posts.length === 0 ? (

No posts yet.

) : ( p.posts.map((post) => ) )} {p.loadMoreFailed ? (

The feed did not load.

) : null} {p.loadingMore ? (
) : null}
); }