This commit is contained in:
Shusui MOYATANI
2023-03-01 00:31:04 +09:00
parent 57bc321436
commit 471b03eb1d
20 changed files with 279 additions and 118 deletions

View File

@@ -0,0 +1,51 @@
import { type Accessor } from 'solid-js';
import { type Event as NostrEvent } from 'nostr-tools/event';
import { type CreateQueryResult } from '@tanstack/solid-query';
import useCachedEvents from '@/clients/useCachedEvents';
export type UseEventProps = {
relayUrls: string[];
eventId: string;
};
export type UseEvent = {
reactions: Accessor<NostrEvent[]>;
reactionsGroupedByContent: Accessor<Map<string, NostrEvent[]>>;
isReactedBy(pubkey: string): boolean;
query: CreateQueryResult<NostrEvent[]>;
};
const useReactions = (propsProvider: () => UseEventProps): UseEvent => {
const query = useCachedEvents(() => {
const { relayUrls, eventId } = propsProvider();
return {
relayUrls,
filters: [
{
'#e': [eventId],
kinds: [7],
},
],
};
});
const reactions = () => query.data ?? [];
const reactionsGroupedByContent = () => {
const result = new Map<string, NostrEvent[]>();
reactions().forEach((event) => {
const events = result.get(event.content) ?? [];
events.push(event);
result.set(event.content, events);
});
return result;
};
const isReactedBy = (pubkey: string): boolean =>
reactions().findIndex((event) => event.pubkey === pubkey) !== -1;
return { reactions, reactionsGroupedByContent, isReactedBy, query };
};
export default useReactions;