This commit is contained in:
jleroy2023
2025-07-15 12:00:39 +02:00
parent de9ca3c4c1
commit 1851ae84e4
6 changed files with 34 additions and 16 deletions

View File

@@ -1,7 +1,7 @@
<template> <template>
<v-footer color="grey darken-3" padless> <v-footer color="grey darken-3" padless>
<v-col class="text-center white--text py-4"> <v-col class="text-center white--text py-4">
© {{ new Date().getFullYear() }} Made by Le J © {{ new Date().getFullYear() }} Par Johan Leroy
</v-col> </v-col>
</v-footer> </v-footer>
</template> </template>

View File

@@ -3,21 +3,32 @@
:items="generations" :items="generations"
v-model="internalSelected" v-model="internalSelected"
label="Filtrer par génération" label="Filtrer par génération"
multiple
/> />
</template> </template>
<script> <script>
export default { export default {
props: ['selected'], props: {
selected: {
type: Array,
default: () => []
}
},
data() { data() {
return { return {
generations: [1, 2, 3, 4, 5, 6, 7, 8, 9], generations: [1, 2, 3, 4, 5, 6, 7, 8, 9],
internalSelected: this.selected internalSelected: []
} }
}, },
created() {
this.internalSelected = this.selected.length ? [...this.selected] : [...this.generations]
},
watch: { watch: {
selected(newVal) { selected(newVal) {
this.internalSelected = newVal if (JSON.stringify(newVal) !== JSON.stringify(this.internalSelected)) {
this.internalSelected = [...newVal]
}
}, },
internalSelected(newVal) { internalSelected(newVal) {
this.$emit('change', newVal) this.$emit('change', newVal)

View File

@@ -1,5 +1,5 @@
<template> <template>
<v-app-bar color="deep-purple accent-4" dark> <v-app-bar color="deep-purple accent-4" dark>
<v-toolbar-title class="text-white">Tyradex Pokédex</v-toolbar-title> <v-toolbar-title class="text-white">Mon pokédex</v-toolbar-title>
</v-app-bar> </v-app-bar>
</template> </template>

View File

@@ -1,6 +1,6 @@
<template> <template>
<v-col cols="12" sm="4" md="3"> <v-col cols="12" sm="4" md="3">
<v-card class="hover:scale-105 transition" @click="$router.push('/pokemon/' + pokemon.id)"> <v-card class="hover:scale-105 transition" @click="$router.push('/pokemon/' + pokemon.pokedex_id)">
<v-img :src="pokemon.sprites.regular" height="200px" /> <v-img :src="pokemon.sprites.regular" height="200px" />
<v-card-title>{{ pokemon.name.fr }}</v-card-title> <v-card-title>{{ pokemon.name.fr }}</v-card-title>
</v-card> </v-card>

View File

@@ -5,7 +5,7 @@
<v-row> <v-row>
<PokemonCard <PokemonCard
v-for="poke in pokemons" v-for="poke in pokemons"
:key="poke.id" :key="poke.pokedex_id"
:pokemon="poke" :pokemon="poke"
/> />
</v-row> </v-row>
@@ -20,21 +20,28 @@ import GenerationFilter from '@/components/GenerationFilter.vue'
export default { export default {
components: { PokemonCard, GenerationFilter }, components: { PokemonCard, GenerationFilter },
data: () => ({ data() {
selectedGen: 1, return {
pokemons: [], // Toutes les générations par défaut, donc on montre tout au départ
}), selectedGen: [1, 2, 3, 4, 5, 6, 7, 8, 9],
pokemons: [],
}
},
async mounted() { async mounted() {
await this.loadPokemons() await this.loadPokemons()
}, },
methods: { methods: {
async loadPokemons() { async loadPokemons() {
const res = await axios.get('https://tyradex.vercel.app/api/v1') try {
const all = res.data const res = await axios.get('https://tyradex.vercel.app/api/v1/pokemon')
this.pokemons = all.filter(p => p.generation.id === this.selectedGen) const all = res.data
this.pokemons = all.filter(p => this.selectedGen.includes(p.generation))
} catch (error) {
console.error('Erreur lors du chargement des pokémons :', error)
}
}, },
async onGenChange(gen) { async onGenChange(gen) {
this.selectedGen = gen this.selectedGen = Array.isArray(gen) ? gen : [gen]
await this.loadPokemons() await this.loadPokemons()
}, },
} }

View File

@@ -14,7 +14,7 @@ import axios from 'axios'
export default { export default {
async asyncData({ params }) { async asyncData({ params }) {
const { data } = await axios.get(`https://tyradex.vercel.app/api/v1/${params.id}`) const { data } = await axios.get(`https://tyradex.vercel.app/api/v1/pokemon/${params.id}`)
return { pokemon: data } return { pokemon: data }
} }
} }