-
-
Notifications
You must be signed in to change notification settings - Fork 600
/
Copy pathTPhrasingRenderer.ts
44 lines (41 loc) · 1.55 KB
/
TPhrasingRenderer.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import React from 'react';
import { TPhrasing } from '@native-html/transient-render-engine';
import { useTNodeChildrenRenderer } from './context/TChildrenRendererContext';
import { TDefaultRenderer } from './shared-types';
import { TNodeSubRendererProps } from './internal-types';
import useAssembledCommonProps from './hooks/useAssembledCommonProps';
import TDefaultTextualRenderer from './TDefaultTextualRenderer';
export const TDefaultPhrasingRenderer: TDefaultRenderer<TPhrasing> = ({
children,
...props
}) => {
const { tnode, propsForChildren } = props;
const TNodeChildrenRenderer = useTNodeChildrenRenderer();
const resolvedChildren =
children ??
React.createElement(TNodeChildrenRenderer, {
tnode,
propsForChildren
});
return React.createElement(TDefaultTextualRenderer, props, resolvedChildren);
};
function InnerTPhrasingRenderer(props: TNodeSubRendererProps<TPhrasing>) {
const { assembledProps, Renderer } = useAssembledCommonProps(
props,
TDefaultPhrasingRenderer
);
return React.createElement(Renderer, assembledProps);
}
export default function TPhrasingRenderer(
props: TNodeSubRendererProps<TPhrasing>
) {
const TNodeChildrenRenderer = useTNodeChildrenRenderer();
// When a TPhrasing node is anonymous and has only one child, its
// rendering amounts to rendering its only child.
if (props.tnode.tagName == null && props.tnode.children.length <= 1) {
return React.createElement(TNodeChildrenRenderer, {
tnode: props.tnode
});
}
return React.createElement(InnerTPhrasingRenderer, props);
}