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.
 
 
 
 

50 lines
1.8 KiB

import { createContext, useContext, type ReactNode } from 'react'
export type TPrimaryOverlayViewType =
| 'note'
| 'settings'
| 'settings-sub'
| 'profile'
| 'hashtag'
| 'relay'
| 'following'
| 'mute'
| 'bookmarks'
| 'pins'
| 'interests'
| 'user-emojis'
| 'profile-badges'
| 'notification-thread-follow'
| 'notification-thread-mute'
| 'others-relay-settings'
export type PrimaryNoteViewContextValue = {
setPrimaryNoteView: (view: ReactNode | null, type?: TPrimaryOverlayViewType) => void
primaryViewType: TPrimaryOverlayViewType | null
getNavigationCounter: () => number
/** Top URL in the secondary stack (right panel), or undefined if empty. */
getTopSecondaryUrl: () => string | undefined
/** Primary overlay (mobile / narrow): child calls this to expose refresh for the chrome bar. */
registerPrimaryPanelRefresh: (fn: (() => void) | null) => void
triggerPrimaryPanelRefresh: () => void
}
/**
* Dedicated module so lazy chunks (e.g. BottomNavigationBar) share the same context as PageManager.
* Importing these hooks from PageManager into those chunks can duplicate the module and break
* Provider matching ("must be used within PrimaryNoteViewContext.Provider").
*/
export const PrimaryNoteViewContext = createContext<PrimaryNoteViewContextValue | undefined>(undefined)
export function usePrimaryNoteView(): PrimaryNoteViewContextValue {
const context = useContext(PrimaryNoteViewContext)
if (!context) {
throw new Error('usePrimaryNoteView must be used within a PrimaryNoteViewContext.Provider')
}
return context
}
/** Returns undefined when outside provider (e.g. embedded notes in createRoot trees). */
export function usePrimaryNoteViewOptional(): PrimaryNoteViewContextValue | undefined {
return useContext(PrimaryNoteViewContext)
}