All files / webview/contexts ExtensionContext.tsx

90.9% Statements 10/11
50% Branches 1/2
100% Functions 3/3
100% Lines 9/9

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23              4x     29x 29x 29x 29x 29x       29x 29x 29x    
import { createContext, type ReactNode, useContext, useMemo } from 'react'
import { useAuthState } from '../hooks/useAuthState'
import { useSettingsState } from '../hooks/useSettingsState'
import { useRouter } from './MessageRouterContext'
 
type ExtensionState = ReturnType<typeof useSettingsState> & ReturnType<typeof useAuthState>
 
const ExtensionCtx = createContext<ExtensionState | null>(null)
 
export function ExtensionProvider({ children }: { children: ReactNode }) {
  const router = useRouter()
  const settings = useSettingsState(router)
  const auth = useAuthState(router)
  const value = useMemo(() => ({ ...settings, ...auth }), [settings, auth])
  return <ExtensionCtx.Provider value={value}>{children}</ExtensionCtx.Provider>
}
 
export function useExtension(): ExtensionState {
  const ctx = useContext(ExtensionCtx)
  Iif (!ctx) throw new Error('useExtension must be used within ExtensionProvider')
  return ctx
}