From 00469314ca2f76bf13d0526afdd6c9253c0953d1 Mon Sep 17 00:00:00 2001
From: Samuel Newman <mozzius@protonmail.com>
Date: Sat, 14 Jun 2025 00:43:17 +0300
Subject: Use Button instead of TextLink for show more button (#8480)

* use button instead of TextLink for show more

* Match post text size, provide interaction feedback

* Move to new Post components dir

* Prettier

---------

Co-authored-by: Eric Bailey <git@esb.lol>
---
 src/components/Post/ShowMoreTextButton.tsx | 56 ++++++++++++++++++++++++++++++
 1 file changed, 56 insertions(+)
 create mode 100644 src/components/Post/ShowMoreTextButton.tsx

(limited to 'src/components/Post/ShowMoreTextButton.tsx')

diff --git a/src/components/Post/ShowMoreTextButton.tsx b/src/components/Post/ShowMoreTextButton.tsx
new file mode 100644
index 000000000..bc6db55b9
--- /dev/null
+++ b/src/components/Post/ShowMoreTextButton.tsx
@@ -0,0 +1,56 @@
+import {useCallback, useMemo} from 'react'
+import {LayoutAnimation, type TextStyle} from 'react-native'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {HITSLOP_10} from '#/lib/constants'
+import {atoms as a, flatten, type TextStyleProp, useTheme} from '#/alf'
+import {Button} from '#/components/Button'
+import {Text} from '#/components/Typography'
+
+export function ShowMoreTextButton({
+  onPress: onPressProp,
+  style,
+}: TextStyleProp & {onPress: () => void}) {
+  const t = useTheme()
+  const {_} = useLingui()
+
+  const onPress = useCallback(() => {
+    LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut)
+    onPressProp()
+  }, [onPressProp])
+
+  const textStyle = useMemo(() => {
+    return flatten([a.leading_snug, a.text_sm, style]) as TextStyle & {
+      fontSize: number
+      lineHeight: number
+    }
+  }, [style])
+
+  return (
+    <Button
+      label={_(msg`Expand post text`)}
+      onPress={onPress}
+      style={[
+        a.self_start,
+        {
+          paddingBottom: textStyle.fontSize / 3,
+        },
+      ]}
+      hitSlop={HITSLOP_10}>
+      {({pressed, hovered}) => (
+        <Text
+          style={[
+            textStyle,
+            {
+              color: t.palette.primary_500,
+              opacity: pressed ? 0.6 : 1,
+              textDecorationLine: hovered ? 'underline' : undefined,
+            },
+          ]}>
+          <Trans>Show More</Trans>
+        </Text>
+      )}
+    </Button>
+  )
+}
-- 
cgit 1.4.1

