@@ -4,34 +4,22 @@ import { getServerSession } from "next-auth/next";
44import { redirect } from "next/navigation" ;
55import {
66 ArrowRight ,
7- BarChart3 ,
87 CheckCircle2 ,
98 ClipboardList ,
109 FileJson ,
11- Gauge ,
12- ListChecks ,
1310 MessageSquareWarning ,
14- PenLine ,
1511 PlayCircle ,
16- Settings ,
1712 Sparkles ,
18- Swords ,
19- Target ,
20- Trophy ,
21- User ,
22- Users ,
2313} from "lucide-react" ;
2414import { prisma } from "@/lib/db" ;
2515import { authOptions } from "@/lib/auth" ;
2616import { AuthButton } from "@/app/auth-button" ;
2717import { ThemeToggle } from "@/app/theme-toggle" ;
2818import { TypewriterGreeting } from "@/app/typewriter-greeting" ;
29- import { MobileNavScrim , MobileNavToggle } from "./mobile-nav-toggle" ;
3019import { isVisibleToStudent } from "@/lib/visibility" ;
3120import { profilePathFromEmail } from "@/lib/user-profile" ;
3221import { computeBestAverageScore } from "@/lib/analytics" ;
3322import { normalizeTagList } from "@/lib/problem-tags" ;
34- import { hasPermission } from "@/lib/permissions" ;
3523import { compareProblemSetRecords } from "@/lib/problem-set-order" ;
3624
3725export const dynamic = "force-dynamic" ;
@@ -108,11 +96,6 @@ export default async function DashboardPage() {
10896 const visibleSets = (
10997 currentUser . role === "ADMIN" ? allSets : allSets . filter ( ( set ) => isVisibleToStudent ( set ) )
11098 ) . sort ( compareProblemSetRecords ) ;
111- const canManageContent = hasPermission ( currentUser . role , "admin:content" ) ;
112- const canViewStudents = hasPermission ( currentUser . role , "admin:users" ) ;
113- const canViewAnalytics = hasPermission ( currentUser . role , "admin:analytics" ) ;
114- const canManageFeedback = hasPermission ( currentUser . role , "admin:feedback" ) ;
115- const canViewAudit = hasPermission ( currentUser . role , "admin:audit" ) ;
11699
117100 const attemptsBySet = new Map <
118101 string ,
@@ -266,90 +249,6 @@ export default async function DashboardPage() {
266249
267250 return (
268251 < main className = "app-shell" >
269- < MobileNavScrim />
270- < aside className = "sidebar" aria-label = "Primary" tabIndex = { 0 } >
271- < nav className = "nav-list" >
272- < Link className = "nav-item active" href = "/dashboard" >
273- < Gauge size = { 18 } />
274- < span className = "nav-label" > Dashboard</ span >
275- </ Link >
276- < Link className = "nav-item" href = "/problem-sets" >
277- < ClipboardList size = { 18 } />
278- < span className = "nav-label" > Problem Sets</ span >
279- </ Link >
280- < Link className = "nav-item" href = "/practice" >
281- < Target size = { 18 } />
282- < span className = "nav-label" > Practice</ span >
283- </ Link >
284- < Link className = "nav-item" href = "/ftw" >
285- < Swords size = { 18 } />
286- < span className = "nav-label" > FTW</ span >
287- </ Link >
288- { hasPermission ( currentUser . role , "admin:view" ) ? (
289- < >
290- { canManageContent ? (
291- < >
292- < Link className = "nav-item" href = "/admin/sets" >
293- < ListChecks size = { 18 } />
294- < span className = "nav-label" > Manage Sets</ span >
295- </ Link >
296- < Link className = "nav-item" href = "/admin/create" >
297- < PenLine size = { 18 } />
298- < span className = "nav-label" > Create Set</ span >
299- </ Link >
300- < Link className = "nav-item" href = "/admin/import" >
301- < FileJson size = { 18 } />
302- < span className = "nav-label" > JSON Import</ span >
303- </ Link >
304- </ >
305- ) : null }
306- { canViewStudents ? (
307- < Link className = "nav-item" href = "/admin/students" >
308- < Users size = { 18 } />
309- < span className = "nav-label" > Students</ span >
310- </ Link >
311- ) : null }
312- { canViewAnalytics ? (
313- < Link className = "nav-item" href = "/admin/analytics" >
314- < BarChart3 size = { 18 } />
315- < span className = "nav-label" > Analytics</ span >
316- </ Link >
317- ) : null }
318- { canManageFeedback ? (
319- < Link className = "nav-item" href = "/admin/feedback" >
320- < MessageSquareWarning size = { 18 } />
321- < span className = "nav-label" > Feedback</ span >
322- </ Link >
323- ) : null }
324- { canViewAudit ? (
325- < Link className = "nav-item" href = "/admin/audit" >
326- < CheckCircle2 size = { 18 } />
327- < span className = "nav-label" > Audit</ span >
328- </ Link >
329- ) : null }
330- </ >
331- ) : null }
332- < Link className = "nav-item" href = "/users" >
333- < Users size = { 18 } />
334- < span className = "nav-label" > Users</ span >
335- </ Link >
336- < Link className = "nav-item" href = { profileHref } >
337- < User size = { 18 } />
338- < span className = "nav-label" > My Profile</ span >
339- </ Link >
340- < Link className = "nav-item" href = "/leaderboard" >
341- < Trophy size = { 18 } />
342- < span className = "nav-label" > Leaderboard</ span >
343- </ Link >
344- < Link className = "nav-item" href = "/settings" >
345- < Settings size = { 18 } />
346- < span className = "nav-label" > Settings</ span >
347- </ Link >
348- </ nav >
349-
350- < div className = "sidebar-footer" />
351- </ aside >
352-
353252 < section className = "workspace" >
354253 < header className = "topbar" >
355254 < div >
@@ -359,7 +258,6 @@ export default async function DashboardPage() {
359258 < h1 > training dashboard</ h1 >
360259 </ div >
361260 < div className = "topbar-actions" >
362- < MobileNavToggle />
363261 < ThemeToggle />
364262 < AuthButton
365263 avatarUrl = { currentUser . avatarUrl }
0 commit comments