14 changed files with 752 additions and 800 deletions
File diff suppressed because it is too large
Load Diff
@ -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 @@ |
|||||||
|
/** |
||||||
|
* 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