import { useState } from 'react' import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' import { Textarea } from '@/components/ui/textarea' import { DataSource, DataSourceType } from '@/types/json-ui' import { DataSourceBadge } from '@/components/atoms/DataSourceBadge' import { Badge } from '@/components/ui/badge' import { X } from '@phosphor-icons/react' interface DataSourceEditorDialogProps { open: boolean dataSource: DataSource | null allDataSources: DataSource[] onOpenChange: (open: boolean) => void onSave: (dataSource: DataSource) => void } export function DataSourceEditorDialog({ open, dataSource, allDataSources, onOpenChange, onSave }: DataSourceEditorDialogProps) { const [editingSource, setEditingSource] = useState(dataSource) const handleSave = () => { if (!editingSource) return onSave(editingSource) onOpenChange(false) } const updateField = (field: K, value: DataSource[K]) => { if (!editingSource) return setEditingSource({ ...editingSource, [field]: value }) } const addDependency = (depId: string) => { if (!editingSource || editingSource.type !== 'computed') return const deps = editingSource.dependencies || [] if (!deps.includes(depId)) { updateField('dependencies', [...deps, depId]) } } const removeDependency = (depId: string) => { if (!editingSource || editingSource.type !== 'computed') return const deps = editingSource.dependencies || [] updateField('dependencies', deps.filter(d => d !== depId)) } if (!editingSource) return null const availableDeps = allDataSources.filter( ds => ds.id !== editingSource.id && ds.type !== 'computed' ) const selectedDeps = editingSource.dependencies || [] const unselectedDeps = availableDeps.filter(ds => !selectedDeps.includes(ds.id)) return ( Edit Data Source Configure the data source settings and dependencies
updateField('id', e.target.value)} placeholder="unique-id" className="font-mono" />
{editingSource.type === 'kv' && ( <>
updateField('key', e.target.value)} placeholder="storage-key" className="font-mono" />

Key used for persistent storage in the KV store