34 lines
1.2 KiB
TypeScript
34 lines
1.2 KiB
TypeScript
export type LearnerNavItem = {
|
|
label: string
|
|
path: string
|
|
minAnyRoles?: string[]
|
|
}
|
|
|
|
export const LEARNER_NAV_ITEMS: LearnerNavItem[] = [
|
|
{ label: 'Dashboard', path: '/learn' },
|
|
{ label: 'My Courses', path: '/learn/courses' },
|
|
{ label: 'SCORM', path: '/learn/scorm' },
|
|
{ label: 'Live Sessions', path: '/learn/live' },
|
|
{ label: 'Certificates', path: '/learn/certificates' },
|
|
{ label: 'Community', path: '/learn/community' },
|
|
{ label: 'Billing', path: '/learn/billing', minAnyRoles: ['learner', 'admin'] },
|
|
{ label: 'Profile', path: '/learn/profile' },
|
|
{ label: 'Notifications', path: '/learn/notifications' },
|
|
]
|
|
|
|
export function hasAnyRole(roles: string[], required: string[]): boolean {
|
|
return required.some(role => roles.includes(role))
|
|
}
|
|
|
|
export function hasLearnerPortalAccess(roles: string[]): boolean {
|
|
return hasAnyRole(roles, ['learner', 'admin', 'instructor'])
|
|
}
|
|
|
|
export function isLearnerNavItemActive(itemPath: string, currentPath: string): boolean {
|
|
const item = itemPath.trim()
|
|
const current = currentPath.trim()
|
|
if (!item || !current) return false
|
|
if (item === '/learn') return current === '/learn'
|
|
return current === item || current.startsWith(`${item}/`)
|
|
}
|