plebdevs/src/hooks/nostrQueries/zaps/useCoursesZapsQuery.js

63 lines
1.8 KiB
JavaScript
Raw Normal View History

import { useState, useEffect } from 'react';
import { useNDKContext } from '@/context/NDKContext';
export function useCoursesZapsQuery({ event }) {
const [isClient, setIsClient] = useState(false);
2024-08-04 19:00:26 -05:00
const [zaps, setZaps] = useState([]);
const [zapsLoading, setZapsLoading] = useState(true);
const [zapsError, setZapsError] = useState(null);
const ndk = useNDKContext();
useEffect(() => {
setIsClient(true);
}, []);
2024-08-04 19:00:26 -05:00
useEffect(() => {
if (!isClient || !ndk || !event) return;
let subscription = null;
let isSubscribed = true;
const fetchZapsFromNDK = async () => {
try {
await ndk.connect();
const uniqueEvents = new Set();
const filters = [
{ kinds: [9735], "#e": [event.id] },
{ kinds: [9735], "#a": [`${event.kind}:${event.id}:${event.d}`] }
];
subscription = ndk.subscribe(filters);
subscription.on('event', (zap) => {
if (isSubscribed) {
uniqueEvents.add(zap);
setZaps(Array.from(uniqueEvents));
}
});
subscription.on('eose', () => {
setZaps(Array.from(uniqueEvents));
setZapsLoading(false);
});
} catch (error) {
setZapsError('Error fetching zaps from NDK: ' + error);
setZapsLoading(false);
}
};
2024-08-04 19:00:26 -05:00
fetchZapsFromNDK();
2024-08-04 19:00:26 -05:00
return () => {
isSubscribed = false;
if (subscription) {
subscription.stop();
}
2024-08-04 19:00:26 -05:00
};
}, [isClient, ndk, event]);
2024-08-04 19:00:26 -05:00
return { zaps, zapsLoading, zapsError };
}