import React, { useContext } from 'react'; import type { GeneralServiceIdentifier, ServiceProvider } from '../core'; import { ServiceCollection } from '../core'; export const ServiceProviderContext = React.createContext( ServiceCollection.EMPTY.provider() ); export function useService( identifier: GeneralServiceIdentifier, { provider }: { provider?: ServiceProvider } = {} ): T { const contextServiceProvider = useContext(ServiceProviderContext); const serviceProvider = provider ?? contextServiceProvider; return serviceProvider.get(identifier); } export function useServiceOptional( identifier: GeneralServiceIdentifier, { provider }: { provider?: ServiceProvider } = {} ): T | null { const contextServiceProvider = useContext(ServiceProviderContext); const serviceProvider = provider ?? contextServiceProvider; return serviceProvider.getOptional(identifier); }