// app/(workout)/add-exercises.tsx import React, { useState, useEffect } from 'react'; import { View, ScrollView, TouchableOpacity } from 'react-native'; import { router } from 'expo-router'; import { Text } from '@/components/ui/text'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import { Card, CardContent } from '@/components/ui/card'; import { useWorkoutStore } from '@/stores/workoutStore'; import { useSQLiteContext } from 'expo-sqlite'; import { LibraryService } from '@/lib/db/services/LibraryService'; import { TabScreen } from '@/components/layout/TabScreen'; import { ChevronLeft, Search, Plus } from 'lucide-react-native'; import { BaseExercise } from '@/types/exercise'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { ExerciseSheet } from '@/components/library/ExerciseSheet'; export default function AddExercisesScreen() { const db = useSQLiteContext(); const [libraryService] = useState(() => new LibraryService(db)); const [exercises, setExercises] = useState([]); const [selectedIds, setSelectedIds] = useState([]); const [search, setSearch] = useState(''); const [isNewExerciseSheetOpen, setIsNewExerciseSheetOpen] = useState(false); const insets = useSafeAreaInsets(); const { addExercises } = useWorkoutStore(); // Load exercises on mount useEffect(() => { const loadExercises = async () => { try { const data = await libraryService.getExercises(); setExercises(data); } catch (error) { console.error('Failed to load exercises:', error); } }; loadExercises(); }, [libraryService]); const filteredExercises = exercises.filter(e => e.title.toLowerCase().includes(search.toLowerCase()) || e.tags.some(t => t.toLowerCase().includes(search.toLowerCase())) ); const handleToggleSelection = (id: string) => { setSelectedIds(prev => prev.includes(id) ? prev.filter(i => i !== id) : [...prev, id] ); }; const handleAddSelected = () => { const selectedExercises = exercises.filter(e => selectedIds.includes(e.id)); addExercises(selectedExercises); // Go back to create screen router.back(); }; const handleNewExerciseSubmit = (exercise: BaseExercise) => { // Add to exercises list setExercises(prev => [exercise, ...prev]); // Auto-select the new exercise setSelectedIds(prev => [...prev, exercise.id]); }; // Purple color used throughout the app const purpleColor = 'hsl(261, 90%, 66%)'; return ( {/* Header with back button */} Add Exercises {selectedIds.length} selected {/* Search input */} {filteredExercises.map(exercise => { const isSelected = selectedIds.includes(exercise.id); return ( handleToggleSelection(exercise.id)} activeOpacity={0.7} > {exercise.title} {exercise.category} {exercise.equipment && ( • {exercise.equipment} )} ); })} {filteredExercises.length === 0 && ( No exercises found )} {/* Action button with proper safe area padding */} {/* New Exercise Sheet */} setIsNewExerciseSheetOpen(false)} onSubmit={handleNewExerciseSubmit} /> ); }