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
};
}