37 lines
1.3 KiB
JavaScript
37 lines
1.3 KiB
JavaScript
import { useContext, useEffect } from "react";
|
|
import { useDispatch, useSelector } from "react-redux";
|
|
import { NostrContext } from "..";
|
|
import Event from "../nostr/Event";
|
|
import EventKind from "../nostr/EventKind";
|
|
import { Subscriptions } from "../nostr/Subscriptions";
|
|
import { setFollows, setRelays } from "../state/Login";
|
|
|
|
/**
|
|
* Managed loading data for the current logged in user
|
|
*/
|
|
export default function useLoginFeed() {
|
|
const dispatch = useDispatch();
|
|
const system = useContext(NostrContext);
|
|
const pubKey = useSelector(s => s.login.publicKey);
|
|
|
|
useEffect(() => {
|
|
if (system && pubKey) {
|
|
let sub = new Subscriptions();
|
|
sub.Authors.add(pubKey);
|
|
sub.Kinds.add(EventKind.ContactList);
|
|
sub.OnEvent = (e) => {
|
|
let ev = Event.FromObject(e);
|
|
if (ev.Content !== "") {
|
|
let relays = JSON.parse(ev.Content);
|
|
dispatch(setRelays(relays));
|
|
}
|
|
let pTags = ev.Tags.filter(a => a.Key === "p").map(a => a.PubKey);
|
|
dispatch(setFollows(pTags));
|
|
}
|
|
system.AddSubscription(sub);
|
|
return () => system.RemoveSubscription(sub.Id);
|
|
}
|
|
}, [system, pubKey]);
|
|
|
|
return {};
|
|
} |