about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorEric Bailey <git@esb.lol>2024-10-04 15:31:40 -0500
committerGitHub <noreply@github.com>2024-10-04 13:31:40 -0700
commitd17da8474b6aa3985e3a74bc3459b483d23109cd (patch)
tree50d687e23838da9668f676bf27baac8302330437 /src
parent00486e94991f344353ffb083dd631283a84c3ad3 (diff)
downloadvoidsky-d17da8474b6aa3985e3a74bc3459b483d23109cd.tar.zst
Emoji handling nested (#5609)
Diffstat (limited to 'src')
-rw-r--r--src/components/Typography.tsx31
-rw-r--r--src/view/com/util/ViewHeader.tsx2
-rw-r--r--src/view/com/util/text/Text.tsx31
3 files changed, 38 insertions, 26 deletions
diff --git a/src/components/Typography.tsx b/src/components/Typography.tsx
index 501e23872..19eba35fb 100644
--- a/src/components/Typography.tsx
+++ b/src/components/Typography.tsx
@@ -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]
 
   return (
-    <UITextView>
+    <UITextView {...props}>
       {normalized.map(child => {
         if (typeof child !== 'string') return child
 
@@ -68,10 +71,12 @@ export function renderChildrenWithEmoji(children: StringChild) {
         }
 
         return child.split(EMOJI).map((stringPart, index) => (
-          <UITextView key={index}>
+          <UITextView key={index} {...props}>
             {stringPart}
             {emojis[index] ? (
-              <UITextView style={{color: 'black', fontFamily: 'System'}}>
+              <UITextView
+                {...props}
+                style={[props?.style, {color: 'black', fontFamily: 'System'}]}>
                 {emojis[index]}
               </UITextView>
             ) : null}
@@ -163,15 +168,17 @@ export function Text({
     }
   }
 
+  const shared = {
+    uiTextView: true,
+    selectable,
+    style: s,
+    dataSet: Object.assign({tooltip: title}, dataSet || {}),
+    ...rest,
+  }
+
   return (
-    <UITextView
-      selectable={selectable}
-      uiTextView
-      style={s}
-      {...rest}
-      // @ts-ignore
-      dataSet={Object.assign({tooltip: title}, dataSet || {})}>
-      {isIOS && emoji ? renderChildrenWithEmoji(children) : children}
+    <UITextView {...shared}>
+      {isIOS && emoji ? renderChildrenWithEmoji(children, shared) : children}
     </UITextView>
   )
 }
diff --git a/src/view/com/util/ViewHeader.tsx b/src/view/com/util/ViewHeader.tsx
index 64fa504eb..1d4cf8ff0 100644
--- a/src/view/com/util/ViewHeader.tsx
+++ b/src/view/com/util/ViewHeader.tsx
@@ -100,7 +100,7 @@ export function ViewHeader({
               </TouchableOpacity>
             ) : null}
             <View style={styles.titleContainer} pointerEvents="none">
-              <Text type="title" style={[pal.text, styles.title]}>
+              <Text emoji type="title" style={[pal.text, styles.title]}>
                 {title}
               </Text>
             </View>
diff --git a/src/view/com/util/text/Text.tsx b/src/view/com/util/text/Text.tsx
index 3d885480c..42ea79b8f 100644
--- a/src/view/com/util/text/Text.tsx
+++ b/src/view/com/util/text/Text.tsx
@@ -77,13 +77,16 @@ export function Text({
       flattened.fontSize = flattened.fontSize * fonts.scaleMultiplier
     }
 
+    const shared = {
+      uiTextView: true,
+      selectable,
+      style: flattened,
+      ...props,
+    }
+
     return (
-      <UITextView
-        style={flattened}
-        selectable={selectable}
-        uiTextView
-        {...props}>
-        {isIOS && emoji ? renderChildrenWithEmoji(children) : children}
+      <UITextView {...shared}>
+        {isIOS && emoji ? renderChildrenWithEmoji(children, shared) : children}
       </UITextView>
     )
   }
@@ -104,14 +107,16 @@ export function Text({
     flattened.fontSize = flattened.fontSize * fonts.scaleMultiplier
   }
 
+  const shared = {
+    selectable,
+    style: flattened,
+    dataSet: Object.assign({tooltip: title}, dataSet || {}),
+    ...props,
+  }
+
   return (
-    <RNText
-      style={flattened}
-      // @ts-ignore web only -esb
-      dataSet={Object.assign({tooltip: title}, dataSet || {})}
-      selectable={selectable}
-      {...props}>
-      {isIOS && emoji ? renderChildrenWithEmoji(children) : children}
+    <RNText {...shared}>
+      {isIOS && emoji ? renderChildrenWithEmoji(children, shared) : children}
     </RNText>
   )
 }