/** * DatasetPreview component - Display dataset metadata and data table */ import React from 'react'; import { Box, Typography, Paper, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Chip, LinearProgress, Grid, Button, } from '@mui/material'; import { Description as FileIcon, TableChart as TableIcon, Speed as ScoreIcon, CalendarToday as DateIcon, PlayArrow as PlayIcon, } from '@mui/icons-material'; import type { Dataset, UploadResponse } from '../types'; interface DatasetPreviewProps { dataset: Dataset | UploadResponse | null; previewData?: Record[]; loading?: boolean; onStartCleaning?: () => void; } const DatasetPreview: React.FC = ({ dataset, previewData, loading = false, onStartCleaning, }) => { if (!dataset) { return null; } const formatDate = (dateStr: string): string => { return new Date(dateStr).toLocaleString(); }; const getScoreColor = (score: number): 'success' | 'warning' | 'error' => { if (score >= 80) return 'success'; if (score >= 50) return 'warning'; return 'error'; }; const getColumnNames = (): string[] => { if ('columns' in dataset && Array.isArray(dataset.columns)) { return dataset.columns; } if (previewData && previewData.length > 0) { return Object.keys(previewData[0]); } return []; }; const getQualityScore = (): number => { if ('data_quality_score' in dataset) { return Math.round((dataset as any).data_quality_score * 100); } if ('score' in dataset) { return (dataset as any).score; } return 0; }; const columns = getColumnNames(); const qualityScore = getQualityScore(); return ( Dataset Preview {loading && } {/* Metadata Cards */} File Name {dataset.filename} Dimensions {dataset.rows.toLocaleString()} rows × {columns.length} cols Quality Score {qualityScore}% = 80 ? 'Good' : qualityScore >= 50 ? 'Fair' : 'Poor'} color={getScoreColor(qualityScore)} size="small" /> Uploaded {'uploadedAt' in dataset ? formatDate(dataset.uploadedAt) : 'Just now'} {/* Data Quality Progress */} Data Quality {qualityScore}% Clean {100 - qualityScore}% issues detected that need cleaning {/* Column Names */} Columns ({columns.length}) {columns.map((col) => ( ))} {/* Data Preview Table */} {previewData && previewData.length > 0 && ( Preview (First {Math.min(previewData.length, 5)} rows) {columns.map((col) => ( {col} ))} {previewData.slice(0, 5).map((row, rowIndex) => ( {columns.map((col) => ( {row[col] !== undefined && row[col] !== null ? String(row[col]) : null} ))} ))}
)} {/* Empty State */} {!previewData && ( No preview data available )} {/* Start Cleaning Button */} {onStartCleaning && ( )}
); }; export default DatasetPreview;