Création du composant SkeletonMoviesLoader et déplacement du skeleton existant d…
…ans le composant MoviesList..
Showing
3 changed files
with
39 additions
and
13 deletions
@@ -3,4 +3,5 @@ | @@ -3,4 +3,5 @@ | ||
3 | - Ajout page index. | 3 | - Ajout page index. |
4 | - Modification app.vue afin d'initialiser l'app avec vuetify et NuxtPage pour démarrer sur la page index. | 4 | - Modification app.vue afin d'initialiser l'app avec vuetify et NuxtPage pour démarrer sur la page index. |
5 | - Création du composant MoviesList. | 5 | - Création du composant MoviesList. |
6 | -- Création du composant SearchBar. | 6 | +- Création du composant SearchBar. |
7 | +- Création du composant SkeletonMoviesLoader. |
@@ -12,20 +12,10 @@ const isInitialLoading = ref(true); | @@ -12,20 +12,10 @@ const isInitialLoading = ref(true); | ||
12 | <template> | 12 | <template> |
13 | <section> | 13 | <section> |
14 | <h1 class="text-4xl font-bold mb-8 text-center">Découvrez les films populaires</h1> | 14 | <h1 class="text-4xl font-bold mb-8 text-center">Découvrez les films populaires</h1> |
15 | - | ||
16 | <!-- Barre de recherche --> | 15 | <!-- Barre de recherche --> |
17 | <search-bar placeholder="Rechercher un film..."/> | 16 | <search-bar placeholder="Rechercher un film..."/> |
18 | - | 17 | + <!-- Loading Skeleton --> |
19 | - <!-- Skeleton loader pendant le chargement initial --> | 18 | + <skeleton-movies-loader :is-initial-loading="isInitialLoading" :skeleton-number="20" /> |
20 | - <div v-if="isInitialLoading" class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6"> | ||
21 | - <div v-for="i in 8" :key="i" class="bg-gray-800 rounded-lg overflow-hidden shadow-lg animate-pulse"> | ||
22 | - <div class="h-80 bg-gray-700"/> | ||
23 | - <div class="p-4"> | ||
24 | - <div class="h-6 bg-gray-700 rounded mb-3"/> | ||
25 | - <div class="h-4 bg-gray-700 rounded w-2/3"/> | ||
26 | - </div> | ||
27 | - </div> | ||
28 | - </div> | ||
29 | </section> | 19 | </section> |
30 | </template> | 20 | </template> |
31 | 21 |
components/SkeletonMoviesLoader.vue
0 → 100644
1 | +<script setup lang="ts"> | ||
2 | +//#region --Props--. | ||
3 | +defineProps({ | ||
4 | + isInitialLoading: { | ||
5 | + type: Boolean, | ||
6 | + required: true, | ||
7 | + nullable: false, | ||
8 | + }, | ||
9 | + skeletonNumber: { | ||
10 | + type: Number, | ||
11 | + required: false, | ||
12 | + nullable: false, | ||
13 | + default: 12 | ||
14 | + } | ||
15 | +}); | ||
16 | +//#endregion | ||
17 | + | ||
18 | +</script> | ||
19 | + | ||
20 | +<template> | ||
21 | + <!-- Skeleton loader pendant le chargement initial --> | ||
22 | + <section v-if="isInitialLoading" class="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6"> | ||
23 | + <div v-for="i in skeletonNumber" :key="i" class="bg-gray-800 rounded-lg overflow-hidden shadow-lg animate-pulse"> | ||
24 | + <div class="h-80 bg-gray-700"/> | ||
25 | + <div class="p-4"> | ||
26 | + <div class="h-6 bg-gray-700 rounded mb-3"/> | ||
27 | + <div class="h-4 bg-gray-700 rounded w-2/3"/> | ||
28 | + </div> | ||
29 | + </div> | ||
30 | + </section> | ||
31 | +</template> | ||
32 | + | ||
33 | +<style scoped> | ||
34 | + | ||
35 | +</style> |
-
Please register or login to post a comment