fix: 🐛

This commit is contained in:
codytseng
2025-01-13 23:22:19 +08:00
parent d0350c6ad3
commit c62a82f673
9 changed files with 283 additions and 244 deletions

View File

@@ -14,7 +14,10 @@ type TFeedContext = {
filter: Filter
isReady: boolean
activeRelaySetId: string | null
switchFeed: (feedType: TFeedType, options?: { activeRelaySetId?: string }) => Promise<void>
switchFeed: (
feedType: TFeedType,
options?: { activeRelaySetId?: string; pubkey?: string }
) => Promise<void>
}
const FeedContext = createContext<TFeedContext | undefined>(undefined)
@@ -52,32 +55,28 @@ export function FeedProvider({ children }: { children: React.ReactNode }) {
}
if (feedType === 'following') {
return await switchFeed('following')
return await switchFeed('following', { pubkey })
} else {
await switchFeed('relays', { activeRelaySetId })
}
await switchFeed('relays', { activeRelaySetId })
}
init()
}, [])
useEffect(() => {
if (!isReady || feedType !== 'following') return
switchFeed('following')
}, [pubkey, feedType, isReady])
useEffect(() => {
if (feedType !== 'relays') return
const relaySet = relaySets.find((set) => set.id === activeRelaySetId)
if (!relaySet) return
setRelayUrls(relaySet.relayUrls)
}, [relaySets])
if (pubkey && feedType === 'following') {
switchFeed('following', { pubkey })
}
}, [feedType, pubkey])
const switchFeed = async (
feedType: TFeedType,
options: { activeRelaySetId?: string | null; temporaryRelayUrls?: string[] | null } = {}
options: {
activeRelaySetId?: string | null
temporaryRelayUrls?: string[] | null
pubkey?: string | null
} = {}
) => {
setIsReady(false)
if (feedType === 'relays') {
@@ -100,14 +99,19 @@ export function FeedProvider({ children }: { children: React.ReactNode }) {
return setIsReady(true)
}
if (feedType === 'following') {
if (!pubkey) {
if (!options.pubkey) {
return setIsReady(true)
}
setFeedType(feedType)
setActiveRelaySetId(null)
const [relayList, followings] = await Promise.all([getRelayList(), getFollowings()])
const [relayList, followings] = await Promise.all([
getRelayList(options.pubkey),
getFollowings(options.pubkey)
])
setRelayUrls(relayList.read.concat(BIG_RELAY_URLS).slice(0, 4))
setFilter({ authors: followings.includes(pubkey) ? followings : [...followings, pubkey] })
setFilter({
authors: followings.includes(options.pubkey) ? followings : [...followings, options.pubkey]
})
storage.setFeedType(feedType)
return setIsReady(true)
}