2024-08-04 17:02:34 -05:00
|
|
|
import { useState, useEffect } from 'react';
|
|
|
|
import { useNDKContext } from '@/context/NDKContext';
|
|
|
|
|
2024-08-04 18:00:59 -05:00
|
|
|
export function useCoursesZapsQuery({ event }) {
|
2024-08-04 17:02:34 -05:00
|
|
|
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);
|
2024-08-04 17:02:34 -05:00
|
|
|
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 17:02:34 -05:00
|
|
|
|
2024-08-04 19:00:26 -05:00
|
|
|
fetchZapsFromNDK();
|
2024-08-04 17:02:34 -05:00
|
|
|
|
2024-08-04 19:00:26 -05:00
|
|
|
return () => {
|
|
|
|
isSubscribed = false;
|
|
|
|
if (subscription) {
|
|
|
|
subscription.stop();
|
2024-08-04 17:02:34 -05:00
|
|
|
}
|
2024-08-04 19:00:26 -05:00
|
|
|
};
|
|
|
|
}, [isClient, ndk, event]);
|
2024-08-04 18:00:59 -05:00
|
|
|
|
2024-08-04 19:00:26 -05:00
|
|
|
return { zaps, zapsLoading, zapsError };
|
2024-08-04 18:00:59 -05:00
|
|
|
}
|