packages/core-api: add useApiHolder hook for when you want defer api access outside of react tree
This commit is contained in:
@@ -39,13 +39,19 @@ ApiProvider.propTypes = {
|
||||
children: PropTypes.node,
|
||||
};
|
||||
|
||||
export function useApi<T>(apiRef: ApiRef<T>): T {
|
||||
export function useApiHolder(): ApiHolder {
|
||||
const apiHolder = useContext(Context);
|
||||
|
||||
if (!apiHolder) {
|
||||
throw new Error('No ApiProvider available in react context');
|
||||
}
|
||||
|
||||
return apiHolder;
|
||||
}
|
||||
|
||||
export function useApi<T>(apiRef: ApiRef<T>): T {
|
||||
const apiHolder = useApiHolder();
|
||||
|
||||
const api = apiHolder.get(apiRef);
|
||||
if (!api) {
|
||||
throw new Error(`No implementation available for ${apiRef}`);
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
export { ApiProvider, useApi } from './ApiProvider';
|
||||
export { ApiProvider, useApi, useApiHolder } from './ApiProvider';
|
||||
export { ApiRegistry } from './ApiRegistry';
|
||||
export { ApiTestRegistry } from './ApiTestRegistry';
|
||||
export * from './ApiRef';
|
||||
|
||||
Reference in New Issue
Block a user