From f16e8c19b60297faf4fdec437296cc77b43f9078 Mon Sep 17 00:00:00 2001 From: Nurmuhammet Allanov Date: Thu, 10 Jul 2025 23:10:49 +0500 Subject: [PATCH] add delete account button && homescrolling --- src/screens/Main/HomeScreen.js | 57 ++++++++++++++++++++++++++++++- src/screens/Main/ProfileScreen.js | 43 ++++++++++++++++++++++- src/services/authService.js | 2 +- 3 files changed, 99 insertions(+), 3 deletions(-) diff --git a/src/screens/Main/HomeScreen.js b/src/screens/Main/HomeScreen.js index 264069d..3cc0dd8 100644 --- a/src/screens/Main/HomeScreen.js +++ b/src/screens/Main/HomeScreen.js @@ -7,6 +7,7 @@ import { ScrollView, TouchableOpacity, ActivityIndicator, + RefreshControl, } from 'react-native'; import { StatusBar } from 'expo-status-bar'; import { Ionicons } from '@expo/vector-icons'; @@ -23,6 +24,7 @@ const HomeScreen = () => { const [loadingCardBalance, setLoadingCardBalance] = useState(true); const [cardBalanceError, setCardBalanceError] = useState(null); const [isBalanceVisible, setIsBalanceVisible] = useState(true); + const [refreshing, setRefreshing] = useState(false); const showBalanceCard = !loadingCardBalance && cardBalanceError === null && cardBalance !== null; @@ -79,11 +81,64 @@ const HomeScreen = () => { fetchCardBalance(); }, [user]); + const handleRefresh = async () => { + setRefreshing(true); + await Promise.all([ + (async () => { + try { + const response = await apiService.getMetrics(); + if (response.success) { + setMetrics(response.data); + } else { + console.warn('Failed to fetch metrics during refresh:', response.error); + } + } catch (error) { + console.warn('Error fetching metrics during refresh:', error); + } + })(), + (async () => { + if (!user?.passport_serie || !user?.passport_id || !user?.card_number || !user?.card_month || !user?.card_year) { + setCardBalance(null); // Clear previous balance if conditions are not met + setCardBalanceError(null); + return; + } + try { + const res = await apiService.getCardBalanceQuickCheck(); + if (res.success) { + const raw = res.data; + let balanceValue = null; + if (raw && typeof raw === 'object') { + balanceValue = raw.balance ?? raw.card_balance ?? raw.amount ?? null; + } + setCardBalance(balanceValue); + setCardBalanceError(null); + } else { + console.warn('Failed to fetch card balance during refresh:', res.error); + setCardBalanceError(res.error || 'Error'); + } + } catch (e) { + console.warn('Error fetching card balance during refresh:', e); + } + })(), + ]); + setRefreshing(false); + }; + return ( - + + } + > {/* Header */} diff --git a/src/screens/Main/ProfileScreen.js b/src/screens/Main/ProfileScreen.js index 95030d7..73115c2 100644 --- a/src/screens/Main/ProfileScreen.js +++ b/src/screens/Main/ProfileScreen.js @@ -81,6 +81,7 @@ const ProfileScreen = () => { // { id: 11, title: 'Ulanmak düzgünleri', icon: 'document-text', hasArrow: true }, // { id: 12, title: 'Gizlinlik syýasaty', icon: 'lock-open', hasArrow: true }, { id: 13, title: 'Programma barada', icon: 'information-circle', value: 'v1.0.0', hasArrow: true }, + { id: 14, title: 'Hasaby poz', icon: 'trash', hasArrow: false, color: COLORS.red }, ], }, ]; @@ -102,6 +103,12 @@ const ProfileScreen = () => { case 5: // Security handleSecuritySettings(); break; + case 13: // About App + Alert.alert('Üns beriň', 'Programma barada maglumatlar açylýar...'); + break; + case 14: // Delete Account + handleDeleteAccount(); + break; default: // Alert.alert('Üns beriň', 'Bu funksiýa entek işlenok'); } @@ -201,6 +208,40 @@ const ProfileScreen = () => { } }; + const handleDeleteAccount = () => { + Alert.alert( + 'Hasaby pozmak', + 'Hasabyňyzy pozmak isleýändigiňize ynamlymy? Bu amal yzyna gaýtarylmaz.', + [ + { + text: 'Ýok', + style: 'cancel', + }, + { + text: 'Hawa', + style: 'destructive', + onPress: async () => { + try { + setIsLoading(true); + const result = await apiService.deleteAccount(); + + if (result.message == 'user deleted successfully') { + Alert.alert('Üstünlik', 'Hasabyňyz üstünlikli pozuldy.'); + logout(); // Log out the user after successful deletion + } else { + Alert.alert('Ýalňyşlyk', result.error || 'Hasaby pozmak amala aşmady.'); + } + } catch (error) { + Alert.alert('Ýalňyşlyk', error.message || 'Hasaby pozmakda näsazlyk ýüze çykdy.'); + } finally { + setIsLoading(false); + } + }, + }, + ] + ); + }; + const handleNotificationSettings = () => { Alert.alert('Bildirişler', 'Bildiriş sazlamalary sahypasy açylýar...'); }; @@ -294,7 +335,7 @@ const ProfileScreen = () => { > - + {item.title} diff --git a/src/services/authService.js b/src/services/authService.js index 5794d73..d9f8ca4 100644 --- a/src/services/authService.js +++ b/src/services/authService.js @@ -170,7 +170,7 @@ class AuthService { } async deleteAccount() { - return this.makeRequest('/user/delete-account', null, true, 'DELETE'); + return this.makeRequest(API_CONFIG.ENDPOINTS.AUTH.DELETE_USER, null, true, 'POST'); } // ================================