POWR/components/workout/FavoriteTemplate.tsx
2025-02-24 22:27:01 -05:00

91 lines
2.8 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// components/workout/FavoriteTemplate.tsx
import React from 'react';
import { View, TouchableOpacity } from 'react-native';
import { Text } from '@/components/ui/text';
import { Card, CardContent } from '@/components/ui/card';
import { Button } from '@/components/ui/button';
import { Star, Clock, Dumbbell } from 'lucide-react-native';
import type { GestureResponderEvent } from 'react-native';
interface FavoriteTemplateProps {
title: string;
exercises: Array<{
title: string;
sets: number;
reps: number;
}>;
duration?: number;
exerciseCount: number;
isFavorited?: boolean;
onPress?: () => void;
onFavoritePress?: () => void;
}
export default function FavoriteTemplate({
title,
exercises,
duration,
exerciseCount,
isFavorited = false,
onPress,
onFavoritePress
}: FavoriteTemplateProps) {
return (
<TouchableOpacity
activeOpacity={0.7}
onPress={onPress}
>
<Card>
<CardContent className="p-4">
<View className="flex-row justify-between items-start">
<View className="flex-1">
<Text className="text-lg font-semibold text-card-foreground mb-1">
{title}
</Text>
<Text className="text-sm text-muted-foreground mb-2">
{exercises.slice(0, 3).map(ex =>
`${ex.title} (${ex.sets}×${ex.reps})`
).join(', ')}
{exercises.length > 3 && '...'}
</Text>
<View className="flex-row items-center gap-4">
<View className="flex-row items-center gap-1">
<Dumbbell size={16} className="text-muted-foreground" />
<Text className="text-sm text-muted-foreground">
{exerciseCount} exercises
</Text>
</View>
{duration && (
<View className="flex-row items-center gap-1">
<Clock size={16} className="text-muted-foreground" />
<Text className="text-sm text-muted-foreground">
{duration} min
</Text>
</View>
)}
</View>
</View>
<Button
variant="ghost"
size="icon"
onPress={(e: GestureResponderEvent) => {
e.stopPropagation();
onFavoritePress?.();
}}
>
<Star
size={20}
className={isFavorited ? "text-primary" : "text-muted-foreground"}
fill={isFavorited ? "currentColor" : "none"}
/>
</Button>
</View>
</CardContent>
</Card>
</TouchableOpacity>
);
}