Emoji handling nested (#5609)

This commit is contained in:
Eric Bailey
2024-10-04 15:31:40 -05:00
committed by GitHub
parent 00486e9499
commit d17da8474b
3 changed files with 38 additions and 26 deletions
+19 -12
View File
@@ -53,11 +53,14 @@ export function childIsString(
) )
} }
export function renderChildrenWithEmoji(children: StringChild) { export function renderChildrenWithEmoji(
children: StringChild,
props: Omit<TextProps, 'children'> = {},
) {
const normalized = Array.isArray(children) ? children : [children] const normalized = Array.isArray(children) ? children : [children]
return ( return (
<UITextView> <UITextView {...props}>
{normalized.map(child => { {normalized.map(child => {
if (typeof child !== 'string') return child if (typeof child !== 'string') return child
@@ -68,10 +71,12 @@ export function renderChildrenWithEmoji(children: StringChild) {
} }
return child.split(EMOJI).map((stringPart, index) => ( return child.split(EMOJI).map((stringPart, index) => (
<UITextView key={index}> <UITextView key={index} {...props}>
{stringPart} {stringPart}
{emojis[index] ? ( {emojis[index] ? (
<UITextView style={{color: 'black', fontFamily: 'System'}}> <UITextView
{...props}
style={[props?.style, {color: 'black', fontFamily: 'System'}]}>
{emojis[index]} {emojis[index]}
</UITextView> </UITextView>
) : null} ) : null}
@@ -163,15 +168,17 @@ export function Text({
} }
} }
const shared = {
uiTextView: true,
selectable,
style: s,
dataSet: Object.assign({tooltip: title}, dataSet || {}),
...rest,
}
return ( return (
<UITextView <UITextView {...shared}>
selectable={selectable} {isIOS && emoji ? renderChildrenWithEmoji(children, shared) : children}
uiTextView
style={s}
{...rest}
// @ts-ignore
dataSet={Object.assign({tooltip: title}, dataSet || {})}>
{isIOS && emoji ? renderChildrenWithEmoji(children) : children}
</UITextView> </UITextView>
) )
} }
+1 -1
View File
@@ -100,7 +100,7 @@ export function ViewHeader({
</TouchableOpacity> </TouchableOpacity>
) : null} ) : null}
<View style={styles.titleContainer} pointerEvents="none"> <View style={styles.titleContainer} pointerEvents="none">
<Text type="title" style={[pal.text, styles.title]}> <Text emoji type="title" style={[pal.text, styles.title]}>
{title} {title}
</Text> </Text>
</View> </View>
+18 -13
View File
@@ -77,13 +77,16 @@ export function Text({
flattened.fontSize = flattened.fontSize * fonts.scaleMultiplier flattened.fontSize = flattened.fontSize * fonts.scaleMultiplier
} }
const shared = {
uiTextView: true,
selectable,
style: flattened,
...props,
}
return ( return (
<UITextView <UITextView {...shared}>
style={flattened} {isIOS && emoji ? renderChildrenWithEmoji(children, shared) : children}
selectable={selectable}
uiTextView
{...props}>
{isIOS && emoji ? renderChildrenWithEmoji(children) : children}
</UITextView> </UITextView>
) )
} }
@@ -104,14 +107,16 @@ export function Text({
flattened.fontSize = flattened.fontSize * fonts.scaleMultiplier flattened.fontSize = flattened.fontSize * fonts.scaleMultiplier
} }
const shared = {
selectable,
style: flattened,
dataSet: Object.assign({tooltip: title}, dataSet || {}),
...props,
}
return ( return (
<RNText <RNText {...shared}>
style={flattened} {isIOS && emoji ? renderChildrenWithEmoji(children, shared) : children}
// @ts-ignore web only -esb
dataSet={Object.assign({tooltip: title}, dataSet || {})}
selectable={selectable}
{...props}>
{isIOS && emoji ? renderChildrenWithEmoji(children) : children}
</RNText> </RNText>
) )
} }