import { Ionicons, MaterialCommunityIcons, MaterialIcons } from '@expo/vector-icons'; import axios from 'axios'; import { addDays, addMonths, endOfMonth, endOfWeek, format, getMonth, getYear, isSameDay, startOfMonth, startOfWeek, subMonths } from 'date-fns'; import { useRouter } from 'expo-router'; import * as SecureStore from 'expo-secure-store'; import React, { useEffect, useState } from "react"; import { ScrollView, StyleSheet, Text, TouchableOpacity, View } from "react-native"; const PRIMARY = '#A24BFA'; const BG = '#0c0a0a'; const NAV_ITEMS = [ { key: 'profile', label: 'Profilom', icon: (color: string) => }, { key: 'schedule', label: 'Beosztás', icon: (color: string) => }, { key: 'requests', label: 'Kérelmek', icon: (color: string) => }, ]; export default function Profile() { const [fullName, setFullName] = useState(''); const [email, setEmail] = useState(''); const [userId, setUserId] = useState(''); const [activeTab, setActiveTab] = useState('profile'); const [currentMonth, setCurrentMonth] = useState(new Date()); const [workdays, setWorkdays] = useState([]); const [loading, setLoading] = useState(false); const router = useRouter(); useEffect(() => { (async () => { const name = await SecureStore.getItemAsync('fullName'); const mail = await SecureStore.getItemAsync('email'); const uid = await SecureStore.getItemAsync('userId'); setFullName(name || ''); setEmail(mail || ''); setUserId(uid || ''); })(); }, []); useEffect(() => { if (activeTab === 'schedule') { fetchWorkdays(); } // eslint-disable-next-line }, [currentMonth, activeTab]); async function fetchWorkdays() { setLoading(true); try { const userCookie = await SecureStore.getItemAsync('cookie'); const year = getYear(currentMonth); const month = getMonth(currentMonth) + 1; const response = await axios.post( 'https://mymenu.mcdonalds.hu/api/UserDataApi/GetWorkDayMonthList', { Data: { Year: year, Month: month } }, { headers: { 'Content-Type': 'application/json', 'cookie': userCookie, 'origin': 'https://mymenu.mcdonalds.hu', }, } ); setWorkdays(response.data.data.Data || []); } catch (e) { setWorkdays([]); } finally { setLoading(false); } } async function handleLogout() { await SecureStore.deleteItemAsync('cookie'); await SecureStore.deleteItemAsync('userId'); await SecureStore.deleteItemAsync('email'); await SecureStore.deleteItemAsync('password'); await SecureStore.deleteItemAsync('fullName'); router.replace('/'); } function renderCalendar() { const monthStart = startOfMonth(currentMonth); const monthEnd = endOfMonth(monthStart); const startDate = startOfWeek(monthStart, { weekStartsOn: 1 }); const endDate = endOfWeek(monthEnd, { weekStartsOn: 1 }); const today = new Date(); const rows = []; let days = []; let day = startDate; let formattedDate = ''; while (day <= endDate) { for (let i = 0; i < 7; i++) { formattedDate = format(day, 'yyyy-MM-dd'); const wd = workdays.find(w => w.WorkDay?.slice(0, 10) === formattedDate); let bg = 'rgba(24,20,28,0.7)'; let color = '#fff'; let borderWidth = 0; if (isSameDay(day, today)) { borderWidth = 2; color = PRIMARY; } if (wd) { bg = wd.color || 'deepskyblue'; color = '#222'; } days.push( {format(day, 'd')} {wd && {wd.text}} ); day = addDays(day, 1); } rows.push({days}); days = []; } return ( setCurrentMonth(subMonths(currentMonth, 1))}> {format(currentMonth, 'yyyy. MMMM')} setCurrentMonth(addMonths(currentMonth, 1))}> {["H", "K", "Sz", "Cs", "P", "Szo", "V"].map(d => ( {d} ))} {loading ? ( Betöltés… ) : ( {rows} )} ); } function renderContent() { if (activeTab === 'profile') { return ( Név: {fullName} Email: {email} UserID: {userId} Kijelentkezés ); } else if (activeTab === 'schedule') { return ( Beosztás naptár {renderCalendar()} ); } else if (activeTab === 'requests') { return ( Kérelmek funkció hamarosan… ); } } return ( Profil {renderContent()} {NAV_ITEMS.map(item => ( setActiveTab(item.key)} > {item.icon(activeTab === item.key ? PRIMARY : '#bdbdbd')} {item.label} ))} ); } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: BG, justifyContent: 'center', alignItems: 'center', paddingBottom: 64, }, title: { color: '#fff', fontWeight: 'bold', fontSize: 28, textAlign: 'center', marginBottom: 24, marginTop: 32, }, card: { backgroundColor: 'rgba(24, 20, 28, 0.95)', borderRadius: 24, padding: 32, width: '90%', maxWidth: 400, shadowColor: '#000', shadowOpacity: 0.3, shadowRadius: 24, shadowOffset: { width: 0, height: 8 }, elevation: 8, marginBottom: 32, }, label: { color: '#bdbdbd', fontSize: 16, marginTop: 12, fontWeight: 'bold', }, value: { color: PRIMARY, fontSize: 18, marginBottom: 8, }, navBar: { flexDirection: 'row', justifyContent: 'space-around', alignItems: 'center', backgroundColor: 'rgba(24, 20, 28, 0.98)', borderTopWidth: 1, borderTopColor: '#222', position: 'absolute', bottom: 0, left: 0, right: 0, height: 64, paddingHorizontal: 16, }, navItem: { flex: 1, alignItems: 'center', justifyContent: 'center', }, navLabel: { fontSize: 13, marginTop: 2, fontWeight: 'bold', }, logoutButton: { backgroundColor: PRIMARY, borderRadius: 12, paddingVertical: 16, alignItems: 'center', marginTop: 32, shadowColor: PRIMARY, shadowOpacity: 0.3, shadowRadius: 8, shadowOffset: { width: 0, height: 2 }, elevation: 2, }, logoutText: { color: '#fff', fontWeight: 'bold', fontSize: 18, letterSpacing: 1, }, });