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:
2025-09-01 18:34:22 +05:00
parent f519052b7b
commit 3d9b8601bf
6 changed files with 86 additions and 3 deletions

View File

@@ -77,7 +77,8 @@ export default function HomeScreen() {
/>
<PrayerTimeCard />
<ServicesGrid services={services} />
{/* <ServicesGrid services={services} /> */}
</View>
</ScrollView>
</SafeAreaView>

View File

@@ -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();

View File

@@ -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"
}

View File

@@ -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
View 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
View 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;
}
};