diff --git a/app/(tabs)/_layout.tsx b/app/(tabs)/_layout.tsx index bb24762..edabe8a 100644 --- a/app/(tabs)/_layout.tsx +++ b/app/(tabs)/_layout.tsx @@ -42,6 +42,13 @@ export default function TabLayout() { tabBarIcon: ({ color }) => , }} /> + , + }} + /> ); } diff --git a/app/(tabs)/programs.tsx b/app/(tabs)/programs.tsx new file mode 100644 index 0000000..8ddb1d4 --- /dev/null +++ b/app/(tabs)/programs.tsx @@ -0,0 +1,190 @@ +import { useState } from 'react'; +import { StyleSheet, SafeAreaView, Text, View, TouchableOpacity, ScrollView } from 'react-native'; +import Colors from '@/constants/Colors'; +import { FontAwesome, FontAwesome5 } from '@expo/vector-icons'; + +type Activity = { + time: string; + title: string; + description: string; + icon: React.ReactNode; + transport?: string; +}; + +type Activities = { + [key: string]: Activity[]; +}; + +export default function Programs() { + const colorScheme = 'dark'; + const [activeDay, setActiveDay] = useState('Day 1'); + + const activities: Activities = { + 'Day 1': [ + { + time: '16:30 - 19:15', + title: 'Depart for Mecca', + description: 'From your location to Mecca', + icon: , + transport: 'Transport to hotel', + }, + { + time: '21:00 - 23:00', + title: 'Dinner at Al-Baik', + description: 'Masjid al-', + icon: , + }, + { + time: '00:00 - 04:00', + title: 'Tawaf', + description: 'Kaaba', + icon: , + }, + ], + 'Day 2': [ + { + time: '10:00 - 12:00', + title: 'Shopping', + description: 'Zamzam Tower', + icon: , + }, + ], + 'Day 3': [], + 'Day 4': [], + }; + + return ( + + + Umrah Pilgrimage + + + + + {Object.keys(activities).map((day) => ( + setActiveDay(day)} + > + {day} + + ))} + + + + + {activities[activeDay].map((activity, index) => ( + + + + {activity.time} + {activity.title} + {activity.description} + + {activity.icon} + + {activity.transport && ( + + + + + {activity.transport} + + )} + + ))} + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + }, + header: { + alignItems: 'center', + paddingVertical: 10, + paddingHorizontal: 20, + }, + 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, + }, +}); diff --git a/app/(tabs)/services.tsx b/app/(tabs)/services.tsx index 54348ac..2c16ca3 100644 --- a/app/(tabs)/services.tsx +++ b/app/(tabs)/services.tsx @@ -1,40 +1,39 @@ -import { StyleSheet, SafeAreaView, ScrollView } from 'react-native'; -import { Text, View } from '@/components/Themed'; -import AdhkarCard from '@/components/AdhkarCard'; -import SupplicationListItem from '@/components/SupplicationListItem'; +import { StyleSheet, SafeAreaView, FlatList } from 'react-native'; +import { Text } from '@/components/Themed'; import i18n from '@/i18n'; +import { FontAwesome5 } from '@expo/vector-icons'; +import ServiceCard from '@/components/ServiceCard'; -const adhkarCategories = [ - 'morningEveningThikr', - 'beforeSleepingThikr', - 'afterSalamThikr', +const services = [ + { + key: 'sarToTmt', + icon: , + }, + { + key: 'hotelBusinessCard', + icon: , + }, + { + key: 'masterkeyBox', + icon: , + }, + { + key: 'translator', + icon: , + }, ]; -const supplications = [ - 'breakingFastSupplication', - 'fastingPersonSupplication', - 'insultedWhileFasting', - 'seeingFruitSupplication', - 'sneezingSupplication', -] - export default function ServicesScreen() { return ( - - - {i18n.t('services')} - {i18n.t('adhkar')} - {adhkarCategories.map((titleKey, index) => ( - - ))} - - {i18n.t('hisnAlMuslim')} - {supplications.map((textKey, index) => ( - {}} /> - ))} - - + {i18n.t('services')} + } + keyExtractor={(item) => item.key} + numColumns={2} + columnWrapperStyle={styles.row} + /> ); } @@ -42,8 +41,6 @@ export default function ServicesScreen() { const styles = StyleSheet.create({ container: { flex: 1, - }, - innerContainer: { paddingHorizontal: 15, }, title: { @@ -51,10 +48,8 @@ const styles = StyleSheet.create({ fontWeight: 'bold', marginVertical: 15, }, - sectionTitle: { - fontSize: 20, - fontWeight: 'bold', - color: '#fff', - marginVertical: 10, - } + row: { + flex: 1, + justifyContent: 'space-around', + }, }); diff --git a/components/FeatureCard.tsx b/components/FeatureCard.tsx index d7fd99b..b8a05a7 100644 --- a/components/FeatureCard.tsx +++ b/components/FeatureCard.tsx @@ -1,7 +1,6 @@ import React from 'react'; import { View, Text, StyleSheet, Image, ImageSourcePropType } from 'react-native'; import Colors from '@/constants/Colors'; -import i18n from '@/i18n'; type FeatureCardProps = { title: string; diff --git a/components/ServiceCard.tsx b/components/ServiceCard.tsx new file mode 100644 index 0000000..91a678b --- /dev/null +++ b/components/ServiceCard.tsx @@ -0,0 +1,46 @@ +import React from 'react'; +import { View, Text, StyleSheet } from 'react-native'; +import Colors from '@/constants/Colors'; + +type ServiceCardProps = { + title: string; + icon: React.ReactNode; +}; + +export default function ServiceCard({ title, icon }: ServiceCardProps) { + const colorScheme = 'dark'; + + return ( + + + {icon} + {title} + + + ); +} + +const styles = StyleSheet.create({ + container: { + borderRadius: 15, + padding: 15, + marginVertical: 10, + width: '45%', + aspectRatio: 1, + justifyContent: 'center', + alignItems: 'center', + }, + content: { + justifyContent: 'center', + alignItems: 'center', + }, + iconContainer: { + marginBottom: 10, + }, + title: { + fontSize: 16, + fontWeight: 'bold', + color: Colors.dark.text, + textAlign: 'center', + }, +}); diff --git a/locales/en.json b/locales/en.json index beef237..f2d1986 100644 --- a/locales/en.json +++ b/locales/en.json @@ -1,6 +1,7 @@ { "home": "Home", "services": "Services", + "supplications": "Supplications", "yourJourneyToHajj": "Your Journey to Hajj", "hajjEssentials": "Everything you need for Hajj essentials.", "umrah": "Umrah", @@ -8,6 +9,7 @@ "nobleRawdah": "Noble Rawdah", "newExperience": "New Experience", "prayerTimes": "Prayer Times", + "programs": "Programs", "leftOnPrayer": "Left on {{prayerName}} prayer", "servicesToEnrich": "Services to Enrich Your Spiritual Experience", "quran": "Qur'an", @@ -22,5 +24,9 @@ "fastingPersonSupplication": "Supplication said by one fasting when presented with food and does not break his fast", "insultedWhileFasting": "When insulted while fasting", "seeingFruitSupplication": "Supplication upon seeing the early or premature fruit", - "sneezingSupplication": "Supplication upon sneezing" + "sneezingSupplication": "Supplication upon sneezing", + "sarToTmt": "SAR to TMT", + "hotelBusinessCard": "Hotel Business Card", + "masterkeyBox": "Masterkey Box", + "translator": "Translator" } diff --git a/locales/ru.json b/locales/ru.json index 28608fa..de139c8 100644 --- a/locales/ru.json +++ b/locales/ru.json @@ -1,6 +1,6 @@ { "home": "Главная", - "services": "Услуги", + "services": "Сервисы", "yourJourneyToHajj": "Ваше путешествие в Хадж", "hajjEssentials": "Все, что вам нужно для Хаджа.", "umrah": "Умра", @@ -8,6 +8,7 @@ "nobleRawdah": "Благородная Равда", "newExperience": "Новый опыт", "prayerTimes": "Время молитв", + "programs": "Программы", "leftOnPrayer": "Осталось до молитвы {{prayerName}}", "servicesToEnrich": "Услуги для обогащения вашего духовного опыта", "quran": "Коран", @@ -22,5 +23,9 @@ "fastingPersonSupplication": "Мольба, произносимая постящимся, когда ему преподносят еду, и он не прерывает свой пост", "insultedWhileFasting": "Когда оскорбляют во время поста", "seeingFruitSupplication": "Мольба при виде ранних или незрелых плодов", - "sneezingSupplication": "Мольба при чихании" + "sneezingSupplication": "Мольба при чихании", + "sarToTmt": "SAR в TMT", + "hotelBusinessCard": "Визитная карточка отеля", + "masterkeyBox": "Ящик для мастер-ключей", + "translator": "Переводчик" } diff --git a/locales/tk.json b/locales/tk.json index 9b17dc4..f457453 100644 --- a/locales/tk.json +++ b/locales/tk.json @@ -1,6 +1,7 @@ { "home": "Baş sahypa", "services": "Hyzmatlar", + "supplications": "Dogalar", "yourJourneyToHajj": "Haj syýahatyňyz", "hajjEssentials": "Haj üçin zerur zatlar.", "umrah": "Umra", @@ -8,6 +9,7 @@ "nobleRawdah": "Asylly Rawdah", "newExperience": "Täze tejribe", "prayerTimes": "Namaz wagtlary", + "programs": "Programmalar", "leftOnPrayer": "{{prayerName}} namazyna çenli galdy", "servicesToEnrich": "Ruhy tejribäňizi baýlaşdyrmak üçin hyzmatlar", "quran": "Kuran", @@ -31,5 +33,9 @@ "fastingPersonSupplication": "Agzy bekli adama iýmit hödürlenende we orazasyny bozmasa aýdylýan doga", "insultedWhileFasting": "Orazaly wagtyň kemsidilende", "seeingFruitSupplication": "Irki ýa-da bişmedik miwäni göreniňde aýdylýan doga", - "sneezingSupplication": "Asgyranyňda aýdylýan doga" + "sneezingSupplication": "Asgyranyňda aýdylýan doga", + "sarToTmt": "SAR-dan TMT-a", + "hotelBusinessCard": "Myhmanhananyň wizit karty", + "masterkeyBox": "Masterkey gutusy", + "translator": "Terjimeçi" }