import { useState, useEffect } from "react"; interface Student { index: number; name: string; id: string; } interface StudentSelectorProps { students: Student[]; onSelectionChange: (selectedIndices: number[]) => void; } export function StudentSelector({ students, onSelectionChange, }: StudentSelectorProps) { const [selected, setSelected] = useState>( () => new Set(students.map((s) => s.index)) ); useEffect(() => { onSelectionChange(Array.from(selected).sort((a, b) => a - b)); }, [selected]); const toggleAll = () => { if (selected.size === students.length) { setSelected(new Set()); } else { setSelected(new Set(students.map((s) => s.index))); } }; const toggle = (index: number) => { setSelected((prev) => { const next = new Set(prev); if (next.has(index)) { next.delete(index); } else { next.add(index); } return next; }); }; const allSelected = selected.size === students.length; return (

選擇學生

已選 {selected.size} / {students.length} 位學生
{students.map((s) => ( ))}
); }