Professional Documents
Culture Documents
Import React Yup
Import React Yup
return (
<SafeAreaView style={styles.container}>
{/* Header */}
<View style={[styles.header, styles.border]}>
<Text style={styles.headerText}>AIFit Fusion</Text>
</View>
useEffect(() => {
const loadPlaylist = async () => {
try {
const playlistURI = await AsyncStorage.getItem('playlistURI');
if (playlistURI !== null) {
setSelectedPlaylist(playlistURI);
}
} catch (error) {
console.error('Error loading playlist from AsyncStorage:', error);
}
};
loadPlaylist();
}, []);
return (
<SafeAreaView style={styles.container}>
<Text>Create a Playlist from your Phone</Text>
<TouchableOpacity
style={[styles.button, styles.border]}
onPress={handleUploadPlaylist}
>
<Text style={styles.buttonText}>Upload Playlist</Text>
</TouchableOpacity>
<View style={styles.playbackContainer}>
<Text style={styles.selectedPlaylist}>{selectedPlaylist}</Text>
<TouchableOpacity style={[styles.button, styles.border]}
onPress={toggleSound}>
<Text style={styles.buttonText}>{isPlaying ? 'Stop Music' : 'Play
Music'}</Text>
</TouchableOpacity>
</View>
</SafeAreaView>
);
}
// Create separate screens for Protein, Carbs, Calories, and Amino Acids
function ProteinScreen() {
return (
<SafeAreaView style={styles.container}>
<Text>Protein Information</Text>
</SafeAreaView>
);
}
function CarbsScreen() {
return (
<SafeAreaView style={styles.container}>
<Text>Carbs Information</Text>
</SafeAreaView>
);
}
function CaloriesScreen() {
return (
<SafeAreaView style={styles.container}>
<Text>Calories Information</Text>
</SafeAreaView>
);
}
function AminoAcidsScreen() {
return (
<SafeAreaView style={styles.container}>
<Text>Amino Acids Information</Text>
</SafeAreaView>
);
}
return (
<SafeAreaView style={styles.container}>
<Text>How many workouts do you want to do?</Text>
<TextInput
style={[styles.input, styles.border]}
keyboardType="numeric"
onChangeText={handleWorkoutsInput}
value={workouts}
/>
<TouchableOpacity
style={[styles.button, styles.border]}
onPress={handleStartWorkouts}
>
<Text style={styles.buttonText}>Start Workouts</Text>
</TouchableOpacity>
</SafeAreaView>
);
}
return (
<SafeAreaView style={styles.container}>
<Text>Select {numberOfWorkouts} Workout(s)</Text>
<View style={styles.workoutButtonsContainer}>
{['Squat', 'Deadlift', 'Press', 'Bench'].map((workout) => (
<TouchableOpacity
key={workout}
style={[
styles.button,
styles.border,
selectedWorkouts.includes(workout) && styles.disabledButton,
]}
onPress={() => handleWorkoutSelection(workout)}
disabled={selectedWorkouts.length === numberOfWorkouts && !
selectedWorkouts.includes(workout)}
>
<Text style={styles.buttonText}>{workout}</Text>
</TouchableOpacity>
))}
</View>
<TouchableOpacity
style={[styles.button, styles.border]}
onPress={() => navigation.navigate('WorkoutInput', { selectedWorkouts })}
>
<Text style={styles.buttonText}>Next</Text>
</TouchableOpacity>
</SafeAreaView>
);
}
// WorkoutInputScreen component
function WorkoutInputScreen({ route }) {
const { selectedWorkouts } = route.params;
const [comments, setComments] = useState('');
const [timer, setTimer] = useState('00:00');
const [timerInput, setTimerInput] = useState('');
const timerRef = useRef(null);
const [isTimerRunning, setIsTimerRunning] = useState(false);
const [selectedPlaylist, setSelectedPlaylist] = useState('');
const [isPlaying, setIsPlaying] = useState(false);
const [sound, setSound] = useState(null); // Define sound variable
const handleMusicToggle = async () => {
if (isPlaying) {
setIsPlaying(false);
if (sound) {
await sound.stopAsync();
}
} else {
setIsPlaying(true);
try {
const { sound: newSound } = await Audio.Sound.createAsync(
{ uri: selectedPlaylist },
{ shouldPlay: true }
);
setSound(newSound);
} catch (error) {
console.error('Error playing sound: ', error);
}
}
};
useEffect(() => {
const loadPlaylist = async () => {
try {
const playlistURI = await AsyncStorage.getItem('playlistURI');
if (playlistURI !== null) {
setSelectedPlaylist(playlistURI);
}
} catch (error) {
console.error('Error loading playlist from AsyncStorage:', error);
}
};
loadPlaylist();
}, []);
if (remainingSeconds <= 0) {
clearInterval(timerRef.current);
setTimer('00:00');
playSound(); // Play beep sound when timer reaches zero
setIsTimerRunning(false);
} else {
const mins = Math.floor(remainingSeconds / 60);
const secs = remainingSeconds % 60;
setTimer(`${mins < 10 ? '0' : ''}${mins}:${secs < 10 ? '0' : ''}$
{secs}`);
}
}, 1000);
setIsTimerRunning(true);
}
};
return (
<SafeAreaView style={styles.container}>
{selectedWorkouts.map((workout, index) => (
<View key={index} style={[styles.workoutInputContainer, styles.border]}>
<Text>{workout}</Text>
<TextInput
style={[styles.input, styles.border]}
placeholder="Enter details"
onChangeText={(text) => {}}
/>
</View>
))}
<View style={[styles.commentsContainer, styles.border]}>
<Text>Comments:</Text>
<TextInput
style={[styles.input, styles.commentsInput, styles.border]}
multiline
numberOfLines={4}
value={comments}
onChangeText={setComments}
placeholder="Add your comments here"
/>
</View>
<View style={[styles.timerContainer, styles.border]}>
<TouchableOpacity style={styles.timerButton} onPress={handleMusicToggle}>
<Text style={styles.buttonText}>{isPlaying ? 'Stop Music' : 'Play
Music'}</Text>
</TouchableOpacity>
</View>
<View style={[styles.timerContainer, styles.border]}>
<TouchableOpacity style={styles.timerButton} onPress={handleAddMinute}>
<Text style={styles.buttonText}>Min</Text>
</TouchableOpacity>
<TouchableOpacity style={styles.timerButton} onPress={handleAddSecond}>
<Text style={styles.buttonText}>Sec</Text>
</TouchableOpacity>
<Text style={styles.timerText}>{timer}</Text>
<TouchableOpacity
style={[styles.button, styles.timerButton]}
onPress={handleStartTimer}
>
<Text style={styles.buttonText}>Start</Text>
</TouchableOpacity>
<TouchableOpacity
style={[styles.button, styles.timerButton]}
onPress={handleStopTimer}
>
<Text style={styles.buttonText}>Stop</Text>
</TouchableOpacity>
</View>
<View style={[styles.timerContainer, styles.border]}>
<Text>Music Playlist:</Text>
</View>
<TouchableOpacity
style={[styles.button, styles.timerButton, { backgroundColor:
'#2ecc71' }]}
onPress={handleSaveToCalendar}
>
<Text style={styles.buttonText}>Save to Calendar</Text>
</TouchableOpacity>
</SafeAreaView>
);
}
// Create separate screens for Squat, Deadlift, Press, and Bench workouts
function SquatScreen() {
return (
<SafeAreaView style={styles.container}>
<Text>Squat Information</Text>
</SafeAreaView>
);
}
function DeadliftScreen() {
return (
<SafeAreaView style={styles.container}>
<Text>Deadlift Information</Text>
</SafeAreaView>
);
}
function PressScreen() {
return (
<SafeAreaView style={styles.container}>
<Text>Press Information</Text>
</SafeAreaView>
);
}
function BenchScreen() {
return (
<SafeAreaView style={styles.container}>
<Text>Bench Information</Text>
</SafeAreaView>
);
}