-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathApp.tsx
More file actions
119 lines (111 loc) · 4.17 KB
/
App.tsx
File metadata and controls
119 lines (111 loc) · 4.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import React, { useState } from 'react';
import Sidebar from './components/Sidebar';
import Header from './components/Header';
import DashboardPage from './pages/DashboardPage';
import StudentsPage from './pages/StudentsPage';
import AdmissionsPage from './pages/AdmissionsPage';
import TeachersPage from './pages/TeachersPage';
import GradesPage from './pages/GradesPage';
import FinancePage from './pages/FinancePage';
import AcademicsPage from './pages/AcademicsPage';
import CommunicationPage from './pages/CommunicationPage';
import SettingsPage from './pages/SettingsPage';
import LoginPage from './pages/LoginPage';
import AttendancePage from './pages/AttendancePage';
import TimetablePage from './pages/TimetablePage';
import { Page, User } from './types';
import { PAGES } from './constants';
import AdmissionDetailPage from './pages/AdmissionDetailPage';
import CurriculumPage from './pages/CurriculumPage';
import AIAssistantButton from './components/AIAssistantButton';
import AIAssistant from './components/AIAssistant';
import TeacherDashboardPage from './pages/TeacherDashboardPage';
const App: React.FC = () => {
const [isLoggedIn, setIsLoggedIn] = useState(false);
const [user, setUser] = useState<User | null>(null);
const [currentPage, setCurrentPage] = useState<Page>(PAGES.DASHBOARD);
const [isSidebarOpen, setSidebarOpen] = useState(false);
const [isAiAssistantOpen, setIsAiAssistantOpen] = useState(false);
const handleLogin = (loggedInUser: User) => {
setUser(loggedInUser);
setIsLoggedIn(true);
setCurrentPage(PAGES.DASHBOARD);
};
const handleLogout = () => {
setUser(null);
setIsLoggedIn(false);
setCurrentPage(PAGES.DASHBOARD);
};
const renderPage = () => {
if (user?.role === 'Teacher') {
switch (currentPage) {
case PAGES.DASHBOARD:
return <TeacherDashboardPage user={user} />;
case PAGES.COMMUNICATION:
return <CommunicationPage />;
case PAGES.SETTINGS:
return <SettingsPage />;
default:
return <TeacherDashboardPage user={user} />;
}
}
// Admin pages
switch (currentPage) {
case PAGES.DASHBOARD:
return <DashboardPage setCurrentPage={setCurrentPage} />;
case PAGES.STUDENTS:
return <StudentsPage />;
case PAGES.ADMISSIONS:
return <AdmissionsPage />;
case PAGES.TEACHERS:
return <TeachersPage />;
case PAGES.GRADES:
return <GradesPage />;
case PAGES.FINANCE:
return <FinancePage />;
case PAGES.ACADEMICS:
return <AcademicsPage />;
case PAGES.CURRICULUM:
return <CurriculumPage />;
case PAGES.COMMUNICATION:
return <CommunicationPage />;
case PAGES.SETTINGS:
return <SettingsPage />;
case PAGES.ATTENDANCE:
return <AttendancePage />;
case PAGES.TIMETABLE:
return <TimetablePage />;
default:
return <DashboardPage setCurrentPage={setCurrentPage} />;
}
};
if (!isLoggedIn) {
return <LoginPage onLogin={handleLogin} />;
}
return (
<div className="relative flex h-screen bg-gray-100 font-sans print:h-auto print:bg-white">
<Sidebar
user={user}
currentPage={currentPage}
setCurrentPage={setCurrentPage}
isSidebarOpen={isSidebarOpen}
setSidebarOpen={setSidebarOpen}
/>
<div className={`flex-1 flex flex-col overflow-hidden print:overflow-visible transition-all duration-300 ease-in-out ${isAiAssistantOpen ? 'mr-0 sm:mr-[24rem] md:mr-[28rem]' : ''}`}>
<Header
pageTitle={currentPage}
user={user}
onLogout={handleLogout}
onMenuClick={() => setSidebarOpen(!isSidebarOpen)}
setCurrentPage={setCurrentPage}
/>
<main className="flex-1 overflow-x-hidden overflow-y-auto bg-gray-100 p-4 sm:p-6 print:overflow-visible print:p-0 print:bg-white">
{renderPage()}
</main>
</div>
{!isAiAssistantOpen && <AIAssistantButton onClick={() => setIsAiAssistantOpen(true)} />}
<AIAssistant isOpen={isAiAssistantOpen} onClose={() => setIsAiAssistantOpen(false)} />
</div>
);
};
export default App;