46 lines
1.0 KiB
TypeScript
46 lines
1.0 KiB
TypeScript
import { NDKEvent, NDKFilter } from '@nostr-dev-kit/ndk';
|
|
import { useEffect, useRef } from 'react';
|
|
|
|
import { useNDK } from '@libs/ndk/provider';
|
|
import { createNote } from '@libs/storage';
|
|
|
|
import { useAccount } from '@utils/hooks/useAccount';
|
|
|
|
export function useNewsfeed() {
|
|
const sub = useRef(null);
|
|
const now = useRef(Math.floor(Date.now() / 1000));
|
|
|
|
const { ndk } = useNDK();
|
|
const { status, account } = useAccount();
|
|
|
|
useEffect(() => {
|
|
if (status === 'success' && account) {
|
|
const filter: NDKFilter = {
|
|
kinds: [1, 6],
|
|
authors: account.follows,
|
|
since: now.current,
|
|
};
|
|
|
|
sub.current = ndk.subscribe(filter, { closeOnEose: false });
|
|
|
|
sub.current.addListener('event', (event: NDKEvent) => {
|
|
// add to db
|
|
createNote(
|
|
event.id,
|
|
event.pubkey,
|
|
event.kind,
|
|
event.tags,
|
|
event.content,
|
|
event.created_at
|
|
);
|
|
});
|
|
}
|
|
|
|
return () => {
|
|
if (sub.current) {
|
|
sub.current.stop();
|
|
}
|
|
};
|
|
}, [status]);
|
|
}
|