Giter Site home page Giter Site logo

frontend-fdte's Introduction

pokemon

Teste Front-End ReactJS

📝 Fluxo e Funcionalidades da aplicação

  • Landing page com um botão para iniciar a aplicação (qualquer url inexistente deve redirecionar o usuário para essa landing page).
  • Personagem no centro da página.
  • Barra na esquerda indicando quantos Pokémons ele já capturou (limite de 6) + botão de criação.
  • Ao passar o mouse no personagem é exibido o tooltip correspondente.
  • Ao clicar no personagem é feita uma busca por um Pokémon aleatório (id de 1 a 807).
  • Com o resultado da busca é aberto um modal mostrando os detalhes do Pokémon.
  • Usuário tem a opção de capturá-lo, clicando na pokébola, ou fechar o modal.
  • Se ele capturar o Pokémon, esse Pokémon é exibido na SideBar e o modal de captura desaparece.
  • Usuário pode capturar até 6 Pokémons.
  • Selecionando qualquer Pokémon na SideBar o usuário pode ver os detalhes do Pokémon.
  • O(s) tipo(s) do Pokémon deve ser traduzido (ex: water => Água).
  • Usuário pode editar SOMENTE o nome de um Pokémon que foi capturado.
  • Na SideBar o usuário tem a possibilidade de criar um Pokémon (um Pokémon pode ter no máximo 2 "tipos").
  • O formulário de criação de Pokémon deve conter validações em todos os campos.
  • Caso algum campo não esteja preenchido, o botão de criação deve ficar bloqueado.
  • Para um Pokémon criado o usuário pode editar qualquer informação ou liberá-lo.
  • Sempre que liberar um Pokémon é possível capturar outro através da busca ou criar um customizado.
  • Caso as 6 posições estejam ocupadas o usuário não pode mais buscar nem criar novos Pokémons.
  • Responsividade para resoluções desktop e mobile. (Ex: 1280 x 720, 360 x 740)

🚀 Tecnologias

Para a resolução do desafio, fique a vontade para utilizar as tecnologias citadas abaixo:

  • vite
  • vitest
  • zustand
  • react-query
  • axios
  • eslint
  • styled-components
  • typescript
  • react-hook-form
  • react-testing-library
  • zod

Opcional

Tests

  • Os testes foram feitos em áreas estratégicas para que o foco fosse funcionalidade.
    • Store (onde todas requisicoes de CREATE / UPDATE / DELETE devem acontecer)
    • Adapters (onde os dados são simplificados para o uso real)

Decisões Técnicas

  • Uso do styled-components: Facilita pois não há necessidade de transicionar entre o diretório src/components e assets/styles/sass/components
  • Algumas estruturas de layout foram alteradas para simplificar o desenvolvimento
    • Botões de salvar e fechar edição
    • Novo input de URL de imagem, valida se a imagem tem os formator png e jpg
  • O modal não possui a funcionalidade 'click-outside', foi um débito que decidi ter para facilitar o desenvolvimento
  • Uso do react-query: manejar a interação do cliente com as requisições, mas por ser uma unica requisição de busca o axios ou mesmo a fetch-api supriria a necessidade sozinho, acabei adicionando no projeto pela frequência que uso em projetos maiores.
  • Zustand para gerenciamento de estado: simplifica o setup de um reducer e possibilita o uso de funções assíncronas que ocorreriam na evolução do app.
  • Zod para validação de formulários: Há uma grande competição com a lib Yup, mas o Zod trás consigo formas sincronas de validação e uma variadade de utilitárias que melhoram o DX com typescript.
  • Vite: Como por padrão de projetos com javascript, utilizo sempre o typescript para evitar problemas futuros, o Vite ajudou por ter um setup simples e rápido já integrado. Caso uma evolução do app venha a ter autenticação, permissionamento e afins, o Nextjs pode ser mais util por conta de libs que facilitam o setup inicial (NextAuth, Clerk).
  • O arquivo de formulário poderia ser simplificado em outros pequenos componentes.
  • Hook-form: performance e DX, com suas APIs bem documentadas, uso de refs para o gerenciamento de estados e componentes que facilitam a customização de inputs.

frontend-fdte's People

Contributors

alysonvilela avatar erickvilela2006 avatar danilopessoa avatar pcasari-fdte avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.