import React from 'react'; import { View, Text, FlatList, StyleSheet, TouchableOpacity, ActivityIndicator, Alert, RefreshControl, } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { Ionicons } from '@expo/vector-icons'; import { useFocusEffect } from '@react-navigation/native'; import { useCart } from '../../hooks/useCart'; import CartItemCard from '../../components/CartItemCard'; export default function CartScreen() { const { cart, loading, refreshing, refreshCart, updateQuantity, removeItem, clearCart, } = useCart(); // Tự động refresh cart mỗi khi vào trang useFocusEffect( React.useCallback(() => { console.log('=== CartScreen focused - Refreshing cart ==='); refreshCart(); }, [refreshCart]) ); const handleClearCart = () => { Alert.alert( 'Xác nhận', 'Bạn có chắc muốn xóa tất cả sản phẩm trong giỏ hàng?', [ { text: 'Hủy', style: 'cancel' }, { text: 'Xóa tất cả', onPress: clearCart, style: 'destructive' }, ] ); }; const handleCheckout = () => { Alert.alert('Thông báo', 'Chức năng thanh toán đang được phát triển'); }; const formatPrice = (price: number) => { return new Intl.NumberFormat('vi-VN', { style: 'currency', currency: 'VND', }).format(price); }; if (loading && !cart) { return ( Đang tải giỏ hàng... ); } if (!cart || cart.items.length === 0) { return ( Giỏ hàng Giỏ hàng trống Hãy thêm sản phẩm vào giỏ hàng để mua sắm ); } return ( Giỏ hàng Xóa tất cả item.cartItemId.toString()} renderItem={({ item }) => ( )} contentContainerStyle={styles.listContent} refreshControl={ } /> Tổng số lượng: {cart.totalItems} sản phẩm Tổng tiền: {formatPrice(cart.totalAmount)} Thanh toán ); } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: '#f5f5f5', }, header: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center', padding: 16, backgroundColor: '#fff', borderBottomWidth: 1, borderBottomColor: '#e0e0e0', }, headerTitle: { fontSize: 24, fontWeight: '700', color: '#333', }, clearButton: { flexDirection: 'row', alignItems: 'center', padding: 8, }, clearText: { fontSize: 14, color: '#ff4444', marginLeft: 4, fontWeight: '500', }, loadingContainer: { flex: 1, justifyContent: 'center', alignItems: 'center', }, loadingText: { marginTop: 12, fontSize: 16, color: '#666', }, emptyContainer: { flex: 1, justifyContent: 'center', alignItems: 'center', padding: 32, }, emptyText: { fontSize: 20, fontWeight: '600', color: '#666', marginTop: 16, }, emptySubtext: { fontSize: 14, color: '#999', marginTop: 8, textAlign: 'center', }, listContent: { padding: 16, }, footer: { backgroundColor: '#fff', padding: 16, borderTopWidth: 1, borderTopColor: '#e0e0e0', }, summaryRow: { flexDirection: 'row', justifyContent: 'space-between', marginBottom: 12, }, summaryLabel: { fontSize: 15, color: '#666', }, summaryValue: { fontSize: 15, color: '#333', fontWeight: '500', }, totalLabel: { fontSize: 18, fontWeight: '600', color: '#333', }, totalValue: { fontSize: 20, fontWeight: '700', color: '#ff6b6b', }, checkoutButton: { backgroundColor: '#ff6b6b', flexDirection: 'row', justifyContent: 'center', alignItems: 'center', padding: 16, borderRadius: 12, marginTop: 16, }, checkoutText: { fontSize: 17, fontWeight: '700', color: '#fff', marginRight: 8, }, });