UNPKG

nostr-hooks

Version:
49 lines 2.06 kB
import { useEffect, useMemo } from 'react'; import { useSubscription } from '../../../hooks'; import { useNip29Store } from '../../store'; const updateGroupMetadata = useNip29Store.getState().updateGroupMetadata; export const useAllGroupsMetadataRecords = (relay) => { const subId = relay ? `${relay}-allGroups-metadata` : undefined; const allGroups = useNip29Store((state) => (subId ? state.groups[subId] : undefined)); const metadataRecords = useMemo(() => allGroups ? Object.entries(allGroups).reduce((acc, [groupId, group]) => { if (group.metadata) acc[groupId] = group.metadata; return acc; }, {}) : {}, [allGroups]); const { events, isLoading, hasMore, createSubscription, loadMore } = useSubscription(subId); useEffect(() => { if (!relay || !subId) return; const filters = [{ kinds: [39000], limit: 100 }]; const relayUrls = [relay]; const onEvent = (event) => { const { dTag: groupId } = event; if (!groupId) return; const name = event.getMatchingTags('name')?.[0]?.[1] || '<unnamed>'; const picture = event.getMatchingTags('picture')?.[0]?.[1] || ''; const about = event.getMatchingTags('about')?.[0]?.[1] || ''; const isOpen = event.getMatchingTags('open').length > 0 ? true : false; const isPublic = event.getMatchingTags('public').length > 0 ? true : false; const metadata = { about, isOpen, isPublic, name, picture, }; updateGroupMetadata(subId, groupId, metadata); }; createSubscription({ filters, relayUrls, onEvent }); }, [subId, relay, createSubscription]); return { metadataRecords, isLoadingMetadata: isLoading, metadataEvents: events, loadMoreMetadata: loadMore, hasMoreMetadata: hasMore, }; }; //# sourceMappingURL=index.js.map