snort/src/pages/feed/TimelineFeed.js

38 lines
1.1 KiB
JavaScript
Raw Normal View History

2022-12-28 23:28:28 +00:00
import { useContext, useEffect, useState } from "react";
2022-12-18 14:51:47 +00:00
import { NostrContext } from "../../index";
import EventKind from "../../nostr/EventKind";
import { Subscriptions } from "../../nostr/Subscriptions";
2022-12-28 23:28:28 +00:00
export default function useTimelineFeed(pubKeys) {
2022-12-18 14:51:47 +00:00
const system = useContext(NostrContext);
2022-12-28 23:28:28 +00:00
const [notes, setNotes] = useState([]);
2022-12-18 14:51:47 +00:00
useEffect(() => {
2022-12-28 23:28:28 +00:00
if (system && pubKeys.length > 0) {
2022-12-18 14:51:47 +00:00
const sub = new Subscriptions();
2022-12-28 23:28:28 +00:00
sub.Authors = new Set(pubKeys);
2022-12-18 14:51:47 +00:00
sub.Kinds.add(EventKind.TextNote);
sub.Limit = 10;
sub.OnEvent = (e) => {
2022-12-28 23:28:28 +00:00
setNotes(n => {
if (Array.isArray(n) && !n.some(a => a.id === e.id)) {
return [
...n,
e
]
} else {
return n;
}
});
2022-12-18 14:51:47 +00:00
};
2022-12-28 23:28:28 +00:00
system.AddSubscription(sub);
return () => {
system.RemoveSubscription(sub.Id);
};
2022-12-18 14:51:47 +00:00
}
2022-12-28 23:28:28 +00:00
}, [system, pubKeys]);
2022-12-18 14:51:47 +00:00
2022-12-28 23:28:28 +00:00
return { notes };
2022-12-18 14:51:47 +00:00
}