diff --git a/src/components/Explore.tsx b/src/components/Explore.tsx index 68db0bc6..ab01537c 100644 --- a/src/components/Explore.tsx +++ b/src/components/Explore.tsx @@ -197,7 +197,7 @@ const Explore: React.FC = ({ relayPool, eventStore, settings, acti } loadData() - }, [relayPool, activeAccount, blogPosts.length, highlights.length, refreshTrigger]) + }, [relayPool, activeAccount, blogPosts.length, highlights.length, refreshTrigger, eventStore, settings]) // Pull-to-refresh const pullToRefreshState = usePullToRefresh(exploreContainerRef, { diff --git a/src/services/profileService.ts b/src/services/profileService.ts index 5c09e9b2..4ada00ba 100644 --- a/src/services/profileService.ts +++ b/src/services/profileService.ts @@ -1,5 +1,5 @@ -import { RelayPool, completeOnEose, onlyEvents, mapEventsToStore } from 'applesauce-relay' -import { lastValueFrom, merge, Observable, takeUntil, timer, toArray } from 'rxjs' +import { RelayPool, completeOnEose, onlyEvents } from 'applesauce-relay' +import { lastValueFrom, merge, Observable, takeUntil, timer, toArray, tap } from 'rxjs' import { NostrEvent } from 'nostr-tools' import { IEventStore } from 'applesauce-core' import { prioritizeLocalRelays, partitionRelays } from '../utils/helpers' @@ -35,6 +35,8 @@ export const fetchProfiles = async ( const existing = profilesByPubkey.get(event.pubkey) if (!existing || event.created_at > existing.created_at) { profilesByPubkey.set(event.pubkey, event) + // Store in event store immediately + eventStore.add(event) } } @@ -43,9 +45,9 @@ export const fetchProfiles = async ( .req(localRelays, { kinds: [0], authors: uniquePubkeys }) .pipe( onlyEvents(), + tap((event: NostrEvent) => processEvent(event)), completeOnEose(), - takeUntil(timer(1200)), - mapEventsToStore(eventStore) + takeUntil(timer(1200)) ) : new Observable((sub) => sub.complete()) @@ -54,15 +56,13 @@ export const fetchProfiles = async ( .req(remoteRelays, { kinds: [0], authors: uniquePubkeys }) .pipe( onlyEvents(), + tap((event: NostrEvent) => processEvent(event)), completeOnEose(), - takeUntil(timer(6000)), - mapEventsToStore(eventStore) + takeUntil(timer(6000)) ) : new Observable((sub) => sub.complete()) - const events = await lastValueFrom(merge(local$, remote$).pipe(toArray())) - - events.forEach(processEvent) + await lastValueFrom(merge(local$, remote$).pipe(toArray())) const profiles = Array.from(profilesByPubkey.values()) console.log('✅ Fetched', profiles.length, 'unique profiles')