14 changed files with 752 additions and 800 deletions
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
|
||||
/** |
||||
* Standalone React context for favorite relays so HMR on `FavoriteRelaysProvider.tsx` does not |
||||
* recreate `createContext()` (which breaks `useFavoriteRelays` in InterestListProvider, |
||||
* FeedProvider, etc. after Fast Refresh). |
||||
*/ |
||||
import { TRelaySet } from '@/types' |
||||
import { Event } from 'nostr-tools' |
||||
import { createContext, useContext } from 'react' |
||||
|
||||
export type TFavoriteRelaysContext = { |
||||
favoriteRelays: string[] |
||||
addFavoriteRelays: (relayUrls: string[]) => Promise<void> |
||||
deleteFavoriteRelays: (relayUrls: string[]) => Promise<void> |
||||
reorderFavoriteRelays: (reorderedRelays: string[]) => Promise<void> |
||||
blockedRelays: string[] |
||||
addBlockedRelays: (relayUrls: string[]) => Promise<void> |
||||
deleteBlockedRelays: (relayUrls: string[]) => Promise<void> |
||||
relaySets: TRelaySet[] |
||||
createRelaySet: (relaySetName: string, relayUrls?: string[]) => Promise<void> |
||||
addRelaySets: (newRelaySetEvents: Event[]) => Promise<void> |
||||
deleteRelaySet: (id: string) => Promise<void> |
||||
updateRelaySet: (newSet: TRelaySet) => Promise<void> |
||||
reorderRelaySets: (reorderedSets: TRelaySet[]) => Promise<void> |
||||
} |
||||
|
||||
export const FavoriteRelaysContext = createContext<TFavoriteRelaysContext | undefined>(undefined) |
||||
|
||||
export function useFavoriteRelays(): TFavoriteRelaysContext { |
||||
const context = useContext(FavoriteRelaysContext) |
||||
if (!context) { |
||||
throw new Error('useFavoriteRelays must be used within a FavoriteRelaysProvider') |
||||
} |
||||
return context |
||||
} |
||||
@ -0,0 +1,30 @@
@@ -0,0 +1,30 @@
|
||||
/** |
||||
* Standalone React context for feed state so HMR on `FeedProvider.tsx` does not recreate |
||||
* `createContext()` (which breaks `useFeed` after Fast Refresh). |
||||
*/ |
||||
import { TFeedInfo, TFeedType } from '@/types' |
||||
import { createContext, useContext } from 'react' |
||||
|
||||
export type TFeedContext = { |
||||
feedInfo: TFeedInfo |
||||
relayUrls: string[] |
||||
isReady: boolean |
||||
switchFeed: ( |
||||
feedType: TFeedType, |
||||
options?: { |
||||
activeRelaySetId?: string | null |
||||
pubkey?: string | null |
||||
relay?: string | null |
||||
} |
||||
) => Promise<void> |
||||
} |
||||
|
||||
export const FeedContext = createContext<TFeedContext | undefined>(undefined) |
||||
|
||||
export function useFeed(): TFeedContext { |
||||
const context = useContext(FeedContext) |
||||
if (!context) { |
||||
throw new Error('useFeed must be used within a FeedProvider') |
||||
} |
||||
return context |
||||
} |
||||
Loading…
Reference in new issue