import { defaultStyles } from '@/constants/defaultStyles'; import { supabase } from '@/lib/supabase'; import { router, Stack, useFocusEffect, useLocalSearchParams } from 'expo-router'; import { useCallback, useState } from 'react'; import { ActivityIndicator, Alert, Button, Keyboard, KeyboardAvoidingView, Platform, Pressable, Text, TextInput, TouchableWithoutFeedback, View } from 'react-native'; type Assignment = { aId: string; title: string; description: string; deadline: string; isCompleted: boolean; lastChanged: string; uId: string; sId: string; } export default function EditAssignment() { const { aId } = useLocalSearchParams<{ aId: string }>(); const [assignment, SetAssignment] = useState(null) const [isSaving, SetIsSaving] = useState(false); const GetAssignment = async (aId: string) => { const { data, error } = await supabase.from("assignments").select("*").eq("aId", aId).single(); if (error) { Alert.alert("Assignment could not be fetched, please try again"); return; } SetAssignment(data ?? null); } useFocusEffect( useCallback(() => { if (aId) { GetAssignment(aId); } }, [aId]) ); const EditAssignment = async () => { if (!assignment) return; if(assignment.title.trim() === '' || assignment.deadline.trim() === '') { Alert.alert("Title and deadline are required!"); return; } const { data, error: userError } = await supabase.auth.getUser(); if(userError || !data.user) { router.replace("../createUser"); return; } SetIsSaving(true); const { error: dbError } = await supabase.from("assignments").update({ title: assignment.title, description: assignment.description, deadline: assignment.deadline, isCompleted: assignment.isCompleted, lastChanged: new Date().toISOString(), uId: data.user.id, sId: assignment.sId, }).eq("aId", aId); SetIsSaving(false); if (dbError) { Alert.alert("Assignment could not be edited, please try again"); return; } Alert.alert("Assignment successfully edited!"); router.back(); } return ( {!assignment && ( Assignment not found )} {assignment && ( Edit Assignment SetAssignment(prev => prev ? { ...prev, title: text } : prev)} /> SetAssignment(prev => prev ? { ...prev, description: text } : prev)} /> SetAssignment(prev => prev ? { ...prev, deadline: text } : prev)} /> SetAssignment(prev => prev ? { ...prev, isCompleted: !prev.isCompleted } : prev)} style={defaultStyles.checkboxContainer} > {assignment.isCompleted && } {assignment.isCompleted ? 'Completed' : 'Not Completed'}