2020-08-31 18:10:36 +02:00
|
|
|
import React, { useState, useContext, MouseEvent } from 'react';
|
2020-08-12 20:52:53 +02:00
|
|
|
import Collapse from '@material-ui/core/Collapse';
|
2020-08-17 22:05:13 +02:00
|
|
|
import ExpandIcon from '../assets/expand.png';
|
|
|
|
import { Course, Group } from '../types/index';
|
|
|
|
import { coursesContext } from '../contexts/CoursesProvider';
|
2020-08-17 21:15:26 +02:00
|
|
|
import styled from 'styled-components';
|
|
|
|
import { makeStyles } from '@material-ui/core/styles';
|
2020-09-28 18:36:38 +02:00
|
|
|
import CloseIcon from '../assets/close.svg';
|
2020-08-12 20:52:53 +02:00
|
|
|
|
2020-08-17 21:15:26 +02:00
|
|
|
interface ClassExandIconProps {
|
|
|
|
isSelected: boolean;
|
|
|
|
}
|
|
|
|
|
2020-08-17 23:56:34 +02:00
|
|
|
const CourseStyled = styled.div`
|
2020-08-17 21:15:26 +02:00
|
|
|
display: flex;
|
|
|
|
min-height: 50px;
|
|
|
|
background-color: rgb(100, 181, 246) !important;
|
|
|
|
align-items: center;
|
|
|
|
justify-content: center;
|
|
|
|
flex-direction: column;
|
|
|
|
margin-top: 10px;
|
|
|
|
padding-top: 10px;
|
|
|
|
padding-bottom: 10px;
|
|
|
|
border-radius: 10px;
|
|
|
|
cursor: pointer;
|
|
|
|
align-items: stretch;
|
2020-09-28 18:36:38 +02:00
|
|
|
position:relative;
|
2020-08-17 21:15:26 +02:00
|
|
|
`;
|
|
|
|
|
2020-08-17 23:56:34 +02:00
|
|
|
const CourseNameStyled = styled.div`
|
2020-08-17 21:15:26 +02:00
|
|
|
padding-top: 10px;
|
|
|
|
padding-bottom: 10px;
|
|
|
|
`;
|
|
|
|
|
|
|
|
const ClassGroupStyled = styled.div`
|
|
|
|
padding-top: 1px;
|
|
|
|
padding-bottom: 1px;
|
|
|
|
:hover {
|
|
|
|
cursor: pointer;
|
|
|
|
transition: 1s;
|
|
|
|
background-color: #8bc8fb;
|
|
|
|
}
|
|
|
|
`;
|
|
|
|
|
|
|
|
const ClassExandIconStyled = styled.img<ClassExandIconProps>`
|
2020-08-17 22:05:13 +02:00
|
|
|
margin-top: 5px;
|
|
|
|
width: 20px;
|
|
|
|
transition: 0.2s;
|
|
|
|
transform: ${(props) => (props.isSelected ? 'scaleY(-1);' : 'scaleY(1);')};
|
|
|
|
`;
|
2020-08-17 21:15:26 +02:00
|
|
|
|
|
|
|
const useStyles = makeStyles({
|
|
|
|
expanded: {
|
2020-08-17 22:05:13 +02:00
|
|
|
maxHeight: '244px',
|
|
|
|
overflowY: 'auto',
|
2020-08-17 21:15:26 +02:00
|
|
|
},
|
|
|
|
'@global': {
|
|
|
|
'*::-webkit-scrollbar': {
|
2020-08-17 22:05:13 +02:00
|
|
|
width: '0.4em',
|
2020-08-17 21:15:26 +02:00
|
|
|
},
|
|
|
|
'*::-webkit-scrollbar-track': {
|
2020-08-17 22:05:13 +02:00
|
|
|
'-webkit-box-shadow': 'inset 0 0 6px rgba(1,0,0,0.1)',
|
2020-08-17 21:15:26 +02:00
|
|
|
},
|
|
|
|
'*::-webkit-scrollbar-thumb': {
|
2020-08-17 22:05:13 +02:00
|
|
|
borderRadius: '10px',
|
2020-08-17 21:15:26 +02:00
|
|
|
backgroundColor: '#d4b851',
|
2020-08-17 22:05:13 +02:00
|
|
|
outline: '1px solid slategrey',
|
|
|
|
},
|
|
|
|
},
|
2020-08-17 21:15:26 +02:00
|
|
|
});
|
|
|
|
|
2020-09-28 18:36:38 +02:00
|
|
|
const DeleteFromBasketIcon = styled.img`
|
|
|
|
width: 20px;
|
|
|
|
cursor: pointer;
|
|
|
|
position:absolute;
|
|
|
|
left:235px;
|
|
|
|
top:5px;
|
|
|
|
:hover{
|
|
|
|
color:red;
|
|
|
|
}
|
|
|
|
`;
|
|
|
|
|
2020-08-17 22:05:13 +02:00
|
|
|
interface CourseCardProps {
|
|
|
|
course: Course;
|
|
|
|
}
|
|
|
|
|
2020-09-28 18:36:38 +02:00
|
|
|
export const CourseCard = ({ course }: CourseCardProps) => {
|
2020-08-31 18:10:36 +02:00
|
|
|
const [isSelected, setSelected] = useState(false);
|
2020-08-17 21:15:26 +02:00
|
|
|
const classes = useStyles();
|
2020-08-12 20:52:53 +02:00
|
|
|
|
2020-09-28 18:36:38 +02:00
|
|
|
const { addGroup, deleteFromBasket } = useContext(coursesContext)!;
|
2020-08-17 23:56:34 +02:00
|
|
|
|
2020-08-23 17:22:50 +02:00
|
|
|
const onGroupClick = (group: Group, id: number) => addGroup(group, id);
|
2020-08-12 20:52:53 +02:00
|
|
|
|
|
|
|
return (
|
2020-08-31 18:10:36 +02:00
|
|
|
<CourseStyled>
|
2020-09-28 18:36:38 +02:00
|
|
|
<DeleteFromBasketIcon alt="close" src={CloseIcon} onClick={() => deleteFromBasket(course.id)}></DeleteFromBasketIcon>
|
2020-08-31 18:10:36 +02:00
|
|
|
<CourseNameStyled onClick={() => setSelected(!isSelected)}>{course.name}</CourseNameStyled>
|
2020-08-17 21:15:26 +02:00
|
|
|
<Collapse className={classes.expanded} in={isSelected} timeout="auto" unmountOnExit>
|
2020-08-23 17:22:50 +02:00
|
|
|
{course.groups.map((group, index) => (
|
|
|
|
<ClassGroupStyled key={index} onClick={() => onGroupClick(group, course.id)}>
|
|
|
|
<p>
|
|
|
|
{group.time} {group.room} <br></br> {group.lecturer}
|
|
|
|
</p>
|
|
|
|
</ClassGroupStyled>
|
2020-08-12 20:52:53 +02:00
|
|
|
))}
|
|
|
|
</Collapse>
|
2020-08-31 18:10:36 +02:00
|
|
|
<div onClick={() => setSelected(!isSelected)}>
|
2020-08-17 21:15:26 +02:00
|
|
|
<ClassExandIconStyled isSelected={isSelected} alt="expand" src={ExpandIcon} />
|
2020-08-12 20:52:53 +02:00
|
|
|
</div>
|
2020-08-17 23:56:34 +02:00
|
|
|
</CourseStyled>
|
2020-08-12 20:52:53 +02:00
|
|
|
);
|
2020-08-17 23:56:34 +02:00
|
|
|
};
|