style: added ShowCard component

This commit is contained in:
Cron1cle
2025-10-02 09:18:44 +02:00
parent 92b59eeae0
commit 9b7db179bc
9 changed files with 295 additions and 141 deletions

120
components/ui/ShowCard.tsx Normal file
View File

@@ -0,0 +1,120 @@
import React from "react";
import { Image, StyleSheet, Text, TouchableOpacity, View } from "react-native";
type ShowCardProps = {
imageUri: string;
streamingServiceUri: string;
liveBadgeText: string;
liveBadgeContainerStyle?: object;
genres: string[];
onPress?: () => void;
};
const ShowCard = ({
imageUri,
streamingServiceUri,
liveBadgeText,
liveBadgeContainerStyle,
genres,
onPress,
}: ShowCardProps) => {
return (
<TouchableOpacity
style={styles.showContainer}
activeOpacity={0.3}
onPress={onPress}
>
<Image
source={{
uri: imageUri,
}}
style={[StyleSheet.absoluteFillObject, { borderRadius: 35 }]}
/>
<View style={styles.streamingServiceIcon}>
<Image
source={{
uri: streamingServiceUri,
}}
style={[StyleSheet.absoluteFillObject, { borderRadius: 15 }]}
/>
</View>
<View style={liveBadgeContainerStyle}>
<Text style={styles.liveBadgeText}>{liveBadgeText}</Text>
</View>
<View style={styles.genreSection}>
{genres.map((genre) => (
<Text key={genre} style={styles.genreLabel}>
{genre}
</Text>
))}
</View>
</TouchableOpacity>
);
};
const styles = StyleSheet.create({
showContainer: {
width: "90%",
height: 200,
backgroundColor: "transparent",
alignSelf: "center",
borderRadius: 35,
marginTop: 20,
borderWidth: 1.5,
borderColor: "hsl(221, 39%, 15%)",
shadowColor: "#000",
shadowOffset: {
width: 0,
height: 1,
},
shadowOpacity: 0.18,
shadowRadius: 1.0,
elevation: 1,
},
streamingServiceIcon: {
width: 45,
height: 45,
marginLeft: "auto",
marginRight: 15,
borderWidth: 1,
borderColor: "white",
borderRadius: 15,
marginTop: 15,
},
liveBadgeContainer: {
position: "absolute",
top: 15,
left: 20,
backgroundColor: "red",
borderRadius: 10,
paddingVertical: 5,
paddingHorizontal: 10,
},
liveBadgeText: {
color: "white",
fontWeight: "bold",
},
genreSection: {
position: "absolute",
bottom: 12,
left: 20,
flexDirection: "row",
alignItems: "center",
justifyContent: "space-evenly",
gap: 5,
},
genreLabel: {
color: "red",
fontWeight: "bold",
fontSize: 10,
paddingVertical: 5,
paddingHorizontal: 10,
borderRadius: 10,
fontStyle: "italic",
backgroundColor: "rgba(255, 255, 255, 0.1)",
overflow: "hidden",
},
});
export default ShowCard;