/** * Data Completeness Dashboard * * Main dashboard component combining summary, filters, and table * Provides comprehensive view of data quality across all entity types */ import { useState, useMemo } from 'react'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { Alert, AlertDescription } from '@/components/ui/alert'; import { Loader2, AlertCircle, RefreshCw } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { useDataCompleteness } from '@/hooks/useDataCompleteness'; import { CompletenessSummary } from './CompletenesSummary'; import { CompletenessFilters } from './CompletenessFilters'; import { CompletenessTable } from './CompletenessTable'; import type { CompletenessFilters as Filters, EntityType } from '@/types/data-completeness'; export function DataCompletenessDashboard() { const [filters, setFilters] = useState({}); const { data, isLoading, error, refetch, isRefetching } = useDataCompleteness(filters); // Combine all entities for the "All" tab const allEntities = useMemo(() => { if (!data) return []; return [ ...data.entities.parks, ...data.entities.rides, ...data.entities.companies, ...data.entities.ride_models, ]; }, [data]); if (isLoading) { return (
Analyzing data completeness...
); } if (error) { return ( Failed to load data completeness analysis. Please try again. ); } if (!data) return null; return (

Data Completeness Dashboard

Monitor and improve data quality across all entities

Filter Entities Filter by entity type, completeness score, and missing field categories Entity Details Entities sorted by completeness (most incomplete first) All ({allEntities.length}) Parks ({data.entities.parks.length}) Rides ({data.entities.rides.length}) Companies ({data.entities.companies.length}) Ride Models ({data.entities.ride_models.length})
); }