fix: Text-Auswahl in MessageText — selectable an alle nested Texts

Android-Eigenheit: bei nested Text-Komponenten muss selectable=true
auch an die Kinder; der Wert auf dem Parent erbt sich nicht zuverlaessig.
Plus: dataDetectorType="all" als Fallback fuer System-Linkifizierung,
falls unsere Regex einen Match verpasst.

suppressHighlighting=false damit Long-Press auf den Link-Texten den
Selection-Mode nicht blockt.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
duffyduck 2026-04-25 20:41:20 +02:00
parent f031fa159e
commit 9d0776c819
1 changed files with 18 additions and 3 deletions

View File

@ -72,13 +72,28 @@ interface Props {
const MessageText: React.FC<Props> = ({ text, style }) => { const MessageText: React.FC<Props> = ({ text, style }) => {
const segments = React.useMemo(() => tokenize(text), [text]); const segments = React.useMemo(() => tokenize(text), [text]);
return ( return (
<Text style={style} selectable> <Text
style={style}
selectable
// dataDetectorType ist Android-only und macht Phone/URL/Email zusaetzlich
// ueber System-Detection klickbar — als Fallback falls unsere Regex-
// Tokens nicht passen.
dataDetectorType="all"
>
{segments.map((seg, i) => { {segments.map((seg, i) => {
if (seg.kind === 'text') { if (seg.kind === 'text') {
return <Text key={i}>{seg.text}</Text>; return <Text key={i} selectable>{seg.text}</Text>;
} }
return ( return (
<Text key={i} style={LINK_STYLE} onPress={() => onPress(seg)}> <Text
key={i}
selectable
style={LINK_STYLE}
onPress={() => onPress(seg)}
// Long-Press soll an den Parent durch fuer Selection
onLongPress={undefined}
suppressHighlighting={false}
>
{seg.text} {seg.text}
</Text> </Text>
); );