import { TNode, TText } from '@native-html/transient-render-engine'; import React, { PropsWithChildren, useMemo } from 'react'; import useProfiler from '../hooks/useProfiler'; import { CustomTagRendererRecord } from '../render/render-types'; import RenderRegistry from '../render/RenderRegistry'; import { HTMLElementModelRecord } from '../shared-types'; export const RenderRegistryContext = React.createContext( null as any ); export function useRendererRegistry() { return React.useContext(RenderRegistryContext); } export function useRendererConfig(tnode: T) { return React.useContext(RenderRegistryContext).getRendererConfigForTNode( tnode ); } export function useInternalTextRenderer(tnode: TText) { return React.useContext(RenderRegistryContext).getInternalTextRenderer( tnode.tagName ); } export default function RenderRegistryProvider({ children, elementModels, renderers }: PropsWithChildren<{ elementModels: HTMLElementModelRecord; renderers?: CustomTagRendererRecord; }>) { const profile = useProfiler({ prop: 'renderers' }); const registry = useMemo(() => { typeof __DEV__ === 'boolean' && __DEV__ && profile(); return new RenderRegistry(renderers, elementModels); }, [renderers, elementModels, profile]); return ( {children} ); }