diff --git a/src/alf/index.tsx b/src/alf/index.tsx
index f9d93d4ca8..5d08722ff4 100644
--- a/src/alf/index.tsx
+++ b/src/alf/index.tsx
@@ -103,35 +103,32 @@ export function ThemeProvider({
})
}, [])
- return (
- (
- () => ({
- themes,
- themeName: themeName,
- theme: themes[themeName],
- fonts: {
- scale: fontScale,
- scaleMultiplier: fontScaleMultiplier,
- family: fontFamily,
- setFontScale: setFontScaleAndPersist,
- setFontFamily: setFontFamilyAndPersist,
- },
- flags: {},
- }),
- [
- themeName,
- themes,
- fontScale,
- setFontScaleAndPersist,
- fontFamily,
- setFontFamilyAndPersist,
- fontScaleMultiplier,
- ],
- )}>
- {children}
-
+ const value = React.useMemo(
+ () => ({
+ themes,
+ themeName: themeName,
+ theme: themes[themeName],
+ fonts: {
+ scale: fontScale,
+ scaleMultiplier: fontScaleMultiplier,
+ family: fontFamily,
+ setFontScale: setFontScaleAndPersist,
+ setFontFamily: setFontFamilyAndPersist,
+ },
+ flags: {},
+ }),
+ [
+ themeName,
+ themes,
+ fontScale,
+ setFontScaleAndPersist,
+ fontFamily,
+ setFontFamilyAndPersist,
+ fontScaleMultiplier,
+ ],
)
+
+ return {children}
}
export function useAlf() {
diff --git a/src/view/com/util/text/Text.tsx b/src/view/com/util/text/Text.tsx
index 42ea79b8fb..dbf5e2e13f 100644
--- a/src/view/com/util/text/Text.tsx
+++ b/src/view/com/util/text/Text.tsx
@@ -5,7 +5,7 @@ import {UITextView} from 'react-native-uitextview'
import {lh, s} from '#/lib/styles'
import {TypographyVariant, useTheme} from '#/lib/ThemeContext'
import {logger} from '#/logger'
-import {isIOS} from '#/platform/detection'
+import {isIOS, isWeb} from '#/platform/detection'
import {applyFonts, useAlf} from '#/alf'
import {
childHasEmoji,
@@ -44,8 +44,6 @@ export function Text({
...props
}: React.PropsWithChildren) {
const theme = useTheme()
- const typography = theme.typography[type]
- const lineHeightStyle = lineHeight ? lh(theme, type, lineHeight) : undefined
const {fonts} = useAlf()
if (IS_DEV) {
@@ -60,7 +58,10 @@ export function Text({
}
}
- if (selectable && isIOS) {
+ const textProps = React.useMemo(() => {
+ const typography = theme.typography[type]
+ const lineHeightStyle = lineHeight ? lh(theme, type, lineHeight) : undefined
+
const flattened = StyleSheet.flatten([
s.black,
typography,
@@ -74,49 +75,47 @@ export function Text({
// @ts-ignore
if (flattened.fontSize) {
// @ts-ignore
- flattened.fontSize = flattened.fontSize * fonts.scaleMultiplier
+ flattened.fontSize = Math.round(
+ // @ts-ignore
+ flattened.fontSize * fonts.scaleMultiplier,
+ )
}
- const shared = {
- uiTextView: true,
+ return {
+ uiTextView: selectable && isIOS,
selectable,
style: flattened,
+ dataSet: isWeb
+ ? Object.assign({tooltip: title}, dataSet || {})
+ : undefined,
...props,
}
+ }, [
+ dataSet,
+ fonts.family,
+ fonts.scaleMultiplier,
+ lineHeight,
+ props,
+ selectable,
+ style,
+ theme,
+ title,
+ type,
+ ])
+ if (selectable && isIOS) {
return (
-
- {isIOS && emoji ? renderChildrenWithEmoji(children, shared) : children}
+
+ {isIOS && emoji
+ ? renderChildrenWithEmoji(children, textProps)
+ : children}
)
}
- const flattened = StyleSheet.flatten([
- s.black,
- typography,
- lineHeightStyle,
- style,
- ])
-
- applyFonts(flattened, fonts.family)
-
- // should always be defined on `typography`
- // @ts-ignore
- if (flattened.fontSize) {
- // @ts-ignore
- flattened.fontSize = flattened.fontSize * fonts.scaleMultiplier
- }
-
- const shared = {
- selectable,
- style: flattened,
- dataSet: Object.assign({tooltip: title}, dataSet || {}),
- ...props,
- }
-
return (
-
- {isIOS && emoji ? renderChildrenWithEmoji(children, shared) : children}
+
+ {isIOS && emoji ? renderChildrenWithEmoji(children, textProps) : children}
)
}