import { Button } from '@/components/ui/button'; import { Checkbox } from '@/components/ui/checkbox'; import { CheckSquare, Square, Filter, CheckCircle2, AlertTriangle, XCircle, Bot, } from 'lucide-react'; import { type GeneratedQuestion, type QuestionReview, type CouncilGenerationResult, type CouncilSelectionMode, } from '@/lib/openai'; import type { ReviewFilter } from './hooks/useAiGeneration'; // ============================================================================= // Types // ============================================================================= interface QuestionListProps { questions: GeneratedQuestion[]; reviews: QuestionReview[]; reviewSummary: CouncilGenerationResult['summary']; selectionMode: CouncilSelectionMode; selectedIndices: Set; filter: ReviewFilter; filteredIndices: number[]; onToggleSelection: (index: number) => void; onSelectAll: () => void; onDeselectAll: () => void; onFilterChange: (filter: ReviewFilter) => void; getReviewForIndex: (index: number) => QuestionReview | undefined; } // ============================================================================= // Component // ============================================================================= export function QuestionList({ questions, reviews, reviewSummary, selectionMode, selectedIndices, filter, filteredIndices, onToggleSelection, onSelectAll, onDeselectAll, onFilterChange, getReviewForIndex, }: QuestionListProps) { return (
{/* Header with selection controls */}

Generated Questions ({selectedIndices.size}/{questions.length} selected)

{/* Filter Buttons */} {reviews.length > 0 && (
)} {/* Question List */}
{filteredIndices.map((i) => ( onToggleSelection(i)} /> ))}
); } // ============================================================================= // Question Item // ============================================================================= interface QuestionItemProps { index: number; question: GeneratedQuestion; review: QuestionReview | undefined; selectionMode: CouncilSelectionMode; isSelected: boolean; onToggle: () => void; } function QuestionItem({ question, review, selectionMode, isSelected, onToggle, }: QuestionItemProps) { const isRejected = review?.verdict === 'reject'; return (
e.stopPropagation()} className="mt-0.5" />

{question.text}

{question.partner_text && (

Partner: {question.partner_text}

)}
{/* Source Generator Badge (cherry-pick mode) */} {selectionMode === 'cherry_pick' && question.sourceGeneratorModel && ( {question.sourceGeneratorModel.split('/').pop()} )} {/* Review Verdict Badge */} {review && ( {review.verdict === 'pass' && } {review.verdict === 'flag' && } {review.verdict === 'reject' && } {review.verdict.toUpperCase()} )}
{/* Review Issues/Suggestions */} {review && ((review.issues && review.issues.length > 0) || review.suggestions) && (
{review.issues && review.issues.length > 0 && (
    {review.issues.map((issue, idx) => (
  • {issue}
  • ))}
)} {review.suggestions && (

Suggestion: {review.suggestions}

)}
)}
); }