nostr-hooks
Version:
React hooks for developing Nostr clients
29 lines • 1.28 kB
JavaScript
import { useEffect } from 'react';
import { useSubscription } from '../../../hooks';
import { useNip29Store } from '../../../nip29/store';
const updateGroupMembers = useNip29Store.getState().updateGroupMembers;
export const useGroupMembers = (relay, groupId) => {
const subId = relay && groupId ? `${relay}-${groupId}-members` : undefined;
const members = useNip29Store((state) => subId && groupId ? state.groups[subId]?.[groupId]?.members : undefined);
const { events, isLoading, createSubscription } = useSubscription(subId);
useEffect(() => {
if (!relay || !groupId || !subId)
return;
const filters = [{ kinds: [39002], '#d': [groupId], limit: 1 }];
const relayUrls = [relay];
const onEvent = (event) => {
const members = event
.getMatchingTags('p')
.filter((pTag) => pTag.length > 1)
.map((pTag) => ({ pubkey: pTag[1] || '' }));
updateGroupMembers(subId, groupId, members);
};
createSubscription({ filters, relayUrls, onEvent });
}, [subId, relay, groupId, createSubscription]);
return {
members,
isLoadingMembers: isLoading,
membersEvents: events,
};
};
//# sourceMappingURL=index.js.map