forked from CSI-KJSCE/appointment_to_examiner
consolidated filter
This commit is contained in:
@@ -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 <div>Loading...</div>;
|
||||
}
|
||||
|
||||
// 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 */}
|
||||
<select
|
||||
value={selectedYear}
|
||||
onChange={(e) => setSelectedYear(e.target.value)}
|
||||
>
|
||||
{academicYears.map((year) => (
|
||||
<option key={year} value={year}>
|
||||
{year}
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div style={styles.tableContainer}>
|
||||
{currentTeachers.map((teacher, index) => {
|
||||
const teacherData = data.filter((row) => row.Name === teacher);
|
||||
const teacherData = filteredData.filter((row) => row.Name === teacher);
|
||||
console.log(teacherData);
|
||||
return (
|
||||
<div key={index} style={{ marginBottom: "20px" }}>
|
||||
@@ -316,7 +346,9 @@ const ConsolidatedTable = () => {
|
||||
<td style={styles.td}>{row.courseCode}</td>
|
||||
<td style={styles.td}>{row.courseName}</td>
|
||||
<td style={styles.td}>{row.examType}</td>
|
||||
<td style={styles.td}>{row.examPeriod +" "+ row.academicYear}</td>
|
||||
<td style={styles.td}>
|
||||
{row.examPeriod + " " + row.academicYear}
|
||||
</td>
|
||||
<td style={styles.td}>{row.marks}</td>
|
||||
<td style={styles.td}>{row.Name}</td>
|
||||
<td style={styles.td}>{row.affiliation}</td>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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" });
|
||||
|
||||
Reference in New Issue
Block a user