import TRenderEngine from '@native-html/transient-render-engine';
import React, { PropsWithChildren, ReactElement } from 'react';
import useTRenderEngine from './hooks/useTRenderEngine';
import { TRenderEngineConfig } from './shared-types';
const defaultTRenderEngine = {} as any;
const TRenderEngineContext =
React.createContext(defaultTRenderEngine);
/**
* Use the ambient transient render engine.
*
* @returns The ambient transient render engine.
*
* @public
*/
export function useAmbientTRenderEngine() {
const engine = React.useContext(TRenderEngineContext);
if (
typeof __DEV__ === 'boolean' &&
__DEV__ &&
engine === defaultTRenderEngine
) {
console.error('TRenderEngineProvider is missing in the render tree.');
}
return engine;
}
/**
* A react component to share a {@link TRenderEngine} instance across different
* rendered contents via {@link RenderHTMLSource}. This can significantly enhance
* performance in applications with potentially dozens or hundreds of distinct
* rendered snippets such as chat apps.
*
* @param props - Pass engine config here.
*/
export default function TRenderEngineProvider({
children,
...config
}: PropsWithChildren): ReactElement {
const engine = useTRenderEngine(config);
return (
{children}
);
}