nostr-hooks
Version:
React hooks for developing Nostr clients
40 lines • 1.76 kB
JavaScript
import { useEffect } from 'react';
import { useSubscription } from '../../../hooks';
import { useNip29Store } from '../../../nip29/store';
const updateGroupMetadata = useNip29Store.getState().updateGroupMetadata;
export const useGroupMetadata = (relay, groupId) => {
const subId = relay && groupId ? `${relay}-${groupId}-metadata` : undefined;
const metadata = useNip29Store((state) => subId && groupId ? state.groups[subId]?.[groupId]?.metadata : undefined);
const { events, isLoading, createSubscription } = useSubscription(subId);
useEffect(() => {
if (!relay || !groupId || !subId)
return;
const filters = [{ kinds: [39000], '#d': [groupId], limit: 1 }];
const relayUrls = [relay];
const onEvent = (event) => {
const { dTag } = event;
if (!dTag)
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, groupId, createSubscription]);
return {
metadata,
isLoadingMetadata: isLoading,
metadataEvents: events,
};
};
//# sourceMappingURL=index.js.map