diff --git a/app.json b/app.json index 7b88e5f..50b6c0b 100644 --- a/app.json +++ b/app.json @@ -17,7 +17,8 @@ "foregroundImage": "./assets/images/icon.png", "backgroundColor": "#0c0a0a" }, - "edgeToEdgeEnabled": true + "edgeToEdgeEnabled": true, + "package": "com.devbeni.mcbeno" }, "web": { "bundler": "metro", diff --git a/app/index.tsx b/app/index.tsx index 5098d3b..ea68284 100644 --- a/app/index.tsx +++ b/app/index.tsx @@ -20,7 +20,7 @@ export default function Index() { (async () => { const savedEmail = await SecureStore.getItemAsync('email'); const savedPassword = await SecureStore.getItemAsync('password'); - console.log('Mentett email:', savedEmail, 'Mentett password:', savedPassword); + // ... if (savedEmail && savedPassword) { setUsername(savedEmail); setPassword(savedPassword); @@ -36,7 +36,7 @@ export default function Index() { setLoading(true); const user = emailOverride ?? username; const pass = passwordOverride ?? password; - console.log('Login attempt:', user); + // ... try { const response = await axios.post( "https://mymenu.mcdonalds.hu/api/AccountApi/Login", @@ -55,8 +55,9 @@ export default function Index() { } } ); - //console.log('Login response:', response.data, response.headers); - const cookie = response.headers['set-cookie']?.join('; '); + + const cookie = response.headers['set-cookie']?.join('; ') || ''; + const userId = response.data.Data.UserID; const fullName = response.data.Data.FullName; await SecureStore.setItemAsync('cookie', cookie || ''); @@ -64,18 +65,16 @@ export default function Index() { await SecureStore.setItemAsync('email', user); await SecureStore.setItemAsync('password', pass); await SecureStore.setItemAsync('fullName', fullName || ''); - //console.log('Saved to SecureStore:', { cookie, userId, user, pass, fullName }); if (isAuto) { if (Platform.OS === 'android') { ToastAndroid.show('Sikeres automatikus bejelentkezés', ToastAndroid.SHORT); } else { - // iOS: custom toast helyett Alert - console.log('Sikeres automatikus bejelentkezés'); + // ... } } router.replace('/profile'); } catch (e) { - console.log('Login error:', e); + // ... Alert.alert('Hiba', 'Hibás felhasználónév vagy jelszó, vagy hálózati hiba.'); } finally { setLoading(false); diff --git a/app/profile.tsx b/app/profile.tsx index 8368dc8..8e5e1ae 100644 --- a/app/profile.tsx +++ b/app/profile.tsx @@ -1,27 +1,17 @@ + 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"; +import { 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(() => { @@ -35,38 +25,6 @@ export default function Profile() { })(); }, []); - 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'); @@ -76,122 +34,43 @@ export default function Profile() { 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} - - ))} + + Név: + {fullName} + Email: + {email} + UserID: + {userId} + + Kijelentkezés + + + + + + ); +} + +function NavBar({ activeTab }: { activeTab: string }) { + const router = useRouter(); + return ( + + router.push('/profile')}> + + Profilom + + router.push('/schedule')}> + + Beosztás + + router.push('/requests')}> + + Kérelmek + ); } diff --git a/app/schedule.tsx b/app/schedule.tsx index 2f7d26e..a2e149e 100644 --- a/app/schedule.tsx +++ b/app/schedule.tsx @@ -1,7 +1,3 @@ -// Csak a név=érték részt tartjuk meg a cookie stringből -function extractCookie(cookieStr: string) { - return cookieStr.split(';')[0]; -} 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'; @@ -14,227 +10,227 @@ const PRIMARY = '#A24BFA'; const BG = '#0c0a0a'; export default function Schedule() { - const [currentMonth, setCurrentMonth] = useState(new Date()); - const [workdays, setWorkdays] = useState([]); - const [loading, setLoading] = useState(false); - const router = useRouter(); + const [currentMonth, setCurrentMonth] = useState(new Date()); + const [workdays, setWorkdays] = useState([]); + const [loading, setLoading] = useState(false); + const router = useRouter(); - useEffect(() => { - fetchWorkdays(); - }, [currentMonth]); + useEffect(() => { + fetchWorkdays(); + }, [currentMonth]); - async function fetchWorkdays() { - setLoading(true); - try { - const userCookie = await SecureStore.getItemAsync('cookie'); - const year = getYear(currentMonth); - const month = getMonth(currentMonth) + 1; - console.log('Lekérdezett hónap:', year, month); - console.log('Cookie:', userCookie); - if (!userCookie) { - console.log('Nincs elmentett cookie, nem vagy bejelentkezve!'); - setWorkdays([]); - return; - } + async function fetchWorkdays() { + setLoading(true); + try { + const userCookieRaw = await SecureStore.getItemAsync('cookie'); + if (!userCookieRaw) { + throw new Error('Nincs elmentett cookie, kérlek jelentkezz be újra!'); + } + console.log('Lekért cookie:', userCookieRaw); - console.log('Beosztás API hívás:', { year, month }); + const userCookie = userCookieRaw.split(';')[0]; + const year = getYear(currentMonth); + const month = getMonth(currentMonth) + 1; + console.log('Lekérdezett hónap:', year, month); + console.log('Beosztás API hívás:', { year, month }); + console.log('Küldött cookie:', userCookie); - 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', - } + 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', + 'Referer': 'https://mymenu.mcdonalds.hu/', + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36', + 'Accept': 'application/json, text/plain, */*', + 'Accept-Language': 'hu-HU,hu;q=0.9', + } + } + ); + + const cookie = response.headers['set-cookie']?.join('; '); + if (cookie) { + await SecureStore.setItemAsync('cookie', cookie); + } else { + console.warn('Nincs set-cookie fejléc a válaszban!'); + } + + console.log('API teljes válasz:', response.data); + if (!response.data || !response.data.data || !response.data.data.Data) { + console.log('Nincs beosztás adat a válaszban!'); + setWorkdays([]); + return; + } + + setWorkdays(response.data.data.Data); + } catch (e) { + const err = e as any; + if (err.response) { + console.log('API válasz hiba:', err.response.data); + } else { + console.log('Beosztás API hiba:', e); + } + setWorkdays([]); + } finally { + setLoading(false); } - ); - // Cookie frissítés, ha van új set-cookie header - const setCookieHeader = response.headers && (response.headers['set-cookie'] || response.headers['Set-Cookie']); - if (setCookieHeader) { - let cookieString = ''; - if (Array.isArray(setCookieHeader)) { - // Ha van .ASPXAUTH, azt mentsük el, különben az elsőt - const authCookie = setCookieHeader.find(c => c.startsWith('.ASPXAUTH=')); - if (authCookie) { - cookieString = extractCookie(authCookie); - } else { - cookieString = extractCookie(setCookieHeader[0]); - } - } else { - cookieString = extractCookie(setCookieHeader); - } - console.log('Frissített cookie:', cookieString); - await SecureStore.setItemAsync('cookie', cookieString); - } - console.log('API teljes válasz:', response.data); - if (!response.data || !response.data.data || !response.data.data.Data) { - console.log('Nincs beosztás adat a válaszban!'); - setWorkdays([]); - return; - } - setWorkdays(response.data.data.Data); - } catch (e) { - console.log('Beosztás API hiba:', e); - setWorkdays([]); - } finally { - setLoading(false); } - } - 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; + 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 = []; } - if (wd) { - bg = wd.color || 'deepskyblue'; - color = '#222'; - } - days.push( - - - {format(day, 'd')} - {wd && {wd.text}} + 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} + )} - ); - 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} - )} - - ); - } - return ( - - - - Beosztás naptár - {/* Hibaüzenet, ha nincs bejelentkezve vagy nincs beosztás */} - {(!loading && workdays.length === 0) && ( - - Nincs beosztás vagy nem vagy bejelentkezve! - - )} - {renderCalendar()} - - - - - - - ); + return ( + + + + Beosztás naptár + {/* Hibaüzenet, ha nincs bejelentkezve vagy nincs beosztás */} + {(!loading && workdays.length === 0) && ( + + Nincs beosztás vagy nem vagy bejelentkezve! + + )} + {renderCalendar()} + + + + + + + ); } function NavBar({ activeTab }: { activeTab: string }) { - const router = useRouter(); - return ( - - router.push('/profile')}> - - Profilom - - router.push('/schedule')}> - - Beosztás - - router.push('/requests')}> - - Kérelmek - - - ); + const router = useRouter(); + return ( + + router.push('/profile')}> + + Profilom + + router.push('/schedule')}> + + Beosztás + + router.push('/requests')}> + + Kérelmek + + + ); } const styles = StyleSheet.create({ - 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, - marginTop: 32, - }, - label: { - color: '#bdbdbd', - fontSize: 16, - marginBottom: 16, - fontWeight: 'bold', - textAlign: 'center', - }, - 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', - }, + 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, + marginTop: 32, + }, + label: { + color: '#bdbdbd', + fontSize: 16, + marginBottom: 16, + fontWeight: 'bold', + textAlign: 'center', + }, + 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', + }, }); diff --git a/eas.json b/eas.json new file mode 100644 index 0000000..da9594d --- /dev/null +++ b/eas.json @@ -0,0 +1,21 @@ +{ + "cli": { + "version": ">= 16.17.3", + "appVersionSource": "remote" + }, + "build": { + "development": { + "developmentClient": true, + "distribution": "internal" + }, + "preview": { + "distribution": "internal" + }, + "production": { + "autoIncrement": true + } + }, + "submit": { + "production": {} + } +} diff --git a/package.json b/package.json index ee694cc..1bedaa9 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,6 @@ "version": "1.0.0", "scripts": { "start": "expo start", - "reset-project": "node ./scripts/reset-project.js", "android": "expo run:android", "ios": "expo run:ios", "web": "expo start --web",