import { useState, useEffect, useMemo } from 'react'; import { Button, Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from '@/components'; import { CreateAIConfigurationRequest, ModalitySchema } from '@insforge/shared-schemas'; import { useAIConfigs } from '../hooks/useAIConfigs'; import { useToast } from '@/lib/hooks/useToast'; import { ModalityFilterSidebar } from './ModalityFilterSidebar'; import { ModelSelectionGrid } from './ModelSelectionGrid'; interface ModelSelectionDialogProps { open: boolean; onOpenChange: (open: boolean) => void; onSuccess: (data: CreateAIConfigurationRequest) => void; } export function ModelSelectionDialog({ open, onOpenChange, onSuccess }: ModelSelectionDialogProps) { const { allAvailableModels, configuredModelIds, getFilteredModels } = useAIConfigs(); const { showToast } = useToast(); const [selectedInputModalities, setSelectedInputModalities] = useState([]); const [selectedOutputModalities, setSelectedOutputModalities] = useState([]); const [selectedModelId, setSelectedModelId] = useState(''); // This is the modelId of the selected model // Reset state when dialog opens/closes useEffect(() => { if (!open) { setSelectedInputModalities([]); setSelectedOutputModalities([]); setSelectedModelId(''); } }, [open]); // Use the existing filtered models logic from useAIConfigs const filteredModels = useMemo(() => { return getFilteredModels(selectedInputModalities, selectedOutputModalities); }, [getFilteredModels, selectedInputModalities, selectedOutputModalities]); // Reset model selection when modalities change useEffect(() => { if (selectedModelId) { const stillAvailable = filteredModels.some((model) => model.modelId === selectedModelId); if (!stillAvailable) { setSelectedModelId(''); } } }, [selectedInputModalities, selectedOutputModalities, filteredModels, selectedModelId]); const handleFormSubmit = (e: React.FormEvent) => { e.preventDefault(); const selectedModel = allAvailableModels.find((model) => model.modelId === selectedModelId); if (!selectedModel) { showToast('Selected model not found', 'error'); return; } const createData: CreateAIConfigurationRequest = { provider: selectedModel.provider, modelId: selectedModel.modelId, inputModality: selectedModel.inputModality, outputModality: selectedModel.outputModality, }; onSuccess(createData); onOpenChange(false); }; const handleCancel = () => { onOpenChange(false); }; return ( Select AI Model for Integration
); }