nostr-hooks
Version:
React hooks for developing Nostr clients
33 lines • 1.93 kB
JavaScript
import { useCallback, useEffect, useMemo } from 'react';
import { useStore } from '../../store';
import { useNdk } from '../use-ndk';
/**
* Custom hook to manage NDK subscriptions.
*
* @param subId - The subscription ID. This is used to identify the subscription internally.
* @returns An object containing the subscription details and methods to manage the subscription.
* @property createSubscription - Function to create a new subscription.
* @property removeSubscription - Function to remove the subscription.
* @property loadMore - Function to load more events for an existing subscription.
* @property isLoading - Boolean indicating if the subscription is currently loading.
*/
export const useSubscription = (subId) => {
const { ndk } = useNdk();
const subscription = useStore((state) => (subId ? state.subscriptions[subId] : undefined));
const _createSubscription = useStore((state) => state.createSubscription);
const _removeSubscription = useStore((state) => state.removeSubscription);
const _loadMore = useStore((state) => state.loadMore);
const createSubscription = useCallback((params) => ndk && subId ? _createSubscription({ ...params, subId }) : null, [ndk, _createSubscription, subId]);
const removeSubscription = useCallback(() => _removeSubscription(subId), [_removeSubscription, subId]);
const loadMore = useCallback((limit, since) => subId && ndk && _loadMore(subId, limit, since), [ndk, _loadMore, subId]);
const isLoading = useMemo(() => subscription
? (!subscription.events || subscription.events.length == 0) && !subscription.eose
: false, [subscription, subscription?.events, subscription?.eose]);
useEffect(() => {
return () => {
removeSubscription();
};
}, [removeSubscription]);
return { ...subscription, createSubscription, removeSubscription, loadMore, isLoading };
};
//# sourceMappingURL=index.js.map