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
|
|
|
}
|