chahinebrini 14452b2a46 refactor(native): Pressable → TouchableOpacity sweep (style-fn swallows Android styles)
Alle <Pressable style={({pressed}) => ({...})}> ersetzt — style-Funktion
droppt auf Android (New Arch) intermittierend width/height, führt zu 0×0
unsichtbaren Elementen. TouchableOpacity mit activeOpacity ist stabil.

Außerdem übrige Pressables (plain style) aus components/ und app/
migriert sowie zwei überschüssige </View>-Tags in chat.tsx + RoomCard.tsx
entfernt die TS-Fehler verursacht haben.

64 Dateien, typecheck sauber.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 15:43:10 +02:00

79 lines
2.0 KiB
TypeScript

// RN-Port der Vue-Card aus apps/rebreak/app/components/urge/UrgeGamePicker.vue
// 2x2-Grid-Kachel mit SVG-Icon (56x56), Titel, descKey und Star-Rating.
import { View, Text, TouchableOpacity } from 'react-native';
import { SvgXml } from 'react-native-svg';
import { useTranslation } from 'react-i18next';
import { GameRatingStars } from './GameRatingStars';
import type { GameType } from '../urge/UrgeGames';
export interface GameCardProps {
id: GameType;
svg: string;
titleKey: string;
descKey: string;
avgStars: number;
count: number;
onPress: (id: GameType) => void;
}
export function GameCard({
id,
svg,
titleKey,
descKey,
avgStars,
count,
onPress,
}: GameCardProps) {
const { t } = useTranslation();
return (
<TouchableOpacity
onPress={() => onPress(id)}
activeOpacity={0.85}
style={{ width: '100%' }}
>
<View style={{
borderRadius: 18,
borderWidth: 1,
borderColor: '#e5e7eb',
backgroundColor: '#fafafa',
alignItems: 'center',
justifyContent: 'center',
paddingVertical: 18,
paddingHorizontal: 12,
gap: 12,
}}>
<SvgXml xml={svg} width={56} height={56} />
<View style={{ alignItems: 'center', gap: 2 }}>
<Text
style={{
fontFamily: 'Nunito_700Bold',
color: '#0a0a0a',
fontSize: 15,
}}
>
{t(titleKey)}
</Text>
<Text
numberOfLines={2}
style={{
textAlign: 'center',
fontFamily: 'Nunito_400Regular',
color: '#737373',
fontSize: 11,
lineHeight: 14,
minHeight: 28,
paddingHorizontal: 4,
}}
>
{t(descKey)}
</Text>
<View style={{ marginTop: 4 }}>
<GameRatingStars avg={avgStars} count={count} />
</View>
</View>
</View>
</TouchableOpacity>
);
}