import type { InjectionToken, Injector, Type } from '@outposts/injection-js'; import { type PropsWithChildren, createContext, createElement, useContext, useMemo, } from 'react'; import { OidcSecurityService } from '../..'; export const InjectorContextVoidInjector: Injector = { get: (_token: Type | InjectionToken, _notFoundValue?: T): T => { throw new Error('Please wrap with a InjectorContext.Provider first'); }, }; export const InjectorContext = createContext( InjectorContextVoidInjector ); export function InjectorProvider({ injector, ...props }: PropsWithChildren<{ injector: Injector }>) { return createElement(InjectorContext, { ...props, value: injector, }); } export function useInjector() { return useContext(InjectorContext); } export function useOidcClient() { const injector = useInjector(); const oidcSecurityService = useMemo( () => injector.get(OidcSecurityService), [injector] ); return { injector, oidcSecurityService, }; }