Chamilo is a learning management system focused on ease of use and accessibility
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
chamilo-lms/assets/vue/views/user/courses/List.vue

76 lines
1.8 KiB

<template>
<StickyCourses />
<div
v-if="isLoading"
class="grid gap-4 grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4"
>
<Skeleton
height="16rem"
/>
<Skeleton
class="hidden md:block"
height="16rem"
/>
<Skeleton
class="hidden lg:block"
height="16rem"
/>
<Skeleton
class="hidden xl:block"
height="16rem"
/>
</div>
<div
v-if="!isLoading && courses.length > 0"
class="grid gap-4 grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4"
>
<CourseCardList
:courses="courses"
/>
</div>
<EmptyState
v-else-if="!isLoading && 0 === courses.length"
:detail="t('Go to Explore to find a topic of interest, or wait for someone to subscribe you')"
:summary="t('You don\'t have any course yet')"
icon="mdi mdi-book-open-page-variant"
/>
</template>
<script setup>
import { computed, ref } from 'vue';
import { useStore } from 'vuex';
import { useQuery } from '@vue/apollo-composable';
import { useI18n } from 'vue-i18n';
import { GET_COURSE_REL_USER } from '../../../graphql/queries/CourseRelUser.js';
import Skeleton from 'primevue/skeleton';
import StickyCourses from '../../../views/user/courses/StickyCourses.vue';
import CourseCardList from '../../../components/course/CourseCardList.vue';
import EmptyState from '../../../components/EmptyState';
const store = useStore();
const { t } = useI18n();
4 years ago
let user = computed(() => store.getters['security/getUser']);
let courses = ref([]);
let isLoading = ref(true);
if (user.value) {
const { result, loading } = useQuery(
GET_COURSE_REL_USER,
{
user: user.value['@id'],
}
);
isLoading = computed(
() => loading.value
);
4 years ago
courses = computed(
() => result.value?.courseRelUsers.edges.map(({ node }) => node.course) ?? []
);
}
</script>