You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
24 lines
915 B
24 lines
915 B
import { createContext, useContext } from 'react' |
|
|
|
export type TFollowListContext = { |
|
followings: string[] |
|
follow: (pubkey: string) => Promise<void> |
|
/** One fetch + one kind-3 publish after merging all pubkeys (use for follow packs, not per-user loops). */ |
|
followMany: (pubkeys: string[]) => Promise<void> |
|
unfollow: (pubkey: string) => Promise<void> |
|
} |
|
|
|
export const FollowListContext = createContext<TFollowListContext | undefined>(undefined) |
|
|
|
export const useFollowList = (): TFollowListContext => { |
|
const context = useContext(FollowListContext) |
|
if (!context) { |
|
throw new Error('useFollowList must be used within a FollowListProvider') |
|
} |
|
return context |
|
} |
|
|
|
/** Same as {@link useFollowList} but returns undefined outside the provider (avoids HMR / refresh-boundary crashes). */ |
|
export function useFollowListOptional(): TFollowListContext | undefined { |
|
return useContext(FollowListContext) |
|
}
|
|
|