import React, { useState, useEffect } from 'react'; import { View, Text, StyleSheet, TouchableOpacity, Image, Alert } from 'react-native'; import { SwipeListView } from 'react-native-swipe-list-view'; // Swipeable list için kütüphane import { useNavigation } from '@react-navigation/native'; // Navigasyon işlemleri için kütüphane import { useCart } from '../context/CartContext'; import { useAuth } from '../components/AuthContext'; const CartScreen = ({ route }) => { const { productId, productToAdd } = route.params || {}; // route objesinden productId ve productToAdd parametrelerini al const [cartItems, setCartItems] = useState([]); // Sepetteki ürünleri tutan state const [showOrderButton, setShowOrderButton] = useState(true); // Ön sipariş ver butonunu gösterme durumu const navigation = useNavigation(); // Navigation hook'u const { cart, removeItem: removeFromCart, addItem } = useCart() const { getUserId } = useAuth(); useEffect(() => { setCartItems(cart) console.log('useEffect (cartItems):', cartItems); }, [cart]) // Component yüklendiğinde veya productId, productToAdd veya cartItems değiştiğinde çalışan useEffect useEffect(() => { if (productId && productToAdd) { // Eğer productId ve productToAdd varsa const existingProduct = cartItems.find(item => item.id === productId); // Sepetteki ürünler arasında productId'ye sahip olanı bul if (existingProduct) { // Eğer productId'ye sahip bir ürün bulunduysa const updatedCartItems = cartItems.map(item => item.id === productId ? { ...item, quantity: item.quantity + 1 } : item // Ürünün miktarını bir arttır ); setCartItems(updatedCartItems); // Güncellenmiş sepeti ayarla } else { setCartItems(prevCartItems => [...prevCartItems, { ...productToAdd, quantity: 1 }]); // Yeni ürünü sepete ekle } setShowOrderButton(true); // Ön sipariş ver butonunu göster } }, [productId, productToAdd, cartItems]); // useEffect'i sadece bu üç değişken değiştiğinde çalışacak şekilde ayarla // Ürün miktarını arttıran fonksiyon const increaseQuantity = (itemId) => { const updatedCartItems = cartItems.map(item => item.id === itemId ? { ...item, quantity: item.quantity + 1 } : item // Seçilen ürünün miktarını bir arttır ); setCartItems(updatedCartItems); // Güncellenmiş sepeti ayarla }; // Ürün miktarını azaltan fonksiyon const decreaseQuantity = (itemId) => { const updatedCartItems = cartItems.map(item => item.id === itemId && item.quantity > 1 ? { ...item, quantity: item.quantity - 1 } : item // Seçilen ürünün miktarını bir azalt ); setCartItems(updatedCartItems); // Güncellenmiş sepeti ayarla }; // Ürünü sepetten kaldıran fonksiyon const removeItem = (itemId) => { removeFromCart(itemId) // const updatedCartItems = cartItems.filter(item => item.id !== itemId); // Seçilen ürünü sepetten kaldır // setCartItems(updatedCartItems); // Güncellenmiş sepeti ayarla }; // Swipe edildiğinde gösterilecek öğe const renderHiddenItem = (data, rowMap) => ( removeItem(data.item)} > Sil ); // Ürünleri listeleyen fonksiyon const renderItem = ({ item }) => ( {item.product.urun_adi} removeItem(item)} style={styles.quantityButton}> - {item.qty} addItem(item.product)} style={styles.quantityButton}> + ); // Ön sipariş ver butonuna basıldığında yapılacak işlem const handleOrderPress = async () => { try { // Sepet kontrolü if (!cartItems.length) { console.log('Sepetinizde ürün bulunmamaktadır.'); return; } // Sipariş detaylarını topla const orderDetails = { cartItemIds: cartItems.map(item => item.id), // Sepetteki ürünlerin sadece ID'lerini içeren bir dizi userId: await getUserIdFromAuthContext(), // ... diğer sipariş detayları ekleyin (örn., iletişim bilgileri, teslimat adresi) }; // Sabitler const API_ENDPOINT = 'https://bego-api.testmagna.com/api/contact'; const METHOD = 'POST'; const CONTENT_TYPE = 'application/json'; // Kullanıcı onayı const confirmOrder = await Alert.alert( 'Siparişi Onaylayın', 'Sepetinizdeki ürünleri sipariş vermek istediğinizden emin misiniz?', [ { text: 'İptal', onPress: () => {}, style: 'cancel' }, { text: 'Onayla', onPress: async () => { const response = await fetch(API_ENDPOINT, { method: METHOD, headers: { 'Content-Type': CONTENT_TYPE, }, body: JSON.stringify(orderDetails), }); if (response.ok) { console.log('Sipariş başarıyla alındı.'); Alert.alert('Sipariş Başarılı', 'Siparişiniz başarıyla oluşturuldu.'); navigation.navigate('Order', { cartItems }); } else { console.log('Sipariş verilirken bir hata oluştu.'); const errorText = await response.text(); Alert.alert('Hata', `Sipariş verilemedi: ${errorText}`); console.log(errorText); } }, }, ], ); if (!confirmOrder) { return; } } catch (error) { console.error('Sipariş verilirken bir hata oluştu:', error); Alert.alert('Hata', 'Sipariş verilemedi. Lütfen tekrar deneyiniz.'); } }; // Kullanıcı kimliğini alma fonksiyonu async function getUserIdFromAuthContext() { try { const userId = await getUserId(); console.log('Kullanıcı kimliği başarıyla alındı:', userId); if (userId) { return userId; } else { return userId; } } catch (error) { console.error('Kullanıcı kimliği alınamadı:', error); return null; } } return ( navigation.goBack()}> Sepetiniz {cartItems.length} Ürün {cartItems.length === 0 ? ( Sepetiniz boş. ) : ( <> item.id.toString()} renderItem={renderItem} renderHiddenItem={renderHiddenItem} rightOpenValue={-75} disableRightSwipe /> {showOrderButton && ( Ön Sipariş Ver )} )} ); }; const styles = StyleSheet.create({ container: { flex: 1, padding: 0, backgroundColor: 'white', }, backButton: { width: 30, height: 30, marginRight: 10, marginTop: 20, marginBottom: 20 }, header: { backgroundColor: 'white', paddingVertical: 40, paddingHorizontal: 10, flexDirection: 'row', alignItems: 'center', justifyContent: 'flex-start' }, headerText: { color: 'black', fontSize: 18, fontWeight: '400', }, cartIcon: { width: 30, height: 30, marginRight: 10, marginHorizontal: 200 }, itemContainer: { borderWidth: 1, borderColor: '#ccc', padding: 10, marginBottom: 10, borderRadius: 10, backgroundColor: 'white', }, tableRow: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center', padding: 10, }, tableCell: { flex: 1, fontSize: 16, }, quantityContainer: { flexDirection: 'row', alignItems: 'center', }, quantityButton: { backgroundColor: '#DDA726', paddingBottom: 10, paddingTop: 10, paddingLeft: 20, paddingRight: 20, borderRadius: 50, marginHorizontal: 10, }, quantityButtonText: { fontSize: 20, fontWeight: 'bold', color: 'white', }, quantity: { fontSize: 18, }, deleteButtonContainer: { backgroundColor: 'red', justifyContent: 'center', alignItems: 'center', width: 85, height: '90%', borderRadius: 10, }, deleteButtonText: { color: 'white', fontWeight: 'bold', }, emptyCartMessage: { fontSize: 18, textAlign: 'center', marginTop: 50, }, deleteButtonRight: { right: 0, }, hiddenItem: { flex: 1, flexDirection: 'row', justifyContent: 'flex-end', }, orderContainer: { backgroundColor: 'grey', paddingVertical: 40, paddingHorizontal: 50, borderTopLeftRadius: 32, borderTopRightRadius: 32, }, orderButton: { backgroundColor: 'white', paddingVertical: 20, alignItems: 'center', borderRadius: 32, }, orderButtonText: { color: '#7A7A7A', fontWeight: 'bold', fontSize: 18, }, }); export default CartScreen;