import { useState } from "react"; import { Alert, Image, KeyboardAvoidingView, Modal, Platform, Pressable, ScrollView, Text, TextInput, View, } from "react-native"; import { Ionicons } from "@expo/vector-icons"; import * as Haptics from "expo-haptics"; import * as ImagePicker from "expo-image-picker"; interface AddItemModalProps { visible: boolean; categoryName: string; categoryId: string; onClose: () => void; onAdd: (categoryId: string, name: string, price: number, description?: string, imageUrl?: string) => Promise; } export function AddItemModal({ visible, categoryName, categoryId, onClose, onAdd, }: AddItemModalProps) { const [name, setName] = useState(""); const [price, setPrice] = useState(""); const [description, setDescription] = useState(""); const [imageUrl, setImageUrl] = useState(null); const [adding, setAdding] = useState(false); async function handlePickImage() { Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light).catch(() => {}); const permission = await ImagePicker.requestMediaLibraryPermissionsAsync(); if (!permission.granted) { Alert.alert("İzin Gerekli", "Ürün görseli seçebilmek için fotoğraf galerisi erişim izni gereklidir."); return; } const result = await ImagePicker.launchImageLibraryAsync({ mediaTypes: ["images"], allowsEditing: true, aspect: [4, 3], quality: 0.6, base64: true, }); if (!result.canceled && result.assets[0]) { const asset = result.assets[0]; if (asset.base64) { setImageUrl(`data:image/jpeg;base64,${asset.base64}`); } else { setImageUrl(asset.uri); } } } async function handleAdd() { const parsedPrice = Number(price.replace(",", ".")); if (!name.trim()) { Alert.alert("Eksik Bilgi", "Lütfen ürün adını giriniz."); return; } if (Number.isNaN(parsedPrice) || parsedPrice < 0) { Alert.alert("Geçersiz Fiyat", "Lütfen geçerli bir fiyat giriniz."); return; } setAdding(true); try { await onAdd( categoryId, name.trim(), parsedPrice, description.trim() || undefined, imageUrl || undefined, ); Haptics.notificationAsync(Haptics.NotificationFeedbackType.Success).catch(() => {}); setName(""); setPrice(""); setDescription(""); setImageUrl(null); onClose(); } catch (err) { Alert.alert("Hata", err instanceof Error ? err.message : "Ürün eklenemedi."); } finally { setAdding(false); } } return ( Yeni Ürün Ekle Kategori: {categoryName} {/* Image Picker */} Ürün Fotoğrafı (Opsiyonel) {imageUrl ? ( setImageUrl(null)} style={{ position: "absolute", top: 10, right: 10, backgroundColor: "rgba(0,0,0,0.65)", borderRadius: 14, padding: 6, }} > ) : ( ({ height: 100, borderRadius: 14, borderWidth: 1.5, borderStyle: "dashed", borderColor: "#D6D3D1", backgroundColor: "#FAF8F5", alignItems: "center", justifyContent: "center", gap: 6, opacity: pressed ? 0.8 : 1, })} > Galeriden Fotoğraf Seç )} Ürün Adı * Fiyat (₺) * Açıklama (Opsiyonel) ({ backgroundColor: !name.trim() || !price.trim() ? "#D6D3D1" : "#1C1917", paddingVertical: 16, borderRadius: 14, alignItems: "center", opacity: pressed ? 0.85 : 1, marginTop: 8, })} > {adding ? "Ekleniyor..." : "Ürünü Menüye Ekle"} ); }