32 lines
896 B
TypeScript
32 lines
896 B
TypeScript
![]() |
import { useNostr } from '@nostrify/react';
|
||
|
import { useQuery } from '@tanstack/react-query';
|
||
|
import { NostrEvent, NostrFilter } from '@nostrify/nostrify';
|
||
|
|
||
|
// Hook for fetching Nostr events based on filters
|
||
|
export function useNostrQuery(filters: NostrFilter[], options = {}) {
|
||
|
const { nostr } = useNostr();
|
||
|
|
||
|
return useQuery<NostrEvent[]>({
|
||
|
queryKey: ['nostr', JSON.stringify(filters)],
|
||
|
queryFn: async () => {
|
||
|
if (!nostr) return [];
|
||
|
return await nostr.query(filters);
|
||
|
},
|
||
|
...options,
|
||
|
});
|
||
|
}
|
||
|
|
||
|
// Hook for publishing Nostr events
|
||
|
export function useNostrPublish() {
|
||
|
const { nostr } = useNostr();
|
||
|
|
||
|
const publish = async (event: NostrEvent) => {
|
||
|
if (!nostr) throw new Error('Nostr context not available');
|
||
|
return await nostr.event(event);
|
||
|
};
|
||
|
|
||
|
return { publish };
|
||
|
}
|
||
|
|
||
|
// Export the useNostr hook as well for direct access to the pool
|
||
|
export { useNostr };
|