import { useState } from 'react'; import { StyleSheet, Text, View, TouchableOpacity, ScrollView, ActivityIndicator } from 'react-native'; import Colors from '@/constants/Colors'; import { FontAwesome, FontAwesome5 } from '@expo/vector-icons'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { getPrograms, ProgramActivities, ProgramActivity } from '@/utils/programs'; import { useEffect } from 'react'; const Icon = ({ iconSet, iconName }: { iconSet: ProgramActivity['iconSet']; iconName: ProgramActivity['iconName'] }) => { const color = "black"; const size = 24; switch (iconSet) { case 'FontAwesome': return ; case 'FontAwesome5': return ; default: return null; } }; export default function Programs() { const colorScheme = 'dark'; const [activeDay, setActiveDay] = useState(null); const insets = useSafeAreaInsets(); const [activities, setActivities] = useState({}); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [isStale, setIsStale] = useState(false); useEffect(() => { const fetchPrograms = async () => { try { const { activities: data, isStale } = await getPrograms(); setActivities(data); setIsStale(isStale); if (Object.keys(data).length > 0) { const today = new Date(); const day = String(today.getDate()).padStart(2, '0'); const month = String(today.getMonth() + 1).padStart(2, '0'); const year = today.getFullYear(); const formattedDate = `${day}.${month}.${year}`; if (data[formattedDate]) { setActiveDay(formattedDate); } else { setActiveDay(Object.keys(data)[0]); } } } catch (e) { setError('Failed to load program activities.'); } finally { setLoading(false); } }; fetchPrograms(); }, []); const dayKeys = Object.keys(activities); if (loading) { return ( ); } if (error) { return ( {error} ); } return ( Umrah Pilgrimage {isStale && ( Failed to fetch latest data. Showing cached activities. )} {dayKeys.map((day) => ( setActiveDay(day)} > {day} ))} {activeDay && activities[activeDay]?.map((activity, index) => ( {activity.time} {activity.title} {activity.description} {activity.transport && ( {activity.transport} )} ))} ); } const styles = StyleSheet.create({ container: { flex: 1, }, center: { justifyContent: 'center', alignItems: 'center', }, header: { alignItems: 'center', paddingVertical: 10, paddingHorizontal: 20, }, warningContainer: { backgroundColor: 'orange', padding: 10, alignItems: 'center', }, warningText: { color: 'white', textAlign: 'center', }, title: { fontSize: 24, fontWeight: 'bold', }, daysScroll: { paddingHorizontal: 20, paddingVertical: 10, }, dayButton: { paddingVertical: 8, paddingHorizontal: 16, borderRadius: 20, backgroundColor: '#333', marginRight: 10, }, activeDayButton: { backgroundColor: '#555', }, dayText: { color: 'white', }, activeDayText: { fontWeight: 'bold', }, content: { flex: 1, paddingHorizontal: 20, }, activityCard: { backgroundColor: '#222', borderRadius: 15, padding: 20, flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center', marginBottom: 10, }, timeContainer: { flex: 1, }, timeText: { color: 'gray', fontSize: 14, }, activityTitle: { color: 'white', fontSize: 20, fontWeight: 'bold', marginVertical: 4, }, activityDescription: { color: 'gray', fontSize: 14, }, iconContainer: { width: 50, height: 50, borderRadius: 25, backgroundColor: 'white', justifyContent: 'center', alignItems: 'center', }, transportContainer: { flexDirection: 'row', alignItems: 'center', justifyContent: 'center', marginVertical: 10, }, dot: { width: 6, height: 6, borderRadius: 3, backgroundColor: 'gray', marginHorizontal: 3, }, transportText: { color: 'gray', marginLeft: 10, }, });