import React from "react"; import { View, Text, TouchableOpacity, StyleSheet, Dimensions, } from "react-native"; import { Image } from "expo-image"; import { Ionicons } from "@expo/vector-icons"; import type { VideoItem } from "../services/types"; import { formatCount, formatDuration } from "../utils/format"; import { coverImageUrl } from "../utils/imageUrl"; import { useSettingsStore } from "../store/settingsStore"; import { useTheme } from "../utils/theme"; const { width } = Dimensions.get("window"); const CARD_WIDTH = (width - 14) / 2; interface Props { item: VideoItem; onPress: () => void; } export const VideoCard = React.memo(function VideoCard({ item, onPress }: Props) { const trafficSaving = useSettingsStore(s => s.trafficSaving); const theme = useTheme(); return ( {formatCount(item.stat?.view ?? 0)} {formatDuration(item.duration)} {item.title} {item.owner?.name ?? ""} ); }); const styles = StyleSheet.create({ card: { width: CARD_WIDTH, marginBottom: 6, backgroundColor: "#fff", borderRadius: 6, overflow: "hidden", }, thumbContainer: { position: "relative" }, thumb: { width: CARD_WIDTH, height: CARD_WIDTH * 0.5625, backgroundColor: "#ddd", }, durationBadge: { position: "absolute", bottom: 4, right: 4, borderRadius: 5, paddingHorizontal: 4, backgroundColor: "rgba(0,0,0,0.6)", paddingVertical: 0, }, durationText: { color: "#fff", fontSize: 10 }, info: { padding: 6 }, title: { fontSize: 12, color: "#212121", height: 33, marginBottom: 4, }, owner: { fontSize: 11, color: "#999", marginTop: 2 }, meta: { position: "absolute", bottom: 4, left: 4, paddingHorizontal: 4, borderRadius: 5, backgroundColor: "rgba(0,0,0,0.6)", flexDirection: "row", alignItems: "center", paddingVertical: 0, gap: 2, }, metaText: { fontSize: 10, color: "#fff" }, });