TAO/client/src/components/Home.tsx

52 lines
1.8 KiB
TypeScript
Raw Normal View History

2023-09-02 07:24:30 +00:00
import React, { useEffect, useState } from 'react';
import PostCard from './PostCard/PostCard';
2023-09-03 13:04:25 +00:00
import NewThreadCard from './PostCard/NewThreadCard';
2023-09-15 07:06:37 +00:00
import { getPow } from '../utils/mine';
2023-09-15 15:56:25 +00:00
import { relayInit, Event } from 'nostr-tools';
import { subGlobalFeed, simpleSub24hFeed } from '../utils/subscriptions';
import { uniqBy } from '../utils/utils';
2023-09-02 07:24:30 +00:00
2023-09-15 15:56:25 +00:00
const Home = () => {
const [events, setEvents] = useState<Event[]>([]); // Initialize state
2023-09-02 07:24:30 +00:00
2023-09-15 15:56:25 +00:00
// Define your callback function for subGlobalFeed
const onEvent = (event: Event, relay: string) => {
setEvents((prevEvents) => [...prevEvents, event]);
2023-09-15 16:58:12 +00:00
console.log(event.id + ' ' + event.kind + ' ' + event.tags);
2023-09-15 15:56:25 +00:00
};
2023-09-15 07:06:37 +00:00
2023-09-15 15:56:25 +00:00
useEffect(() => {
// Subscribe to global feed when the component mounts
subGlobalFeed(onEvent);
2023-09-02 07:24:30 +00:00
2023-09-15 15:56:25 +00:00
// Optionally, return a cleanup function to unsubscribe when the component unmounts
return () => {
// Your cleanup code here
};
}, []); // Empty dependency array means this useEffect runs once when the component mounts
2023-09-02 07:24:30 +00:00
2023-09-15 15:56:25 +00:00
const uniqEvents = events.length > 0 ? uniqBy(events, "id") : [];
2023-09-15 16:58:12 +00:00
const filteredEvents1 = uniqEvents.filter(event => getPow(event.id) > 3);
const filteredEvents2 = filteredEvents1.filter(event => event.kind == 1);
const filteredEvents3 = filteredEvents2.filter(event =>
!event.tags.some(tag => tag[0] === 'p')
);
const sortedEvents = filteredEvents3.sort((a, b) => (b.created_at as any) - (a.created_at as any));
2023-09-02 07:24:30 +00:00
return (
2023-09-03 12:46:07 +00:00
<>
2023-09-14 13:44:13 +00:00
<main className="bg-black text-white min-h-screen">
2023-09-02 07:24:30 +00:00
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 p-4">
2023-09-03 13:04:25 +00:00
<NewThreadCard />
2023-09-15 15:56:25 +00:00
{sortedEvents.sort((a, b) => b.created_at - a.created_at).map((event, index) => (
2023-09-15 07:06:37 +00:00
<PostCard key={index} event={event}/>
2023-09-02 07:24:30 +00:00
))}
</div>
2023-09-03 12:46:07 +00:00
</main>
{/* <Header /> */}
2023-09-03 12:46:07 +00:00
</>
2023-09-02 07:24:30 +00:00
);
};
export default Home;