refactor: add students modal

This commit is contained in:
Sergey Yarkov 2021-12-06 00:03:22 +03:00
parent 093247899a
commit 4368498dcd
3 changed files with 31 additions and 24 deletions

View File

@ -13,16 +13,14 @@ import {
import { useDisclosure, Divider } from '@chakra-ui/react'; import { useDisclosure, Divider } from '@chakra-ui/react';
import { MdGroup } from 'react-icons/md'; import { MdGroup } from 'react-icons/md';
type AddStudentsModalPropsType = {}; type AddStudentsModalPropsType = {
isOpen: boolean;
const AddStudentsModal: React.FC<AddStudentsModalPropsType> = () => { onClose: () => void;
const { isOpen, onOpen, onClose } = useDisclosure(); };
const AddStudentsModal: React.FC<AddStudentsModalPropsType> = ({ isOpen, onClose }) => {
return ( return (
<> <>
<Button onClick={onOpen} mt='3' size='sm' colorScheme='blue' variant='outline'>
Add students
</Button>
<Modal isOpen={isOpen} onClose={onClose} size='md'> <Modal isOpen={isOpen} onClose={onClose} size='md'>
<ModalOverlay /> <ModalOverlay />
<ModalContent> <ModalContent>

View File

@ -46,7 +46,7 @@ const CreateLessonButton: React.FC<{ id: string }> = ({ id }) => {
const handleCreateLesson = (): void => history.push(`${id}/create-lesson`); const handleCreateLesson = (): void => history.push(`${id}/create-lesson`);
return ( return (
<Button onClick={handleCreateLesson} size='sm' colorScheme='blue' variant='outline'> <Button onClick={handleCreateLesson} mt='2' size='sm' colorScheme='blue' variant='outline'>
Create new lesson Create new lesson
</Button> </Button>
); );
@ -206,7 +206,9 @@ const LessonList: React.FC<LessonListPropsType> = ({ course }) => {
)} )}
<Flex mt='2' mb='3' padding='0 20px' alignItems='center' justifyContent='space-between'> <Flex mt='2' mb='3' padding='0 20px' alignItems='center' justifyContent='space-between'>
<Text fontWeight='medium'>Total: ({lessons.length})</Text> <Text fontWeight='medium'>Total: ({lessons.length})</Text>
<Button onClick={handleCreateLesson}>Create new</Button> <Button onClick={handleCreateLesson} variant='outline' colorScheme='blue'>
Add new
</Button>
</Flex> </Flex>
<DragDropContext onDragEnd={handleDragEnd}> <DragDropContext onDragEnd={handleDragEnd}>
<Droppable <Droppable
@ -249,10 +251,8 @@ const LessonList: React.FC<LessonListPropsType> = ({ course }) => {
) : ( ) : (
<Box mt='10' textAlign='center'> <Box mt='10' textAlign='center'>
<Text>No lessons have been added to this course yet</Text> <Text>No lessons have been added to this course yet</Text>
<Box p='10px 0'>
<CreateLessonButton id={course.id} /> <CreateLessonButton id={course.id} />
</Box> </Box>
</Box>
)} )}
</Box> </Box>
); );

View File

@ -1,11 +1,9 @@
import React from 'react'; import React from 'react';
import { Table, Tbody, Button, Menu, MenuButton, MenuList, MenuItem } from '@chakra-ui/react'; import { Table, Tbody, Button, Input, InputGroup, InputLeftElement, Flex, Box, Text } from '@chakra-ui/react';
import { Input, InputGroup, InputLeftElement } from '@chakra-ui/react'; import { MdSearch } from 'react-icons/md';
import { Flex, Box, Text } from '@chakra-ui/react';
import { DeleteIcon, ChevronDownIcon } from '@chakra-ui/icons';
import { MdSearch, MdImportExport, MdRemove } from 'react-icons/md';
import AddStudentsModal from '@educt/components/Modals/AddStudentsModal'; import AddStudentsModal from '@educt/components/Modals/AddStudentsModal';
import BulkActionsMenu from './BulkActionsMenu';
import StudentTableHead from './StudentTableHead'; import StudentTableHead from './StudentTableHead';
/** /**
@ -18,7 +16,7 @@ import type { ICourse } from '@educt/interfaces';
* Hooks * Hooks
*/ */
import { useCallback, useState } from 'react'; import { useCallback, useState } from 'react';
import BulkActionsMenu from './BulkActionsMenu'; import { useDisclosure } from '@chakra-ui/react';
type StudentTableListPropsType = { type StudentTableListPropsType = {
render: React.FC<StudentTableRowPropsType>; render: React.FC<StudentTableRowPropsType>;
@ -29,6 +27,11 @@ const StudentTableList: React.FC<StudentTableListPropsType> = ({ render: Row, st
const [rows, setRows] = useState<ICourse['students']>(students); const [rows, setRows] = useState<ICourse['students']>(students);
const [selected, setSelected] = useState<ICourse['students']>([]); const [selected, setSelected] = useState<ICourse['students']>([]);
const [search, setSearch] = useState<string>(''); const [search, setSearch] = useState<string>('');
const {
isOpen: isOpenAddStudentModal,
onOpen: onOpenAddStudentModal,
onClose: onCloseAddStudentModal,
} = useDisclosure();
/** /**
* Search for a student by input * Search for a student by input
@ -68,15 +71,21 @@ const StudentTableList: React.FC<StudentTableListPropsType> = ({ render: Row, st
if (rows.length === 0) { if (rows.length === 0) {
return ( return (
<>
<AddStudentsModal isOpen={isOpenAddStudentModal} onClose={onCloseAddStudentModal} />
<Box textAlign='center' mt='10'> <Box textAlign='center' mt='10'>
<Text>There are no students in the course yet</Text> <Text>There are no students in the course yet</Text>
<AddStudentsModal /> <Button mt='2' onClick={onOpenAddStudentModal} size='sm' colorScheme='blue' variant='outline'>
Add student
</Button>
</Box> </Box>
</>
); );
} }
return ( return (
<Box> <Box>
<AddStudentsModal isOpen={isOpenAddStudentModal} onClose={onCloseAddStudentModal} />
<Flex justifyContent='space-between' flexDir={{ base: 'column', lg: 'row' }}> <Flex justifyContent='space-between' flexDir={{ base: 'column', lg: 'row' }}>
<Flex mb='2'> <Flex mb='2'>
<InputGroup mr='2'> <InputGroup mr='2'>
@ -94,12 +103,12 @@ const StudentTableList: React.FC<StudentTableListPropsType> = ({ render: Row, st
<BulkActionsMenu selected={selected} rows={rows} setRows={setRows} /> <BulkActionsMenu selected={selected} rows={rows} setRows={setRows} />
</> </>
)} )}
<Button variant='outline' colorScheme='blue'> <Button onClick={onOpenAddStudentModal} variant='outline' colorScheme='blue'>
Add new Add new
</Button> </Button>
</Flex> </Flex>
</Flex> </Flex>
<Table overflowX='hidden' borderRadius='lg' mt='2'> <Table overflow='hidden' borderRadius='lg' mt='2'>
<StudentTableHead onSelectAll={handleSelectAll} /> <StudentTableHead onSelectAll={handleSelectAll} />
<Tbody> <Tbody>
{rows.map(student => ( {rows.map(student => (