import React, { useState, useEffect } from 'react'; import { View, Text, TouchableOpacity, Modal, FlatList, StyleSheet } from 'react-native'; import { Ionicons } from '@expo/vector-icons'; import { useAppTheme } from '../theme/ThemeProvider'; import { Model } from '../types'; import { availableModels } from '../config/azure'; import { getModels } from '../services/modelService'; // Verwende Modelle aus der Konfiguration const FALLBACK_MODELS: Model[] = availableModels; type ModelDropdownProps = { selectedModelId: string; onSelectModel: (id: string) => void; }; export default function ModelDropdown({ selectedModelId, onSelectModel }: ModelDropdownProps) { const { isDarkMode } = useAppTheme(); const [isModalVisible, setIsModalVisible] = useState(false); const [models, setModels] = useState(FALLBACK_MODELS); const [loading, setLoading] = useState(false); // Lade die Modelle vom ModelService useEffect(() => { const fetchModels = async () => { try { setLoading(true); const modelsList = await getModels(); setModels(modelsList); } catch (err) { console.error('Fehler beim Laden der Modelle:', err); setModels(FALLBACK_MODELS); } finally { setLoading(false); } }; fetchModels(); }, []); const selectedModel = models.find(model => model.id === selectedModelId) || models[0]; return ( setIsModalVisible(true)} className={`flex-row items-center rounded-lg px-2 py-1 ${isDarkMode ? 'bg-[#2C2C2E]' : 'bg-gray-100'}`} > {selectedModel.name} setIsModalVisible(false)} > setIsModalVisible(false)} > Modell auswählen {loading ? ( Modelle werden geladen... ) : ( item.id} renderItem={({ item }) => ( { onSelectModel(item.id); setIsModalVisible(false); }} > {item.name} {item.description} {item.parameters?.deployment && ( {item.parameters.deployment} )} {item.id === selectedModelId && ( )} )} /> )} setIsModalVisible(false)} > Schließen ); } const styles = StyleSheet.create({ modalOverlay: { flex: 1, backgroundColor: 'rgba(0, 0, 0, 0.5)', justifyContent: 'center', }, modalContent: { maxHeight: '80%', }, });