fix: completely remove Saturday from timetable model, parser, fallback, and UI
This commit is contained in:
@@ -35,7 +35,7 @@ export default function StudentDashboard() {
|
|||||||
|
|
||||||
// Navigation State
|
// Navigation State
|
||||||
const [activeTab, setActiveTab] = useState<'timetable' | 'attendance' | 'marks' | 'grades' | 'faculties'>('timetable');
|
const [activeTab, setActiveTab] = useState<'timetable' | 'attendance' | 'marks' | 'grades' | 'faculties'>('timetable');
|
||||||
const [selectedDay, setSelectedDay] = useState<'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday'>('monday');
|
const [selectedDay, setSelectedDay] = useState<'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday'>('monday');
|
||||||
const [selectedSemFilter, setSelectedSemFilter] = useState<number>(0);
|
const [selectedSemFilter, setSelectedSemFilter] = useState<number>(0);
|
||||||
|
|
||||||
// Loaded Data States
|
// Loaded Data States
|
||||||
@@ -67,9 +67,9 @@ export default function StudentDashboard() {
|
|||||||
}
|
}
|
||||||
}, [session?.token]);
|
}, [session?.token]);
|
||||||
|
|
||||||
// Set default day to today
|
// Set default day to today (Mon-Fri)
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const dayNames: (keyof WeeklySchedule)[] = ['monday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
|
const dayNames: (keyof WeeklySchedule)[] = ['monday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'friday'];
|
||||||
const today = dayNames[new Date().getDay()] || 'monday';
|
const today = dayNames[new Date().getDay()] || 'monday';
|
||||||
setSelectedDay(today);
|
setSelectedDay(today);
|
||||||
}, []);
|
}, []);
|
||||||
@@ -84,12 +84,12 @@ export default function StudentDashboard() {
|
|||||||
const tt = await fetchImsTimetable(token, p.registerNumber, force);
|
const tt = await fetchImsTimetable(token, p.registerNumber, force);
|
||||||
setTimetable(tt);
|
setTimetable(tt);
|
||||||
|
|
||||||
const dayNames: (keyof WeeklySchedule)[] = ['monday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
|
const dayNames: (keyof WeeklySchedule)[] = ['monday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'friday'];
|
||||||
const today = dayNames[new Date().getDay()] || 'monday';
|
const today = dayNames[new Date().getDay()] || 'monday';
|
||||||
if (tt && tt[today] && tt[today].length > 0) {
|
if (tt && tt[today] && tt[today].length > 0) {
|
||||||
setSelectedDay(today);
|
setSelectedDay(today);
|
||||||
} else if (tt) {
|
} else if (tt) {
|
||||||
const firstActive = (['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'] as const).find(
|
const firstActive = (['monday', 'tuesday', 'wednesday', 'thursday', 'friday'] as const).find(
|
||||||
d => tt[d] && tt[d].length > 0
|
d => tt[d] && tt[d].length > 0
|
||||||
);
|
);
|
||||||
if (firstActive) setSelectedDay(firstActive);
|
if (firstActive) setSelectedDay(firstActive);
|
||||||
@@ -734,9 +734,8 @@ export default function StudentDashboard() {
|
|||||||
{/* Day Switcher */}
|
{/* Day Switcher */}
|
||||||
<div className="flex flex-wrap items-center justify-between gap-3 bg-white p-4 rounded-2xl border border-[#E5E7EB] shadow-sm">
|
<div className="flex flex-wrap items-center justify-between gap-3 bg-white p-4 rounded-2xl border border-[#E5E7EB] shadow-sm">
|
||||||
<div className="flex items-center gap-2 overflow-x-auto py-1">
|
<div className="flex items-center gap-2 overflow-x-auto py-1">
|
||||||
{(['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'] as const).map((dayKey) => {
|
{(['monday', 'tuesday', 'wednesday', 'thursday', 'friday'] as const).map((dayKey) => {
|
||||||
const count = timetable?.[dayKey]?.length || 0;
|
const count = timetable?.[dayKey]?.length || 0;
|
||||||
if (dayKey === 'saturday' && count === 0) return null;
|
|
||||||
const isSelected = selectedDay === dayKey;
|
const isSelected = selectedDay === dayKey;
|
||||||
return (
|
return (
|
||||||
<button
|
<button
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ export interface WeeklySchedule {
|
|||||||
wednesday: TimetablePeriod[];
|
wednesday: TimetablePeriod[];
|
||||||
thursday: TimetablePeriod[];
|
thursday: TimetablePeriod[];
|
||||||
friday: TimetablePeriod[];
|
friday: TimetablePeriod[];
|
||||||
saturday: TimetablePeriod[];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface SubjectAttendance {
|
export interface SubjectAttendance {
|
||||||
@@ -282,15 +281,6 @@ export function generateCurriculumSchedule(deptCode: string, semester: number):
|
|||||||
{ periodNumber: 6, timeSlot: '02:25 PM - 03:20 PM', startTime: '14:25', endTime: '15:20', subjectCode: 'CB23531', subjectName: 'Business Analytics', staffName: 'FOUZIA SULTHANA K. (CS84)', type: 'THEORY' },
|
{ periodNumber: 6, timeSlot: '02:25 PM - 03:20 PM', startTime: '14:25', endTime: '15:20', subjectCode: 'CB23531', subjectName: 'Business Analytics', staffName: 'FOUZIA SULTHANA K. (CS84)', type: 'THEORY' },
|
||||||
{ periodNumber: 7, timeSlot: '03:20 PM - 04:15 PM', startTime: '15:20', endTime: '16:15', subjectCode: 'CB23531', subjectName: 'Business Analytics', staffName: 'FOUZIA SULTHANA K. (CS84)', type: 'THEORY' },
|
{ periodNumber: 7, timeSlot: '03:20 PM - 04:15 PM', startTime: '15:20', endTime: '16:15', subjectCode: 'CB23531', subjectName: 'Business Analytics', staffName: 'FOUZIA SULTHANA K. (CS84)', type: 'THEORY' },
|
||||||
],
|
],
|
||||||
saturday: [
|
|
||||||
{ periodNumber: 1, timeSlot: '08:45 AM - 09:40 AM', startTime: '08:45', endTime: '09:40', subjectCode: 'AD23IC3', subjectName: 'Tableau - Data Visualization', staffName: 'FOUZIA SULTHANA K. (CS84)', type: 'LAB' },
|
|
||||||
{ periodNumber: 2, timeSlot: '09:40 AM - 10:35 AM', startTime: '09:40', endTime: '10:35', subjectCode: 'MX23511', subjectName: 'Disaster Risk Reduction', staffName: 'DR. SRINIVASAN M P (PH22)', type: 'THEORY' },
|
|
||||||
{ periodNumber: 3, timeSlot: '10:50 AM - 11:45 AM', startTime: '10:50', endTime: '11:45', subjectCode: 'AD23IC3', subjectName: 'Tableau - Data Visualization', staffName: 'FOUZIA SULTHANA K. (CS84)', type: 'LAB' },
|
|
||||||
{ periodNumber: 4, timeSlot: '11:45 AM - 12:40 PM', startTime: '11:45', endTime: '12:40', subjectCode: 'AD23IC3', subjectName: 'Tableau - Data Visualization', staffName: 'FOUZIA SULTHANA K. (CS84)', type: 'LAB' },
|
|
||||||
{ periodNumber: 5, timeSlot: '01:30 PM - 02:25 PM', startTime: '13:30', endTime: '14:25', subjectCode: 'AD23IC3', subjectName: 'Tableau - Data Visualization', staffName: 'FOUZIA SULTHANA K. (CS84)', type: 'LAB' },
|
|
||||||
{ periodNumber: 6, timeSlot: '02:25 PM - 03:20 PM', startTime: '14:25', endTime: '15:20', subjectCode: 'AD23IC3', subjectName: 'Tableau - Data Visualization', staffName: 'FOUZIA SULTHANA K. (CS84)', type: 'LAB' },
|
|
||||||
{ periodNumber: 7, timeSlot: '03:20 PM - 04:15 PM', startTime: '15:20', endTime: '16:15', subjectCode: 'MX23511', subjectName: 'Disaster Risk Reduction', staffName: 'DR. SRINIVASAN M P (PH22)', type: 'THEORY' },
|
|
||||||
],
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -316,7 +306,6 @@ export function normalizeTimetableSchedule(scheduleRaw: any): WeeklySchedule {
|
|||||||
wednesday: [],
|
wednesday: [],
|
||||||
thursday: [],
|
thursday: [],
|
||||||
friday: [],
|
friday: [],
|
||||||
saturday: [],
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!scheduleRaw) return weekly;
|
if (!scheduleRaw) return weekly;
|
||||||
@@ -351,12 +340,6 @@ export function normalizeTimetableSchedule(scheduleRaw: any): WeeklySchedule {
|
|||||||
'friday': 'friday',
|
'friday': 'friday',
|
||||||
'day 5': 'friday',
|
'day 5': 'friday',
|
||||||
'day5': 'friday',
|
'day5': 'friday',
|
||||||
|
|
||||||
'6': 'saturday',
|
|
||||||
'sat': 'saturday',
|
|
||||||
'saturday': 'saturday',
|
|
||||||
'day 6': 'saturday',
|
|
||||||
'day6': 'saturday',
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const scheduleMap = scheduleRaw.schedule || scheduleRaw.data?.schedule || scheduleRaw.data || scheduleRaw;
|
const scheduleMap = scheduleRaw.schedule || scheduleRaw.data?.schedule || scheduleRaw.data || scheduleRaw;
|
||||||
@@ -697,7 +680,7 @@ export function updateImsProfileName(newName: string): StudentProfile | null {
|
|||||||
*/
|
*/
|
||||||
export async function fetchImsTimetable(_token: string, regNumber: string, _forceRefresh = false): Promise<WeeklySchedule> {
|
export async function fetchImsTimetable(_token: string, regNumber: string, _forceRefresh = false): Promise<WeeklySchedule> {
|
||||||
let weeklySchedule: WeeklySchedule = {
|
let weeklySchedule: WeeklySchedule = {
|
||||||
monday: [], tuesday: [], wednesday: [], thursday: [], friday: [], saturday: [],
|
monday: [], tuesday: [], wednesday: [], thursday: [], friday: [],
|
||||||
};
|
};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -736,11 +719,11 @@ export async function fetchImsTimetable(_token: string, regNumber: string, _forc
|
|||||||
if (forms.length > 0) {
|
if (forms.length > 0) {
|
||||||
const dayAliases: Record<string, keyof WeeklySchedule> = {
|
const dayAliases: Record<string, keyof WeeklySchedule> = {
|
||||||
'monday': 'monday', 'tuesday': 'tuesday', 'wednesday': 'wednesday',
|
'monday': 'monday', 'tuesday': 'tuesday', 'wednesday': 'wednesday',
|
||||||
'thursday': 'thursday', 'friday': 'friday', 'saturday': 'saturday',
|
'thursday': 'thursday', 'friday': 'friday',
|
||||||
};
|
};
|
||||||
|
|
||||||
const periodMap: Record<string, Record<number, TimetablePeriod>> = {
|
const periodMap: Record<string, Record<number, TimetablePeriod>> = {
|
||||||
monday: {}, tuesday: {}, wednesday: {}, thursday: {}, friday: {}, saturday: {}
|
monday: {}, tuesday: {}, wednesday: {}, thursday: {}, friday: {}
|
||||||
};
|
};
|
||||||
|
|
||||||
forms.forEach(form => {
|
forms.forEach(form => {
|
||||||
|
|||||||
Reference in New Issue
Block a user