import { TNode } from '@native-html/transient-render-engine'; import { CustomRenderer, CustomRendererProps, InternalRenderer, InternalRendererProps, TDefaultRenderer, TDefaultRendererProps } from '../shared-types'; import { TNodeSubRendererProps } from '../internal-types'; import mergeCollapsedMargins from '../helpers/mergeCollapsedMargins'; import { useRendererConfig } from '../context/RenderRegistryProvider'; import { useDefaultContainerProps } from '../context/SharedPropsProvider'; /** * @internal */ export default function useAssembledCommonProps( { tnode, propsFromParent, sharedProps, renderIndex, renderLength, TNodeChildrenRenderer }: TNodeSubRendererProps, TDefault: TDefaultRenderer | null ): { Renderer: CustomRenderer | InternalRenderer | null; assembledProps: CustomRendererProps & TDefaultRendererProps & InternalRendererProps; } { const { Default, Custom } = useRendererConfig(tnode); const containerProps = useDefaultContainerProps(); const assembledProps: CustomRendererProps & TDefaultRendererProps = { tnode, propsFromParent, sharedProps, TDefaultRenderer: TDefault as TDefaultRenderer, TNodeChildrenRenderer, style: mergeCollapsedMargins( propsFromParent?.collapsedMarginTop, tnode.getNativeStyles() ) as any, type: tnode.type === 'text' || tnode.type === 'phrasing' ? 'text' : 'block', propsForChildren: tnode.tagName ? {} : propsFromParent, InternalRenderer: Default || (TDefault as any), renderIndex, renderLength, ...containerProps }; return { assembledProps, Renderer: Custom || Default || null }; }