import React from 'react'; import { Table, Tbody, Button, Input, InputGroup, InputLeftElement, Flex, Box, Text } from '@chakra-ui/react'; import { MdSearch } from 'react-icons/md'; import AddStudentsModal from '@educt/components/Modals/AddStudentsModal'; import BulkActionsMenu from './BulkActionsMenu'; import StudentTableHead from './StudentTableHead'; /** * Types */ import type { StudentTableRowPropsType } from './StudentTableRow'; import type { ICourse } from '@educt/interfaces'; /** * Hooks */ import { useCallback, useState } from 'react'; import { useDisclosure } from '@chakra-ui/react'; type StudentTableListPropsType = { render: React.FC; students: ICourse['students']; }; const StudentTableList: React.FC = ({ render: Row, students }) => { const [rows, setRows] = useState(students); const [selected, setSelected] = useState([]); const [search, setSearch] = useState(''); const { isOpen: isOpenAddStudentModal, onOpen: onOpenAddStudentModal, onClose: onCloseAddStudentModal, } = useDisclosure(); /** * Search for a student by input */ const handleSearch = (e: React.ChangeEvent) => { setSearch(e.target.value); setRows([ ...students.filter( s => s.fullname.toLowerCase().includes(e.target.value) || s.email.toLowerCase().includes(e.target.value) ), ]); }; /** * Select all students in a table */ const handleSelectAll = (e: React.ChangeEvent) => { if (e.target.checked) { setSelected(rows); return; } setSelected([]); }; /** * Select a student with checkbox */ const handleSelect = useCallback((e: React.ChangeEvent, student: ICourse['students'][number]) => { if (e.target.checked) { setSelected(prev => [...prev, student]); return; } setSelected(prev => prev.filter(s => s.id !== student.id)); }, []); if (rows.length === 0) { return ( <> There are no students in the course yet ); } return ( } /> {selected.length !== 0 && ( <> You have selected {selected.length} student(s). )} {rows.map(student => ( s.id === student.id)} onSelect={handleSelect} /> ))}
); }; export default StudentTableList;