diff --git a/src/components/TransactionList.js b/src/components/TransactionList.js
index 71b043f..e1ec6cb 100644
--- a/src/components/TransactionList.js
+++ b/src/components/TransactionList.js
@@ -7,13 +7,13 @@ const TransactionList = ({ transactions }) => {
if (!transactions || transactions.length === 0) {
return (
- No transactions yet.
+ Soňky 10 günde kart hereketleri ýok...
);
}
const groupedTransactions = transactions.reduce((acc, transaction) => {
- const date = new Date(transaction.date).toLocaleDateString('en-US', {
+ const date = new Date(transaction.date).toLocaleDateString('tk', {
year: 'numeric',
month: 'long',
day: 'numeric',
@@ -36,7 +36,7 @@ const TransactionList = ({ transactions }) => {
{item.description}
- {new Date(item.date).toLocaleTimeString()}
+ {item.time ?? '-'}
{
item.id.toString()}
+ keyExtractor={(item) => item.id?.toString()}
scrollEnabled={false}
ItemSeparatorComponent={() => }
/>
diff --git a/src/screens/Main/HomeScreen.js b/src/screens/Main/HomeScreen.js
index 2c5570e..d4a5e80 100644
--- a/src/screens/Main/HomeScreen.js
+++ b/src/screens/Main/HomeScreen.js
@@ -110,7 +110,8 @@ const HomeScreen = () => {
const [cardBalanceError, setCardBalanceError] = useState(null);
const [isBalanceVisible, setIsBalanceVisible] = useState(true);
const [refreshing, setRefreshing] = useState(false);
- const [transactions, setTransactions] = useState(STATIC_TRANSACTIONS);
+ const [transactions, setTransactions] = useState([]);
+ const [loadingTransactions, setLoadingTransactions] = useState(true);
const showBalanceCard = !loadingCardBalance && cardBalanceError === null && cardBalance !== null;
@@ -140,10 +141,12 @@ const HomeScreen = () => {
// Ensure user has filled all required card & passport fields
if (!user?.passport_serie || !user?.passport_id || !user?.card_number || !user?.card_month || !user?.card_year) {
setLoadingCardBalance(false);
+ setLoadingTransactions(false);
return;
}
setLoadingCardBalance(true);
+ setLoadingTransactions(true);
try {
const res = await apiService.getCardBalanceQuickCheck();
@@ -165,6 +168,19 @@ const HomeScreen = () => {
} finally {
setLoadingCardBalance(false);
}
+
+ try {
+ const transRes = await apiService.getCardTransactionsLastMonth();
+ if (transRes.success) {
+ setTransactions(transRes.data || []);
+ } else {
+ console.warn('Failed to fetch transactions:', transRes.error);
+ }
+ } catch (e) {
+ console.warn('Error fetching transactions:', e);
+ } finally {
+ setLoadingTransactions(false);
+ }
};
fetchCardData();
@@ -189,6 +205,8 @@ const HomeScreen = () => {
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);
+ setTransactions([]);
+ setLoadingTransactions(false);
return;
}
try {
@@ -208,6 +226,16 @@ const HomeScreen = () => {
} catch (e) {
console.warn('Error fetching card balance during refresh:', e);
}
+ try {
+ const transRes = await apiService.getCardTransactionsLastMonth();
+ if (transRes.success) {
+ setTransactions(transRes.data || []);
+ } else {
+ console.warn('Failed to fetch transactions during refresh:', transRes.error);
+ }
+ } catch (e) {
+ console.warn('Error fetching transactions during refresh:', e);
+ }
})(),
]);
setRefreshing(false);
@@ -275,12 +303,16 @@ const HomeScreen = () => {
{showBalanceCard && (
- Transactions
+ Kart hereketleri
- See All
+ {/* Hemmesi */}
-
+ {loadingTransactions ? (
+
+ ) : (
+
+ )}
)}
diff --git a/src/services/apiService.js b/src/services/apiService.js
index fe746ee..4bc7640 100644
--- a/src/services/apiService.js
+++ b/src/services/apiService.js
@@ -67,6 +67,37 @@ class ApiService {
return authService.getTransactions(page, limit);
}
+ async getCardTransactionsLastMonth() {
+ try {
+ const response = await authService.getCardTransactionsLastMonth();
+ if (response && response.data && Array.isArray(response.data.transactions)) {
+ const mappedTransactions = response.data.transactions.map((t, index) => ({
+ id: `${t.rrn}-${index}`,
+ type: t.sign === '-' ? 'debit' : 'credit',
+ description: t.binfo || t.opername,
+ date: `${t.operdate}`,
+ time: t.trantime,
+ amount: t.currOperSum,
+ currency: t.currCode,
+ })).reverse();
+ return {
+ success: true,
+ data: mappedTransactions,
+ };
+ }
+ console.warn('Invalid transaction data structure:', response);
+ return {
+ success: false,
+ error: 'Could not parse transaction data.',
+ };
+ } catch (error) {
+ return {
+ success: false,
+ error: error.message,
+ };
+ }
+ }
+
// Transfer and payments
async transferMoney(data) {
return authService.transferMoney(data);
diff --git a/src/services/authService.js b/src/services/authService.js
index d9f8ca4..058cc59 100644
--- a/src/services/authService.js
+++ b/src/services/authService.js
@@ -162,6 +162,10 @@ class AuthService {
return this.makeRequest(`/user/cards/${cardId}/unblock`, null, true);
}
+ async getCardTransactionsLastMonth() {
+ return this.makeRequest('/card-transactions-last-month', null, true, 'GET');
+ }
+
async changePassword(currentPassword, newPassword) {
return this.makeRequest('/user/change-password', {
current_password: currentPassword,