Files
classroomio/apps/dashboard/src/lib/features/lms/pages/mylearning.svelte
T

72 lines
2.3 KiB
Svelte
Raw Normal View History

<script lang="ts">
import * as UnderlineTabs from '@cio/ui/custom/underline-tabs';
2026-06-10 09:18:20 +01:00
import { Button } from '@cio/ui/base/button';
import { CoursesPage } from '$features/course/pages';
import { profile } from '$lib/utils/store/user';
import { currentOrg } from '$lib/utils/store/org';
import { t } from '$lib/utils/functions/translations';
2026-03-09 11:18:22 +01:00
import { coursesApi } from '$features/course/api';
2026-04-27 11:40:38 +01:00
import { isStudentCourseComplete } from '$features/course/utils/compliance-utils';
let searchValue = $state('');
2026-03-09 11:18:22 +01:00
function isCourseComplete(course: (typeof coursesApi.enrolledCourses)[number]): boolean {
2026-04-27 11:40:38 +01:00
return isStudentCourseComplete(course);
}
2026-03-09 11:18:22 +01:00
const coursesInProgress = $derived(coursesApi.enrolledCourses.filter((course) => !isCourseComplete(course)));
const coursesComplete = $derived(coursesApi.enrolledCourses.filter((course) => isCourseComplete(course)));
$effect(() => {
2026-03-09 11:18:22 +01:00
if (!$profile.id || !$currentOrg.id) return;
coursesApi.getEnrolledCourses();
});
let tabs = $derived([
{
2026-03-09 11:18:22 +01:00
label: `${$t('my_learning.progress')} (${coursesInProgress.length})`,
value: '1'
},
{
2026-03-09 11:18:22 +01:00
label: `${$t('my_learning.complete')} (${coursesComplete.length})`,
value: '2'
}
]);
let currentTab = $state('1');
</script>
<UnderlineTabs.Root bind:value={currentTab}>
<UnderlineTabs.List>
{#each tabs as tab (tab.value)}
<UnderlineTabs.Trigger value={tab.value}>
{$t(tab.label)}
</UnderlineTabs.Trigger>
{/each}
</UnderlineTabs.List>
<UnderlineTabs.Content value={tabs[0].value}>
<CoursesPage
bind:searchValue
2026-03-09 11:18:22 +01:00
courses={coursesInProgress}
emptyDescription={$t('my_learning.any_progress')}
emptyTitle={$t('my_learning.not_in_progress')}
isLMS={true}
2026-03-09 11:18:22 +01:00
isLoading={coursesApi.isLoading}
2026-06-10 09:18:20 +01:00
>
{#snippet emptyAction()}
<Button href="/lms/explore">{$t('my_learning.find_courses')}</Button>
{/snippet}
</CoursesPage>
</UnderlineTabs.Content>
<UnderlineTabs.Content value={tabs[1].value}>
<CoursesPage
bind:searchValue
2026-03-09 11:18:22 +01:00
courses={coursesComplete}
emptyDescription={$t('my_learning.any_course')}
emptyTitle={$t('my_learning.not_completed')}
isLMS={true}
2026-03-09 11:18:22 +01:00
isLoading={coursesApi.isLoading}
/>
</UnderlineTabs.Content>
</UnderlineTabs.Root>