/** * InboxSection - Section displaying inbox studies on Home page * * Shows the "Create New Study" card and lists all inbox studies * with their current status and available actions. */ import React, { useState, useEffect, useCallback } from 'react'; import { Inbox, RefreshCw, ChevronDown, ChevronRight } from 'lucide-react'; import { intakeApi } from '../../api/intake'; import { InboxStudy, TopicInfo } from '../../types/intake'; import { CreateStudyCard } from './CreateStudyCard'; import { InboxStudyCard } from './InboxStudyCard'; import { FinalizeModal } from './FinalizeModal'; interface InboxSectionProps { onStudyFinalized?: () => void; } export const InboxSection: React.FC = ({ onStudyFinalized }) => { const [inboxStudies, setInboxStudies] = useState([]); const [topics, setTopics] = useState([]); const [isLoading, setIsLoading] = useState(true); const [isExpanded, setIsExpanded] = useState(true); const [selectedStudyForFinalize, setSelectedStudyForFinalize] = useState(null); const loadData = useCallback(async () => { setIsLoading(true); try { const [inboxResponse, topicsResponse] = await Promise.all([ intakeApi.listInbox(), intakeApi.listTopics(), ]); setInboxStudies(inboxResponse.studies); setTopics(topicsResponse.topics); } catch (err) { console.error('Failed to load inbox data:', err); } finally { setIsLoading(false); } }, []); useEffect(() => { loadData(); }, [loadData]); const handleStudyCreated = (_studyName: string) => { loadData(); }; const handleStudyFinalized = (_finalPath: string) => { setSelectedStudyForFinalize(null); loadData(); onStudyFinalized?.(); }; const pendingStudies = inboxStudies.filter( (s) => !['ready', 'running', 'completed'].includes(s.status) ); return (
{/* Section Header */} {isExpanded ? ( ) : ( )}
{/* Content */} {isExpanded && (
{/* Create Study Card */} {/* Inbox Studies List */} {inboxStudies.length > 0 && (

Inbox Studies ({inboxStudies.length})

{inboxStudies.map((study) => ( ))}
)} {/* Empty State */} {!isLoading && inboxStudies.length === 0 && (

No studies in inbox

Create a new study to get started

)}
)} {/* Finalize Modal */} {selectedStudyForFinalize && ( setSelectedStudyForFinalize(null)} onFinalized={handleStudyFinalized} /> )} ); }; export default InboxSection;