Update layout and localization for improved functionality
- Added AsyncStorage and utility functions for future enhancements. - Commented out ServicesGrid component in HomeScreen for potential redesign. - Updated English and Russian localization files with new phrases and translations for prayer times and services.
This commit is contained in:
@@ -77,7 +77,8 @@ export default function HomeScreen() {
|
||||
/>
|
||||
|
||||
<PrayerTimeCard />
|
||||
<ServicesGrid services={services} />
|
||||
|
||||
{/* <ServicesGrid services={services} /> */}
|
||||
</View>
|
||||
</ScrollView>
|
||||
</SafeAreaView>
|
||||
|
||||
@@ -5,8 +5,11 @@ import { Stack } from 'expo-router';
|
||||
import * as SplashScreen from 'expo-splash-screen';
|
||||
import React, { useEffect } from 'react';
|
||||
import 'react-native-reanimated';
|
||||
import AsyncStorage from '@react-native-async-storage/async-storage';
|
||||
|
||||
import { initializeLanguage } from '@/i18n';
|
||||
import { makeRequest } from '@/utils/makeRequest';
|
||||
import { CURRENCY_RATES_ENDPOINT } from '@/utils/api';
|
||||
|
||||
export {
|
||||
// Catch any errors thrown by the Layout component.
|
||||
@@ -40,6 +43,10 @@ export default function RootLayout() {
|
||||
});
|
||||
}, []);
|
||||
|
||||
// useEffect(() => {
|
||||
|
||||
// }, []);
|
||||
|
||||
useEffect(() => {
|
||||
if (loaded && langLoaded) {
|
||||
SplashScreen.hideAsync();
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
"newExperience": "New Experience",
|
||||
"prayerTimes": "Prayer Times",
|
||||
"programs": "Programs",
|
||||
"Programs": "Schedule",
|
||||
"leftOnPrayer": "Left on {{prayerName}} prayer",
|
||||
"servicesToEnrich": "Services to Enrich Your Spiritual Experience",
|
||||
"quran": "Qur'an",
|
||||
@@ -21,6 +22,15 @@
|
||||
"translator": "Translator",
|
||||
"adhkar": "Adhkar",
|
||||
"hisnAlMuslim": "Hisn Al-Muslim",
|
||||
"Makkah": "Makkah",
|
||||
"Medina": "Medina",
|
||||
"Jeddah": "Jeddah",
|
||||
"fajr": "Fajr",
|
||||
"sunrise": "Sunrise",
|
||||
"dhuhr": "Dhuhr",
|
||||
"asr": "Asr",
|
||||
"maghrib": "Maghrib",
|
||||
"isha": "Isha",
|
||||
"morningEveningThikr": "Thikr said in the morning and evening",
|
||||
"beforeSleepingThikr": "Thikr before sleeping",
|
||||
"afterSalamThikr": "Thikr after salam",
|
||||
@@ -31,5 +41,13 @@
|
||||
"sneezingSupplication": "Supplication upon sneezing",
|
||||
"sarToTmt": "SAR to TMT",
|
||||
"hotelBusinessCard": "Hotel Business Card",
|
||||
"masterkeyBox": "Masterkey Box"
|
||||
"masterkeyBox": "Masterkey Box",
|
||||
"Money": "Money",
|
||||
"Hotel": "Hotel",
|
||||
"Lost room key": "Lost room key",
|
||||
"Phrasebook": "Phrasebook",
|
||||
"Enter text in Turkmen": "Enter text",
|
||||
"Translate": "Translate",
|
||||
"Salah": "Salah",
|
||||
"menuSalah": "Salah"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"home": "Главная",
|
||||
"services": "Сервисы",
|
||||
"supplications": "Молитвы",
|
||||
"yourJourneyToHajj": "Ваше путешествие в Хадж",
|
||||
"hajjEssentials": "Все, что вам нужно для Хаджа.",
|
||||
"umrah": "Умра",
|
||||
@@ -9,6 +10,7 @@
|
||||
"newExperience": "Новый опыт",
|
||||
"prayerTimes": "Время молитв",
|
||||
"programs": "Программы",
|
||||
"Programs": "Расписание",
|
||||
"leftOnPrayer": "Осталось до молитвы {{prayerName}}",
|
||||
"servicesToEnrich": "Услуги для обогащения вашего духовного опыта",
|
||||
"quran": "Коран",
|
||||
@@ -20,6 +22,15 @@
|
||||
"translator": "Переводчик",
|
||||
"adhkar": "Азкар",
|
||||
"hisnAlMuslim": "Крепость мусульманина",
|
||||
"Makkah": "Мекка",
|
||||
"Medina": "Медина",
|
||||
"Jeddah": "Джидда",
|
||||
"fajr": "Фаджр",
|
||||
"sunrise": "Восход",
|
||||
"dhuhr": "Зухр",
|
||||
"asr": "Аср",
|
||||
"maghrib": "Магриб",
|
||||
"isha": "Иша",
|
||||
"morningEveningThikr": "Зикр, читаемый утром и вечером",
|
||||
"beforeSleepingThikr": "Зикр перед сном",
|
||||
"afterSalamThikr": "Зикр после салама",
|
||||
@@ -30,5 +41,13 @@
|
||||
"sneezingSupplication": "Мольба при чихании",
|
||||
"sarToTmt": "SAR в TMT",
|
||||
"hotelBusinessCard": "Визитная карточка отеля",
|
||||
"masterkeyBox": "Ящик для мастер-ключей"
|
||||
"masterkeyBox": "Ящик для мастер-ключей",
|
||||
"Money": "Деньги",
|
||||
"Hotel": "Отель",
|
||||
"Lost room key": "Ключ от номера утерян",
|
||||
"Phrasebook": "Разговорник",
|
||||
"Enter text in Turkmen": "Введите текст",
|
||||
"Translate": "Перевести",
|
||||
"Salah": "Намаз",
|
||||
"menuSalah": "Намаз"
|
||||
}
|
||||
|
||||
3
utils/api.ts
Normal file
3
utils/api.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export const BASE_URL = 'http://127.0.0.1:8000/';
|
||||
|
||||
export const CURRENCY_RATES_ENDPOINT = 'api/v1/currency-rates';
|
||||
35
utils/makeRequest.ts
Normal file
35
utils/makeRequest.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
import { BASE_URL } from './api';
|
||||
|
||||
export const makeRequest = async <T,>(
|
||||
endpoint: string,
|
||||
options?: RequestInit
|
||||
): Promise<T> => {
|
||||
const url = new URL(endpoint, BASE_URL).toString();
|
||||
|
||||
try {
|
||||
const response = await fetch(url, options);
|
||||
console.log(response);
|
||||
|
||||
if (!response.ok) {
|
||||
let errorData;
|
||||
try {
|
||||
errorData = await response.json();
|
||||
} catch (e) {
|
||||
// Ignore JSON parsing errors if the body is empty
|
||||
}
|
||||
const errorMessage =
|
||||
errorData?.message ||
|
||||
`Request failed with status ${response.status}`;
|
||||
throw new Error(errorMessage);
|
||||
}
|
||||
|
||||
if (response.status === 204) {
|
||||
return null as T;
|
||||
}
|
||||
|
||||
return response.json();
|
||||
} catch (error) {
|
||||
console.error('API request error:', error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user