feat(dashboard): add content page options menu (#757)
* feat(dashboard): add content page options menu Add a three-dot menu on the course Content page with actions to unlock all locked lessons/exercises and toggle content grouping. Reuse shared locked-content collection logic from course settings. Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com> * fix(dashboard): keep unlock-all enabled and add menu icons Show a success snackbar when all content is already unlocked instead of disabling the action. Add lock-open and table-of-contents icons to menu items. Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com> * fix(dashboard): check courseApi.update return for grouping toggle Use the update() return value instead of courseApi.success, which can be false after a successful PUT if the follow-up refresh request fails. Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com> --------- Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>
This commit is contained in:
co-authored by
Rotimi Best
parent
bfafc685e0
commit
656fa4fa7e
@@ -1,5 +1,22 @@
|
||||
import { ContentType } from '@cio/utils/constants/content';
|
||||
import type { StudentContentLockReason } from '$features/ai-assistant/utils/content-ask-ai-bar';
|
||||
import type { Course } from './types';
|
||||
import { getCourseContent } from './content';
|
||||
|
||||
export type LockedContentItem = { id: string; type: ContentType.Lesson | ContentType.Exercise };
|
||||
|
||||
export function collectLockedContentItems(course: Course | null): LockedContentItem[] {
|
||||
const content = getCourseContent(course);
|
||||
|
||||
const items = content.grouped ? content.sections.flatMap((section) => section.items) : content.items;
|
||||
|
||||
return items
|
||||
.filter((item) => (item.isUnlocked ?? true) === false)
|
||||
.map((item) => ({
|
||||
id: item.id,
|
||||
type: item.type === ContentType.Exercise ? ContentType.Exercise : ContentType.Lesson
|
||||
}));
|
||||
}
|
||||
|
||||
export function getStudentContentLockTitleKey(reason: StudentContentLockReason): string {
|
||||
if (reason === 'progression_locked') {
|
||||
|
||||
Reference in New Issue
Block a user