diff --git a/apps/dashboard/src/lib/features/course/components/course-progress-card.svelte b/apps/dashboard/src/lib/features/course/components/course-progress-card.svelte
index 515a34ed..eb70e97d 100644
--- a/apps/dashboard/src/lib/features/course/components/course-progress-card.svelte
+++ b/apps/dashboard/src/lib/features/course/components/course-progress-card.svelte
@@ -4,27 +4,33 @@
import type { ContentProgress } from '$features/course/utils/content';
interface Props {
- progress: ContentProgress;
+ progress?: ContentProgress;
class?: string;
}
let { progress, class: className = '' }: Props = $props();
+
+ const percent = $derived(progress?.percent ?? 0);
+ const lessonsComplete = $derived(progress?.lessonsComplete ?? 0);
+ const lessonsTotal = $derived(progress?.lessonsTotal ?? 0);
+ const exercisesComplete = $derived(progress?.exercisesComplete ?? 0);
+ const exercisesTotal = $derived(progress?.exercisesTotal ?? 0);
{$t('course.sidebar.progress.title')}
- {progress.percent}%
+ {percent}%
-
+
{$t('course.sidebar.progress.lessons', {
- completed: progress.lessonsComplete,
- total: progress.lessonsTotal
- })}{#if progress.exercisesTotal > 0}
+ completed: lessonsComplete,
+ total: lessonsTotal
+ })}{#if exercisesTotal > 0}
· {$t('course.sidebar.progress.exercises', {
- completed: progress.exercisesComplete,
- total: progress.exercisesTotal
+ completed: exercisesComplete,
+ total: exercisesTotal
})}{/if}
diff --git a/apps/dashboard/src/lib/features/course/components/lesson/content-navigation-actions.svelte b/apps/dashboard/src/lib/features/course/components/lesson/content-navigation-actions.svelte
index 5806c72e..96177c31 100644
--- a/apps/dashboard/src/lib/features/course/components/lesson/content-navigation-actions.svelte
+++ b/apps/dashboard/src/lib/features/course/components/lesson/content-navigation-actions.svelte
@@ -29,9 +29,11 @@
courseId: string;
/** When on an exercise page, pass this to show prev/next content in content order (no mark-complete). */
exerciseId?: string;
+ /** When false, hide prev/next chevrons (mobile bottom nav already has them). */
+ showPrevNext?: boolean;
}
- let { lessonId, courseId, exerciseId }: Props = $props();
+ let { lessonId, courseId, exerciseId, showPrevNext = true }: Props = $props();
let isMarkingComplete = $state(false);
@@ -229,7 +231,7 @@
{watchProgressTooltip}
- {:else if showMarkComplete && lessonId && !isLessonLocked && (showVideoWatchCompleteState || !isVideoWatchLesson)}
+ {:else if showMarkComplete && lessonId && !isLessonLocked && !isLessonComplete && !isVideoWatchLesson}