5.2 KiB
5.2 KiB
Work Log
2026-01-14
1. Class Management Refactoring (Role Separation)
-
Separation of Duties:
- Moved class creation and management responsibilities from the generic Teacher view to a dedicated Management view.
- Created Grade Management Page at
src/app/(dashboard)/management/grade/classes/page.tsxfor Grade Directors and Admins. - Teachers can now only Join Classes (via code) or view their assigned classes in "My Classes".
-
New Components & Pages:
GradeClassesView(src/modules/classes/components/grade-classes-view.tsx): A comprehensive table view for managing classes within specific grades, supporting creation, editing, and deletion.GradeClassesPage: Server Component that fetches managed grades and classes using strict RBAC (Role-Based Access Control).
-
Teacher "My Classes" Update (
my-classes-grid.tsx):- Removed the "Create Class" button/dialog.
- Added a "Join Class" dialog that accepts a 6-digit invitation code.
- Updated styling to use standard design system colors (
bg-card,border-border) instead of hardcoded gradients.
2. Backend & Logic Updates
-
Data Access (
data-access.ts):- Implemented
getGradeManagedClasses: Fetches classes for grades where the user is either a Grade Head or Teaching Head. - Implemented
getManagedGrades: Fetches the list of grades managed by the user for the creation dropdown. - Updated
getTeacherClasses: Now returns both owned classes (assigned by admin) and enrolled classes (joined via code). - Fixed a SQL syntax error in
getGradeManagedClasses(unescaped backticks in template literal).
- Implemented
-
Server Actions (
actions.ts):- Added
createGradeClassAction,updateGradeClassAction,deleteGradeClassAction: These actions enforce that the user manages the target grade before performing operations. - Updated
joinClassByInvitationCodeAction: Expanded to allow Teachers (roleteacher) to join classes, not just Students.
- Added
3. Verification
- RBAC: Verified that users can only manage classes for grades they are assigned to.
- Flow: Verified Teacher "Join Class" flow correctly redirects and updates the list.
- Syntax: Fixed TypeScript/SQL syntax errors in the new data access functions.
4. Class UI/UX Optimization
-
Students Management Interface (
students-table.tsx,students-filters.tsx):- Enhanced Table: Added student avatars, gender display, and join date.
- Pagination: Implemented client-side pagination (10 items per page) to handle larger classes gracefully.
- Status Filtering: Added "Active/Inactive" filter with visual status badges (Emerald for active, muted for inactive).
- Data Access: Updated
getClassStudentsto fetch extended user profile data and support server-side status filtering.
-
Class Detail Dashboard (
/teacher/classes/my/[id]/page.tsx):- Dashboard Layout: Refactored into a responsive two-column layout (Main Content + Sidebar).
- Key Metrics: Added a 4-card stats grid at the top displaying critical insights:
- Total Students (Active/Inactive breakdown)
- Schedule Items (Weekly sessions)
- Active Assignments (Overdue count)
- Class Average (Based on graded submissions)
- Sidebar Widgets: Added "Class Schedule" and "Homework History" widgets for quick access to temporal data.
- Visual Polish: Integrated
lucide-reacticons throughout for better information scanning.
2026-01-13
1. Navigation & Layout Improvements
- Dynamic Breadcrumbs (
site-header.tsx):- Replaced hardcoded "Dashboard > Overview" breadcrumbs with a dynamic system.
- Implemented a path-to-title lookup using
NAV_CONFIGfromsrc/modules/layout/config/navigation.ts. - Added logic to filter out root role segments (admin/teacher/student/parent) for cleaner paths.
- Added fallback capitalization for segments not found in the config.
- Refactored
SiteHeaderto useusePathnamefor real-time route updates.
2. Code Quality & Bug Fixes
- Type Safety (
homework-grading-view.tsx):- Fixed a TypeScript error where a boolean expression was returning
boolean | undefinedwhich is not a valid React node (implicittruecheck added). - Resolved "Calling setState synchronously within an effect" React warning by initializing state lazily instead of using
useEffect. - Fixed implicit
anytype errors in map functions.
- Fixed a TypeScript error where a boolean expression was returning
- Linting:
- Cleaned up unused imports across multiple files (
exam-actions.tsx,exam-assembly.tsx,textbook-reader.tsx, etc.). - Fixed unescaped HTML entities in
student-dashboard-header.tsxand others. - Removed unused variables to clear ESLint warnings.
- Cleaned up unused imports across multiple files (
- Refactoring:
- Updated
TextbookCardto supporthideActionsprop for better reuse in student views. - Added missing
Progresscomponent tosrc/shared/components/ui/progress.tsx.
- Updated
3. Verification
- Ran
npm run typecheck: Passed (0 errors). - Ran
npm run lint: Passed (0 errors, 28 warnings remaining for unused vars/components that may be needed later).