@@ -118,12 +118,11 @@ exports.createPages = async function createPages({ graphql, actions }) {
118
118
} )
119
119
120
120
allPokemon . forEach ( async ( { node } ) => {
121
- const pokemonName = node . name . includes ( "deoxys-normal" )
122
- ? "deoxys"
123
- : node . name
121
+ const pokemonName = node . name
122
+ const pokemonSpeciesName = patchPokemonSpeciesName ( pokemonName )
124
123
const pokemonSpeciesResult = await graphql ( `
125
124
{
126
- pokeapiPokemonSpecies(name: { eq: "${ pokemonName } " }) {
125
+ pokeapiPokemonSpecies(name: { eq: "${ pokemonSpeciesName } " }) {
127
126
evolution_chain {
128
127
url
129
128
}
@@ -193,9 +192,9 @@ exports.createPages = async function createPages({ graphql, actions }) {
193
192
path : `/pokemon/${ pokemonName } ` ,
194
193
component : require . resolve ( `./src/templates/pokemon.js` ) ,
195
194
context : {
196
- // Data passed to context is available
197
- // in page queries as GraphQL variables.
195
+ // Data passed to context is available in page queries as GraphQL variables.
198
196
name : pokemonName ,
197
+ speciesName : pokemonSpeciesName ,
199
198
evolutionChainId,
200
199
evolutionChainSpriteIds,
201
200
varietySpriteIds,
@@ -210,6 +209,124 @@ exports.createPages = async function createPages({ graphql, actions }) {
210
209
} )
211
210
}
212
211
212
+ /**
213
+ *
214
+ * @param {string } pokemonName
215
+ * @description
216
+ * Some Pokémon have different name and species name,
217
+ * so we have to "patch" them to avoid errors
218
+ * @example replaces "deoxys-attack" with "deoxys"
219
+ * @returns {string }
220
+ */
221
+ function patchPokemonSpeciesName ( pokemonName = "" ) {
222
+ // Generation III
223
+ if ( pokemonName . includes ( "deoxys" ) ) {
224
+ return "deoxys"
225
+ }
226
+
227
+ // Generation IV
228
+ else if ( pokemonName . includes ( "wormadam" ) ) {
229
+ return "wormadam"
230
+ } else if ( pokemonName . includes ( "giratina" ) ) {
231
+ return "giratina"
232
+ } else if ( pokemonName . includes ( "shaymin" ) ) {
233
+ return "shaymin"
234
+ }
235
+
236
+ // Generation V
237
+ else if ( pokemonName . includes ( "basculin" ) ) {
238
+ return "basculin"
239
+ } else if ( pokemonName . includes ( "-ordinary" ) ) {
240
+ return pokemonName . replace ( "-ordinary" , "" )
241
+ } else if ( pokemonName . includes ( "-incarnate" ) ) {
242
+ return pokemonName . replace ( "-incarnate" , "" )
243
+ } else if ( pokemonName . includes ( "-standard" ) ) {
244
+ return pokemonName . replace ( "-standard" , "" )
245
+ } else if ( pokemonName . includes ( "meloetta" ) ) {
246
+ return "meloetta"
247
+ }
248
+
249
+ // Generation VI
250
+ else if ( pokemonName . includes ( "aegislash" ) ) {
251
+ return "aegislash"
252
+ } else if ( pokemonName . includes ( "-male" ) ) {
253
+ return pokemonName . replace ( "-male" , "" )
254
+ } else if ( pokemonName . includes ( "-average" ) ) {
255
+ return pokemonName . replace ( "-average" , "" )
256
+ }
257
+
258
+ // Generation VII
259
+ else if ( pokemonName . includes ( "wishiwashi" ) ) {
260
+ return "wishiwashi"
261
+ } else if ( pokemonName . includes ( "lycanroc" ) ) {
262
+ return "lycanroc"
263
+ } else if ( pokemonName . includes ( "oricorio" ) ) {
264
+ return "oricorio"
265
+ } else if ( pokemonName . includes ( "mimikyu" ) ) {
266
+ return "mimikyu"
267
+ } else if ( pokemonName . includes ( "minior" ) ) {
268
+ return "minior"
269
+ }
270
+
271
+ // Alola, mega evolutions and other pokémon varieties
272
+ else if ( pokemonName . includes ( "pikachu" ) ) {
273
+ return "pikachu"
274
+ } else if ( pokemonName . includes ( "-totem-alola" ) ) {
275
+ return pokemonName . replace ( "-totem-alola" , "" )
276
+ } else if ( pokemonName . includes ( "-alola" ) ) {
277
+ return pokemonName . replace ( "-alola" , "" )
278
+ } else if ( pokemonName . includes ( "-totem" ) ) {
279
+ return pokemonName . replace ( "-totem" , "" )
280
+ } else if ( pokemonName . includes ( "-mega" ) ) {
281
+ if ( pokemonName . includes ( "-mega-y" ) ) {
282
+ return pokemonName . replace ( "-mega-y" , "" )
283
+ } else if ( pokemonName . includes ( "-mega-x" ) ) {
284
+ return pokemonName . replace ( "-mega-x" , "" )
285
+ }
286
+ return pokemonName . replace ( "-mega" , "" )
287
+ } else if ( pokemonName . includes ( "zygarde" ) ) {
288
+ return "zygarde"
289
+ } else if ( pokemonName . includes ( "-primal" ) ) {
290
+ return pokemonName . replace ( "-primal" , "" )
291
+ } else if ( pokemonName . includes ( "-average" ) ) {
292
+ return pokemonName . replace ( "-average" , "" )
293
+ } else if ( pokemonName . includes ( "-small" ) ) {
294
+ return pokemonName . replace ( "-small" , "" )
295
+ } else if ( pokemonName . includes ( "-large" ) ) {
296
+ return pokemonName . replace ( "-large" , "" )
297
+ } else if ( pokemonName . includes ( "-super" ) ) {
298
+ return pokemonName . replace ( "-super" , "" )
299
+ } else if ( pokemonName . includes ( "-female" ) ) {
300
+ return pokemonName . replace ( "-female" , "" )
301
+ } else if ( pokemonName . includes ( "-original" ) ) {
302
+ return pokemonName . replace ( "-original" , "" )
303
+ } else if ( pokemonName . includes ( "-therian" ) ) {
304
+ return pokemonName . replace ( "-therian" , "" )
305
+ } else if ( pokemonName . includes ( "-ethernal" ) ) {
306
+ return pokemonName . replace ( "-ethernal" , "" )
307
+ } else if ( pokemonName . includes ( "-white" ) ) {
308
+ return pokemonName . replace ( "-white" , "" )
309
+ } else if ( pokemonName . includes ( "-black" ) ) {
310
+ return pokemonName . replace ( "-black" , "" )
311
+ } else if ( pokemonName . includes ( "-resolute" ) ) {
312
+ return pokemonName . replace ( "-resolute" , "" )
313
+ } else if ( pokemonName . includes ( "-zen" ) ) {
314
+ return pokemonName . replace ( "-zen" , "" )
315
+ } else if ( pokemonName . includes ( "-eternal" ) ) {
316
+ return pokemonName . replace ( "-eternal" , "" )
317
+ } else if ( pokemonName . includes ( "greninja" ) ) {
318
+ return "greninja"
319
+ } else if ( pokemonName . includes ( "hoopa" ) ) {
320
+ return "hoopa"
321
+ } else if ( pokemonName . includes ( "rotom" ) ) {
322
+ return "rotom"
323
+ } else if ( pokemonName . includes ( "castform" ) ) {
324
+ return "castform"
325
+ }
326
+
327
+ return pokemonName
328
+ }
329
+
213
330
function getEvolutionChainNames ( evolutionChain ) {
214
331
try {
215
332
const { species, evolves_to } = evolutionChain . chain
0 commit comments