Skip to content

Commit 2cce9dc

Browse files
[IMP] Add old abilities
1 parent 97853d5 commit 2cce9dc

File tree

2 files changed

+46
-1
lines changed

2 files changed

+46
-1
lines changed

main.ts

+16-1
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,18 @@ function renderPokemonIndex(pokemons: Array<Pokemon>): string {
124124
<td class="value abilities-text">${ability.description}</td>
125125
</tr>`;
126126
})
127-
.join('\n');
127+
.join('\n');
128+
const pastAbilitiesTableRows = pokemon.pastAbilities
129+
.map(ability => {
130+
const hiddenTag = ability.is_hidden ? `<span class="hidden-ability">hidden</span>` : '';
131+
const generationTag = ability.generation ? `<span class="generation-ability">until ${ability.generation}</span>` : '';
132+
return `
133+
<tr>
134+
<td class="attribute abilities-text">${ability.name.charAt(0).toUpperCase() + ability.name.slice(1)}: ${hiddenTag} ${generationTag}</td>
135+
<td class="value abilities-text">${ability.description}</td>
136+
</tr>`;
137+
})
138+
.join('\n');
128139
const getStatBar = (value: number, maxValue: number) => {
129140
const percentage = Math.round((value / maxValue) * 100);
130141
const greenThreshold = 35;
@@ -192,6 +203,10 @@ function renderPokemonIndex(pokemons: Array<Pokemon>): string {
192203
<th colspan="2" class="section-title-cell">Pokémon Abilities</th>
193204
</tr>
194205
${abilitiesTableRows}
206+
<tr style="${pokemon.pastAbilities ? '' : 'display: none;'}>
207+
<th colspan="2" class="section-title-cell">Pokémon Old Abilities</th>
208+
</tr>
209+
${pokemon.pastAbilities ? pastAbilitiesTableRows : ''}
195210
</table>
196211
<table>
197212
<tr>

pokemon-detail.ts

+30
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ interface Ability {
88
name: string;
99
description: string;
1010
is_hidden: boolean;
11+
generation?: any;
1112
}
1213

1314
interface Stat {
@@ -31,6 +32,7 @@ export class PokemonDetails {
3132
public weight: number,
3233
public types: string[],
3334
public abilities: Ability[],
35+
public pastAbilities: Ability[],
3436
public superWeakTo: string[],
3537
public weakTo: string[],
3638
public normal: string[],
@@ -62,6 +64,26 @@ export class PokemonDetails {
6264
is_hidden: abilityData.is_hidden,
6365
};
6466
});
67+
const pastAbilitiesData = Ability[]
68+
data.past_abilities.forEach((pastAbilityData: any) => {
69+
const generationName = await getGenerationName(pastAbilityData.generation);
70+
pastAbilityData.abilities.forEach((abilityData: any) => {
71+
pastAbilitiesData.push({
72+
ability: abilityData.ability,
73+
is_hidden: abilityData.is_hidden,
74+
generation: generationName,
75+
});
76+
});
77+
});
78+
const pastAbilitiesDescriptions = await getAbilitiesDescriptions(pastAbilitiesData);
79+
const pastAbilities = pastAbilitiesData.map((abilityData: any, index: number) => {
80+
return {
81+
name: abilityData.ability.name,
82+
description: pastAbilitiesDescriptions[index],
83+
is_hidden: abilityData.is_hidden,
84+
generation: abilityData.generation,
85+
};
86+
});
6587
const stats = data.stats.map((stat: any) => {
6688
return {
6789
name: stat.stat.name,
@@ -83,6 +105,7 @@ export class PokemonDetails {
83105
weight,
84106
types,
85107
abilities,
108+
pastAbilities,
86109
damageRelations.superWeakTo,
87110
damageRelations.weakTo,
88111
damageRelations.normal,
@@ -114,6 +137,13 @@ export class PokemonDetails {
114137
return descriptions;
115138
}
116139

140+
sync function getGenerationName(generationData: { url: string }): Promise<string> {
141+
const response = await fetch(generationData.url);
142+
const data = await response.json();
143+
const englishName = data.names.find((entry: { language: { name: string } }) => entry.language.name === 'en').name;
144+
return englishName;
145+
}
146+
117147
async function getPokemonDescriptions(pokemonId: number): Promise<DexDescription[]> {
118148
const response = await fetch(`https://pokeapi.co/api/v2/pokemon-species/${pokemonId}`);
119149
const data = await response.json();

0 commit comments

Comments
 (0)