2023-10-15 10:58:44 -04:00
|
|
|
"use client";
|
|
|
|
import KindCard from "@/components/KindCard";
|
|
|
|
import { cn } from "@/lib/utils";
|
|
|
|
import Spinner from "@/components/spinner";
|
|
|
|
import { Event } from "nostr-tools";
|
|
|
|
import useEvents from "@/lib/hooks/useEvents";
|
2023-10-28 11:07:50 -04:00
|
|
|
import { NDKEvent, type NDKFilter } from "@nostr-dev-kit/ndk";
|
2023-10-15 10:58:44 -04:00
|
|
|
type FeedProps = {
|
|
|
|
filter?: NDKFilter;
|
2023-10-28 11:07:50 -04:00
|
|
|
secondaryFilter?: (event: NDKEvent) => Boolean;
|
2023-10-15 10:58:44 -04:00
|
|
|
className?: string;
|
|
|
|
loader?: () => JSX.Element;
|
2023-10-17 18:21:48 -04:00
|
|
|
empty?: () => JSX.Element;
|
2023-10-15 10:58:44 -04:00
|
|
|
};
|
|
|
|
|
2023-10-17 18:21:48 -04:00
|
|
|
export default function Feed({
|
|
|
|
filter,
|
2023-10-28 11:07:50 -04:00
|
|
|
secondaryFilter,
|
2023-10-17 18:21:48 -04:00
|
|
|
loader: Loader,
|
|
|
|
empty: Empty,
|
|
|
|
}: FeedProps) {
|
2023-10-15 10:58:44 -04:00
|
|
|
const { events, isLoading } = useEvents({
|
|
|
|
filter: { ...filter },
|
|
|
|
});
|
|
|
|
if (isLoading) {
|
|
|
|
if (Loader) {
|
|
|
|
return <Loader />;
|
|
|
|
}
|
|
|
|
return <Spinner />;
|
|
|
|
}
|
2023-10-17 18:21:48 -04:00
|
|
|
if (Empty && events.length === 0) {
|
|
|
|
return <Empty />;
|
|
|
|
}
|
2023-10-28 11:07:50 -04:00
|
|
|
if (secondaryFilter) {
|
|
|
|
return (
|
|
|
|
<>
|
|
|
|
{events.filter(secondaryFilter).map((e) => {
|
|
|
|
const event = e.rawEvent() as Event;
|
|
|
|
return <KindCard key={e.id} {...event} />;
|
|
|
|
})}
|
|
|
|
</>
|
|
|
|
);
|
|
|
|
}
|
2023-10-15 10:58:44 -04:00
|
|
|
return (
|
|
|
|
<>
|
|
|
|
{events.map((e) => {
|
|
|
|
const event = e.rawEvent() as Event;
|
|
|
|
return <KindCard key={e.id} {...event} />;
|
|
|
|
})}
|
|
|
|
</>
|
|
|
|
);
|
|
|
|
}
|