Chargement des premiers film au mounted du composant.
Formattage.
Showing
5 changed files
with
29 additions
and
38 deletions
| 1 | -<script setup lang="ts"> | 1 | +<script lang="ts" setup></script> |
| 2 | - | ||
| 3 | -</script> | ||
| 4 | 2 | ||
| 5 | <template> | 3 | <template> |
| 6 | <v-locale-provider> | 4 | <v-locale-provider> |
| @@ -12,6 +10,4 @@ | @@ -12,6 +10,4 @@ | ||
| 12 | </v-locale-provider> | 10 | </v-locale-provider> |
| 13 | </template> | 11 | </template> |
| 14 | 12 | ||
| 15 | -<style scoped> | 13 | +<style scoped></style> |
| 16 | - | ||
| 17 | -</style> |
| 1 | -<script setup lang="ts"> | 1 | +<script lang="ts" setup> |
| 2 | //#region --import--. | 2 | //#region --import--. |
| 3 | import SearchBar from "~/components/SearchBar.vue"; | 3 | import SearchBar from "~/components/SearchBar.vue"; |
| 4 | import { ref } from "vue"; | 4 | import { ref } from "vue"; |
| @@ -54,7 +54,13 @@ const fetchMovies = async (page: number) => { | @@ -54,7 +54,13 @@ const fetchMovies = async (page: number) => { | ||
| 54 | isLoadingMore.value = false; | 54 | isLoadingMore.value = false; |
| 55 | } | 55 | } |
| 56 | }; | 56 | }; |
| 57 | -fetchMovies(1) | 57 | +//#endregion |
| 58 | + | ||
| 59 | +//#region --Global event--. | ||
| 60 | +onMounted(() => { | ||
| 61 | + // Chargement des premiers films. | ||
| 62 | + fetchMovies(1); | ||
| 63 | +}); | ||
| 58 | //#endregion | 64 | //#endregion |
| 59 | </script> | 65 | </script> |
| 60 | 66 | ||
| @@ -62,14 +68,12 @@ fetchMovies(1) | @@ -62,14 +68,12 @@ fetchMovies(1) | ||
| 62 | <section> | 68 | <section> |
| 63 | <h1 class="text-4xl font-bold mb-8 text-center">Découvrez les films populaires</h1> | 69 | <h1 class="text-4xl font-bold mb-8 text-center">Découvrez les films populaires</h1> |
| 64 | <!-- Barre de recherche --> | 70 | <!-- Barre de recherche --> |
| 65 | - <search-bar placeholder="Rechercher un film..."/> | 71 | + <search-bar placeholder="Rechercher un film..." /> |
| 66 | <!-- Loading Skeleton --> | 72 | <!-- Loading Skeleton --> |
| 67 | <skeleton-movies-loader :is-initial-loading="isInitialLoading" :skeleton-number="20" /> | 73 | <skeleton-movies-loader :is-initial-loading="isInitialLoading" :skeleton-number="20" /> |
| 68 | <!-- Liste des films --> | 74 | <!-- Liste des films --> |
| 69 | -<!-- <pre>{{ movies }}</pre>--> | 75 | + <!-- <pre>{{ movies }}</pre>--> |
| 70 | </section> | 76 | </section> |
| 71 | </template> | 77 | </template> |
| 72 | 78 | ||
| 73 | -<style scoped> | 79 | +<style scoped></style> |
| 74 | - | ||
| 75 | -</style> |
| 1 | -<script setup lang="ts"> | 1 | +<script lang="ts" setup> |
| 2 | //#region --import--. | 2 | //#region --import--. |
| 3 | import { SearchIcon, XIcon } from "lucide-vue-next"; | 3 | import { SearchIcon, XIcon } from "lucide-vue-next"; |
| 4 | import { ref } from "vue"; | 4 | import { ref } from "vue"; |
| @@ -14,8 +14,8 @@ defineProps({ | @@ -14,8 +14,8 @@ defineProps({ | ||
| 14 | type: String, | 14 | type: String, |
| 15 | required: false, | 15 | required: false, |
| 16 | nullable: false, | 16 | nullable: false, |
| 17 | - default: '' | 17 | + default: "", |
| 18 | - } | 18 | + }, |
| 19 | }); | 19 | }); |
| 20 | //#endregion | 20 | //#endregion |
| 21 | 21 | ||
| @@ -30,11 +30,11 @@ const searchQuery = ref(""); | @@ -30,11 +30,11 @@ const searchQuery = ref(""); | ||
| 30 | <div class="relative max-w-xl mx-auto"> | 30 | <div class="relative max-w-xl mx-auto"> |
| 31 | <input | 31 | <input |
| 32 | v-model="searchQuery" | 32 | v-model="searchQuery" |
| 33 | - type="text" | ||
| 34 | :placeholder="placeholder" | 33 | :placeholder="placeholder" |
| 35 | class="w-full px-4 py-3 bg-gray-800 rounded-full text-white placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-primary" | 34 | class="w-full px-4 py-3 bg-gray-800 rounded-full text-white placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-primary" |
| 35 | + type="text" | ||
| 36 | @input="console.log('debouncedSearch à prévoir')" | 36 | @input="console.log('debouncedSearch à prévoir')" |
| 37 | - > | 37 | + /> |
| 38 | <button | 38 | <button |
| 39 | v-if="searchQuery" | 39 | v-if="searchQuery" |
| 40 | class="absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-white" | 40 | class="absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-white" |
| @@ -49,6 +49,4 @@ const searchQuery = ref(""); | @@ -49,6 +49,4 @@ const searchQuery = ref(""); | ||
| 49 | </section> | 49 | </section> |
| 50 | </template> | 50 | </template> |
| 51 | 51 | ||
| 52 | -<style scoped> | 52 | +<style scoped></style> |
| 53 | - | ||
| 54 | -</style> |
| 1 | -<script setup lang="ts"> | 1 | +<script lang="ts" setup> |
| 2 | //#region --Props--. | 2 | //#region --Props--. |
| 3 | defineProps({ | 3 | defineProps({ |
| 4 | isInitialLoading: { | 4 | isInitialLoading: { |
| @@ -10,26 +10,23 @@ defineProps({ | @@ -10,26 +10,23 @@ defineProps({ | ||
| 10 | type: Number, | 10 | type: Number, |
| 11 | required: false, | 11 | required: false, |
| 12 | nullable: false, | 12 | nullable: false, |
| 13 | - default: 12 | 13 | + default: 12, |
| 14 | - } | 14 | + }, |
| 15 | }); | 15 | }); |
| 16 | //#endregion | 16 | //#endregion |
| 17 | - | ||
| 18 | </script> | 17 | </script> |
| 19 | 18 | ||
| 20 | <template> | 19 | <template> |
| 21 | <!-- Skeleton loader pendant le chargement initial --> | 20 | <!-- 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"> | 21 | <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"> | 22 | <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"/> | 23 | + <div class="h-80 bg-gray-700" /> |
| 25 | <div class="p-4"> | 24 | <div class="p-4"> |
| 26 | - <div class="h-6 bg-gray-700 rounded mb-3"/> | 25 | + <div class="h-6 bg-gray-700 rounded mb-3" /> |
| 27 | - <div class="h-4 bg-gray-700 rounded w-2/3"/> | 26 | + <div class="h-4 bg-gray-700 rounded w-2/3" /> |
| 28 | </div> | 27 | </div> |
| 29 | </div> | 28 | </div> |
| 30 | </section> | 29 | </section> |
| 31 | </template> | 30 | </template> |
| 32 | 31 | ||
| 33 | -<style scoped> | 32 | +<style scoped></style> |
| 34 | - | ||
| 35 | -</style> |
| 1 | -<script setup lang="ts"> | 1 | +<script lang="ts" setup></script> |
| 2 | - | ||
| 3 | -</script> | ||
| 4 | 2 | ||
| 5 | <template> | 3 | <template> |
| 6 | <v-container class="mx-auto px-4 py-8"> | 4 | <v-container class="mx-auto px-4 py-8"> |
| 7 | - <movies-list/> | 5 | + <movies-list /> |
| 8 | </v-container> | 6 | </v-container> |
| 9 | </template> | 7 | </template> |
| 10 | 8 | ||
| 11 | -<style scoped> | 9 | +<style scoped></style> |
| 12 | - | ||
| 13 | -</style> |
-
Please register or login to post a comment