diff --git a/client/src/Pages/ConsolidatedTable.jsx b/client/src/Pages/ConsolidatedTable.jsx
index 7614f9d..ac9f295 100644
--- a/client/src/Pages/ConsolidatedTable.jsx
+++ b/client/src/Pages/ConsolidatedTable.jsx
@@ -3,8 +3,8 @@ import axios from "axios";
import * as XLSX from "xlsx-js-style";
import { sendEmail, createExcelBook } from "../api";
import Navbar from "./Navbar";
-import { toast, ToastContainer } from 'react-toastify';
-import 'react-toastify/dist/ReactToastify.css';
+import { toast, ToastContainer } from "react-toastify";
+import "react-toastify/dist/ReactToastify.css";
const styles = {
header: {
@@ -91,6 +91,18 @@ const ConsolidatedTable = () => {
const tablesPerPage = 5;
const [expandedTeacher, setExpandedTeacher] = useState(null);
+ const getAcademicYears = () => {
+ const currentYear = new Date().getFullYear();
+ return Array.from({ length: 6 }, (_, i) => {
+ const startYear = currentYear - i;
+ const endYear = (startYear + 1).toString().slice(-2); // Get last two digits
+ return `${startYear}-${endYear}`;
+ });
+ };
+
+ const academicYears = getAcademicYears();
+ const [selectedYear, setSelectedYear] = useState(academicYears[0]); // Default to current academic year
+
useEffect(() => {
const fetchData = async () => {
try {
@@ -113,6 +125,13 @@ const ConsolidatedTable = () => {
return
Loading...
;
}
+ // Filter data based on search query and selected academic year
+ const filteredData = data.filter(
+ (row) =>
+ row.academicYear === selectedYear && // Filter by selected academic year
+ row.Name.toLowerCase().includes(searchQuery.toLowerCase()) // Filter by search query
+ );
+
// Extract unique faculty names and filter based on the search query
const filteredTeachers = [...new Set(data.map((row) => row.Name))].filter(
(teacher) => teacher.toLowerCase().includes(searchQuery.toLowerCase()) // Filter by search query
@@ -238,11 +257,22 @@ const ConsolidatedTable = () => {
fontSize: "16px",
}}
/>
+ {/* Academic Year Dropdown */}
+
{currentTeachers.map((teacher, index) => {
- const teacherData = data.filter((row) => row.Name === teacher);
+ const teacherData = filteredData.filter((row) => row.Name === teacher);
console.log(teacherData);
return (
@@ -316,7 +346,9 @@ const ConsolidatedTable = () => {
{row.courseCode} |
{row.courseName} |
{row.examType} |
- {row.examPeriod +" "+ row.academicYear} |
+
+ {row.examPeriod + " " + row.academicYear}
+ |
{row.marks} |
{row.Name} |
{row.affiliation} |
diff --git a/client/src/Pages/FilterPage.jsx b/client/src/Pages/FilterPage.jsx
index 53d6fc3..205fdd0 100644
--- a/client/src/Pages/FilterPage.jsx
+++ b/client/src/Pages/FilterPage.jsx
@@ -3,19 +3,22 @@ import { useNavigate } from "react-router-dom";
import "./FilterPage.css";
import { fetchCourses } from "../api";
import Navbar from "./Navbar";
-import { toast, ToastContainer } from 'react-toastify';
-import 'react-toastify/dist/ReactToastify.css';
+import { toast, ToastContainer } from "react-toastify";
+import "react-toastify/dist/ReactToastify.css";
const FilterPage = () => {
const currentYear = new Date().getFullYear();
- const [formData, setFormData] = useState({
+
+ // Load saved filters from localStorage or set default values
+ const savedFilters = JSON.parse(localStorage.getItem("filterState")) || {
scheme: "",
semester: "",
department: "",
program: "",
academicYear: `${currentYear}-${(currentYear + 1).toString().slice(-2)}`,
- });
+ };
+ const [formData, setFormData] = useState(savedFilters);
const navigate = useNavigate();
const handleInputChange = (e) => {
@@ -41,6 +44,7 @@ const FilterPage = () => {
}
try {
+ localStorage.setItem("filterState", JSON.stringify(formData));
const filteredCourses = await fetchCourses(formData);
if (filteredCourses.length > 0) {
// Save filteredCourses in localStorage
diff --git a/server/server.js b/server/server.js
index 778f4d1..dbb2088 100644
--- a/server/server.js
+++ b/server/server.js
@@ -172,7 +172,6 @@ app.get("/auth/logout", function (req, res) {
// Refresh Token Endpoint
app.post("/api/refresh", (req, res) => {
const refreshToken = req.cookies.token;
- console.log(refreshToken);
if (!refreshToken) {
return res.status(401).json({ message: "No refresh token, authorization denied" });