/pokedex

Front-end Technical Challenge

Primary LanguageTypeScript

Pokédex

Este é um projeto de uma Pokédex, criado como parte de um desafio técnico de uma empresa. Ele utiliza Typescript, React e Vite para o front-end, Jest e React Testing Library para testes e ESLint para linting. Este projeto continuará tendo atualizações.

Pokémon é uma franquia de jogos eletrônicos, desenhos animados, filmes e uma variedade de outras mídias, criada no Japão em 1996. Ela gira em torno de criaturas fictícias chamadas Pokémon, que os jogadores capturam, treinam e usam para batalhar entre si. A franquia Pokémon é extremamente popular em todo o mundo, com milhões de jogadores, fãs e colecionadores.

A Pokédex é uma enciclopédia virtual de Pokémon. Ela contém informações detalhadas sobre cada criatura, incluindo suas habilidades, movimentos, estatísticas e evoluções. Na franquia Pokémon, a Pokédex é frequentemente usada pelos jogadores para ajudá-los a completar a coleção de Pokémon, bem como para aprender mais sobre essas criaturas incríveis.


Rotas

O projeto possui as seguintes rotas:

  • /: exibe a página inicial, onde os usuários podem ver cards de diferentes Pokémons. Os usuários também podem pesquisar por um Pokémon específico na barra de pesquisa.

  • /pokemon/:id: exibe mais detalhes sobre um Pokémon específico com base em seu ID.

  • /favorites: exibe todos os Pokémons favoritados pelo usuário.

  • /about: exibe informações sobre o projeto e detalhes de contato.

  • *: exibe uma página de erro caso o usuário acesse uma URL inválida.


API

O projeto utiliza a PokeAPI para buscar informações sobre os Pokémons. A PokeAPI é uma API de código aberto que oferece diversas informações sobre os Pokémons, como suas habilidades, características, entre outras. A URL base da API é https://pokeapi.co/api/v2/, com várias variações disponíveis na documentação.

Para utilizar a PokeAPI, o projeto utiliza a biblioteca Axios para fazer as requisições HTTP para a API. As informações são retornadas em formato JSON e são processadas pelo projeto para serem exibidas nas páginas do site.


Context API

O ContextAPI é uma das funcionalidades do React que permite compartilhar dados entre componentes sem precisar passar props manualmente em cada nível da árvore de componentes. Vantagens do ContextAPI:

  • Reduz a necessidade de passar props manualmente em cada nível da árvore de componentes, tornando o código mais limpo e fácil de ler.
  • Permite compartilhar dados em toda a árvore de componentes sem precisar se preocupar com a hierarquia dos componentes.
  • Facilita a criação de temas personalizados, permitindo que os componentes tenham acesso a um tema global sem a necessidade de passá-lo manualmente em cada componente.
  • Ajuda a manter o estado da aplicação em um único lugar, tornando mais fácil a manipulação e a atualização dos dados.
  • Permite o uso de múltiplos contextos em uma única aplicação, tornando a organização e a estruturação da aplicação mais flexíveis.
  • Melhora a performance da aplicação, uma vez que reduz a necessidade de atualizar vários componentes ao mesmo tempo.

Dark Mode

O dark mode é uma opção de interface de usuário que permite que o usuário mude a aparência da página de um esquema de cores claro para um esquema de cores escuro. Ele é particularmente útil para pessoas que preferem interfaces de usuário mais escuras ou para pessoas que trabalham em ambientes com pouca iluminação.

Na Pokédex, o dark mode foi implementado de forma que o usuário pode ativar ou desativar a opção por meio de um botão localizado no canto superior esquerdo. A implementação foi feita usando renderização condicional e CSS em conjunto com Typescript e React, sem a necessidade de usar bibliotecas externas.

A renderização condicional é feita usando a sintaxe de interpolação de string em CSS, com o estado isDarkModeOn que controla a classe CSS aplicada aos elementos da página. Exemplo:

className={ isDarkModeOn ? 'grid-container dark-mode' : 'grid-container' }

Essa abordagem é simples e flexível, permitindo que o usuário altere a aparência da página de acordo com suas preferências.


Responsividade

A responsividade é uma técnica de design que permite que o layout de um site ou aplicativo se adapte ao tamanho da tela em que ele está sendo exibido. Na Pokedex, foi utilizada a técnica de responsividade por meio de media queries do CSS para criar uma experiência de usuário mais agradável em diferentes dispositivos.

Ao tornar a Pokedex responsiva, garantimos que ela seja acessível em uma ampla gama de dispositivos, desde smartphones até desktops. Além disso, a responsividade também ajuda a melhorar a velocidade de carregamento do site, reduzindo o tempo necessário para carregar imagens e outros elementos da página.

Todas as adaptações foram feitas utilizando apenas CSS, o que torna o processo de manutenção mais simples e fácil de entender. Em vez de ter que lidar com diferentes versões do código para diferentes dispositivos, a responsividade por meio de media queries permite que todo o código seja mantido em um único arquivo.


Testes

Foram implementados testes automatizados para garantir que a aplicação funcione corretamente e evitar possíveis erros no código. Esses testes foram escritos usando React Testing Library e Jest, e incluem testes unitários e de integração. Os testes unitários verificam a funcionalidade de componentes individuais da aplicação, enquanto os testes de integração verificam o comportamento de componentes quando interagem uns com os outros. A utilização de React Testing Library e Jest permite que os testes sejam escritos de forma simples e eficiente, garantindo que a aplicação continue funcionando corretamente mesmo após as alterações no código.



COMO INSTALAR A POKÉDEX

Instalação


  • Clone o repositório git@github.com:Rafael-Souza-97/pokedex.git:
git clone git@github.com:Rafael-Souza-97/exchange-pokedex.git

  • Entre na pasta do repositório que você acabou de clonar:
cd pokedex

  • Instale as depëndencias, caso necessário, com npm install:
npm install


Executando a aplicação:

  • Execute a aplicação com com npm start:

Executará a aplicação em modo de desenvolvimento.

npm start

Abra http://localhost:3000 no seu navegador para visualiza-lo.



Testando a aplicação:

  • Execute os testes com npm teste:

Executará os testes unitários e testes de integração.

npm test


Contribuição

Contribuições são sempre bem-vindas! Para contribuir com o projeto, siga as instruções abaixo:

  • Fork este repositório

Crie uma nova branch com sua feature ou correção de bug:

git checkout -b sua-feature-ou-correcao
  • Faça as alterações necessárias e commit as mudanças:
git commit -m "sua mensagem de commit"
  • Envie suas alterações para seu repositório remoto:
git push origin sua-feature-ou-correcao
  • Crie um Pull Request para o repositório original.


Autor

Referências

Tecnologias / Ferramentas utilizadas

Testes


Site / Deploy

Vídeo / Preview

Pokedex.mp4