Skip to content

Commit 042d9a5

Browse files
authored
Merge pull request #22 from DevOps-Cloud-Team5/SCRUM-20-Main-page(student)
Scrum 20 main page(student)
2 parents 73b4148 + 167c355 commit 042d9a5

File tree

5 files changed

+108
-1
lines changed

5 files changed

+108
-1
lines changed

src/mock_data.tsx

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export const sampleStudentData = {
2+
id: 1,
3+
name: "John Doe",
4+
courses: ["Math", "Science", "History"]
5+
};
6+

src/pages/schedule/index.tsx

+92
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
import React, { useState } from 'react';
2+
import Container from '@mui/material/Container';
3+
import List from '@mui/material/List';
4+
import ListItem from '@mui/material/ListItem';
5+
import ListItemText from '@mui/material/ListItemText';
6+
import Checkbox from '@mui/material/Checkbox';
7+
import { useParams } from 'react-router-dom';
8+
import { Course, AttendanceData } from '../../types/common';
9+
10+
// Mock data for courses
11+
const mockCourses: Course[] = [
12+
{
13+
course_id: 'course1',
14+
course_name: 'Mathematics',
15+
schedule: ['Monday', 'Wednesday', 'Friday'],
16+
enrolled_students: ['student1', 'student2', 'student3'],
17+
teachers: ['teacher1', 'teacher2'],
18+
},
19+
{
20+
course_id: 'course2',
21+
course_name: 'Physics',
22+
schedule: ['Tuesday', 'Thursday'],
23+
enrolled_students: ['student2', 'student3', 'student4'],
24+
teachers: ['teacher2', 'teacher3'],
25+
},
26+
{
27+
course_id: 'course3',
28+
course_name: 'Biology',
29+
schedule: ['Monday', 'Wednesday'],
30+
enrolled_students: ['student1', 'student3', 'student4'],
31+
teachers: ['teacher1', 'teacher3'],
32+
},
33+
];
34+
35+
const initialAttendanceData: AttendanceData = {};
36+
37+
// Initialize attendance data for each course and each day
38+
mockCourses.forEach(course => {
39+
course.schedule.forEach(day => {
40+
initialAttendanceData[day] = initialAttendanceData[day] || {};
41+
initialAttendanceData[day][course.course_id] = false;
42+
});
43+
});
44+
45+
const AttendancePage: React.FC = () => {
46+
const { studentId } = useParams<{ studentId: string }>();
47+
const [attendance, setAttendance] = useState<AttendanceData>(initialAttendanceData);
48+
49+
const handleAttendanceChange = (courseId: string, day: string) => (event: React.ChangeEvent<HTMLInputElement>) => {
50+
setAttendance(prevAttendance => ({
51+
...prevAttendance,
52+
[day]: {
53+
...prevAttendance[day],
54+
[courseId]: event.target.checked,
55+
}
56+
}));
57+
// You can send the updated attendance for the specific course and day to the backend here
58+
};
59+
60+
const daysOfWeek = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'];
61+
62+
return (
63+
<Container component="main" maxWidth="xs">
64+
<h1>Attendance</h1>
65+
{daysOfWeek.map(day => (
66+
<div key={day}>
67+
<h2>{day}</h2>
68+
<List>
69+
{mockCourses
70+
.filter(course => course.schedule.includes(day))
71+
.map(course => (
72+
<ListItem key={course.course_id}>
73+
<ListItemText primary={course.course_name} />
74+
<Checkbox
75+
checked={attendance[day][course.course_id] || false}
76+
onChange={handleAttendanceChange(course.course_id, day)}
77+
sx={{
78+
'& .MuiSvgIcon-root': { // Overrides the color of the checkbox icon
79+
color: 'white'
80+
}
81+
}}
82+
/>
83+
</ListItem>
84+
))}
85+
</List>
86+
</div>
87+
))}
88+
</Container>
89+
);
90+
};
91+
92+
export default AttendancePage;

src/pages/schedule/main.css

Whitespace-only changes.

src/routes/index.tsx

+5-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import HomePage from "../pages/home";
55
import Profile from "../pages/profile";
66
import People from "../pages/people";
77
import Courses from "../pages/courses";
8-
8+
import Schedule from "../pages/schedule"
99
import { IsAdmin, isLoggedIn } from "../utils";
1010
import CreateUser from "../pages/create_user";
1111
import ResetPassword from "../pages/reset_password";
@@ -54,6 +54,10 @@ const AppRouter = createBrowserRouter([
5454
path: "/courses",
5555
element: isLoggedIn() ? <Courses /> : <Navigate to="/login" replace />
5656
},
57+
{
58+
path: "/schedule",
59+
element: isLoggedIn() ? <Schedule /> : <Navigate to="/login" replace />
60+
},
5761
{
5862
path: "/reset_password",
5963
element: isLoggedIn() ? (

src/types/common.ts

+5
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,8 @@ export interface CookieJWT {
2727
email: string;
2828
role: string;
2929
}
30+
export interface AttendanceData {
31+
[day: string]: {
32+
[courseId: string]: boolean;
33+
};
34+
}

0 commit comments

Comments
 (0)