import { Box, Chip, MenuItem, Select, TextField, Typography } from '@mui/material' import { Search } from 'lucide-react' import type { DataSource, SourceFilters } from '../../domain/dataSource' import { DataSourceType, SourceStatus, DATA_SOURCE_TYPE_LABELS, SOURCE_STATUS_LABELS, } from '../../domain/dataSource' import { SourceCard } from './SourceCard' import { MarketSignalSkeleton } from './MarketSignalSkeleton' import { MarketSignalEmptyState } from './MarketSignalEmptyState' interface SourceListProps { sources: DataSource[] isLoading: boolean selectedId: string | null onSelect: (id: string) => void filters: SourceFilters onFiltersChange: (f: SourceFilters) => void } export function SourceList({ sources, isLoading, selectedId, onSelect, filters, onFiltersChange, }: SourceListProps) { const hasActiveFilters = filters.sourceType || filters.status || filters.search return ( {/* Header */} Datenquellen {/* Search */} onFiltersChange({ ...filters, search: e.target.value || undefined })} slotProps={{ input: { startAdornment: , }, }} sx={{ '& .MuiOutlinedInput-root': { fontSize: '0.8rem' } }} /> {/* Filters */} {hasActiveFilters && ( onFiltersChange({})} sx={{ fontSize: '0.7rem', cursor: 'pointer' }} /> )} {/* List */} {isLoading ? ( Array.from({ length: 4 }).map((_, i) => ) ) : sources.length === 0 ? ( ) : ( sources.map((source) => ( onSelect(source.id)} /> )) )} ) }