import { useState } from "react"; import { View, Text, TextInput, Pressable, ScrollView, Alert } from "react-native"; import { useNavigation } from "@react-navigation/native"; import type { NativeStackNavigationProp } from "@react-navigation/native-stack"; import type { RootStackParamList } from "@navigation/types"; import { useWorkoutBuilder } from "../hooks/useWorkoutBuilder"; import { useSettings } from "../../../providers/WatchProvider"; import type { StrokeType } from "@types/workout"; const STROKES: StrokeType[] = ["Freestyle", "Backstroke", "Breaststroke", "Butterfly", "Mixed"]; export function BuilderScreen() { const navigation = useNavigation>(); const { poolLength: defaultPoolLength } = useSettings(); const [poolLength, setPoolLength] = useState(defaultPoolLength); const { sets, workoutName, setWorkoutName, totalDistance, isSaving, addSet, updateSet, removeSet, save, } = useWorkoutBuilder(); const handleSave = async () => { try { const workoutId = await save(poolLength); navigation.navigate("PreSwim", { workoutId }); } catch (e) { console.error("Failed to save workout:", e); Alert.alert("Error", `Failed to save workout: ${e}`); } }; return ( Build Workout {totalDistance}m total ยท {poolLength}m pool Workout Name Pool Length {[25, 50].map((length) => ( setPoolLength(length)} className={`flex-1 py-2.5 rounded-xl items-center ${ poolLength === length ? "bg-sky-500" : "bg-slate-100" }`} > {length}m ))} {sets.map((set, index) => ( Set {index + 1} {sets.length > 1 && ( removeSet(index)}> Remove )} Stroke {STROKES.map((stroke) => ( updateSet(index, { stroke })} className={`mr-2 px-3 py-1.5 rounded-full ${ set.stroke === stroke ? "bg-sky-500" : "bg-slate-200" }`} > {stroke} ))} Distance (m) updateSet(index, { distancePerRep: Number(t) || 0 })} className="bg-white border border-slate-300 rounded-lg px-3 py-2 text-slate-900" /> Reps updateSet(index, { repCount: Number(t) || 1 })} className="bg-white border border-slate-300 rounded-lg px-3 py-2 text-slate-900" /> Rest (s) updateSet(index, { restDuration: Number(t) || 0 })} className="bg-white border border-slate-300 rounded-lg px-3 py-2 text-slate-900" /> ))} + Add Set {isSaving ? "Saving..." : "Start Swim"} ); }