mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-12 04:18:54 +00:00
31 lines
908 B
TypeScript
31 lines
908 B
TypeScript
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<T>(
|
|
identifier: GeneralServiceIdentifier<T>,
|
|
{ provider }: { provider?: ServiceProvider } = {}
|
|
): T {
|
|
const contextServiceProvider = useContext(ServiceProviderContext);
|
|
|
|
const serviceProvider = provider ?? contextServiceProvider;
|
|
|
|
return serviceProvider.get(identifier);
|
|
}
|
|
|
|
export function useServiceOptional<T>(
|
|
identifier: GeneralServiceIdentifier<T>,
|
|
{ provider }: { provider?: ServiceProvider } = {}
|
|
): T | null {
|
|
const contextServiceProvider = useContext(ServiceProviderContext);
|
|
|
|
const serviceProvider = provider ?? contextServiceProvider;
|
|
|
|
return serviceProvider.getOptional(identifier);
|
|
}
|