Ajout composant Poster.
Déclacement du composant SearchBar dans le fichier ui-components.
Showing
5 changed files
with
46 additions
and
19 deletions
| 1 | <script lang="ts" setup> | 1 | <script lang="ts" setup> |
| 2 | //#region --import--. | 2 | //#region --import--. |
| 3 | -import SearchBar from "~/components/SearchBar.vue"; | ||
| 4 | import { onBeforeUnmount, ref } from "vue"; | 3 | import { onBeforeUnmount, ref } from "vue"; |
| 5 | import { useTMDB } from "~/composables/tMDB"; | 4 | import { useTMDB } from "~/composables/tMDB"; |
| 6 | import { Movie } from "~/models/movie"; | 5 | import { Movie } from "~/models/movie"; |
| @@ -155,7 +154,7 @@ onBeforeUnmount(() => { | @@ -155,7 +154,7 @@ onBeforeUnmount(() => { | ||
| 155 | <section> | 154 | <section> |
| 156 | <h1 class="text-4xl font-bold mb-8 text-center">Découvrez les films populaires</h1> | 155 | <h1 class="text-4xl font-bold mb-8 text-center">Découvrez les films populaires</h1> |
| 157 | <!-- Barre de recherche --> | 156 | <!-- Barre de recherche --> |
| 158 | - <search-bar | 157 | + <ui-components-search-bar |
| 159 | placeholder="Rechercher un film..." | 158 | placeholder="Rechercher un film..." |
| 160 | @event:search="handleSearchEvent" | 159 | @event:search="handleSearchEvent" |
| 161 | @event:clear_search="handleClearSearchEvent" | 160 | @event:clear_search="handleClearSearchEvent" |
| 1 | <script lang="ts" setup> | 1 | <script lang="ts" setup> |
| 2 | -//#region --Props--. | 2 | +//#region --Import--. |
| 3 | import type { Genre } from "~/interfaces/movie"; | 3 | import type { Genre } from "~/interfaces/movie"; |
| 4 | +//#endregion | ||
| 4 | 5 | ||
| 5 | -const props = defineProps({ | 6 | +//#region --Props--. |
| 7 | +defineProps({ | ||
| 6 | genres: { | 8 | genres: { |
| 7 | type: Array<Genre>, | 9 | type: Array<Genre>, |
| 8 | required: true, | 10 | required: true, |
components/ui-components/Poster.vue
0 → 100644
| 1 | +<script setup lang="ts"> | ||
| 2 | +//#region --Props--. | ||
| 3 | +import { FilmIcon } from "lucide-vue-next"; | ||
| 4 | + | ||
| 5 | +defineProps({ | ||
| 6 | + src: { | ||
| 7 | + type: String, | ||
| 8 | + required: true, | ||
| 9 | + nullable: false, | ||
| 10 | + }, | ||
| 11 | + title: { | ||
| 12 | + type: String, | ||
| 13 | + required: true, | ||
| 14 | + nullable: false, | ||
| 15 | + }, | ||
| 16 | +}); | ||
| 17 | +//#endregion | ||
| 18 | +</script> | ||
| 19 | + | ||
| 20 | +<template> | ||
| 21 | + <section class="w-full md:w-1/3 lg:w-1/4"> | ||
| 22 | + <div class="rounded-lg overflow-hidden shadow-lg bg-gray-800"> | ||
| 23 | + <img | ||
| 24 | + v-if="src" | ||
| 25 | + :alt="title" | ||
| 26 | + :src="`https://image.tmdb.org/t/p/w500${src}`" | ||
| 27 | + class="w-full h-auto" | ||
| 28 | + /> | ||
| 29 | + <div v-else class="aspect-[2/3] bg-gray-700 flex items-center justify-center"> | ||
| 30 | + <FilmIcon :size="64" class="text-gray-500" /> | ||
| 31 | + </div> | ||
| 32 | + </div> | ||
| 33 | + </section> | ||
| 34 | +</template> | ||
| 35 | + | ||
| 36 | +<style scoped> | ||
| 37 | + | ||
| 38 | +</style> |
| @@ -147,22 +147,10 @@ onMounted(() => { | @@ -147,22 +147,10 @@ onMounted(() => { | ||
| 147 | 147 | ||
| 148 | <div class="flex flex-col md:flex-row gap-8"> | 148 | <div class="flex flex-col md:flex-row gap-8"> |
| 149 | <!-- Poster --> | 149 | <!-- Poster --> |
| 150 | - <div class="w-full md:w-1/3 lg:w-1/4"> | 150 | + <ui-components-poster v-if="movie.poster_path" :src="movie.poster_path" :title="movie.title" /> |
| 151 | - <div class="rounded-lg overflow-hidden shadow-lg bg-gray-800"> | ||
| 152 | - <img | ||
| 153 | - v-if="movie.poster_path" | ||
| 154 | - :alt="movie.title" | ||
| 155 | - :src="`https://image.tmdb.org/t/p/w500${movie.poster_path}`" | ||
| 156 | - class="w-full h-auto" | ||
| 157 | - /> | ||
| 158 | - <div v-else class="aspect-[2/3] bg-gray-700 flex items-center justify-center"> | ||
| 159 | - <FilmIcon :size="64" class="text-gray-500" /> | ||
| 160 | - </div> | ||
| 161 | - </div> | ||
| 162 | - </div> | ||
| 163 | 151 | ||
| 164 | <!-- Informations du film --> | 152 | <!-- Informations du film --> |
| 165 | - <div class="w-full md:w-2/3 lg:w-3/4"> | 153 | + <section class="w-full md:w-2/3 lg:w-3/4"> |
| 166 | <h1 class="text-3xl md:text-4xl font-bold mb-2">{{ movie.title }}</h1> | 154 | <h1 class="text-3xl md:text-4xl font-bold mb-2">{{ movie.title }}</h1> |
| 167 | <p v-if="movie.release_date" class="text-gray-400 mb-4"> | 155 | <p v-if="movie.release_date" class="text-gray-400 mb-4"> |
| 168 | {{ useDateFormat(movie.release_date, "DD-MM-YYYY") }} • {{ formatRuntime(movie.runtime) }} | 156 | {{ useDateFormat(movie.release_date, "DD-MM-YYYY") }} • {{ formatRuntime(movie.runtime) }} |
| @@ -196,7 +184,7 @@ onMounted(() => { | @@ -196,7 +184,7 @@ onMounted(() => { | ||
| 196 | }} | 184 | }} |
| 197 | </div> | 185 | </div> |
| 198 | </div> | 186 | </div> |
| 199 | - </div> | 187 | + </section> |
| 200 | </div> | 188 | </div> |
| 201 | </div> | 189 | </div> |
| 202 | </div> | 190 | </div> |
-
Please register or login to post a comment