import { SUBJECT_COLORS } from '@/lib/subjectColors'; import { supabase } from '@/lib/supabase'; import { Subject } from '@/lib/types'; import { Session } from '@supabase/supabase-js'; import { router, Stack, useFocusEffect } from 'expo-router'; import { useCallback, useEffect, useState } from 'react'; import { ActivityIndicator, Alert, Pressable, ScrollView, Text, View } from 'react-native'; import type { SubjectColor } from '@/lib/subjectColors'; export default function Subjects() { const [subjects, SetSubjects] = useState([]); const [session, SetSession] = useState(null); const [isLoading, SetIsLoading] = useState(false); useEffect(() => { supabase.auth.getSession().then(({ data }) => { SetSession(data.session ?? null); }); const { data: sub } = supabase.auth.onAuthStateChange( (_event, newSession) => { SetSession(newSession); } ); return () => sub.subscription.unsubscribe(); }, []); const GetSubjects = async () => { if (!session?.user.id) return; SetIsLoading(true); const { data, error } = await supabase .from('subjects') .select('*') .eq('uId', session.user.id) .order('lastChanged', { ascending: false }); SetIsLoading(false); if (error) { Alert.alert('Subjects could not be fetched, please try again'); return; } SetSubjects((data as Subject[]) ?? []); }; useFocusEffect( useCallback(() => { if (session) { GetSubjects(); } }, [session]) ); if (isLoading) { return ( ); } return ( ( await supabase.auth.signOut()} > Logout ), }} /> Subjects Pick a subject to manage assignments and tasks. {subjects.length === 0 ? ( No subjects yet Create your first subject to get started. ) : ( {subjects.map((subject) => { const colorKey: SubjectColor = subject.color ?? 'slate'; const colorSet = SUBJECT_COLORS[colorKey]; const firstLetter = subject.title?.trim().charAt(0).toUpperCase() || '?'; return ( router.push({ pathname: '/subject/viewDetailsSubject', params: { sId: subject.sId }, }) } > {firstLetter} {subject.title} {subject.description || 'No description added.'} {subject.isActive ? 'Active' : 'Inactive'} ); })} )} router.push('/subject/upsertSubject')} > Create Subject ); }